@syncfusion/ej2-querybuilder 19.2.60 → 19.3.53
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.
- package/.eslintrc.json +1 -1
- package/CHANGELOG.md +17 -0
- package/dist/ej2-querybuilder.umd.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es2015.js +176 -66
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +174 -64
- package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
- package/dist/global/ej2-querybuilder.min.js +2 -2
- package/dist/global/ej2-querybuilder.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/helpers/e2e/index.d.ts +1 -0
- package/helpers/e2e/index.js +6 -0
- package/helpers/e2e/querybuilderHelper.d.ts +37 -0
- package/helpers/e2e/querybuilderHelper.js +36 -0
- package/package.json +11 -11
- package/src/query-builder/query-builder-model.d.ts +10 -3
- package/src/query-builder/query-builder.d.ts +17 -2
- package/src/query-builder/query-builder.js +174 -64
- package/styles/bootstrap5-dark.css +962 -0
- package/styles/bootstrap5-dark.scss +1 -0
- package/styles/bootstrap5.css +962 -0
- package/styles/bootstrap5.scss +1 -0
- package/styles/material-dark.css +3 -3
- package/styles/query-builder/_bootstrap5-dark-definition.scss +1 -0
- package/styles/query-builder/_bootstrap5-definition.scss +107 -0
- package/styles/query-builder/_tailwind-dark-definition.scss +1 -106
- package/styles/query-builder/_tailwind-definition.scss +17 -16
- package/styles/query-builder/_theme.scss +1 -1
- package/styles/query-builder/bootstrap5-dark.css +962 -0
- package/styles/query-builder/bootstrap5-dark.scss +15 -0
- package/styles/query-builder/bootstrap5.css +962 -0
- package/styles/query-builder/bootstrap5.scss +15 -0
- package/styles/query-builder/icons/_bootstrap5-dark.scss +1 -0
- package/styles/query-builder/icons/_bootstrap5.scss +8 -0
- package/styles/query-builder/icons/_tailwind.scss +1 -1
- package/styles/query-builder/material-dark.css +3 -3
- package/styles/query-builder/tailwind-dark.css +9 -9
- package/styles/query-builder/tailwind.css +10 -10
- package/styles/tailwind-dark.css +9 -9
- package/styles/tailwind.css +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.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 */\nimport { Component, NotifyPropertyChanges, getComponent, Browser } 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, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection } 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 } 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 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(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' };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = 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].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.rule = { condition: 'and', not: false, rules: [] };\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.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\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]);\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 || this.isLocale) {\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.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\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]);\n if (!columns[i].operators || this.isLocale) {\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 col[i].field = field ? field + this.separator + col[i].field : col[i].field;\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) {\n if (column.operators) {\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 (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' && target.className.indexOf('e-qb-toggle') < 0) {\n if (target.className.indexOf('e-removerule') > -1) {\n this.actionButton = target;\n this.deleteRule(target);\n }\n else if (target.className.indexOf('e-deletegroup') > -1) {\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n }\n else if (target.className.indexOf('e-edit-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\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 }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n 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 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.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 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 this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (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 ruleListElem.appendChild(ruleElem);\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate) {\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 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 // 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 }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n }\n elem = template;\n elem.className += ' e-rule-field';\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n }\n ruleElem.appendChild(elem);\n if (column && column.ruleTemplate) {\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) {\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) {\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('button');\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 element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('button').appendChild(element);\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 if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.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);\n }\n if (!column || (column && !column.ruleTemplate)) {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null,\n open: this.popupOpen.bind(this)\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 = this.isImportRules ?\n this.GetRootColumnName(rule.field) : dropDownList.value;\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 ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\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 index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n if (Object.keys(rule).length) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n }\n else {\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (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 rule = { field: column.field, label: column.label, operator: operVal[0].value, 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'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error' });\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 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 var validateRule = void 0;\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-field input.e-control'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\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 index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator input.e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.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) < 0 && (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value input.e-control');\n isValid = false;\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) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if (dropDownObj.element && isNullOrUndefined(dropDownObj.index)) {\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 () {\n var glueElem;\n var inputElem;\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 glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n inputElem.setAttribute('checked', 'true');\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 groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\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 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.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: { class: clsName } });\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) {\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 if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\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);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule);\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 = this.showButtons.groupDelete ? 'e-deletegroup' : 'e-deletegroup e-button-hide';\n dltGroupBtn = this.createElement('button', { attrs: { 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 if (!this.headerTemplate) {\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\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 ruleList.appendChild(groupElem);\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick) {\n this.addRuleElement(groupElem, {});\n }\n }\n }\n else {\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 var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\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 this.updatedRule = null;\n if (this.headerTemplate) {\n var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_2);\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 if (!this.isImportRules) {\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.headerTemplateFn = function (groupElem, not, condition, rule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: rule };\n this.trigger('actionBegin', args);\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 // 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 }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n }\n groupHdr.appendChild(template);\n this.renderReactTemplates();\n }\n return groupElem;\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 rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\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 rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\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 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 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 (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 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 this.trigger('actionBegin', args);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n if (args.event) {\n element = args.event.target;\n }\n else {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\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 if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n }\n var value;\n var rbValue;\n var dropDownObj;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n dropDownObj =\n getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\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 }\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.changeField = function (args) {\n if (args.isInteracted) {\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n var column = this.getColumn(args.value);\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.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 index++;\n }\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n return;\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 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 var ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n this.selectedColumn = dl.getDataByValue(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: dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\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 (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 tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object') {\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 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 subFieldData = Object.keys(this.selectedColumn.columns[0]);\n var dropDownList = new DropDownList({\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((subFieldData.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this)\n });\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules) {\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) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!this.isImportRules) {\n this.selectedColumn = this.selectedColumn.columns[0];\n }\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 removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\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 var fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n tempRule.type = this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\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 value = operatorList[0].value;\n value = rule ? (rule.operator !== '' ? rule.operator : value) : value;\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: 0,\n value: value,\n open: this.popupOpen.bind(this)\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 this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\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 for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var 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 var data = {};\n if (!(value in original)) {\n original[value] = 1;\n data[field] = value;\n result.push(data);\n }\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 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)\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'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\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 }\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 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 var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\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 ddlObj = getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = 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 {\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 return 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.isPublic || isTemplate) {\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 ? rule.value : 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 ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\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.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? rule.value : 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 ? rule.value : 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 var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n itemData = this.getColumn(fieldObj.value);\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 }\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 // 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 isCheck = true;\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);\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 (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 = getComponent(filtElem, 'dropdownlist');\n var column = this.getColumn(filtObj.value);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.selectedRule = filtObj.itemData;\n if (isRender) {\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\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 ddlObj.dataBind();\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\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 }\n if (isRender) {\n this.validatValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n itemData.template = column.template;\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 }\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(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 } // 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 }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n }\n target.nextElementSibling.appendChild(valElem);\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 switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var 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 // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var 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 index++;\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 = getComponent(target, 'dropdownlist');\n var column = this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field && 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 = dropDownObj.getDataByValue(dropDownObj.value);\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 for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\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) {\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) {\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 {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var ddlInst = getInstance(ruleElem.querySelector('.e-rule-filter input'), DropDownList);\n var format = this.getFormat(this.getColumn(ddlInst.value).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.validatValue(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.validatValue = 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 }\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 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 getComponent(element[i], 'dropdownlist').destroy();\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 getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\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 classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\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 = { condition: groups[i].condition, 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 if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n }\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 if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass);\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 || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\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.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.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: { 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 if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\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.rule = this.checkNotGroup(this.rule);\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 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 // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\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 (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 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 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.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 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 this.rule = newProp.rule;\n newProp.rule = this.getRuleCollection(this.rule, false);\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 }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\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 };\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: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\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 ],\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 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 };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\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 };\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 };\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 }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\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 index++;\n }\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 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 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 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.isImportRules) {\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) {\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 clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\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 index++;\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 detach(clnruleElem);\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);\n }\n if (!this.isImportRules) {\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.rule = rule;\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\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) {\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 (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\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 * 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 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 = this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\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) || (this.rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined))) {\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value\n };\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\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 {\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 }\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 // 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 var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\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 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 var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\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 (ruleColl[i].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('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) : this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '' && ignoreOper.indexOf(oper) < 0) {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (ignoreOper.indexOf(oper) > -1) {\n continue;\n }\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 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, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n }\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 }\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, 'notnull', 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] !== '') {\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 // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\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.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 orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\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 }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\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) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n }\n }\n parentElem = closest(parentElem, '.e-rule-list');\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 return element[element.length - 1];\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-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-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) {\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 if (isRoot) {\n queryStr += 'NOT (';\n }\n else {\n queryStr += ' NOT (';\n }\n }\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);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\" AND \"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ' AND ' + 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' || rule.value === null) {\n valueStr += rule.value;\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -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 + ' ' + this.operators[rule.operator];\n }\n else {\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 + ' ' + this.operators[rule.operator] + ' ' + valueStr;\n }\n }\n if (j !== jLen - 1) {\n queryStr += ' ' + condition.toUpperCase() + ' ';\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 * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString);\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 * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString) {\n this.parser = [];\n this.sqlParser(sqlString);\n this.rule = { condition: 'and', not: false, rules: [] };\n var rule = this.processParser(this.parser, this.rule, [0]);\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 * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n return this.getSqlString(this.getValidRules(rule), allowEscape).replace(/\"/g, '\\'');\n };\n QueryBuilder.prototype.sqlParser = function (sqlString) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions = ['AND', 'OR', 'NOT'];\n var subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\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 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 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 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 // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\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 //String\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Double String\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\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 if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator) {\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 (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.columns;\n for (var i = 0; i < columnData.length; i++) {\n if (columnData[i].field === rules.field) {\n rules.type = columnData[i].type;\n break;\n }\n }\n return rules.type;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl) {\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 for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n rule = { 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]);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\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]);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n for (j = i + 1; j < jLen; j++) {\n if (parser[j][0] === 'Right') {\n i = j;\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] ? parser[j][1].replace(/'/g, '').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 strVal.push(parser[j][1].replace(/'/g, ''));\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 strVal.push(parser[j][1].replace(/'/g, ''));\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 rule.value = numVal;\n rule.type = 'number';\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1]);\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 rule.value = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][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') {\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);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not') {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\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);\n }\n }\n return rules;\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 Property({ ruleDelete: true, groupInsert: true, groupDelete: true })\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([])\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('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", 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"],"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","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","parentElement","className","indexOf","getComponent","destroy","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","rule","rules","disableRuleCondition","getWrapper","getModuleName","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","template","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","ddlField","ddlValue","dataSource","placeholder","popupHeight","change","changeField","bind","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","index","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","validateFields","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","isNullOrUndefined","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","clsName","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","grpId","chgrpId","childGroupID","groupHdr","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","grpElem","prevOper","arrOper","grpEle","destroyControls","changeValue","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","eventsArgs","changeValueSuccessCallBack","isInteracted","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","contains","remove","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","previousItemData","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","item","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","close","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","e","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","getItemData","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","dataBind","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","prevItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","validatValue","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","ddlInst","getInstance","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","unWireEvents","portals","addRules","groups","importRules","initWrapper","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","getRuleCollection","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","EndsWith","Contains","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","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","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","trim","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","splice","deleteRuleSuccessCallBack","clnruleElem","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","custom","notValue","setRules","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","ignoreOper","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","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","forEach","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","valueStr","toUpperCase","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","str","st","parseSqlStrings","regexStr","matchValue","conditions","subOp","test","RegExp","exec","lastPasrser","checkLiteral","lastParser","secParser","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","subRules","l","lLen","grpCount","numVal","strVal","val","pop","Event","Complex","NotifyPropertyChanges","Component"],"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,GAsB5DK,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,KA0B/D,MA5BAX,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,IACnBgC,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,KAW/D,MAbAX,GAAUgD,EAAaX,GAIvBZ,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,IAUnD,OATAyC,GAAMC,YAAa,EACnBD,EAAME,QAAWC,KAAM,QAASC,MAAO,SACvCJ,EAAMK,aAAgBC,KAAK,EAAOC,UAAW,OAC7CP,EAAMQ,UAAW,EACjBR,EAAMS,aAAc,EACpBT,EAAMU,YAAa,EACnBV,EAAMW,cAAe,EACrBX,EAAMY,kBAAmB,EACzBC,cAAYC,OAAOC,qBACZf,EA82IX,MA13IApD,GAAUiD,EAAcZ,GAcxBY,EAAapC,UAAUuD,eAAiB,WACpC,MAAOzD,MAAK0D,cAAc,UAO9BpB,EAAapC,UAAUyD,MAAQ,WAC3B3D,KAAK4D,eAAgB,CAGrB,KAAK,GAFDC,GAAW7D,KAAKwC,QAAQsB,cAAc,iBACtCC,EAAe/D,KAAKwC,QAAQwB,iBAAiB,mBACxCxD,EAAI,EAAGyD,EAAMF,EAAapD,OAAQH,EAAIyD,EAAKzD,IAC5CuD,EAAavD,GAAG0D,cAAcC,UAAUC,QAAQ,cAAgB,GAChEC,eAAaN,EAAavD,GAAG0D,cAAe,WAAWI,SAG/D,IAAIT,EACAA,EAASU,UAAY,OAEpB,CACD,GAAIC,GAAexE,KAAKyE,cAAc,OAASC,OAASC,MAAO,uBAC3DC,EAAY5E,KAAKyE,cAAc,OAASC,OAASC,MAAO,oBACxDE,EAAU7E,KAAKyE,cAAc,OAASC,OAASC,MAAO,iBAC1DH,GAAaM,YAAYF,GAAWE,YAAYD,GAChD7E,KAAKwC,QAAQsC,YAAYN,GACzBX,EAAW7D,KAAKwC,QAAQsB,cAAc,iBAEtC9D,KAAK+E,gBAAkB/E,KAAKgF,SAC5BhF,KAAKwC,QAAQ+B,UAAY,GACzBvE,KAAKgF,QAAS,GAEdhF,KAAKiF,oBACLC,cAAYlF,KAAKwC,QAAQwB,iBAAiB,gBAAiB,mBAE/DH,EAASiB,YAAY9E,KAAKyE,cAAc,OAASC,OAASC,MAAO,kBACjE3E,KAAKmF,UAAUnF,KAAKwC,QAAQ4C,GAAK,YAAc,GAC/CpF,KAAKqF,MAASrC,UAAW,MAAOD,KAAK,EAAOuC,UAC5CtF,KAAKuF,qBAAqB1B,EAASK,gBAEvC5B,EAAapC,UAAUsF,WAAa,WAChC,MAAOxF,MAAKwC,SAEhBF,EAAapC,UAAUuF,cAAgB,WACnC,MAAO,iBAEXnD,EAAapC,UAAUwF,kBAAoB,SAAUC,GACjD,MAAO3F,MAAK4F,UAAYD,EAAME,MAAM7F,KAAK4F,WAAW,GAAKD,GAE7DrD,EAAapC,UAAU4F,WAAa,WAChC,GAAI9F,KAAK+F,SAASpF,OAAQ,CACtB,GAAIqF,GAAavG,OAAOwG,KAAKjG,KAAK+F,SAAS,IACvCG,KACAC,KACAC,MAAO,GACPC,GAAU,EACVC,GAAS,EACTzD,MAAQ,GACR0D,GAAgB3E,YAAY,EAAMC,IAAK,EAAGC,IAAKC,OAAOC,UAC1D,IAAIhC,KAAKwG,QAAQ7F,OAAQ,CACrBX,KAAKyG,YAEL,KAAK,GAAIjG,GAAI,EAAGyD,GADZuC,EAAUxG,KAAKwG,SACW7F,OAAQH,EAAIyD,EAAKzD,IAC3CR,KAAK0G,qBAAqBF,EAAQhG,IAC7BgG,EAAQhG,GAAG4F,OACRJ,EAAW5B,QAAQoC,EAAQhG,GAAGmF,QAAU,IAG3B,YADbS,SADAvD,EAAQ7C,KAAK+F,SAAS,GAAGS,EAAQhG,GAAGmF,SAGhCW,GAAUK,MAAMC,KAAKC,MAAMhE,IAEb,WAATuD,IACLE,EAASzD,YAAiB+D,QAASD,MAAM9D,EAAMiE,WAC/CV,EAAO,UAEXI,EAAQhG,GAAG4F,KAAOA,EAClBE,GAAS,GAEbF,EAAO,UAENI,EAAQhG,GAAGuG,aACZP,EAAQhG,GAAGuG,WAAaR,GAExBC,EAAQhG,GAAGwG,SACXX,GAAU,EAGVG,EAAQhG,GAAGwG,SAAWhH,KAAKiH,KAAKC,YAAY,eAE5Cf,EAAW/B,QAAQoC,EAAQhG,GAAGwG,UAAY,GAC1Cb,EAAWgB,KAAKX,EAAQhG,GAAGwG,UAE1BR,EAAQhG,GAAG4G,YAAapH,KAAKiD,WAC9BuD,EAAQhG,GAAG4G,UAAYpH,KAAKqH,gBAAgBb,EAAQhG,GAAG4F,KAAO,YAGlEC,KAAYF,EAAWxF,OAAS,GAAKwF,EAAW,KAAOnG,KAAKiH,KAAKC,YAAY,kBAC7ElH,KAAK2C,QAAWC,KAAM,QAASC,MAAO,QAASwD,QAAS,aAE5DrG,KAAKsH,2BAA2BtH,KAAKwG,aAEpC,CACD,IAAK,GAAIhG,GAAI,EAAGyD,EAAM+B,EAAWrF,OAAQH,EAAIyD,EAAKzD,IAGjC,YADb4F,SADAvD,EAAQ7C,KAAK+F,SAAS,GAAGC,EAAWxF,MAGhC8F,GAAUK,MAAMC,KAAKC,MAAMhE,IAEb,WAATuD,GAAsB3G,OAAOwG,KAAKpD,GAAOlC,SAC9C2F,EAASzD,YAAiB+D,QAASD,MAAM9D,EAAMiE,WAC/CV,EAAO,UAEXF,EAAK1F,IAAOmF,MAASK,EAAWxF,GAAI+G,MAASvB,EAAWxF,GAAI4F,KAAQE,EAAS,OAASF,EAClFW,WAAcR,GAClBD,GAAS,EACTJ,EAAK1F,GAAG4G,UAAYpH,KAAKqH,gBAAgBnB,EAAK1F,GAAG4F,KAAO,YAC3C,WAATA,GACApG,KAAKwH,gBAAgB3E,EAAOqD,EAAK1F,GAGzCR,MAAKwG,QAAUN,OAGlB,IAAIlG,KAAKwG,QAAQ7F,OAAQ,CAE1B,IAAK,GADD6F,GAAUxG,KAAKwG,QACVhG,EAAI,EAAGyD,EAAMuC,EAAQ7F,OAAQH,EAAIyD,EAAKzD,IACvCgG,EAAQhG,GAAGwG,SACXhH,KAAK2C,QAAWC,KAAM,QAASC,MAAO,QAASwD,QAAS,YAGxDG,EAAQhG,GAAGwG,SAAWhH,KAAKiH,KAAKC,YAAY,eAEhDlH,KAAK0G,qBAAqBF,EAAQhG,IAC7BgG,EAAQhG,GAAG4G,YAAapH,KAAKiD,WAC9BuD,EAAQhG,GAAG4G,UAAYpH,KAAKqH,gBAAgBb,EAAQhG,GAAG4F,KAAO,YAGtEpG,MAAKsH,2BAA2BtH,KAAKwG,SAEzCxG,KAAKyH,QAAQ,aAAerB,KAAM,eAEtC9D,EAAapC,UAAUoH,2BAA6B,SAAUI,EAAK/B,GAC/D,IAAK,GAAInF,GAAI,EAAGA,EAAIkH,EAAI/G,OAAQH,IAC5BkH,EAAIlH,GAAGmF,MAAQA,EAAQA,EAAQ3F,KAAK4F,UAAY8B,EAAIlH,GAAGmF,MAAQ+B,EAAIlH,GAAGmF,MAClE+B,EAAIlH,GAAG4G,UACPpH,KAAK0G,qBAAqBgB,EAAIlH,IAEzBkH,EAAIlH,GAAG4F,MAAwB,WAAhBsB,EAAIlH,GAAG4F,OAC3BsB,EAAIlH,GAAG4G,UAAYpH,KAAKqH,gBAAgBK,EAAIlH,GAAG4F,KAAO,aAEtDsB,EAAIlH,GAAGgG,UACPkB,EAAIlH,GAAG4F,KAAO,SACdpG,KAAKsH,2BAA2BI,EAAIlH,GAAGgG,QAASkB,EAAIlH,GAAGmF,SAInErD,EAAapC,UAAUsH,gBAAkB,SAAU3E,EAAO6E,EAAKC,GAC3D,GAAIC,EACJF,GAAIlB,UACJ,IAGIJ,GACAyB,EAJA7B,EAAavG,OAAOwG,KAAKpD,EAK7B8E,GAAOA,GAAc3H,KAAK+F,SAAS,EACnC,KAAK,GAAIvF,GAAI,EAAGyD,EAAM+B,EAAWrF,OAAQH,EAAIyD,EAAKzD,IAAK,CACnD,GAAIsH,GAAYJ,EAAI/B,MAAME,MAAM,IAE5BgC,GADAF,EACSA,EAAKG,EAAUA,EAAUnH,OAAS,IAAIqF,EAAWxF,IAGjDR,KAAK+F,SAAS,GAAG2B,EAAI/B,OAAOK,EAAWxF,GAEpD,IAAIuH,GAAUJ,EAAKD,EAAI/B,MAAME,MAAM7F,KAAK4F,WAAW8B,EAAI/B,MAAME,MAAM7F,KAAK4F,WAAWjF,OAAS,GAC5FyF,SAAcyB,GAIdD,GAAYjC,MAHJ+B,EAAI/B,MAAQ3F,KAAK4F,UAAYI,EAAWxF,GAGtB+G,MAFlBvB,EAAWxF,GAEqB4F,KADxCA,EAAiB,WAATA,GAAsBO,MAAMC,KAAKC,MAAMgB,IAAqBzB,EAAT,QAE9C,WAATA,IACAwB,EAAQR,UAAYpH,KAAKqH,gBAAgBjB,EAAO,aAEpDsB,EAAIlB,QAAQW,KAAKS,GACJ,WAATxB,GACApG,KAAKwH,gBAAgBK,EAAQD,EAASG,KAIlDzF,EAAapC,UAAUwG,qBAAuB,SAAUsB,GACpD,GAAIA,EAAOZ,UAYP,IAAK,GADDa,GAASjI,KACJkI,EAAI,EAAGA,EAAIF,EAAOZ,UAAUzG,OAAQuH,KAX/B,SAAUA,GACpB,GAAIC,GAAS1I,OAAOwG,KAAK+B,EAAOZ,UAAUc,IAAI9D,QAAQ,cACtD,IAAI+D,GAAU,EAAG,CACb,GAAIC,GAAaJ,EAAOZ,UAAUc,GAC9BG,EAAW5I,OAAOwG,KAAKmC,GACvBE,EAASD,EAASE,IAAI,SAAUtH,GAAO,MAAOmH,GAAWnH,KAASuH,KAAK,KAAK3C,MAAM,KAClF4C,EAAWJ,EAASjE,QAAQ,QAChC6D,GAAOb,UAAUkB,EAAOG,IAAaH,EAAOH,KAKxCD,IAIpB5F,EAAapC,UAAUwI,kBAAoB,SAAUC,GACjD3I,KAAKgB,OAAS2H,EAAM3H,QAExBsB,EAAapC,UAAU0I,kBAAoB,SAAUD,GACjD,GAEIE,GAFApG,EAAQzC,KACRgB,EAAS2H,EAAM3H,MAEnBhB,MAAK4D,eAAgB,CACrB,IAAIkF,EAIJ,IAHuB,SAAnB9H,EAAO+H,UACP/H,EAASA,EAAOkD,eAEhBlD,EAAOmD,UAAUC,QAAQ,oBAAsB,EAAG,CAClD,GAAI4E,GAAY,GAAIC,cAAYC,SAAU,IAAMC,MAAO,GACnDnJ,MAAKwC,QAAQwB,iBAAiB,sBAAsBrD,OAAS,GAC7DX,KAAKoJ,eAET,IAAIC,GAAcC,SAASC,eAAevJ,KAAKwC,QAAQ4C,GAAK,oBACxDoE,EAAcH,EAAYvF,cAAc,kBAC5CkF,GAAUS,QAAQ,oBAAsBC,KAAM,iBAC1CC,EAAY3J,KAAKwC,QAAQsB,cAAc,uBACjC8F,MAAMC,QAAU,OAC1BL,EAAYM,YAAc9J,KAAK+J,gBAAgB/J,KAAKqF,MACpDgE,EAAYO,MAAMC,QAAU,QAC5BL,EAAYI,MAAMI,OAASR,EAAYS,aAAe,KAE1D,GAAuB,WAAnBjJ,EAAO+H,SAAwB/H,EAAOmD,UAAUC,QAAQ,eAAiB,GACzE,GAAIpD,EAAOmD,UAAUC,QAAQ,iBAAmB,EAC5CpE,KAAKkK,aAAelJ,EACpBhB,KAAKmK,WAAWnJ,OAEf,IAAIA,EAAOmD,UAAUC,QAAQ,kBAAoB,EAClDpE,KAAKkK,aAAelJ,EACpBhB,KAAKoK,YAAYC,UAAQrJ,EAAQ,2BAEhC,IAAIA,EAAOmD,UAAUC,QAAQ,gBAAkB,EAIhD,IAHI4E,EAAY,GAAIC,cAAYC,SAAU,IAAMC,MAAO,KAC7CM,QAAQ,oBAAsBC,KAAM,gBAC9CJ,SAASC,eAAevJ,KAAKwC,QAAQ4C,GAAK,oBAAoBwE,MAAMC,QAAU,OAC1E7J,KAAKwC,QAAQwB,iBAAiB,sBAAsBrD,OAAS,EAAG,CAChEX,KAAKsK,iBAAgB,EAAOtK,KAAKwC,QAASxC,KAAKqF,KAAKrC,WAAW,EAAOhD,KAAKqF,KAAKtC,IAChF,IAAIwH,GAASC,YAAWxK,KAAKqF,SAAU,EACvCrF,MAAKyK,cAAcF,GACnBvK,KAAK0K,4BAEJ,CACD,GAAIf,GAAY3J,KAAKwC,QAAQsB,cAAc,qBACvC6F,GAAU3F,iBAAiB,oBAAoBrD,OAAS,GACxDX,KAAK0K,wBAETf,EAAUC,MAAMC,QAAU,aAIjC,IAAwB,UAAnB7I,EAAO+H,SAAuB/H,EAAOkD,cAAcC,UAAUC,QAAQ,gBAAkB,GAC7FpD,EAAOmD,UAAUC,QAAQ,gBAAkB,EAAG,CAC9C,GAAI5B,GAAU6H,UAAQrJ,EAAQ,qBAC9B,KAAKhB,KAAK+E,eAAgB,CACtB,GAAI4F,GAAa3J,EAAO4J,aAAa,OACjCC,MAAc,EACdF,KACAE,EAAcvB,SAASC,eAAeoB,GAAYC,aAAa,UAEnE9B,EAAUtG,EAAQ4C,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,GACpD,IAAI2F,GAAQ/K,KAAKgL,SAASlC,GACtBmC,MAAc,EAClB,IAAIjL,KAAKiF,mBACL,GAAIjE,EAAOmD,UAAUC,QAAQ,gBAAkB,EAAG,CAC9C,GAAI8G,GAAa1I,EAAQ2I,uBAAuB,eAAe,EAC3DD,GAAW/G,UAAUC,QAAQ,oBAAsB,GACnDc,eAAagG,GAAa,mBAC1BD,GAAc,IAGdG,YAAUF,GAAa,mBACvBD,GAAc,GAElBJ,EAAcE,EAAM/H,cAGpBiI,GAAcF,EAAMhI,GAG5B8F,IAASC,QAASA,EAASuC,QAAQ,EAAOjF,KAAM,YAAavD,MAAOgI,EAAYS,eAC5EtL,KAAKiF,qBACL4D,GAASC,QAASA,EAASuC,QAAQ,EAAOjF,KAAM,YAAavD,MAAOgI,EAAYS,cAC5EvI,IAAOkI,IAGdjL,KAAK4D,cAMN5D,KAAKuL,sBAAsB1C,EAAM7H,GALjChB,KAAKyH,QAAQ,eAAgBoB,EAAM,SAAU2C,GACzC/I,EAAM8I,sBAAsBC,EAAoBxK,KAMxDhB,KAAKgB,OAASA,IAGtBsB,EAAapC,UAAUqL,sBAAwB,SAAU1C,EAAM7H,GAC3D,IAAK6H,EAAKwC,OAAQ,CACd,GAAI7I,GAAU6H,UAAQrJ,EAAQ,sBAC1B8H,EAAUtG,EAAQ4C,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACpDqG,EAAczL,KAAK0L,cAAc1L,KAAKqF,MACtCA,EAAOrF,KAAK2L,eAAenJ,EAC/B6C,GAAKrC,UAAY6F,EAAKhG,MAClB7C,KAAKiF,qBACLI,EAAKtC,IAAM8F,EAAK9F,KAEf/C,KAAK4D,eACN5D,KAAKyH,QAAQ,UAAYqB,QAASA,EAAS1C,KAAM,YAAavD,MAAOwC,EAAKrC,YAE9EhD,KAAK4L,YAAYH,EAAazL,KAAK0L,cAAc1L,KAAKqF,MAAO,eAGrE/C,EAAapC,UAAU2L,UAAY,SAAU7K,EAAQ2H,GAC9B,eAAfA,EAAMe,KACF1J,KAAK8L,YAAYC,aACb/L,KAAKwC,QAAQwB,iBAAiB,sBAAsBrD,QAAUX,KAAKgM,cAAgB,EACnFZ,YAAUzC,EAAMnG,QAAQsB,cAAc,sBAAsBI,eAAgB,iBAG5EgB,eAAayD,EAAMnG,QAAQsB,cAAc,sBAAsBI,eAAgB,iBAE/ElE,KAAKiM,WACLb,YAAUzC,EAAMnG,QAAQsB,cAAc,MAAMI,eAAgB,UAIhEkH,YAAUzC,EAAMnG,QAAQsB,cAAc,sBAAsBI,eAAgB,iBAG3EyE,EAAMnG,QAAQ0J,SAAS,GAAG/H,UAAUC,QAAQ,cAAgB,EACjEpE,KAAKmM,eAAe9B,UAAQrJ,EAAQ,0BAE/B2H,EAAMnG,QAAQ0J,SAAS,GAAG/H,UAAUC,QAAQ,eAAiB,GAClEpE,KAAKsK,iBAAgB,EAAMD,UAAQrJ,EAAQ,sBAAuB,IAAI,IAG9EsB,EAAapC,UAAUkM,eAAiB,SAAUpL,EAAQgH,EAAQ5B,EAAMiG,EAAUC,EAAQjH,GACtF,GAAIkH,GACAC,EAEA3D,EADA4D,EAAezL,EAAO8C,cAAc,eAWxC,IATa,WAATsC,EACAmG,EAAWG,SAAO,IAAML,EAAUrL,KAGlCuL,EAAWvM,KAAKyE,cAAc,OAASC,OAASC,MAAO,uBAC9CgI,aAAa,KAAM3L,EAAOoE,GAAK,QAAUpF,KAAK4M,eACvDH,EAAa3H,YAAYyH,GACzBvM,KAAK4M,iBAEL5E,GAAUA,EAAO6E,aAAc,CAC/BhE,GAASiE,YAAa,sBAAuBC,OAAQR,EAASnH,GAAIkH,OAAQA,EAAQ3J,OAAQ3C,KAAK2C,OAAQ0C,KAAMA,GAC7GrF,KAAKyH,QAAQ,cAAeoB,GAC5B7I,KAAKgN,eAAiBhN,KAAKiN,eAAejF,EAAO6E,aACjD,IAAIK,GAAalN,KAAKwC,QAAQ4C,GAAK4C,EAAOrC,MACtCwH,MAAW,EAMf,IALAtE,EAAKlG,OAAS3C,KAAK2C,OACnBkG,EAAKrC,QAAUxG,KAAKwG,QACpBqC,EAAKzB,UAAYpH,KAAKoN,aAAa/H,EAAKM,OACxCkD,EAAKwE,gBAAmBzK,KAAM,MAAOC,MAAO,SAExC7C,KAAKsN,QACLH,EAAWnN,KAAKgN,eAAenE,EAAM7I,KAAMuM,EAASnH,GAAI8H,GAAY,OAGnE,IAAIlN,KAAKuN,UAAW,CACrB,GAAIC,GAAexN,KAAKgN,eAAenE,EAAM7I,KAAMuM,EAASnH,GAAI8H,EAChEC,GAAyC,IAA7BK,EAAa,GAAGC,SAAkBD,EAAa,GAAKA,EAAa,OAG7EL,GAAWnN,KAAKgN,eAAenE,EAAM7I,KAAM,WAAYkN,GAAY,IAEvEV,EAAOW,GACFhJ,WAAa,oBAGlBqI,GAAOxM,KAAKuM,SAASzI,cAAc,iBAAiB4J,WAAU,EAMlE,OAJAnB,GAASzH,YAAY0H,GACjBxE,GAAUA,EAAO6E,cACjB7M,KAAK2N,uBAEFpB,GAEXjK,EAAapC,UAAUiM,eAAiB,SAAUnL,EAAQqE,EAAM2C,EAAQsE,EAAQD,EAAUuB,GACtF,GAAInL,GAAQzC,IACZ,IAAKgB,EAAL,CAGA,GAAI6H,IAASC,QAAS9H,EAAOoE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IAAKiG,QAAQ,EAAOjF,KAAM,aACpFpG,MAAK4D,eAAkB5D,KAAK6N,eAM7B7N,KAAK6N,eAAgB,EACrB7N,KAAK8N,uBAAuBjF,EAAM7H,EAAQqE,EAAM2C,EAAQsE,EAAQD,EAAUuB,IAN1E5N,KAAKyH,QAAQ,eAAgBoB,EAAM,SAAU2C,GACzC/I,EAAMqL,uBAAuBtC,EAAoBxK,EAAQqE,EAAM2C,EAAQsE,EAAQD,EAAUuB,OAQrGtL,EAAapC,UAAU4N,uBAAyB,SAAUjF,EAAMkF,EAAM1I,EAAMqC,EAAKsG,EAAKC,EAAKC,GACvF,GACInB,GAEA3F,EACA+G,EACA5B,EALAvC,EAAUhK,KAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,EAAK,QAAU,QAEvE4D,EAAU3C,GAAQA,EAAKM,MAAS3F,KAAKoO,UAAU/I,EAAKM,OAAS+B,GAAY1H,KAAKwG,QAAQ,GAItF6H,GAAY9G,MAAS,GAAI5B,MAAS,GAAIS,KAAQ,GAAIkI,SAAY,GAClE,KAAKzF,EAAKwC,OAAQ,CACd,GAAIrD,GAAUA,EAAO6E,aAAc,CAC/B7M,KAAKuO,eAAiBvG,EACtBZ,EAAYpH,KAAKuO,eAAenH,UAChCiH,GAAY9G,MAASS,EAAOT,MAAO5B,MAASqC,EAAOrC,MAAOS,KAAQ4B,EAAO5B,KAAMkI,SAAYlH,EAAU,GAAGvE,MACxG,IAAI2L,GAAa/O,OAAOwG,KAAKZ,GAAM1E,OAAS0E,EAAOgJ,EAE/CI,GAAW3B,YAAa,kBAAmBR,OAAQ,cAAeS,QADtER,EAAWvM,KAAKoM,eAAe2B,EAAM/F,EAAQgG,EAAKC,EAAK,QAASO,IACuBpJ,GACnFzC,OAAQ3C,KAAK2C,OAAQ0C,KAAMmJ,EAC/BxO,MAAKyH,QAAQ,cAAegH,OAE3B,EACDlC,EAAWvM,KAAKoM,eAAe2B,EAAM/F,EAAQgG,EAAKC,EAAK,UAC9CnK,cAAc,mBAAmB6I,aAAa,KAAMJ,EAASnH,GAAK,aAC3E,IAAI5C,GAAU+J,EAASzI,cAAc,SACjC9D,MAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,GAA0B,aAArBpE,KAAK0O,aACxDlM,EAAQsH,YAAc9J,KAAKiH,KAAKC,YAAY,UAC5CkE,YAAU5I,GAAU,UACpB4I,YAAU5I,GAAU,eAGpB4I,YAAU5I,GAAU,WACpB4I,YAAU5I,GAAU,cACpBA,EAAQmK,aAAa,QAAS3M,KAAKiH,KAAKC,YAAY,eACpD1E,EAAUxC,KAAKyE,cAAc,QAAUC,OAASC,MAAO,sCACvD4H,EAASzI,cAAc,UAAUgB,YAAYtC,IAwBrD,GArByB,aAArBxC,KAAK0O,aAA8B1O,KAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,EACjFmI,EAASpI,UAAY,mCAGrBoI,EAASpI,UAAY,qCAErBoI,EAASoC,wBAA0BpC,EAASoC,uBAAuBxK,UAAUC,QAAQ,qBAAuB,IACxGmI,EAASpI,UAAUC,QAAQ,iBAAmB,IAC9CmI,EAASpI,WAAa,kBAEtBoI,EAASoC,uBAAuBxK,UAAUC,QAAQ,sBAAwB,IAC1EmI,EAASoC,uBAAuBxK,WAAa,wBAGjDoI,EAASoC,wBAA0BpC,EAASoC,uBAAuBxK,UAAUC,QAAQ,sBAAwB,GAC7GmI,EAASpI,UAAUC,QAAQ,mBAAqB,IAChDmI,EAASpI,WAAa,oBAErBnE,KAAK4D,eACN5D,KAAK4O,gBAAgBb,EAAM1I,EAAMgJ,EAASH,EAASD,IAElDjG,GAAWA,IAAWA,EAAO6E,aAAe,CAC7C,GAAIgC,OAAW,GACXC,EAAW9O,KAAK4D,cAAgB5D,KAAK0F,kBAAkBL,EAAKM,OAASN,EAAKM,KAC9EkJ,IACIE,WAAY/O,KAAKwG,QACjB7D,OAAQ3C,KAAK2C,OAAQqM,YAAahP,KAAKiH,KAAKC,YAAY,eACxD+H,YAAejP,KAAKwG,QAAQ7F,OAAS,EAAKqJ,EAAS,OACnDkF,OAAQlP,KAAKmP,YAAYC,KAAKpP,MAAO6C,MAAOwC,EAAOyJ,EAAW,KAC9DO,KAAMrP,KAAKsP,UAAUF,KAAKpP,OAE1BA,KAAKuP,aACLV,EAAWzO,KAAayO,EAAU7O,KAAKuP,cAE3CpB,EAAe,GAAIqB,gBAAaX,IACnBY,SAAS,IAAMlD,EAASnH,GAAK,aAC1C,IAAIsK,GAAS1P,KAAK4D,cACd5D,KAAK0F,kBAAkBL,EAAKM,OAASwI,EAAatL,KACtD7C,MAAKuO,eAAiBJ,EAAawB,eAAeD,GAC9CjQ,OAAOwG,KAAKZ,GAAM1E,QAClBX,KAAK4P,WAAWvK,GACZ7C,QAAS2L,EAAa3L,QACtBqN,SAAU7P,KAAKuO,iBAI3BxB,EAASR,EAASnH,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IAC/CpF,KAAK4D,eACN5D,KAAKyH,QAAQ,UAAYqB,QAASiF,EAAK3I,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IAAK2H,OAAQA,EAAQ3G,KAAM,iBAIhH9D,EAAapC,UAAU0O,gBAAkB,SAAU5N,EAAQqE,EAAMgJ,EAAST,EAAgBK,GACtF,GAAI1B,GAEA5C,EACArE,EAFAwK,EAAQ,CAGZ,IAAIlC,EAAgB,CAIhB,IAHArB,EAAWG,SAAO,IAAMuB,EAAKjN,GAC7B2I,EAAYU,UAAQrJ,EAAQ,sBAC5BsE,EAAQtF,KAAK2L,eAAehC,GACrB4C,GAAgD,OAApCA,EAASoC,wBACxBpC,EAAWA,EAASoC,uBACpBmB,GAEJxK,GAAMA,MAAMwK,GAASzK,MAGrBsE,GAAYU,UAAQrJ,EAAQ,sBAC5BsE,EAAQtF,KAAK2L,eAAehC,GACxBlK,OAAOwG,KAAKZ,GAAM1E,OAClB2E,EAAMA,MAAM6B,MACRxB,MAASN,EAAKM,MAAOS,KAAQf,EAAKe,KAAMmB,MAASlC,EAAKkC,MAAO+G,SAAYjJ,EAAKiJ,SAAUzL,MAAOwC,EAAKxC,QAIxGyC,EAAMA,MAAM6B,KAAKkH,EAGzBrO,MAAKuF,qBAAqBvE,EAAQsE,IAEtChD,EAAapC,UAAU6P,mBAAqB,SAAU/H,EAAQxF,GAC1D,GAAIwN,GAAUhQ,KAAKuO,eAAenH,SAClC,KAAIY,EAAO6E,aAAX,CAII,GAAIoD,GAAc5F,UAAQ7H,EAAS,sBAC/B6J,EAAWhC,UAAQ7H,EAAS,qBAAqB4C,EAKrD,IAJIpF,KAAKkQ,gBAAkBlQ,KAAKkQ,eAAerD,eAC3CsD,SAAO3N,EAAQ6H,QAAQ,QAAUgC,EAAW,MAAMvI,cAAc,kBAChE9D,KAAKoQ,iBAAiB/D,KAEtBrE,EAAQ,CACR,GAAI3C,IAASM,MAAOqC,EAAOrC,MAAO4B,MAAOS,EAAOT,MAAO+G,SAAU0B,EAAQ,GAAGnN,MAAOA,MAAO,GAC1F7C,MAAKmM,eAAe8D,EAAa5K,EAAM2C,EAAQ,SAAUqE,GAAU,MAI/E/J,EAAapC,UAAUmQ,cAAgB,SAAU7N,GAC7C,GAAI8N,GAAU,GAAIC,YAAUC,QAASxQ,KAAKiH,KAAKC,YAAY,qBACvDuJ,SAAU,eAAgBC,SAAU,wBACxCJ,GAAQb,SAASjN,GACjB8N,EAAQjB,KAAK7M,IAOjBF,EAAapC,UAAUyQ,eAAiB,WACpC,GAAIC,IAAU,CACd,IAAI5Q,KAAK6Q,gBAAiB,CACtB,GAAIC,IAAe,SAAU,YAAa,UAAW,cACjDtQ,MAAI,GACJyD,MAAM,GACN8M,MAAY,GACZC,MAAY,GACZC,KACAtH,MAAY,GACZmG,MAAQ,GACRoB,MAAc,GACdC,MAAW,GACX9L,MAAO,GACP+L,EAAcpR,KAAKwC,QAAQwB,iBAAiB,qBAC5CqN,MAAe,EACnB,KAAK7Q,EAAI,EAAGyD,EAAMmN,EAAYzQ,OAAQH,EAAIyD,EAAKzD,IAS3C,GARAmJ,EAAYU,UAAQ+G,EAAY5Q,GAAI,sBACpC6E,EAAOrF,KAAK2L,eAAehC,GAC3BmG,EAAQ,EACRkB,EAAYG,EAAWC,EAAY5Q,GACnC0Q,EAAc7M,eAAa+M,EAAY5Q,GAAGsD,cAAc,iCAAkC,gBAC1F9D,KAAKuO,eAAiB2C,EAAYvB,eAAeuB,EAAYrO,OAC7DwO,GAAgBC,oBAAkBJ,EAAYpB,QAAU9P,KAAKuO,eAAexH,WAC5EgK,EAAYI,EAASrN,cAAc,iCAC/BuN,GAAgBA,EAAazP,WAAY,CACzC,KAAOoP,GAAkD,OAArCA,EAAUrC,wBAC1BqC,EAAYA,EAAUrC,uBACtBmB,GAYJ,IAVAiB,EAAYI,EAASrN,cAAc,oCAC9BuB,EAAKC,MAAMwK,GAAOxB,WACfyC,EAAU7M,cAAcC,UAAUC,QAAQ,aAAe,GACzDpE,KAAKqQ,cAAcU,EAAU7M,eAEjC0M,GAAU,GAEVvL,EAAKC,MAAMwK,GAAOjN,gBAAiBjD,SACnCqR,EAAW5L,EAAKC,MAAMwK,GAAOjN,OAE7BiO,EAAY1M,QAAQiB,EAAKC,MAAMwK,GAAOxB,UAAY,GAAMgD,oBAAkBjM,EAAKC,MAAMwK,GAAOjN,QACjE,SAA3BwC,EAAKC,MAAMwK,GAAO1J,MAAgD,KAA5Bf,EAAKC,MAAMwK,GAAOjN,OACvDwC,EAAKC,MAAMwK,GAAOjN,gBAAiBjD,QAASqR,EAAStQ,OAAS,EAAI,CACnE,GAAI4Q,GAAUJ,EAASnN,iBAAiB,gCACxC4M,IAAU,CACV,KAAK,GAAI1I,GAAI,EAAGsJ,EAAOD,EAAQ5Q,OAAQuH,EAAIsJ,EAAMtJ,IAAK,CAClD,GAAI1F,GAAU+O,EAAQrJ,GAClBsE,MAAO,EACPhK,GAAQ0B,cAAcC,UAAUC,QAAQ,eAAiB,GACzDoI,EAAOnC,UAAQ7H,EAAS,4BACf2B,UAAUC,QAAQ,aAAe,GACtCpE,KAAKqQ,cAAc7D,GAGlB+E,EAAQrJ,GAAGhE,cAAcC,UAAUC,QAAQ,aAAe,GAC/DpE,KAAKqQ,cAAckB,EAAQrJ,GAAGhE,eAElCgE,UAIHgJ,GAAY1O,SAAW8O,oBAAkBJ,EAAYpB,SACtDiB,EAAU7M,cAAcC,UAAUC,QAAQ,aAAe,GACzDpE,KAAKqQ,cAAcU,EAAU7M,eAEjC0M,GAAU,GAItB,MAAOA,IAEXtO,EAAapC,UAAUuR,iBAAmB,WACtCzR,KAAKmF,YACL,IAAIwE,GAAY3J,KAAKwC,QAAQsB,cAAc,qBAC3C,IAAI6F,EAAW,CACX3J,KAAKmF,UAAUwE,EAAUvE,KAAO,EAChC,IAAIsM,IAAQC,aAAchI,EAAWiI,OAAQ,GAC7C5R,MAAK6R,aAAaH,KAG1BpP,EAAapC,UAAU2R,aAAe,SAAUH,GAC5C,GACII,GAEAtR,EAHAuR,EAAWL,EAAIC,aAAa7N,cAAc,gBAAgBoI,SAE1DvC,EAAY+H,EAAIC,aAEhBK,EAAOD,EAASpR,OAChBsR,EAAa,CACjB,KAAKzR,EAAI,EAAGA,EAAIwR,EAAMxR,KAClBsR,EAAYC,EAASvR,IACP2D,UAAUC,QAAQ,sBAAwB,IACpDsN,EAAIE,MAAMzK,KAAK8K,GACfjS,KAAKmF,UAAU2M,EAAU1M,IAAMsM,EAAIE,MAAMM,QACzCD,IACAP,EAAIC,aAAeG,EACnBJ,EAAM1R,KAAK6R,aAAaH,GAGhC,IAAIjF,GAAepC,UAAQV,EAAW,eAGtC,OAFA+H,GAAIC,aAAelF,EAAepC,UAAQoC,EAAc,sBAAwB9C,EAChF+H,EAAIE,MAAQ5R,KAAKmF,UAAUuM,EAAIC,aAAavM,IAAI8M,QACzCR,GAEXpP,EAAapC,UAAUiS,cAAgB,WACnC,GAAIC,GACAC,EACAC,EACAC,EACAC,EACA7I,EAAY3J,KAAKyE,cAAc,OAASC,OAASC,MAAO,uBACxD8N,EAAezS,KAAKyE,cAAc,OAASC,OAASC,MAAO,oBAC3D+N,EAAc1S,KAAKyE,cAAc,OAASC,OAASC,MAAO,kBAC1DgO,EAAY3S,KAAKyE,cAAc,OAASC,OAASC,MAAO,gBA4B5D,OA3BAgF,GAAU7E,YAAY2N,GACtBC,EAAY5N,YAAY6N,GACxBhJ,EAAU7E,YAAY4N,GAEjB1S,KAAK+E,iBACNqN,EAAWpS,KAAKyE,cAAc,OAASC,OAASC,MAAO,uBACnD3E,KAAKiF,qBACLoN,EAAYrS,KAAKyE,cAAc,UAAYC,OAAS0B,KAAM,SAAUzB,MAAO,iBAC3EyN,EAAStN,YAAYuN,KAEzBA,EAAYrS,KAAKyE,cAAc,SAAWC,OAAS0B,KAAM,QAASzB,MAAO,iBAAkB9B,MAAO,UACxF8J,aAAa,UAAW,QAClCyF,EAAStN,YAAYuN,GACrBC,EAAYtS,KAAKyE,cAAc,SAAWC,OAASC,MAAO,0CACtDJ,UAAWvE,KAAKiH,KAAKC,YAAY,SACrCkL,EAAStN,YAAYwN,GACrBD,EAAYrS,KAAKyE,cAAc,SAAWC,OAAS0B,KAAM,QAASzB,MAAO,gBAAiB9B,MAAO,QACjGuP,EAAStN,YAAYuN,GACrBC,EAAYtS,KAAKyE,cAAc,SAAWC,OAASC,MAAO,yCACtDJ,UAAWvE,KAAKiH,KAAKC,YAAY,QACrCkL,EAAStN,YAAYwN,GACrBG,EAAa3N,YAAYsN,GACzBG,EAAavS,KAAKyE,cAAc,OAASC,OAASC,MAAO,oBACzD6N,EAAWxS,KAAKyE,cAAc,UAAYC,OAAS0B,KAAM,SAAUzB,MAAO,eAC1E4N,EAAWzN,YAAY0N,GACvBC,EAAa3N,YAAYyN,IAEtB5I,GAEXrH,EAAapC,UAAU2M,aAAe,WAClC,GAAIsE,GACAyB,EACArG,EAAWvM,KAAKyE,cAAc,OAC9BsM,EAAY/Q,KAAKyE,cAAc,OAASC,OAASC,MAAO,iBAC5DwM,GAAWnR,KAAKyE,cAAc,OAASC,OAASC,MAAO,kBACvD,IAAIkO,GAAa7S,KAAKyE,cAAc,SAAWC,OAAS0B,KAAM,OAAQzB,MAAO,mBAC7EwM,GAASrM,YAAY+N,GACrB9B,EAAUjM,YAAYqM,GACtBA,EAAWnR,KAAKyE,cAAc,OAASC,OAASC,MAAO,qBACvDoM,EAAUjM,YAAYqM,GACtBA,EAAWnR,KAAKyE,cAAc,OAASC,OAASC,MAAO,kBACvDoM,EAAUjM,YAAYqM,GACtBA,EAAWnR,KAAKyE,cAAc,OAASC,OAASC,MAAO,yBAEnDiO,EADA5S,KAAK8L,YAAYgH,WACP,iDAGA,8DAEd,IAAIC,GAAa/S,KAAKyE,cAAc,UAAYC,OAASC,MAAOiO,IAIhE,OAHAzB,GAASrM,YAAYiO,GACrBhC,EAAUjM,YAAYqM,GACtB5E,EAASzH,YAAYiM,GACdxE,GAEXjK,EAAapC,UAAUoK,gBAAkB,SAAU0I,EAAShS,EAAQgC,EAAWiQ,EAAYlQ,EAAKiC,EAAQK,GACpG,GAAI5C,GAAQzC,KACR6I,GAASC,QAAS9H,EAAOoE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IAAKiG,QAAQ,EAAOjF,KAAM,cACpFpG,MAAK4D,eAAkB5D,KAAK6N,eAM7B7N,KAAK6N,eAAgB,EACrB7N,KAAKkT,gBAAgBrK,EAAMmK,EAAShS,EAAQgC,EAAWiQ,EAAYlQ,EAAKiC,EAAQK,IANhFrF,KAAKyH,QAAQ,eAAgBoB,EAAM,SAAU2C,GACzC/I,EAAMyQ,gBAAgB1H,EAAoBwH,EAAShS,EAAQgC,EAAWiQ,EAAYlQ,EAAKiC,EAAQK,MAQ3G/C,EAAapC,UAAUgT,gBAAkB,SAAUrK,EAAMmK,EAASG,EAAanQ,EAAWiQ,EAAYlQ,EAAKiC,EAAQK,GAC/G,IAAKwD,EAAKwC,QAAWrL,KAAKwC,QAAQwB,iBAAiB,sBAAsBrD,QAAUX,KAAKgM,cAAgB,CACpG,GAAIhL,GAASmS,EACTC,MAAc,GACdzJ,EAAY3J,KAAK2J,UAAU+D,WAAU,EAczC,IAbA/D,EAAUgD,aAAa,KAAM3M,KAAKwC,QAAQ4C,GAAK,SAAWpF,KAAKqT,gBAC3DrT,KAAK+E,iBACDC,GACAgO,GAAU,EACVrJ,EAAUgD,aAAa,KAAM3M,KAAKwC,QAAQ4C,GAAK,WAC/CpF,KAAKsT,iBAAiB3J,EAAW5G,EAAKC,EAAWqC,GACjDrF,KAAKqT,eAAiB,GAGtBrT,KAAKsT,iBAAiB3J,EAAW5G,EAAKC,EAAWqC,IAGzDrF,KAAKqT,kBACArT,KAAK+E,eAAgB,CACtB,GAAIwO,GAAa5J,EAAU7F,cAAc,mBACrC0P,EAAY7J,EAAU7F,cAAc,kBACpC2P,EAAa9J,EAAU7F,cAAc,uBACrC4P,EAAY/J,EAAU7F,cAAc,qBACxCyP,GAAW5G,aAAa,KAAM3M,KAAKwC,QAAQ4C,GAAK,OAASpF,KAAK2T,YAC9DH,EAAU7G,aAAa,KAAM3M,KAAKwC,QAAQ4C,GAAK,MAAQpF,KAAK2T,YAC5DJ,EAAW5G,aAAa,OAAQ3M,KAAKwC,QAAQ4C,GAAK,OAASpF,KAAK2T,YAChEH,EAAU7G,aAAa,OAAQ3M,KAAKwC,QAAQ4C,GAAK,OAASpF,KAAK2T,YAC/DF,EAAW9G,aAAa,MAAO3M,KAAKwC,QAAQ4C,GAAK,OAASpF,KAAK2T,YAC/DD,EAAU/G,aAAa,MAAO3M,KAAKwC,QAAQ4C,GAAK,MAAQpF,KAAK2T,YAC7D3T,KAAK2T,aAET,GAAIX,EAAS,CACT,GAAIJ,GAAU5S,KAAK8L,YAAY8H,YAAc,gBAAkB,6BAC/DR,GAAcpT,KAAKyE,cAAc,UAAYC,OAASC,MAAOiO,KAChD,GAAIiB,WAASC,QAAS,wBAAyBpD,SAAU,oBAC/DjB,SAAS2D,GAChBA,EAAYzG,aAAa,QAAS3M,KAAKiH,KAAKC,YAAY,gBACxD6M,eAAaX,GAAeY,SAAU,iBACjChU,KAAK+E,gBACN4E,EAAU7F,cAAc,mBAAmBgB,YAAYsO,EAK3D,KAAK,GAHDrB,GAAW/Q,EAAO8C,cAAc,gBAChCmQ,EAAalC,EAAS7F,SACtBgI,EAAS,EACJhM,EAAI,EAAGsJ,EAAOyC,EAAWtT,OAAQuH,EAAIsJ,EAAMtJ,IAC5C+L,EAAW/L,GAAG/D,UAAUC,QAAQ,sBAAwB,IACxD8P,GAAU,EAGlBnC,GAASjN,YAAY6E,EACrB,IAAIiI,GAAQ5R,KAAKmF,UAAUnE,EAAOoE,IAAI8M,MAAM,EAC5CN,GAAMzK,KAAK+M,GACXlU,KAAKmF,UAAUwE,EAAUvE,IAAMwM,EAC1B5R,KAAK4D,gBACN5D,KAAKoD,cAAe,EACpBpD,KAAKmU,aAAcnT,EAAOoE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,KAC5DpF,KAAKoD,cAAe,EAChB6P,GACAjT,KAAKmM,eAAexC,WAK5B3I,GAAO8D,YAAY6E,GACnB3J,KAAKmF,UAAUwE,EAAUvE,KAAO,EAEpC,IAAIpF,KAAKiF,qBACAjF,KAAK+E,eAAgB,CACtB,GAAIqP,GAAUzK,EAAU7F,cAAc,eACzB,IAAI+P,WAASrD,QAASxQ,KAAKiH,KAAKC,YAAY,OAAQwJ,SAAU,kBACpEjB,SAAS2E,GAChBzK,EAAU7F,cAAc,uBAAuBuQ,UAAUC,IAAI,SACzDtU,KAAK8C,aAAe9C,KAAK8C,YAAYC,KACrCqI,YAAUgJ,GAAU,mBAKhC,GADApU,KAAK8C,YAAc,KACf9C,KAAK+E,eAAgB,CACrB,GAAIwP,IAAWzH,YAAa,yBAA0BC,OAAQpD,EAAUvE,GAAIpC,UAAWA,EACnFwR,aAAcxU,KAAKiF,mBAAqBlC,MAAM0R,GAClDzU,MAAKyH,QAAQ,cAAe8M,OAE3B,CACD,GAAI/B,GAAW7I,EAAU7F,cAAc,aAC1B,IAAI4Q,mBACbC,MAAO3U,KAAK2U,MACZjE,SAAU,8CACVoD,QAAS,qBACTc,WAAY5U,KAAK6L,UAAUuD,KAAKpP,KAAMwS,GACtC9F,OAAQ1M,KAAK6L,UAAUuD,KAAKpP,KAAMwS,KAE/B/C,SAAS+C,GAChBA,EAAS7F,aAAa,QAAS3M,KAAKiH,KAAKC,YAAY,cAEzD,IAAKlH,KAAK4D,cAAe,CACrB,GAAIiR,GAAQ7T,EAAOoE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACjD0P,EAAUnL,EAAUvE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,GAC1DpF,MAAKyH,QAAQ,UAAYqB,QAAS+L,EAAOzO,KAAM,cAAe2O,aAAcD,OAIxFxS,EAAapC,UAAUoT,iBAAmB,SAAU3J,EAAW5G,EAAKC,EAAWqC,GAC3E,GAAI8H,GAEAtE,EADAqE,EAAalN,KAAKwC,QAAQ4C,GAAK,UAE/B4P,EAAWrL,EAAU7F,cAAc,kBACvC,IAAI9D,KAAK+E,eAAgB,CAMrB,GALA8D,GAASiE,YAAa,6BAA8BC,OAAQpD,EAAUvE,GAClEoP,aAAcxU,KAAKiF,mBAAqBlC,MAAM0R,GAAWzR,UAAWA,EAAWqC,KAAMA,GACzFrF,KAAKyH,QAAQ,cAAeoB,GAC5B7I,KAAKiV,SAAWjV,KAAKiN,eAAejN,KAAK+E,gBAErC/E,KAAKsN,QACLH,EAAWnN,KAAKiV,SAASpM,EAAM7I,KAAM2J,EAAUvE,GAAI8H,GAAY,OAG9D,IAAIlN,KAAKuN,UAAW,CACrB,GAAIC,GAAexN,KAAKiV,SAASpM,EAAM7I,KAAM2J,EAAUvE,GAAI8H,EAC3DC,GAAyC,IAA7BK,EAAa,GAAGC,SAAkBD,EAAa,GAAKA,EAAa,OAG7EL,GAAWnN,KAAKiV,SAASpM,EAAM7I,KAAM,WAAYkN,GAAY,EAEjE8H,GAASlQ,YAAYqI,GACrBnN,KAAK2N,uBAET,MAAOhE,IAUXrH,EAAapC,UAAUgV,aAAe,SAAUrS,EAAOL,EAAS4D,GAC5D,GAAI+O,GAAa9K,UAAQ7H,EAAS,sBAC9B8C,EAAQtF,KAAK2L,eAAewJ,GAC5BC,EAAc/K,UAAQ7H,EAAS,qBAC/BsN,EAAQ,CACZ,IAAa,QAAT1J,EAEA,YADAd,EAAMvC,IAAMF,EAGhB,IAAa,cAATuD,EAEA,YADAd,EAAMtC,UAAYH,EAGtB,MAAOuS,GAAsD,OAAvCA,EAAYzG,wBAC9ByG,EAAcA,EAAYzG,uBAC1BmB,GAEJ,IAAIzK,GAAOC,EAAMA,MAAMwK,GACnB9H,EAAShI,KAAKoO,UAAU/I,EAAKM,OAC7B0P,EAASrV,KAAKsV,UAAUtN,EAAOqN,OACnC,IAAoB,SAAhBrN,EAAO5B,KACP,GAAIvD,YAAiB+D,MACjB/D,EAAQ7C,KAAKuV,KAAKC,WAAW3S,EAAOwS,OAEnC,IAAIxS,YAAiBjD,OACtB,IAAK,GAAIY,GAAI,EAAGA,EAAIqC,EAAMlC,OAAQH,IAC1BqC,EAAMrC,IAAMqC,EAAMrC,YAAcoG,QAChC/D,EAAMrC,GAAKR,KAAKuV,KAAKC,WAAW3S,EAAMrC,GAAI6U,GAKtDrN,GAAO6E,aACP7M,KAAKyV,eAAejT,EAASK,EAAOuD,IAGpCpG,KAAKmD,YAAa,EAClBnD,KAAK0V,YAAYlT,EAASK,GAC1B7C,KAAKmD,YAAa,IAG1Bb,EAAapC,UAAUuV,eAAiB,SAAUjT,EAASK,EAAOuD,GAK9D,IAJA,GAAIuP,GAAUtL,UAAQ7H,EAAS,sBAC3B8C,EAAQtF,KAAK2L,eAAegK,GAC5BpJ,EAAWlC,UAAQ7H,EAAS,qBAC5BsN,EAAQ,EACLvD,GAAgD,OAApCA,EAASoC,wBACxBpC,EAAWA,EAASoC,uBACpBmB,GAEJ,IAAIzK,GAAOC,EAAMA,MAAMwK,EACV,WAAT1J,EACApG,KAAKuO,eAAiBvO,KAAKoO,UAAUvL,GAEhCwC,IACLrF,KAAKuO,eAAiBvO,KAAKoO,UAAU/I,EAAKM,OAE9C,IAAIqK,EACJhQ,MAAKkQ,eAAiBlQ,KAAKoO,UAAU/I,EAAKM,MAC1C,IAAI8F,GAAczL,KAAK0L,cAAc1L,KAAKqF,KACtCrF,MAAKuO,iBAEDyB,EADAhQ,KAAKuO,eAAenH,UACVpH,KAAKuO,eAAenH,UAGpBpH,KAAKqH,gBAAgBrH,KAAKuO,eAAenI,KAAO,YAGlE,IACIwP,GADAC,GAAW,KAAM,QAAS,UAAW,aAEzC,QAAQzP,GACJ,IAAK,QACDf,EAAKM,MAAQ9C,EACbwC,EAAKkC,MAAQvH,KAAKuO,eAAehH,MACjClC,EAAKe,KAAOpG,KAAKuO,eAAenI,KAChCf,EAAKxC,MAAQ,GACbwC,EAAKiJ,SAAW0B,EAAQ,GAAGnN,KAC3B,MACJ,KAAK,WACD+S,EAAWvQ,EAAKiJ,SAChBjJ,EAAKiJ,SAAWzL,EACZgT,EAAQzR,QAAQiB,EAAKiJ,WAAa,EAClCjJ,EAAKxC,SAEAgT,EAAQzR,QAAQwR,IAAa,IAClCvQ,EAAKxC,MAAQ,GAEjB,MACJ,KAAK,QACDwC,EAAKxC,MAAQA,EAIrB,GAFA7C,KAAK+P,mBAAmB/P,KAAKuO,eAAgB/L,GAC7CxC,KAAK4L,YAAYH,EAAazL,KAAK0L,cAAc1L,KAAKqF,MAAOe,GACzDpG,KAAKuO,gBAAkBvO,KAAKuO,eAAe1B,eAC9B,UAATzG,GAA6B,aAATA,GAAqB,CACzC,GAAI0P,GAASzL,UAAQ7H,EAAS,oBAC9BxC,MAAK+V,gBAAgBD,GAAQ,GAC7B3F,SAAO2F,EAAOhS,cAAc,iBAC5B,IAAIsR,GAAcpV,KAAKoM,eAAe/B,UAAQyL,EAAQ,sBAAuB9V,KAAKuO,eAAgB,SAAUuH,EAAO1Q,GAAIgB,EAAMf,EACpG,cAArBrF,KAAK0O,aAA8B1O,KAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,EACjFgR,EAAYjR,UAAY,mCAGxBiR,EAAYjR,UAAY,qCAExBiR,EAAYzG,wBAA0ByG,EAAYzG,uBAAuBxK,UAAUC,QAAQ,qBAAuB,IAC9GgR,EAAYjR,UAAUC,QAAQ,iBAAmB,IACjDgR,EAAYjR,WAAa,kBAEzBiR,EAAYzG,uBAAuBxK,UAAUC,QAAQ,sBAAwB,IAC7EgR,EAAYzG,uBAAuBxK,WAAa,wBAGpDiR,EAAYzG,wBAA0ByG,EAAYzG,uBAAuBxK,UAAUC,QAAQ,sBAAwB,GACnHgR,EAAYjR,UAAUC,QAAQ,mBAAqB,IACnDgR,EAAYjR,WAAa,mBAE7B,IAAI0E,IAASiE,YAAa,kBAAmBR,OAAQlG,EAAM2G,OAAQ+I,EAAO1Q,GACtEzC,OAAQ3C,KAAK2C,OAAQ0C,KAAMA,EAC/BrF,MAAKyH,QAAQ,cAAeoB,KAIxCvG,EAAapC,UAAU8V,YAAc,SAAUxV,EAAGqI,GAC9C,GACIrG,GADAC,EAAQzC,OAGRwC,EADAqG,EAAKF,MACKE,EAAKF,MAAM3H,OAGC6H,EACIrG,SAElB2B,UAAUC,QAAQ,UAAY,GAAK5B,EAAQ2B,UAAUC,QAAQ,YAAc,GAAK5B,EAAQ2B,UAAUC,QAAQ,WAAa,KAE/H5B,EADmBqG,EACIrG,QAE3B,IAAImH,GAAYU,UAAQ7H,EAAS,sBAC7B+J,EAAWlC,UAAQ7H,EAAS,qBAC5BsG,EAAUa,GAAaA,EAAUvE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACnE2H,EAASR,EAASnH,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACpD6Q,EAAcpN,CACdoN,GAAYzT,SAAWyT,EAAYzT,QAAQ2B,UAAUC,QAAQ,iBAAmB,IAChF5B,EAAUyT,EAAYzT,QAE1B,IAAIK,GACAqT,EACAhF,CACA1O,GAAQ2B,UAAUC,QAAQ,YAAc,GAExC8R,EAAUC,SAAS3T,EAAQ4C,GAAGS,MAAM,YAAY,GAAI,GACpDqL,EACI7M,eAAagG,UAAQ7H,EAAS,qBAAqBsB,cAAc,mBAAoB,gBACzF9D,KAAKuO,eAAiB2C,EAAYvB,eAAeuB,EAAYrO,OAEzDA,EADA7C,KAAKuO,eAAejG,OACZtI,KAAKuO,eAAejG,OAAO4N,KAGpB,GAAM,GACLA,IAIpBrT,EADKL,EAAQ2B,UAAUC,QAAQ,kBAAoB,EAC3CC,eAAa7B,EAAS,eAAeK,MAGrCgG,EAAKhG,MAEC,UAAdgG,EAAKa,MAAoB1J,KAAKoW,oBAC9BC,OAAOC,cAActW,KAAKuW,OAC1BvW,KAAKuW,MAAQF,OAAOG,YAAY,WAAc/T,EAAMgU,YAAY3N,EAASiE,EAAQlK,EAAOrC,EAAGgC,IAAaxC,KAAKoW,qBAG7GpW,KAAKyW,YAAY3N,EAASiE,EAAQlK,EAAOrC,EAAGgC,IAGpDF,EAAapC,UAAUuW,YAAc,SAAUC,EAAMC,EAAM9T,EAAOrC,EAAGoW,GACjE,GAAInU,GAAQzC,KACR6W,GAAe/N,QAAS4N,EAAM3J,OAAQ4J,EAAM9T,MAAOA,EAAOwI,QAAQ,EAAOjF,KAAM,QACnFiQ,QAAOC,cAActW,KAAKuW,OACrBvW,KAAK4D,cAMN5D,KAAK8W,2BAA2BD,EAAYD,EAAKpW,EAAGkW,EAAMC,GAL1D3W,KAAKyH,QAAQ,eAAgBoP,EAAY,SAAUrL,GAC/C/I,EAAMqU,2BAA2BtL,EAAoBoL,EAAKpW,EAAGkW,EAAMC,MAO/ErU,EAAapC,UAAU4W,2BAA6B,SAAUjO,EAAMrG,EAAShC,EAAGsI,EAASiE,GAChFlE,EAAKwC,SACNrL,KAAK0V,YAAYlT,EAASqG,EAAKhG,MAAOrC,GACjCR,KAAK4D,eACN5D,KAAKyH,QAAQ,UAAYqB,QAASA,EAASiE,OAAQA,EAAQlK,MAAOgG,EAAKhG,MAAOwI,QAAQ,EAAOjF,KAAM,YAI/G9D,EAAapC,UAAUiP,YAAc,SAAUtG,GAC3C,GAAIA,EAAKkO,aAAc,CACnB,GAAIhG,GAAY1G,UAAQxB,EAAKrG,QAAS,mBAAqB6H,UAAQxB,EAAKrG,QAAS,qBACjFxC,MAAKgX,iBAAiBjG,GACtB/Q,KAAKiX,aAAe,KACpBjX,KAAKqD,kBAAmB,CACxB,IAAI2E,GAAShI,KAAKoO,UAAUvF,EAAKhG,MACjC,IAAImF,GAAUA,EAAO6E,aACjB7M,KAAKyV,eAAe5M,EAAKrG,QAASwF,EAAOrC,MAAO,aAE/C,CAKD,IAJA,GAAIgE,GAAYU,UAAQxB,EAAKrG,QAAS,sBAClC8C,EAAQtF,KAAK2L,eAAehC,GAC5B4C,EAAWlC,UAAQxB,EAAKrG,QAAS,qBACjCsN,EAAQ,EACLvD,GAAgD,OAApCA,EAASoC,wBACxBpC,EAAWA,EAASoC,uBACpBmB,GAEJ9P,MAAK4P,WAAWtK,EAAMA,MAAMwK,GAAQjH,MAIhDvG,EAAapC,UAAU0P,WAAa,SAAUvK,EAAM6R,GAChD,GAAKA,EAAQrH,SAAb,CAGA,GAAIsH,MACAtE,EAAaxI,UAAQ6M,EAAQ1U,QAAS,iBAC1CqQ,GAAaA,GAA0BxI,UAAQ6M,EAAQ1U,QAAS,qBAChE,IAAI4U,GAAS/S,eAAa6S,EAAQ1U,QAAS,gBAEvCsG,EADUuB,UAAQ6M,EAAQ1U,QAAS,sBACjB4C,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,GACxDpF,MAAKqX,aAAaxE,EAAYuE,EAAQtO,EAASzD,EAAM8R,EAAUD,KAEnE5U,EAAapC,UAAUmX,aAAe,SAAUC,EAAKC,EAAIb,EAAMc,EAAIC,EAAOC,GACtE,GAAIjV,GAAQzC,IACZ,IAAIsX,EAAK,CACL,GAAIxI,GAAW9O,KAAK4D,cAAgB5D,KAAK0F,kBAAkB6R,EAAG1U,OAAS0U,EAAG1U,KAC1E7C,MAAKuO,eAAiBgJ,EAAG5H,eAAeb,EACxC,IAEI+H,IAAe/N,QAAS4N,EAAM3J,OAFnB1C,UAAQiN,EAAK,qBACNlS,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACNuS,cAAeJ,EAAG1U,MAAOwI,QAAQ,EAAOjF,KAAM,QAC3FpG,MAAK4D,cAMN5D,KAAK4X,mBAAmBf,EAAYY,EAAOH,EAAKE,EAAIE,GALpD1X,KAAKyH,QAAQ,eAAgBoP,EAAY,SAAUrL,GAC/C/I,EAAMmV,mBAAmBpM,EAAoBiM,EAAOH,EAAKE,EAAIE,SAOpE,CACD,GAAIG,GAAexN,UAAQqN,EAAKlV,QAAS,mBACzCxC,MAAK8X,eAAeR,EAAKO,EAAcN,EAAIb,EAAMc,EAAIC,EAAOC,KAGpEpV,EAAapC,UAAU4X,eAAiB,SAAUR,EAAKS,EAAKR,EAAIb,EAAMc,EAAIC,EAAOC,GAC7E,GAGIb,GAHApU,EAAQzC,IAIR+X,IAGAlB,GAAe/N,QAAS4N,EAAM3J,OAFnB1C,UAAQ0N,EAAK,qBACN3S,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACN4S,cAAeT,EAAGzH,MAAOzE,QAAQ,EAAOjF,KAAM,YACvFpG,KAAK4D,cAMN5D,KAAKiY,sBAAsBpB,EAAYS,EAAKG,EAAOD,EAAIE,GALvD1X,KAAKyH,QAAQ,eAAgBoP,EAAY,SAAUrL,GAC/C/I,EAAMwV,sBAAsBzM,EAAoB8L,EAAKG,EAAOD,EAAIE,MAQxE1X,KAAKkY,iBAAiBZ,EAAKE,EAAIC,EAAOC,IAG9CpV,EAAapC,UAAU0X,mBAAqB,SAAU/O,EAAMsO,EAAUtE,EAAYxN,EAAM6R,GAOpF,IAAK,GAND3K,GAAWlC,UAAQwI,EAAY,qBAC/BgF,EAAexN,UAAQ6M,EAAQ1U,QAAS,oBAExCsG,EADUuB,UAAQ6M,EAAQ1U,QAAS,sBACjB4C,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACpDgS,EAAS/S,eAAa6S,EAAQ1U,QAAS,gBACvC2V,EAAc5L,EAASvI,iBAAiB,4BACnCxD,EAAI,EAAGA,EAAI2X,EAAYxX,OAAQH,IACpC6D,eAAa8T,EAAY3X,GAAI,WAAW8D,SAE5C,IAAKuE,EAAKwC,OAiBNrL,KAAK8X,eAAejF,EAAYgF,EAAcT,EAAQtO,EAASzD,EAAM8R,EAAUD,OAZ/E,IAJAC,EAAS/Q,KAAOpG,KAAKuO,eAAenI,KAChCmG,EAASzI,cAAc,iBACvBuB,EAAKxC,MAAQ,IAEgB,WAA7B7C,KAAKuO,eAAenI,KAEpB,IADA+Q,EAAS/Q,KAAOpG,KAAKuO,eAAe/H,QAAQ,GAAGJ,KACxCpG,KAAKuO,eAAe/H,SACvBxG,KAAKoY,gBAAgBvF,EAAYxN,EAAM8R,EAAUD,OAIrDlX,MAAKgX,iBAAiBnE,GACtB7S,KAAK8X,eAAejF,EAAYgF,EAAcT,EAAQtO,EAASzD,EAAM8R,EAAUD,IAO3F5U,EAAapC,UAAU8W,iBAAmB,SAAUnE,GAChD,KAAOA,GAAcA,EAAWwF,mBAAmBhE,UAAUiE,SAAS,sBAClEtY,KAAK+V,gBAAgBlD,GACrBA,EAAWwF,mBAAmBE,UAGtCjW,EAAapC,UAAUkY,gBAAkB,SAAUvF,EAAYxN,EAAM8R,EAAUD,GAC3E,GAAInG,GAAY1G,UAAQwI,EAAY,iBAChC1B,EAAWnR,KAAKyE,cAAc,OAASC,OAASC,MAAO,oBAAqBS,GAAI,YAAcpF,KAAKwY,mBACvGzH,GAAU0H,aAAatH,EAAUJ,EAAUjN,cAAc,oBACzD,IAAI4U,GAASrO,UAAQ8G,EAAU,qBAAqB/L,GAChD6R,EAAejX,KAAKyE,cAAc,SAAWC,OAAS0B,KAAM,OAAQhB,GAAIsT,EAAS,gBAAkB1Y,KAAKwY,mBAC5GrH,GAASrM,YAAYmS,EACrB,IAAIjN,GAAUhK,KAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,EAAK,QAAU,QACvEuU,EAAelZ,OAAOwG,KAAKjG,KAAKuO,eAAe/H,QAAQ,IACvD2H,EAAe,GAAIqB,iBACnBT,WAAY/O,KAAKuO,eAAe/H,QAChC7D,OAAQ3C,KAAK2C,OACbqM,YAAahP,KAAKiH,KAAKC,YAAY,eACnC+H,YAAe0J,EAAahY,OAAS,EAAKqJ,EAAS,OACnDkF,OAAQlP,KAAKmP,YAAYC,KAAKpP,MAC9B8P,MAAO,EACPT,KAAMrP,KAAKsP,UAAUF,KAAKpP,OAG9B,IADAmO,EAAasB,SAAS,IAAMiJ,EAAS,gBAAkB1Y,KAAKwY,kBACxDxY,KAAK4D,cAEL,IAAK,GADDgV,GAAW5Y,KAAKuO,eAAe/H,QAC1BhG,EAAI,EAAGA,EAAIoY,EAASjY,OAAQH,IACjC,GAAI6E,EAAKM,QAAUiT,EAASpY,GAAGmF,OAASN,EAAKM,MAAMvB,QAAQwU,EAASpY,GAAGmF,QAAU,EAAG,CAChFwI,EAAatL,MAAQ+V,EAASpY,GAAGmF,MACjC3F,KAAKuO,eAAiBqK,EAASpY,EAC/B,OAIZR,KAAKwY,mBACLxY,KAAKiX,aAAeA,EAEpBC,EAAQrH,SAAWqH,EAAQrH,SACtB7P,KAAK4D,gBACN5D,KAAKuO,eAAiBvO,KAAKuO,eAAe/H,QAAQ,IAEjDxG,KAAKuO,eAAe/H,SACrBxG,KAAKkY,iBAAiB/G,EAAU9L,EAAM8R,EAAUD,IAGxD5U,EAAapC,UAAU+X,sBAAwB,SAAUpB,EAAYhE,EAAYsE,EAAU9R,EAAM6R,GAC7F,IAAKL,EAAWxL,OAAQ,CACpB,GAAIwM,GAAexN,UAAQ6M,EAAQ1U,QAAS,oBACxC+O,EAAUsG,EAAaQ,mBACvBnH,EAAc7M,eAAa6S,EAAQ1U,QAAS,gBAC5CoT,EAAWvQ,EAAKiJ,SAAWjJ,EAAKiJ,SAASuK,WAAWvN,cAAgB,EACxE6L,GAAS7I,SAAW4C,EAAYrO,MAAMgW,UACtC,IAAIC,GAAW3B,EAAS7I,SAAShD,aAYjC,IAXI6L,EAAS7I,SAAShD,cAAclH,QAAQ,YAAc,GAAM+S,EAAS7I,SAAShD,cAAclH,QAAQ,OAAS,GAC1G+S,EAAS7I,SAAShD,cAAclH,QAAQ,YAAc,GACzDyO,EAAagF,EAAalJ,uBAC1BwI,EAAS/Q,KAAOf,EAAKe,MACjB+Q,EAAS7I,SAAShD,cAAclH,QAAQ,MAAQ,GAAKwR,EAASxR,QAAQ,MAAQ,KAC9EiB,EAAKxC,WAGkB,gBAAfwC,GAAKxC,OAAoC,MAAdwC,EAAKxC,QAC5CwC,EAAKxC,MAAQwC,EAAKxC,MAAMlC,OAAS,EAAI0E,EAAKxC,MAAM,GAAmB,WAAdwC,EAAKe,KAAoB,EAAI,IAElF8Q,EAAQ6B,iBAAkB,CAC1B,GAAIC,GAAY9B,EAAQ6B,iBAAiBlW,MAAMgW,WAAWvN,eACrD0N,EAAU5U,QAAQ,YAAc,IAAM4U,EAAU5U,QAAQ,OAAS,GAAM4U,EAAU5U,QAAQ,SAAW,GACjG4U,EAAU5U,QAAQ,UAAY,IAAO4U,EAAU5U,QAAQ,YAAc,KACzEyO,EAAagF,EAAalJ,uBAC1BwI,EAAS/Q,KAAOf,EAAKe,MAO7B,GAJKwP,EAASxR,QAAQ,OAAS,GAAKwR,EAASxR,QAAQ,MAAQ,GAAO0U,EAAS1U,QAAQ,OAAS,GACvF0U,EAAS1U,QAAQ,MAAQ,IAC5ByO,EAAa,MAEbsE,EAAS7I,SAASlK,QAAQ,SAAW,GAAM+S,EAAS7I,SAASlK,QAAQ,UAAY,EAAI,CACrF,GAAI6U,GAAapB,EAAa3T,cAAcJ,cAAc,iBACtDqU,EAAcc,EAAWnV,cAAc,2BACvCqU,IACA9T,eAAa8T,EAAa,WAAW7T,UAEzCY,eAAa+T,GAAa,UAC1B7N,YAAU6N,GAAa,UAEvB1H,GAAWvR,KAAKoO,UAAU/I,EAAKM,OAAOwH,WACtC0F,EAAagF,EAAalJ,wBAE9B3O,KAAKkY,iBAAiBrF,EAAYxN,EAAM8R,EAAUD,KAG1D5U,EAAapC,UAAUgY,iBAAmB,SAAUrF,EAAYxN,EAAM8R,EAAUD,GAC5E,GAEIE,GACA8B,EACAC,EAJAtB,EAAexN,UAAQ6M,EAAQ1U,QAAS,mBAK5C,IAAIqQ,EAQA,GAPAgF,EAAehF,EAAWwF,mBACtBxF,EAAWwB,UAAUiE,SAAS,uBAC9BnB,EAAS/Q,KAAOpG,KAAKuO,eAAenI,KAEpCyR,EADQA,EAAaxD,UAAUiE,SAAS,qBACjBT,EAAaQ,mBAAqBR,GAE7DzM,YAAUyM,GAAe,cACrBA,EAAauB,kBAAmB,CAChChC,EAAS/S,eAAawT,EAAa/T,cAAc,mBAAoB,eACrE,IAAIuV,GAAWhV,eAAawO,EAAW/O,cAAc,mBAAoB,eACzEqT,GAAS7I,SAAW8I,EAAOvU,MAC3BsU,EAAS/Q,KAAOpG,KAAKoO,UAAUiL,EAASxW,OAAOuD,IAC/C,IAAIyJ,GAAWqH,EAAQrH,QACvB7P,MAAKsZ,aAAazB,EAAchI,EAAUqH,EAAQ6B,kBAAkB,EAAM1T,EAAM8R,EAAUD,EAAQ1U,aAEjG,CACD,GAAIkW,GAASrO,UAAQwN,EAAc,qBAAqBzS,EACxD+T,GAAUnZ,KAAKyE,cAAc,SAAWC,OAAS0B,KAAM,OAAQhB,GAAIsT,EAAS,kBAC5Eb,EAAa/S,YAAYqU,GACrBnZ,KAAKuO,eAAenH,UACpB8R,EAAelZ,KAAKuO,eAAenH,UAE9B8P,EAAQrH,WACbqJ,EAAelZ,KAAKqH,gBAAgBrH,KAAKuO,eAAenI,KAAO,YAEnE,IAAI4D,GAAUhK,KAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,EAAK,QAAU,QACvEvB,EAAQqW,EAAa,GAAGrW,KAC5BA,GAAQwC,GAA0B,KAAlBA,EAAKiJ,SAAkBjJ,EAAKiJ,SAAoBzL,CAChE,IAAI0W,OAAc,EAClBA,IACIxK,WAAYmK,EACZvW,QAAUC,KAAM,MAAOC,MAAO,SAC9BmM,YAAahP,KAAKiH,KAAKC,YAAY,kBACnC+H,YAAeiK,EAAavY,OAAS,EAAKqJ,EAAS,OACnDkF,OAAQlP,KAAKmP,YAAYC,KAAKpP,MAC9B8P,MAAO,EACPjN,MAAOA,EACPwM,KAAMrP,KAAKsP,UAAUF,KAAKpP,OAE1BA,KAAKwZ,gBACLD,EAAcnZ,KAAamZ,EAAavZ,KAAKwZ,gBAE9B,GAAIhK,gBAAa+J,GACvB9J,SAAS,IAAMiJ,EAAS,gBACrCvB,EAAS7I,SAAYjJ,GAA0B,KAAlBA,EAAKiJ,WAAoBgD,oBAAkBjM,EAAKiJ,UAAajJ,EAAKiJ,SAAW4K,EAAa,GAAGrW,MACtH7C,KAAK4D,gBACLuT,EAAS/Q,KAAOpG,KAAKuO,eAAenI,KACpC+Q,EAAS7I,SAAWjJ,EAAKiJ,UAE7BtO,KAAKsZ,aAAazB,EAAc7X,KAAKuO,eAAgB2I,EAAQ6B,kBAAkB,EAAO1T,EAAM8R,EAAUD,EAAQ1U,SAGjHxC,KAAK4D,eACN5D,KAAK0V,YAAYwB,EAAQ1U,QAAS0U,EAAQuC,OAGlDnX,EAAapC,UAAUoP,UAAY,SAAUzG,GACrC7I,KAAKiM,WACLb,YAAUvC,EAAK6Q,MAAMlX,SAAU,UAGvCF,EAAapC,UAAU6V,gBAAkB,SAAU/U,EAAQ4M,GAKvD,IAAK,GAJDpL,GAAUoL,EAAiB5M,EAASA,EAAOqX,mBAC3CtU,EAAevB,EAAQwB,iBAAiB,mBACxC2V,EAAanX,EAAQwB,iBAAiB,gCACtCwC,EAAUxG,KAAKwG,QACVhG,EAAI,EAAGyD,EAAMF,EAAapD,OAAQH,EAAIyD,EAAKzD,IAAK,CACrD,GAAIuD,EAAavD,GAAG6T,UAAUiE,SAAS,aACnCjU,eAAaN,EAAavD,GAAI,WAAW8D,UACzC6L,SAAOzD,SAAO,SAAW3I,EAAavD,GAAG4E,GAAI5C,QAE5C,IAAIuB,EAAavD,GAAG6T,UAAUiE,SAAS,kBACpCtY,KAAK6Q,iBAAmB9M,EAAavD,GAAG0D,cAAcC,UAAUC,QAAQ,cAAgB,GACxFC,eAAaN,EAAavD,GAAG0D,cAAe,WAAWI,UAE3DD,eAAaN,EAAavD,GAAI,gBAAgB8D,cAE7C,IAAIP,EAAavD,GAAG6T,UAAUiE,SAAS,WACxCjU,eAAaN,EAAavD,GAAI,SAAS8D,cAEtC,IAAIP,EAAavD,GAAG6T,UAAUiE,SAAS,oBACxCjU,eAAaN,EAAavD,GAAI,kBAAkB8D,UAChD6L,SAAOzD,SAAO,SAAW3I,EAAavD,GAAG4E,GAAI5C,QAE5C,IAAIuB,EAAavD,GAAG6T,UAAUiE,SAAS,gBACxCjU,eAAaN,EAAavD,GAAI,cAAc8D,cAE3C,IAAIP,EAAavD,GAAG6T,UAAUiE,SAAS,iBACxCjU,eAAaN,EAAavD,GAAI,eAAe8D,cAE5C,IAAIP,EAAavD,GAAG2D,UAAUC,QAAQ,eAAiB,EAExD,IAAK,GADDwO,GAAU7O,EAAavD,GAAG2D,UACrB+D,EAAI,EAAGsJ,EAAOhL,EAAQ7F,OAAQuH,EAAIsJ,EAAMtJ,IAC7C,GAAI1B,EAAQ0B,GAAGiF,UAAYyF,EAAQxO,QAAQoC,EAAQ0B,GAAGvC,QAAU,EAAG,CAC/D3F,KAAK4Z,gBAAgBpT,EAAQ0B,GAAInE,EAAavD,GAAG4E,GACjD,OAIRkE,SAASC,eAAexF,EAAavD,GAAG4E,KACxC+K,SAAOpM,EAAavD,IAG5B,IAAK,GAAIA,GAAI,EAAGyD,EAAM0V,EAAWhZ,OAAQH,EAAIyD,EAAKzD,IAAK,CACnD,GAAImZ,EAAWnZ,GAAG2D,UAAUC,QAAQ,eAAiB,EAEjD,IAAK,GADDwO,GAAU+G,EAAWnZ,GAAG2D,UACnB+D,EAAI,EAAGsJ,EAAOhL,EAAQ7F,OAAQuH,EAAIsJ,EAAMtJ,IAC7C,GAAI1B,EAAQ0B,GAAGiF,UAAYyF,EAAQxO,QAAQoC,EAAQ0B,GAAGvC,QAAU,EAAG,CAC/D3F,KAAK4Z,gBAAgBpT,EAAQ0B,GAAIyR,EAAWnZ,GAAG4E,GAC/C,OAIZ+K,SAAOwJ,EAAWnZ,IAGtB,IAAK,GADDqZ,GAAkBrX,EAAQwB,iBAAiB,+BACtCxD,EAAI,EAAGyD,EAAM4V,EAAgBlZ,OAAQH,EAAIyD,EAAKzD,IACnD2P,SAAO0J,EAAgBrZ,KAG/B8B,EAAapC,UAAU0Z,gBAAkB,SAAU5R,EAAQ8R,GACvD,GAAI3M,EACJ,IAA+B,gBAApBnF,GAAOmF,cAAqDsH,KAA5BzM,EAAOmF,SAAS7I,QAA3D,CAMA,GAAIyV,IALA5M,EAAWnF,EAAOmF,UAKF7I,OACpB,IAAI6I,EAAS7I,QAAS,CAClB,GAAI0V,OAAmB,EACnB1Q,UAASC,eAAeuQ,KACxBE,EAAmB3P,UAAQf,SAASC,eAAeuQ,GAAS,iBAAiB9V,iBAAiB,gBAE9E,gBAAT+V,IACPA,EAAOE,WAASF,EAAM1D,UACf1Q,MAAOqC,EAAOrC,MAAOuU,UAAWJ,EAAQK,SAAUH,IAGzD7M,EAAS7I,SAAUqB,MAAOqC,EAAOrC,MAAOuU,UAAWJ,EAAQK,SAAUH,OAUjF1X,EAAapC,UAAUka,UAAY,SAAUzU,GACzC,GAEI9C,GAFAwX,KACAxS,KAEAyS,IACAta,MAAK4F,UAAUjF,OAAS,IACxB2Z,EAAY3U,EAAME,MAAM7F,KAAK4F,WAEjC,IAAImJ,GAAa/O,KAAK+F,QACtB,IAAI/F,KAAK+F,SAAS,GACd,IAAK,GAAIvF,GAAI,EAAGwR,EAAOjD,EAAWpO,OAAQH,EAAIwR,EAAMxR,IAAK,CACrD,GAAImH,KACJ,IAAI2S,EAAU3Z,OAAS,EAGnB,IAAK,GAFD4Z,GAAUxL,EAAWvO,GACrBga,MAAW,GACNtS,EAAI,EAAGsJ,EAAO8I,EAAU3Z,OAAQuH,EAAIsJ,EAAMtJ,IAC/CsS,EAAWF,EAAUpS,GACjBoS,EAAU3Z,SAAYuH,EAAI,GAC1BrF,EAAQ0X,EAAQC,GACZzY,OAAOwY,EAAQC,MAAeD,EAAQC,IAAaD,EAAQC,GAAY,GAAM,IAC7E3X,EAAQ0X,EAAQC,GAAU3B,aAI9B0B,EAAUA,EAAQC,OAK1B3X,GAAQkM,EAAWvO,GAAGmF,GAClB5D,OAAOgN,EAAWvO,GAAGmF,MAAYoJ,EAAWvO,GAAGmF,IAAUoJ,EAAWvO,GAAGmF,GAAS,GAAM,IACtF9C,EAAQkM,EAAWvO,GAAGmF,GAAOkT,WAG/BhW,KAASwX,KACXA,EAASxX,GAAS,EACdyX,EAAU3Z,OAAS,EACnBX,KAAKya,mBAAmB9S,EAAM2S,EAAWzX,GAGzC8E,EAAKhC,GAAS9C,EAElBgF,EAAOV,KAAKQ,IAIxB,MAAOE,IAEXvF,EAAapC,UAAUua,mBAAqB,SAAU/I,EAAK4I,EAAWzX,GAGlE,IAAK,GAFD5B,GACAyZ,EAAYJ,EAAU3Z,OAAS,EAC1Bga,EAAI,EAAGA,EAAID,IAAaC,GAC7B1Z,EAAMqZ,EAAUK,KACHjJ,KACTA,EAAIzQ,OAERyQ,EAAMA,EAAIzQ,EAEdyQ,GAAI4I,EAAUI,IAAc7X,GAEhCP,EAAapC,UAAU0a,kBAAoB,SAAU7L,EAAYpJ,GAG7D,IAAK,GAFD0U,MACAxS,KACKrH,EAAI,EAAGwR,EAAOjD,EAAWpO,OAAQH,EAAIwR,EAAMxR,IAAK,CACrD,GAAIqC,GAAQkM,EAAWvO,GAAGmF,EACtB5D,QAAOgN,EAAWvO,GAAGmF,MAAYoJ,EAAWvO,GAAGmF,IAAUoJ,EAAWvO,GAAGmF,GAAS,GAAM,IACtF9C,EAAQkM,EAAWvO,GAAGmF,GAAOkT,WAEjC,IAAIlR,KACE9E,KAASwX,KACXA,EAASxX,GAAS,EAClB8E,EAAKhC,GAAS9C,EACdgF,EAAOV,KAAKQ,IAGpB,MAAOE,IAEXvF,EAAapC,UAAU2a,kBAAoB,SAAUxV,EAAMgH,EAAU7L,EAAGsa,EAAexS,GACnF,GACIyS,GADAC,GAAY,EAEZC,GAAW,CACXjb,MAAK+F,SAAS,IACVtG,OAAOwG,KAAKjG,KAAK+F,SAAS,IAAI3B,QAAQiB,EAAKM,QAAU,IACrDqV,GAAY,EACZD,EAAK/a,KAAK4a,kBAAkB5a,KAAK+F,SAAUV,EAAKM,QAGxDqV,GAAY3V,EAAKmB,SAAkBwU,GAC9Bhb,KAAK+F,SAASpF,QAAU2H,EAAO3H,SAChCsa,GAAW,EAEf,IAAIC,EACJA,IACInM,WAAYkM,EAAW3S,EAAU0S,EAAYD,EAAK/a,KAAKmb,YACvDC,MAAO,GAAIC,UAAOhW,EAAKM,QACvBhD,QAAUC,KAAM5C,KAAKsb,aAAa3V,MAAO9C,MAAO7C,KAAKsb,aAAa3V,OAClEqJ,YAAahP,KAAKiH,KAAKC,YAAY,eACnCrE,MAAOiY,EACPS,KAAM,WACNC,MAAO,OACPtM,OAAQlP,KAAKgW,YAAY5G,KAAKpP,KAAMQ,GACpCib,MAAOzb,KAAK0b,WAAWtM,KAAKpP,KAAMQ,GAClCmb,YAAa3b,KAAK4b,gBAAgBxM,KAAKpP,KAAMqM,EAAW,YAAc7L,GACtE6O,KAAMrP,KAAKsP,UAAUF,KAAKpP,OAE1BA,KAAK6b,YAAc7b,KAAK6b,WAAWC,mBACnCZ,EAAmB9a,KAAa8a,EAAkBlb,KAAK6b,WAAWC,kBAEtE,IAAIC,GAAiB,GAAIzY,eAAY4X,EACrCa,GAAetM,SAAS,IAAMpD,EAAW,YAAc7L,GACvDR,KAAK0V,YAAYqG,EAAevZ,QAASsY,EAAe,IAE5DxY,EAAapC,UAAU0b,gBAAkB,SAAUvP,EAAUxD,GACzD,GAAI7I,KAAK+O,qBAAsBiN,eAAa,CACxC,GAAIxZ,GAAU8G,SAASC,eAAe8C,GAClC6E,EAAc7M,eAAagG,UAAQ7H,EAAS,qBAAqBsB,cAAc,mBAAoB,eACvG9D,MAAKuO,eAAiB2C,EAAYvB,eAAeuB,EAAYrO,MAC7D,IAAIA,GAAQ7C,KAAKuO,eAAe5I,MAC5BqV,GAAY,CACZhb,MAAK+F,SAAS,IACVtG,OAAOwG,KAAKjG,KAAK+F,SAAS,IAAI3B,QAAQvB,IAAU,IAChDmY,GAAY,GAGfA,IACDnS,EAAKwC,QAAS,EACdrL,KAAKic,oBAAoBzZ,EAASK,MAI9CP,EAAapC,UAAU+b,oBAAsB,SAAUzZ,EAASK,GAC5D7C,KAAKkc,mBAAmB1Z,EAASK,IAErCP,EAAapC,UAAUgc,mBAAqB,SAAU1Z,EAASK,GAC3D,GACIsZ,GADA1Z,EAAQzC,KAERoc,EAAW,GAAIC,YACf1U,EAAO3H,KAAKmb,YAAYmB,cAAa,GAAIjB,UAAQ3O,OAAO7J,IACxD0Z,EAAiBlY,eAAa7B,EAAS,cAC3C+Z,GAAeC,cACfxc,KAAKyc,cAAcpS,UAAQ7H,EAAS,2BAA2B0B,eAC/DwY,cAAYrS,UAAQ7H,EAAS,2BAA2B0B,eACxDyD,EAAKgV,KAAK,SAAUC,GAEZT,EADAS,EAAEC,QAAUD,EAAEC,OAAOhV,OACT+U,EAAEC,OAAOhV,OAGT+U,EAAE/U,OAElBpF,EAAMsD,SAAWyE,SAAO/H,EAAMsD,SAAUoW,MAAe,GACvDI,EAAexN,WAAatM,EAAMmY,kBAAkBnY,EAAMsD,SAAUlD,GACpE2Z,cAAYnS,UAAQ7H,EAAS,2BAA2B0B,iBACzD4Y,MAAM,SAAUF,GACfR,EAASW,OAAOH,MAGxBta,EAAapC,UAAUuc,cAAgB,SAAUja,GAC7C,GAAIwa,GAAchd,KAAKyE,cAAc,QAAUC,OAASC,MAAO,iBAC/DnC,GAAQsC,YAAYkY,GACpBP,iBAAgBzb,OAAQgc,EAAaxB,MAAOyB,UAAQC,SAAW,OAAS,UAE5E5a,EAAapC,UAAUwb,WAAa,SAAUlb,EAAGqI,GAC7C,GAAIrG,GAAU8G,SAASC,eAAeV,EAAK6Q,MAAMlX,QAAQ4C,GAAG0F,QAAQ,SAAU,KAC1EjI,EAAQwB,eAAa7B,EAAS,eAAeK,KACjD7C,MAAK0V,YAAYlT,EAASK,EAAOrC,IAErC8B,EAAapC,UAAUid,gBAAkB,SAAUnc,EAAQ6O,EAAUxK,EAAM8R,GACvE,GAAIiG,GAAY/S,UAAQrJ,EAAQ,qBAC5Bqc,EAAeD,EAAUpZ,iBAAiB,eAC1CoT,EAAS/S,eAAa+Y,EAAUtZ,cAAc,kCAAmC,gBACjFkE,EAAShI,KAAKoO,UAAUgJ,EAAOvU,MACnC,IAAiC,gBAAtBgN,GAAS1C,cAAqDsH,KAA5B5E,EAAS1C,SAASmQ,MAAqB,CAChF,GAAIzU,IAASxD,KAAMA,EAAM0H,OAAQqQ,EAAUhY,GAAIkJ,SAAU6I,EAAS7I,SAAU3I,MAAOqC,EAAOrC,MACtFmH,YAAa,wBACjB9M,MAAKyH,QAAQ,cAAeoB,OAE3B,CACD,GAAIsE,GAAW0C,EAAS1C,QACM,iBAAnBA,GAASmQ,MAChBrD,WAAS9M,EAASmQ,MAAOjH,SAAU8D,SAAUkD,EAAa1c,OAAS,EAAI0c,EAAeA,EAAa,GAAI/U,OAAQjD,EAAKxC,MAChHyL,SAAU6I,EAAS7I,SAAU3I,MAAOqC,EAAOrC,MAAOoJ,WAAY/G,EAAOM,SAGzEuH,EAAS1C,SAASmQ,OAAQnD,SAAUkD,EAAa1c,OAAS,EAAI0c,EAAeA,EAAa,GACtF/U,OAAQjD,EAAKxC,MAAOyL,SAAU6I,EAAS7I,SAAU3I,MAAOqC,EAAOrC,MAAOoJ,WAAY/G,EAAOM,WAIzGhG,EAAapC,UAAUqd,YAAc,SAAUlR,GAC3C,GAAIgN,GAAWhV,eAAaiF,SAASC,eAAe8C,EAAW,cAAe,eAC9E,OAAOrM,MAAKoO,UAAUiL,EAASxW,QAEnCP,EAAapC,UAAUsd,gBAAkB,SAAUnR,EAAUoR,EAAaC,GACtE,GAAI7N,GAAW7P,KAAKud,YAAYlR,EAChC,IAAIiF,oBAAkBzB,EAAShN,OAC3B,MAAO6a,GAAWD,GAAe,EAAG,GAAK,EAAIA,KAAmB,EAEpE,IAAIA,GACA,KAAM5N,EAAShN,gBAAiBjD,QAC5B,OAAQiQ,EAAShN,WAIrB,IAAIgN,EAAShN,gBAAiBjD,OAC1B,MAAOiQ,GAAShN,MAAM,EAG9B,OAAOgN,GAAShN,OAEpBP,EAAapC,UAAUyd,kBAAoB,SAAUtR,EAAUhH,EAAMiJ,EAAUsP,EAAKC,GAChF,GAAIC,GAEAhD,EADAiD,EAAa/d,KAAKud,YAAYlR,GAE9B2R,EAA6C,gBAAxBD,GAAW5Q,QAOpC,IALI2N,EADA9a,KAAK4D,eAAiB5D,KAAKie,UAAYD,EACvB3Y,EAAKxC,MAGL7C,KAAKwd,gBAAgBnR,GAAU,GAAO,GAExC,OAAbiC,GAAkC,UAAbA,IAA0BtO,KAAK+F,SAASpF,SAAUod,EAAWzV,OAWlF,CACgB,OAAbgG,GAAkC,UAAbA,IAErBwM,GADAgD,EAAc9d,KAAK4D,cAAgByB,EAAKxC,MAAQ7C,KAAKwd,gBAAgBnR,GAAU,GAAM,IACzD7D,KAAK,KAErC,IAAI0V,OAAS,EACbA,IACIlP,YAAahP,KAAKiH,KAAKC,YAAY,eACnCiX,MAAOne,KAAKgW,YAAY5G,KAAKpP,KAAM4d,IAEnC5d,KAAK6b,YAAc7b,KAAK6b,WAAWuC,eACnCF,EAAS9d,KAAa8d,EAAQle,KAAK6b,WAAWuC,cAElD,IAAIC,GAAW,GAAIC,WAAQJ,EAC3BG,GAAS5O,SAAS,IAAMpD,EAAW,YAAcuR,GACjDS,EAASxb,MAAQiY,EACjBuD,EAASE,eA1BTT,GAAc9d,KAAK4D,cAAgByB,EAAKxC,MAAQ7C,KAAKwd,gBAAgBnR,GAAU,GAAM,GACrFrM,KAAK6a,kBAAkBkD,EAAY1R,EAAUuR,EAAKE,EAAaC,EAAWzV,QACjD,aAArBtI,KAAK0O,aAA8B1O,KAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,EACjFyZ,EAAYjU,MAAM4R,MAAQ,QAG1BqC,EAAYjU,MAAM4R,MAAQ,KAC1BqC,EAAYjU,MAAM4U,SAAW,UAsBzClc,EAAapC,UAAUue,kBAAoB,SAAUpS,EAAUhH,EAAMiJ,EAAUsP,EAAKC,EAAahO,EAAUlP,GACvG,GAAIod,GAAa/d,KAAKud,YAAYlR,GAC9B2R,EAA6C,gBAAxBD,GAAW5Q,SAChC2Q,EAAe9d,KAAK4D,eAAiB5D,KAAKie,UAAYD,EAAc3Y,EAAKxC,MAAQ7C,KAAKwd,gBAAgBnR,GAAU,GAAO,EAC3H,IAAkB,OAAbiC,GAAkC,UAAbA,IAA0BtO,KAAK+F,SAASpF,SAAUod,EAAWzV,OAWlF,GAAiB,OAAbgG,GAAkC,UAAbA,EAAsB,CAEhD,GAAIoQ,IADJZ,EAAc9d,KAAK4D,cAAgByB,EAAKxC,MAAQ7C,KAAKwd,gBAAgBnR,GAAU,GAAM,IAC5D7D,KAAK,KAC1BmW,MAAS,EACbA,IACI3P,YAAahP,KAAKiH,KAAKC,YAAY,eACnCiX,MAAOne,KAAKgW,YAAY5G,KAAKpP,KAAM4d,IAEnC5d,KAAK6b,YAAc7b,KAAK6b,WAAWuC,eACnCO,EAASve,KAAaue,EAAQ3e,KAAK6b,WAAWuC,cAElD,IAAID,GAAQ,GAAIG,WAAQK,EACxBR,GAAM1O,SAAS,IAAMpD,EAAW,YAAcuR,GAC9CO,EAAMtb,MAAQ6b,EACdP,EAAMI,eAEL,CACD,GAAIlF,GAAWhV,eAAaiF,SAASC,eAAe8C,EAAW,cAAe,gBAE1ExK,GADJgO,EAAW7P,KAAKoO,UAAUiL,EAASxW,QACfkE,YAAc8I,EAAS9I,WAAWlF,IAAOgO,EAAS9I,WAAWlF,IAAM,EACnFC,EAAO+N,EAAS9I,YAAc8I,EAAS9I,WAAWjF,IAAO+N,EAAS9I,WAAWjF,IAAMC,OAAOC,UAC1FqT,EAASxF,EAASwF,OAASxF,EAASwF,OAAS,GAC7C1U,GAAS,GAAK0E,IACdyY,EAAczY,EAAKxC,MAAM+a,GAAOvY,EAAKxC,MAAM+a,GAAO5d,KAAKwd,gBAAgBnR,GAAU,GAAM,GAE3F,IAAIuS,OAAa,EACjBA,IACI/b,MAAQib,YAAuBle,OAASke,EAAYF,GAAOE,EAC3DzI,OAAQA,EAAQxT,IAAKA,EAAKC,IAAKA,EAAK0Z,MAAO,OAC3CqD,KAAMhP,EAASgP,KAAOhP,EAASgP,KAAO,EACtC3P,OAAQlP,KAAKgW,YAAY5G,KAAKpP,KAAM4d,IAEpC5d,KAAK6b,YAAc7b,KAAK6b,WAAWiD,sBACnCF,EAAaxe,KAAawe,EAAY5e,KAAK6b,WAAWiD,sBAE5C,GAAIC,kBAAeH,GACzBnP,SAAS,IAAMpD,EAAW,YAAcuR,OA9ChDE,GAAc9d,KAAK4D,cAAgByB,EAAKxC,MAAQ7C,KAAKwd,gBAAgBnR,GAAU,GAAM,GACrFrM,KAAK6a,kBAAkBkD,EAAY1R,EAAUuR,EAAKE,EAAaC,EAAWzV,QACtEtI,KAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,GAA0B,aAArBpE,KAAK0O,YACxDmP,EAAYjU,MAAM4R,MAAQ,QAG1BqC,EAAYjU,MAAM4U,SAAW,QAC7BX,EAAYjU,MAAM4R,MAAQ,OA0CtClZ,EAAapC,UAAU8e,mBAAqB,SAAUnc,EAAOuD,GACzD,GAAI6Y,MACAC,EAASrc,EAAMgD,MAAM,IACzB,IAAa,WAATO,EACA,MAAO8Y,EAGP,KAAK,GAAIvE,GAAI,EAAGwE,EAAOD,EAAOve,OAAQga,EAAIwE,EAAMxE,IAC5CsE,EAAO9X,KAAKpF,OAAOmd,EAAOvE,IAE9B,OAAOsE,IAGf3c,EAAapC,UAAUkf,UAAY,SAAUvc,EAAOwS,GAChD,GAAIgK,GACAvE,CACJ,IAAIzF,EAAQ,CACR,GAAIiK,GAAUtf,KAAKuV,KAAKgK,eAAgBC,SAAU,OAAQpZ,KAAM,YAChEiZ,GAAYrf,KAAKsV,UAAUD,GAC3ByF,EAAgBwE,EAAQzc,GACpByO,oBAAkBwJ,KAClBA,EAAgB9a,KAAKuV,KAAK6J,UAAUvc,EAAOwc,QAI/CvE,GAAgB,GAAIlU,MAAK/D,EAE7B,OAAOiY,IAEXxY,EAAapC,UAAUuf,eAAiB,SAAUze,EAAQ6O,EAAUxK,EAAM8R,EAAUuI,GAIhF,GAHAtU,YAAUpK,EAAOkD,cAAcJ,cAAc,kBAAmB,WAChEoB,eAAalE,EAAOkD,cAAcJ,cAAc,kBAAmB,UACnEsH,YAAUpK,EAAOkD,cAAcJ,cAAc,kBAAmB,UAC5D+L,EAAS1C,WAAa0C,EAAS1C,SAAShN,QAAUuf,GAClD1f,KAAKmd,gBAAgBnc,EAAQ6O,EAAUxK,EAAM8R,OAE5C,CACD,GAAIwI,EAEAA,GADkB,YAAlBxI,EAAS/Q,KACEpG,KAAKuO,eAAejG,OAAStI,KAAKuO,eAAejG,OAAO3H,OAAS,EAGjEwW,EAAS7I,UAAY6I,EAAS7I,SAASuK,WAAWvN,cAAclH,QAAQ,YAAc,EAAI,EAAI,CAE7G,IAAIiI,GAAWhC,UAAQrJ,EAAQ,qBAAqBoE,GAChDyY,MAAc,GACdvP,EAAW6I,EAAS7I,SAASuK,UACjC,IAAI7X,EAAOmD,UAAUC,QAAQ,oBAAsB,GAAKpD,EAAOmD,UAAUC,QAAQ,kBAAoB,EAAG,CACpGyZ,EAAc7c,EAAOkD,cAAcJ,cAAc,iBAC7C9D,KAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,GAA0B,aAArBpE,KAAK0O,YACxDmP,EAAYjU,MAAM4R,MAAQ,OAGT,OAAblN,GAAkC,UAAbA,EACrBlD,YAAUyS,GAAc,kBAGxB3Y,eAAa2Y,GAAc,iBAGnC,KAAK,GAAIrd,GAAI,EAAGA,EAAImf,EAAUnf,IAC1B,OAAQ2W,EAAS/Q,MACb,IAAK,SAEGpG,KAAK2d,kBAAkBtR,EAAUhH,EAAMiJ,EAAU9N,EAAGqd,EAExD,MACJ,KAAK,SAEG7d,KAAKye,kBAAkBpS,EAAUhH,EAAMiJ,EAAU9N,EAAGqd,EAAahO,EAAU8P,EAE/E,MACJ,KAAK,UACD3f,KAAK4f,kBAAkB/P,EAAUxK,EAAMgH,EAAU7L,EACjD,MACJ,KAAK,OAEG,GAAIsa,GAAgB,GAAIlU,MACpB8X,MAAS,GACT1W,MAAS,GACTqN,EAASxF,EAASwF,OAClBwK,MAAW,GACXC,MAAa,GACbC,EAAQ/f,KAAKiH,KAAKC,YAAY,eAC9B8W,EAA2C,gBAAtBnO,GAAS1C,QAyBlC,IAvBK0C,EAASlK,OAAUkK,EAAS5O,MAAO4O,EAAShN,QAEzCiY,EADAjL,EAAShN,gBAAiB+D,MACViJ,EAAShN,MAGT7C,KAAKof,UAAUvP,EAAShN,MAAOgN,EAASwF,UAG3DxF,EAASwF,QAAUhQ,GAAuB,KAAfA,EAAKM,QAEjC0P,GADArN,EAAShI,KAAKoO,UAAU/I,EAAKM,QACb0P,SAEfrV,KAAK4D,eAAiB5D,KAAKie,UAAYD,IAAe3Y,IAEvDgQ,GADArN,EAAShI,KAAKoO,UAAU/I,EAAKM,QACb0P,OACZhQ,EAAKxC,OACL6b,EAAUiB,EAAW,EAAKta,EAAKxC,MAAMrC,GAAK6E,EAAKxC,MAC/CiY,EAAgB9a,KAAKof,UAAUV,EAAQ1W,EAAOqN,SAG9CyF,EAAgBzV,EAAKxC,OAGzBwS,EAAQ,CACR,GAAI2K,GAAYhgB,KAAKsV,UAAUD,EAC3B2K,GAAUR,UACVM,GACIG,OAAQjgB,KAAKkgB,YAAard,MAAOiY,EACjC9L,YAAa+Q,EAAO1K,OAAQ2K,EAAW9Q,OAAQlP,KAAKgW,YAAY5G,KAAKpP,KAAMQ,IAE3ER,KAAK6b,YAAc7b,KAAK6b,WAAWsE,kBACnCL,EAAa1f,KAAa0f,EAAY9f,KAAK6b,WAAWsE,kBAE1DN,EAAW,GAAIO,cAAWN,KAG1BA,GACIjd,MAAOiY,EAAemF,OAAQjgB,KAAKkgB,YAAalR,YAAa+Q,EAC7D1K,OAAQ2K,EAAU3K,OAAQnG,OAAQlP,KAAKgW,YAAY5G,KAAKpP,KAAMQ,IAE9DR,KAAK6b,YAAc7b,KAAK6b,WAAWsE,kBACnCL,EAAa1f,KAAa0f,EAAY9f,KAAK6b,WAAWsE,kBAE1DN,EAAW,GAAIO,cAAWN,QAI9BA,IACIG,OAAQjgB,KAAKkgB,YAAard,MAAOiY,EACjC9L,YAAa+Q,EAAO7Q,OAAQlP,KAAKgW,YAAY5G,KAAKpP,KAAMQ,IAExDR,KAAK6b,YAAc7b,KAAK6b,WAAWsE,kBACnCL,EAAa1f,KAAa0f,EAAY9f,KAAK6b,WAAWsE,kBAE1DN,EAAW,GAAIO,cAAWN,EAG9B,IADAD,EAASpQ,SAAS,IAAMpD,EAAW,YAAc7L,IAC5C6E,EAAKxC,MAAO,CACb,GAAI2J,GAAOlD,SAASC,eAAe8C,EAAW,YAAc7L,EAC5DR,MAAK0V,YAAYlJ,EAAMsO,EAAe,KAAM9a,KAAKqD,kBACjDrD,KAAKqD,kBAAmB,OASxDf,EAAapC,UAAU0f,kBAAoB,SAAU/P,EAAUxK,EAAMgH,EAAU7L,GAC3E,GACIqC,GACAwd,EAFAC,GAAU,CAGVhP,qBAAkBjM,EAAKe,OAASyJ,IAChCxK,EAAKe,KAAOyJ,EAASzJ,KAEzB,IAAImB,EACJ,IAAIsI,EAASvH,OAAQ,CACbA,EAASuH,EAASvH,MACJ,aAAdjD,EAAKe,MAAuBkL,oBAAkBjM,EAAKxC,OAG9CgN,EAAShN,MACdyd,EAAUhY,EAAO9H,GAAG8K,gBAAkBuE,EAAShN,MAAMgW,WAAWvN,cAErD,IAAN9K,IACL8f,GAAU,GANVA,EAAUhY,EAAO9H,GAAG8K,gBAAkBjG,EAAKxC,MAAMgW,WAAWvN,cAQhE+U,EAAWxd,EAAQ0E,EAAQe,EAAO9H,OAEjC,CACD,GAAI8H,KAAU,GAAM,EACF,aAAdjD,EAAKe,MAAuBkL,oBAAkBjM,EAAKxC,OAG9CgN,EAAShN,MACdyd,EAAUhY,EAAO9H,GAAGqY,WAAWvN,gBAAkBuE,EAAShN,MAAMgW,WAAWvN,cAEhE,IAAN9K,IACL8f,GAAU,GANVA,EAAUhY,EAAO9H,GAAGqY,WAAWvN,gBAAkBjG,EAAKxC,MAAMgW,WAAWvN,cAQ3EzI,EAAQyF,EAAO9H,GAAGqY,WAClBwH,EAAW/X,EAAO9H,GAClB+G,EAAQvH,KAAKiH,KAAKC,aAAa,OAAQ,SAAS1G,IAEpD,GAAI+f,EACJA,IACIhZ,MAAOA,EAAOmC,KAAM2C,EAAW,UAAWmU,QAASF,EAASzd,MAAOA,EACnEqM,OAAQlP,KAAKgW,YAAY5G,KAAKpP,KAAMQ,IAEpCR,KAAK6b,YAAc7b,KAAK6b,WAAW4E,mBACnCF,EAAWngB,KAAamgB,EAAUvgB,KAAK6b,WAAW4E,kBAEtD,IAAIC,GAAc,GAAIC,eAAYJ,EAClCG,GAAYjR,SAAS,IAAMpD,EAAW,YAAc7L,GAChD8f,GACAtgB,KAAK0V,YAAYgL,EAAYle,QAAS6d,EAAU,IAGxD/d,EAAapC,UAAU0gB,iBAAmB,SAAUxJ,EAAQ/R,GACxD,GAAI7E,GAEAyD,EADamT,EAAOrI,WACHpO,MACrB,KAAKH,EAAI,EAAGA,EAAIyD,EAAKzD,IACjB,GAAI6E,EAAKiJ,WAAa8I,EAAOrI,WAAWvO,GAAGqC,MACvC,MAAOrC,EAGf,OAAO,IAEX8B,EAAapC,UAAU2gB,oBAAsB,SAAUC,EAAc9Y,GAIjE,MAHIA,GAAOmF,UAAY2T,GAAgBrhB,OAAOwG,KAAK6a,GAAcngB,OAAS,IACtEmgB,EAAa3T,SAAWnF,EAAOmF,UAE5B2T,GAEXxe,EAAapC,UAAUoZ,aAAe,SAAUtY,EAAQ6O,EAAUiR,EAAcC,EAAU1b,EAAM8R,EAAU3U,GACtG,GACIwe,GADahgB,EAAO2N,uBACEsS,qBAAqB,SAAS,GACpDC,EAAU7c,eAAa2c,EAAU,gBACjChZ,EAAShI,KAAKoO,UAAU8S,EAAQre,MAGpC,IADA7C,KAAKsb,aAAe4F,EAAQrR,SACxBkR,EAAU,CACV,GAAI3J,GAAS/S,eAAarD,EAAO8C,cAAc,SAAU,iBACzD+L,EAAWrN,EAAQ4C,GAAGhB,QAAQ,aAAe,EAAIyL,EAAW7P,KAAKsb,cACpDlU,YACTgQ,EAAOvU,MAAQ,KACfuU,EAAOmH,WACPnH,EAAOrI,WAAac,EAASzI,UAC7BgQ,EAAOtH,MAAQ9P,KAAK4gB,iBAAiBxJ,EAAQ/R,GAC7C+R,EAAOvU,MAAQsU,EAAS7I,SAAW8I,EAAOrI,WAAWqI,EAAOtH,OAAOjN,MACnEuU,EAAOmH,YAGf,GAAIjQ,GAAW6I,EAAS7I,SAASuK,WAC7BsI,GAAiB,CACrB,IAAM7S,EAASlK,QAAQ,SAAW,GAAKkK,EAASlK,QAAQ,UAAY,GAqD5D6U,EAAajY,EAAOkD,cAAcJ,cAAc,oBAEhDoB,eAAa+T,GAAa,UAC1B7N,YAAU6N,GAAa,eAxDyC,CACpE,GAAI5M,GAAWhC,UAAQrJ,EAAQ,qBAAqBoE,EAEpD,KADA0b,EAAe9gB,KAAK6gB,oBAAoBC,EAAc9Y,KAClC8Y,EAAa3T,SAAU,CACvCnN,KAAK4Z,gBAAgBkH,EAAczU,EAAW,aAC9C,IAAIG,GAAOE,SAAO,IAAML,EAAW,aAAcrL,EAAOqX,mBACpD7L,KAASA,EAAK6H,UAAUiE,SAAS,cACjCnI,SAAOzD,SAAO,IAAML,EAAW,aAAcrL,EAAOqX,qBAEnB,gBAA1ByI,GAAa3T,cAA0DsH,KAAjCqM,EAAa3T,SAAShN,SAC/Da,EAAOqX,mBAAmBhE,UAAUiE,SAAS,qBAC7CtY,KAAKoQ,iBAAiB/D,IAE1BrL,EAAOqX,mBAAmB9T,UAAY,IAc9C,GAXIwc,IACA/gB,KAAKohB,aAAa/b,EAAMgF,UAAQrJ,EAAQ,sBACxChB,KAAK+V,gBAAgB/U,IAEzB6O,EAAS1C,SAAWnF,EAAOmF,SACvB0C,EAAS1C,WACT/B,YAAUpK,EAAOqX,oBAAqB,oBACtCxI,EAAS1C,SAAWnF,EAAOmF,SAC3BgU,EAAiBnhB,KAAKqhB,kBAAkBxR,EAAUxD,EAAUrE,EAAOrC,MAAOkK,EAAShN,OAC/EyL,EAAUtN,EAAQqE,IAEtB8b,EAAgB,CAChB,GAAIlI,GAAajY,EAAOkD,cAAcJ,cAAc,gBAChD9D,MAAKwC,QAAQ2B,UAAUC,QAAQ,aAAe,GAA0B,aAArBpE,KAAK0O,YACxDuK,EAAWrP,MAAM4R,MAAQ,OAGzBvC,EAAWrP,MAAM4R,MAAQ,YAG5B,CACDtW,eAAalE,EAAOqX,oBAAqB,mBACzC,IAAIiJ,GAAW,CAEXA,GADkB,YAAlBnK,EAAS/Q,KACEpG,KAAKuO,eAAejG,OAAStI,KAAKuO,eAAejG,OAAO3H,OAAS,EAGhE2N,GAAYA,EAAShD,cAAclH,QAAQ,YAAc,EAAK,EAAI,CAElF,KAAK,GAAI5D,GAAI,EAAGA,EAAI8gB,EAAU9gB,IAAK,CAC/B,GAAI+Q,GAAUvR,KAAKyE,cAAc,SAAWC,OAAS0B,KAAM,OAAQhB,GAAIiH,EAAW,YAAc7L,IAChGQ,GAAOqX,mBAAmBvT,YAAYyM,IAG9CvR,KAAKyf,eAAeze,EAAQ6O,EAAUxK,EAAM8R,EAAUgK,KAU9D7e,EAAapC,UAAUmhB,kBAAoB,SAAUxR,EAAU9C,EAAQpH,EAAO2I,EAAUtN,EAAQqE,GAC5F,GACIwD,GADApG,EAAQzC,KAER0f,GAAa,CACjB,IAAK7P,EAAS1C,SAGT,CACD,GAAiC,gBAAtB0C,GAAS1C,cAAsDsH,KAA7B5E,EAAS1C,SAAShN,OAM3D,MALA0I,IAASiE,YAAa,4BAA6BC,OAAQA,EAAQpH,MAAOA,EAAO2I,SAAUA,EAAUjJ,KAAMA,EACvGkc,gBAAgB,GACpBvhB,KAAKyH,QAAQ,cAAeoB,EAAM,SAAU2Y,GACxC9B,EAAajd,EAAMgf,2BAA2BD,EAAoB3R,EAAU9C,EAAQpH,EAAO3E,KAExF0e,CAGP,IAAInO,OAAU,GACVpE,EAAW0C,EAAS1C,QAOxB,KALIoE,EAD2B,gBAApBpE,GAAShN,OACN8Z,WAAS9M,EAAShN,OAAQkW,SAAU1Q,MAAOA,EAAO2I,SAAUA,IAG5DnB,EAAShN,QAASwF,MAAOA,EAAO2I,SAAUA,cAEjCoT,SACnBnQ,EAAQnM,GAAK2H,EAAS,aACtB3B,YAAUmG,GAAU,cACpBvQ,EAAOqX,mBAAmBvT,YAAYyM,GAClC5L,EAAMvB,QAAQ,KAAO,GACrBgH,YAAUmG,GAAU,KAAO5L,OAG9B,IAAI4L,YAAmB3R,OAAO,CAC/BwL,WAASmG,EAAS,aAClB,KAAK,GAAI/Q,GAAI,EAAGwR,EAAOT,EAAQ5Q,OAAQH,EAAIwR,EAAMxR,IAC7C+Q,EAAQ/Q,GAAG4E,GAAK2H,EAAS,YAAcvM,EACvCQ,EAAOqX,mBAAmBvT,YAAYyM,EAAQ/Q,IAItD,MADA4K,aAAUpK,EAAOqX,oBAAqB,qBAC/B,EApCX,OAAO,GAwCf/V,EAAapC,UAAUuhB,2BAA6B,SAAU5Y,EAAMgH,EAAU9C,EAAQpH,EAAO3E,GACzF,GAAI6H,EAAK0Y,eAAgB,CACrB,GAAIhQ,OAAU,EACdvR,MAAK2hB,iBAAmB3hB,KAAKiN,eAAe4C,EAAS1C,SACrD,IAAID,GAAalN,KAAKwC,QAAQ4C,GAAKO,CAEnC,IAAI3F,KAAKsN,QACLiE,EAAUvR,KAAK2hB,iBAAiB9Y,EAAM7I,KAAM+M,EAAQG,GAAY,OAE/D,IAAIlN,KAAKuN,UAAW,CACrB,GAAIqU,GAAc5hB,KAAK2hB,iBAAiB9Y,EAAM7I,KAAM+M,EAAQG,EAC5DqE,GAAuC,IAA5BqQ,EAAY,GAAGnU,SAAkBmU,EAAY,GAAKA,EAAY,OAGzErQ,GAAUvR,KAAK2hB,iBAAiB9Y,EAAM7I,KAAM,WAAYkN,GAAY,EAKxE,OAHAlM,GAAOqX,mBAAmBvT,YAAYyM,GACtCnG,YAAUpK,EAAOqX,oBAAqB,oBACtCrY,KAAK2N,wBACE,EAGP,OAAO,GAGfrL,EAAapC,UAAU2hB,aAAe,SAAUrf,EAAS6C,GACrD,GAAIuY,GAAM,CACNpb,GAAQ2B,UAAUC,QAAQ,eAAiB,IAC3CwZ,EAAM,EAEV,IAAIkE,GAActf,EAAQ2B,UAAU0B,MAAM,OAAO+X,GAC7Cpd,EAAI2V,SAAS3T,EAAQ4C,GAAG8M,OAAO,GAAI,EACvC,QAAQ4P,GACJ,IAAK,WAED,GAAIjf,GAAQwB,eAAa7B,EAASsf,GAAajf,KAC/CwC,GAAKxC,MAAmB,KAAVA,EAAgBA,MAAQ4R,EACtC,MACJ,KAAK,UAGL,IAAK,eACDpP,EAAKxC,MAAQwB,eAAa7B,EAASsf,GAAajf,KAChD,MACJ,KAAK,QAED,GAAIkf,GAAc1d,eAAa7B,EAASsf,EACpCC,GAAYvB,UACc,iBAAfnb,GAAKxC,MACZwC,EAAKxC,MAA8B,SAAtBkf,EAAYlf,MAGrB7C,KAAKoO,UAAU/I,EAAKM,OAAO2C,OAC3BjD,EAAKxC,MAAQkf,EAAYlf,MAGzBwC,EAAKxC,MAA8B,SAAtBkf,EAAYlf,OAIrCkf,EAAYC,SACZ,MACJ,KAAK,iBACG3c,EAAKiJ,SAASlK,QAAQ,YAAc,GACV,gBAAfiB,GAAKxC,QACZwC,EAAKxC,UAETwC,EAAKxC,MAAMrC,GAAK6D,eAAa7B,EAASsf,GAAajf,OAGnDwC,EAAKxC,MAAQwB,eAAa7B,EAASsf,GAAajf,KAEpD,MACJ,KAAK,aAED,GAAImF,GAAShI,KAAKoO,UAAU/I,EAAKM,OAE7B0P,EAASrV,KAAKsV,UAAUtN,EAAOqN,QAE/B4M,EAAe5d,eAAa7B,EAASsf,GAAajf,KAClDwC,GAAKiJ,SAASlK,QAAQ,YAAc,GACV,gBAAfiB,GAAKxC,QACZwC,EAAKxC,UAETwC,EAAKxC,MAAMrC,GAAKR,KAAKuV,KAAKC,WAAWyM,EAAc5M,IAE9C/D,oBAAkB+D,EAAOA,SAAW4M,EACzC5c,EAAKxC,MAAQ7C,KAAKuV,KAAKC,WAAWyM,GAGlC5c,EAAKxC,MADAof,EACQjiB,KAAKuV,KAAKC,WAAWyM,EAAc5M,GAGnC4M,CAEjB,MACJ,KAAK,cACD5c,EAAKxC,MAAQwB,eAAa7B,EAASsf,GAAajf,QAI5DP,EAAapC,UAAUwV,YAAc,SAAU1U,EAAQ8Z,EAAeta,EAAG0hB,GASrE,IARA,GAIIhR,GACA2F,EALAlN,EAAYU,UAAQrJ,EAAQ,sBAC5BqE,EAAOrF,KAAK2L,eAAehC,GAC3B4C,EAAWlC,UAAQrJ,EAAQ,qBAC3B8O,EAAQ,EAGRhH,EAAUa,EAAUvE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACtDqG,EAAczL,KAAK0L,cAAc1L,KAAKqF,MACnCkH,GAAgD,OAApCA,EAASoC,wBACxBpC,EAAWA,EAASoC,uBACpBmB,GAEJ,IAAIxB,GAAWjJ,EAAKC,MAAMwK,GAAOxB,SAAWjJ,EAAKC,MAAMwK,GAAOxB,SAASuK,WAAa,GAEhF9L,GADJR,EAAWlC,UAAQrJ,EAAQ,sBACLoE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,GACxD,IAAIiF,UAAQrJ,EAAQ,mBAAqBqJ,UAAQrJ,EAAQ,sBAAuB,CACxEhB,KAAKiX,eACLjW,EAAShB,KAAKiX,cAElB/F,EAAc7M,eAAarD,EAAQ,eACnC,IAAIgH,GAAShI,KAAKoO,UAAU8C,EAAYrO,QACnC7C,KAAK4D,eAAiByB,EAAKC,MAAMwK,GAAOnK,OAASN,EAAKC,MAAMwK,GAAOnK,MAAM2F,gBAAkBtD,EAAOrC,MAAM2F,iBACnGiB,EAASvI,iBAAiB,kBAAqBsK,EAASlK,QAAQ,SAAW,IACzEkK,EAASlK,QAAQ,UAAY,KACjCiB,EAAKC,MAAMwK,GAAOjN,MAAQ,IAGlC7C,KAAKuO,eAAiB2C,EAAYvB,eAAeuB,EAAYrO,OAC7DwC,EAAKC,MAAMwK,GAAOnK,MAAQ3F,KAAKuO,eAAe5I,MAC9CN,EAAKC,MAAMwK,GAAO1J,KAAOpG,KAAKuO,eAAenI,KAC7Cf,EAAKC,MAAMwK,GAAOvI,MAAQvH,KAAKuO,eAAehH,KAC9C,IAAI6N,GAAc/K,UAAQrJ,EAAQ,kBAE9BwB,GADJ4S,EAAcA,GAA4B/K,UAAQrJ,EAAQ,uBAChCqX,mBAAmBvU,cAAc,kBAC3DtB,GAAUA,GAAoB4S,EAAYiD,mBAAmBA,mBAAmBvU,cAAc,mBAC9FwK,EAAWjK,eAAa7B,EAAS,gBAAgBK,MAAMgW,WACvDxT,EAAKC,MAAMwK,GAAOxB,SAAWA,CAE7B,IAAI6T,GAAiB/M,EAAYiD,mBAAmBA,mBAChD+J,EAAaD,EAAene,iBAAiB,kBAC7Coe,GAAWzhB,OAAS,IACpByhB,EAAaD,EAAene,iBAAiB,kBAE7Coe,EAAWzhB,OAAS,IACpByhB,EAAaD,EAAene,iBAAiB,eAEjD,KAAK,GAAIqe,GAAM,EAAGA,EAAMD,EAAWzhB,OAAQ0hB,IACvCxL,GAAe/N,QAASA,EAASiE,OAAQA,EAAQlK,MAAOwC,EAAKC,MAAMwK,GAAOnK,MAAOS,KAAM,SACnFkI,EAASlK,QAAQ,SAAW,GAAKkK,EAASlK,QAAQ,UAAY,EAC9DiB,EAAKC,MAAMwK,GAAOjN,MAAQ,KAG9B7C,KAAK6hB,aAAaO,EAAWC,GAAMhd,EAAKC,MAAMwK,GAE7C9P,MAAK4D,eACN5D,KAAKyH,QAAQ,SAAUoP,GAEvB7W,KAAK6Q,iBAAmBxL,EAAKC,MAAMwK,GAAOnK,OAAS3E,EAAOkD,cAAcC,UAAUC,QAAQ,cAAgB,GAC1GC,eAAarD,EAAOkD,cAAe,WAAWI,UAElDtE,KAAK4L,YAAYH,EAAazL,KAAK0L,cAAc1L,KAAKqF,MAAO,aAE5D,IAAIgF,UAAQrJ,EAAQ,oBAAqB,CAC1CkQ,EAAc7M,eAAarD,EAAQ,gBACnCqE,EAAKC,MAAMwK,GAAOxB,SAAW4C,EAAYrO,MAAMgW,UAC/C,IAAIxG,GAAY9F,EAASvI,iBAAiB,gCAC1C6S,IAAe/N,QAASA,EAASiE,OAAQA,EAAQlK,MAAOqO,EAAYrO,MAAOuD,KAAM,YAC7EpG,KAAK6Q,iBAAmBxL,EAAKC,MAAMwK,GAAOxB,UAAYtN,EAAOkD,cAAcC,UAAUC,QAAQ,cAAgB,GAC7GC,eAAarD,EAAOkD,cAAe,WAAWI,UAE9C+N,EAAU1R,OAAS,KAAO0R,EAAU,GAAGlO,UAAUC,QAAQ,eAAiB,KAC1EiB,EAAKC,MAAMwK,GAAOjN,SAEtB,KAAK,GAAIyf,GAAM,EAAGA,EAAMjQ,EAAU1R,OAAQ2hB,IAClCjd,EAAKC,MAAMwK,GAAOxB,SAASlK,QAAQ,SAAW,GAAKiB,EAAKC,MAAMwK,GAAOxB,SAASlK,QAAQ,UAAY,EAClGiB,EAAKC,MAAMwK,GAAOjN,MAAQ,KAGrBwP,EAAUiQ,GAAKjO,UAAUiE,SAAS,eAG3CtY,KAAK6hB,aAAaxP,EAAUiQ,GAAMjd,EAAKC,MAAMwK,GAE5C9P,MAAK4D,eACN5D,KAAKyH,QAAQ,SAAUoP,GAE3B7W,KAAK4L,YAAYH,EAAazL,KAAK0L,cAAc1L,KAAKqF,MAAO,gBAExDgF,WAAQrJ,EAAQ,mBACrBhB,KAAKuiB,gBAAgBvhB,EAAQ8Z,EAAezV,EAAMyK,EAAOnG,EAAW4C,EAAU/L,GACzE0hB,GACDliB,KAAK4L,YAAYH,EAAazL,KAAK0L,cAAc1L,KAAKqF,MAAO,WAIzE/C,EAAapC,UAAU0L,YAAc,SAAU4W,EAAYC,EAAWrc,GAC9Csc,KAAKC,WAAY3f,UAAWwf,EAAWxf,UAAWD,IAAKyf,EAAWzf,IAAKsC,KAAMmd,EAAWld,UACzFod,KAAKC,WAAY3f,UAAWyf,EAAUzf,UAAWD,IAAK0f,EAAU1f,IAAKsC,KAAMod,EAAUnd,UAE/FtF,KAAK4D,eACN5D,KAAKyH,QAAQ,cAAgBmb,aAAcJ,EAAYnd,KAAMod,EAAWrc,KAAMA,MAI1F9D,EAAapC,UAAUqiB,gBAAkB,SAAUvhB,EAAQ8Z,EAAezV,EAAMyK,EAAOnG,EAAW4C,EAAU/L,GACxG,GAAIqW,GACAgM,EACAC,GAAe,KAAM,UAAW,QAAS,aAI7C,IAHIzd,EAAKC,MAAMwK,GAAOxB,WAClBuU,EAAOxd,EAAKC,MAAMwK,GAAOxB,SAASuK,WAAWvN,eAE3B,OAAlBwP,EAAwB,CACxB,GAAI9Z,EAAOmD,UAAUC,QAAQ,kBAAoB,GAAgC,WAA3BiB,EAAKC,MAAMwK,GAAO1J,OACnEpG,KAAKmD,WAAY,CAGlB,IAAK,GAFDub,MACAqE,EAAmBjI,EACdH,EAAI,EAAGwE,EAAO4D,EAAiBpiB,OAAQga,EAAIwE,EAAMxE,IACnB,gBAAxBoI,GAAiBpI,IACxB+D,EAAOvX,KAAK6b,WAAWD,EAAiBpI,IAG5C+D,GAAO/d,SACPma,EAAgB4D,GAGxB,GAAI1e,KAAKmD,WACLkC,EAAKC,MAAMwK,GAAOjN,MAAQiY,EAC1BjE,GAAe/N,QAASa,EAAUvE,GAAI2H,OAAQR,EAASnH,GAAIvC,MAAOwC,EAAKC,MAAMwK,GAAOjN,MAAOuD,KAAM,SAC5FpG,KAAK4D,eACN5D,KAAKyH,QAAQ,SAAUoP,OAG1B,IAAI7V,EAAOmD,UAAUC,QAAQ,WAAa,GAAKpD,EAAOmD,UAAUC,QAAQ,cAAgB,EACrF0e,EAAY1e,QAAQye,IAAS,EAC7Bxd,EAAKC,MAAMwK,GAAOjN,MAAMrC,GAAKsa,EAG7BzV,EAAKC,MAAMwK,GAAOjN,MAAQiY,MAG7B,IAAI9Z,EAAOmD,UAAUC,QAAQ,YAAc,EAC5CiB,EAAKC,MAAMwK,GAAOjN,MAAQiY,MAEzB,IAAI9Z,EAAOmD,UAAUC,QAAQ,kBAAoB,EAClDiB,EAAKC,MAAMwK,GAAOjN,MAAQiY,MAEzB,IAAI9Z,EAAOmD,UAAUC,QAAQ,cAAgB,EACjC,OAATye,GAA0B,UAATA,GACbxd,EAAKC,MAAMwK,GAAO1J,KAClBf,EAAKC,MAAMwK,GAAOjN,MAAQ7C,KAAKgf,mBAAmBlE,EAAezV,EAAKC,MAAMwK,GAAO1J,OAOvFf,EAAKC,MAAMwK,GAAOjN,MAAQiY,MAG7B,IAAI9Z,EAAOmD,UAAUC,QAAQ,iBAAmB,EAAG,CACpD,GAAI6e,GAAUC,cAAY3W,EAASzI,cAAc,wBAAyB0L,gBACtE6F,EAASrV,KAAKsV,UAAUtV,KAAKoO,UAAU6U,EAAQpgB,OAAOwS,OACtDA,GAAOjP,OACH0c,EAAY1e,QAAQye,IAAS,GACU,gBAA5Bxd,GAAKC,MAAMwK,GAAOjN,QACzBwC,EAAKC,MAAMwK,GAAOjN,UAEtBwC,EAAKC,MAAMwK,GAAOjN,MAAMrC,GAAKR,KAAKuV,KAAKC,WAAWsF,EAAezF,IAGjEhQ,EAAKC,MAAMwK,GAAOjN,MAAQ7C,KAAKuV,KAAKC,WAAWsF,EAAezF,IAI1ErV,KAAKohB,aAAa/b,EAAMkH,EAAUuD,OAG9B9O,GAAOmD,UAAUC,QAAQ,iBAAmB,GACxC0e,EAAY1e,QAAQye,IAAS,GACU,gBAA5Bxd,GAAKC,MAAMwK,GAAOjN,QACzBwC,EAAKC,MAAMwK,GAAOjN,UAEtBwC,EAAKC,MAAMwK,GAAOjN,MAAMrC,GAAKsa,GAOjCzV,EAAKC,MAAMwK,GAAOjN,MAAQiY,GAItCxY,EAAapC,UAAUkhB,aAAe,SAAU/b,EAAMkH,EAAUuD,GACvDwB,oBAAkBxB,KACnBzK,EAAOA,EAAKC,MAAMwK,GAEtB,IAAIqT,GAAmC,gBAAhB9d,QACvB,IAAIrF,KAAK6Q,kBAAoBS,oBAAkBxB,KAAWqT,EAAW9d,EAAKxC,MAAMlC,OAAS,EAAI0E,EAAKxC,QAAS,CACvG,GAAI0O,GAAUhF,EAASvI,iBAAiB,2BACpCuN,GAAQ5Q,OAAS,IACb4Q,EAAQ,GAAGpN,UAAUC,QAAQ,cAAgB,EAC7CC,eAAakN,EAAQ,GAAI,WAAWjN,UAE/BiN,EAAQ,GAAGrN,cAAcC,UAAUC,QAAQ,cAAgB,GAChEC,eAAakN,EAAQ,GAAGrN,cAAe,WAAWI,UAElDiN,EAAQ,IAAMA,EAAQ,GAAGrN,cAAcC,UAAUC,QAAQ,cAAgB,GACzEC,eAAakN,EAAQ,GAAGrN,cAAe,WAAWI,aAKlEhC,EAAapC,UAAUoV,UAAY,SAAUD,GACzC,GAAI+N,EAmBJ,OAlBI/N,GACwB,oBACpB+N,GAAkBhd,KAAM,YACT,UAAXiP,GAAiC,QAAXA,GACtB+N,EAAchd,KAAO,OACrBgd,EAAc5D,SAAWnK,GAGzB+N,EAAc/N,OAASA,GAI3B+N,GAAkBhd,KAAM,WAAYoZ,SAAUnK,EAAOmK,UAIzD4D,GAAkBhd,KAAM,OAAQoZ,SAAU,OAEvC4D,GAEX9gB,EAAapC,UAAUmjB,eAAiB,SAAUC,EAAUje,EAAML,GAC9D,GAAIue,GAAWle,EAAKC,MAChBke,IACJ,KAAKxe,EAAQ,CACT,IAAK,GAAIkD,GAAI,EAAGsJ,EAAO+R,EAAS5iB,OAAQuH,EAAIsJ,EAAMtJ,KAC9C7C,EAAOke,EAASrb,IACP5C,OACLke,EAAYrc,KAAK9B,EAGzB,OAAOme,GAAYF,GAEvB,MAAOje,IASX/C,EAAapC,UAAUoE,QAAU,WAE7B,GADmBtE,KAAKwC,QACxB,CAGA,GAAIA,GACAhC,EACAyD,EACAqM,CAIJ,KAHA5O,EAAOxB,UAAUoE,QAAQ1D,KAAKZ,MAE9BiE,GADAzB,EAAUxC,KAAKwC,QAAQwB,iBAAiB,oBAC1BrD,OACTH,EAAI,EAAGA,EAAIyD,EAAKzD,IACjB6D,eAAa7B,EAAQhC,GAAI,gBAAgB8D,UACzC6L,SAAO3N,EAAQhC,GAGnB,KADA8P,EAAUtQ,KAAKwC,QAAQwB,iBAAiB,uCACnCxD,EAAI,EAAGA,EAAI8P,EAAQ3P,OAAQH,IAC5B6D,eAAaiM,EAAQ9P,GAAI,WAAW8D,SAIxC,KADAL,GADAzB,EAAUxC,KAAKwC,QAAQwB,iBAAiB,8CAC1BrD,OACTH,EAAI,EAAGA,EAAIyD,EAAKzD,IACjB6D,eAAa7B,EAAQhC,GAAI,gBAAgB8D,UACzC6L,SAAO3N,EAAQhC,GAGnB,KADA8P,EAAUtQ,KAAKwC,QAAQwB,iBAAiB,yCACnCxD,EAAI,EAAGA,EAAI8P,EAAQ3P,OAAQH,IAC5B6D,eAAaiM,EAAQ9P,GAAI,WAAW8D,SAIxC,KADAL,GADAzB,EAAUxC,KAAKwC,QAAQwB,iBAAiB,gDAC1BrD,OACTH,EAAI,EAAGA,EAAIyD,EAAKzD,IACjB6D,eAAa7B,EAAQhC,GAAI,gBAAgB8D,UACzC6L,SAAO3N,EAAQhC,GAGnB,KADA8P,EAAUtQ,KAAKwC,QAAQwB,iBAAiB,sCACnCxD,EAAI,EAAGA,EAAI8P,EAAQ3P,OAAQH,IAC5B6D,eAAaiM,EAAQ9P,GAAI,WAAW8D,SAExCtE,MAAK4D,eAAgB,EACrB5D,KAAKyjB,eACLzjB,KAAKmF,UAAUnF,KAAKwC,QAAQ4C,GAAK,YAAc,GAC/CpF,KAAKwC,QAAQ+B,UAAY,GAErBvE,KAAK0jB,SAAW1jB,KAAK0jB,QAAQ/iB,QAC7BX,KAAKoQ,kBAETiE,YAAUrU,KAAKwC,YAAc,QAAS,eAAgB,eAS1DF,EAAapC,UAAUyjB,SAAW,SAAUte,EAAMyD,GAC9CA,EAAU9I,KAAKwC,QAAQ4C,GAAK,IAAM0D,EAClC9I,KAAKie,UAAW,CAChB,KAAK,GAAIzd,GAAI,EAAGyD,EAAMoB,EAAK1E,OAAQH,EAAIyD,EAAKzD,IACxCR,KAAKmM,eAAe7C,SAASC,eAAeT,GAAUzD,EAAK7E,GAE/DR,MAAKie,UAAW,GASpB3b,EAAapC,UAAUiU,UAAY,SAAUyP,EAAQ9a,GACjD,GAAI9I,KAAKoD,cAAgBpD,KAAKwC,QAAQwB,iBAAiB,sBAAsBrD,QAAUX,KAAKgM,cAAe,CACvGlD,EAAU9I,KAAKwC,QAAQ4C,GAAK,IAAM0D,CAClC,IAAIa,GAAYL,SAASC,eAAeT,GACpCzD,EAAOrF,KAAK2L,eAAehC,EAE/B,IADeia,EAAOjjB,OACR,CACVX,KAAKie,UAAW,CAChB,KAAK,GAAIzd,GAAI,EAAGyD,EAAM2f,EAAOjjB,OAAQH,EAAIyD,EAAKzD,IAC1CR,KAAK8C,aAAgBE,UAAW4gB,EAAOpjB,GAAGwC,UAAWD,IAAK6gB,EAAOpjB,GAAGuC,KACpE/C,KAAK6jB,YAAYD,EAAOpjB,GAAImJ,GAAW,EAAOia,EAAOpjB,GAAGuC,IAE5D/C,MAAKie,UAAW,MAEf,CACD,GAAIjb,GAAY,MACZD,GAAM,CACN/C,MAAK8C,cACLE,EAAYhD,KAAK8C,YAAYE,UAC7BD,EAAM/C,KAAK8C,YAAYC,KAEvB/C,KAAKiF,mBACLI,EAAKC,MAAM6B,MAAOnE,UAAaA,EAAWD,IAAOA,EAAKuC,WAGtDD,EAAKC,MAAM6B,MAAOnE,UAAaA,EAAWsC,WAG7CtF,KAAK+E,gBACN/E,KAAKuF,qBAAqBoE,EAAWtE,KAIjD/C,EAAapC,UAAU4jB,YAAc,WAgCjC,GA/BA9jB,KAAK6N,eAAgB,EACjB7N,KAAK0Q,UACLtF,YAAUpL,KAAKwC,SAAUxC,KAAK0Q,UAE9B1Q,KAAKiM,WACLb,YAAUpL,KAAKwC,SAAU,SAEzBxC,KAAKwb,QACLxb,KAAKwC,QAAQoH,MAAM4R,MAAQxb,KAAKwb,OAEhCxb,KAAKgK,SACLhK,KAAKwC,QAAQoH,MAAMI,OAAShK,KAAKgK,QAEjChK,KAAKqF,KAAKC,MAAM3E,OAChBX,KAAK4D,eAAgB,EAGrB5D,KAAKsK,iBAAgB,EAAOtK,KAAKwC,SAEjCya,UAAQC,UAAiC,aAArBld,KAAK0O,aACrBuO,UAAQC,WACRld,KAAKwC,QAAQoH,MAAM4R,MAAQ,OAC3Bxb,KAAKwC,QAAQ6R,UAAUC,IAAI,aAE/BpP,cAAYlF,KAAKwC,QAAQwB,iBAAiB,qBAAsB,qBAChEoH,WAASpL,KAAKwC,QAAQwB,iBAAiB,qBAAsB,mBAC7DhE,KAAK0O,YAAc,YAGnB1O,KAAK0O,YAAc,aAEnB1O,KAAK+jB,YACD/jB,KAAK4D,cACL5D,KAAKoJ,gBAGLpJ,KAAK0K,4BAGR,CACD,GAAI1K,KAAKwG,QAAQ7F,QAAUX,KAAK4D,cAAe,CAC3C5D,KAAKsK,iBAAgB,EAAOtK,KAAKwC,QAASxC,KAAKqF,KAAKrC,WAAW,EAAOhD,KAAKqF,KAAKtC,KAAK,EAAO/C,KAAKqF,KACjG,IAAIkF,GAASC,YAAWxK,KAAKqF,SAAU,EACvCrF,MAAKkD,aAAc,EACnBlD,KAAKyK,cAAcF,GACnBvK,KAAKkD,aAAc,MAEdlD,MAAKwG,QAAQ7F,QAClBX,KAAKmM,eAAenM,KAAKwC,QAAQsB,cAAc,yBAEnD9D,MAAKgkB,cACDhkB,KAAKikB,UACLjkB,KAAKkkB,gBAIT,KAAK,GAFDC,GAAUnkB,KAAKwC,QAAQwB,iBAAiB,eACxCogB,MAAS,GACJ5jB,EAAI,EAAGA,EAAI2jB,EAAQxjB,OAAQH,IAChC4jB,EAASD,EAAQ1K,KAAKjZ,GACtBuT,eAAaqQ,GAAUpQ,SAAU,aAI7C1R,EAAapC,UAAUkJ,cAAgB,WACnC,GAAIib,GAAcrkB,KAAKyE,cAAc,OACjCC,OACIC,MAAO,oBACPS,GAAIpF,KAAKwC,QAAQ4C,GAAK,sBAG1Bkf,EAAWtkB,KAAKyE,cAAc,YAAcC,OAASC,MAAO,iBAAkBsf,SAAU,QAAUM,OAAQ,qBAC1GC,EAAWxkB,KAAKyE,cAAc,UAAYC,OAASC,MAAO,sDAC1D8f,EAAUzkB,KAAKyE,cAAc,OAASC,OAASC,MAAO,qBAC1D0f,GAAYvf,YAAYwf,GACxBA,EAASxa,YAAc9J,KAAK+J,gBAAgB/J,KAAKqF,MACjDmf,EAAS1a,YAAc9J,KAAKiH,KAAKC,YAAY,QAC7Cud,EAAQ3f,YAAY0f,GACpBH,EAAYvf,YAAY2f,GACxBzkB,KAAKwC,QAAQsC,YAAYuf,IAE7B/hB,EAAapC,UAAUwK,sBAAwB,WAC3C,GAAIga,GAAe1kB,KAAKyE,cAAc,OAClCC,OACIC,MAAO,0BACPggB,MAAO3kB,KAAKiH,KAAKC,YAAY,sBAGrClH,MAAKwC,QAAQsB,cAAc,mBAAmBgB,YAAY4f,IAE9DpiB,EAAapC,UAAUuG,WAAa,WACS,eAArCzG,KAAK4kB,cAActZ,cACnBtL,KAAKwG,QAAU,GAAIwV,eAAYhc,KAAKwG,SAASqe,cAAa,GAAIxJ,UAAQyJ,WAAW,UAEvC,cAArC9kB,KAAK4kB,cAActZ,gBACxBtL,KAAKwG,QAAU,GAAIwV,eAAYhc,KAAKwG,SAASqe,cAAa,GAAIxJ,UAAQ0J,OAAO,YAGrFziB,EAAapC,UAAU8kB,iBAAmB,WAGtC,GAFAhlB,KAAKwC,QAAQ+B,UAAY,GACzBvE,KAAKqT,eAAiB,GACjBrT,KAAK+E,eACN,GAAI/E,KAAKiF,oBACL,GAAIjF,KAAKiF,mBAAoB,CACzB,GAAIoN,GAAYrS,KAAKyE,cAAc,UAAYC,OAAS0B,KAAM,SAAUzB,MAAO,gBAC/E3E,MAAK2J,UAAU7F,cAAc,gBAAgB2U,aAAapG,EAAWrS,KAAK2J,UAAU7F,cAAc,yBAItG9D,MAAK2J,UAAU7F,cAAc,gBAAgByU,QAGrDvY,MAAKqF,KAAOrF,KAAKilB,cAAcjlB,KAAKqF,MACpCrF,KAAK8jB,eAETxhB,EAAapC,UAAU8jB,YAAc,WAC7BhkB,KAAKiM,UACLb,WAASpL,KAAKwC,QAAQwB,iBAAiB,gBAAiB,SAGxDkB,cAAYlF,KAAKwC,QAAQwB,iBAAiB,gBAAiB,UAGnE1B,EAAapC,UAAU+kB,cAAgB,SAAU5f,GAC7C,GAAI6f,EACJ,IAAI7f,EAAKC,MACL,IAAK,GAAI9E,GAAI,EAAGA,EAAI6E,EAAKC,MAAM3E,OAAQH,IACnC0kB,EAAU7f,EAAKC,MAAM9E,GACrB0kB,EAAUllB,KAAKilB,cAAcC,GAC7B7f,EAAKC,MAAM9E,GAAK0kB,CAYxB,OATK5T,qBAAkBjM,EAAKtC,KAMnB/C,KAAKiF,qBAAuBqM,oBAAkBjM,EAAKrC,aACxDqC,EAAKtC,KAAM,IANP/C,KAAKiF,qBACLI,EAAKtC,KAAM,SAERsC,GAAKtC,KAKTsC,GAEX/C,EAAapC,UAAUilB,kBAAoB,SAAUC,EAASC,GAE1D,IAAK,GAAIC,GAAK,EAAGC,EADA9lB,OAAOwG,KAAKmf,GACeE,EAAKC,EAAa5kB,OAAQ2kB,IAElE,OADWC,EAAaD,IAEpB,IAAK,cAED,GAAI3b,GAAY3J,KAAKwC,QAAQsB,cAAc,sBAEvCuF,EAAcrJ,KAAKwC,QAAQsB,cAAc,qBACzCshB,GAAQrB,aACRpa,EAAUC,MAAMC,QAAU,OACtB7J,KAAKwC,QAAQwB,iBAAiB,sBAAsBrD,OAAS,GAC7DX,KAAKoJ,gBACLC,EAAcrJ,KAAKwC,QAAQsB,cAAc,uBAGzC9D,KAAKwC,QAAQsB,cAAc,mBAAmBgG,YAAc9J,KAAK+J,gBAAgB/J,KAAKqF,MAE1FgE,EAAYO,MAAMC,QAAU,UAGxBF,EAAU3F,iBAAiB,oBAAoBrD,QAAU,GACzDX,KAAK0K,wBAETf,EAAUC,MAAMC,QAAU,QAC1BR,EAAYO,MAAMC,QAAU,OAEhC,MACJ,KAAK,cACD7J,KAAKgiB,SACL,MACJ,KAAK,cACGoD,EAAQtZ,YAAYgH,WACpB5N,cAAYlF,KAAKwC,QAAQwB,iBAAiB,kBAAmB,iBAG7DoH,WAASpL,KAAKwC,QAAQwB,iBAAiB,kBAAmB,iBAE1DohB,EAAQtZ,YAAY8H,YACpB1O,cAAYlF,KAAKwC,QAAQwB,iBAAiB,kBAAmB,iBAG7DoH,WAASpL,KAAKwC,QAAQwB,iBAAiB,kBAAmB,gBAE9D,MACJ,KAAK,WACGqhB,EAAQ3U,UACRxL,eAAalF,KAAKwC,SAAU6iB,EAAQ3U,SAAS7K,MAAM,MAEnDuf,EAAQ1U,UACRtF,YAAUpL,KAAKwC,SAAU4iB,EAAQ1U,SAAS7K,MAAM,KAEpD,MACJ,KAAK,YACGuf,EAAQnZ,WACRb,YAAUpL,KAAKwC,SAAU,SACzBxC,KAAKgkB,gBAGL9e,eAAalF,KAAKwC,SAAU,SAC5BxC,KAAKgkB,cAET,MACJ,KAAK,oBACDhkB,KAAKwlB,kBAAoBJ,EAAQI,iBACjC,MACJ,KAAK,aACDxlB,KAAK+O,WAAaqW,EAAQrW,WAC1B/O,KAAKgiB,SACL,MACJ,KAAK,UACDhiB,KAAKwG,QAAU4e,EAAQ5e,QACvBxG,KAAKyG,YACL,MACJ,KAAK,gBACDzG,KAAK4kB,cAAgBQ,EAAQR,cAC7B5kB,KAAKyG,YACL,MACJ,KAAK,gBACDzG,KAAKgM,cAAgBoZ,EAAQpZ,aAC7B,MACJ,KAAK,SACDhM,KAAKgK,OAASob,EAAQpb,OACtBhK,KAAKwC,QAAQoH,MAAMI,OAAShK,KAAKgK,MACjC,MACJ,KAAK,OACDhK,KAAKqF,KAAO+f,EAAQ/f,KACpB+f,EAAQ/f,KAAOrF,KAAKylB,kBAAkBzlB,KAAKqF,MAAM,EACjD,MACJ,KAAK,QACDrF,KAAKwb,MAAQ4J,EAAQ5J,MACrBxb,KAAKwC,QAAQoH,MAAM4R,MAAQxb,KAAKwb,KAChC,MACJ,KAAK,SACDxb,KAAKigB,OAASmF,EAAQnF,OACtBjgB,KAAKuV,KAAO,GAAImQ,wBAAqB1lB,KAAKigB,QAC1CjgB,KAAKiD,UAAW,EAChBjD,KAAKgiB,UACLhiB,KAAKiD,UAAW,CAChB,MACJ,KAAK,qBACDjD,KAAKglB,kBACL,MACJ,KAAK,WACDhlB,KAAK0C,WAAa0iB,EAAQnB,SAC1BjkB,KAAKkkB,mBAKrB5hB,EAAapC,UAAUylB,UAAY,WAC/B3lB,KAAKwC,QAAQ4C,GAAKpF,KAAKwC,QAAQ4C,IAAMwgB,cAAY,oBACjD5lB,KAAK6lB,eACDC,WAAY,cACZC,SAAU,YACVC,SAAU,WACVC,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,uBAEfhoB,KAAKiH,KAAO,GAAIghB,QAAK,eAAgBjoB,KAAK6lB,cAAe7lB,KAAKigB,QAC9DjgB,KAAKuV,KAAO,GAAImQ,wBAAqB1lB,KAAKigB,QAC1CjgB,KAAKqT,eAAiB,EACtBrT,KAAKwY,iBAAmB,EACxBxY,KAAK4M,cAAgB,EACrB5M,KAAK2T,WAAa,EAClB3T,KAAK4D,eAAgB,EACrB5D,KAAKkoB,UACLloB,KAAKqH,iBACD8gB,iBACMtlB,MAAO,aAAc5B,IAAKjB,KAAKiH,KAAKC,YAAY,gBAChDrE,MAAO,WAAY5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAC9CrE,MAAO,WAAY5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAC9CrE,MAAO,QAAS5B,IAAKjB,KAAKiH,KAAKC,YAAY,WAC3CrE,MAAO,WAAY5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAC9CrE,MAAO,KAAM5B,IAAKjB,KAAKiH,KAAKC,YAAY,QACxCrE,MAAO,QAAS5B,IAAKjB,KAAKiH,KAAKC,YAAY,WAC3CrE,MAAO,UAAW5B,IAAKjB,KAAKiH,KAAKC,YAAY,aAC7CrE,MAAO,aAAc5B,IAAKjB,KAAKiH,KAAKC,YAAY,gBAEtDkhB,eACMvlB,MAAO,QAAS5B,IAAKjB,KAAKiH,KAAKC,YAAY,WAC3CrE,MAAO,cAAe5B,IAAKjB,KAAKiH,KAAKC,YAAY,iBACjDrE,MAAO,qBAAsB5B,IAAKjB,KAAKiH,KAAKC,YAAY,wBACxDrE,MAAO,WAAY5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAC9CrE,MAAO,kBAAmB5B,IAAKjB,KAAKiH,KAAKC,YAAY,qBACrDrE,MAAO,WAAY5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAEpDmhB,kBACMxlB,MAAO,QAAS5B,IAAKjB,KAAKiH,KAAKC,YAAY,WAC3CrE,MAAO,WAAY5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAEpDohB,iBACMzlB,MAAO,QAAS5B,IAAKjB,KAAKiH,KAAKC,YAAY,WAC3CrE,MAAO,qBAAsB5B,IAAKjB,KAAKiH,KAAKC,YAAY,wBACxDrE,MAAO,cAAe5B,IAAKjB,KAAKiH,KAAKC,YAAY,iBACjDrE,MAAO,UAAW5B,IAAKjB,KAAKiH,KAAKC,YAAY,aAC7CrE,MAAO,WAAY5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAC9CrE,MAAO,aAAc5B,IAAKjB,KAAKiH,KAAKC,YAAY,gBAChDrE,MAAO,kBAAmB5B,IAAKjB,KAAKiH,KAAKC,YAAY,qBACrDrE,MAAO,WAAY5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAC9CrE,MAAO,KAAM5B,IAAKjB,KAAKiH,KAAKC,YAAY,QACxCrE,MAAO,QAAS5B,IAAKjB,KAAKiH,KAAKC,YAAY,YAGrDlH,KAAKoH,WACDmhB,MAAO,IAAKC,SAAU,KAAMC,YAAa,IAAKC,mBAAoB,KAAMC,SAAU,IAAKC,GAAI,KAAMC,MAAO,SACxGC,gBAAiB,KAAMC,WAAY,OAAQC,SAAU,OAAQC,QAAS,UAAWC,WAAY,cAAe5Q,SAAU,OACtH6Q,OAAQ,UAAWC,UAAW,cAAeC,QAAS,WAAYC,WAAY,eAAgBC,cAAe,WAC7GC,YAAa,WAAYC,YAAa,YAErCzpB,KAAK2C,SACN3C,KAAK2C,QAAWC,KAAM,QAASC,MAAO,WAG9CP,EAAapC,UAAUwpB,OAAS,WAC5B1pB,KAAKmF,aACLnF,KAAK2U,QAEG/R,KAAM5C,KAAKiH,KAAKC,YAAY,YAC5B4M,QAAS,kCAGTlR,KAAM5C,KAAKiH,KAAKC,YAAY,gBAC5B4M,QAAS,iCAGjB9T,KAAKuM,SAAWvM,KAAK6M,eACrB7M,KAAK2J,UAAY3J,KAAKmS,eACtB,IAAIwX,KACE9mB,MAAO,SAAU5B,IAAKjB,KAAKiH,KAAKC,YAAY,YAC5CrE,MAAO,YAAa5B,IAAKjB,KAAKiH,KAAKC,YAAY,eAEjD0iB,IACE/mB,MAAO,SAAU5B,IAAKjB,KAAKiH,KAAKC,YAAY,YAC5CrE,MAAO,YAAa5B,IAAKjB,KAAKiH,KAAKC,YAAY,cAErDlH,MAAKqH,gBAAgC,eAAIrH,KAAKqH,gBAAgC,eAAEwiB,OAAOF,GACvF3pB,KAAKqH,gBAAgC,eAAIrH,KAAKqH,gBAAgC,eAAEwiB,OAAOD,GACnF5pB,KAAK+O,qBAAsBiN,gBAC3Bhc,KAAKmb,YAAcnb,KAAK+O,WACxB/O,KAAK8pB,oBAAmB,GAAIzO,UAAQ0O,KAAK,MAGzC/pB,KAAKmb,YAAc,GAAIa,eAAYhc,KAAK+O,YACxC/O,KAAK+F,SAAW/F,KAAKmb,YAAY0J,aAAa,GAAIxJ,UAClDrb,KAAKgqB,eAEThqB,KAAKiqB,kBAET3nB,EAAapC,UAAU+M,eAAiB,SAAUE,GAC9C,GAAIA,EACA,IACI,GAAI7D,SAAStF,iBAAiBmJ,GAAUxM,OACpC,MAAOupB,WAAiB5gB,SAASxF,cAAcqJ,GAAU5I,UAAU4lB,QAG3E,MAAOC,GACH,MAAOF,WAAiB/c,KAKpC7K,EAAapC,UAAU4pB,mBAAqB,SAAU1O,GAClD,GAAI3Y,GAAQzC,KACR2H,EAAO3H,KAAKmb,YAAYmB,aAAalB,GACrCgB,EAAW,GAAIC,WACnB1U,GAAKgV,KAAK,SAAUC,GACZA,EAAEC,QAAUD,EAAEC,OAAOhV,OACrBpF,EAAMsD,SAAW6W,EAAEC,OAAOhV,OAG1BpF,EAAMsD,SAAW6W,EAAE/U,OAEvBpF,EAAMunB,gBACPlN,MAAM,SAAUF,GACfR,EAASW,OAAOH,MAGxBta,EAAapC,UAAU8pB,YAAc,WACjChqB,KAAK8F,aACL9F,KAAK8jB,cACL9jB,KAAKqqB,cAET/nB,EAAapC,UAAUmqB,WAAa,WAChC,GAAIC,GAAUtqB,KAAKwF,YACnB+kB,gBAAajW,IAAIgW,EAAS,QAAStqB,KAAK4I,kBAAmB5I,MAC3DuqB,eAAajW,IAAIgW,EAAS,WAAYtqB,KAAK0I,kBAAmB1I,MAC9DuqB,eAAajW,IAAIgW,EAAS,UAAWtqB,KAAK0I,kBAAmB1I,MAC7DuqB,eAAajW,IAAItU,KAAKwC,QAAS,UAAWxC,KAAKwqB,gBAAiBxqB,OAEpEsC,EAAapC,UAAUujB,aAAe,WAClC,GAAI6G,GAAUtqB,KAAKwF,YACnB+kB,gBAAahS,OAAO+R,EAAS,QAAStqB,KAAK4I,mBAC3C2hB,eAAahS,OAAO+R,EAAS,WAAYtqB,KAAK0I,mBAC9C6hB,eAAahS,OAAO+R,EAAS,UAAWtqB,KAAK0I,mBAC7C6hB,eAAahS,OAAOvY,KAAKwC,QAAS,UAAWxC,KAAKwqB,kBAEtDloB,EAAapC,UAAUyL,eAAiB,SAAU3K,EAAQypB,GAItD,IAAK,GAHDC,GAAc1pB,YAAkB0gB,SAAW1hB,KAAKmF,UAAUnE,EAAOoE,IAAMpF,KAAKmF,UAAUnE,GACtFiD,EAAMwmB,EAAWC,EAAW/pB,OAAS,EAAI+pB,EAAW/pB,OACpD0E,EAAOrF,KAAKqF,KACP7E,EAAI,EAAGA,EAAIyD,EAAKzD,IACrB6E,EAAOrF,KAAKqjB,eAAeqH,EAAWlqB,GAAI6E,EAAY,IAAN7E,EAEpD,OAAO6E,IAQX/C,EAAapC,UAAUkK,YAAc,SAAUpJ,GAC3C,GAEI2pB,GAFAloB,EAAQzC,KACR2J,EAAY3I,CAEM,iBAAXA,IACP2pB,EAAU3qB,KAAKwC,QAAQ4C,GAAK,IAAMpE,EAClCA,EAASsI,SAASC,eAAeohB,IAGjCA,EAAUhhB,EAAUvE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,GAE1D,IAAIyD,IAASC,QAAS6hB,EAAStf,QAAQ,EAAOjF,KAAM,cAC/CpG,MAAK4D,cAMN5D,KAAK4qB,2BAA2B/hB,EAAM7H,GALtChB,KAAKyH,QAAQ,eAAgBoB,EAAM,SAAU2C,GACzC/I,EAAMmoB,2BAA2Bpf,EAAoBxK,MAOjEsB,EAAapC,UAAU0qB,2BAA6B,SAAU/hB,EAAM7H,GAChE,IAAK6H,EAAKwC,OAAQ,CACd,GAAI1B,GAAY3I,EACZqE,EAAOrF,KAAK2L,eAAehC,GAAW,GACtCmG,EAAQ,EACRtP,MAAI,GACJyD,MAAM,GACNwH,EAAczL,KAAK0L,cAAc1L,KAAKqF,MACtCwlB,EAAWlhB,EAAU0O,mBACrByS,EAAWnhB,EAAUgF,uBACrBnM,EAAUmH,EAAU3F,iBAAiB,sBACrCuN,EAAU5H,EAAU3F,iBAAiB,aAEzC,KADAC,EAAMsN,EAAQ5Q,OACTH,EAAI,EAAGA,EAAIyD,EAAKzD,IACjB6D,eAAakN,EAAQ/Q,GAAI,WAAW8D,SAExC,KAAK9D,EAAI,EAAGyD,EAAMzB,EAAQ7B,OAAQH,EAAIyD,EAAKzD,UAChCR,MAAKmF,UAAU3C,EAAQhC,GAAG4E,GAErC,MAA4C,OAArCuE,EAAUgF,wBACbhF,EAAYA,EAAUgF,uBACtBmB,GAEA+a,IAAYA,EAAS1mB,UAAUC,QAAQ,oBAAsB,IAC7Dc,eAAa2lB,GAAW,mBACxBzf,YAAUyf,GAAW,iBACjBC,GAAYA,EAAS3mB,UAAUC,QAAQ,qBAAuB,GAC9DgH,YAAU0f,GAAW,sBAG7B,IAAIte,GAAO7C,EAAUzF,cAAcA,cAAcA,cAC7C6mB,IAEJ,IAAI/qB,KAAKsN,SAAWtN,KAAKuN,UAAW,CAChC,GAAIyd,GAAU3lB,EAAKC,MAAMwK,GACrBmb,EAAejqB,EAAOgD,iBAAiB,oBAC3C,IAAIgnB,GAAWA,EAAQ1lB,MACnB,IAAK,GAAIlE,GAAI,EAAGA,EAAI4pB,EAAQ1lB,MAAM3E,OAAQS,IAAK,CAC3C,GAAI4G,GAAShI,KAAKoO,UAAU4c,EAAQ1lB,MAAMlE,GAAGuE,OACzCulB,EAAqBD,EAAa7pB,GAAG0C,cAAc,oBACnDkE,KAAWA,EAAO6E,cAAiB7M,KAAKmrB,mBAAmBnjB,IAAWkjB,IACtEH,EAAa5jB,KAAK8jB,EAAa7pB,GAAGgE,KAKlD+K,SAAOnP,GACHhB,KAAK+E,gBACL/E,KAAKoQ,iBAAiBpP,EAAOoE,KAE7B2lB,EAAapqB,QACbX,KAAKoQ,gBAAgB2a,GAEzB1lB,EAAKC,MAAM8lB,OAAOtb,EAAO,SAClB9P,MAAKmF,UAAU0D,EAAKC,SAC3B9I,KAAKyR,mBACLzR,KAAKuF,qBAAqBiH,EAAMnH,GAC3BrF,KAAK4D,eACN5D,KAAKyH,QAAQ,SAAUoB,GAE3B7I,KAAK4L,YAAYH,EAAazL,KAAK0L,cAAc1L,KAAKqF,MAAO,iBAGrE/C,EAAapC,UAAUirB,mBAAqB,SAAUnjB,GAGlD,MADSA,GAAOmF,WAAwC,gBAApBnF,GAAOmF,cAAoDsH,KAA3BzM,EAAOmF,SAAShN,SAGxFmC,EAAapC,UAAUiK,WAAa,SAAUnJ,GAC1C,GAAIyB,GAAQzC,KAIR6I,GAASC,QAHGuB,UAAQrJ,EAAQ,sBACRoE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IAE3B2H,OADlB1C,UAAQrJ,EAAQ,qBAAqBoE,GAAG0F,QAAQ9K,KAAKwC,QAAQ4C,GAAK,IAAK,IACrCiG,QAAQ,EAAOjF,KAAM,aAC/DpG,MAAK4D,cAMN5D,KAAKqrB,0BAA0BxiB,EAAM7H,GALrChB,KAAKyH,QAAQ,eAAgBoB,EAAM,SAAU2C,GACzC/I,EAAM4oB,0BAA0B7f,EAAoBxK,MAOhEsB,EAAapC,UAAUmrB,0BAA4B,SAAUxiB,EAAM7H,GAC/D,IAAK6H,EAAKwC,OAAQ,CACd,GAAI1B,GAAYU,UAAQrJ,EAAQ,sBAC5BqE,EAAOrF,KAAK2L,eAAehC,GAC3B4C,EAAWlC,UAAQrJ,EAAQ,qBAC3ByK,EAAczL,KAAK0L,cAAc1L,KAAKqF,MACtCimB,EAAc/e,EACdse,EAAWte,EAAS8L,mBACpByS,EAAWve,EAASoC,uBACpBmB,EAAQ,EACRyB,EAAUhF,EAASvI,iBAAiB,cACpCxD,MAAI,GACJyD,EAAMsN,EAAQ5Q,MAClB,KAAKH,EAAI,EAAGA,EAAIyD,EAAKzD,IACjB6D,eAAakN,EAAQ/Q,GAAI,WAAW8D,SAExC,MAA2C,OAApCiI,EAASoC,wBACZpC,EAAWA,EAASoC,uBACpBmB,GAEJ,IAAI9H,GAAShI,KAAKoO,UAAU/I,EAAKC,MAAMwK,GAAOnK,MAC1CqC,IAAUA,EAAOmF,UAAYme,EAAYxnB,cAAc,gBACvD9D,KAAK4Z,gBAAgB5R,EAAQsjB,EAAYxnB,cAAc,eAAesB,MAErE0lB,GAAYA,EAAS3mB,UAAUC,QAAQ,oBAAsB,IAC1DymB,GACA3lB,eAAa2lB,GAAW,mBAG3BA,GAAYA,EAAS1mB,UAAUC,QAAQ,oBAAsB,IAC1D0mB,GACA5lB,eAAa4lB,GAAW,qBAGhC,IAAII,GAAqBI,EAAYxnB,cAAc,oBACnDqM,UAAOmb,GACHtjB,GAAUA,EAAO6E,cACjB7M,KAAKoQ,iBAAiBkb,EAAYlmB,KAElC4C,GAAUhI,KAAKmrB,mBAAmBnjB,IAAWkjB,GAC7ClrB,KAAKoQ,iBAAiBkb,EAAYlmB,KAEtCC,EAAKC,MAAM8lB,OAAOtb,EAAO,GACnBzK,EAAKC,MAAM,IAAMD,EAAKC,MAAM,GAAGA,OACjCtF,KAAKuF,qBAAqBoE,EAAWtE,GAEpCrF,KAAK4D,eACN5D,KAAKyH,QAAQ,SAAUoB,GAE3B7I,KAAK4L,YAAYH,EAAazL,KAAK0L,cAAc1L,KAAKqF,MAAO,gBAGrE/C,EAAapC,UAAUuK,cAAgB,SAAUpF,EAAML,GAC/ChF,KAAK+E,gBAAkBC,IACvBhF,KAAKgF,QAAS,GAElBhF,KAAK2D,QACL3D,KAAKqT,eAAiB,EACtBrT,KAAK4M,cAAgB,EACrB5M,KAAK4D,eAAgB,EACrB5D,KAAKqF,KAAOA,EACZA,EAAOrF,KAAKylB,kBAAkBzlB,KAAKqF,MAAM,GACzCrF,KAAK6jB,YAAY7jB,KAAKqF,KAAMrF,KAAKwC,QAAQsB,cAAc,uBAAuB,EAAM9D,KAAKqF,KAAKtC,IAAKiC,GACnGhF,KAAK4D,eAAgB,GAEzBtB,EAAapC,UAAUsqB,gBAAkB,SAAU5N,IAC3C5c,KAAKikB,UAA2B,KAAdrH,EAAE2O,SAAgC,KAAd3O,EAAE2O,SAAgC,KAAd3O,EAAE2O,SAC5D3O,EAAE4O,kBAGVlpB,EAAapC,UAAUkQ,gBAAkB,SAAU6a,IAE3CjrB,KAAKsN,SAAWtN,KAAKuN,YACrBvN,KAAKyrB,cAAcR,IAG3B3oB,EAAapC,UAAUqF,qBAAuB,SAAUoE,EAAWrE,GAC/D,IAAKtF,KAAK+E,eAAgB,CACtB,GAAI/E,KAAKikB,SACL,MAEJ,IAAIyH,GAAQ/hB,EAAU7F,cAAc,gBAAgBsV,kBAChDuS,EAAUhiB,EAAU7F,cAAc,mBAClC8nB,EAASjiB,EAAU7F,cAAc,iBACjC4nB,GAAQ,GACRC,EAAQE,UAAW,EACnBD,EAAOC,UAAW,GACdD,EAAOvT,mBAAmBhE,UAAUiE,SAAS,kBAC7CqT,EAAQtT,mBAAmBhE,UAAUiE,SAAS,oBAC9CsT,EAAOvT,mBAAmBhE,UAAUkE,OAAO,iBAC3CoT,EAAQtT,mBAAmBhE,UAAUkE,OAAO,kBAE5CjT,GAA6B,OAApBA,EAAMtC,UACf4oB,EAAOpL,SAAU,EAGjBmL,EAAQnL,SAAU,IAItBmL,EAAQnL,SAAU,EAClBmL,EAAQE,UAAW,EACnBD,EAAOpL,SAAU,EACjBoL,EAAOC,UAAW,EACdvmB,IACAsmB,EAAOvT,mBAAmBhE,UAAUC,IAAI,iBACxCqX,EAAQtT,mBAAmBhE,UAAUC,IAAI,qBAWzDhS,EAAapC,UAAUwL,cAAgB,SAAUogB,GACxCA,IACDA,EAAc9rB,KAAK+rB,WAEvB,IAAIC,GAAeF,EAAY9oB,UAC3BwR,EAAesX,EAAY/oB,IAC3BwgB,EAAW/Y,YAAWshB,EAAYxmB,UAAW,EAEjD,OADWtF,MAAKylB,mBAAoBziB,UAAWgpB,EAAc1mB,MAAOie,EAAUxgB,IAAKyR,IAAgB,IAGvGlS,EAAapC,UAAUulB,kBAAoB,SAAUpgB,EAAM4mB,GACvD,GAAI/G,EACJ,IAAI7f,EAAKC,OAASD,EAAKC,MAAM3E,SAAWlB,OAAOwG,KAAKZ,EAAKC,MAAM,IAAI3E,OAAS,GAAKsrB,GAE7E,IAAK,GADDza,GAAOnM,EAAKC,MAAM3E,OACbuH,EAAI,EAAGA,EAAIsJ,EAAMtJ,IACtBgd,EAAU7f,EAAKC,MAAM4C,GACrBgd,EAAUllB,KAAKylB,kBAAkBP,EAAS+G,GAC1C5mB,EAAKC,MAAM4C,GAAKgd,EACZzlB,OAAOwG,KAAKif,GAASvkB,OAAS,GAAKsrB,IACnC5mB,EAAKC,MAAM8lB,OAAOljB,EAAG,GACrBA,IACAsJ,IAKZ,IAAI0a,GAAY7mB,EAAK8mB,MACrB,IAAK9mB,EAAKM,OAAwB,KAAfN,EAAKM,QAAkB2L,oBAAkB4a,IAAeA,GAAiC,aAAnBA,EAAU9lB,MAC5E,WAAnB8lB,EAAU9lB,MACNf,EAAKiJ,WACDjJ,EAAKiJ,SAASuK,WAAWzU,QAAQ,SAAW,GAAKiB,EAAKiJ,SAASuK,WAAWzU,QAAQ,UAAY,KAC9FiB,EAAKxC,MAAQ,MAGhB7C,KAAKkD,aAAelD,KAAKwlB,mBAA2C,KAApBxlB,KAAKqF,KAAKM,OAAkC,KAAlBN,EAAKiJ,UAAmC,KAAfjJ,EAAKxC,WAC1F4R,KAAfpP,EAAKxC,OACLwC,GACIkC,MAASlC,EAAKkC,MAAO5B,MAASN,EAAKM,MAAO2I,SAAYjJ,EAAKiJ,SAAUlI,KAAQf,EAAKe,KAAMvD,MAASwC,EAAKxC,OAEtGqpB,IAEA7mB,EAAK8mB,OAASD,IAIlB7mB,SAIJ,KAAI6mB,GAAiC,aAAnBA,EAAU9lB,MAA0C,WAAnB8lB,EAAU9lB,KAarDf,EADArF,KAAKiF,oBACIjC,UAAaqC,EAAKrC,UAAWsC,MAASD,EAAKC,MAAOvC,IAAOsC,EAAKtC,MAG9DC,UAAaqC,EAAKrC,UAAWsC,MAASD,EAAKC,WAhBqB,CAC7E,GAAI8mB,GAAW/mB,EAAKtC,KACpBsC,GAASkC,MAASlC,EAAKkC,MAAO5B,MAASN,EAAKM,MAAO2I,SAAYjJ,EAAKiJ,SAAUlI,KAAQf,EAAKe,KAAMvD,MAASwC,EAAKxC,MAC3GG,UAAaqC,EAAKrC,UAAWsC,MAASD,EAAKC,QAG1C6mB,OAASD,EACVlsB,KAAKiF,qBACLI,EAAKtC,IAAMqpB,GAYvB,MAAO/mB,IAQX/C,EAAapC,UAAUmsB,SAAW,SAAUhnB,GACxC,GAAIkF,GAASC,YAAWnF,MAAU,EAC9BrF,MAAK+E,eACL/E,KAAKyK,cAAcF,GAAQ,GAG3BvK,KAAKyK,cAAcF,IAQ3BjI,EAAapC,UAAU6rB,SAAW,WAC9B,GAAI1mB,EAYJ,OAVIA,GADArF,KAAKiF,oBACIjC,UAAWhD,KAAKqF,KAAKrC,UAAWsC,MAAOtF,KAAKqF,KAAKC,MAAOvC,IAAK/C,KAAKqF,KAAKtC,MAGvEC,UAAWhD,KAAKqF,KAAKrC,UAAWsC,MAAOtF,KAAKqF,KAAKC,OAG1DtF,KAAKqF,KAAK8mB,SAEV9mB,EAAK8mB,OAASnsB,KAAKqF,KAAK8mB,QAErB9mB,GAQX/C,EAAapC,UAAUosB,QAAU,SAAU9f,GACvC,GAAID,GACAmM,EACA5I,EAAQ,CACRtD,aAAgB+f,aAChBhgB,EAAWlC,UAAQmC,EAAM,sBAGzBkM,EAAS1Y,KAAKwC,QAAQ4C,GAAK,IAAMoH,EACjCD,EAAWjD,SAASC,eAAemP,GAIvC,KAFA,GAAI/O,GAAYU,UAAQkC,EAAU,sBAC9BlH,EAAOrF,KAAK2L,eAAehC,GACY,OAApC4C,EAASoC,wBACZpC,EAAWA,EAASoC,uBACpBmB,GAEJ,OAAOzK,GAAKC,MAAMwK,IAQtBxN,EAAapC,UAAU8K,SAAW,SAAUhK,GACpCA,YAAkB0gB,UAAW1gB,EAAOmD,UAAUC,QAAQ,qBAAuB,IAC7EpD,EAASqJ,UAAQrJ,EAAQ,sBAE7B,IAAI2pB,GAAW3pB,YAAkB0gB,SAAW1gB,EAAOoE,GAAKpF,KAAKwC,QAAQ4C,GAAK,IAAMpE,CAEhF,OADWhB,MAAK2L,eAAegf,IASnCroB,EAAapC,UAAUssB,aAAe,SAAUC,GAC5C,GAAIjsB,GAEAsI,EADA7E,EAAMwoB,EAAY9rB,MAEtB,KAAKH,EAAI,EAAGA,EAAIyD,EAAKzD,IACjBsI,EAAU9I,KAAKwC,QAAQ4C,GAAK,IAAMqnB,EAAYjsB,GAC9CR,KAAKoK,YAAYd,SAASC,eAAeT,KASjDxG,EAAapC,UAAUwsB,mBAAqB,WACxC,GAAIC,GAAY3sB,KAAK4sB,aAAa5sB,KAAK0L,cAAc1L,KAAKqF,OACtDwnB,EAAmBvb,oBAAkBqb,GAAa,GAAItR,UAAU,GAAIA,UAAQyR,MAAMH,EACtF,OAAO3sB,MAAKmb,YAAYmB,aAAauQ,IAQzCvqB,EAAapC,UAAU6sB,YAAc,SAAUC,GAC3C,GAAIxsB,GAEAuM,EADA9I,EAAM+oB,EAAWrsB,MAErB,KAAKH,EAAI,EAAGA,EAAIyD,EAAKzD,IACjBuM,EAAS/M,KAAKwC,QAAQ4C,GAAK,IAAM4nB,EAAWxsB,GAC5CR,KAAKmK,WAAWb,SAASC,eAAewD,KAShDzK,EAAapC,UAAU+sB,oBAAsB,SAAU5nB,GAInD,IAAK,GAHDsnB,GAAY3sB,KAAK4sB,aAAavnB,GAE9B1C,KACKnC,EAAI,EAAGyD,EAAMxE,OAAOwG,KAAKjG,KAAKwG,SAAUhG,EAAIyD,EAAItD,OAAQH,IAC7DmC,EAAOwE,KAAKnH,KAAKwG,QAAQhG,GAAGmF,MAQhC,OANIN,GAAKC,MAAM3E,QACH,GAAI0a,UAAQ3O,OAAO/J,GAAQmqB,MAAMH,IAGjC,GAAItR,UAAQ3O,OAAO/J,IAUnCL,EAAapC,UAAU0sB,aAAe,SAAUvnB,GAC5C,GACI6nB,GACAC,EACAC,EAEAplB,EALAub,EAAWle,EAAKC,MAIhB+nB,GAAa,EAEbC,GAAc,cAAe,gBAAiB,cAClD,KAAK/J,EACD,MAAO2J,EAEX,KAAK,GAAI1sB,GAAI,EAAGyD,EAAMsf,EAAS5iB,OAAQH,EAAIyD,EAAKzD,IAG5C,GADA6sB,GAAa,EADF5tB,OAAOwG,KAAKsd,EAAS/iB,IAEvB4D,QAAQ,UAAY,GAAKmf,EAAS/iB,GAAG8E,OAC1C6nB,EAAQntB,KAAK4sB,aAAarJ,EAAS/iB,OAIvB0sB,EAFJA,EACuB,QAAnB7nB,EAAKrC,UACEkqB,EAAKK,IAAIJ,GAGTD,EAAKM,GAAGL,GAIZA,OAId,IAAI5J,EAAS/iB,GAAG8N,SAAS3N,OAAQ,CAClC,GAAIkiB,GAAOU,EAAS/iB,GAAG8N,SAAShD,cAC5BmiB,GAAe,EACfC,GAAgB,QAAS,WAAY,cAAe,qBAAsB,WAAY,kBAQ1F,IAPyB,WAArBnK,EAAS/iB,GAAG4F,OACZinB,GAAartB,KAAK2tB,WAEG,SAArBpK,EAAS/iB,GAAG4F,MAAmBsnB,EAAatpB,QAAQye,IAAS,IAC7DwK,GAAa,GAEjBrlB,EAAShI,KAAKoO,UAAUmV,EAAS/iB,GAAGmF,OAChCkd,EAAKze,QAAQ,SAAW,GAAKye,EAAKze,QAAQ,UAAY,EACtDmf,EAAS/iB,GAAGqC,MAAQ,SAEnB,IAAyB,SAArB0gB,EAAS/iB,GAAG4F,MAAqBmd,EAAS/iB,GAAGqC,gBAAiBjD,OAanEwtB,EAAY7J,EAAS/iB,GAAGqC,UAbmD,CAC3E,GAAIwS,GAASrV,KAAKsV,UAAUtN,EAAOqN,OAC9B/D,qBAAkBiS,EAAS/iB,GAAGqC,OAO/BuqB,EAAY,MANZA,EAAYptB,KAAK4tB,QAAQrK,EAAS/iB,GAAGqC,MAAOwS,GACxCqY,EAAatpB,QAAQye,IAAS,IAAM7iB,KAAK6tB,OAAOtK,EAAS/iB,GAAGqC,SAC5D4qB,GAAe,IAU3B,GAAU,IAANjtB,EACIitB,IAAiB5K,EAAKze,QAAQ,OAAS,GAAKye,EAAKze,QAAQ,YAAc,GAAKye,EAAKze,QAAQ,SAAW,GACpGye,EAAKze,QAAQ,UAAY,IAAMye,EAAKze,QAAQ,YAAc,EAC1D8oB,EAAOO,EAAeztB,KAAK8tB,cAAcvK,EAAS/iB,GAAI4sB,GAAaptB,KAAK+tB,eAAexK,EAAS/iB,IAIlF,MADVqC,EAAQuqB,IACQE,EAAWlpB,QAAQye,GAAQ,IAC3CqK,EAAO,GAAIc,aAAUzK,EAAS/iB,GAAGmF,MAAO4d,EAAS/iB,GAAG8N,SAAU8e,EAAWC,QAIhF,CACD,GAAIC,EAAWlpB,QAAQye,IAAS,EAC5B,QAEJ,IAAI4K,IAAiB5K,EAAKze,QAAQ,OAAS,GAAKye,EAAKze,QAAQ,YAAc,GACvEye,EAAKze,QAAQ,SAAW,GAAKye,EAAKze,QAAQ,UAAY,IAAMye,EAAKze,QAAQ,YAAc,EACvF8oB,EAAOO,EAAeztB,KAAK8tB,cAAcvK,EAAS/iB,GAAI4sB,EAAWF,EAAM7nB,EAAKrC,WACxEhD,KAAK+tB,eAAexK,EAAS/iB,GAAI0sB,EAAM7nB,EAAKrC,eAGhD,IAAuB,QAAnBqC,EAAKrC,UAAqB,CACtBH,EAAQuqB,CACRF,IAAkB,KAAVrqB,EACRqqB,EACMA,EAAKK,IAAIhK,EAAS/iB,GAAGmF,MAAO4d,EAAS/iB,GAAG8N,SAAU8e,EAAWC,GAEpD,KAAVxqB,IACLqqB,EAAO,GAAIc,aAAUzK,EAAS/iB,GAAGmF,MAAO4d,EAAS/iB,GAAG8N,SAAU8e,EAAWC,QAG5E,CACD,GAAIxqB,GAAQuqB,CACRF,IAAkB,KAAVrqB,EACRqqB,EAAOA,EAAKM,GAAGjK,EAAS/iB,GAAGmF,MAAO4d,EAAS/iB,GAAG8N,SAAU8e,EAAWC,GAEpD,KAAVxqB,IACLqqB,EAAO,GAAIc,aAAUzK,EAAS/iB,GAAGmF,MAAO4d,EAAS/iB,GAAG8N,SAAU8e,EAAWC,MAOjG,MAAOH,IAEX5qB,EAAapC,UAAUggB,UAAY,WAC/B,GACI+N,GAAejuB,KAAKigB,MAMxB,OAJiBhG,YADH,QAC2Bja,KAAKigB,OAHxB,+CAGkDiO,cAEpED,EAAe,MAEZA,GAEX3rB,EAAapC,UAAUkO,UAAY,SAAUzI,EAAO+B,GAIhD,IAAK,GAFDM,GADAxB,EAAUxG,KAAKwG,QAGVhG,EAAI,EAAGwR,GADhBxL,EAAUkB,GAAYlB,GACS7F,OAAQH,EAAIwR,EAAMxR,IAAK,CAClD,GAAIgG,EAAQhG,GAAGmF,QAAUA,EAAO,CAC5BqC,EAASxB,EAAQhG,EACjB,OAEC,GAAIgG,EAAQhG,GAAGgG,UAChBwB,EAAShI,KAAKoO,UAAUzI,EAAOa,EAAQhG,GAAGgG,UAEtC,MAIZ,MAAOwB,IASX1F,EAAapC,UAAUkN,aAAe,SAAUzH,GAE5C,MADa3F,MAAKoO,UAAUzI,GACdyB,WAElB9E,EAAapC,UAAUiuB,QAAU,SAAUC,EAAMC,GAO7C,MANIA,GACAD,EAAKE,SAAS,EAAG,EAAG,GAGpBF,EAAKE,SAAS,GAAI,GAAI,IAEnBF,GAEX9rB,EAAapC,UAAU4tB,cAAgB,SAAUvK,EAAU1gB,EAAO8pB,EAAW3pB,GACzE,GAAIkqB,GACAqB,EAAYvuB,KAAKmuB,QAAQ,GAAIvnB,MAAK/D,EAAMiE,YAAY,GACpD0nB,EAAUxuB,KAAKmuB,QAAQtrB,EAC3B,QAAQ0gB,EAASjV,UACb,IAAK,QAED4e,GADAA,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,qBAAsB4oB,IAC/ChB,IAAIhK,EAAS5d,MAAO,kBAAmB6oB,EACnD,MACJ,KAAK,WAEDtB,GADAA,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,WAAY4oB,IACrCf,GAAGjK,EAAS5d,MAAO,cAAe6oB,EAC9C,MACJ,KAAK,cACDtB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,cAAe6oB,EACpD,MACJ,KAAK,qBACDtB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,qBAAsB4oB,EAC3D,MACJ,KAAK,WACDrB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,WAAY4oB,EACjD,MACJ,KAAK,kBACDrB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,kBAAmB6oB,GAgBhE,MAbItB,KACIP,EACkB,QAAd3pB,EACA2pB,EAAYA,EAAUY,IAAIL,GAEP,OAAdlqB,IACL2pB,EAAYA,EAAUa,GAAGN,IAI7BP,EAAYO,GAGbP,GAEXrqB,EAAapC,UAAU6tB,eAAiB,SAAUxK,EAAUoJ,EAAW3pB,GACnE,GAGIkqB,GAHArqB,EAAQ0gB,EAAS1gB,MACjByL,EAAWiV,EAASjV,SAASuK,WAC7B4V,EAAYlL,EAAS1gB,MAErBmF,EAAShI,KAAKoO,UAAUmV,EAAS5d,OACjC0P,EAASrV,KAAKsV,UAAUtN,EAAOqN,OACnC,IAAI/G,EAASlK,QAAQ,SAAW,GAAKkK,EAASlK,QAAQ,UAAY,EAC9D,OAAQkK,GACJ,IAAK,SACD4e,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,SAAU8oB,EAC/C,MACJ,KAAK,YACDvB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,UAAW8oB,EAChD,MACJ,KAAK,UACDvB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,QAAS,GAC9C,MACJ,KAAK,aACDunB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,WAAY,IAI7D,KAAM2I,EAASlK,QAAQ,SAAW,GAAKkK,EAASlK,QAAQ,UAAY,GAChE,IAAK,GAAI8D,GAAI,EAAGsJ,EAAO3O,EAAMlC,OAAQuH,EAAIsJ,EAAMtJ,IAC3C,GAAiB,KAAbrF,EAAMqF,GACN,GAAU,IAANA,EAAS,CACT,GAAIwmB,GAAM,oBACV,QAAQpgB,GACJ,IAAK,UAEG4e,EADgB,SAAhBllB,EAAO5B,KACA,GAAI4nB,aAAUzK,EAAS5d,MAAO+oB,EAAK7rB,EAAMqF,IAGzC,GAAI8lB,aAAUzK,EAAS5d,MAAO+oB,EAAK7rB,EAAMqF,GAC3ClI,KAAK6tB,OAAOhrB,EAAMqF,IAAMlI,KAAK4tB,QAAQ/qB,EAAMqF,GAAImN,GAC5CrV,KAAKmuB,QAAQnuB,KAAK4tB,QAAQ/qB,EAAMqF,GAAImN,IAAS,GAAS,KAElE,MACJ,KAAK,aAEG6X,EADgB,SAAhBllB,EAAO5B,KACA,GAAI4nB,aAAUzK,EAAS5d,MAAO,WAAY9C,EAAMqF,GAClDlI,KAAK6tB,OAAOhrB,EAAMqF,IAAMlI,KAAK4tB,QAAQ/qB,EAAMqF,GAAImN,GAC5CrV,KAAKmuB,QAAQnuB,KAAK4tB,QAAQ/qB,EAAMqF,GAAImN,IAAS,GAAS,MAGvD,GAAI2Y,aAAUzK,EAAS5d,MAAO,WAAY9C,EAAMqF,GAE3D,MACJ,KAAK,KACDglB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,QAAS9C,EAAMqF,GACpD,MACJ,KAAK,QACDglB,EAAO,GAAIc,aAAUzK,EAAS5d,MAAO,WAAY9C,EAAMqF,SAI9D,CAED,OAAQqb,EAASjV,UACb,IAAK,UAEG4e,EADgB,SAAhBllB,EAAO5B,KACA8mB,EAAKK,IAAIhK,EAAS5d,MAAO,kBAAmB9C,EAAMqF,GACpDlI,KAAK6tB,OAAOhrB,EAAMqF,IAAMlI,KAAK4tB,QAAQ/qB,EAAMqF,GAAImN,GAC5CrV,KAAKmuB,QAAQnuB,KAAK4tB,QAAQ/qB,EAAMqF,GAAImN,IAAYxS,EAAMqF,IAGvDglB,EAAKK,IAAIhK,EAAS5d,MAAO,kBAAmB9C,EAAMqF,GAE7D,MACJ,KAAK,aAEGglB,EADgB,SAAhBllB,EAAO5B,KACA8mB,EAAKM,GAAGjK,EAAS5d,MAd3B,cAcsC9C,EAAMqF,GACpClI,KAAK6tB,OAAOhrB,EAAMqF,IAAMlI,KAAK4tB,QAAQ/qB,EAAMqF,GAAImN,GAC5CrV,KAAKmuB,QAAQnuB,KAAK4tB,QAAQ/qB,EAAMqF,GAAImN,IAAYxS,EAAMqF,IAGvDglB,EAAKM,GAAGjK,EAAS5d,MAAO,cAAe9C,EAAMqF,GAExD,MACJ,KAAK,KACDglB,EAAOA,EAAKM,GAAGjK,EAAS5d,MAAO,QAAS9C,EAAMqF,GAC9C,MACJ,KAAK,QACDglB,EAAOA,EAAKK,IAAIhK,EAAS5d,MAAO,WAAY9C,EAAMqF,KAoB1E,MAbIglB,KACIP,EACkB,QAAd3pB,EACA2pB,EAAYA,EAAUY,IAAIL,GAEP,OAAdlqB,IACL2pB,EAAYA,EAAUa,GAAGN,IAI7BP,EAAYO,GAGbP,GAEXrqB,EAAapC,UAAU0tB,QAAU,SAAU/qB,EAAOwS,GAC9C,GAAIsZ,GAAW3uB,KAAKuV,KAAK6J,UAAUvc,EAAOwS,EAa1C,OAZIxS,GAAMuB,QAAQ,MAAQ,GAAMvB,EAAMuB,QAAQ,KAAO,GAAKvB,EAAMuB,QAAQ,KAAO,GACxEvB,EAAMuB,QAAQ,KAAO,KACxBuqB,EAAW,GAAI/nB,OAEN0nB,SAASnY,SAAStT,EAAMgD,MAAM,KAAK,KAE5C8oB,EAASC,WAAWzY,SAAStT,EAAMgD,MAAM,KAAK,KAC1ChD,EAAMgD,MAAM,KAAK,IAEjB8oB,EAASE,WAAW1Y,SAAStT,EAAMgD,MAAM,KAAK,MAG/C8oB,GAEXrsB,EAAapC,UAAU2tB,OAAS,SAAUhrB,GACtC,SAAIA,GAASA,EAAMuB,QAAQ,MAAQ,IAKvC9B,EAAapC,UAAU2jB,YAAc,SAAUxe,EAAM4T,EAAY6V,EAAS/rB,EAAKiC,GAC3E,GAAK8pB,EAGA,CACD,GAAIzpB,EAAKC,MAAM3E,OAAS,IAAMX,KAAK+E,eAAgB,CAE/C,GAAI6mB,GAAS3S,EAAWnV,cAAc,kBAClC6nB,EAAU1S,EAAWnV,cAAc,kBACvC8nB,GAAOC,UAAW,EAClBF,EAAQE,UAAW,EACI,OAAnBxmB,EAAKrC,UACL4oB,EAAOpL,SAAU,EAGjBmL,EAAQnL,SAAU,MAKtBxgB,MAAKuF,qBAAqB0T,EAK9B,IAHIjZ,KAAK+E,gBAAkBC,IACvBiU,EAAajZ,KAAK+uB,YAAY1pB,EAAMA,EAAKrC,UAAWhD,KAAKwC,QAAS6C,EAAKtC,IAAKiC,IAE5EhF,KAAKiF,qBAAuBjF,KAAK+E,eAAgB,CACjD,GAAIiqB,GAAa/V,EAAWnV,cAAc,eACtCuB,GAAKtC,IACLqI,YAAU4jB,GAAa,mBAGvB9pB,eAAa8pB,GAAa,wBA7BlC/V,GAAajZ,KAAK+uB,YAAY1pB,EAAMA,EAAKrC,UAAWiW,EAAYlW,EAiCpE,IAAIwgB,GAAWle,EAAKC,KACpB,KAAKgM,oBAAkBiS,GACnB,IAAK,GAAI/iB,GAAI,EAAGyD,EAAMsf,EAAS5iB,OAAQH,EAAIyD,EAAKzD,IAAK,CACjD,GAAIyF,GAAOxG,OAAOwG,KAAKsd,EAAS/iB,KAC3B8Q,oBAAkBiS,EAAS/iB,GAAG8E,QAAUW,EAAK7B,QAAQ,UAAY,GAClE6U,EAAajZ,KAAK+uB,YAAYxL,EAAS/iB,GAAI+iB,EAAS/iB,GAAGwC,UAAWiW,EAAYsK,EAAS/iB,GAAGuC,KAC1FkW,EAAajZ,KAAK6jB,YAAYN,EAAS/iB,GAAIyY,GAAY,IAGvDjZ,KAAKivB,WAAW1L,EAAS/iB,GAAIyY,GAQzC,OAJAA,EAAa5O,UAAQ4O,EAAY,mBAE7BA,EAAa5O,UAAQ4O,EAAY,uBAE9BA,GAEX3W,EAAapC,UAAU6uB,YAAc,SAAU1pB,EAAMrC,EAAWiW,EAAYlW,EAAKiC,GAC7EhF,KAAKsK,iBAAgB,EAAM2O,EAAYjW,GAAW,EAAOD,EAAKiC,EAAQK,EACtE,IAAI7C,GAAUyW,EAAWjV,iBAAiB,qBAC1C,OAAOxB,GAAQA,EAAQ7B,OAAS,IAEpC2B,EAAapC,UAAU+uB,WAAa,SAAU5pB,EAAM4T,GAC5CA,EAAW9U,UAAUC,QAAQ,sBAAwB,EACrDpE,KAAKmM,eAAe8M,EAAY5T,GAGhCrF,KAAKmM,eAAe8M,EAAWnV,cAAc,sBAAuBuB,IAG5E/C,EAAapC,UAAUgkB,eAAiB,WAGpC,IAAK,GADD1X,GADSxM,KAAKwC,QACAwB,iBAAiB,kGAC1BxD,EAAI,EAAGA,EAAIgM,EAAK7L,OAAQH,IACzBgM,EAAKhM,GAAG6T,UAAUiE,SAAS,kBACT4K,cAAY1W,EAAKhM,GAAIgP,gBAC3ByU,SAAWjkB,KAAK0C,WAEvB8J,EAAKhM,GAAG6T,UAAUiE,SAAS,oBACR4K,cAAY1W,EAAKhM,GAAIue,kBAC3BkF,SAAWjkB,KAAK0C,WAE7B8J,EAAKhM,GAAG6T,UAAUiE,SAAS,aACf4K,cAAY1W,EAAKhM,GAAI8d,WAC3B2F,SAAWjkB,KAAK0C,WAEtB8J,EAAKhM,GAAG6T,UAAUiE,SAAS,gBACZ4K,cAAY1W,EAAKhM,GAAI4f,cAC3B6D,SAAWjkB,KAAK0C,WAEzB8J,EAAKhM,GAAG6T,UAAUiE,SAAS,iBACX4K,cAAY1W,EAAKhM,GAAI8C,eAC3B2gB,SAAWjkB,KAAK0C,WAE1B8J,EAAKhM,GAAG6T,UAAUiE,SAAS,aACX4K,cAAY1W,EAAKhM,GAAImgB,eACtBH,UACZxgB,KAAK0C,WACL8J,EAAKhM,GAAG0D,cAAc0F,MAAMC,QAAU,OAGtC2C,EAAKhM,GAAG0D,cAAc0F,MAAMC,QAAU,WAKtD,IAAIqlB,GAAmBlvB,KAAKwC,QAAQwB,iBAAiB,kBACjDmrB,EAAoBnvB,KAAKwC,QAAQwB,iBAAiB,mBAClDorB,EAAkBpvB,KAAKwC,QAAQwB,iBAAiB,kBAC/ChE,KAAK0C,YAAc1C,KAAKuM,SAAS8H,UAAUiE,SAAS,eACrDtY,KAAKuM,SAAS8H,UAAUkE,OAAO,aAGnC,KAAK,GADD8W,IAASH,EAAkBC,EAAmBC,GACzC5uB,EAAI,EAAGA,EAAI6uB,EAAM1uB,OAAQH,IAC9B6uB,EAAM7uB,GAAG8uB,QAAQ,SAAU9iB,GACnBA,EAAK6H,UAAUiE,SAAS,cACxB9L,EAAK6H,UAAUkE,OAAO,cAGtB/L,EAAK6H,UAAUC,IAAI,eAI/BtU,MAAKuvB,kBAETjtB,EAAapC,UAAUqvB,eAAiB,WACpC,GAAI9sB,GAAQzC,KAER+C,GAAM,CADE/C,MAAKwC,QAAQwB,iBAAiB,yDAEpCsrB,QAAQ,SAAU9iB,IAChBA,EAAK6H,UAAUiE,SAAS,gBAAmB9L,EAAK6H,UAAUiE,SAAS,oBAC/D9L,EAAK6H,UAAUiE,SAAS,cAIvB9L,EAAK6H,UAAUiE,SAAS,gBAAkB9L,EAAK6H,UAAUiE,SAAS,kBACvE9L,EAAK6H,UAAUkE,OAAO,kBAEjB/L,EAAK6H,UAAUiE,SAAS,gBAAkB9L,EAAK6H,UAAUiE,SAAS,cACvE9L,EAAK6H,UAAUkE,OAAO,cAEjB/L,EAAK6H,UAAUiE,SAAS,oBAC7B9L,EAAK6H,UAAUC,IAAI,kBACnBvR,GAAM,GAEDyJ,EAAKmC,uBAAuB6R,SAAWhU,EAAK6H,UAAUiE,SAAS,eACpE9L,EAAK6H,UAAUkE,OAAO,cAClBxV,EACyB,QAArByJ,EAAK1C,YACL0C,EAAK6H,UAAUC,IAAI,kBAGnB9H,EAAK6H,UAAUC,IAAI,kBAIE,QAArB9H,EAAK1C,aAAyBrH,EAAMC,YACpC8J,EAAK6H,UAAUkE,OAAO,SACtB/L,EAAK6H,UAAUC,IAAI,oBAGf7R,EAAMwC,oBACNuH,EAAK6H,UAAUC,IAAI,SAEvB9H,EAAK6H,UAAUkE,OAAO,mBAED,OAArB/L,EAAK1C,aAAwBrH,EAAMC,WACnC8J,EAAK6H,UAAUC,IAAI,qBAGnB9H,EAAK6H,UAAUkE,OAAO,uBAIzB/L,EAAK6H,UAAUiE,SAAS,kBAI7B9L,EAAK6H,UAAUC,IAAI,eA9CnB9H,EAAK6H,UAAUC,IAAI,cACnBvR,GAAM,MAiDlBT,EAAapC,UAAUsvB,eAAiB,SAAU3sB,GAE9C,IAAK,GADD4sB,IAAY,OAAQ,OAAQ,MAAO,OAAQ,QAAS,OAAQ,OAAQ,SAAU,SAAU,MAAO,UAAW,SAAU,WAC/GjvB,EAAI,EAAGyD,EAAMwrB,EAAS9uB,OAAQH,EAAIyD,EAAKzD,IAC5C,GAAIqC,EAAMyI,cAAclH,QAAQqrB,EAASjvB,KAAO,EAC5C,OAAO,CAGf,QAAO,GAEX8B,EAAapC,UAAUwvB,aAAe,SAAUpqB,EAAOqqB,EAAcC,GACjE,GAAI5qB,IAAS,CACR4qB,IAAyB,KAAbA,EAKbA,GAAY,KAJZA,EAAW,GACX5qB,GAAS,EAKb,IAAIhC,GAAYsC,EAAMtC,SAClBsC,GAAMvC,MAEF6sB,GADA5qB,EACY,QAGA,SAGpB,KAAK,GAAIkD,GAAI,EAAGsJ,EAAOlM,EAAMA,MAAM3E,OAAQuH,EAAIsJ,EAAMtJ,IAAK,CACtD,GAAI5C,EAAMA,MAAM4C,GAAG5C,MACfsqB,EAAW5vB,KAAK0vB,aAAapqB,EAAMA,MAAM4C,GAAIynB,EAAcC,OAE1D,CACD,GAAIvqB,GAAOC,EAAMA,MAAM4C,GACnB2nB,EAAW,EACf,IAAIxqB,EAAKxC,gBAAiBjD,OACtB,GAAIyF,EAAKiJ,SAASuK,WAAWzU,QAAQ,YAAc,EAC7B,SAAdiB,EAAKe,MAAoBpG,KAAKwvB,eAAenqB,EAAKxC,MAAM,IAIxDgtB,GAAYxqB,EAAKxC,MAAM,GAAK,QAAUwC,EAAKxC,MAAM,GAHjDgtB,GAAY,IAAMxqB,EAAKxC,MAAM,GAAK,UAAYwC,EAAKxC,MAAM,GAAK,QAOlE,IAA6B,gBAAlBwC,GAAKxC,MAAM,IAAkC,OAAfwC,EAAKxC,MAAgB,CAC1DgtB,GAAY,KAAOxqB,EAAKxC,MAAM,GAAK,GACnC,KAAK,GAAI8X,GAAI,EAAGwE,EAAO9Z,EAAKxC,MAAMlC,OAAQga,EAAIwE,EAAMxE,IAChDkV,GAAY,KAAOxqB,EAAKxC,MAAM8X,GAAK,GAEvCkV,IAAY,QAGZA,IAAY,IAAMxqB,EAAKxC,MAAQ,QAKnCwC,GAAKiJ,SAASuK,WAAWzU,QAAQ,eAAiB,EAClDyrB,GAAYxqB,EAAKxC,MAAQ,KAAOwC,EAAKxC,MAAQ,MAAQ,IAAMwC,EAAKxC,MAAQ,IAEnEwC,EAAKiJ,SAASuK,WAAWzU,QAAQ,aAAe,EACrDyrB,GAAYxqB,EAAKxC,MAAQ,MAAQwC,EAAKxC,MAAQ,KAAO,IAAMwC,EAAKxC,MAAQ,IAEnEwC,EAAKiJ,SAASuK,WAAWzU,QAAQ,aAAe,EACrDyrB,GAAYxqB,EAAKxC,MAAQ,MAAQwC,EAAKxC,MAAQ,MAAQ,IAAMwC,EAAKxC,MAAQ,IAGvD,WAAdwC,EAAKe,MAA2C,iBAAff,GAAKxC,OAAsC,OAAfwC,EAAKxC,MAClEgtB,GAAYxqB,EAAKxC,MAGjBgtB,GAAY,IAAMxqB,EAAKxC,MAAQ,GAIvCwC,GAAKiJ,SAASuK,WAAWzU,QAAQ,SAAW,GAAMiB,EAAKiJ,SAASuK,WAAWzU,QAAQ,UAAY,GAC3FurB,EACAtqB,EAAKM,MAAQ,IAAMN,EAAKM,MAAQ,IAG5BN,EAAKM,MAAMvB,QAAQ,MAAQ,IAC3BiB,EAAKM,MAAQ,IAAMN,EAAKM,MAAQ,KAGxCiqB,GAAYvqB,EAAKM,MAAQ,IAAM3F,KAAKoH,UAAU/B,EAAKiJ,YAG/CqhB,EACAtqB,EAAKM,MAAQ,IAAMN,EAAKM,MAAQ,IAG5BN,EAAKM,MAAMvB,QAAQ,MAAQ,IAC3BiB,EAAKM,MAAQ,IAAMN,EAAKM,MAAQ,KAGxCiqB,GAAYvqB,EAAKM,MAAQ,IAAM3F,KAAKoH,UAAU/B,EAAKiJ,UAAY,IAAMuhB,GAGzE3nB,IAAMsJ,EAAO,IACboe,GAAY,IAAM5sB,EAAU8sB,cAAgB,KASpD,MANK9qB,KACD4qB,GAAY,KAEZtqB,EAAMvC,MACN6sB,GAAY,KAETA,GAQXttB,EAAapC,UAAU6vB,gBAAkB,SAAUC,GAC/CA,EAAYA,EAAUllB,QAAQ,KAAM,GACpC,IAAImlB,GAAYjwB,KAAKkwB,gBAAgBF,EACrChwB,MAAKqsB,UAAWrpB,UAAWitB,EAAUjtB,UAAWD,IAAKktB,EAAUltB,IAAKuC,MAAO2qB,EAAU3qB,SAQzFhD,EAAapC,UAAUgwB,gBAAkB,SAAUF,GAC/ChwB,KAAKkoB,UACLloB,KAAKmwB,UAAUH,GACfhwB,KAAKqF,MAASrC,UAAW,MAAOD,KAAK,EAAOuC,SAC5C,IAAID,GAAOrF,KAAKowB,cAAcpwB,KAAKkoB,OAAQloB,KAAKqF,MAAO,GACvD,OAAIrF,MAAKiF,oBACIjC,UAAWqC,EAAKrC,UAAWD,IAAKsC,EAAKtC,IAAKuC,MAAOD,EAAKC,QAGtDtC,UAAWqC,EAAKrC,UAAWsC,MAAOD,EAAKC,QAUxDhD,EAAapC,UAAU6J,gBAAkB,SAAU1E,EAAMgrB,GAKrD,MAJKhrB,KACDA,EAAOrF,KAAK0L,iBAEhBrG,EAAOrF,KAAKylB,kBAAkBpgB,GAAM,GAC7BrF,KAAK0vB,aAAa1vB,KAAK0L,cAAcrG,GAAOgrB,GAAavlB,QAAQ,KAAM,MAElFxI,EAAapC,UAAUiwB,UAAY,SAAUH,GACzC,GACIM,GADAC,EAAK,CAET,IACID,EAAMN,EAAU9d,MAAMqe,GACtBA,GAAMvwB,KAAKwwB,gBAAgBF,SACd,KAARA,EACT,OAAOtwB,MAAKkoB,QAEhB5lB,EAAapC,UAAUswB,gBAAkB,SAAUR,GAO/C,IAAK,GAHDS,GAEAC,EALAtpB,GAAa,IAAK,KAAM,KAAM,KAAM,IAAK,KACzCupB,GAAc,MAAO,KAAM,OAC3BC,GAAS,KAAM,SAAU,OAAQ,WAAY,UAAW,cAAe,UAAW,cAAe,WAAY,gBAIxGpwB,EAAI,EAAGwR,EAAO5K,EAAUzG,OAAQH,EAAIwR,EAAMxR,IAG/C,GAFAiwB,EAAW,QAAQI,KAAKzpB,EAAU5G,IAAM,MAAQ,GACxC,GAAIswB,QAAO,KAAO1pB,EAAU5G,GAAK,IAAMiwB,EAAU,MAC/CM,KAAKf,GAEX,MADAhwB,MAAKkoB,OAAO/gB,MAAM,YAAaC,EAAU5G,GAAG8K,gBACrClE,EAAU5G,GAAGG,MAG5B,IAAIqwB,GAAchxB,KAAKkoB,OAAOloB,KAAKkoB,OAAOvnB,OAAS,EACnD,KAAKqwB,GAAgBA,GAAkC,YAAnBA,EAAY,GAC5C,IAAK,GAAIxwB,GAAI,EAAGwR,EAAO2e,EAAWhwB,OAAQH,EAAIwR,EAAMxR,IAGhD,GAFAiwB,EAAW,QAAQI,KAAKF,EAAWnwB,IAAM,MAAQ,GACzC,GAAIswB,QAAO,KAAOH,EAAWnwB,GAAK,IAAMiwB,EAAU,MAChDM,KAAKf,GAEX,MADAhwB,MAAKkoB,OAAO/gB,MAAM,aAAcwpB,EAAWnwB,GAAG8K,gBACvCqlB,EAAWnwB,GAAGG,MAIjC,KAAK,GAAIH,GAAI,EAAGwR,EAAO4e,EAAMjwB,OAAQH,EAAIwR,EAAMxR,IAG3C,GAFAiwB,EAAW,QAAQI,KAAKD,EAAMpwB,IAAM,MAAQ,GACpC,GAAIswB,QAAO,KAAOF,EAAMpwB,GAAK,IAAMiwB,EAAU,MAC3CM,KAAKf,GAEX,MADAhwB,MAAKkoB,OAAO/gB,MAAM,eAAgBypB,EAAMpwB,GAAG8K,gBACpCslB,EAAMpwB,GAAGG,MAIxB,OAAI,MAAMowB,KAAKf,IACXhwB,KAAKkoB,OAAO/gB,MAAM,OAAQ,MACnB,GAGP,MAAM4pB,KAAKf,IACXhwB,KAAKkoB,OAAO/gB,MAAM,QAAS,MACpB,GAGP,gBAAgB4pB,KAAKf,IACrBU,EAAa,gBAAgBK,KAAKf,GAAW,GAC7ChwB,KAAKkoB,OAAO/gB,MAAM,SAAUupB,IACrBA,EAAW/vB,QAGlB,QAAQowB,KAAKf,IACbU,EAAa,QAAQK,KAAKf,GAAW,GACrChwB,KAAKkoB,OAAO/gB,MAAM,SAAU,OACrBupB,EAAW/vB,QAGlB,8EAA8EowB,KAAKf,IAEnFU,EAAa,8EAA8EK,KAAKf,GAAW,GAC3GhwB,KAAKkoB,OAAO/gB,MAAM,UAAWupB,IACtBA,EAAW/vB,QAGlBX,KAAKixB,gBAAkB,+EAA+EF,KAAKf,IAE3GU,EAAa,+EAA+EK,KAAKf,GAAW,GAC5GhwB,KAAKkoB,OAAO/gB,MAAM,UAAWupB,IACtBA,EAAW/vB,OAAS,GAG3B,iCAAiCowB,KAAKf,IACtCU,EAAa,iCAAiCK,KAAKf,GAAW,GAC9DhwB,KAAKkoB,OAAO/gB,MAAM,SAAUupB,IACrBA,EAAW/vB,QAGlB,8BAA8BowB,KAAKf,IACnCU,EAAa,8BAA8BK,KAAKf,GAAW,GAC3DhwB,KAAKkoB,OAAO/gB,MAAM,eAAgBupB,IAC3BA,EAAW/vB,QAGlB,qBAAqBowB,KAAKf,IAC1BU,EAAa,qBAAqBK,KAAKf,GAAW,GAClDhwB,KAAKkoB,OAAO/gB,MAAM,SAAUupB,IACrBA,EAAW/vB,QAGlB,uBAAuBowB,KAAKf,IAC5BU,EAAa,uBAAuBK,KAAKf,GAAW,GACpDhwB,KAAKkoB,OAAO/gB,MAAM,SAAUupB,IACrBA,EAAW/vB,QAEf,GAEX2B,EAAapC,UAAU+wB,aAAe,WAClC,GAAIC,GAAalxB,KAAKkoB,OAAOloB,KAAKkoB,OAAOvnB,OAAS,EAClD,KAAKuwB,EACD,OAAO,CAGP,IAAIC,GAAYnxB,KAAKkoB,OAAOloB,KAAKkoB,OAAOvnB,OAAS,EACjD,SAAsB,SAAlBuwB,EAAW,KAAkBC,GAA8B,eAAjBA,EAAU,KAMhE7uB,EAAapC,UAAUkxB,YAAc,SAAUvuB,EAAOyL,GAClD,GAAIlH,IACAiqB,IAAK,QAASC,KAAM,WAAYC,IAAK,WAAYC,IAAK,cAAeC,KAAM,kBAC3EC,KAAM,qBAAsB9I,GAAM,KAAM+I,SAAU,QAAS1I,QAAW,UAAW2I,cAAe,aAChGC,WAAY,UAAWC,UAAW,SAAUC,cAAe,YAAaC,eAAgB,aAE5F,IAAInvB,EAAO,CACP,GAA2B,IAAvBA,EAAMuB,QAAQ,MAA0C,MAA5BvB,EAAMA,EAAMlC,OAAS,GACjD,MAAqB,aAAb2N,EAA2B,cAAgB,UAElD,IAA2B,IAAvBzL,EAAMuB,QAAQ,MAAcvB,EAAMuB,QAAQ,OAASvB,EAAMlC,OAAS,EACvE,MAAqB,aAAb2N,EAA2B,gBAAkB,YAEpD,IAA2B,IAAvBzL,EAAMuB,QAAQ,MAAcvB,EAAMuB,QAAQ,OAASvB,EAAMlC,OAAS,EACvE,MAAqB,aAAb2N,EAA2B,cAAgB,eAGtD,CACD,GAAiB,aAAbA,EACA,MAAO,UAEN,IAAiB,SAAbA,EACL,MAAO,QAGf,MAAOlH,GAAUkH,IAErBhM,EAAapC,UAAU+xB,kBAAoB,SAAU3sB,GAEjD,IAAK,GADDyY,GAAa/d,KAAKwG,QACbhG,EAAI,EAAGA,EAAIud,EAAWpd,OAAQH,IACnC,GAAIud,EAAWvd,GAAGmF,QAAUL,EAAMK,MAAO,CACrCL,EAAMc,KAAO2X,EAAWvd,GAAG4F,IAC3B,OAGR,MAAOd,GAAMc,MAEjB9D,EAAapC,UAAUkwB,cAAgB,SAAUlI,EAAQ5iB,EAAOH,GAa5D,IAAK,GAZD+C,GACAsJ,EACAnM,EACA6sB,EAGAvX,EACAwE,EACAgT,EACAC,EACAC,EACA/jB,EAPAgkB,KACAC,KAOK/xB,EAAI,EAAGwR,EAAOkW,EAAOvnB,OAAQH,EAAIwR,EAAMxR,IAC5C,GAAqB,YAAjB0nB,EAAO1nB,GAAG,GAAkB,CAE5B,GADA6E,GAASkC,MAAO2gB,EAAO1nB,GAAG,GAAImF,MAAOuiB,EAAO1nB,GAAG,IACtB,iBAArB0nB,EAAO1nB,EAAI,GAAG,GAAuB,CACrC,GAAI0nB,EAAO1nB,EAAI,GAAG,GAAG4D,QAAQ,SAAW,GAAK8jB,EAAO1nB,EAAI,GAAG,GAAG4D,QAAQ,UAAY,EAC9EiB,EAAKiJ,SAAWtO,KAAKoxB,YAAY,IAAKlJ,EAAO1nB,EAAI,GAAG,IACpD6E,EAAKxC,MAAQ,KACbwC,EAAKe,KAAOpG,KAAKiyB,kBAAkB5sB,OAElC,CACD,GAAIwd,GAAOqF,EAAO1nB,EAAI,GAAG,GAAK0nB,EAAO1nB,EAAI,GAAG,GAAGsK,QAAQ,KAAM,IAAMod,EAAO1nB,EAAI,GAAG,EACjF6E,GAAKiJ,SAAWtO,KAAKoxB,YAAYvO,EAAMqF,EAAO1nB,EAAI,GAAG,IAMzD,IAJA8N,EAAW4Z,EAAO1nB,EAAI,GAAG,GAEzB0H,IADA1H,EACQ,EACRgR,EAAOQ,EACF9J,EAAI1H,EAAI,EAAG0H,EAAIsJ,EAAMtJ,IAAK,CAC3B,GAAqB,UAAjBggB,EAAOhgB,GAAG,GAAgB,CAC1B1H,EAAI0H,CACJ,OAGA,GAAIoG,EAASlK,QAAQ,SAAW,GAAKkK,EAASlK,QAAQ,UAAY,EAC9D,KAEJ,IAAIkK,EAASlK,QAAQ,SAAW,GAAsB,WAAjB8jB,EAAOhgB,GAAG,GAAiB,CAC5D,GAAIsqB,GAAMtK,EAAOhgB,GAAG,GAAKggB,EAAOhgB,GAAG,GAAG4C,QAAQ,KAAM,IAAIA,QAAQ,KAAM,IAAMod,EAAOhgB,GAAG,EACtF7C,GAAKxC,MAAQ2vB,EACbntB,EAAKe,KAAO,aAEX,IAAIkI,EAASlK,QAAQ,YAAc,EAAG,CACvC,GAAqB,YAAjB8jB,EAAOhgB,GAAG,IAAqC,SAAjBggB,EAAOhgB,GAAG,GACxC,KAEiB,YAAjBggB,EAAOhgB,GAAG,GACVoqB,EAAOnrB,KAAKpF,OAAOmmB,EAAOhgB,GAAG,KAEP,WAAjBggB,EAAOhgB,GAAG,IACfqqB,EAAOprB,KAAK+gB,EAAOhgB,GAAG,GAAG4C,QAAQ,KAAM,SAItB,WAAjBod,EAAOhgB,GAAG,GACVoqB,EAAOnrB,KAAKpF,OAAOmmB,EAAOhgB,GAAG,KAEP,WAAjBggB,EAAOhgB,GAAG,IACfqqB,EAAOprB,KAAK+gB,EAAOhgB,GAAG,GAAG4C,QAAQ,KAAM,IAG/CzF,GAAKe,KAAOpG,KAAKiyB,kBAAkB5sB,GAGvCiJ,EAASlK,QAAQ,QAAU,IACF,WAArB8jB,EAAOhgB,EAAI,GAAG,IACd7C,EAAKxC,MAAQyvB,EACbjtB,EAAKe,KAAO,UAEc,WAArB8hB,EAAOhgB,EAAI,GAAG,IACnB7C,EAAKxC,MAAQ0vB,EACbltB,EAAKe,KAAO,UAEPkI,EAASlK,QAAQ,YAAc,GAA0B,eAArB8jB,EAAOhgB,EAAI,GAAG,KACvD7C,EAAKxC,MAAQyvB,EACbjtB,EAAKe,KAAO,UAEhBksB,KACAC,KACAltB,EAAKe,KAAOpG,KAAKiyB,kBAAkB5sB,QAGb,cAArB6iB,EAAO1nB,EAAI,GAAG,KACnB6E,EAAKiJ,SAAWtO,KAAKoxB,YAAYlJ,EAAO1nB,EAAI,GAAG,GAAI0nB,EAAO1nB,EAAI,GAAG,IACxC,WAArB0nB,EAAO1nB,EAAI,GAAG,IACd6E,EAAKe,KAAO,SACZf,EAAKxC,MAAQd,OAAOmmB,EAAO1nB,EAAI,GAAG,MAGlC6E,EAAKe,KAAO,SACZf,EAAKxC,MAAQqlB,EAAO1nB,EAAI,GAAG,GAAK0nB,EAAO1nB,EAAI,GAAG,GAAGsK,QAAQ,KAAM,IAAMod,EAAO1nB,EAAI,GAAG,IAEvF6E,EAAKe,KAAOpG,KAAKiyB,kBAAkB5sB,GAEvCC,GAAMA,MAAM6B,KAAK9B,OAEhB,CAAA,GAAqB,SAAjB6iB,EAAO1nB,GAAG,GAAe,CAC9B,GAAuB,SAAjB0nB,EAAO,GAAG,IAAuC,QAArBA,EAAO1nB,EAAI,GAAG,GAC5C,QAWJ,KATAR,KAAKkoB,OAASA,EAAOkD,OAAO5qB,EAAI,EAAGwR,GAAQxR,EAAI,IAE3C0xB,EADAlyB,KAAKiF,oBACQjC,UAAW,MAAOsC,SAAWvC,KAAK,IAGlCC,UAAW,MAAOsC,UAEnC+sB,EAAW,EACXlT,EAAO7Z,EAAMA,MAAM3E,OACdga,EAAI,EAAGA,EAAIwE,EAAMxE,IACdrV,EAAMA,MAAMqV,GAAGrV,OACf+sB,GAMR,OAHAltB,GAAUgC,KAAKkrB,GACf/sB,EAAMA,MAAM6B,KAAK+qB,GACjBA,EAAWlyB,KAAKowB,cAAcpwB,KAAKkoB,OAAQgK,EAAU/sB,GAC9CG,EAEN,GAAqB,eAAjB4iB,EAAO1nB,GAAG,GACM,QAAjB0nB,EAAO1nB,GAAG,GACV8E,EAAMvC,KAAM,EAGZuC,EAAMtC,UAAYklB,EAAO1nB,GAAG,OAG/B,IAAqB,UAAjB0nB,EAAO1nB,GAAG,GAAgB,CAK/B,IAJAR,KAAKkoB,OAASA,EAAOkD,OAAO5qB,EAAI,EAAGwR,GAAQxR,EAAI,IAC/C2E,EAAUstB,MACVntB,EAAQtF,KAAKqF,KACb+sB,EAAOjtB,EAAUxE,OACZwxB,EAAI,EAAGA,EAAIC,EAAMD,IAClB7sB,EAAQtF,KAAKqjB,eAAele,EAAUgtB,GAAI7sB,EAAa,IAAN6sB,EAErD,OAAOnyB,MAAKowB,cAAcpwB,KAAKkoB,OAAQ5iB,EAAOH,IAGtD,MAAOG,IAEXxE,GACI4xB,WACDpwB,EAAapC,UAAW,cAAW,IACtCY,GACI4xB,WACDpwB,EAAapC,UAAW,kBAAe,IAC1CY,GACI4xB,WACDpwB,EAAapC,UAAW,mBAAgB,IAC3CY,GACI4xB,WACDpwB,EAAapC,UAAW,aAAU,IACrCY,GACI4xB,WACDpwB,EAAapC,UAAW,gBAAa,IACxCY,GACI4xB,WACDpwB,EAAapC,UAAW,iBAAc,IACzCY,GACIa,YAAWmR,YAAY,EAAM/G,aAAa,EAAM6H,aAAa,KAC9DtR,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,sBAAmB,IAC9CY,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,WAAS,KACVW,EAAapC,UAAW,gBAAa,IACxCY,GACI6xB,WAAU3vB,UAAW,MAAOsC,UAAapD,IAC1CI,EAAapC,UAAW,WAAQ,IACnCoC,EAAexB,GACX8xB,yBACDtwB,IAELuwB"}
|
|
1
|
+
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.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 */\nimport { Component, NotifyPropertyChanges, getComponent, Browser } 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, 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 } 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 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(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' };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = 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].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.rule = { condition: 'and', not: false, rules: [] };\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.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\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]);\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 || this.isLocale) {\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.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\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]);\n if (!columns[i].operators || this.isLocale) {\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) {\n if (column.operators) {\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 (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' && target.className.indexOf('e-qb-toggle') < 0) {\n if (target.className.indexOf('e-removerule') > -1) {\n this.actionButton = target;\n this.deleteRule(target);\n }\n else if (target.className.indexOf('e-deletegroup') > -1) {\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n }\n else if (target.className.indexOf('e-edit-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\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 }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n 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 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.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 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 this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (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 ruleListElem.appendChild(ruleElem);\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate) {\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 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 // 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 }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n }\n elem = template;\n elem.className += ' e-rule-field';\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n }\n ruleElem.appendChild(elem);\n if (column && column.ruleTemplate) {\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) {\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) {\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('button');\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 element = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('button').appendChild(element);\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 if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.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);\n }\n if (!column || (column && !column.ruleTemplate)) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this)\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 = this.isImportRules ?\n this.GetRootColumnName(rule.field) : dropDownList.value;\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 dropdowntree = void 0;\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n ddlField = {\n fields: { dataSource: this.columns,\n value: \"field\", text: \"label\", child: 'columns', expanded: \"expanded\" },\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: this.isImportRules ? [ddlValue] : null,\n open: this.popupOpen.bind(this)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n dropdowntree.element.value = dropdowntree.value[0];\n }\n var ddlVal = this.isImportRules ?\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 (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\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 index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n if (Object.keys(rule).length) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n }\n else {\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (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 rule = { field: column.field, label: column.label, operator: operVal[0].value, 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'),\n position: 'BottomCenter', cssClass: 'e-querybuilder-error' });\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 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 var validateRule = void 0;\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-field input.e-control'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\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 index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator input.e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.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) < 0 && (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value input.e-control');\n isValid = false;\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) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if (dropDownObj.element && isNullOrUndefined(dropDownObj.index)) {\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 () {\n var glueElem;\n var inputElem;\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 glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n inputElem.setAttribute('checked', 'true');\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 groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\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 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.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(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) {\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 if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\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);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule);\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 = this.showButtons.groupDelete ? 'e-deletegroup' : 'e-deletegroup e-button-hide';\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 if (!this.headerTemplate) {\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\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 ruleList.appendChild(groupElem);\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick) {\n this.addRuleElement(groupElem, {});\n }\n }\n }\n else {\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 var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\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 this.updatedRule = null;\n if (this.headerTemplate) {\n var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_2);\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 if (!this.isImportRules) {\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.headerTemplateFn = function (groupElem, not, condition, rule) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined, condition: condition, rule: this.getRuleCollection(rule, true) };\n this.trigger('actionBegin', args);\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 // 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 }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n }\n groupHdr.appendChild(template);\n this.renderReactTemplates();\n }\n return groupElem;\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 rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\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 rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\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 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 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 (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 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 this.trigger('actionBegin', args);\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 (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 }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\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 if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n }\n var value;\n var rbValue;\n var dropDownObj;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n dropDownObj =\n getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\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 }\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.changeField = function (args) {\n if (args.isInteracted) {\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-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 ddtElem.value = args.oldValue[0];\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 ddtElem.value = args.value[0];\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 {\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 index++;\n }\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 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) {\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 (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 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 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 subFieldData = Object.keys(this.selectedColumn.columns[0]);\n var dropDownList = new DropDownList({\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((subFieldData.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this)\n });\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules) {\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) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!this.isImportRules) {\n this.selectedColumn = this.selectedColumn.columns[0];\n }\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 removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\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 this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\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 value = operatorList[0].value;\n value = rule ? (rule.operator !== '' ? rule.operator : value) : value;\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: 0,\n value: value,\n open: this.popupOpen.bind(this)\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 this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\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 for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var 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 var data = {};\n if (!(value in original)) {\n original[value] = 1;\n data[field] = value;\n result.push(data);\n }\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 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)\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'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\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 }\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 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 var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\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 {\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 if (this.fieldMode === \"DropdownTree\") {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\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.isPublic || isTemplate) {\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 ? rule.value : 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 ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\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.isPublic || isTemplate) ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = this.isImportRules ? rule.value : 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 ? rule.value : 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 }\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 // 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 isCheck = true;\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);\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 (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 : this.getColumn(filtObj.value);\n this.selectedRule = column;\n if (isRender) {\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\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 ddlObj.dataBind();\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\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 }\n if (isRender) {\n this.validatValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n itemData.template = column.template;\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 }\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(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 } // 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 }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n }\n target.nextElementSibling.appendChild(valElem);\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 switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var 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 // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var 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 index++;\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 var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field && 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 for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\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) {\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) {\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 {\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.validatValue(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.validatValue = 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 }\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 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 classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\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 = { condition: groups[i].condition, 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 if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n }\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 if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass);\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 || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\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.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.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 if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\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.rule = this.checkNotGroup(this.rule);\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 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 // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\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 (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 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 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.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 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 this.rule = newProp.rule;\n newProp.rule = this.getRuleCollection(this.rule, false);\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 }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\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 };\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: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\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 ],\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 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 };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\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 };\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 };\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 }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\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 index++;\n }\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 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 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 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.isImportRules) {\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) {\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 clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\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 index++;\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 detach(clnruleElem);\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);\n }\n if (!this.isImportRules) {\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.rule = rule;\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\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) {\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 (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\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 * 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 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 = this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\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) || (this.rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined))) {\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value\n };\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\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 {\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 }\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 // 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 var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\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 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 var ignoreOper = ['notcontains', 'notstartswith', 'notendswith'];\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\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 (ruleColl[i].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('contains') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) : this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '' && ignoreOper.indexOf(oper) < 0) {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (ignoreOper.indexOf(oper) > -1) {\n continue;\n }\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contains') < 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, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, ruleColl[i].operator, ruleValue, ignoreCase);\n }\n }\n }\n }\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 }\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, 'notnull', 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] !== '') {\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 // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\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.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 orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\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 }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\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) {\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n }\n }\n parentElem = closest(parentElem, '.e-rule-list');\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 return element[element.length - 1];\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-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-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) {\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 if (isRoot) {\n queryStr += 'NOT (';\n }\n else {\n queryStr += ' NOT (';\n }\n }\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);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\" AND \"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ' AND ' + 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' || rule.value === null) {\n valueStr += rule.value;\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -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 + ' ' + this.operators[rule.operator];\n }\n else {\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 + ' ' + this.operators[rule.operator] + ' ' + valueStr;\n }\n }\n if (j !== jLen - 1) {\n queryStr += ' ' + condition.toUpperCase() + ' ';\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 * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString);\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 * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString) {\n this.parser = [];\n this.sqlParser(sqlString);\n this.rule = { condition: 'and', not: false, rules: [] };\n var rule = this.processParser(this.parser, this.rule, [0]);\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 * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n return this.getSqlString(this.getValidRules(rule), allowEscape).replace(/\"/g, '\\'');\n };\n QueryBuilder.prototype.sqlParser = function (sqlString) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions = ['AND', 'OR', 'NOT'];\n var subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\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 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 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 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 // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\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 //String\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Double String\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\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 if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator) {\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 (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 return columnData.type;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl) {\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 for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n rule = { 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]);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\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]);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\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] ? parser[j][1].replace(/'/g, '').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 strVal.push(parser[j][1].replace(/'/g, ''));\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 strVal.push(parser[j][1].replace(/'/g, ''));\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 rule.value = numVal;\n rule.type = 'number';\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1]);\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 rule.value = parser[i + 2][1] ? parser[i + 2][1].replace(/'/g, '') : parser[i + 2][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') {\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);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not') {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\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);\n }\n }\n return rules;\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 Property({ ruleDelete: true, groupInsert: true, groupDelete: true })\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('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", 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"],"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","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","parentElement","className","indexOf","getComponent","destroy","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","rule","rules","disableRuleCondition","getWrapper","getModuleName","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","push","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","args","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","deleteGroup","closest","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","template","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","cloneNode","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","dataSource","placeholder","popupHeight","change","changeField","bind","open","popupOpen","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dropdowntree","child","expanded","showClearButton","changeOnBlur","DropDownTree","isNullOrUndefined","index","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","position","cssClass","validateFields","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","clsName","filterElem","ruleDelete","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","addGroups","notElem","classList","add","args_2","notCondition","undefined","DropDownButton","items","beforeOpen","grpId","chgrpId","childGroupID","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","grpElem","prevOper","arrOper","grpEle","destroyControls","changeValue","contains","dateElement","rbValue","parseInt","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","eventsArgs","changeValueSuccessCallBack","isInteracted","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","nextElementSibling","remove","subFilterCounter","insertBefore","ruleId","subFieldData","subField","toString","currOper","previousItemData","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlOperator","operatorModel","item","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","close","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","e","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","getItemData","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","NumericTextBox","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","prevItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","validatValue","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","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","addRules","groups","importRules","initWrapper","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","title","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","EndsWith","Contains","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","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","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","trim","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","splice","deleteRuleSuccessCallBack","clnruleElem","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","custom","notValue","setRules","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","ignoreOper","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","getInstance","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","forEach","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","valueStr","toUpperCase","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","str","st","parseSqlStrings","regexStr","matchValue","conditions","subOp","test","RegExp","exec","lastPasrser","checkLiteral","lastParser","secParser","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","getTypeFromColumn","subRules","l","lLen","grpCount","numVal","strVal","isLeftOpened","val","pop","Event","Complex","NotifyPropertyChanges","Component"],"mappings":"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"}
|