403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/component/dialog/dist/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/component/dialog/dist/dialog.bundle.js.map
{"version":3,"file":"dialog.bundle.js","sources":["../src/components/message-list/message-list-const.js","../src/components/message-list/placeholders/placeholder-1.js","../src/components/message-list/placeholders/placeholder-2.js","../src/components/message-list/placeholders/placeholder-3.js","../src/components/message-list/message-list.js","../src/components/error-state.js","../src/components/loading-state.js","../src/components/empty-state.js","../src/components/quote-panel.js","../src/component.js"],"sourcesContent":["export const ObserverType = Object.freeze({\n\tread: 'read',\n\tnone: 'none',\n});\nexport const RequestMode = Object.freeze({\n\thistory: 'history',\n\tunread: 'unread'\n});\nexport const DateFormat = Object.freeze({\n\tgroupTitle: 'groupTitle',\n\treadedTitle: 'readedTitle'\n});","import { DialogReferenceClassName } from \"im.const\";\n\nexport const Placeholder1 = {\n\tprops: ['element'],\n\tcreated()\n\t{\n\t\tconst modes = ['self', 'opponent'];\n\t\tconst randomIndex = Math.floor(Math.random() * modes.length);\n\t\tthis.mode = modes[randomIndex];\n\t},\n\tcomputed:\n\t{\n\t\titemClasses()\n\t\t{\n\t\t\tconst itemClasses = ['im-skeleton-item', 'im-skeleton-item--sm', `${DialogReferenceClassName.listItem}-${this.element.id}`];\n\t\t\tif (this.mode === 'self')\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item-self');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item-opponent');\n\t\t\t}\n\n\t\t\treturn itemClasses;\n\t\t}\n\t},\n\ttemplate: `\n\t\t<div :class=\"itemClasses\" :key=\"element.templateId\">\n\t\t\t<div v-if=\"mode === 'opponent'\" class=\"im-skeleton-logo\"></div>\n\t\t\t<div class=\"im-skeleton-content\">\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 70%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 100%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t<div style=\"max-width: 26px; margin-left: auto;\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-like\"></div>\n\t\t\t</div>\n\t\t</div>\n\t`\n};","import { DialogReferenceClassName } from \"im.const\";\n\nexport const Placeholder2 = {\n\tprops: ['element'],\n\tcreated()\n\t{\n\t\tconst modes = ['self', 'opponent'];\n\t\tconst randomIndex = Math.floor(Math.random() * modes.length);\n\t\tthis.mode = modes[randomIndex];\n\t},\n\tcomputed:\n\t{\n\t\titemClasses()\n\t\t{\n\t\t\tconst itemClasses = ['im-skeleton-item', 'im-skeleton-item--md', `${DialogReferenceClassName.listItem}-${this.element.id}`];\n\t\t\tif (this.mode === 'self')\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item-self');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item-opponent');\n\t\t\t}\n\n\t\t\treturn itemClasses;\n\t\t}\n\t},\n\ttemplate: `\n\t\t<div :class=\"itemClasses\" :key=\"element.templateId\">\n\t\t\t<div v-if=\"mode === 'opponent'\" class=\"im-skeleton-logo\"></div>\n\t\t\t<div class=\"im-skeleton-content\">\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 35%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 100%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 55%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t<div style=\"max-width: 26px; margin-left: auto;\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-like\"></div>\n\t\t\t</div>\n\t\t</div>\n\t`\n};","import { DialogReferenceClassName } from \"im.const\";\n\nexport const Placeholder3 = {\n\tprops: ['element'],\n\tcreated()\n\t{\n\t\tconst modes = ['self', 'opponent'];\n\t\tconst randomIndex = Math.floor(Math.random() * modes.length);\n\t\tthis.mode = modes[randomIndex];\n\t},\n\tcomputed:\n\t{\n\t\titemClasses()\n\t\t{\n\t\t\tconst itemClasses = ['im-skeleton-item', 'im-skeleton-item--md', `${DialogReferenceClassName.listItem}-${this.element.id}`];\n\t\t\tif (this.mode === 'self')\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item-self');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item-opponent');\n\t\t\t}\n\n\t\t\treturn itemClasses;\n\t\t}\n\t},\n\ttemplate: `\n\t\t<div :class=\"itemClasses\" :key=\"element.templateId\">\n\t\t\t<div v-if=\"mode === 'opponent'\" class=\"im-skeleton-logo\"></div>\n\t\t\t<div class=\"im-skeleton-content\">\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 35%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 100%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 55%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t<div style=\"max-width: 26px; margin-left: auto;\" class=\"im-skeleton-line\"></div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"im-skeleton-like\"></div>\n\t\t\t</div>\n\t\t</div>\n\t`\n};","import 'ui.design-tokens';\n\nimport {BitrixVue} from 'ui.vue';\nimport {Vuex} from 'ui.vue.vuex';\nimport 'im.view.message';\nimport {\n\tDeviceType,\n\tDialogReferenceClassName,\n\tDialogType,\n\tDialogTemplateType as TemplateType,\n\tRestMethod,\n\tRestMethodHandler, EventType\n} from \"im.const\";\nimport {Utils as MessengerUtils} from \"im.lib.utils\";\nimport {Animation} from \"im.lib.animation\";\nimport {Logger} from \"im.lib.logger\";\nimport 'main.polyfill.intersectionobserver';\n\nimport {EventEmitter} from 'main.core.events';\n\nimport './message-list.css';\nimport {ObserverType, RequestMode, DateFormat} from \"./message-list-const\";\nimport {Placeholder1} from './placeholders/placeholder-1';\nimport {Placeholder2} from './placeholders/placeholder-2';\nimport {Placeholder3} from './placeholders/placeholder-3';\n\nconst MessageList = {\n\t/**\n\t * @emits EventType.dialog.readMessage\n\t * @emits EventType.dialog.clickOnDialog\n\t * @emits EventType.dialog.clickOnCommand\n\t * @emits EventType.dialog.clickOnMention\n\t * @emits EventType.dialog.clickOnReadList\n\t */\n\tprops:\n\t{\n\t\tuserId: { type: Number, default: 0 },\n\t\tdialogId: { type: String, default: \"0\" },\n\t\tmessageLimit: { type: Number, default: 50 },\n\t\tenableReadMessages: { type: Boolean, default: true },\n\t\tenableReactions: { type: Boolean, default: true },\n\t\tenableDateActions: { type: Boolean, default: true },\n\t\tenableCreateContent: { type: Boolean, default: true },\n\t\tenableGestureQuote: { type: Boolean, default: true },\n\t\tenableGestureQuoteFromRight: { type: Boolean, default: true },\n\t\tenableGestureMenu: { type: Boolean, default: false },\n\t\tshowMessageUserName: { type: Boolean, default: true },\n\t\tshowMessageAvatar: { type: Boolean, default: true },\n\t\tshowMessageMenu: { type: Boolean, default: true },\n\t},\n\tcomponents: {Placeholder1, Placeholder2, Placeholder3},\n\tdata()\n\t{\n\t\treturn {\n\t\t\tmessagesSet: false,\n\t\t\tscrollAnimating: false,\n\t\t\tshowScrollButton: false,\n\t\t\tcaptureMove: false,\n\t\t\tcapturedMoveEvent: null,\n\t\t\tlastMessageId: null,\n\n\t\t\tisRequestingHistory: false,\n\t\t\thistoryPagesRequested: 0,\n\t\t\tstopHistoryLoading: false,\n\t\t\tisRequestingUnread: false,\n\t\t\tunreadPagesRequested: 0,\n\t\t\tplaceholderCount: 0,\n\t\t\tpagesLoaded: 0\n\t\t}\n\t},\n\tcreated()\n\t{\n\t\tLogger.warn('MessageList component is created');\n\t\tthis.initParams();\n\t\tthis.initEvents();\n\t},\n\tbeforeDestroy()\n\t{\n\t\tthis.observers = {};\n\t\tclearTimeout(this.scrollButtonShowTimeout);\n\t\tthis.clearEvents();\n\t},\n\tmounted()\n\t{\n\t\tthis.windowFocused = MessengerUtils.platform.isBitrixMobile()? true: document.hasFocus();\n\t\tthis.getMessageIdsForPagination();\n\t\tthis.scrollOnStart();\n\t},\n\twatch:\n\t{\n\t\t// after each dialog switch (without switching to loading state)\n\t\t// we reset messagesSet flag and run scroll on start routine\n\t\tdialogId(newValue, oldValue)\n\t\t{\n\t\t\tLogger.warn('new dialogId in message-list', newValue);\n\t\t\tthis.messagesSet = false;\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.scrollOnStart();\n\t\t\t});\n\t\t}\n\t},\n\tcomputed:\n\t{\n\t\tTemplateType: () => TemplateType,\n\t\tObserverType: () => ObserverType,\n\t\tDialogReferenceClassName: () => DialogReferenceClassName,\n\t\tlocalize()\n\t\t{\n\t\t\treturn BitrixVue.getFilteredPhrases('IM_MESSENGER_DIALOG_', this);\n\t\t},\n\t\tdialog()\n\t\t{\n\t\t\tconst dialog = this.$store.getters['dialogues/get'](this.dialogId);\n\n\t\t\treturn dialog? dialog: this.$store.getters['dialogues/getBlank']();\n\t\t},\n\t\tchatId()\n\t\t{\n\t\t\tif (this.application)\n\t\t\t{\n\t\t\t\treturn this.application.dialog.chatId;\n\t\t\t}\n\t\t},\n\t\tcollection()\n\t\t{\n\t\t\treturn this.$store.getters['messages/get'](this.chatId);\n\t\t},\n\t\tformattedCollection()\n\t\t{\n\t\t\tthis.lastMessageId = 0; //used in readed status\n\t\t\tthis.lastMessageAuthorId = 0; //used in readed status\n\t\t\tthis.firstUnreadMessageId = 0;\n\n\t\t\tlet lastAuthorId = 0; //used for delimeters\n\t\t\tconst dateGroups = {}; //date grouping nodes\n\t\t\tconst collection = []; //array to return\n\n\t\t\tthis.collection.forEach(element =>\n\t\t\t{\n\t\t\t\tif (this.messagesSet && (this.lastHistoryMessageId === null || this.lastHistoryMessageId > element.id))\n\t\t\t\t{\n\t\t\t\t\tLogger.warn('setting new lastHistoryMessageId', element.id);\n\t\t\t\t\tthis.lastHistoryMessageId = element.id;\n\t\t\t\t}\n\n\t\t\t\tthis.lastMessageId = element.id;\n\n\t\t\t\tlet group = this.getDateGroup(element.date);\n\t\t\t\tif (!dateGroups[group.title])\n\t\t\t\t{\n\t\t\t\t\tdateGroups[group.title] = group.id;\n\t\t\t\t\tcollection.push(this.getDateGroupBlock(group.id, group.title));\n\t\t\t\t}\n\t\t\t\telse if (lastAuthorId !== element.authorId)\n\t\t\t\t{\n\t\t\t\t\tcollection.push(this.getDelimiterBlock(element.id));\n\t\t\t\t}\n\n\t\t\t\tif (element.unread && !this.firstUnreadMessageId)\n\t\t\t\t{\n\t\t\t\t\tthis.firstUnreadMessageId = element.id;\n\t\t\t\t}\n\n\t\t\t\tcollection.push(element);\n\t\t\t\tlastAuthorId = element.authorId;\n\t\t\t});\n\n\t\t\t//remembering author of last message - used in readed status\n\t\t\tthis.lastMessageAuthorId = lastAuthorId;\n\n\t\t\treturn collection;\n\t\t},\n\t\twritingStatusText()\n\t\t{\n\t\t\tclearTimeout(this.scrollToTimeout);\n\n\t\t\tif (this.dialog.writingList.length === 0)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t//scroll to bottom\n\t\t\tif (!this.scrollChangedByUser && !this.showScrollButton)\n\t\t\t{\n\t\t\t\tthis.scrollToTimeout = setTimeout(() => this.animatedScrollToPosition({duration: 500}), 300);\n\t\t\t}\n\n\t\t\tconst text = this.dialog.writingList.map(element => element.userName).join(', ');\n\n\t\t\treturn this.localize['IM_MESSENGER_DIALOG_WRITES_MESSAGE'].replace('#USER#', text);\n\t\t},\n\t\tstatusReaded()\n\t\t{\n\t\t\tclearTimeout(this.scrollToTimeout);\n\n\t\t\tif (this.dialog.readedList.length === 0)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tlet text = '';\n\n\t\t\tif (this.dialog.type === DialogType.private)\n\t\t\t{\n\t\t\t\tconst record = this.dialog.readedList[0];\n\t\t\t\tif (\n\t\t\t\t\trecord.messageId === this.lastMessageId\n\t\t\t\t\t&& record.userId !== this.lastMessageAuthorId\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tconst dateFormat = this.getDateFormat(DateFormat.readedTitle);\n\t\t\t\t\tconst formattedDate = this.getDateObject().format(dateFormat, record.date)\n\t\t\t\t\ttext = this.localize['IM_MESSENGER_DIALOG_MESSAGES_READED_USER'].replace('#DATE#', formattedDate);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst readedList = this.dialog.readedList.filter(record => {\n\t\t\t\t\treturn record.messageId === this.lastMessageId && record.userId !== this.lastMessageAuthorId;\n\t\t\t\t});\n\t\t\t\tif (readedList.length === 1)\n\t\t\t\t{\n\t\t\t\t\ttext = this.localize['IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT'].replace(\n\t\t\t\t\t\t'#USERS#', readedList[0].userName\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse if (readedList.length > 1)\n\t\t\t\t{\n\t\t\t\t\ttext = this.localize['IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT'].replace(\n\t\t\t\t\t\t'#USERS#',\n\t\t\t\t\t\tthis.localize['IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT_PLURAL']\n\t\t\t\t\t\t\t.replace('#USER#', readedList[0].userName)\n\t\t\t\t\t\t\t.replace('#COUNT#', readedList.length-1)\n\t\t\t\t\t\t\t.replace('[LINK]', '')\n\t\t\t\t\t\t\t.replace('[/LINK]', '')\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!text)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t//scroll to bottom\n\t\t\tif (!this.scrollChangedByUser && !this.showScrollButton)\n\t\t\t{\n\t\t\t\tthis.scrollToTimeout = setTimeout(() => this.animatedScrollToPosition({duration: 500}), 300);\n\t\t\t}\n\n\t\t\treturn text;\n\t\t},\n\t\tunreadCounter()\n\t\t{\n\t\t\treturn this.dialog.counter > 99? 999: this.dialog.counter;\n\t\t},\n\t\tformattedUnreadCounter()\n\t\t{\n\t\t\treturn this.unreadCounter > 99 ? '99+': this.unreadCounter;\n\t\t},\n\t\tscrollBlocked()\n\t\t{\n\t\t\tif (this.application.device.type !== DeviceType.mobile)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this.scrollAnimating || this.captureMove;\n\t\t},\n\t\tisDarkBackground()\n\t\t{\n\t\t\treturn this.application.options.darkBackground;\n\t\t},\n\t\tisMobile()\n\t\t{\n\t\t\treturn this.application.device.type === DeviceType.mobile;\n\t\t},\n\t\t//new\n\t\tisRequestingData()\n\t\t{\n\t\t\treturn this.isRequestingHistory || this.isRequestingUnread;\n\t\t},\n\t\tremainingHistoryPages()\n\t\t{\n\t\t\treturn Math.ceil((this.dialog.messageCount - this.collection.length) / this.historyMessageLimit);\n\t\t},\n\t\tremainingUnreadPages()\n\t\t{\n\t\t\t// we dont use unread counter now - we reverted unread counter to be max at 99, so we dont know actual counter\n\n\t\t\tif (this.isLastIdInCollection)\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\treturn Math.ceil((this.dialog.messageCount - this.collection.length) / this.unreadMessageLimit);\n\t\t},\n\t\tunreadInCollection()\n\t\t{\n\t\t\treturn this.collection.filter(item => {\n\t\t\t\treturn item.unread === true;\n\t\t\t});\n\t\t},\n\t\tisLastIdInCollection()\n\t\t{\n\t\t\treturn this.collection.map(message => message.id).includes(this.dialog.lastMessageId);\n\t\t},\n\t\tshowStatusPlaceholder()\n\t\t{\n\t\t\treturn !this.writingStatusText && !this.statusReaded;\n\t\t},\n\t\tbodyClasses()\n\t\t{\n\t\t\treturn [DialogReferenceClassName.listBody, {\n\t\t\t\t'bx-im-dialog-list-scroll-blocked': this.scrollBlocked,\n\t\t\t\t'bx-im-dialog-dark-background': this.isDarkBackground,\n\t\t\t\t'bx-im-dialog-mobile': this.isMobile,\n\t\t\t}];\n\t\t},\n\t\t...Vuex.mapState({\n\t\t\tapplication: state => state.application,\n\t\t})\n\t},\n\tmethods:\n\t{\n\t\t/* region 01. Init and destroy */\n\t\tinitParams()\n\t\t{\n\t\t\tthis.placeholdersComposition = this.getPlaceholdersComposition();\n\t\t\tthis.historyMessageLimit = 50;\n\t\t\tthis.unreadMessageLimit = 50;\n\t\t\tthis.showScrollButton = this.unreadCounter > 0;\n\n\t\t\tthis.scrollingDownThreshold = 1000;\n\t\t\tthis.scrollingUpThreshold = 1000;\n\t\t\tthis.messageScrollOffset = 20;\n\n\t\t\tthis.lastScroll = 0;\n\t\t\tthis.scrollChangedByUser = false;\n\t\t\tthis.scrollButtonDiff = 100;\n\t\t\tthis.scrollButtonShowTimeout = null;\n\t\t\tthis.scrollPositionChangeTime = new Date().getTime();\n\t\t\tthis.lastRequestTime = new Date().getTime();\n\n\t\t\tthis.observers = {};\n\n\t\t\tthis.lastAuthorId = 0;\n\t\t\tthis.lastHistoryMessageId = null;\n\t\t\tthis.firstUnreadMessageId = null;\n\t\t\tthis.lastUnreadMessageId = null;\n\t\t\tthis.dateFormatFunction = null;\n\t\t\tthis.cachedDateGroups = {};\n\n\t\t\tthis.readMessageQueue = [];\n\t\t\tthis.readMessageTarget = {};\n\t\t\tthis.readVisibleMessagesDelayed = MessengerUtils.debounce(this.readVisibleMessages, 50, this);\n\t\t\tthis.requestHistoryDelayed = MessengerUtils.debounce(this.requestHistory, 50, this);\n\t\t},\n\t\tinitEvents()\n\t\t{\n\t\t\tEventEmitter.subscribe(EventType.dialog.scrollOnStart, this.onScrollOnStart);\n\t\t\tEventEmitter.subscribe(EventType.dialog.scrollToBottom, this.onScrollToBottom);\n\t\t\tEventEmitter.subscribe(EventType.dialog.readVisibleMessages, this.onReadVisibleMessages);\n\t\t\tEventEmitter.subscribe(EventType.dialog.newMessage, this.onNewMessage);\n\t\t\tEventEmitter.subscribe(EventType.dialog.requestUnread, this.onExternalUnreadRequest);\n\t\t\tEventEmitter.subscribe(EventType.dialog.messagesSet, this.onMessagesSet);\n\t\t\tEventEmitter.subscribe(EventType.dialog.beforeMobileKeyboard, this.onBeforeMobileKeyboard);\n\n\t\t\twindow.addEventListener(\"orientationchange\", this.onOrientationChange);\n\t\t\twindow.addEventListener('focus', this.onWindowFocus);\n\t\t\twindow.addEventListener('blur', this.onWindowBlur);\n\n\t\t\tBitrixVue.event.$on('bitrixmobile:controller:focus', this.onWindowFocus);\n\t\t\tBitrixVue.event.$on('bitrixmobile:controller:blur', this.onWindowBlur);\n\t\t},\n\t\tclearEvents()\n\t\t{\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.scrollOnStart, this.onScrollOnStart);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.scrollToBottom, this.onScrollToBottom);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.readVisibleMessages, this.onReadVisibleMessages);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.newMessage, this.onNewMessage);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.requestUnread, this.onExternalUnreadRequest);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.messagesSet, this.onMessagesSet);\n\t\t\tEventEmitter.unsubscribe(EventType.dialog.beforeMobileKeyboard, this.onBeforeMobileKeyboard);\n\n\t\t\twindow.removeEventListener(\"orientationchange\", this.onOrientationChange);\n\t\t\twindow.removeEventListener('focus', this.onWindowFocus);\n\t\t\twindow.removeEventListener('blur', this.onWindowBlur);\n\n\t\t\tBitrixVue.event.$off('bitrixmobile:controller:focus', this.onWindowFocus);\n\t\t\tBitrixVue.event.$off('bitrixmobile:controller:blur', this.onWindowBlur);\n\t\t},\n\t\t/* endregion 01. Init and destroy */\n\n\t\t/* region 02. Event handlers */\n\t\tonDialogClick(event)\n\t\t{\n\t\t\tif (BitrixVue.testNode(event.target, {className: 'bx-im-message-command'}))\n\t\t\t{\n\t\t\t\tthis.onCommandClick(event);\n\t\t\t}\n\t\t\telse if (BitrixVue.testNode(event.target, {className: 'bx-im-mention'}))\n\t\t\t{\n\t\t\t\tthis.onMentionClick(event);\n\t\t\t}\n\n\t\t\tthis.windowFocused = true;\n\t\t\tEventEmitter.emit(EventType.dialog.clickOnDialog, {event});\n\t\t},\n\t\tonDialogMove(event)\n\t\t{\n\t\t\tif (!this.captureMove)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.capturedMoveEvent = event;\n\t\t},\n\t\tonCommandClick(event)\n\t\t{\n\t\t\tlet value = '';\n\n\t\t\tif (\n\t\t\t\tevent.target.dataset.entity === 'send'\n\t\t\t\t|| event.target.dataset.entity === 'put'\n\t\t\t)\n\t\t\t{\n\t\t\t\tvalue = event.target.nextSibling.innerHTML;\n\t\t\t}\n\t\t\telse if (event.target.dataset.entity === 'call')\n\t\t\t{\n\t\t\t\tvalue = event.target.dataset.command;\n\t\t\t}\n\n\t\t\tEventEmitter.emit(EventType.dialog.clickOnCommand, {type: event.target.dataset.entity, value, event});\n\t\t},\n\t\tonMentionClick(event)\n\t\t{\n\t\t\tEventEmitter.emit(EventType.dialog.clickOnMention, {\n\t\t\t\ttype: event.target.dataset.type,\n\t\t\t\tvalue: event.target.dataset.value,\n\t\t\t\tevent\n\t\t\t});\n\t\t},\n\t\tonOrientationChange()\n\t\t{\n\t\t\tclearTimeout(this.scrollToTimeout);\n\n\t\t\tif (this.application.device.type !== DeviceType.mobile)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tLogger.log('Orientation changed');\n\n\t\t\tif (!this.scrollChangedByUser)\n\t\t\t{\n\t\t\t\tthis.scrollToTimeout = setTimeout(() => this.scrollToBottom({force: true}), 300);\n\t\t\t}\n\t\t},\n\t\tonWindowFocus()\n\t\t{\n\t\t\tthis.windowFocused = true;\n\t\t\tthis.readVisibleMessages();\n\n\t\t\treturn true;\n\t\t},\n\t\tonWindowBlur()\n\t\t{\n\t\t\tthis.windowFocused = false;\n\t\t},\n\t\tonScrollToBottom({data: event = {chatId: 0, force: false, cancelIfScrollChange: false, duration: null}} = {})\n\t\t{\n\t\t\tif (event.chatId !== this.chatId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tLogger.warn('onScrollToBottom', event);\n\t\t\tevent.force = event.force === true;\n\t\t\tevent.cancelIfScrollChange = event.cancelIfScrollChange === true;\n\n\t\t\tif (this.firstUnreadMessageId)\n\t\t\t{\n\t\t\t\tLogger.warn('Dialog.onScrollToBottom: canceled - unread messages');\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (event.cancelIfScrollChange && this.scrollChangedByUser && this.scrollBeforeMobileKeyboard)\n\t\t\t{\n\t\t\t\tconst body = this.$refs.body;\n\t\t\t\tthis.scrollAfterMobileKeyboard = body.scrollHeight - body.scrollTop - body.clientHeight;\n\t\t\t\tconst scrollDiff = this.scrollAfterMobileKeyboard - this.scrollBeforeMobileKeyboard;\n\t\t\t\tthis.animatedScrollToPosition({start: body.scrollTop, end: body.scrollTop + scrollDiff});\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.scrollToBottom(event);\n\n\t\t\treturn true;\n\t\t},\n\t\tonReadVisibleMessages({data: event = {chatId: 0}} = {})\n\t\t{\n\t\t\tif (event.chatId !== this.chatId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tLogger.warn('onReadVisibleMessages');\n\n\t\t\tthis.readVisibleMessagesDelayed();\n\n\t\t\treturn true;\n\t\t},\n\t\tonClickOnReadList(event)\n\t\t{\n\t\t\tconst readedList = this.dialog.readedList.filter(record => {\n\t\t\t\treturn record.messageId === this.lastMessageId && record.userId !== this.lastMessageAuthorId;\n\t\t\t});\n\t\t\tEventEmitter.emit(EventType.dialog.clickOnReadList, {list: readedList, event});\n\t\t},\n\t\tonDragMessage(event)\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.captureMove = event.result;\n\n\t\t\tif (!event.result)\n\t\t\t{\n\t\t\t\tthis.capturedMoveEvent = null;\n\t\t\t}\n\t\t},\n\t\tonScroll(event)\n\t\t{\n\t\t\tif (this.isScrolling)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tclearTimeout(this.scrollToTimeout);\n\n\t\t\tthis.currentScroll = event.target.scrollTop;\n\t\t\tconst isScrollingDown = this.lastScroll < this.currentScroll;\n\t\t\tconst isScrollingUp = !isScrollingDown;\n\n\t\t\tif (isScrollingUp && this.scrollButtonClicked)\n\t\t\t{\n\t\t\t\tLogger.warn('scrollUp - reset scroll button clicks');\n\t\t\t\tthis.scrollButtonClicked = false;\n\t\t\t}\n\n\t\t\tconst leftSpaceBottom = event.target.scrollHeight - event.target.scrollTop - event.target.clientHeight;\n\t\t\tif (this.currentScroll > 0 && isScrollingDown && leftSpaceBottom < this.scrollingDownThreshold)\n\t\t\t{\n\t\t\t\tthis.onScrollDown();\n\t\t\t}\n\t\t\telse if (isScrollingUp && this.currentScroll <= this.scrollingUpThreshold)\n\t\t\t{\n\t\t\t\tthis.onScrollUp();\n\t\t\t}\n\n\t\t\t//remember current scroll to compare with new ones\n\t\t\tthis.lastScroll = this.currentScroll;\n\t\t\tthis.scrollPositionChangeTime = new Date().getTime();\n\t\t\t//show or hide scroll button\n\t\t\tthis.manageScrollButton(event);\n\t\t},\n\t\tonScrollDown()\n\t\t{\n\t\t\tif (!this.messagesSet || this.isLastIdInCollection)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Logger.warn('---');\n\t\t\t// Logger.warn('Want to load unread');\n\t\t\t// Logger.warn('this.isRequestingData', this.isRequestingData);\n\t\t\t// Logger.warn('this.unreadPagesRequested', this.unreadPagesRequested);\n\t\t\t// Logger.warn('this.remainingUnreadPages', this.remainingUnreadPages);\n\t\t\tif (this.isRequestingData && this.remainingUnreadPages > 0)\n\t\t\t{\n\t\t\t\tthis.drawPlaceholders(RequestMode.unread).then(() => {\n\t\t\t\t\tthis.unreadPagesRequested += 1;\n\t\t\t\t\tLogger.warn('Already loading! Draw placeholders and add request, total - ', this.unreadPagesRequested);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (!this.isRequestingData && this.remainingUnreadPages > 0)\n\t\t\t{\n\t\t\t\tLogger.warn('Starting new unread request');\n\t\t\t\tthis.isRequestingUnread = true;\n\n\t\t\t\tthis.drawPlaceholders(RequestMode.unread).then(() => {\n\t\t\t\t\tthis.requestUnread();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tonScrollUp()\n\t\t{\n\t\t\tif (!this.messagesSet || this.stopHistoryLoading)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.projectedPagesToLoad = 1\n\n\t\t\t//draw 3 sets of placeholders if we are close to top of container\n\t\t\tif (!this.isMobile && this.$refs.body.scrollTop < this.$refs.body.scrollHeight / 4)\n\t\t\t{\n\t\t\t\tthis.projectedPagesToLoad = 3;\n\t\t\t}\n\n\t\t\t// Logger.warn('---');\n\t\t\t// Logger.warn('Want to load history');\n\t\t\t// Logger.warn('this.isRequestingData', this.isRequestingData);\n\t\t\t// Logger.warn('this.historyPagesRequested', this.historyPagesRequested);\n\t\t\t// Logger.warn('this.remainingHistoryPages', this.remainingHistoryPages);\n\t\t\tif (this.isRequestingData && this.remainingHistoryPages > 0)\n\t\t\t{\n\t\t\t\tconst currentBodyHeight = this.$refs.body.scrollHeight;\n\t\t\t\tthis.drawPlaceholders(RequestMode.history, this.projectedPagesToLoad).then(() => {\n\t\t\t\t\tif (!this.isOverflowAnchorSupported())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.enableUserScroll();\n\t\t\t\t\t}\n\t\t\t\t\tthis.historyPagesRequested += this.projectedPagesToLoad;\n\t\t\t\t\tLogger.warn('Already loading! Draw placeholders and add request, total - ', this.historyPagesRequested);\n\t\t\t\t});\n\t\t\t\tif (!this.isOverflowAnchorSupported())\n\t\t\t\t{\n\t\t\t\t\tLogger.warn('Disabling user scroll');\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tconst heightDifference = this.$refs.body.scrollHeight - currentBodyHeight;\n\t\t\t\t\t\tthis.disableUserScroll();\n\t\t\t\t\t\tthis.forceScrollToPosition(this.$refs.body.scrollTop + heightDifference);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!this.isRequestingData && this.remainingHistoryPages > 0)\n\t\t\t{\n\t\t\t\tLogger.warn('Starting new history request');\n\t\t\t\tthis.isRequestingHistory = true;\n\n\t\t\t\tconst currentBodyHeight = this.$refs.body.scrollHeight;\n\t\t\t\tthis.drawPlaceholders(RequestMode.history, this.projectedPagesToLoad).then(() => {\n\t\t\t\t\tthis.historyPagesRequested = this.projectedPagesToLoad - 1;\n\t\t\t\t\tif (!this.isOverflowAnchorSupported())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.enableUserScroll();\n\t\t\t\t\t}\n\t\t\t\t\tthis.requestHistory();\n\t\t\t\t});\n\t\t\t\t//will run right after drawing placeholders, before .then()\n\t\t\t\tif (!this.isOverflowAnchorSupported())\n\t\t\t\t{\n\t\t\t\t\tLogger.warn('Disabling user scroll');\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tconst heightDifference = this.$refs.body.scrollHeight - currentBodyHeight;\n\t\t\t\t\t\tthis.disableUserScroll();\n\t\t\t\t\t\tthis.forceScrollToPosition(this.$refs.body.scrollTop + heightDifference);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t//TODO: move\n\t\tisOverflowAnchorSupported()\n\t\t{\n\t\t\treturn !MessengerUtils.platform.isBitrixMobile()\n\t\t\t\t&& !MessengerUtils.browser.isIe()\n\t\t\t\t&& !MessengerUtils.browser.isSafari()\n\t\t\t\t&& !MessengerUtils.browser.isSafariBased();\n\t\t},\n\t\tdisableUserScroll()\n\t\t{\n\t\t\tthis.$refs.body.classList.add('bx-im-dialog-list-scroll-blocked');\n\t\t},\n\t\tenableUserScroll()\n\t\t{\n\t\t\tthis.$refs.body.classList.remove('bx-im-dialog-list-scroll-blocked');\n\t\t},\n\t\tonScrollButtonClick()\n\t\t{\n\t\t\tLogger.warn('Scroll button click', this.scrollButtonClicked);\n\t\t\t// TODO: now we just do nothing if button was clicked during data request (history or unread)\n\t\t\tif (this.isRequestingData)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//we dont have unread - just scroll to bottom\n\t\t\tif (this.unreadCounter === 0)\n\t\t\t{\n\t\t\t\tthis.scrollToBottom();\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//it's a second click on button - scroll to last page if we have one\n\t\t\tif (this.scrollButtonClicked && this.remainingUnreadPages > 0)\n\t\t\t{\n\t\t\t\tLogger.warn('Second click on scroll button');\n\t\t\t\tthis.scrollToLastPage();\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//it's a first click - just set the flag and move on\n\t\t\tthis.scrollButtonClicked = true;\n\t\t\tthis.scrollToBottom();\n\t\t},\n\t\tonNewMessage({data: {chatId, messageId}})\n\t\t{\n\t\t\tif (chatId !== this.chatId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tLogger.warn('Received new message from pull', messageId);\n\t\t\tif (this.showScrollButton)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$nextTick(() => {\n\t\t\t\t//non-focus handling\n\t\t\t\tif (!this.windowFocused)\n\t\t\t\t{\n\t\t\t\t\tconst availableScrollHeight = this.$refs['body'].scrollHeight - this.$refs['body'].clientHeight;\n\t\t\t\t\tif (this.currentScroll < availableScrollHeight)\n\t\t\t\t\t{\n\t\t\t\t\t\t//show scroll button when out of focus and all visible space is filled with unread messaages already\n\t\t\t\t\t\tthis.showScrollButton = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.scrollToFirstUnreadMessage();\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t//big message handling\n\t\t\t\tconst messageElement = this.getElementById(messageId);\n\t\t\t\tif (!messageElement)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t//if big message - scroll to top of it\n\t\t\t\tconst body = this.$refs.body;\n\t\t\t\tif (messageElement.clientHeight > body.clientHeight)\n\t\t\t\t{\n\t\t\t\t\tthis.scrollToMessage({messageId});\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t//else - scroll to bottom\n\t\t\t\tthis.animatedScrollToPosition();\n\t\t\t});\n\t\t},\n\t\tonMessagesSet({data: event})\n\t\t{\n\t\t\tif (event.chatId !== this.chatId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.messagesSet === true)\n\t\t\t{\n\t\t\t\tLogger.warn('messages are already set');\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tLogger.warn('onMessagesSet', event.chatId);\n\t\t\tthis.messagesSet = true;\n\t\t\tlet force = false;\n\t\t\t//if we are in top half of container - force scroll to first unread, else - animated scroll\n\t\t\tif (this.$refs.body.scrollTop < this.$refs.body.scrollHeight / 2)\n\t\t\t{\n\t\t\t\tforce = true;\n\t\t\t}\n\t\t\tthis.scrollToBottom({force, cancelIfScrollChange: false});\n\t\t},\n\t\tonBeforeMobileKeyboard({data: event})\n\t\t{\n\t\t\tconst body = this.$refs.body;\n\t\t\tthis.scrollBeforeMobileKeyboard = body.scrollHeight - body.scrollTop - body.clientHeight;\n\t\t},\n\t\tonExternalUnreadRequest({data: event = {chatId: 0}} = {})\n\t\t{\n\t\t\tif (event.chatId !== this.chatId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tLogger.warn('onExternalUnreadRequest');\n\t\t\tthis.isRequestingUnread = true;\n\n\t\t\tthis.drawPlaceholders(RequestMode.unread).then(() => {\n\t\t\t\treturn this.requestUnread();\n\t\t\t});\n\n\t\t\tthis.externalUnreadRequestResolve = null;\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tthis.externalUnreadRequestResolve = resolve;\n\t\t\t});\n\t\t},\n\t\tonScrollOnStart({data: event})\n\t\t{\n\t\t\tif (event.chatId !== this.chatId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.scrollOnStart({force: false});\n\t\t},\n\t\t/* endregion 02. Event handlers */\n\n\t\t/* region 03. Scrolling */\n\t\tscrollOnStart({force = true} = {})\n\t\t{\n\t\t\tLogger.warn('scrolling on start of dialog');\n\t\t\tconst unreadId = this.getFirstUnreadMessage();\n\t\t\tif (unreadId)\n\t\t\t{\n\t\t\t\tthis.scrollToFirstUnreadMessage(unreadId, force)\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst body = this.$refs.body;\n\t\t\t\tthis.forceScrollToPosition(body.scrollHeight - body.clientHeight);\n\t\t\t}\n\t\t},\n\t\t//scroll to first unread if counter > 0, else scroll to bottom\n\t\tscrollToBottom({force = false, cancelIfScrollChange = false, duration = null} = {})\n\t\t{\n\t\t\tLogger.warn('scroll to bottom', force, cancelIfScrollChange, duration);\n\t\t\tif (cancelIfScrollChange && this.scrollChangedByUser)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst body = this.$refs.body;\n\n\t\t\t//scroll to first unread message if there are unread messages\n\t\t\tif (this.dialog.counter > 0)\n\t\t\t{\n\t\t\t\tconst scrollToMessageId = this.dialog.counter > 1 && this.firstUnreadMessageId? this.firstUnreadMessageId: this.lastMessageId;\n\t\t\t\tthis.scrollToFirstUnreadMessage(scrollToMessageId, force);\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t//hide scroll button because we will scroll to bottom\n\t\t\tthis.showScrollButton = false;\n\n\t\t\t//without animation\n\t\t\tif (force)\n\t\t\t{\n\t\t\t\tthis.forceScrollToPosition(body.scrollHeight - body.clientHeight);\n\t\t\t}\n\t\t\t//with animation\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst scrollParams = {};\n\t\t\t\tif (duration)\n\t\t\t\t{\n\t\t\t\t\tscrollParams.duration = duration;\n\t\t\t\t}\n\t\t\t\tthis.animatedScrollToPosition({ ...scrollParams });\n\t\t\t}\n\t\t},\n\t\tscrollToFirstUnreadMessage(unreadId = null, force = false)\n\t\t{\n\t\t\tLogger.warn('scroll to first unread');\n\n\t\t\tlet element = false;\n\t\t\tif (unreadId !== null)\n\t\t\t{\n\t\t\t\telement = this.getElementById(unreadId);\n\t\t\t}\n\t\t\tif (!element)\n\t\t\t{\n\t\t\t\tunreadId = this.getFirstUnreadMessage();\n\t\t\t}\n\n\t\t\tthis.scrollToMessage({messageId: unreadId, force});\n\t\t},\n\t\t//scroll to message - can be set at the top or at the bottom of screen\n\t\tscrollToMessage({messageId = 0, force = false, stickToTop = true})\n\t\t{\n\t\t\tLogger.warn('scroll to message');\n\t\t\tconst body = this.$refs.body;\n\t\t\tconst element = this.getElementById(messageId);\n\n\t\t\tlet end = 0;\n\t\t\tif (!element)\n\t\t\t{\n\t\t\t\t//if no element found in DOM - scroll to top\n\t\t\t\tif (stickToTop)\n\t\t\t\t{\n\t\t\t\t\tend = 10;\n\t\t\t\t}\n\t\t\t\t//if no element and stickToTop = false - scroll to bottom\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tend = body.scrollHeight - body.clientHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (stickToTop)\n\t\t\t{\n\t\t\t\t//message will be at the top of screen (+little offset)\n\t\t\t\tend = element.offsetTop - (this.messageScrollOffset / 2);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//message will be at the bottom of screen (+little offset)\n\t\t\t\tend = element.offsetTop + element.offsetHeight - body.clientHeight + (this.messageScrollOffset / 2);\n\t\t\t}\n\n\t\t\tif (force)\n\t\t\t{\n\t\t\t\tthis.forceScrollToPosition(end);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.animatedScrollToPosition({end});\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tforceScrollToPosition(position)\n\t\t{\n\t\t\tLogger.warn('Force scroll to position - ', position);\n\t\t\tlet body = this.$refs.body;\n\t\t\tif (!body)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.animateScrollId)\n\t\t\t{\n\t\t\t\tAnimation.cancel(this.animateScrollId);\n\t\t\t\tthis.scrollAnimating = false;\n\t\t\t\tthis.animateScrollId = null;\n\t\t\t}\n\n\t\t\tbody.scrollTop = position;\n\t\t},\n\t\t//scroll to provided position with animation, by default - to the bottom\n\t\tanimatedScrollToPosition(params = {})\n\t\t{\n\t\t\tLogger.warn('Animated scroll to - ', params);\n\t\t\tif (this.animateScrollId)\n\t\t\t{\n\t\t\t\tAnimation.cancel(this.animateScrollId);\n\t\t\t\tthis.scrollAnimating = false;\n\t\t\t}\n\t\t\tif (typeof params === 'function')\n\t\t\t{\n\t\t\t\tparams = {callback: params};\n\t\t\t}\n\n\t\t\tconst body = this.$refs.body;\n\t\t\tif (!body)\n\t\t\t{\n\t\t\t\tif (params.callback && typeof params.callback === 'function')\n\t\t\t\t{\n\t\t\t\t\tparams.callback();\n\t\t\t\t}\n\t\t\t\tthis.animateScrollId = null;\n\t\t\t\tthis.scrollAnimating = false;\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tMessengerUtils.platform.isIos() && (\n\t\t\t\t\tMessengerUtils.platform.getIosVersion() > 12\n\t\t\t\t\t&& MessengerUtils.platform.getIosVersion() < 13.2\n\t\t\t\t)\n\t\t\t)\n\t\t\t{\n\t\t\t\tbody.scrollTop = body.scrollHeight - body.clientHeight;\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet {\n\t\t\t\tstart = body.scrollTop,\n\t\t\t\tend = body.scrollHeight - body.clientHeight,\n\t\t\t\tincrement = 20,\n\t\t\t\tcallback,\n\t\t\t\tduration = 500\n\t\t\t} = params;\n\n\t\t\tconst container = this.$refs.container;\n\t\t\tif (container && (end - start) > container.offsetHeight * 3)\n\t\t\t{\n\t\t\t\tstart = end - container.offsetHeight * 3;\n\t\t\t\tLogger.warn('Dialog.animatedScroll: Scroll trajectory has been reduced');\n\t\t\t}\n\n\t\t\tthis.scrollAnimating = true;\n\t\t\tLogger.warn('Dialog.animatedScroll: User scroll blocked while scrolling');\n\n\t\t\tthis.animateScrollId = Animation.start({\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tincrement,\n\t\t\t\tduration,\n\n\t\t\t\telement: body,\n\t\t\t\telementProperty: 'scrollTop',\n\n\t\t\t\tcallback: () =>\n\t\t\t\t{\n\t\t\t\t\tthis.animateScrollId = null;\n\t\t\t\t\tthis.scrollAnimating = false;\n\t\t\t\t\tif (callback && typeof callback === 'function')\n\t\t\t\t\t{\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\t/* endregion 03. Scrolling */\n\n\t\t/* region 04. Placeholders */\n\t\tdrawPlaceholders(requestMode, pagesCount = 1)\n\t\t{\n\t\t\tconst limit = requestMode === RequestMode.history? this.historyMessageLimit: this.unreadMessageLimit;\n\t\t\tconst placeholders = this.generatePlaceholders(limit, pagesCount);\n\n\t\t\treturn this.$store.dispatch('messages/addPlaceholders', {placeholders, requestMode});\n\t\t},\n\t\tgeneratePlaceholders(amount, pagesCount)\n\t\t{\n\t\t\tconst placeholders = [];\n\n\t\t\tfor (let i = 0; i < pagesCount; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < this.placeholdersComposition.length; j++)\n\t\t\t\t{\n\t\t\t\t\tplaceholders.push({\n\t\t\t\t\t\tid: `placeholder${this.placeholderCount}`,\n\t\t\t\t\t\tchatId: this.chatId,\n\t\t\t\t\t\ttemplateType: TemplateType.placeholder,\n\t\t\t\t\t\tplaceholderType: this.placeholdersComposition[j],\n\t\t\t\t\t\tunread: false\n\t\t\t\t\t});\n\t\t\t\t\tthis.placeholderCount++;\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\treturn placeholders;\n\t\t},\n\t\tgetPlaceholdersComposition()\n\t\t{\n\t\t\t//randomize set of placeholder types (sums up to ~2400px height)\n\t\t\t//placeholder1 x8, placeholder2 x6, placeholder3 x8\n\t\t\treturn [1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3].sort(() => {\n\t\t\t\treturn 0.5 - Math.random();\n\t\t\t});\n\t\t},\n\t\t/* endregion 04. Placeholders */\n\n\t\t/* region 05. History request */\n\t\trequestHistory()\n\t\t{\n\t\t\treturn this.$Bitrix.RestClient.get().callMethod(RestMethod.imDialogMessagesGet, {\n\t\t\t\tchat_id: this.chatId,\n\t\t\t\tlast_id: this.lastHistoryMessageId,\n\t\t\t\tlimit: this.historyMessageLimit,\n\t\t\t\tconvert_text: 'Y'\n\t\t\t}).then(result => {\n\t\t\t\tconst newMessages = result.data().messages;\n\t\t\t\tif (newMessages.length > 0)\n\t\t\t\t{\n\t\t\t\t\tthis.lastHistoryMessageId = newMessages[newMessages.length - 1].id;\n\t\t\t\t}\n\n\t\t\t\tif (newMessages.length < this.historyMessageLimit)\n\t\t\t\t{\n\t\t\t\t\tthis.stopHistoryLoading = true;\n\t\t\t\t}\n\n\t\t\t\t//files and users\n\t\t\t\tthis.$Bitrix.Data.get('controller').executeRestAnswer(RestMethodHandler.imDialogMessagesGet, result);\n\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tconst currentBodyHeight = this.$refs.body.scrollHeight;\n\t\t\t\t\tthis.$store.dispatch('messages/updatePlaceholders', {\n\t\t\t\t\t\tchatId: this.chatId,\n\t\t\t\t\t\tdata: newMessages,\n\t\t\t\t\t\tfirstMessage: this.pagesLoaded * this.placeholdersComposition.length,\n\t\t\t\t\t\tamount: this.placeholdersComposition.length\n\t\t\t\t\t}).then(() => {\n\t\t\t\t\t\tif (!this.isOverflowAnchorSupported())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.enableUserScroll();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t});\n\t\t\t\t\tif (!this.isOverflowAnchorSupported())\n\t\t\t\t\t{\n\t\t\t\t\t\tLogger.warn('Disabling user scroll in updating placeholders');\n\t\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\t\tconst heightDifference = this.$refs.body.scrollHeight - currentBodyHeight;\n\t\t\t\t\t\t\tthis.disableUserScroll();\n\t\t\t\t\t\t\tthis.forceScrollToPosition(this.$refs.body.scrollTop + heightDifference);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).then(() => {\n\t\t\t\tthis.pagesLoaded += 1;\n\t\t\t\tLogger.warn('History page loaded. Total loaded - ', this.pagesLoaded);\n\n\t\t\t\treturn this.onAfterHistoryRequest();\n\t\t\t}).catch(result => {\n\t\t\t\tLogger.warn('Request history error', result);\n\t\t\t});\n\t\t},\n\t\tonAfterHistoryRequest()\n\t\t{\n\t\t\tLogger.warn('onAfterHistoryRequest');\n\t\t\tif (this.stopHistoryLoading)\n\t\t\t{\n\t\t\t\tLogger.warn('stopHistoryLoading, deleting all delayed requests');\n\t\t\t\tthis.historyPagesRequested = 0;\n\t\t\t}\n\n\t\t\tif (this.historyPagesRequested > 0)\n\t\t\t{\n\t\t\t\tLogger.warn('We have delayed requests -', this.historyPagesRequested);\n\t\t\t\tthis.historyPagesRequested--;\n\n\t\t\t\treturn this.requestHistory();\n\t\t\t}\n\t\t\telse if (this.$refs.body.scrollTop <= this.scrollingUpThreshold && this.remainingHistoryPages > 0)\n\t\t\t{\n\t\t\t\tLogger.warn('currentScroll <= scrollingUpThreshold, requesting next page and scrolling');\n\n\t\t\t\treturn this.drawPlaceholders(RequestMode.history).then((firstPlaceholderId) => {\n\t\t\t\t\tthis.scrollToMessage({messageId: firstPlaceholderId, force: true, stickToTop: false});\n\n\t\t\t\t\treturn this.requestHistory();\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tLogger.warn('No more delayed requests, clearing placeholders');\n\t\t\t\tthis.$store.dispatch('messages/clearPlaceholders', {chatId: this.chatId});\n\t\t\t\tthis.isRequestingHistory = false;\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t/* endregion 05. History request */\n\n\t\t/* region 06. Unread request */\n\t\tprepareUnreadRequestParams()\n\t\t{\n\t\t\treturn {\n\t\t\t\t[RestMethodHandler.imDialogRead]: [RestMethod.imDialogRead, {\n\t\t\t\t\tdialog_id: this.dialogId,\n\t\t\t\t\tmessage_id: this.lastUnreadMessageId\n\t\t\t\t}],\n\t\t\t\t[RestMethodHandler.imChatGet]: [RestMethod.imChatGet, {\n\t\t\t\t\tdialog_id: this.dialogId\n\t\t\t\t}],\n\t\t\t\t[RestMethodHandler.imDialogMessagesGetUnread]: [RestMethod.imDialogMessagesGet, {\n\t\t\t\t\tchat_id: this.chatId,\n\t\t\t\t\tfirst_id: this.lastUnreadMessageId,\n\t\t\t\t\tlimit: this.unreadMessageLimit,\n\t\t\t\t\tconvert_text: 'Y'\n\t\t\t\t}]\n\t\t\t};\n\t\t},\n\t\trequestUnread()\n\t\t{\n\t\t\tif (!this.lastUnreadMessageId)\n\t\t\t{\n\t\t\t\tthis.lastUnreadMessageId = this.$store.getters['messages/getLastId'](this.chatId);\n\t\t\t}\n\t\t\tif (!this.lastUnreadMessageId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tEventEmitter.emitAsync(EventType.dialog.readMessage, {\n\t\t\t\tid: this.lastUnreadMessageId,\n\t\t\t\tskipTimer: true,\n\t\t\t\tskipAjax: true\n\t\t\t}).then(() => {\n\t\t\t\tthis.$Bitrix.RestClient.get().callBatch(\n\t\t\t\t\tthis.prepareUnreadRequestParams(),\n\t\t\t\t\tresponse => this.onUnreadRequest(response)\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\tonUnreadRequest(response)\n\t\t{\n\t\t\tif (!response)\n\t\t\t{\n\t\t\t\tLogger.warn('Unread request: callBatch error');\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst chatGetResult = response[RestMethodHandler.imChatGet];\n\t\t\tif (chatGetResult.error())\n\t\t\t{\n\t\t\t\tLogger.warn('Unread request: imChatGet error', chatGetResult.error());\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$Bitrix.Data.get('controller').executeRestAnswer(RestMethodHandler.imChatGet, chatGetResult);\n\n\t\t\tconst dialogMessageUnread = response[RestMethodHandler.imDialogMessagesGetUnread];\n\t\t\tif (dialogMessageUnread.error())\n\t\t\t{\n\t\t\t\tLogger.warn('Unread request: imDialogMessagesGetUnread error', dialogMessageUnread.error());\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst newMessages = dialogMessageUnread.data().messages;\n\t\t\tif (newMessages.length > 0)\n\t\t\t{\n\t\t\t\tthis.lastUnreadMessageId = newMessages[newMessages.length - 1].id;\n\t\t\t}\n\n\t\t\tthis.$Bitrix.Data.get('controller').executeRestAnswer(RestMethodHandler.imDialogMessagesGetUnread, dialogMessageUnread);\n\t\t\tthis.$store.dispatch('messages/updatePlaceholders', {\n\t\t\t\tchatId: this.chatId,\n\t\t\t\tdata: newMessages,\n\t\t\t\tfirstMessage: this.pagesLoaded * this.placeholdersComposition.length,\n\t\t\t\tamount: this.placeholdersComposition.length\n\t\t\t}).then(() => {\n\t\t\t\tthis.pagesLoaded += 1;\n\t\t\t\tLogger.warn('Unread page loaded. Total loaded - ', this.pagesLoaded);\n\n\t\t\t\treturn this.onAfterUnreadRequest();\n\t\t\t}).catch(result => {\n\t\t\t\tLogger.warn('Unread history error', result);\n\t\t\t});\n\t\t},\n\t\tonAfterUnreadRequest()\n\t\t{\n\t\t\tif (this.unreadPagesRequested > 0)\n\t\t\t{\n\t\t\t\tLogger.warn('We have delayed requests -', this.unreadPagesRequested);\n\t\t\t\tthis.unreadPagesRequested--;\n\n\t\t\t\treturn this.requestUnread();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tLogger.warn('No more delayed requests, clearing placeholders');\n\t\t\t\tthis.$store.dispatch('messages/clearPlaceholders', {chatId: this.chatId});\n\t\t\t\tthis.isRequestingUnread = false;\n\n\t\t\t\tif (this.externalUnreadRequestResolve)\n\t\t\t\t{\n\t\t\t\t\tthis.externalUnreadRequestResolve();\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t/* endregion 06. Unread request */\n\n\t\t/* region 07. Last page request */\n\t\tscrollToLastPage()\n\t\t{\n\t\t\tLogger.warn('Load last page');\n\t\t\t//draw placeholders at the bottom\n\t\t\tthis.drawPlaceholders(RequestMode.unread).then(() => {\n\t\t\t\t//block unread and history requests\n\t\t\t\tthis.isScrolling = true;\n\t\t\t\tthis.animatedScrollToPosition({\n\t\t\t\t\tcallback: () => this.onScrollToLastPage()\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\tonScrollToLastPage()\n\t\t{\n\t\t\t//hide scroll button\n\t\t\tthis.showScrollButton = false;\n\t\t\t//set counter to 0\n\t\t\tthis.$store.dispatch('dialogues/update', {\n\t\t\t\tdialogId: this.dialogId,\n\t\t\t\tfields: {\n\t\t\t\t\tcounter: 0\n\t\t\t\t}\n\t\t\t});\n\t\t\t//clear all messages except placeholders\n\t\t\tthis.$store.dispatch('messages/clear', {chatId: this.chatId, keepPlaceholders: true});\n\t\t\t//call batch - imDialogRead, imChatGet, imDialogMessagesGet\n\t\t\tthis.$Bitrix.RestClient.get().callBatch(\n\t\t\t\tthis.prepareLastPageRequestParams(),\n\t\t\t\tresponse => this.onLastPageRequest(response)\n\t\t\t);\n\t\t},\n\t\tprepareLastPageRequestParams()\n\t\t{\n\t\t\treturn {\n\t\t\t\t[RestMethodHandler.imDialogRead]: [RestMethod.imDialogRead, {\n\t\t\t\t\tdialog_id: this.dialogId\n\t\t\t\t}],\n\t\t\t\t[RestMethodHandler.imChatGet]: [RestMethod.imChatGet, {\n\t\t\t\t\tdialog_id: this.dialogId\n\t\t\t\t}],\n\t\t\t\t[RestMethodHandler.imDialogMessagesGet]: [RestMethod.imDialogMessagesGet, {\n\t\t\t\t\tchat_id: this.chatId,\n\t\t\t\t\tlimit: this.unreadMessageLimit,\n\t\t\t\t\tconvert_text: 'Y'\n\t\t\t\t}]\n\t\t\t};\n\t\t},\n\t\tonLastPageRequest(response)\n\t\t{\n\t\t\tif (!response)\n\t\t\t{\n\t\t\t\tLogger.warn('Last page request: callBatch error');\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//imChatGet handle\n\t\t\tconst chatGetResult = response[RestMethodHandler.imChatGet];\n\t\t\tif (chatGetResult.error())\n\t\t\t{\n\t\t\t\tLogger.warn('Last page request: imChatGet error', chatGetResult.error());\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$Bitrix.Data.get('controller').executeRestAnswer(RestMethodHandler.imChatGet, chatGetResult);\n\n\t\t\t//imDialogMessagesGet handle\n\t\t\tconst lastPageMessages = response[RestMethodHandler.imDialogMessagesGet];\n\t\t\tif (lastPageMessages.error())\n\t\t\t{\n\t\t\t\tLogger.warn('Last page request: imDialogMessagesGet error', lastPageMessages.error());\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst newMessages = lastPageMessages.data().messages.reverse();\n\t\t\t//handle files and users\n\t\t\tthis.$Bitrix.Data.get('controller').executeRestAnswer(RestMethodHandler.imDialogMessagesGet, lastPageMessages);\n\t\t\t//update placeholders to real messages\n\t\t\tthis.$store.dispatch('messages/updatePlaceholders', {\n\t\t\t\tchatId: this.chatId,\n\t\t\t\tdata: newMessages,\n\t\t\t\tfirstMessage: this.pagesLoaded * this.placeholdersComposition.length,\n\t\t\t\tamount: this.placeholdersComposition.length\n\t\t\t}).then(() => {\n\t\t\t\t//get id for history requests and increase pages counter to count placeholders on next requests\n\t\t\t\tthis.lastHistoryMessageId = this.collection[0].id;\n\t\t\t\tthis.pagesLoaded += 1;\n\n\t\t\t\t//clear remaining placeholders\n\t\t\t\treturn this.$store.dispatch('messages/clearPlaceholders', {chatId: this.chatId});\n\t\t\t}).then(() => {\n\t\t\t\tthis.scrollToBottom({force: true});\n\t\t\t\t//enable history requests on scroll up\n\t\t\t\tthis.stopHistoryLoading = false;\n\t\t\t\tthis.isScrolling = false;\n\t\t\t}).catch(result => {\n\t\t\t\tLogger.warn('Unread history error', result);\n\t\t\t});\n\t\t},\n\t\t/* endregion 07. Last page request */\n\n\t\t/* region 08. Read messages */\n\t\treadVisibleMessages()\n\t\t{\n\t\t\tif (!this.windowFocused || !this.messagesSet)\n\t\t\t{\n\t\t\t\tLogger.warn('reading is disabled!');\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//need to filter that way to empty array after async method on every element was completed\n\t\t\tthis.readMessageQueue = this.readMessageQueue.filter(messageId =>\n\t\t\t{\n\t\t\t\tif (this.readMessageTarget[messageId])\n\t\t\t\t{\n\t\t\t\t\tif (this.observers[ObserverType.read])\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.observers[ObserverType.read].unobserve(this.readMessageTarget[messageId]);\n\t\t\t\t\t}\n\t\t\t\t\tdelete this.readMessageTarget[messageId];\n\t\t\t\t}\n\n\t\t\t\tthis.requestReadVisibleMessages(messageId);\n\n\t\t\t\treturn false;\n\t\t\t});\n\t\t},\n\t\trequestReadVisibleMessages(messageId)\n\t\t{\n\t\t\tEventEmitter.emit(EventType.dialog.readMessage, {id: messageId});\n\t\t},\n\t\t/* endregion 08. Read messages */\n\n\t\t/* region 09. Helpers */\n\t\tgetMessageIdsForPagination()\n\t\t{\n\t\t\t// console.warn('this.collection.length', this.collection.length);\n\t\t\t// if (this.collection.length > 0)\n\t\t\t// {\n\t\t\t// \tconsole.warn('this.collection.length', this.collection[0].id);\n\t\t\t// \tthis.lastHistoryMessageId = this.collection[0].id;\n\t\t\t// }\n\t\t\t//\n\t\t\tif (this.unreadInCollection.length > 0)\n\t\t\t{\n\t\t\t\tthis.lastUnreadMessageId = this.unreadInCollection[this.unreadInCollection.length - 1].id;\n\t\t\t}\n\t\t},\n\t\tgetFirstUnreadMessage()\n\t\t{\n\t\t\tlet unreadId = null;\n\n\t\t\tfor (let index = this.collection.length-1; index >= 0; index--)\n\t\t\t{\n\t\t\t\tif (!this.collection[index].unread)\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tunreadId = this.collection[index].id;\n\t\t\t}\n\n\t\t\treturn unreadId;\n\t\t},\n\t\tmanageScrollButton(event)\n\t\t{\n\t\t\tconst availableScrollHeight = event.target.scrollHeight - event.target.clientHeight;\n\t\t\tthis.scrollChangedByUser = this.currentScroll + this.scrollButtonDiff < availableScrollHeight;\n\n\t\t\tclearTimeout(this.scrollButtonShowTimeout);\n\t\t\tthis.scrollButtonShowTimeout = setTimeout(() =>\n\t\t\t{\n\t\t\t\tif (this.scrollChangedByUser)\n\t\t\t\t{\n\t\t\t\t\t//if user scroll and there is no scroll button - show it\n\t\t\t\t\tif (!this.showScrollButton)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.showScrollButton = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t//if not user scroll, there was scroll button and no more unread to load - hide it\n\t\t\t\t\tif (this.showScrollButton && this.remainingUnreadPages === 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.showScrollButton = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 200);\n\n\t\t\t//if we are at the bottom\n\t\t\tif (event.target.scrollTop === event.target.scrollHeight - event.target.offsetHeight)\n\t\t\t{\n\t\t\t\tclearTimeout(this.scrollButtonShowTimeout);\n\n\t\t\t\tif (this.showScrollButton && this.remainingUnreadPages === 0)\n\t\t\t\t{\n\t\t\t\t\tthis.showScrollButton = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetDateObject()\n\t\t{\n\t\t\tif (this.dateFormatFunction)\n\t\t\t{\n\t\t\t\treturn this.dateFormatFunction;\n\t\t\t}\n\n\t\t\tthis.dateFormatFunction = Object.create(BX.Main.Date);\n\t\t\tthis.dateFormatFunction._getMessage = (phrase) => this.$Bitrix.Loc.getMessage(phrase);\n\n\t\t\treturn this.dateFormatFunction;\n\t\t},\n\t\tgetDateGroup(date)\n\t\t{\n\t\t\tconst id = date.toJSON().slice(0,10);\n\t\t\tif (this.cachedDateGroups[id])\n\t\t\t{\n\t\t\t\treturn this.cachedDateGroups[id];\n\t\t\t}\n\n\t\t\tconst dateFormat = this.getDateFormat(DateFormat.groupTitle);\n\n\t\t\tthis.cachedDateGroups[id] = {\n\t\t\t\tid,\n\t\t\t\ttitle: this.getDateObject().format(dateFormat, date)\n\t\t\t};\n\n\t\t\treturn this.cachedDateGroups[id];\n\t\t},\n\t\tgetDateFormat(type)\n\t\t{\n\t\t\treturn MessengerUtils.date.getFormatType(\n\t\t\t\tBX.Messenger.Const.DateFormat[type],\n\t\t\t\tthis.$Bitrix.Loc.getMessages()\n\t\t\t);\n\t\t},\n\t\tgetDateGroupBlock(id = 0, text = '')\n\t\t{\n\t\t\treturn {\n\t\t\t\ttemplateId: 'group'+id,\n\t\t\t\ttemplateType: TemplateType.group,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t},\n\t\tgetDelimiterBlock(id = 0)\n\t\t{\n\t\t\treturn {\n\t\t\t\ttemplateId: 'delimiter'+id,\n\t\t\t\ttemplateType: TemplateType.delimiter\n\t\t\t};\n\t\t},\n\t\tgetObserver(config)\n\t\t{\n\t\t\tif (\n\t\t\t\ttypeof window.IntersectionObserver === 'undefined'\n\t\t\t\t|| config.type === ObserverType.none\n\t\t\t)\n\t\t\t{\n\t\t\t\treturn {\n\t\t\t\t\tobserve: () => {},\n\t\t\t\t\tunobserve: () => {}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet observerCallback, observerOptions;\n\n\t\t\tobserverCallback = (entries) => {\n\t\t\t\tentries.forEach(entry => {\n\t\t\t\t\tlet sendReadEvent = false;\n\t\t\t\t\tif (entry.isIntersecting)\n\t\t\t\t\t{\n\t\t\t\t\t\t//on windows with interface scaling intersectionRatio will never be 1\n\t\t\t\t\t\tif (entry.intersectionRatio >= 0.99)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsendReadEvent = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (\n\t\t\t\t\t\t\tentry.intersectionRatio > 0\n\t\t\t\t\t\t\t&& entry.rootBounds.height < entry.boundingClientRect.height + 20\n\t\t\t\t\t\t\t&& entry.intersectionRect.height > entry.rootBounds.height / 2\n\t\t\t\t\t\t)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsendReadEvent = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (sendReadEvent)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.readMessageQueue.push(entry.target.dataset.messageId);\n\t\t\t\t\t\tthis.readMessageTarget[entry.target.dataset.messageId] = entry.target;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.readMessageQueue = this.readMessageQueue.filter(messageId => messageId !== entry.target.dataset.messageId);\n\t\t\t\t\t\tdelete this.readMessageTarget[entry.target.dataset.messageId];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.enableReadMessages)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.readVisibleMessagesDelayed();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tobserverOptions = {\n\t\t\t\troot: this.$refs.body,\n\t\t\t\tthreshold: new Array(101).fill(0).map((zero, index) => index * 0.01)\n\t\t\t};\n\n\t\t\treturn new IntersectionObserver(observerCallback, observerOptions);\n\t\t},\n\t\tgetElementClass(elementId)\n\t\t{\n\t\t\tconst classWithId = DialogReferenceClassName.listItem + '-' + elementId;\n\n\t\t\treturn ['bx-im-dialog-list-item', DialogReferenceClassName.listItem, classWithId];\n\t\t},\n\t\tgetElementById(elementId)\n\t\t{\n\t\t\tconst body = this.$refs.body;\n\t\t\tconst className = DialogReferenceClassName.listItem + '-' + elementId;\n\n\t\t\treturn body.getElementsByClassName(className)[0];\n\t\t},\n\t\tgetPlaceholderClass(elementId)\n\t\t{\n\t\t\tconst classWithId = DialogReferenceClassName.listItem + '-' + elementId;\n\n\t\t\treturn ['im-skeleton-item', 'im-skeleton-item-1', 'im-skeleton-item--sm', classWithId];\n\t\t},\n\t\t/* endregion 09. Helpers */\n\t},\n\n\tdirectives:\n\t{\n\t\t'bx-im-directive-dialog-observer':\n\t\t\t{\n\t\t\t\tinserted(element, bindings, vnode)\n\t\t\t\t{\n\t\t\t\t\tif (bindings.value === ObserverType.none)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!vnode.context.observers[bindings.value])\n\t\t\t\t\t{\n\t\t\t\t\t\tvnode.context.observers[bindings.value] = vnode.context.getObserver({\n\t\t\t\t\t\t\ttype: bindings.value\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tvnode.context.observers[bindings.value].observe(element);\n\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tunbind(element, bindings, vnode)\n\t\t\t\t{\n\t\t\t\t\tif (bindings.value === ObserverType.none)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (vnode.context.observers[bindings.value])\n\t\t\t\t\t{\n\t\t\t\t\t\tvnode.context.observers[bindings.value].unobserve(element);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t},\n\t},\n\t// language=Vue\n\ttemplate: `\n\t<div class=\"bx-im-dialog\" @click=\"onDialogClick\" @touchmove=\"onDialogMove\" ref=\"container\">\n\t\t<div :class=\"bodyClasses\" @scroll.passive=\"onScroll\" ref=\"body\">\n\t\t\t<!-- Main elements loop -->\n\t\t\t<template v-for=\"(element, index) in formattedCollection\">\n\t\t\t\t<!-- Message -->\n\t\t\t\t<template v-if=\"element.templateType === TemplateType.message\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t:class=\"getElementClass(element.id)\"\n\t\t\t\t\t\t:data-message-id=\"element.id\"\n\t\t\t\t\t\t:data-template-id=\"element.templateId\"\n\t\t\t\t\t\t:data-type=\"element.templateType\" \n\t\t\t\t\t\t:key=\"element.templateId\"\n\t\t\t\t\t\tv-bx-im-directive-dialog-observer=\"element.unread? ObserverType.read: ObserverType.none\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<component :is=\"element.params.COMPONENT_ID\"\n\t\t\t\t\t\t\t:userId=\"userId\" \n\t\t\t\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t\t\t\t:chatId=\"chatId\"\n\t\t\t\t\t\t\t:message=\"element\"\n\t\t\t\t\t\t\t:enableReactions=\"enableReactions\"\n\t\t\t\t\t\t\t:enableDateActions=\"enableDateActions\"\n\t\t\t\t\t\t\t:enableCreateContent=\"showMessageMenu\"\n\t\t\t\t\t\t\t:enableGestureQuote=\"enableGestureQuote\"\n\t\t\t\t\t\t\t:enableGestureQuoteFromRight=\"enableGestureQuoteFromRight\"\n\t\t\t\t\t\t\t:enableGestureMenu=\"enableGestureMenu\"\n\t\t\t\t\t\t\t:showName=\"showMessageUserName\"\n\t\t\t\t\t\t\t:showAvatar=\"showMessageAvatar\"\n\t\t\t\t\t\t\t:showMenu=\"showMessageMenu\"\n\t\t\t\t\t\t\t:capturedMoveEvent=\"capturedMoveEvent\"\n\t\t\t\t\t\t\t:referenceContentClassName=\"DialogReferenceClassName.listItem\"\n\t\t\t\t\t\t\t:referenceContentBodyClassName=\"DialogReferenceClassName.listItemBody\"\n\t\t\t\t\t\t\t:referenceContentNameClassName=\"DialogReferenceClassName.listItemName\"\n\t\t\t\t\t\t\t@dragMessage=\"onDragMessage\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<!-- Date groups -->\n\t\t\t\t<template v-else-if=\"element.templateType === TemplateType.group\">\n\t\t\t\t\t<div class=\"bx-im-dialog-group\" :data-template-id=\"element.templateId\" :data-type=\"element.templateType\" :key=\"element.templateId\">\n\t\t\t\t\t\t<div class=\"bx-im-dialog-group-date\">{{ element.text }}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<!-- Delimiters -->\n\t\t\t\t<template v-else-if=\"element.templateType === TemplateType.delimiter\">\n\t\t\t\t\t<div class=\"bx-im-dialog-delimiter\" :data-template-id=\"element.templateId\" :data-type=\"element.templateType\" :key=\"element.templateId\"></div>\n\t\t\t\t</template>\n\t\t\t\t<!-- Placeholders -->\n\t\t\t\t<template v-else-if=\"element.templateType === TemplateType.placeholder\">\n\t\t\t\t\t<component :is=\"'Placeholder'+element.placeholderType\" :element=\"element\"/>\n\t\t\t\t</template>\n\t\t\t</template>\n\t\t\t<!-- Writing and readed statuses -->\n\t\t\t<transition name=\"bx-im-dialog-status\">\n\t\t\t\t<template v-if=\"writingStatusText\">\n\t\t\t\t\t<div class=\"bx-im-dialog-status\">\n\t\t\t\t\t\t<span class=\"bx-im-dialog-status-writing\"></span>\n\t\t\t\t\t\t{{ writingStatusText }}\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<template v-else-if=\"statusReaded\">\n\t\t\t\t\t<div class=\"bx-im-dialog-status\" @click=\"onClickOnReadList\">\n\t\t\t\t\t\t{{ statusReaded }}\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</transition>\n\t\t\t<div v-if=\"showStatusPlaceholder\" class=\"bx-im-dialog-status-placeholder\"></div>\n\t\t</div>\n\t\t<!-- Scroll button -->\n\t\t<transition name=\"bx-im-dialog-scroll-button\">\n\t\t\t<div v-show=\"showScrollButton || (unreadCounter > 0 && !isLastIdInCollection)\" class=\"bx-im-dialog-scroll-button-box\" @click=\"onScrollButtonClick\">\n\t\t\t\t<div class=\"bx-im-dialog-scroll-button\">\n\t\t\t\t\t<div v-show=\"unreadCounter\" class=\"bx-im-dialog-scroll-button-counter\">\n\t\t\t\t\t\t<div class=\"bx-im-dialog-scroll-button-counter-digit\">{{ formattedUnreadCounter }}</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"bx-im-dialog-scroll-button-arrow\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</transition>\n\t</div>\n`\n};\n\nexport {MessageList};","import { Vuex } from \"ui.vue.vuex\";\nimport { Vue } from \"ui.vue\";\n\nexport const ErrorState = {\n\tcomputed:\n\t{\n\t\t...Vuex.mapState({\n\t\t\tapplication: state => state.application,\n\t\t}),\n\t},\n\t// language=Vue\n\ttemplate: `\n\t\t<div class=\"bx-mobilechat-body\">\n\t\t\t<div class=\"bx-mobilechat-warning-window\">\n\t\t\t\t<div class=\"bx-mobilechat-warning-icon\"></div>\n\t\t\t\t<template v-if=\"application.error.description\">\n\t\t\t\t\t<div class=\"bx-mobilechat-help-title bx-mobilechat-help-title-sm bx-mobilechat-warning-msg\" v-html=\"application.error.description\"></div>\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t<div class=\"bx-mobilechat-help-title bx-mobilechat-help-title-md bx-mobilechat-warning-msg\">{{$Bitrix.Loc.getMessage('IM_DIALOG_ERROR_TITLE')}}</div>\n\t\t\t\t\t<div class=\"bx-mobilechat-help-title bx-mobilechat-help-title-sm bx-mobilechat-warning-msg\">{{$Bitrix.Loc.getMessage('IM_DIALOG_ERROR_DESC')}}</div>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\t`\n};","export const LoadingState = {\n\tdata()\n\t{\n\t\treturn {\n\t\t\tplaceholdersComposition: [],\n\t\t\tplaceholderTypes: [0,1],\n\t\t\tplaceholderModes: ['self', 'opponent'],\n\t\t\tplaceholdersCount: 20\n\t\t}\n\t},\n\tcreated()\n\t{\n\t\tfor (let i = 0; i < this.placeholdersCount; i++)\n\t\t{\n\t\t\tconst randomType = Math.floor(Math.random() * this.placeholderTypes.length);\n\t\t\tconst randomMode = Math.floor(Math.random() * this.placeholderModes.length);\n\t\t\tthis.placeholdersComposition.push({\n\t\t\t\tindex: i,\n\t\t\t\ttype: randomType,\n\t\t\t\tmode: this.placeholderModes[randomMode],\n\t\t\t\tclasses: this.getItemClasses(randomType, randomMode)\n\t\t\t});\n\t\t}\n\t},\n\tmethods:\n\t{\n\t\tgetItemClasses(type, modeIndex)\n\t\t{\n\t\t\tconst itemClasses = ['im-skeleton-item'];\n\t\t\tif (this.placeholderModes[modeIndex] === 'self')\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item-self');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item-opponent');\n\t\t\t}\n\n\t\t\tif (type === 0)\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item--sm');\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\titemClasses.push('im-skeleton-item--md');\n\t\t\t}\n\n\t\t\treturn itemClasses;\n\t\t}\n\t},\n\t// language=Vue\n\ttemplate: `\n\t\t<div class=\"bx-mobilechat-placeholder-wrap\">\n\t\t\t<div class=\"bx-mobilechat-placeholder-wrap-visible\">\n\t\t\t\t<template v-for=\"item in placeholdersComposition\">\n\t\t\t\t\t<div :class=\"item.classes\" :key=\"item.index\">\n\t\t\t\t\t\t<div v-if=\"item.mode === 'opponent'\" class=\"im-skeleton-logo\"></div>\n\t\t\t\t\t\t<div class=\"im-skeleton-content\">\n\t\t\t\t\t\t\t<template v-if=\"item.type === 0\">\n\t\t\t\t\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t\t\t\t\t<div style=\"max-width: 70%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t\t\t\t\t<div style=\"max-width: 100%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t\t\t\t\t<div style=\"max-width: 26px; margin-left: auto;\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t\t\t\t\t<div style=\"max-width: 35%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t\t\t\t\t<div style=\"max-width: 100%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"im-skeleton-line-row\">\n\t\t\t\t\t\t\t\t\t<div style=\"max-width: 55%\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t\t\t\t\t<div style=\"max-width: 26px; margin-left: auto;\" class=\"im-skeleton-line\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<div class=\"im-skeleton-like\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\t`\n};","import { Vue } from \"ui.vue\";\n\nexport const EmptyState = {\n\t// language=Vue\n\ttemplate: `\n\t\t<div class=\"bx-mobilechat-loading-window\">\n\t\t\t<h3 class=\"bx-mobilechat-help-title bx-mobilechat-help-title-md bx-mobilechat-loading-msg\">\n\t\t  \t\t{{ $Bitrix.Loc.getMessage('IM_DIALOG_EMPTY') }}\n\t\t\t</h3>\n\t\t</div>\n\t`\n};","import {Vue} from \"ui.vue\";\n\nimport { EventEmitter } from 'main.core.events';\nimport { EventType } from \"im.const\";\n\nexport const QuotePanel = {\n\t/**\n\t * @emits EventType.dialog.quotePanelClose\n\t */\n\tprops:\n\t\t{\n\t\t\tquotePanelData: {\n\t\t\t\ttype: Object,\n\t\t\t\tdefault: function() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: 0,\n\t\t\t\t\t\ttitle: '',\n\t\t\t\t\t\tdescription: '',\n\t\t\t\t\t\tcolor: ''\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tcanClose: {default: true}\n\t\t},\n\tmethods:\n\t\t{\n\t\t\tclose(event)\n\t\t\t{\n\t\t\t\tEventEmitter.emit(EventType.dialog.quotePanelClose, event);\n\t\t\t},\n\t\t},\n\tcomputed:\n\t\t{\n\t\t\tformattedTittle()\n\t\t\t{\n\t\t\t\treturn this.quotePanelData.title? this.quotePanelData.title.substr(0, 255): this.$Bitrix.Loc.getMessage('IM_QUOTE_PANEL_DEFAULT_TITLE');\n\t\t\t},\n\t\t\tformattedDescription()\n\t\t\t{\n\t\t\t\treturn this.quotePanelData.description? this.quotePanelData.description.substr(0, 255): '';\n\t\t\t},\n\t\t},\n\ttemplate: `\n\t<transition enter-active-class=\"bx-im-quote-panel-animation-show\" leave-active-class=\"bx-im-quote-panel-animation-close\">\t\t\t\t\n\t\t<div v-if=\"quotePanelData.id > 0\" class=\"bx-im-quote-panel\">\n\t\t\t<div class=\"bx-im-quote-panel-wrap\">\n\t\t\t\t<div class=\"bx-im-quote-panel-box\" :style=\"{borderLeftColor: quotePanelData.color}\">\n\t\t\t\t\t<div class=\"bx-im-quote-panel-box-title\" :style=\"{color: quotePanelData.color}\">{{formattedTittle}}</div>\n\t\t\t\t\t<div class=\"bx-im-quote-panel-box-desc\">{{formattedDescription}}</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"canClose\" class=\"bx-im-quote-panel-close\" @click=\"close\"></div>\n\t\t\t</div>\n\t\t</div>\n\t</transition>\n`\n};","/**\n * Bitrix im\n * Dialog vue component\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2021 Bitrix\n */\n\nimport 'ui.design-tokens';\nimport 'ui.fonts.opensans';\n\nimport {BitrixVue} from \"ui.vue\";\n\nimport {Logger} from \"im.lib.logger\";\nimport {Utils} from \"im.lib.utils\";\nimport {EventType, RestMethodHandler, RestMethod, DialogState} from \"im.const\";\n\nimport \"./component.css\";\nimport {MessageList} from './components/message-list/message-list';\nimport {ErrorState} from './components/error-state';\nimport {LoadingState} from './components/loading-state';\nimport {EmptyState} from './components/empty-state';\nimport {QuotePanel} from './components/quote-panel';\n\nimport {Text} from 'main.core';\nimport { EventEmitter } from \"main.core.events\";\nimport { Vuex } from \"ui.vue.vuex\";\n\nBitrixVue.component('bx-im-component-dialog',\n{\n\tcomponents: {MessageList, ErrorState, LoadingState, EmptyState, QuotePanel},\n\tprops:\n\t{\n\t\tuserId: { default: 0 },\n\t\tdialogId: { default: 0 },\n\t\tskipDataRequest: { default: false },\n\t\tshowLoadingState: {default: true},\n\t\tshowEmptyState: {default: true},\n\t\tenableGestureQuote: { default: true },\n\t\tenableGestureQuoteFromRight: { default: true },\n\t\tenableGestureMenu: { default: false },\n\t\tshowMessageUserName: { default: true },\n\t\tshowMessageAvatar: { default: true },\n\t},\n\tdata()\n\t{\n\t\treturn {\n\t\t\tmessagesSet: false,\n\t\t\tdialogState: DialogState.loading\n\t\t};\n\t},\n\tcreated()\n\t{\n\t\tEventEmitter.subscribe(EventType.dialog.messagesSet, this.onMessagesSet);\n\t\tthis.onDialogOpen();\n\t},\n\tbeforeDestroy()\n\t{\n\t\tEventEmitter.unsubscribe(EventType.dialog.messagesSet, this.onMessagesSet);\n\t},\n\twatch:\n\t{\n\t\tdialogId(newValue, oldValue)\n\t\t{\n\t\t\tLogger.warn('Switching dialogId from ', oldValue, ' to ', newValue);\n\t\t\tthis.messagesSet = false;\n\t\t\tthis.onDialogOpen();\n\t\t}\n\t},\n\tcomputed:\n\t{\n\t\tEventType: () => EventType,\n\t\tDialogState: () => DialogState,\n\n\t\tdialogWrapClasses()\n\t\t{\n\t\t\treturn ['bx-mobilechat-wrapper', {'bx-mobilechat-chat-start': this.isDialogShowingMessages}];\n\t\t},\n\t\tdialogBoxClasses()\n\t\t{\n\t\t\treturn ['bx-mobilechat-box', {'bx-mobilechat-box-dark-background': this.isDarkBackground}];\n\t\t},\n\t\tdialogBodyClasses()\n\t\t{\n\t\t\treturn ['bx-mobilechat-body', {'bx-mobilechat-body-with-message': this.dialogState === DialogState.show}];\n\t\t},\n\t\tquotePanelData()\n\t\t{\n\t\t\tconst result = {\n\t\t\t\tid: 0,\n\t\t\t\ttitle: '',\n\t\t\t\tdescription: '',\n\t\t\t\tcolor: ''\n\t\t\t};\n\n\t\t\tif (!this.isDialogShowingMessages || !this.dialog.quoteId)\n\t\t\t{\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tconst message = this.$store.getters['messages/getMessage'](this.dialog.chatId, this.dialog.quoteId);\n\t\t\tif (!message)\n\t\t\t{\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tconst user = this.$store.getters['users/get'](message.authorId);\n\t\t\tconst files = this.$store.getters['files/getList'](this.dialog.chatId);\n\n\t\t\treturn {\n\t\t\t\tid: this.dialog.quoteId,\n\t\t\t\ttitle: message.params.NAME ? Text.decode(message.params.NAME) : (user ? user.name: ''),\n\t\t\t\tcolor: user? user.color: '',\n\t\t\t\tdescription: Utils.text.purify(message.text, message.params, files, this.localize)\n\t\t\t};\n\t\t},\n\t\tisLoading()\n\t\t{\n\t\t\tif (!this.showLoadingState)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// show placeholders if we don't have chatId for current dialogId\n\t\t\t// or we have chatId, but there is no messages collection for this chatId and messages are not set yet\n\t\t\t// (because if chat is empty - there will be no messages collection, but we should not show loading state)\n\t\t\treturn !this.isChatIdInModel || (this.isChatIdInModel && !this.isMessagesModelInited && !this.messagesSet);\n\t\t},\n\t\tisEmpty()\n\t\t{\n\t\t\treturn this.showEmptyState && this.messagesSet && this.messageCollection.length === 0;\n\t\t},\n\t\tisChatIdInModel()\n\t\t{\n\t\t\tconst dialogues = this.$store.state.dialogues.collection;\n\n\t\t\treturn dialogues[this.dialogId] && dialogues[this.dialogId].chatId > 0;\n\t\t},\n\t\tisMessagesModelInited()\n\t\t{\n\t\t\tconst messages = this.$store.state.messages.collection;\n\n\t\t\treturn messages[this.chatId];\n\t\t},\n\t\tisDialogShowingMessages()\n\t\t{\n\t\t\tconst messagesNotEmpty = this.messageCollection && this.messageCollection.length > 0;\n\t\t\tif (messagesNotEmpty)\n\t\t\t{\n\t\t\t\tthis.dialogState = DialogState.show;\n\t\t\t}\n\t\t\telse if (this.dialog && this.dialog.init)\n\t\t\t{\n\t\t\t\tthis.dialogState = DialogState.empty;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.dialogState = DialogState.loading;\n\t\t\t}\n\n\t\t\treturn messagesNotEmpty;\n\t\t},\n\t\tdialog()\n\t\t{\n\t\t\tconst dialog = this.$store.getters['dialogues/get'](this.application.dialog.dialogId);\n\n\t\t\treturn dialog? dialog: this.$store.getters['dialogues/getBlank']();\n\t\t},\n\t\tchatId()\n\t\t{\n\t\t\tif (!this.application)\n\t\t\t{\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\treturn this.application.dialog.chatId;\n\t\t},\n\t\tmessageCollection()\n\t\t{\n\t\t\treturn this.$store.getters['messages/get'](this.application.dialog.chatId);\n\t\t},\n\t\tisDarkBackground()\n\t\t{\n\t\t\treturn this.application.options.darkBackground;\n\t\t},\n\t\t...Vuex.mapState({\n\t\t\tapplication: state => state.application,\n\t\t}),\n\t\tlocalize()\n\t\t{\n\t\t\treturn BitrixVue.getFilteredPhrases(['IM_DIALOG_', 'IM_UTILS_', 'IM_MESSENGER_DIALOG_', 'IM_QUOTE_'], this);\n\t\t},\n\t},\n\tmethods:\n\t{\n\t\tprepareRequestDataQuery()\n\t\t{\n\t\t\tconst query = {\n\t\t\t\t[RestMethodHandler.mobileBrowserConstGet]: [RestMethod.mobileBrowserConstGet, {}],\n\t\t\t\t[RestMethodHandler.imChatGet]: [RestMethod.imChatGet, {dialog_id: this.dialogId}],\n\t\t\t\t[RestMethodHandler.imDialogMessagesGetInit]: [RestMethod.imDialogMessagesGet, {\n\t\t\t\t\tdialog_id: this.dialogId,\n\t\t\t\t\tlimit: this.getController().application.getRequestMessageLimit(),\n\t\t\t\t\tconvert_text: 'Y'\n\t\t\t\t}],\n\t\t\t};\n\t\t\tif (Utils.dialog.isChatId(this.dialogId))\n\t\t\t{\n\t\t\t\tquery[RestMethodHandler.imUserGet] = [RestMethod.imUserGet, {}];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tquery[RestMethodHandler.imUserListGet] = [RestMethod.imUserListGet, {id: [this.userId, this.dialogId]}];\n\t\t\t}\n\n\t\t\treturn query;\n\t\t},\n\n\t\trequestData()\n\t\t{\n\t\t\tLogger.log('requesting dialog data');\n\n\t\t\tconst query = this.prepareRequestDataQuery();\n\t\t\tthis.$Bitrix.RestClient.get().callBatch(query, (response) =>\n\t\t\t{\n\t\t\t\tif (!response)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t//const.get\n\t\t\t\tlet constGetResult = response[RestMethodHandler.mobileBrowserConstGet];\n\t\t\t\tif (!constGetResult.error())\n\t\t\t\t{\n\t\t\t\t\tthis.executeRestAnswer(RestMethodHandler.mobileBrowserConstGet, constGetResult);\n\t\t\t\t}\n\n\t\t\t\t//user.get\n\t\t\t\tlet userGetResult = response[RestMethodHandler.imUserGet];\n\t\t\t\tif (userGetResult && !userGetResult.error())\n\t\t\t\t{\n\t\t\t\t\tthis.executeRestAnswer(RestMethodHandler.imUserGet, userGetResult);\n\t\t\t\t}\n\n\t\t\t\t//user.list.get\n\t\t\t\tlet userListGetResult = response[RestMethodHandler.imUserListGet];\n\t\t\t\tif (userListGetResult && !userListGetResult.error())\n\t\t\t\t{\n\t\t\t\t\tthis.executeRestAnswer(RestMethodHandler.imUserListGet, userListGetResult);\n\t\t\t\t}\n\n\t\t\t\t//chat.get\n\t\t\t\tlet chatGetResult = response[RestMethodHandler.imChatGet];\n\t\t\t\tif (!chatGetResult.error())\n\t\t\t\t{\n\t\t\t\t\tthis.executeRestAnswer(RestMethodHandler.imChatGet, chatGetResult);\n\t\t\t\t}\n\n\t\t\t\t//dialog.messages.get\n\t\t\t\tlet dialogMessagesGetResult = response[RestMethodHandler.imDialogMessagesGetInit];\n\t\t\t\tif (!dialogMessagesGetResult.error())\n\t\t\t\t{\n\t\t\t\t\tthis.$store.dispatch('application/set', {\n\t\t\t\t\t\tdialog: { enableReadMessages: true }\n\t\t\t\t\t}).then(() => {\n\t\t\t\t\t\tthis.executeRestAnswer(RestMethodHandler.imDialogMessagesGetInit, dialogMessagesGetResult);\n\t\t\t\t\t\t// this.messagesSet = true;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, false, false, Utils.getLogTrackingParams({name: 'im.dialog', dialog: this.getController().application.getDialogData()}));\n\n\t\t\treturn new Promise((resolve, reject) => resolve());\n\t\t},\n\t\tonDialogOpen()\n\t\t{\n\t\t\tif (this.isChatIdInModel)\n\t\t\t{\n\t\t\t\tconst dialogues = this.$store.state.dialogues.collection;\n\n\t\t\t\tthis.$store.commit('application/set', {dialog: {\n\t\t\t\t\tchatId: dialogues[this.dialogId].chatId,\n\t\t\t\t\tdialogId: this.dialogId,\n\t\t\t\t}});\n\t\t\t}\n\t\t\tif (!this.skipDataRequest)\n\t\t\t{\n\t\t\t\tthis.requestData();\n\t\t\t}\n\t\t},\n\t\tonMessagesSet({data: event})\n\t\t{\n\t\t\tif (event.chatId !== this.chatId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.messagesSet === true)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.messagesSet = true;\n\t\t},\n\n\t\tgetController()\n\t\t{\n\t\t\treturn this.$Bitrix.Data.get('controller');\n\t\t},\n\n\t\texecuteRestAnswer(method, queryResult, extra)\n\t\t{\n\t\t\tthis.getController().executeRestAnswer(method, queryResult, extra);\n\t\t}\n\t},\n\t// language=Vue\n\ttemplate: `\n\t\t<div :class=\"dialogWrapClasses\">\n\t\t\t<div :class=\"dialogBoxClasses\" ref=\"chatBox\">\n\t\t\t\t<!-- Error state -->\n\t\t\t\t<ErrorState v-if=\"application.error.active\" />\n\t\t\t\t<template v-else>\n\t\t\t\t\t<div :class=\"dialogBodyClasses\" key=\"with-message\">\n\t\t\t\t\t\t<!-- Loading state -->\n\t\t\t\t\t  \t<LoadingState v-if=\"isLoading\" />\n\t\t\t\t\t\t<!-- Empty state -->\n\t\t\t\t\t  \t<EmptyState v-else-if=\"isEmpty\" />\n\t\t\t\t\t\t<!-- Message list state -->\n\t\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t\t<div class=\"bx-mobilechat-dialog\">\n\t\t\t\t\t\t\t\t<MessageList\n\t\t\t\t\t\t\t\t\t:userId=\"userId\" \n\t\t\t\t\t\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t\t\t\t\t\t:messageLimit=\"application.dialog.messageLimit\"\n\t\t\t\t\t\t\t\t\t:enableReadMessages=\"application.dialog.enableReadMessages\"\n\t\t\t\t\t\t\t\t\t:enableReactions=\"true\"\n\t\t\t\t\t\t\t\t\t:enableDateActions=\"false\"\n\t\t\t\t\t\t\t\t\t:enableCreateContent=\"false\"\n\t\t\t\t\t\t\t\t\t:enableGestureQuote=\"enableGestureQuote\"\n\t\t\t\t\t\t\t\t\t:enableGestureQuoteFromRight=\"enableGestureQuoteFromRight\"\n\t\t\t\t\t\t\t\t\t:enableGestureMenu=\"enableGestureMenu\"\n\t\t\t\t\t\t\t\t\t:showMessageUserName=\"showMessageUserName\"\n\t\t\t\t\t\t\t\t\t:showMessageAvatar=\"showMessageAvatar\"\n\t\t\t\t\t\t\t\t\t:showMessageMenu=\"false\"\n\t\t\t\t\t\t\t\t />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<!-- Quote panel -->\n\t\t\t\t\t\t\t<QuotePanel :quotePanelData=\"quotePanelData\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\t`\n});"],"names":["ObserverType","Object","freeze","read","none","RequestMode","history","unread","DateFormat","groupTitle","readedTitle","Placeholder1","props","created","modes","randomIndex","Math","floor","random","length","mode","computed","itemClasses","DialogReferenceClassName","listItem","element","id","push","template","Placeholder2","Placeholder3","MessageList","userId","type","Number","dialogId","String","messageLimit","enableReadMessages","Boolean","enableReactions","enableDateActions","enableCreateContent","enableGestureQuote","enableGestureQuoteFromRight","enableGestureMenu","showMessageUserName","showMessageAvatar","showMessageMenu","components","data","messagesSet","scrollAnimating","showScrollButton","captureMove","capturedMoveEvent","lastMessageId","isRequestingHistory","historyPagesRequested","stopHistoryLoading","isRequestingUnread","unreadPagesRequested","placeholderCount","pagesLoaded","Logger","warn","initParams","initEvents","beforeDestroy","observers","clearTimeout","scrollButtonShowTimeout","clearEvents","mounted","windowFocused","MessengerUtils","platform","isBitrixMobile","document","hasFocus","getMessageIdsForPagination","scrollOnStart","watch","newValue","oldValue","$nextTick","TemplateType","localize","BitrixVue","getFilteredPhrases","dialog","$store","getters","chatId","application","collection","formattedCollection","lastMessageAuthorId","firstUnreadMessageId","lastAuthorId","dateGroups","forEach","lastHistoryMessageId","group","getDateGroup","date","title","getDateGroupBlock","authorId","getDelimiterBlock","writingStatusText","scrollToTimeout","writingList","scrollChangedByUser","setTimeout","animatedScrollToPosition","duration","text","map","userName","join","replace","statusReaded","readedList","DialogType","record","messageId","dateFormat","getDateFormat","formattedDate","getDateObject","format","filter","unreadCounter","counter","formattedUnreadCounter","scrollBlocked","device","DeviceType","mobile","isDarkBackground","options","darkBackground","isMobile","isRequestingData","remainingHistoryPages","ceil","messageCount","historyMessageLimit","remainingUnreadPages","isLastIdInCollection","unreadMessageLimit","unreadInCollection","item","message","includes","showStatusPlaceholder","bodyClasses","listBody","Vuex","mapState","state","methods","placeholdersComposition","getPlaceholdersComposition","scrollingDownThreshold","scrollingUpThreshold","messageScrollOffset","lastScroll","scrollButtonDiff","scrollPositionChangeTime","Date","getTime","lastRequestTime","lastUnreadMessageId","dateFormatFunction","cachedDateGroups","readMessageQueue","readMessageTarget","readVisibleMessagesDelayed","debounce","readVisibleMessages","requestHistoryDelayed","requestHistory","EventEmitter","subscribe","EventType","onScrollOnStart","scrollToBottom","onScrollToBottom","onReadVisibleMessages","newMessage","onNewMessage","requestUnread","onExternalUnreadRequest","onMessagesSet","beforeMobileKeyboard","onBeforeMobileKeyboard","window","addEventListener","onOrientationChange","onWindowFocus","onWindowBlur","event","$on","unsubscribe","removeEventListener","$off","onDialogClick","testNode","target","className","onCommandClick","onMentionClick","emit","clickOnDialog","onDialogMove","value","dataset","entity","nextSibling","innerHTML","command","clickOnCommand","clickOnMention","log","force","cancelIfScrollChange","scrollBeforeMobileKeyboard","body","$refs","scrollAfterMobileKeyboard","scrollHeight","scrollTop","clientHeight","scrollDiff","start","end","onClickOnReadList","clickOnReadList","list","onDragMessage","result","onScroll","isScrolling","currentScroll","isScrollingDown","isScrollingUp","scrollButtonClicked","leftSpaceBottom","onScrollDown","onScrollUp","manageScrollButton","drawPlaceholders","then","projectedPagesToLoad","currentBodyHeight","isOverflowAnchorSupported","enableUserScroll","heightDifference","disableUserScroll","forceScrollToPosition","browser","isIe","isSafari","isSafariBased","classList","add","remove","onScrollButtonClick","scrollToLastPage","availableScrollHeight","scrollToFirstUnreadMessage","messageElement","getElementById","scrollToMessage","externalUnreadRequestResolve","Promise","resolve","reject","unreadId","getFirstUnreadMessage","scrollToMessageId","scrollParams","stickToTop","offsetTop","offsetHeight","position","animateScrollId","Animation","cancel","params","callback","isIos","getIosVersion","increment","container","elementProperty","requestMode","pagesCount","limit","placeholders","generatePlaceholders","dispatch","amount","i","j","templateType","placeholder","placeholderType","sort","$Bitrix","RestClient","get","callMethod","RestMethod","imDialogMessagesGet","chat_id","last_id","convert_text","newMessages","messages","Data","executeRestAnswer","RestMethodHandler","firstMessage","onAfterHistoryRequest","firstPlaceholderId","prepareUnreadRequestParams","imDialogRead","dialog_id","message_id","imChatGet","imDialogMessagesGetUnread","first_id","emitAsync","readMessage","skipTimer","skipAjax","callBatch","response","onUnreadRequest","chatGetResult","error","dialogMessageUnread","onAfterUnreadRequest","onScrollToLastPage","fields","keepPlaceholders","prepareLastPageRequestParams","onLastPageRequest","lastPageMessages","reverse","unobserve","requestReadVisibleMessages","index","create","BX","Main","_getMessage","phrase","Loc","getMessage","toJSON","slice","getFormatType","Messenger","Const","getMessages","templateId","delimiter","getObserver","config","IntersectionObserver","observe","observerCallback","observerOptions","entries","entry","sendReadEvent","isIntersecting","intersectionRatio","rootBounds","height","boundingClientRect","intersectionRect","root","threshold","Array","fill","zero","getElementClass","elementId","classWithId","getElementsByClassName","getPlaceholderClass","directives","inserted","bindings","vnode","context","unbind","ErrorState","LoadingState","placeholderTypes","placeholderModes","placeholdersCount","randomType","randomMode","classes","getItemClasses","modeIndex","EmptyState","QuotePanel","quotePanelData","description","color","canClose","close","quotePanelClose","formattedTittle","substr","formattedDescription","component","skipDataRequest","showLoadingState","showEmptyState","dialogState","DialogState","loading","onDialogOpen","dialogWrapClasses","isDialogShowingMessages","dialogBoxClasses","dialogBodyClasses","show","quoteId","user","files","NAME","Text","decode","name","Utils","purify","isLoading","isChatIdInModel","isMessagesModelInited","isEmpty","messageCollection","dialogues","messagesNotEmpty","init","empty","prepareRequestDataQuery","query","mobileBrowserConstGet","imDialogMessagesGetInit","getController","getRequestMessageLimit","isChatId","imUserGet","imUserListGet","requestData","constGetResult","userGetResult","userListGetResult","dialogMessagesGetResult","getLogTrackingParams","getDialogData","commit","method","queryResult","extra"],"mappings":";;;;;CAAO,IAAMA,YAAY,GAAGC,MAAM,CAACC,MAAM,CAAC;GACzCC,IAAI,EAAE,MAAM;GACZC,IAAI,EAAE;CACP,CAAC,CAAC;AACF,CAAO,IAAMC,WAAW,GAAGJ,MAAM,CAACC,MAAM,CAAC;GACxCI,OAAO,EAAE,SAAS;GAClBC,MAAM,EAAE;CACT,CAAC,CAAC;AACF,CAAO,IAAMC,UAAU,GAAGP,MAAM,CAACC,MAAM,CAAC;GACvCO,UAAU,EAAE,YAAY;GACxBC,WAAW,EAAE;CACd,CAAC,CAAC;;CCTK,IAAMC,YAAY,GAAG;GAC3BC,KAAK,EAAE,CAAC,SAAS,CAAC;GAClBC,OAAO,qBACP;KACC,IAAMC,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;KAClC,IAAMC,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAGJ,KAAK,CAACK,MAAM,CAAC;KAC5D,IAAI,CAACC,IAAI,GAAGN,KAAK,CAACC,WAAW,CAAC;IAC9B;GACDM,QAAQ,EACR;KACCC,WAAW,yBACX;OACC,IAAMA,WAAW,GAAG,CAAC,kBAAkB,EAAE,sBAAsB,YAAKC,iCAAwB,CAACC,QAAQ,cAAI,IAAI,CAACC,OAAO,CAACC,EAAE,EAAG;OAC3H,IAAI,IAAI,CAACN,IAAI,KAAK,MAAM,EACxB;SACCE,WAAW,CAACK,IAAI,CAAC,uBAAuB,CAAC;QACzC,MAED;SACCL,WAAW,CAACK,IAAI,CAAC,2BAA2B,CAAC;;OAG9C,OAAOL,WAAW;;IAEnB;GACDM,QAAQ;CAeT,CAAC;;CCxCM,IAAMC,YAAY,GAAG;GAC3BjB,KAAK,EAAE,CAAC,SAAS,CAAC;GAClBC,OAAO,qBACP;KACC,IAAMC,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;KAClC,IAAMC,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAGJ,KAAK,CAACK,MAAM,CAAC;KAC5D,IAAI,CAACC,IAAI,GAAGN,KAAK,CAACC,WAAW,CAAC;IAC9B;GACDM,QAAQ,EACR;KACCC,WAAW,yBACX;OACC,IAAMA,WAAW,GAAG,CAAC,kBAAkB,EAAE,sBAAsB,YAAKC,iCAAwB,CAACC,QAAQ,cAAI,IAAI,CAACC,OAAO,CAACC,EAAE,EAAG;OAC3H,IAAI,IAAI,CAACN,IAAI,KAAK,MAAM,EACxB;SACCE,WAAW,CAACK,IAAI,CAAC,uBAAuB,CAAC;QACzC,MAED;SACCL,WAAW,CAACK,IAAI,CAAC,2BAA2B,CAAC;;OAG9C,OAAOL,WAAW;;IAEnB;GACDM,QAAQ;CAkBT,CAAC;;CC3CM,IAAME,YAAY,GAAG;GAC3BlB,KAAK,EAAE,CAAC,SAAS,CAAC;GAClBC,OAAO,qBACP;KACC,IAAMC,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;KAClC,IAAMC,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAGJ,KAAK,CAACK,MAAM,CAAC;KAC5D,IAAI,CAACC,IAAI,GAAGN,KAAK,CAACC,WAAW,CAAC;IAC9B;GACDM,QAAQ,EACR;KACCC,WAAW,yBACX;OACC,IAAMA,WAAW,GAAG,CAAC,kBAAkB,EAAE,sBAAsB,YAAKC,iCAAwB,CAACC,QAAQ,cAAI,IAAI,CAACC,OAAO,CAACC,EAAE,EAAG;OAC3H,IAAI,IAAI,CAACN,IAAI,KAAK,MAAM,EACxB;SACCE,WAAW,CAACK,IAAI,CAAC,uBAAuB,CAAC;QACzC,MAED;SACCL,WAAW,CAACK,IAAI,CAAC,2BAA2B,CAAC;;OAG9C,OAAOL,WAAW;;IAEnB;GACDM,QAAQ;CAoBT,CAAC;;;;AC/CD,CA0BA,IAAMG,WAAW,GAAG;;CAEpB;CACA;CACA;CACA;CACA;CACA;GACCnB,KAAK,EACL;KACCoB,MAAM,EAAE;OAAEC,IAAI,EAAEC,MAAM;OAAE,WAAS;MAAG;KACpCC,QAAQ,EAAE;OAAEF,IAAI,EAAEG,MAAM;OAAE,WAAS;MAAK;KACxCC,YAAY,EAAE;OAAEJ,IAAI,EAAEC,MAAM;OAAE,WAAS;MAAI;KAC3CI,kBAAkB,EAAE;OAAEL,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAM;KACpDC,eAAe,EAAE;OAAEP,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAM;KACjDE,iBAAiB,EAAE;OAAER,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAM;KACnDG,mBAAmB,EAAE;OAAET,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAM;KACrDI,kBAAkB,EAAE;OAAEV,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAM;KACpDK,2BAA2B,EAAE;OAAEX,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAM;KAC7DM,iBAAiB,EAAE;OAAEZ,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAO;KACpDO,mBAAmB,EAAE;OAAEb,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAM;KACrDQ,iBAAiB,EAAE;OAAEd,IAAI,EAAEM,OAAO;OAAE,WAAS;MAAM;KACnDS,eAAe,EAAE;OAAEf,IAAI,EAAEM,OAAO;OAAE,WAAS;;IAC3C;GACDU,UAAU,EAAE;KAACtC,YAAY,EAAZA,YAAY;KAAEkB,YAAY,EAAZA,YAAY;KAAEC,YAAY,EAAZA;IAAa;GACtDoB,IAAI,kBACJ;KACC,OAAO;OACNC,WAAW,EAAE,KAAK;OAClBC,eAAe,EAAE,KAAK;OACtBC,gBAAgB,EAAE,KAAK;OACvBC,WAAW,EAAE,KAAK;OAClBC,iBAAiB,EAAE,IAAI;OACvBC,aAAa,EAAE,IAAI;OAEnBC,mBAAmB,EAAE,KAAK;OAC1BC,qBAAqB,EAAE,CAAC;OACxBC,kBAAkB,EAAE,KAAK;OACzBC,kBAAkB,EAAE,KAAK;OACzBC,oBAAoB,EAAE,CAAC;OACvBC,gBAAgB,EAAE,CAAC;OACnBC,WAAW,EAAE;MACb;IACD;GACDlD,OAAO,qBACP;KACCmD,oBAAM,CAACC,IAAI,CAAC,kCAAkC,CAAC;KAC/C,IAAI,CAACC,UAAU,EAAE;KACjB,IAAI,CAACC,UAAU,EAAE;IACjB;GACDC,aAAa,2BACb;KACC,IAAI,CAACC,SAAS,GAAG,EAAE;KACnBC,YAAY,CAAC,IAAI,CAACC,uBAAuB,CAAC;KAC1C,IAAI,CAACC,WAAW,EAAE;IAClB;GACDC,OAAO,qBACP;KACC,IAAI,CAACC,aAAa,GAAGC,kBAAc,CAACC,QAAQ,CAACC,cAAc,EAAE,GAAE,IAAI,GAAEC,QAAQ,CAACC,QAAQ,EAAE;KACxF,IAAI,CAACC,0BAA0B,EAAE;KACjC,IAAI,CAACC,aAAa,EAAE;IACpB;GACDC,KAAK,EACL;;;KAGC/C,QAAQ,oBAACgD,QAAQ,EAAEC,QAAQ,EAC3B;OAAA;OACCpB,oBAAM,CAACC,IAAI,CAAC,8BAA8B,EAAEkB,QAAQ,CAAC;OACrD,IAAI,CAAChC,WAAW,GAAG,KAAK;OACxB,IAAI,CAACkC,SAAS,CAAC,YAAM;SACpB,KAAI,CAACJ,aAAa,EAAE;QACpB,CAAC;;IAEH;GACD5D,QAAQ;KAEPiE,YAAY,EAAE;OAAA,OAAMA,2BAAY;;KAChCtF,YAAY,EAAE;OAAA,OAAMA,YAAY;;KAChCuB,wBAAwB,EAAE;OAAA,OAAMA,iCAAwB;;KACxDgE,QAAQ,sBACR;OACC,OAAOC,gBAAS,CAACC,kBAAkB,CAAC,sBAAsB,EAAE,IAAI,CAAC;MACjE;KACDC,MAAM,oBACN;OACC,IAAMA,MAAM,GAAG,IAAI,CAACC,MAAM,CAACC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAACzD,QAAQ,CAAC;OAElE,OAAOuD,MAAM,GAAEA,MAAM,GAAE,IAAI,CAACC,MAAM,CAACC,OAAO,CAAC,oBAAoB,CAAC,EAAE;MAClE;KACDC,MAAM,oBACN;OACC,IAAI,IAAI,CAACC,WAAW,EACpB;SACC,OAAO,IAAI,CAACA,WAAW,CAACJ,MAAM,CAACG,MAAM;;MAEtC;KACDE,UAAU,wBACV;OACC,OAAO,IAAI,CAACJ,MAAM,CAACC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAACC,MAAM,CAAC;MACvD;KACDG,mBAAmB,iCACnB;OAAA;OACC,IAAI,CAACxC,aAAa,GAAG,CAAC,CAAC;OACvB,IAAI,CAACyC,mBAAmB,GAAG,CAAC,CAAC;OAC7B,IAAI,CAACC,oBAAoB,GAAG,CAAC;OAE7B,IAAIC,YAAY,GAAG,CAAC,CAAC;OACrB,IAAMC,UAAU,GAAG,EAAE,CAAC;OACtB,IAAML,UAAU,GAAG,EAAE,CAAC;;OAEtB,IAAI,CAACA,UAAU,CAACM,OAAO,CAAC,UAAA5E,OAAO,EAC/B;SACC,IAAI,MAAI,CAAC0B,WAAW,KAAK,MAAI,CAACmD,oBAAoB,KAAK,IAAI,IAAI,MAAI,CAACA,oBAAoB,GAAG7E,OAAO,CAACC,EAAE,CAAC,EACtG;WACCsC,oBAAM,CAACC,IAAI,CAAC,kCAAkC,EAAExC,OAAO,CAACC,EAAE,CAAC;WAC3D,MAAI,CAAC4E,oBAAoB,GAAG7E,OAAO,CAACC,EAAE;;SAGvC,MAAI,CAAC8B,aAAa,GAAG/B,OAAO,CAACC,EAAE;SAE/B,IAAI6E,KAAK,GAAG,MAAI,CAACC,YAAY,CAAC/E,OAAO,CAACgF,IAAI,CAAC;SAC3C,IAAI,CAACL,UAAU,CAACG,KAAK,CAACG,KAAK,CAAC,EAC5B;WACCN,UAAU,CAACG,KAAK,CAACG,KAAK,CAAC,GAAGH,KAAK,CAAC7E,EAAE;WAClCqE,UAAU,CAACpE,IAAI,CAAC,MAAI,CAACgF,iBAAiB,CAACJ,KAAK,CAAC7E,EAAE,EAAE6E,KAAK,CAACG,KAAK,CAAC,CAAC;UAC9D,MACI,IAAIP,YAAY,KAAK1E,OAAO,CAACmF,QAAQ,EAC1C;WACCb,UAAU,CAACpE,IAAI,CAAC,MAAI,CAACkF,iBAAiB,CAACpF,OAAO,CAACC,EAAE,CAAC,CAAC;;SAGpD,IAAID,OAAO,CAAClB,MAAM,IAAI,CAAC,MAAI,CAAC2F,oBAAoB,EAChD;WACC,MAAI,CAACA,oBAAoB,GAAGzE,OAAO,CAACC,EAAE;;SAGvCqE,UAAU,CAACpE,IAAI,CAACF,OAAO,CAAC;SACxB0E,YAAY,GAAG1E,OAAO,CAACmF,QAAQ;QAC/B,CAAC;;;OAGF,IAAI,CAACX,mBAAmB,GAAGE,YAAY;OAEvC,OAAOJ,UAAU;MACjB;KACDe,iBAAiB,+BACjB;OAAA;OACCxC,YAAY,CAAC,IAAI,CAACyC,eAAe,CAAC;OAElC,IAAI,IAAI,CAACrB,MAAM,CAACsB,WAAW,CAAC7F,MAAM,KAAK,CAAC,EACxC;SACC,OAAO,EAAE;;;;OAIV,IAAI,CAAC,IAAI,CAAC8F,mBAAmB,IAAI,CAAC,IAAI,CAAC5D,gBAAgB,EACvD;SACC,IAAI,CAAC0D,eAAe,GAAGG,UAAU,CAAC;WAAA,OAAM,MAAI,CAACC,wBAAwB,CAAC;aAACC,QAAQ,EAAE;YAAI,CAAC;YAAE,GAAG,CAAC;;OAG7F,IAAMC,IAAI,GAAG,IAAI,CAAC3B,MAAM,CAACsB,WAAW,CAACM,GAAG,CAAC,UAAA7F,OAAO;SAAA,OAAIA,OAAO,CAAC8F,QAAQ;SAAC,CAACC,IAAI,CAAC,IAAI,CAAC;OAEhF,OAAO,IAAI,CAACjC,QAAQ,CAAC,oCAAoC,CAAC,CAACkC,OAAO,CAAC,QAAQ,EAAEJ,IAAI,CAAC;MAClF;KACDK,YAAY,0BACZ;OAAA;OACCpD,YAAY,CAAC,IAAI,CAACyC,eAAe,CAAC;OAElC,IAAI,IAAI,CAACrB,MAAM,CAACiC,UAAU,CAACxG,MAAM,KAAK,CAAC,EACvC;SACC,OAAO,EAAE;;OAGV,IAAIkG,IAAI,GAAG,EAAE;OAEb,IAAI,IAAI,CAAC3B,MAAM,CAACzD,IAAI,KAAK2F,mBAAU,WAAQ,EAC3C;SACC,IAAMC,MAAM,GAAG,IAAI,CAACnC,MAAM,CAACiC,UAAU,CAAC,CAAC,CAAC;SACxC,IACCE,MAAM,CAACC,SAAS,KAAK,IAAI,CAACtE,aAAa,IACpCqE,MAAM,CAAC7F,MAAM,KAAK,IAAI,CAACiE,mBAAmB,EAE9C;WACC,IAAM8B,UAAU,GAAG,IAAI,CAACC,aAAa,CAACxH,UAAU,CAACE,WAAW,CAAC;WAC7D,IAAMuH,aAAa,GAAG,IAAI,CAACC,aAAa,EAAE,CAACC,MAAM,CAACJ,UAAU,EAAEF,MAAM,CAACpB,IAAI,CAAC;WAC1EY,IAAI,GAAG,IAAI,CAAC9B,QAAQ,CAAC,0CAA0C,CAAC,CAACkC,OAAO,CAAC,QAAQ,EAAEQ,aAAa,CAAC;;QAElG,MAED;SACC,IAAMN,UAAU,GAAG,IAAI,CAACjC,MAAM,CAACiC,UAAU,CAACS,MAAM,CAAC,UAAAP,MAAM,EAAI;WAC1D,OAAOA,MAAM,CAACC,SAAS,KAAK,MAAI,CAACtE,aAAa,IAAIqE,MAAM,CAAC7F,MAAM,KAAK,MAAI,CAACiE,mBAAmB;UAC5F,CAAC;SACF,IAAI0B,UAAU,CAACxG,MAAM,KAAK,CAAC,EAC3B;WACCkG,IAAI,GAAG,IAAI,CAAC9B,QAAQ,CAAC,0CAA0C,CAAC,CAACkC,OAAO,CACvE,SAAS,EAAEE,UAAU,CAAC,CAAC,CAAC,CAACJ,QAAQ,CACjC;UACD,MACI,IAAII,UAAU,CAACxG,MAAM,GAAG,CAAC,EAC9B;WACCkG,IAAI,GAAG,IAAI,CAAC9B,QAAQ,CAAC,0CAA0C,CAAC,CAACkC,OAAO,CACvE,SAAS,EACT,IAAI,CAAClC,QAAQ,CAAC,iDAAiD,CAAC,CAC9DkC,OAAO,CAAC,QAAQ,EAAEE,UAAU,CAAC,CAAC,CAAC,CAACJ,QAAQ,CAAC,CACzCE,OAAO,CAAC,SAAS,EAAEE,UAAU,CAACxG,MAAM,GAAC,CAAC,CAAC,CACvCsG,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CACrBA,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CACxB;;;OAIH,IAAI,CAACJ,IAAI,EACT;SACC,OAAO,EAAE;;;;OAIV,IAAI,CAAC,IAAI,CAACJ,mBAAmB,IAAI,CAAC,IAAI,CAAC5D,gBAAgB,EACvD;SACC,IAAI,CAAC0D,eAAe,GAAGG,UAAU,CAAC;WAAA,OAAM,MAAI,CAACC,wBAAwB,CAAC;aAACC,QAAQ,EAAE;YAAI,CAAC;YAAE,GAAG,CAAC;;OAG7F,OAAOC,IAAI;MACX;KACDgB,aAAa,2BACb;OACC,OAAO,IAAI,CAAC3C,MAAM,CAAC4C,OAAO,GAAG,EAAE,GAAE,GAAG,GAAE,IAAI,CAAC5C,MAAM,CAAC4C,OAAO;MACzD;KACDC,sBAAsB,oCACtB;OACC,OAAO,IAAI,CAACF,aAAa,GAAG,EAAE,GAAG,KAAK,GAAE,IAAI,CAACA,aAAa;MAC1D;KACDG,aAAa,2BACb;OACC,IAAI,IAAI,CAAC1C,WAAW,CAAC2C,MAAM,CAACxG,IAAI,KAAKyG,mBAAU,CAACC,MAAM,EACtD;SACC,OAAO,KAAK;;OAGb,OAAO,IAAI,CAACvF,eAAe,IAAI,IAAI,CAACE,WAAW;MAC/C;KACDsF,gBAAgB,8BAChB;OACC,OAAO,IAAI,CAAC9C,WAAW,CAAC+C,OAAO,CAACC,cAAc;MAC9C;KACDC,QAAQ,sBACR;OACC,OAAO,IAAI,CAACjD,WAAW,CAAC2C,MAAM,CAACxG,IAAI,KAAKyG,mBAAU,CAACC,MAAM;MACzD;;KAEDK,gBAAgB,8BAChB;OACC,OAAO,IAAI,CAACvF,mBAAmB,IAAI,IAAI,CAACG,kBAAkB;MAC1D;KACDqF,qBAAqB,mCACrB;OACC,OAAOjI,IAAI,CAACkI,IAAI,CAAC,CAAC,IAAI,CAACxD,MAAM,CAACyD,YAAY,GAAG,IAAI,CAACpD,UAAU,CAAC5E,MAAM,IAAI,IAAI,CAACiI,mBAAmB,CAAC;MAChG;KACDC,oBAAoB,kCACpB;;;OAGC,IAAI,IAAI,CAACC,oBAAoB,EAC7B;SACC,OAAO,CAAC;;OAGT,OAAOtI,IAAI,CAACkI,IAAI,CAAC,CAAC,IAAI,CAACxD,MAAM,CAACyD,YAAY,GAAG,IAAI,CAACpD,UAAU,CAAC5E,MAAM,IAAI,IAAI,CAACoI,kBAAkB,CAAC;MAC/F;KACDC,kBAAkB,gCAClB;OACC,OAAO,IAAI,CAACzD,UAAU,CAACqC,MAAM,CAAC,UAAAqB,IAAI,EAAI;SACrC,OAAOA,IAAI,CAAClJ,MAAM,KAAK,IAAI;QAC3B,CAAC;MACF;KACD+I,oBAAoB,kCACpB;OACC,OAAO,IAAI,CAACvD,UAAU,CAACuB,GAAG,CAAC,UAAAoC,OAAO;SAAA,OAAIA,OAAO,CAAChI,EAAE;SAAC,CAACiI,QAAQ,CAAC,IAAI,CAACjE,MAAM,CAAClC,aAAa,CAAC;MACrF;KACDoG,qBAAqB,mCACrB;OACC,OAAO,CAAC,IAAI,CAAC9C,iBAAiB,IAAI,CAAC,IAAI,CAACY,YAAY;MACpD;KACDmC,WAAW,yBACX;OACC,OAAO,CAACtI,iCAAwB,CAACuI,QAAQ,EAAE;SAC1C,kCAAkC,EAAE,IAAI,CAACtB,aAAa;SACtD,8BAA8B,EAAE,IAAI,CAACI,gBAAgB;SACrD,qBAAqB,EAAE,IAAI,CAACG;QAC5B,CAAC;;MAEAgB,gBAAI,CAACC,QAAQ,CAAC;KAChBlE,WAAW,EAAE,qBAAAmE,KAAK;OAAA,OAAIA,KAAK,CAACnE,WAAW;;IACvC,CAAC,CACF;GACDoE,OAAO,EACP;sCAEChG,UAAU,wBACV;OACC,IAAI,CAACiG,uBAAuB,GAAG,IAAI,CAACC,0BAA0B,EAAE;OAChE,IAAI,CAAChB,mBAAmB,GAAG,EAAE;OAC7B,IAAI,CAACG,kBAAkB,GAAG,EAAE;OAC5B,IAAI,CAAClG,gBAAgB,GAAG,IAAI,CAACgF,aAAa,GAAG,CAAC;OAE9C,IAAI,CAACgC,sBAAsB,GAAG,IAAI;OAClC,IAAI,CAACC,oBAAoB,GAAG,IAAI;OAChC,IAAI,CAACC,mBAAmB,GAAG,EAAE;OAE7B,IAAI,CAACC,UAAU,GAAG,CAAC;OACnB,IAAI,CAACvD,mBAAmB,GAAG,KAAK;OAChC,IAAI,CAACwD,gBAAgB,GAAG,GAAG;OAC3B,IAAI,CAAClG,uBAAuB,GAAG,IAAI;OACnC,IAAI,CAACmG,wBAAwB,GAAG,IAAIC,IAAI,EAAE,CAACC,OAAO,EAAE;OACpD,IAAI,CAACC,eAAe,GAAG,IAAIF,IAAI,EAAE,CAACC,OAAO,EAAE;OAE3C,IAAI,CAACvG,SAAS,GAAG,EAAE;OAEnB,IAAI,CAAC8B,YAAY,GAAG,CAAC;OACrB,IAAI,CAACG,oBAAoB,GAAG,IAAI;OAChC,IAAI,CAACJ,oBAAoB,GAAG,IAAI;OAChC,IAAI,CAAC4E,mBAAmB,GAAG,IAAI;OAC/B,IAAI,CAACC,kBAAkB,GAAG,IAAI;OAC9B,IAAI,CAACC,gBAAgB,GAAG,EAAE;OAE1B,IAAI,CAACC,gBAAgB,GAAG,EAAE;OAC1B,IAAI,CAACC,iBAAiB,GAAG,EAAE;OAC3B,IAAI,CAACC,0BAA0B,GAAGxG,kBAAc,CAACyG,QAAQ,CAAC,IAAI,CAACC,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC;OAC7F,IAAI,CAACC,qBAAqB,GAAG3G,kBAAc,CAACyG,QAAQ,CAAC,IAAI,CAACG,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC;MACnF;KACDpH,UAAU,wBACV;OACCqH,6BAAY,CAACC,SAAS,CAACC,kBAAS,CAAChG,MAAM,CAACT,aAAa,EAAE,IAAI,CAAC0G,eAAe,CAAC;OAC5EH,6BAAY,CAACC,SAAS,CAACC,kBAAS,CAAChG,MAAM,CAACkG,cAAc,EAAE,IAAI,CAACC,gBAAgB,CAAC;OAC9EL,6BAAY,CAACC,SAAS,CAACC,kBAAS,CAAChG,MAAM,CAAC2F,mBAAmB,EAAE,IAAI,CAACS,qBAAqB,CAAC;OACxFN,6BAAY,CAACC,SAAS,CAACC,kBAAS,CAAChG,MAAM,CAACqG,UAAU,EAAE,IAAI,CAACC,YAAY,CAAC;OACtER,6BAAY,CAACC,SAAS,CAACC,kBAAS,CAAChG,MAAM,CAACuG,aAAa,EAAE,IAAI,CAACC,uBAAuB,CAAC;OACpFV,6BAAY,CAACC,SAAS,CAACC,kBAAS,CAAChG,MAAM,CAACvC,WAAW,EAAE,IAAI,CAACgJ,aAAa,CAAC;OACxEX,6BAAY,CAACC,SAAS,CAACC,kBAAS,CAAChG,MAAM,CAAC0G,oBAAoB,EAAE,IAAI,CAACC,sBAAsB,CAAC;OAE1FC,MAAM,CAACC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAACC,mBAAmB,CAAC;OACtEF,MAAM,CAACC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACE,aAAa,CAAC;OACpDH,MAAM,CAACC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAACG,YAAY,CAAC;OAElDlH,gBAAS,CAACmH,KAAK,CAACC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAACH,aAAa,CAAC;OACxEjH,gBAAS,CAACmH,KAAK,CAACC,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAACF,YAAY,CAAC;MACtE;KACDlI,WAAW,yBACX;OACCgH,6BAAY,CAACqB,WAAW,CAACnB,kBAAS,CAAChG,MAAM,CAACT,aAAa,EAAE,IAAI,CAAC0G,eAAe,CAAC;OAC9EH,6BAAY,CAACqB,WAAW,CAACnB,kBAAS,CAAChG,MAAM,CAACkG,cAAc,EAAE,IAAI,CAACC,gBAAgB,CAAC;OAChFL,6BAAY,CAACqB,WAAW,CAACnB,kBAAS,CAAChG,MAAM,CAAC2F,mBAAmB,EAAE,IAAI,CAACS,qBAAqB,CAAC;OAC1FN,6BAAY,CAACqB,WAAW,CAACnB,kBAAS,CAAChG,MAAM,CAACqG,UAAU,EAAE,IAAI,CAACC,YAAY,CAAC;OACxER,6BAAY,CAACqB,WAAW,CAACnB,kBAAS,CAAChG,MAAM,CAACuG,aAAa,EAAE,IAAI,CAACC,uBAAuB,CAAC;OACtFV,6BAAY,CAACqB,WAAW,CAACnB,kBAAS,CAAChG,MAAM,CAACvC,WAAW,EAAE,IAAI,CAACgJ,aAAa,CAAC;OAC1EX,6BAAY,CAACqB,WAAW,CAACnB,kBAAS,CAAChG,MAAM,CAAC0G,oBAAoB,EAAE,IAAI,CAACC,sBAAsB,CAAC;OAE5FC,MAAM,CAACQ,mBAAmB,CAAC,mBAAmB,EAAE,IAAI,CAACN,mBAAmB,CAAC;OACzEF,MAAM,CAACQ,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACL,aAAa,CAAC;OACvDH,MAAM,CAACQ,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAACJ,YAAY,CAAC;OAErDlH,gBAAS,CAACmH,KAAK,CAACI,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAACN,aAAa,CAAC;OACzEjH,gBAAS,CAACmH,KAAK,CAACI,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAACL,YAAY,CAAC;MACvE;;;KAIDM,aAAa,yBAACL,KAAK,EACnB;OACC,IAAInH,gBAAS,CAACyH,QAAQ,CAACN,KAAK,CAACO,MAAM,EAAE;SAACC,SAAS,EAAE;QAAwB,CAAC,EAC1E;SACC,IAAI,CAACC,cAAc,CAACT,KAAK,CAAC;QAC1B,MACI,IAAInH,gBAAS,CAACyH,QAAQ,CAACN,KAAK,CAACO,MAAM,EAAE;SAACC,SAAS,EAAE;QAAgB,CAAC,EACvE;SACC,IAAI,CAACE,cAAc,CAACV,KAAK,CAAC;;OAG3B,IAAI,CAACjI,aAAa,GAAG,IAAI;OACzB8G,6BAAY,CAAC8B,IAAI,CAAC5B,kBAAS,CAAChG,MAAM,CAAC6H,aAAa,EAAE;SAACZ,KAAK,EAALA;QAAM,CAAC;MAC1D;KACDa,YAAY,wBAACb,KAAK,EAClB;OACC,IAAI,CAAC,IAAI,CAACrJ,WAAW,EACrB;SACC;;OAGD,IAAI,CAACC,iBAAiB,GAAGoJ,KAAK;MAC9B;KACDS,cAAc,0BAACT,KAAK,EACpB;OACC,IAAIc,KAAK,GAAG,EAAE;OAEd,IACCd,KAAK,CAACO,MAAM,CAACQ,OAAO,CAACC,MAAM,KAAK,MAAM,IACnChB,KAAK,CAACO,MAAM,CAACQ,OAAO,CAACC,MAAM,KAAK,KAAK,EAEzC;SACCF,KAAK,GAAGd,KAAK,CAACO,MAAM,CAACU,WAAW,CAACC,SAAS;QAC1C,MACI,IAAIlB,KAAK,CAACO,MAAM,CAACQ,OAAO,CAACC,MAAM,KAAK,MAAM,EAC/C;SACCF,KAAK,GAAGd,KAAK,CAACO,MAAM,CAACQ,OAAO,CAACI,OAAO;;OAGrCtC,6BAAY,CAAC8B,IAAI,CAAC5B,kBAAS,CAAChG,MAAM,CAACqI,cAAc,EAAE;SAAC9L,IAAI,EAAE0K,KAAK,CAACO,MAAM,CAACQ,OAAO,CAACC,MAAM;SAAEF,KAAK,EAALA,KAAK;SAAEd,KAAK,EAALA;QAAM,CAAC;MACrG;KACDU,cAAc,0BAACV,KAAK,EACpB;OACCnB,6BAAY,CAAC8B,IAAI,CAAC5B,kBAAS,CAAChG,MAAM,CAACsI,cAAc,EAAE;SAClD/L,IAAI,EAAE0K,KAAK,CAACO,MAAM,CAACQ,OAAO,CAACzL,IAAI;SAC/BwL,KAAK,EAAEd,KAAK,CAACO,MAAM,CAACQ,OAAO,CAACD,KAAK;SACjCd,KAAK,EAALA;QACA,CAAC;MACF;KACDH,mBAAmB,iCACnB;OAAA;OACClI,YAAY,CAAC,IAAI,CAACyC,eAAe,CAAC;OAElC,IAAI,IAAI,CAACjB,WAAW,CAAC2C,MAAM,CAACxG,IAAI,KAAKyG,mBAAU,CAACC,MAAM,EACtD;SACC,OAAO,KAAK;;OAGb3E,oBAAM,CAACiK,GAAG,CAAC,qBAAqB,CAAC;OAEjC,IAAI,CAAC,IAAI,CAAChH,mBAAmB,EAC7B;SACC,IAAI,CAACF,eAAe,GAAGG,UAAU,CAAC;WAAA,OAAM,MAAI,CAAC0E,cAAc,CAAC;aAACsC,KAAK,EAAE;YAAK,CAAC;YAAE,GAAG,CAAC;;MAEjF;KACDzB,aAAa,2BACb;OACC,IAAI,CAAC/H,aAAa,GAAG,IAAI;OACzB,IAAI,CAAC2G,mBAAmB,EAAE;OAE1B,OAAO,IAAI;MACX;KACDqB,YAAY,0BACZ;OACC,IAAI,CAAChI,aAAa,GAAG,KAAK;MAC1B;KACDmH,gBAAgB,8BAChB;OAAA,+EAD0G,EAAE;SAAA,iBAA1F3I,IAAI;SAAEyJ,KAAK,0BAAG;WAAC9G,MAAM,EAAE,CAAC;WAAEqI,KAAK,EAAE,KAAK;WAAEC,oBAAoB,EAAE,KAAK;WAAE/G,QAAQ,EAAE;UAAK;OAErG,IAAIuF,KAAK,CAAC9G,MAAM,KAAK,IAAI,CAACA,MAAM,EAChC;SACC,OAAO,KAAK;;OAGb7B,oBAAM,CAACC,IAAI,CAAC,kBAAkB,EAAE0I,KAAK,CAAC;OACtCA,KAAK,CAACuB,KAAK,GAAGvB,KAAK,CAACuB,KAAK,KAAK,IAAI;OAClCvB,KAAK,CAACwB,oBAAoB,GAAGxB,KAAK,CAACwB,oBAAoB,KAAK,IAAI;OAEhE,IAAI,IAAI,CAACjI,oBAAoB,EAC7B;SACClC,oBAAM,CAACC,IAAI,CAAC,qDAAqD,CAAC;SAClE,OAAO,KAAK;;OAGb,IAAI0I,KAAK,CAACwB,oBAAoB,IAAI,IAAI,CAAClH,mBAAmB,IAAI,IAAI,CAACmH,0BAA0B,EAC7F;SACC,IAAMC,IAAI,GAAG,IAAI,CAACC,KAAK,CAACD,IAAI;SAC5B,IAAI,CAACE,yBAAyB,GAAGF,IAAI,CAACG,YAAY,GAAGH,IAAI,CAACI,SAAS,GAAGJ,IAAI,CAACK,YAAY;SACvF,IAAMC,UAAU,GAAG,IAAI,CAACJ,yBAAyB,GAAG,IAAI,CAACH,0BAA0B;SACnF,IAAI,CAACjH,wBAAwB,CAAC;WAACyH,KAAK,EAAEP,IAAI,CAACI,SAAS;WAAEI,GAAG,EAAER,IAAI,CAACI,SAAS,GAAGE;UAAW,CAAC;SAExF,OAAO,IAAI;;OAGZ,IAAI,CAAC/C,cAAc,CAACe,KAAK,CAAC;OAE1B,OAAO,IAAI;MACX;KACDb,qBAAqB,mCACrB;OAAA,gFADoD,EAAE;SAAA,mBAA/B5I,IAAI;SAAEyJ,KAAK,2BAAG;WAAC9G,MAAM,EAAE;UAAE;OAE/C,IAAI8G,KAAK,CAAC9G,MAAM,KAAK,IAAI,CAACA,MAAM,EAChC;SACC,OAAO,KAAK;;OAEb7B,oBAAM,CAACC,IAAI,CAAC,uBAAuB,CAAC;OAEpC,IAAI,CAACkH,0BAA0B,EAAE;OAEjC,OAAO,IAAI;MACX;KACD2D,iBAAiB,6BAACnC,KAAK,EACvB;OAAA;OACC,IAAMhF,UAAU,GAAG,IAAI,CAACjC,MAAM,CAACiC,UAAU,CAACS,MAAM,CAAC,UAAAP,MAAM,EAAI;SAC1D,OAAOA,MAAM,CAACC,SAAS,KAAK,MAAI,CAACtE,aAAa,IAAIqE,MAAM,CAAC7F,MAAM,KAAK,MAAI,CAACiE,mBAAmB;QAC5F,CAAC;OACFuF,6BAAY,CAAC8B,IAAI,CAAC5B,kBAAS,CAAChG,MAAM,CAACqJ,eAAe,EAAE;SAACC,IAAI,EAAErH,UAAU;SAAEgF,KAAK,EAALA;QAAM,CAAC;MAC9E;KACDsC,aAAa,yBAACtC,KAAK,EACnB;OACC,IAAI,CAAC,IAAI,CAACjI,aAAa,EACvB;SACC,OAAO,KAAK;;OAEb,IAAI,CAACpB,WAAW,GAAGqJ,KAAK,CAACuC,MAAM;OAE/B,IAAI,CAACvC,KAAK,CAACuC,MAAM,EACjB;SACC,IAAI,CAAC3L,iBAAiB,GAAG,IAAI;;MAE9B;KACD4L,QAAQ,oBAACxC,KAAK,EACd;OACC,IAAI,IAAI,CAACyC,WAAW,EACpB;SACC,OAAO,KAAK;;OAGb9K,YAAY,CAAC,IAAI,CAACyC,eAAe,CAAC;OAElC,IAAI,CAACsI,aAAa,GAAG1C,KAAK,CAACO,MAAM,CAACuB,SAAS;OAC3C,IAAMa,eAAe,GAAG,IAAI,CAAC9E,UAAU,GAAG,IAAI,CAAC6E,aAAa;OAC5D,IAAME,aAAa,GAAG,CAACD,eAAe;OAEtC,IAAIC,aAAa,IAAI,IAAI,CAACC,mBAAmB,EAC7C;SACCxL,oBAAM,CAACC,IAAI,CAAC,uCAAuC,CAAC;SACpD,IAAI,CAACuL,mBAAmB,GAAG,KAAK;;OAGjC,IAAMC,eAAe,GAAG9C,KAAK,CAACO,MAAM,CAACsB,YAAY,GAAG7B,KAAK,CAACO,MAAM,CAACuB,SAAS,GAAG9B,KAAK,CAACO,MAAM,CAACwB,YAAY;OACtG,IAAI,IAAI,CAACW,aAAa,GAAG,CAAC,IAAIC,eAAe,IAAIG,eAAe,GAAG,IAAI,CAACpF,sBAAsB,EAC9F;SACC,IAAI,CAACqF,YAAY,EAAE;QACnB,MACI,IAAIH,aAAa,IAAI,IAAI,CAACF,aAAa,IAAI,IAAI,CAAC/E,oBAAoB,EACzE;SACC,IAAI,CAACqF,UAAU,EAAE;;;;OAIlB,IAAI,CAACnF,UAAU,GAAG,IAAI,CAAC6E,aAAa;OACpC,IAAI,CAAC3E,wBAAwB,GAAG,IAAIC,IAAI,EAAE,CAACC,OAAO,EAAE;;OAEpD,IAAI,CAACgF,kBAAkB,CAACjD,KAAK,CAAC;MAC9B;KACD+C,YAAY,0BACZ;OAAA;OACC,IAAI,CAAC,IAAI,CAACvM,WAAW,IAAI,IAAI,CAACmG,oBAAoB,EAClD;SACC,OAAO,KAAK;;;;;;;OAOb,IAAI,IAAI,CAACN,gBAAgB,IAAI,IAAI,CAACK,oBAAoB,GAAG,CAAC,EAC1D;SACC,IAAI,CAACwG,gBAAgB,CAACxP,WAAW,CAACE,MAAM,CAAC,CAACuP,IAAI,CAAC,YAAM;WACpD,MAAI,CAACjM,oBAAoB,IAAI,CAAC;WAC9BG,oBAAM,CAACC,IAAI,CAAC,8DAA8D,EAAE,MAAI,CAACJ,oBAAoB,CAAC;UACtG,CAAC;QACF,MACI,IAAI,CAAC,IAAI,CAACmF,gBAAgB,IAAI,IAAI,CAACK,oBAAoB,GAAG,CAAC,EAChE;SACCrF,oBAAM,CAACC,IAAI,CAAC,6BAA6B,CAAC;SAC1C,IAAI,CAACL,kBAAkB,GAAG,IAAI;SAE9B,IAAI,CAACiM,gBAAgB,CAACxP,WAAW,CAACE,MAAM,CAAC,CAACuP,IAAI,CAAC,YAAM;WACpD,MAAI,CAAC7D,aAAa,EAAE;UACpB,CAAC;;MAEH;KACD0D,UAAU,wBACV;OAAA;OACC,IAAI,CAAC,IAAI,CAACxM,WAAW,IAAI,IAAI,CAACQ,kBAAkB,EAChD;SACC,OAAO,KAAK;;OAGb,IAAI,CAACoM,oBAAoB,GAAG,CAAC;;;OAG7B,IAAI,CAAC,IAAI,CAAChH,QAAQ,IAAI,IAAI,CAACuF,KAAK,CAACD,IAAI,CAACI,SAAS,GAAG,IAAI,CAACH,KAAK,CAACD,IAAI,CAACG,YAAY,GAAG,CAAC,EAClF;SACC,IAAI,CAACuB,oBAAoB,GAAG,CAAC;;;;;;;;OAQ9B,IAAI,IAAI,CAAC/G,gBAAgB,IAAI,IAAI,CAACC,qBAAqB,GAAG,CAAC,EAC3D;SACC,IAAM+G,iBAAiB,GAAG,IAAI,CAAC1B,KAAK,CAACD,IAAI,CAACG,YAAY;SACtD,IAAI,CAACqB,gBAAgB,CAACxP,WAAW,CAACC,OAAO,EAAE,IAAI,CAACyP,oBAAoB,CAAC,CAACD,IAAI,CAAC,YAAM;WAChF,IAAI,CAAC,MAAI,CAACG,yBAAyB,EAAE,EACrC;aACC,MAAI,CAACC,gBAAgB,EAAE;;WAExB,MAAI,CAACxM,qBAAqB,IAAI,MAAI,CAACqM,oBAAoB;WACvD/L,oBAAM,CAACC,IAAI,CAAC,8DAA8D,EAAE,MAAI,CAACP,qBAAqB,CAAC;UACvG,CAAC;SACF,IAAI,CAAC,IAAI,CAACuM,yBAAyB,EAAE,EACrC;WACCjM,oBAAM,CAACC,IAAI,CAAC,uBAAuB,CAAC;WACpC,IAAI,CAACoB,SAAS,CAAC,YAAM;aACpB,IAAM8K,gBAAgB,GAAG,MAAI,CAAC7B,KAAK,CAACD,IAAI,CAACG,YAAY,GAAGwB,iBAAiB;aACzE,MAAI,CAACI,iBAAiB,EAAE;aACxB,MAAI,CAACC,qBAAqB,CAAC,MAAI,CAAC/B,KAAK,CAACD,IAAI,CAACI,SAAS,GAAG0B,gBAAgB,CAAC;YACxE,CAAC;;QAEH,MACI,IAAI,CAAC,IAAI,CAACnH,gBAAgB,IAAI,IAAI,CAACC,qBAAqB,GAAG,CAAC,EACjE;SACCjF,oBAAM,CAACC,IAAI,CAAC,8BAA8B,CAAC;SAC3C,IAAI,CAACR,mBAAmB,GAAG,IAAI;SAE/B,IAAMuM,kBAAiB,GAAG,IAAI,CAAC1B,KAAK,CAACD,IAAI,CAACG,YAAY;SACtD,IAAI,CAACqB,gBAAgB,CAACxP,WAAW,CAACC,OAAO,EAAE,IAAI,CAACyP,oBAAoB,CAAC,CAACD,IAAI,CAAC,YAAM;WAChF,MAAI,CAACpM,qBAAqB,GAAG,MAAI,CAACqM,oBAAoB,GAAG,CAAC;WAC1D,IAAI,CAAC,MAAI,CAACE,yBAAyB,EAAE,EACrC;aACC,MAAI,CAACC,gBAAgB,EAAE;;WAExB,MAAI,CAAC3E,cAAc,EAAE;UACrB,CAAC;;SAEF,IAAI,CAAC,IAAI,CAAC0E,yBAAyB,EAAE,EACrC;WACCjM,oBAAM,CAACC,IAAI,CAAC,uBAAuB,CAAC;WACpC,IAAI,CAACoB,SAAS,CAAC,YAAM;aACpB,IAAM8K,gBAAgB,GAAG,MAAI,CAAC7B,KAAK,CAACD,IAAI,CAACG,YAAY,GAAGwB,kBAAiB;aACzE,MAAI,CAACI,iBAAiB,EAAE;aACxB,MAAI,CAACC,qBAAqB,CAAC,MAAI,CAAC/B,KAAK,CAACD,IAAI,CAACI,SAAS,GAAG0B,gBAAgB,CAAC;YACxE,CAAC;;;MAGJ;;KAEDF,yBAAyB,uCACzB;OACC,OAAO,CAACtL,kBAAc,CAACC,QAAQ,CAACC,cAAc,EAAE,IAC5C,CAACF,kBAAc,CAAC2L,OAAO,CAACC,IAAI,EAAE,IAC9B,CAAC5L,kBAAc,CAAC2L,OAAO,CAACE,QAAQ,EAAE,IAClC,CAAC7L,kBAAc,CAAC2L,OAAO,CAACG,aAAa,EAAE;MAC3C;KACDL,iBAAiB,+BACjB;OACC,IAAI,CAAC9B,KAAK,CAACD,IAAI,CAACqC,SAAS,CAACC,GAAG,CAAC,kCAAkC,CAAC;MACjE;KACDT,gBAAgB,8BAChB;OACC,IAAI,CAAC5B,KAAK,CAACD,IAAI,CAACqC,SAAS,CAACE,MAAM,CAAC,kCAAkC,CAAC;MACpE;KACDC,mBAAmB,iCACnB;OACC7M,oBAAM,CAACC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAACuL,mBAAmB,CAAC;;OAE5D,IAAI,IAAI,CAACxG,gBAAgB,EACzB;SACC,OAAO,KAAK;;;;OAIb,IAAI,IAAI,CAACX,aAAa,KAAK,CAAC,EAC5B;SACC,IAAI,CAACuD,cAAc,EAAE;SAErB,OAAO,IAAI;;;;OAIZ,IAAI,IAAI,CAAC4D,mBAAmB,IAAI,IAAI,CAACnG,oBAAoB,GAAG,CAAC,EAC7D;SACCrF,oBAAM,CAACC,IAAI,CAAC,+BAA+B,CAAC;SAC5C,IAAI,CAAC6M,gBAAgB,EAAE;SAEvB,OAAO,IAAI;;;;OAIZ,IAAI,CAACtB,mBAAmB,GAAG,IAAI;OAC/B,IAAI,CAAC5D,cAAc,EAAE;MACrB;KACDI,YAAY,+BACZ;OAAA;OAAA,uBADc9I,IAAI;SAAG2C,MAAM,cAANA,MAAM;SAAEiC,SAAS,cAATA,SAAS;OAErC,IAAIjC,MAAM,KAAK,IAAI,CAACA,MAAM,EAC1B;SACC,OAAO,KAAK;;OAEb7B,oBAAM,CAACC,IAAI,CAAC,gCAAgC,EAAE6D,SAAS,CAAC;OACxD,IAAI,IAAI,CAACzE,gBAAgB,EACzB;SACC,OAAO,KAAK;;OAEb,IAAI,CAACgC,SAAS,CAAC,YAAM;;SAEpB,IAAI,CAAC,MAAI,CAACX,aAAa,EACvB;WACC,IAAMqM,qBAAqB,GAAG,MAAI,CAACzC,KAAK,CAAC,MAAM,CAAC,CAACE,YAAY,GAAG,MAAI,CAACF,KAAK,CAAC,MAAM,CAAC,CAACI,YAAY;WAC/F,IAAI,MAAI,CAACW,aAAa,GAAG0B,qBAAqB,EAC9C;;aAEC,MAAI,CAAC1N,gBAAgB,GAAG,IAAI;;WAG7B,MAAI,CAAC2N,0BAA0B,EAAE;WAEjC,OAAO,IAAI;;;;SAIZ,IAAMC,cAAc,GAAG,MAAI,CAACC,cAAc,CAACpJ,SAAS,CAAC;SACrD,IAAI,CAACmJ,cAAc,EACnB;WACC,OAAO,KAAK;;;SAGb,IAAM5C,IAAI,GAAG,MAAI,CAACC,KAAK,CAACD,IAAI;SAC5B,IAAI4C,cAAc,CAACvC,YAAY,GAAGL,IAAI,CAACK,YAAY,EACnD;WACC,MAAI,CAACyC,eAAe,CAAC;aAACrJ,SAAS,EAATA;YAAU,CAAC;WAEjC,OAAO,IAAI;;;SAGZ,MAAI,CAACX,wBAAwB,EAAE;QAC/B,CAAC;MACF;KACDgF,aAAa,gCACb;OAAA,IADqBQ,KAAK,SAAXzJ,IAAI;OAElB,IAAIyJ,KAAK,CAAC9G,MAAM,KAAK,IAAI,CAACA,MAAM,EAChC;SACC,OAAO,KAAK;;OAGb,IAAI,IAAI,CAAC1C,WAAW,KAAK,IAAI,EAC7B;SACCa,oBAAM,CAACC,IAAI,CAAC,0BAA0B,CAAC;SACvC,OAAO,KAAK;;OAGbD,oBAAM,CAACC,IAAI,CAAC,eAAe,EAAE0I,KAAK,CAAC9G,MAAM,CAAC;OAC1C,IAAI,CAAC1C,WAAW,GAAG,IAAI;OACvB,IAAI+K,KAAK,GAAG,KAAK;;OAEjB,IAAI,IAAI,CAACI,KAAK,CAACD,IAAI,CAACI,SAAS,GAAG,IAAI,CAACH,KAAK,CAACD,IAAI,CAACG,YAAY,GAAG,CAAC,EAChE;SACCN,KAAK,GAAG,IAAI;;OAEb,IAAI,CAACtC,cAAc,CAAC;SAACsC,KAAK,EAALA,KAAK;SAAEC,oBAAoB,EAAE;QAAM,CAAC;MACzD;KACD9B,sBAAsB,yCACtB;OAAA,IAD8BM,KAAK,SAAXzJ,IAAI;OAE3B,IAAMmL,IAAI,GAAG,IAAI,CAACC,KAAK,CAACD,IAAI;OAC5B,IAAI,CAACD,0BAA0B,GAAGC,IAAI,CAACG,YAAY,GAAGH,IAAI,CAACI,SAAS,GAAGJ,IAAI,CAACK,YAAY;MACxF;KACDxC,uBAAuB,qCACvB;OAAA;OAAA,gFADsD,EAAE;SAAA,mBAA/BhJ,IAAI;SAAEyJ,KAAK,2BAAG;WAAC9G,MAAM,EAAE;UAAE;OAEjD,IAAI8G,KAAK,CAAC9G,MAAM,KAAK,IAAI,CAACA,MAAM,EAChC;SACC,OAAO,KAAK;;OAGb7B,oBAAM,CAACC,IAAI,CAAC,yBAAyB,CAAC;OACtC,IAAI,CAACL,kBAAkB,GAAG,IAAI;OAE9B,IAAI,CAACiM,gBAAgB,CAACxP,WAAW,CAACE,MAAM,CAAC,CAACuP,IAAI,CAAC,YAAM;SACpD,OAAO,OAAI,CAAC7D,aAAa,EAAE;QAC3B,CAAC;OAEF,IAAI,CAACmF,4BAA4B,GAAG,IAAI;OAExC,OAAO,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;SACvC,OAAI,CAACH,4BAA4B,GAAGE,OAAO;QAC3C,CAAC;MACF;KACD3F,eAAe,kCACf;OAAA,IADuBgB,KAAK,SAAXzJ,IAAI;OAEpB,IAAIyJ,KAAK,CAAC9G,MAAM,KAAK,IAAI,CAACA,MAAM,EAChC;SACC,OAAO,KAAK;;OAEb,IAAI,CAACZ,aAAa,CAAC;SAACiJ,KAAK,EAAE;QAAM,CAAC;MAClC;;;KAIDjJ,aAAa,2BACb;OAAA,gFAD+B,EAAE;SAAA,oBAAlBiJ,KAAK;SAALA,KAAK,4BAAG,IAAI;OAE1BlK,oBAAM,CAACC,IAAI,CAAC,8BAA8B,CAAC;OAC3C,IAAMuN,QAAQ,GAAG,IAAI,CAACC,qBAAqB,EAAE;OAC7C,IAAID,QAAQ,EACZ;SACC,IAAI,CAACR,0BAA0B,CAACQ,QAAQ,EAAEtD,KAAK,CAAC;QAChD,MAED;SACC,IAAMG,IAAI,GAAG,IAAI,CAACC,KAAK,CAACD,IAAI;SAC5B,IAAI,CAACgC,qBAAqB,CAAChC,IAAI,CAACG,YAAY,GAAGH,IAAI,CAACK,YAAY,CAAC;;MAElE;;KAED9C,cAAc,4BACd;OAAA,gFADgF,EAAE;SAAA,oBAAlEsC,KAAK;SAALA,KAAK,4BAAG,KAAK;SAAA,8BAAEC,oBAAoB;SAApBA,oBAAoB,sCAAG,KAAK;SAAA,uBAAE/G,QAAQ;SAARA,QAAQ,+BAAG,IAAI;OAE3EpD,oBAAM,CAACC,IAAI,CAAC,kBAAkB,EAAEiK,KAAK,EAAEC,oBAAoB,EAAE/G,QAAQ,CAAC;OACtE,IAAI+G,oBAAoB,IAAI,IAAI,CAAClH,mBAAmB,EACpD;SACC,OAAO,KAAK;;OAGb,IAAMoH,IAAI,GAAG,IAAI,CAACC,KAAK,CAACD,IAAI;;;OAG5B,IAAI,IAAI,CAAC3I,MAAM,CAAC4C,OAAO,GAAG,CAAC,EAC3B;SACC,IAAMoJ,iBAAiB,GAAG,IAAI,CAAChM,MAAM,CAAC4C,OAAO,GAAG,CAAC,IAAI,IAAI,CAACpC,oBAAoB,GAAE,IAAI,CAACA,oBAAoB,GAAE,IAAI,CAAC1C,aAAa;SAC7H,IAAI,CAACwN,0BAA0B,CAACU,iBAAiB,EAAExD,KAAK,CAAC;SAEzD,OAAO,IAAI;;;;OAIZ,IAAI,CAAC7K,gBAAgB,GAAG,KAAK;;;OAG7B,IAAI6K,KAAK,EACT;SACC,IAAI,CAACmC,qBAAqB,CAAChC,IAAI,CAACG,YAAY,GAAGH,IAAI,CAACK,YAAY,CAAC;;;YAIlE;SACC,IAAMiD,YAAY,GAAG,EAAE;SACvB,IAAIvK,QAAQ,EACZ;WACCuK,YAAY,CAACvK,QAAQ,GAAGA,QAAQ;;SAEjC,IAAI,CAACD,wBAAwB,mBAAMwK,YAAY,EAAG;;MAEnD;KACDX,0BAA0B,wCAC1B;OAAA,IAD2BQ,QAAQ,uEAAG,IAAI;OAAA,IAAEtD,KAAK,uEAAG,KAAK;OAExDlK,oBAAM,CAACC,IAAI,CAAC,wBAAwB,CAAC;OAErC,IAAIxC,OAAO,GAAG,KAAK;OACnB,IAAI+P,QAAQ,KAAK,IAAI,EACrB;SACC/P,OAAO,GAAG,IAAI,CAACyP,cAAc,CAACM,QAAQ,CAAC;;OAExC,IAAI,CAAC/P,OAAO,EACZ;SACC+P,QAAQ,GAAG,IAAI,CAACC,qBAAqB,EAAE;;OAGxC,IAAI,CAACN,eAAe,CAAC;SAACrJ,SAAS,EAAE0J,QAAQ;SAAEtD,KAAK,EAALA;QAAM,CAAC;MAClD;;KAEDiD,eAAe,mCACf;OAAA,8BADiBrJ,SAAS;SAATA,SAAS,iCAAG,CAAC;SAAA,sBAAEoG,KAAK;SAALA,KAAK,6BAAG,KAAK;SAAA,2BAAE0D,UAAU;SAAVA,UAAU,kCAAG,IAAI;OAE/D5N,oBAAM,CAACC,IAAI,CAAC,mBAAmB,CAAC;OAChC,IAAMoK,IAAI,GAAG,IAAI,CAACC,KAAK,CAACD,IAAI;OAC5B,IAAM5M,OAAO,GAAG,IAAI,CAACyP,cAAc,CAACpJ,SAAS,CAAC;OAE9C,IAAI+G,GAAG,GAAG,CAAC;OACX,IAAI,CAACpN,OAAO,EACZ;;SAEC,IAAImQ,UAAU,EACd;WACC/C,GAAG,GAAG,EAAE;;;cAIT;WACCA,GAAG,GAAGR,IAAI,CAACG,YAAY,GAAGH,IAAI,CAACK,YAAY;;QAE5C,MACI,IAAIkD,UAAU,EACnB;;SAEC/C,GAAG,GAAGpN,OAAO,CAACoQ,SAAS,GAAI,IAAI,CAACtH,mBAAmB,GAAG,CAAE;QACxD,MAED;;SAECsE,GAAG,GAAGpN,OAAO,CAACoQ,SAAS,GAAGpQ,OAAO,CAACqQ,YAAY,GAAGzD,IAAI,CAACK,YAAY,GAAI,IAAI,CAACnE,mBAAmB,GAAG,CAAE;;OAGpG,IAAI2D,KAAK,EACT;SACC,IAAI,CAACmC,qBAAqB,CAACxB,GAAG,CAAC;QAC/B,MAED;SACC,IAAI,CAAC1H,wBAAwB,CAAC;WAAC0H,GAAG,EAAHA;UAAI,CAAC;;OAGrC,OAAO,IAAI;MACX;KACDwB,qBAAqB,iCAAC0B,QAAQ,EAC9B;OACC/N,oBAAM,CAACC,IAAI,CAAC,6BAA6B,EAAE8N,QAAQ,CAAC;OACpD,IAAI1D,IAAI,GAAG,IAAI,CAACC,KAAK,CAACD,IAAI;OAC1B,IAAI,CAACA,IAAI,EACT;SACC,OAAO,KAAK;;OAGb,IAAI,IAAI,CAAC2D,eAAe,EACxB;SACCC,0BAAS,CAACC,MAAM,CAAC,IAAI,CAACF,eAAe,CAAC;SACtC,IAAI,CAAC5O,eAAe,GAAG,KAAK;SAC5B,IAAI,CAAC4O,eAAe,GAAG,IAAI;;OAG5B3D,IAAI,CAACI,SAAS,GAAGsD,QAAQ;MACzB;;KAED5K,wBAAwB,sCACxB;OAAA;OAAA,IADyBgL,MAAM,uEAAG,EAAE;OAEnCnO,oBAAM,CAACC,IAAI,CAAC,uBAAuB,EAAEkO,MAAM,CAAC;OAC5C,IAAI,IAAI,CAACH,eAAe,EACxB;SACCC,0BAAS,CAACC,MAAM,CAAC,IAAI,CAACF,eAAe,CAAC;SACtC,IAAI,CAAC5O,eAAe,GAAG,KAAK;;OAE7B,IAAI,OAAO+O,MAAM,KAAK,UAAU,EAChC;SACCA,MAAM,GAAG;WAACC,QAAQ,EAAED;UAAO;;OAG5B,IAAM9D,IAAI,GAAG,IAAI,CAACC,KAAK,CAACD,IAAI;OAC5B,IAAI,CAACA,IAAI,EACT;SACC,IAAI8D,MAAM,CAACC,QAAQ,IAAI,OAAOD,MAAM,CAACC,QAAQ,KAAK,UAAU,EAC5D;WACCD,MAAM,CAACC,QAAQ,EAAE;;SAElB,IAAI,CAACJ,eAAe,GAAG,IAAI;SAC3B,IAAI,CAAC5O,eAAe,GAAG,KAAK;SAE5B,OAAO,IAAI;;OAGZ,IACCuB,kBAAc,CAACC,QAAQ,CAACyN,KAAK,EAAE,IAC9B1N,kBAAc,CAACC,QAAQ,CAAC0N,aAAa,EAAE,GAAG,EAAE,IACzC3N,kBAAc,CAACC,QAAQ,CAAC0N,aAAa,EAAE,GAAG,IAC7C,EAEF;SACCjE,IAAI,CAACI,SAAS,GAAGJ,IAAI,CAACG,YAAY,GAAGH,IAAI,CAACK,YAAY;SAEtD,OAAO,IAAI;;OAGZ,cAMIyD,MAAM;SAAA,wBALTvD,KAAK;SAALA,KAAK,8BAAGP,IAAI,CAACI,SAAS;SAAA,sBACtBI,GAAG;SAAHA,GAAG,4BAAGR,IAAI,CAACG,YAAY,GAAGH,IAAI,CAACK,YAAY;SAAA,4BAC3C6D,SAAS;SAATA,SAAS,kCAAG,EAAE;SACdH,SAAQ,WAARA,QAAQ;SAAA,2BACRhL,QAAQ;SAARA,QAAQ,iCAAG,GAAG;OAGf,IAAMoL,SAAS,GAAG,IAAI,CAAClE,KAAK,CAACkE,SAAS;OACtC,IAAIA,SAAS,IAAK3D,GAAG,GAAGD,KAAK,GAAI4D,SAAS,CAACV,YAAY,GAAG,CAAC,EAC3D;SACClD,KAAK,GAAGC,GAAG,GAAG2D,SAAS,CAACV,YAAY,GAAG,CAAC;SACxC9N,oBAAM,CAACC,IAAI,CAAC,2DAA2D,CAAC;;OAGzE,IAAI,CAACb,eAAe,GAAG,IAAI;OAC3BY,oBAAM,CAACC,IAAI,CAAC,4DAA4D,CAAC;OAEzE,IAAI,CAAC+N,eAAe,GAAGC,0BAAS,CAACrD,KAAK,CAAC;SACtCA,KAAK,EAALA,KAAK;SACLC,GAAG,EAAHA,GAAG;SACH0D,SAAS,EAATA,SAAS;SACTnL,QAAQ,EAARA,QAAQ;SAER3F,OAAO,EAAE4M,IAAI;SACboE,eAAe,EAAE,WAAW;SAE5BL,QAAQ,EAAE,oBACV;WACC,OAAI,CAACJ,eAAe,GAAG,IAAI;WAC3B,OAAI,CAAC5O,eAAe,GAAG,KAAK;WAC5B,IAAIgP,SAAQ,IAAI,OAAOA,SAAQ,KAAK,UAAU,EAC9C;aACCA,SAAQ,EAAE;;;QAGZ,CAAC;MACF;;;KAIDvC,gBAAgB,4BAAC6C,WAAW,EAC5B;OAAA,IAD8BC,UAAU,uEAAG,CAAC;OAE3C,IAAMC,KAAK,GAAGF,WAAW,KAAKrS,WAAW,CAACC,OAAO,GAAE,IAAI,CAAC8I,mBAAmB,GAAE,IAAI,CAACG,kBAAkB;OACpG,IAAMsJ,YAAY,GAAG,IAAI,CAACC,oBAAoB,CAACF,KAAK,EAAED,UAAU,CAAC;OAEjE,OAAO,IAAI,CAAChN,MAAM,CAACoN,QAAQ,CAAC,0BAA0B,EAAE;SAACF,YAAY,EAAZA,YAAY;SAAEH,WAAW,EAAXA;QAAY,CAAC;MACpF;KACDI,oBAAoB,gCAACE,MAAM,EAAEL,UAAU,EACvC;OACC,IAAME,YAAY,GAAG,EAAE;OAEvB,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,UAAU,EAAEM,CAAC,EAAE,EACnC;SACC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC/I,uBAAuB,CAAChJ,MAAM,EAAE+R,CAAC,EAAE,EAC5D;WACCL,YAAY,CAAClR,IAAI,CAAC;aACjBD,EAAE,uBAAgB,IAAI,CAACoC,gBAAgB,CAAE;aACzC+B,MAAM,EAAE,IAAI,CAACA,MAAM;aACnBsN,YAAY,EAAE7N,2BAAY,CAAC8N,WAAW;aACtCC,eAAe,EAAE,IAAI,CAAClJ,uBAAuB,CAAC+I,CAAC,CAAC;aAChD3S,MAAM,EAAE;YACR,CAAC;WACF,IAAI,CAACuD,gBAAgB,EAAE;;;OAKzB,OAAO+O,YAAY;MACnB;KACDzI,0BAA0B,wCAC1B;;;OAGC,OAAO,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAACkJ,IAAI,CAAC,YAAM;SAC/D,OAAO,GAAG,GAAGtS,IAAI,CAACE,MAAM,EAAE;QAC1B,CAAC;MACF;;;KAIDqK,cAAc,4BACd;OAAA;OACC,OAAO,IAAI,CAACgI,OAAO,CAACC,UAAU,CAACC,GAAG,EAAE,CAACC,UAAU,CAACC,mBAAU,CAACC,mBAAmB,EAAE;SAC/EC,OAAO,EAAE,IAAI,CAAChO,MAAM;SACpBiO,OAAO,EAAE,IAAI,CAACxN,oBAAoB;SAClCsM,KAAK,EAAE,IAAI,CAACxJ,mBAAmB;SAC/B2K,YAAY,EAAE;QACd,CAAC,CAACjE,IAAI,CAAC,UAAAZ,MAAM,EAAI;SACjB,IAAM8E,WAAW,GAAG9E,MAAM,CAAChM,IAAI,EAAE,CAAC+Q,QAAQ;SAC1C,IAAID,WAAW,CAAC7S,MAAM,GAAG,CAAC,EAC1B;WACC,OAAI,CAACmF,oBAAoB,GAAG0N,WAAW,CAACA,WAAW,CAAC7S,MAAM,GAAG,CAAC,CAAC,CAACO,EAAE;;SAGnE,IAAIsS,WAAW,CAAC7S,MAAM,GAAG,OAAI,CAACiI,mBAAmB,EACjD;WACC,OAAI,CAACzF,kBAAkB,GAAG,IAAI;;;;SAI/B,OAAI,CAAC4P,OAAO,CAACW,IAAI,CAACT,GAAG,CAAC,YAAY,CAAC,CAACU,iBAAiB,CAACC,0BAAiB,CAACR,mBAAmB,EAAE1E,MAAM,CAAC;SAEpG,OAAO,IAAImC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;WACvC,IAAMvB,iBAAiB,GAAG,OAAI,CAAC1B,KAAK,CAACD,IAAI,CAACG,YAAY;WACtD,OAAI,CAAC7I,MAAM,CAACoN,QAAQ,CAAC,6BAA6B,EAAE;aACnDlN,MAAM,EAAE,OAAI,CAACA,MAAM;aACnB3C,IAAI,EAAE8Q,WAAW;aACjBK,YAAY,EAAE,OAAI,CAACtQ,WAAW,GAAG,OAAI,CAACoG,uBAAuB,CAAChJ,MAAM;aACpE6R,MAAM,EAAE,OAAI,CAAC7I,uBAAuB,CAAChJ;YACrC,CAAC,CAAC2O,IAAI,CAAC,YAAM;aACb,IAAI,CAAC,OAAI,CAACG,yBAAyB,EAAE,EACrC;eACC,OAAI,CAACC,gBAAgB,EAAE;;aAExBoB,OAAO,EAAE;YACT,CAAC;WACF,IAAI,CAAC,OAAI,CAACrB,yBAAyB,EAAE,EACrC;aACCjM,oBAAM,CAACC,IAAI,CAAC,gDAAgD,CAAC;aAC7D,OAAI,CAACoB,SAAS,CAAC,YAAM;eACpB,IAAM8K,gBAAgB,GAAG,OAAI,CAAC7B,KAAK,CAACD,IAAI,CAACG,YAAY,GAAGwB,iBAAiB;eACzE,OAAI,CAACI,iBAAiB,EAAE;eACxB,OAAI,CAACC,qBAAqB,CAAC,OAAI,CAAC/B,KAAK,CAACD,IAAI,CAACI,SAAS,GAAG0B,gBAAgB,CAAC;cACxE,CAAC;;UAEH,CAAC;QACF,CAAC,CAACL,IAAI,CAAC,YAAM;SACb,OAAI,CAAC/L,WAAW,IAAI,CAAC;SACrBC,oBAAM,CAACC,IAAI,CAAC,sCAAsC,EAAE,OAAI,CAACF,WAAW,CAAC;SAErE,OAAO,OAAI,CAACuQ,qBAAqB,EAAE;QACnC,CAAC,SAAM,CAAC,UAAApF,MAAM,EAAI;SAClBlL,oBAAM,CAACC,IAAI,CAAC,uBAAuB,EAAEiL,MAAM,CAAC;QAC5C,CAAC;MACF;KACDoF,qBAAqB,mCACrB;OAAA;OACCtQ,oBAAM,CAACC,IAAI,CAAC,uBAAuB,CAAC;OACpC,IAAI,IAAI,CAACN,kBAAkB,EAC3B;SACCK,oBAAM,CAACC,IAAI,CAAC,mDAAmD,CAAC;SAChE,IAAI,CAACP,qBAAqB,GAAG,CAAC;;OAG/B,IAAI,IAAI,CAACA,qBAAqB,GAAG,CAAC,EAClC;SACCM,oBAAM,CAACC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAACP,qBAAqB,CAAC;SACrE,IAAI,CAACA,qBAAqB,EAAE;SAE5B,OAAO,IAAI,CAAC6H,cAAc,EAAE;QAC5B,MACI,IAAI,IAAI,CAAC+C,KAAK,CAACD,IAAI,CAACI,SAAS,IAAI,IAAI,CAACnE,oBAAoB,IAAI,IAAI,CAACrB,qBAAqB,GAAG,CAAC,EACjG;SACCjF,oBAAM,CAACC,IAAI,CAAC,2EAA2E,CAAC;SAExF,OAAO,IAAI,CAAC4L,gBAAgB,CAACxP,WAAW,CAACC,OAAO,CAAC,CAACwP,IAAI,CAAC,UAACyE,kBAAkB,EAAK;WAC9E,OAAI,CAACpD,eAAe,CAAC;aAACrJ,SAAS,EAAEyM,kBAAkB;aAAErG,KAAK,EAAE,IAAI;aAAE0D,UAAU,EAAE;YAAM,CAAC;WAErF,OAAO,OAAI,CAACrG,cAAc,EAAE;UAC5B,CAAC;QACF,MAED;SACCvH,oBAAM,CAACC,IAAI,CAAC,iDAAiD,CAAC;SAC9D,IAAI,CAAC0B,MAAM,CAACoN,QAAQ,CAAC,4BAA4B,EAAE;WAAClN,MAAM,EAAE,IAAI,CAACA;UAAO,CAAC;SACzE,IAAI,CAACpC,mBAAmB,GAAG,KAAK;SAEhC,OAAO,IAAI;;MAEZ;;;KAID+Q,0BAA0B,wCAC1B;OAAA;OACC,wDACEJ,0BAAiB,CAACK,YAAY,EAAG,CAACd,mBAAU,CAACc,YAAY,EAAE;SAC3DC,SAAS,EAAE,IAAI,CAACvS,QAAQ;SACxBwS,UAAU,EAAE,IAAI,CAAC7J;QACjB,CAAC,uCACDsJ,0BAAiB,CAACQ,SAAS,EAAG,CAACjB,mBAAU,CAACiB,SAAS,EAAE;SACrDF,SAAS,EAAE,IAAI,CAACvS;QAChB,CAAC,uCACDiS,0BAAiB,CAACS,yBAAyB,EAAG,CAAClB,mBAAU,CAACC,mBAAmB,EAAE;SAC/EC,OAAO,EAAE,IAAI,CAAChO,MAAM;SACpBiP,QAAQ,EAAE,IAAI,CAAChK,mBAAmB;SAClC8H,KAAK,EAAE,IAAI,CAACrJ,kBAAkB;SAC9BwK,YAAY,EAAE;QACd,CAAC;MAEH;KACD9H,aAAa,2BACb;OAAA;OACC,IAAI,CAAC,IAAI,CAACnB,mBAAmB,EAC7B;SACC,IAAI,CAACA,mBAAmB,GAAG,IAAI,CAACnF,MAAM,CAACC,OAAO,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAACC,MAAM,CAAC;;OAElF,IAAI,CAAC,IAAI,CAACiF,mBAAmB,EAC7B;SACC,OAAO,KAAK;;OAGbU,6BAAY,CAACuJ,SAAS,CAACrJ,kBAAS,CAAChG,MAAM,CAACsP,WAAW,EAAE;SACpDtT,EAAE,EAAE,IAAI,CAACoJ,mBAAmB;SAC5BmK,SAAS,EAAE,IAAI;SACfC,QAAQ,EAAE;QACV,CAAC,CAACpF,IAAI,CAAC,YAAM;SACb,OAAI,CAACyD,OAAO,CAACC,UAAU,CAACC,GAAG,EAAE,CAAC0B,SAAS,CACtC,OAAI,CAACX,0BAA0B,EAAE,EACjC,UAAAY,QAAQ;WAAA,OAAI,OAAI,CAACC,eAAe,CAACD,QAAQ,CAAC;WAC1C;QACD,CAAC;MACF;KACDC,eAAe,2BAACD,QAAQ,EACxB;OAAA;OACC,IAAI,CAACA,QAAQ,EACb;SACCpR,oBAAM,CAACC,IAAI,CAAC,iCAAiC,CAAC;SAE9C,OAAO,KAAK;;OAGb,IAAMqR,aAAa,GAAGF,QAAQ,CAAChB,0BAAiB,CAACQ,SAAS,CAAC;OAC3D,IAAIU,aAAa,CAACC,KAAK,EAAE,EACzB;SACCvR,oBAAM,CAACC,IAAI,CAAC,iCAAiC,EAAEqR,aAAa,CAACC,KAAK,EAAE,CAAC;SAErE,OAAO,KAAK;;OAEb,IAAI,CAAChC,OAAO,CAACW,IAAI,CAACT,GAAG,CAAC,YAAY,CAAC,CAACU,iBAAiB,CAACC,0BAAiB,CAACQ,SAAS,EAAEU,aAAa,CAAC;OAEjG,IAAME,mBAAmB,GAAGJ,QAAQ,CAAChB,0BAAiB,CAACS,yBAAyB,CAAC;OACjF,IAAIW,mBAAmB,CAACD,KAAK,EAAE,EAC/B;SACCvR,oBAAM,CAACC,IAAI,CAAC,iDAAiD,EAAEuR,mBAAmB,CAACD,KAAK,EAAE,CAAC;SAE3F,OAAO,KAAK;;OAGb,IAAMvB,WAAW,GAAGwB,mBAAmB,CAACtS,IAAI,EAAE,CAAC+Q,QAAQ;OACvD,IAAID,WAAW,CAAC7S,MAAM,GAAG,CAAC,EAC1B;SACC,IAAI,CAAC2J,mBAAmB,GAAGkJ,WAAW,CAACA,WAAW,CAAC7S,MAAM,GAAG,CAAC,CAAC,CAACO,EAAE;;OAGlE,IAAI,CAAC6R,OAAO,CAACW,IAAI,CAACT,GAAG,CAAC,YAAY,CAAC,CAACU,iBAAiB,CAACC,0BAAiB,CAACS,yBAAyB,EAAEW,mBAAmB,CAAC;OACvH,IAAI,CAAC7P,MAAM,CAACoN,QAAQ,CAAC,6BAA6B,EAAE;SACnDlN,MAAM,EAAE,IAAI,CAACA,MAAM;SACnB3C,IAAI,EAAE8Q,WAAW;SACjBK,YAAY,EAAE,IAAI,CAACtQ,WAAW,GAAG,IAAI,CAACoG,uBAAuB,CAAChJ,MAAM;SACpE6R,MAAM,EAAE,IAAI,CAAC7I,uBAAuB,CAAChJ;QACrC,CAAC,CAAC2O,IAAI,CAAC,YAAM;SACb,OAAI,CAAC/L,WAAW,IAAI,CAAC;SACrBC,oBAAM,CAACC,IAAI,CAAC,qCAAqC,EAAE,OAAI,CAACF,WAAW,CAAC;SAEpE,OAAO,OAAI,CAAC0R,oBAAoB,EAAE;QAClC,CAAC,SAAM,CAAC,UAAAvG,MAAM,EAAI;SAClBlL,oBAAM,CAACC,IAAI,CAAC,sBAAsB,EAAEiL,MAAM,CAAC;QAC3C,CAAC;MACF;KACDuG,oBAAoB,kCACpB;OACC,IAAI,IAAI,CAAC5R,oBAAoB,GAAG,CAAC,EACjC;SACCG,oBAAM,CAACC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAACJ,oBAAoB,CAAC;SACpE,IAAI,CAACA,oBAAoB,EAAE;SAE3B,OAAO,IAAI,CAACoI,aAAa,EAAE;QAC3B,MAED;SACCjI,oBAAM,CAACC,IAAI,CAAC,iDAAiD,CAAC;SAC9D,IAAI,CAAC0B,MAAM,CAACoN,QAAQ,CAAC,4BAA4B,EAAE;WAAClN,MAAM,EAAE,IAAI,CAACA;UAAO,CAAC;SACzE,IAAI,CAACjC,kBAAkB,GAAG,KAAK;SAE/B,IAAI,IAAI,CAACwN,4BAA4B,EACrC;WACC,IAAI,CAACA,4BAA4B,EAAE;;SAGpC,OAAO,IAAI;;MAEZ;;;KAIDN,gBAAgB,8BAChB;OAAA;OACC9M,oBAAM,CAACC,IAAI,CAAC,gBAAgB,CAAC;;OAE7B,IAAI,CAAC4L,gBAAgB,CAACxP,WAAW,CAACE,MAAM,CAAC,CAACuP,IAAI,CAAC,YAAM;;SAEpD,OAAI,CAACV,WAAW,GAAG,IAAI;SACvB,OAAI,CAACjI,wBAAwB,CAAC;WAC7BiL,QAAQ,EAAE;aAAA,OAAM,OAAI,CAACsD,kBAAkB,EAAE;;UACzC,CAAC;QACF,CAAC;MACF;KACDA,kBAAkB,gCAClB;OAAA;;OAEC,IAAI,CAACrS,gBAAgB,GAAG,KAAK;;OAE7B,IAAI,CAACsC,MAAM,CAACoN,QAAQ,CAAC,kBAAkB,EAAE;SACxC5Q,QAAQ,EAAE,IAAI,CAACA,QAAQ;SACvBwT,MAAM,EAAE;WACPrN,OAAO,EAAE;;QAEV,CAAC;;OAEF,IAAI,CAAC3C,MAAM,CAACoN,QAAQ,CAAC,gBAAgB,EAAE;SAAClN,MAAM,EAAE,IAAI,CAACA,MAAM;SAAE+P,gBAAgB,EAAE;QAAK,CAAC;;OAErF,IAAI,CAACrC,OAAO,CAACC,UAAU,CAACC,GAAG,EAAE,CAAC0B,SAAS,CACtC,IAAI,CAACU,4BAA4B,EAAE,EACnC,UAAAT,QAAQ;SAAA,OAAI,OAAI,CAACU,iBAAiB,CAACV,QAAQ,CAAC;SAC5C;MACD;KACDS,4BAA4B,0CAC5B;OAAA;OACC,wDACEzB,0BAAiB,CAACK,YAAY,EAAG,CAACd,mBAAU,CAACc,YAAY,EAAE;SAC3DC,SAAS,EAAE,IAAI,CAACvS;QAChB,CAAC,uCACDiS,0BAAiB,CAACQ,SAAS,EAAG,CAACjB,mBAAU,CAACiB,SAAS,EAAE;SACrDF,SAAS,EAAE,IAAI,CAACvS;QAChB,CAAC,uCACDiS,0BAAiB,CAACR,mBAAmB,EAAG,CAACD,mBAAU,CAACC,mBAAmB,EAAE;SACzEC,OAAO,EAAE,IAAI,CAAChO,MAAM;SACpB+M,KAAK,EAAE,IAAI,CAACrJ,kBAAkB;SAC9BwK,YAAY,EAAE;QACd,CAAC;MAEH;KACD+B,iBAAiB,6BAACV,QAAQ,EAC1B;OAAA;OACC,IAAI,CAACA,QAAQ,EACb;SACCpR,oBAAM,CAACC,IAAI,CAAC,oCAAoC,CAAC;SACjD,OAAO,KAAK;;;;OAIb,IAAMqR,aAAa,GAAGF,QAAQ,CAAChB,0BAAiB,CAACQ,SAAS,CAAC;OAC3D,IAAIU,aAAa,CAACC,KAAK,EAAE,EACzB;SACCvR,oBAAM,CAACC,IAAI,CAAC,oCAAoC,EAAEqR,aAAa,CAACC,KAAK,EAAE,CAAC;SACxE,OAAO,KAAK;;OAEb,IAAI,CAAChC,OAAO,CAACW,IAAI,CAACT,GAAG,CAAC,YAAY,CAAC,CAACU,iBAAiB,CAACC,0BAAiB,CAACQ,SAAS,EAAEU,aAAa,CAAC;;;OAGjG,IAAMS,gBAAgB,GAAGX,QAAQ,CAAChB,0BAAiB,CAACR,mBAAmB,CAAC;OACxE,IAAImC,gBAAgB,CAACR,KAAK,EAAE,EAC5B;SACCvR,oBAAM,CAACC,IAAI,CAAC,8CAA8C,EAAE8R,gBAAgB,CAACR,KAAK,EAAE,CAAC;SACrF,OAAO,KAAK;;OAGb,IAAMvB,WAAW,GAAG+B,gBAAgB,CAAC7S,IAAI,EAAE,CAAC+Q,QAAQ,CAAC+B,OAAO,EAAE;;OAE9D,IAAI,CAACzC,OAAO,CAACW,IAAI,CAACT,GAAG,CAAC,YAAY,CAAC,CAACU,iBAAiB,CAACC,0BAAiB,CAACR,mBAAmB,EAAEmC,gBAAgB,CAAC;;OAE9G,IAAI,CAACpQ,MAAM,CAACoN,QAAQ,CAAC,6BAA6B,EAAE;SACnDlN,MAAM,EAAE,IAAI,CAACA,MAAM;SACnB3C,IAAI,EAAE8Q,WAAW;SACjBK,YAAY,EAAE,IAAI,CAACtQ,WAAW,GAAG,IAAI,CAACoG,uBAAuB,CAAChJ,MAAM;SACpE6R,MAAM,EAAE,IAAI,CAAC7I,uBAAuB,CAAChJ;QACrC,CAAC,CAAC2O,IAAI,CAAC,YAAM;;SAEb,OAAI,CAACxJ,oBAAoB,GAAG,OAAI,CAACP,UAAU,CAAC,CAAC,CAAC,CAACrE,EAAE;SACjD,OAAI,CAACqC,WAAW,IAAI,CAAC;;;SAGrB,OAAO,OAAI,CAAC4B,MAAM,CAACoN,QAAQ,CAAC,4BAA4B,EAAE;WAAClN,MAAM,EAAE,OAAI,CAACA;UAAO,CAAC;QAChF,CAAC,CAACiK,IAAI,CAAC,YAAM;SACb,OAAI,CAAClE,cAAc,CAAC;WAACsC,KAAK,EAAE;UAAK,CAAC;;SAElC,OAAI,CAACvK,kBAAkB,GAAG,KAAK;SAC/B,OAAI,CAACyL,WAAW,GAAG,KAAK;QACxB,CAAC,SAAM,CAAC,UAAAF,MAAM,EAAI;SAClBlL,oBAAM,CAACC,IAAI,CAAC,sBAAsB,EAAEiL,MAAM,CAAC;QAC3C,CAAC;MACF;;;KAID7D,mBAAmB,iCACnB;OAAA;OACC,IAAI,CAAC,IAAI,CAAC3G,aAAa,IAAI,CAAC,IAAI,CAACvB,WAAW,EAC5C;SACCa,oBAAM,CAACC,IAAI,CAAC,sBAAsB,CAAC;SAEnC,OAAO,KAAK;;;;OAIb,IAAI,CAACgH,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAAC7C,MAAM,CAAC,UAAAN,SAAS,EAC9D;SACC,IAAI,OAAI,CAACoD,iBAAiB,CAACpD,SAAS,CAAC,EACrC;WACC,IAAI,OAAI,CAACzD,SAAS,CAACrE,YAAY,CAACG,IAAI,CAAC,EACrC;aACC,OAAI,CAACkE,SAAS,CAACrE,YAAY,CAACG,IAAI,CAAC,CAAC8V,SAAS,CAAC,OAAI,CAAC/K,iBAAiB,CAACpD,SAAS,CAAC,CAAC;;WAE/E,OAAO,OAAI,CAACoD,iBAAiB,CAACpD,SAAS,CAAC;;SAGzC,OAAI,CAACoO,0BAA0B,CAACpO,SAAS,CAAC;SAE1C,OAAO,KAAK;QACZ,CAAC;MACF;KACDoO,0BAA0B,sCAACpO,SAAS,EACpC;OACC0D,6BAAY,CAAC8B,IAAI,CAAC5B,kBAAS,CAAChG,MAAM,CAACsP,WAAW,EAAE;SAACtT,EAAE,EAAEoG;QAAU,CAAC;MAChE;;;KAID9C,0BAA0B,wCAC1B;;;;;;;;OAQC,IAAI,IAAI,CAACwE,kBAAkB,CAACrI,MAAM,GAAG,CAAC,EACtC;SACC,IAAI,CAAC2J,mBAAmB,GAAG,IAAI,CAACtB,kBAAkB,CAAC,IAAI,CAACA,kBAAkB,CAACrI,MAAM,GAAG,CAAC,CAAC,CAACO,EAAE;;MAE1F;KACD+P,qBAAqB,mCACrB;OACC,IAAID,QAAQ,GAAG,IAAI;OAEnB,KAAK,IAAI2E,KAAK,GAAG,IAAI,CAACpQ,UAAU,CAAC5E,MAAM,GAAC,CAAC,EAAEgV,KAAK,IAAI,CAAC,EAAEA,KAAK,EAAE,EAC9D;SACC,IAAI,CAAC,IAAI,CAACpQ,UAAU,CAACoQ,KAAK,CAAC,CAAC5V,MAAM,EAClC;WACC;;SAGDiR,QAAQ,GAAG,IAAI,CAACzL,UAAU,CAACoQ,KAAK,CAAC,CAACzU,EAAE;;OAGrC,OAAO8P,QAAQ;MACf;KACD5B,kBAAkB,8BAACjD,KAAK,EACxB;OAAA;OACC,IAAMoE,qBAAqB,GAAGpE,KAAK,CAACO,MAAM,CAACsB,YAAY,GAAG7B,KAAK,CAACO,MAAM,CAACwB,YAAY;OACnF,IAAI,CAACzH,mBAAmB,GAAG,IAAI,CAACoI,aAAa,GAAG,IAAI,CAAC5E,gBAAgB,GAAGsG,qBAAqB;OAE7FzM,YAAY,CAAC,IAAI,CAACC,uBAAuB,CAAC;OAC1C,IAAI,CAACA,uBAAuB,GAAG2C,UAAU,CAAC,YAC1C;SACC,IAAI,OAAI,CAACD,mBAAmB,EAC5B;;WAEC,IAAI,CAAC,OAAI,CAAC5D,gBAAgB,EAC1B;aACC,OAAI,CAACA,gBAAgB,GAAG,IAAI;;UAE7B,MAED;;WAEC,IAAI,OAAI,CAACA,gBAAgB,IAAI,OAAI,CAACgG,oBAAoB,KAAK,CAAC,EAC5D;aACC,OAAI,CAAChG,gBAAgB,GAAG,KAAK;;;QAG/B,EAAE,GAAG,CAAC;;;OAGP,IAAIsJ,KAAK,CAACO,MAAM,CAACuB,SAAS,KAAK9B,KAAK,CAACO,MAAM,CAACsB,YAAY,GAAG7B,KAAK,CAACO,MAAM,CAAC4E,YAAY,EACpF;SACCxN,YAAY,CAAC,IAAI,CAACC,uBAAuB,CAAC;SAE1C,IAAI,IAAI,CAAClB,gBAAgB,IAAI,IAAI,CAACgG,oBAAoB,KAAK,CAAC,EAC5D;WACC,IAAI,CAAChG,gBAAgB,GAAG,KAAK;;;MAG/B;KACD6E,aAAa,2BACb;OAAA;OACC,IAAI,IAAI,CAAC6C,kBAAkB,EAC3B;SACC,OAAO,IAAI,CAACA,kBAAkB;;OAG/B,IAAI,CAACA,kBAAkB,GAAG9K,MAAM,CAACmW,MAAM,CAACC,EAAE,CAACC,IAAI,CAAC3L,IAAI,CAAC;OACrD,IAAI,CAACI,kBAAkB,CAACwL,WAAW,GAAG,UAACC,MAAM;SAAA,OAAK,OAAI,CAACjD,OAAO,CAACkD,GAAG,CAACC,UAAU,CAACF,MAAM,CAAC;;OAErF,OAAO,IAAI,CAACzL,kBAAkB;MAC9B;KACDvE,YAAY,wBAACC,IAAI,EACjB;OACC,IAAM/E,EAAE,GAAG+E,IAAI,CAACkQ,MAAM,EAAE,CAACC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC;OACpC,IAAI,IAAI,CAAC5L,gBAAgB,CAACtJ,EAAE,CAAC,EAC7B;SACC,OAAO,IAAI,CAACsJ,gBAAgB,CAACtJ,EAAE,CAAC;;OAGjC,IAAMqG,UAAU,GAAG,IAAI,CAACC,aAAa,CAACxH,UAAU,CAACC,UAAU,CAAC;OAE5D,IAAI,CAACuK,gBAAgB,CAACtJ,EAAE,CAAC,GAAG;SAC3BA,EAAE,EAAFA,EAAE;SACFgF,KAAK,EAAE,IAAI,CAACwB,aAAa,EAAE,CAACC,MAAM,CAACJ,UAAU,EAAEtB,IAAI;QACnD;OAED,OAAO,IAAI,CAACuE,gBAAgB,CAACtJ,EAAE,CAAC;MAChC;KACDsG,aAAa,yBAAC/F,IAAI,EAClB;OACC,OAAO0C,kBAAc,CAAC8B,IAAI,CAACoQ,aAAa,CACvCR,EAAE,CAACS,SAAS,CAACC,KAAK,CAACvW,UAAU,CAACyB,IAAI,CAAC,EACnC,IAAI,CAACsR,OAAO,CAACkD,GAAG,CAACO,WAAW,EAAE,CAC9B;MACD;KACDrQ,iBAAiB,+BACjB;OAAA,IADkBjF,EAAE,uEAAG,CAAC;OAAA,IAAE2F,IAAI,uEAAG,EAAE;OAElC,OAAO;SACN4P,UAAU,EAAE,OAAO,GAACvV,EAAE;SACtByR,YAAY,EAAE7N,2BAAY,CAACiB,KAAK;SAChCc,IAAI,EAAEA;QACN;MACD;KACDR,iBAAiB,+BACjB;OAAA,IADkBnF,EAAE,uEAAG,CAAC;OAEvB,OAAO;SACNuV,UAAU,EAAE,WAAW,GAACvV,EAAE;SAC1ByR,YAAY,EAAE7N,2BAAY,CAAC4R;QAC3B;MACD;KACDC,WAAW,uBAACC,MAAM,EAClB;OAAA;OACC,IACC,OAAO9K,MAAM,CAAC+K,oBAAoB,KAAK,WAAW,IAC/CD,MAAM,CAACnV,IAAI,KAAKjC,YAAY,CAACI,IAAI,EAErC;SACC,OAAO;WACNkX,OAAO,EAAE,mBAAM,EAAE;WACjBrB,SAAS,EAAE,qBAAM;UACjB;;OAGF,IAAIsB,gBAAgB,EAAEC,eAAe;OAErCD,gBAAgB,GAAG,0BAACE,OAAO,EAAK;SAC/BA,OAAO,CAACpR,OAAO,CAAC,UAAAqR,KAAK,EAAI;WACxB,IAAIC,aAAa,GAAG,KAAK;WACzB,IAAID,KAAK,CAACE,cAAc,EACxB;;aAEC,IAAIF,KAAK,CAACG,iBAAiB,IAAI,IAAI,EACnC;eACCF,aAAa,GAAG,IAAI;cACpB,MACI,IACJD,KAAK,CAACG,iBAAiB,GAAG,CAAC,IACxBH,KAAK,CAACI,UAAU,CAACC,MAAM,GAAGL,KAAK,CAACM,kBAAkB,CAACD,MAAM,GAAG,EAAE,IAC9DL,KAAK,CAACO,gBAAgB,CAACF,MAAM,GAAGL,KAAK,CAACI,UAAU,CAACC,MAAM,GAAG,CAAC,EAE/D;eACCJ,aAAa,GAAG,IAAI;;;WAItB,IAAIA,aAAa,EACjB;aACC,OAAI,CAAC1M,gBAAgB,CAACtJ,IAAI,CAAC+V,KAAK,CAACxK,MAAM,CAACQ,OAAO,CAAC5F,SAAS,CAAC;aAC1D,OAAI,CAACoD,iBAAiB,CAACwM,KAAK,CAACxK,MAAM,CAACQ,OAAO,CAAC5F,SAAS,CAAC,GAAG4P,KAAK,CAACxK,MAAM;YACrE,MAED;aACC,OAAI,CAACjC,gBAAgB,GAAG,OAAI,CAACA,gBAAgB,CAAC7C,MAAM,CAAC,UAAAN,SAAS;eAAA,OAAIA,SAAS,KAAK4P,KAAK,CAACxK,MAAM,CAACQ,OAAO,CAAC5F,SAAS;eAAC;aAC/G,OAAO,OAAI,CAACoD,iBAAiB,CAACwM,KAAK,CAACxK,MAAM,CAACQ,OAAO,CAAC5F,SAAS,CAAC;;WAG9D,IAAI,OAAI,CAACxF,kBAAkB,EAC3B;aACC,OAAI,CAAC6I,0BAA0B,EAAE;;UAElC,CAAC;QACF;OAEDqM,eAAe,GAAG;SACjBU,IAAI,EAAE,IAAI,CAAC5J,KAAK,CAACD,IAAI;SACrB8J,SAAS,EAAE,IAAIC,KAAK,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC/Q,GAAG,CAAC,UAACgR,IAAI,EAAEnC,KAAK;WAAA,OAAKA,KAAK,GAAG,IAAI;;QACnE;OAED,OAAO,IAAIkB,oBAAoB,CAACE,gBAAgB,EAAEC,eAAe,CAAC;MAClE;KACDe,eAAe,2BAACC,SAAS,EACzB;OACC,IAAMC,WAAW,GAAGlX,iCAAwB,CAACC,QAAQ,GAAG,GAAG,GAAGgX,SAAS;OAEvE,OAAO,CAAC,wBAAwB,EAAEjX,iCAAwB,CAACC,QAAQ,EAAEiX,WAAW,CAAC;MACjF;KACDvH,cAAc,0BAACsH,SAAS,EACxB;OACC,IAAMnK,IAAI,GAAG,IAAI,CAACC,KAAK,CAACD,IAAI;OAC5B,IAAMlB,SAAS,GAAG5L,iCAAwB,CAACC,QAAQ,GAAG,GAAG,GAAGgX,SAAS;OAErE,OAAOnK,IAAI,CAACqK,sBAAsB,CAACvL,SAAS,CAAC,CAAC,CAAC,CAAC;MAChD;KACDwL,mBAAmB,+BAACH,SAAS,EAC7B;OACC,IAAMC,WAAW,GAAGlX,iCAAwB,CAACC,QAAQ,GAAG,GAAG,GAAGgX,SAAS;OAEvE,OAAO,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAEC,WAAW,CAAC;MACtF;IAED;GAEDG,UAAU,EACV;KACC,iCAAiC,EAChC;OACCC,QAAQ,oBAACpX,OAAO,EAAEqX,QAAQ,EAAEC,KAAK,EACjC;SACC,IAAID,QAAQ,CAACrL,KAAK,KAAKzN,YAAY,CAACI,IAAI,EACxC;WACC,OAAO,KAAK;;SAGb,IAAI,CAAC2Y,KAAK,CAACC,OAAO,CAAC3U,SAAS,CAACyU,QAAQ,CAACrL,KAAK,CAAC,EAC5C;WACCsL,KAAK,CAACC,OAAO,CAAC3U,SAAS,CAACyU,QAAQ,CAACrL,KAAK,CAAC,GAAGsL,KAAK,CAACC,OAAO,CAAC7B,WAAW,CAAC;aACnElV,IAAI,EAAE6W,QAAQ,CAACrL;YACf,CAAC;;SAEHsL,KAAK,CAACC,OAAO,CAAC3U,SAAS,CAACyU,QAAQ,CAACrL,KAAK,CAAC,CAAC6J,OAAO,CAAC7V,OAAO,CAAC;SAExD,OAAO,IAAI;QACX;OACDwX,MAAM,kBAACxX,OAAO,EAAEqX,QAAQ,EAAEC,KAAK,EAC/B;SACC,IAAID,QAAQ,CAACrL,KAAK,KAAKzN,YAAY,CAACI,IAAI,EACxC;WACC,OAAO,IAAI;;SAGZ,IAAI2Y,KAAK,CAACC,OAAO,CAAC3U,SAAS,CAACyU,QAAQ,CAACrL,KAAK,CAAC,EAC3C;WACCsL,KAAK,CAACC,OAAO,CAAC3U,SAAS,CAACyU,QAAQ,CAACrL,KAAK,CAAC,CAACwI,SAAS,CAACxU,OAAO,CAAC;;SAG3D,OAAO,IAAI;;;IAGd;;GAEDG,QAAQ;CAiFT,CAAC;;;;AC1rDD,CAGO,IAAMsX,UAAU,GAAG;GACzB7X,QAAQ,sBAEJ0I,gBAAI,CAACC,QAAQ,CAAC;KAChBlE,WAAW,EAAE,qBAAAmE,KAAK;OAAA,OAAIA,KAAK,CAACnE,WAAW;;IACvC,CAAC,CACF;;GAEDlE,QAAQ;CAcT,CAAC;;CCzBM,IAAMuX,YAAY,GAAG;GAC3BjW,IAAI,kBACJ;KACC,OAAO;OACNiH,uBAAuB,EAAE,EAAE;OAC3BiP,gBAAgB,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;OACvBC,gBAAgB,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;OACtCC,iBAAiB,EAAE;MACnB;IACD;GACDzY,OAAO,qBACP;KACC,KAAK,IAAIoS,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACqG,iBAAiB,EAAErG,CAAC,EAAE,EAC/C;OACC,IAAMsG,UAAU,GAAGvY,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAG,IAAI,CAACkY,gBAAgB,CAACjY,MAAM,CAAC;OAC3E,IAAMqY,UAAU,GAAGxY,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAG,IAAI,CAACmY,gBAAgB,CAAClY,MAAM,CAAC;OAC3E,IAAI,CAACgJ,uBAAuB,CAACxI,IAAI,CAAC;SACjCwU,KAAK,EAAElD,CAAC;SACRhR,IAAI,EAAEsX,UAAU;SAChBnY,IAAI,EAAE,IAAI,CAACiY,gBAAgB,CAACG,UAAU,CAAC;SACvCC,OAAO,EAAE,IAAI,CAACC,cAAc,CAACH,UAAU,EAAEC,UAAU;QACnD,CAAC;;IAEH;GACDtP,OAAO,EACP;KACCwP,cAAc,0BAACzX,IAAI,EAAE0X,SAAS,EAC9B;OACC,IAAMrY,WAAW,GAAG,CAAC,kBAAkB,CAAC;OACxC,IAAI,IAAI,CAAC+X,gBAAgB,CAACM,SAAS,CAAC,KAAK,MAAM,EAC/C;SACCrY,WAAW,CAACK,IAAI,CAAC,uBAAuB,CAAC;QACzC,MAED;SACCL,WAAW,CAACK,IAAI,CAAC,2BAA2B,CAAC;;OAG9C,IAAIM,IAAI,KAAK,CAAC,EACd;SACCX,WAAW,CAACK,IAAI,CAAC,sBAAsB,CAAC;QACxC,MAED;SACCL,WAAW,CAACK,IAAI,CAAC,sBAAsB,CAAC;;OAGzC,OAAOL,WAAW;;IAEnB;;GAEDM,QAAQ;CAmCT,CAAC;;CCpFM,IAAMgY,UAAU,GAAG;;GAEzBhY,QAAQ;CAOT,CAAC;;CCNM,IAAMiY,UAAU,GAAG;;CAE1B;CACA;GACCjZ,KAAK,EACJ;KACCkZ,cAAc,EAAE;OACf7X,IAAI,EAAEhC,MAAM;OACZ,WAAS,oBAAW;SACnB,OAAO;WACNyB,EAAE,EAAE,CAAC;WACLgF,KAAK,EAAE,EAAE;WACTqT,WAAW,EAAE,EAAE;WACfC,KAAK,EAAE;UACP;;MAEF;KACDC,QAAQ,EAAE;OAAC,WAAS;;IACpB;GACF/P,OAAO,EACN;KACCgQ,KAAK,iBAACvN,KAAK,EACX;OACCnB,6BAAY,CAAC8B,IAAI,CAAC5B,kBAAS,CAAChG,MAAM,CAACyU,eAAe,EAAExN,KAAK,CAAC;;IAE3D;GACFtL,QAAQ,EACP;KACC+Y,eAAe,6BACf;OACC,OAAO,IAAI,CAACN,cAAc,CAACpT,KAAK,GAAE,IAAI,CAACoT,cAAc,CAACpT,KAAK,CAAC2T,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAE,IAAI,CAAC9G,OAAO,CAACkD,GAAG,CAACC,UAAU,CAAC,8BAA8B,CAAC;MACvI;KACD4D,oBAAoB,kCACpB;OACC,OAAO,IAAI,CAACR,cAAc,CAACC,WAAW,GAAE,IAAI,CAACD,cAAc,CAACC,WAAW,CAACM,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAE,EAAE;;IAE3F;GACFzY,QAAQ;CAaT,CAAC;;;;ACvDD,AA6BA4D,iBAAS,CAAC+U,SAAS,CAAC,wBAAwB,EAC5C;GACCtX,UAAU,EAAE;KAAClB,WAAW,EAAXA,WAAW;KAAEmX,UAAU,EAAVA,UAAU;KAAEC,YAAY,EAAZA,YAAY;KAAES,UAAU,EAAVA,UAAU;KAAEC,UAAU,EAAVA;IAAW;GAC3EjZ,KAAK,EACL;KACCoB,MAAM,EAAE;OAAE,WAAS;MAAG;KACtBG,QAAQ,EAAE;OAAE,WAAS;MAAG;KACxBqY,eAAe,EAAE;OAAE,WAAS;MAAO;KACnCC,gBAAgB,EAAE;OAAC,WAAS;MAAK;KACjCC,cAAc,EAAE;OAAC,WAAS;MAAK;KAC/B/X,kBAAkB,EAAE;OAAE,WAAS;MAAM;KACrCC,2BAA2B,EAAE;OAAE,WAAS;MAAM;KAC9CC,iBAAiB,EAAE;OAAE,WAAS;MAAO;KACrCC,mBAAmB,EAAE;OAAE,WAAS;MAAM;KACtCC,iBAAiB,EAAE;OAAE,WAAS;;IAC9B;GACDG,IAAI,kBACJ;KACC,OAAO;OACNC,WAAW,EAAE,KAAK;OAClBwX,WAAW,EAAEC,oBAAW,CAACC;MACzB;IACD;GACDha,OAAO,qBACP;KACC2K,6BAAY,CAACC,SAAS,CAACC,kBAAS,CAAChG,MAAM,CAACvC,WAAW,EAAE,IAAI,CAACgJ,aAAa,CAAC;KACxE,IAAI,CAAC2O,YAAY,EAAE;IACnB;GACD1W,aAAa,2BACb;KACCoH,6BAAY,CAACqB,WAAW,CAACnB,kBAAS,CAAChG,MAAM,CAACvC,WAAW,EAAE,IAAI,CAACgJ,aAAa,CAAC;IAC1E;GACDjH,KAAK,EACL;KACC/C,QAAQ,oBAACgD,QAAQ,EAAEC,QAAQ,EAC3B;OACCpB,oBAAM,CAACC,IAAI,CAAC,0BAA0B,EAAEmB,QAAQ,EAAE,MAAM,EAAED,QAAQ,CAAC;OACnE,IAAI,CAAChC,WAAW,GAAG,KAAK;OACxB,IAAI,CAAC2X,YAAY,EAAE;;IAEpB;GACDzZ,QAAQ;KAEPqK,SAAS,EAAE;OAAA,OAAMA,kBAAS;;KAC1BkP,WAAW,EAAE;OAAA,OAAMA,oBAAW;;KAE9BG,iBAAiB,+BACjB;OACC,OAAO,CAAC,uBAAuB,EAAE;SAAC,0BAA0B,EAAE,IAAI,CAACC;QAAwB,CAAC;MAC5F;KACDC,gBAAgB,8BAChB;OACC,OAAO,CAAC,mBAAmB,EAAE;SAAC,mCAAmC,EAAE,IAAI,CAACrS;QAAiB,CAAC;MAC1F;KACDsS,iBAAiB,+BACjB;OACC,OAAO,CAAC,oBAAoB,EAAE;SAAC,iCAAiC,EAAE,IAAI,CAACP,WAAW,KAAKC,oBAAW,CAACO;QAAK,CAAC;MACzG;KACDrB,cAAc,4BACd;OACC,IAAM5K,MAAM,GAAG;SACdxN,EAAE,EAAE,CAAC;SACLgF,KAAK,EAAE,EAAE;SACTqT,WAAW,EAAE,EAAE;SACfC,KAAK,EAAE;QACP;OAED,IAAI,CAAC,IAAI,CAACgB,uBAAuB,IAAI,CAAC,IAAI,CAACtV,MAAM,CAAC0V,OAAO,EACzD;SACC,OAAOlM,MAAM;;OAGd,IAAMxF,OAAO,GAAG,IAAI,CAAC/D,MAAM,CAACC,OAAO,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAACF,MAAM,CAACG,MAAM,EAAE,IAAI,CAACH,MAAM,CAAC0V,OAAO,CAAC;OACnG,IAAI,CAAC1R,OAAO,EACZ;SACC,OAAOwF,MAAM;;OAGd,IAAMmM,IAAI,GAAG,IAAI,CAAC1V,MAAM,CAACC,OAAO,CAAC,WAAW,CAAC,CAAC8D,OAAO,CAAC9C,QAAQ,CAAC;OAC/D,IAAM0U,KAAK,GAAG,IAAI,CAAC3V,MAAM,CAACC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAACF,MAAM,CAACG,MAAM,CAAC;OAEtE,OAAO;SACNnE,EAAE,EAAE,IAAI,CAACgE,MAAM,CAAC0V,OAAO;SACvB1U,KAAK,EAAEgD,OAAO,CAACyI,MAAM,CAACoJ,IAAI,GAAGC,cAAI,CAACC,MAAM,CAAC/R,OAAO,CAACyI,MAAM,CAACoJ,IAAI,CAAC,GAAIF,IAAI,GAAGA,IAAI,CAACK,IAAI,GAAE,EAAG;SACtF1B,KAAK,EAAEqB,IAAI,GAAEA,IAAI,CAACrB,KAAK,GAAE,EAAE;SAC3BD,WAAW,EAAE4B,kBAAK,CAACtU,IAAI,CAACuU,MAAM,CAAClS,OAAO,CAACrC,IAAI,EAAEqC,OAAO,CAACyI,MAAM,EAAEmJ,KAAK,EAAE,IAAI,CAAC/V,QAAQ;QACjF;MACD;KACDsW,SAAS,uBACT;OACC,IAAI,CAAC,IAAI,CAACpB,gBAAgB,EAC1B;SACC,OAAO,KAAK;;;;;OAKb,OAAO,CAAC,IAAI,CAACqB,eAAe,IAAK,IAAI,CAACA,eAAe,IAAI,CAAC,IAAI,CAACC,qBAAqB,IAAI,CAAC,IAAI,CAAC5Y,WAAY;MAC1G;KACD6Y,OAAO,qBACP;OACC,OAAO,IAAI,CAACtB,cAAc,IAAI,IAAI,CAACvX,WAAW,IAAI,IAAI,CAAC8Y,iBAAiB,CAAC9a,MAAM,KAAK,CAAC;MACrF;KACD2a,eAAe,6BACf;OACC,IAAMI,SAAS,GAAG,IAAI,CAACvW,MAAM,CAACsE,KAAK,CAACiS,SAAS,CAACnW,UAAU;OAExD,OAAOmW,SAAS,CAAC,IAAI,CAAC/Z,QAAQ,CAAC,IAAI+Z,SAAS,CAAC,IAAI,CAAC/Z,QAAQ,CAAC,CAAC0D,MAAM,GAAG,CAAC;MACtE;KACDkW,qBAAqB,mCACrB;OACC,IAAM9H,QAAQ,GAAG,IAAI,CAACtO,MAAM,CAACsE,KAAK,CAACgK,QAAQ,CAAClO,UAAU;OAEtD,OAAOkO,QAAQ,CAAC,IAAI,CAACpO,MAAM,CAAC;MAC5B;KACDmV,uBAAuB,qCACvB;OACC,IAAMmB,gBAAgB,GAAG,IAAI,CAACF,iBAAiB,IAAI,IAAI,CAACA,iBAAiB,CAAC9a,MAAM,GAAG,CAAC;OACpF,IAAIgb,gBAAgB,EACpB;SACC,IAAI,CAACxB,WAAW,GAAGC,oBAAW,CAACO,IAAI;QACnC,MACI,IAAI,IAAI,CAACzV,MAAM,IAAI,IAAI,CAACA,MAAM,CAAC0W,IAAI,EACxC;SACC,IAAI,CAACzB,WAAW,GAAGC,oBAAW,CAACyB,KAAK;QACpC,MAED;SACC,IAAI,CAAC1B,WAAW,GAAGC,oBAAW,CAACC,OAAO;;OAGvC,OAAOsB,gBAAgB;MACvB;KACDzW,MAAM,oBACN;OACC,IAAMA,MAAM,GAAG,IAAI,CAACC,MAAM,CAACC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAACE,WAAW,CAACJ,MAAM,CAACvD,QAAQ,CAAC;OAErF,OAAOuD,MAAM,GAAEA,MAAM,GAAE,IAAI,CAACC,MAAM,CAACC,OAAO,CAAC,oBAAoB,CAAC,EAAE;MAClE;KACDC,MAAM,oBACN;OACC,IAAI,CAAC,IAAI,CAACC,WAAW,EACrB;SACC,OAAO,CAAC;;OAGT,OAAO,IAAI,CAACA,WAAW,CAACJ,MAAM,CAACG,MAAM;MACrC;KACDoW,iBAAiB,+BACjB;OACC,OAAO,IAAI,CAACtW,MAAM,CAACC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAACE,WAAW,CAACJ,MAAM,CAACG,MAAM,CAAC;MAC1E;KACD+C,gBAAgB,8BAChB;OACC,OAAO,IAAI,CAAC9C,WAAW,CAAC+C,OAAO,CAACC,cAAc;;MAE5CiB,gBAAI,CAACC,QAAQ,CAAC;KAChBlE,WAAW,EAAE,qBAAAmE,KAAK;OAAA,OAAIA,KAAK,CAACnE,WAAW;;IACvC,CAAC;KACFP,QAAQ,sBACR;OACC,OAAOC,gBAAS,CAACC,kBAAkB,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC;;KAE5G;GACDyE,OAAO,EACP;KACCoS,uBAAuB,qCACvB;OAAA;OACC,IAAMC,KAAK,qDACTnI,0BAAiB,CAACoI,qBAAqB,EAAG,CAAC7I,mBAAU,CAAC6I,qBAAqB,EAAE,EAAE,CAAC,uCAChFpI,0BAAiB,CAACQ,SAAS,EAAG,CAACjB,mBAAU,CAACiB,SAAS,EAAE;SAACF,SAAS,EAAE,IAAI,CAACvS;QAAS,CAAC,uCAChFiS,0BAAiB,CAACqI,uBAAuB,EAAG,CAAC9I,mBAAU,CAACC,mBAAmB,EAAE;SAC7Ec,SAAS,EAAE,IAAI,CAACvS,QAAQ;SACxByQ,KAAK,EAAE,IAAI,CAAC8J,aAAa,EAAE,CAAC5W,WAAW,CAAC6W,sBAAsB,EAAE;SAChE5I,YAAY,EAAE;QACd,CAAC,UACF;OACD,IAAI4H,kBAAK,CAACjW,MAAM,CAACkX,QAAQ,CAAC,IAAI,CAACza,QAAQ,CAAC,EACxC;SACCoa,KAAK,CAACnI,0BAAiB,CAACyI,SAAS,CAAC,GAAG,CAAClJ,mBAAU,CAACkJ,SAAS,EAAE,EAAE,CAAC;QAC/D,MAED;SACCN,KAAK,CAACnI,0BAAiB,CAAC0I,aAAa,CAAC,GAAG,CAACnJ,mBAAU,CAACmJ,aAAa,EAAE;WAACpb,EAAE,EAAE,CAAC,IAAI,CAACM,MAAM,EAAE,IAAI,CAACG,QAAQ;UAAE,CAAC;;OAGxG,OAAOoa,KAAK;MACZ;KAEDQ,WAAW,yBACX;OAAA;OACC/Y,oBAAM,CAACiK,GAAG,CAAC,wBAAwB,CAAC;OAEpC,IAAMsO,KAAK,GAAG,IAAI,CAACD,uBAAuB,EAAE;OAC5C,IAAI,CAAC/I,OAAO,CAACC,UAAU,CAACC,GAAG,EAAE,CAAC0B,SAAS,CAACoH,KAAK,EAAE,UAACnH,QAAQ,EACxD;SACC,IAAI,CAACA,QAAQ,EACb;WACC,OAAO,KAAK;;;;SAIb,IAAI4H,cAAc,GAAG5H,QAAQ,CAAChB,0BAAiB,CAACoI,qBAAqB,CAAC;SACtE,IAAI,CAACQ,cAAc,CAACzH,KAAK,EAAE,EAC3B;WACC,KAAI,CAACpB,iBAAiB,CAACC,0BAAiB,CAACoI,qBAAqB,EAAEQ,cAAc,CAAC;;;;SAIhF,IAAIC,aAAa,GAAG7H,QAAQ,CAAChB,0BAAiB,CAACyI,SAAS,CAAC;SACzD,IAAII,aAAa,IAAI,CAACA,aAAa,CAAC1H,KAAK,EAAE,EAC3C;WACC,KAAI,CAACpB,iBAAiB,CAACC,0BAAiB,CAACyI,SAAS,EAAEI,aAAa,CAAC;;;;SAInE,IAAIC,iBAAiB,GAAG9H,QAAQ,CAAChB,0BAAiB,CAAC0I,aAAa,CAAC;SACjE,IAAII,iBAAiB,IAAI,CAACA,iBAAiB,CAAC3H,KAAK,EAAE,EACnD;WACC,KAAI,CAACpB,iBAAiB,CAACC,0BAAiB,CAAC0I,aAAa,EAAEI,iBAAiB,CAAC;;;;SAI3E,IAAI5H,aAAa,GAAGF,QAAQ,CAAChB,0BAAiB,CAACQ,SAAS,CAAC;SACzD,IAAI,CAACU,aAAa,CAACC,KAAK,EAAE,EAC1B;WACC,KAAI,CAACpB,iBAAiB,CAACC,0BAAiB,CAACQ,SAAS,EAAEU,aAAa,CAAC;;;;SAInE,IAAI6H,uBAAuB,GAAG/H,QAAQ,CAAChB,0BAAiB,CAACqI,uBAAuB,CAAC;SACjF,IAAI,CAACU,uBAAuB,CAAC5H,KAAK,EAAE,EACpC;WACC,KAAI,CAAC5P,MAAM,CAACoN,QAAQ,CAAC,iBAAiB,EAAE;aACvCrN,MAAM,EAAE;eAAEpD,kBAAkB,EAAE;;YAC9B,CAAC,CAACwN,IAAI,CAAC,YAAM;aACb,KAAI,CAACqE,iBAAiB,CAACC,0BAAiB,CAACqI,uBAAuB,EAAEU,uBAAuB,CAAC;;YAE1F,CAAC;;QAEH,EAAE,KAAK,EAAE,KAAK,EAAExB,kBAAK,CAACyB,oBAAoB,CAAC;SAAC1B,IAAI,EAAE,WAAW;SAAEhW,MAAM,EAAE,IAAI,CAACgX,aAAa,EAAE,CAAC5W,WAAW,CAACuX,aAAa;QAAG,CAAC,CAAC;OAE3H,OAAO,IAAIhM,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM;SAAA,OAAKD,OAAO,EAAE;SAAC;MAClD;KACDwJ,YAAY,0BACZ;OACC,IAAI,IAAI,CAACgB,eAAe,EACxB;SACC,IAAMI,SAAS,GAAG,IAAI,CAACvW,MAAM,CAACsE,KAAK,CAACiS,SAAS,CAACnW,UAAU;SAExD,IAAI,CAACJ,MAAM,CAAC2X,MAAM,CAAC,iBAAiB,EAAE;WAAC5X,MAAM,EAAE;aAC9CG,MAAM,EAAEqW,SAAS,CAAC,IAAI,CAAC/Z,QAAQ,CAAC,CAAC0D,MAAM;aACvC1D,QAAQ,EAAE,IAAI,CAACA;;UACd,CAAC;;OAEJ,IAAI,CAAC,IAAI,CAACqY,eAAe,EACzB;SACC,IAAI,CAACuC,WAAW,EAAE;;MAEnB;KACD5Q,aAAa,+BACb;OAAA,IADqBQ,KAAK,QAAXzJ,IAAI;OAElB,IAAIyJ,KAAK,CAAC9G,MAAM,KAAK,IAAI,CAACA,MAAM,EAChC;SACC,OAAO,KAAK;;OAGb,IAAI,IAAI,CAAC1C,WAAW,KAAK,IAAI,EAC7B;SACC,OAAO,KAAK;;OAGb,IAAI,CAACA,WAAW,GAAG,IAAI;MACvB;KAEDuZ,aAAa,2BACb;OACC,OAAO,IAAI,CAACnJ,OAAO,CAACW,IAAI,CAACT,GAAG,CAAC,YAAY,CAAC;MAC1C;KAEDU,iBAAiB,6BAACoJ,MAAM,EAAEC,WAAW,EAAEC,KAAK,EAC5C;OACC,IAAI,CAACf,aAAa,EAAE,CAACvI,iBAAiB,CAACoJ,MAAM,EAAEC,WAAW,EAAEC,KAAK,CAAC;;IAEnE;;GAED7b,QAAQ;CAsCT,CAAC,CAAC;;;;"}

Youez - 2016 - github.com/yon3zu
LinuXploit