@telia-ace/knowledge-widget-bot-provider 0.0.1-alpha.62 → 0.0.1-alpha.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contact-method-list.d45b8f36.js +88 -0
- package/dist/contact-method-list.d45b8f36.js.map +1 -0
- package/dist/contact-method.fb45a5e2.js +119 -0
- package/dist/contact-method.fb45a5e2.js.map +1 -0
- package/dist/entry-handler.d.ts +2 -0
- package/dist/feedback-list.29c075b4.js +70 -0
- package/dist/feedback-list.29c075b4.js.map +1 -0
- package/dist/http-client.d.ts +43 -0
- package/dist/index.76a36f22.js +767 -0
- package/dist/index.76a36f22.js.map +1 -0
- package/dist/index.js +6 -669
- package/dist/index.js.map +1 -1
- package/dist/no-good-alternative.45aa0387.js +41 -0
- package/dist/no-good-alternative.45aa0387.js.map +1 -0
- package/dist/notification-list.cae1df51.js +62 -0
- package/dist/notification-list.cae1df51.js.map +1 -0
- package/dist/provider.d.ts +25 -0
- package/dist/store.d.ts +15 -0
- package/dist/styles.6c010dfc.js +15 -0
- package/dist/styles.6c010dfc.js.map +1 -0
- package/dist/types.d.ts +79 -0
- package/dist/ui/contact-method-list.d.ts +10 -0
- package/dist/ui/contact-method.d.ts +9 -0
- package/dist/ui/feedback-list.d.ts +8 -0
- package/dist/ui/no-good-alternative.d.ts +6 -0
- package/dist/ui/notification-list.d.ts +11 -0
- package/dist/ui/styles.d.ts +1 -0
- package/dist/utils.d.ts +26 -0
- package/package.json +11 -14
- package/dist/client/chat.client.d.ts +0 -16
- package/dist/client/contact-method.client.d.ts +0 -25
- package/dist/client/http.client.d.ts +0 -23
- package/dist/client/middleware.client.d.ts +0 -14
- package/dist/contact-method.15886c3d.js +0 -66
- package/dist/contact-method.15886c3d.js.map +0 -1
- package/dist/contract/custom-component/contact-method-item.d.ts +0 -8
- package/dist/contract/custom-component/contact-method-list.d.ts +0 -7
- package/dist/contract/custom-component/contact-method.d.ts +0 -3
- package/dist/contract/enum/server-entry-type.enum.d.ts +0 -7
- package/dist/contract/model/conversation-api-model/list.model.d.ts +0 -5
- package/dist/contract/model/conversation-api-model/message.model.d.ts +0 -7
- package/dist/contract/model/http/action.model.d.ts +0 -3
- package/dist/contract/model/http/client-action.model.d.ts +0 -4
- package/dist/contract/model/http/client-envelope.model.d.ts +0 -9
- package/dist/contract/model/http/connect-options.model.d.ts +0 -5
- package/dist/contract/model/http/global-state.model.d.ts +0 -8
- package/dist/contract/model/http/http-client-options.model.d.ts +0 -5
- package/dist/contract/model/http/server-entry.model.d.ts +0 -11
- package/dist/contract/model/http/server-envelope.model.d.ts +0 -10
- package/dist/contract/model/middleware/aggregator-state.model.d.ts +0 -4
- package/dist/contract/model/shared/loose-object.model.d.ts +0 -3
- package/dist/helper/chat.helper.d.ts +0 -8
- package/dist/helper/http.helper.d.ts +0 -13
- package/dist/helper/middleware.helper.d.ts +0 -12
- package/dist/helper/store.helper.d.ts +0 -22
- package/dist/interface/entry.interface.d.ts +0 -20
- package/dist/interface/middleware/paging.interface.d.ts +0 -4
- package/dist/interface/middleware/processor.interface.d.ts +0 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.76a36f22.js","sources":["../src/types.ts","../src/utils.ts","../src/entry-handler.ts","../src/http-client.ts","../src/store.ts","../src/provider.ts","../src/plugin.ts"],"sourcesContent":["import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\n\r\nexport enum CustomMessageTypes {\r\n ContactMethod = 'ace-knowledge-bot-contact-method',\r\n ContactList = 'ace-knowledge-bot-contact-list',\r\n FeedbackList = 'ace-knowledge-bot-feedback-list',\r\n NotificationList = 'ace-knowledge-bot-notification-list',\r\n NoGoodAlternative = 'ace-knowledge-bot-no-good-alternative',\r\n}\r\n\r\ntype LooseObject = { [key: string]: any };\r\n\r\nexport interface ActionItem {\r\n label: string;\r\n actionKey: string;\r\n data?: any;\r\n}\r\n\r\nexport interface MessageGroup {\r\n id: string;\r\n isUser: boolean;\r\n items: MessageGroupItem[];\r\n writer?: any;\r\n meta: { [key: string]: any };\r\n}\r\n\r\nexport interface MessageGroupItem {\r\n id: string;\r\n groupId: string;\r\n isUser: boolean;\r\n message: [ConversationMessageListItemType | CustomMessageTypes, any];\r\n}\r\n\r\nexport interface ClientEnvelope {\r\n command?: LooseObject;\r\n action?: {\r\n key: string;\r\n content: any;\r\n };\r\n globalState?: LooseObject;\r\n localState?: LooseObject;\r\n clientId?: string;\r\n funnel?: string;\r\n}\r\n\r\nexport interface ServerEnvelope {\r\n clientId?: string | undefined;\r\n entries: ServerEntry[];\r\n globalState?: GlobalState;\r\n resolveCommand?: string;\r\n clientEnvelope?: ClientEnvelope;\r\n}\r\n\r\nexport interface GlobalState {\r\n completedInteractionsCount: number;\r\n lastQuestion?: string;\r\n lastBotGuide: number;\r\n lastGuideTitle?: string;\r\n site: string;\r\n invincibleParameters: object;\r\n}\r\n\r\nexport interface ServerEntry {\r\n id: string;\r\n type: string;\r\n content: any;\r\n actions: { [key: string]: any };\r\n tags: string[];\r\n relation?: string;\r\n timestamp: string;\r\n localState?: { [key: string]: any };\r\n}\r\n\r\nexport interface ListContent {\r\n header?: string;\r\n actions: ActionItem[];\r\n contactMethodIds?: string[];\r\n entryId: string;\r\n groupId: string;\r\n}\r\n","import { ContactMethodType } from '@telia-ace/knowledge-widget-adapters';\r\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { FormBuilder, submitButton } from '@telia-ace/widget-forms';\r\nimport { Symbol } from '@telia-ace/widget-ui';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { CustomMessageTypes, MessageGroup, MessageGroupItem } from './types';\r\n\r\nconst convertLegacySymbol = (symbol?: { type: string; content: string }): Symbol | undefined => {\r\n if (symbol) {\r\n const { type, content } = symbol;\r\n if (type && content) {\r\n return { type, content };\r\n }\r\n }\r\n};\r\n\r\nexport const createGroup = ({\r\n isUser,\r\n items = [],\r\n meta = {},\r\n}: {\r\n isUser: boolean;\r\n items?: Partial<MessageGroupItem>[];\r\n meta?: MessageGroup['meta'];\r\n}) => {\r\n const groupId = uuid();\r\n\r\n const group = {\r\n id: groupId,\r\n isUser,\r\n items: items.map((i) => {\r\n return {\r\n id: i.id || uuid(),\r\n isUser: isUser,\r\n groupId: groupId,\r\n message: i.message || [],\r\n };\r\n }),\r\n meta,\r\n } as MessageGroup;\r\n\r\n return group;\r\n};\r\n\r\nexport const contactMethodFromLegacy = (\r\n {\r\n id,\r\n title,\r\n defaultIcon,\r\n exits: [exit],\r\n exitType,\r\n confirmationText,\r\n expandFormAutomatically,\r\n form,\r\n description,\r\n }: any,\r\n options: {\r\n validation?: any;\r\n guideId?: string;\r\n } = {}\r\n): any => {\r\n const { adapter } = exit || { Adapter: {} };\r\n const { clientName = '', settings: adapterSettings = {}, customClientName = '' } = adapter;\r\n const { validation } = options;\r\n\r\n const settings: any = {\r\n id: id.toString(),\r\n title: title,\r\n description: description,\r\n symbol: convertLegacySymbol(defaultIcon),\r\n clientName: clientName === 'custom.adapter' ? customClientName : clientName,\r\n expanded: true,\r\n inline: true,\r\n body: {},\r\n };\r\n\r\n if (clientName.indexOf('phone') > -1 || clientName.indexOf('freetext') > -1) {\r\n const { displayTextBeforeClick, textBeforeClick } = adapterSettings;\r\n if (displayTextBeforeClick === 'true') {\r\n settings.expanded = false;\r\n settings.title = textBeforeClick;\r\n }\r\n\r\n if (clientName.indexOf('phone.text') > -1) {\r\n settings.body.phoneNumber = adapterSettings.phoneNumber;\r\n } else {\r\n settings.body.freetext = adapterSettings.freetext;\r\n }\r\n }\r\n\r\n if (\r\n clientName.indexOf('chat.popup') > -1 ||\r\n clientName.indexOf('link') > -1 ||\r\n (clientName === 'custom.adapter' && exitType === 'custom')\r\n ) {\r\n settings.body = adapterSettings;\r\n settings.body.confirmationFallback = confirmationText;\r\n }\r\n\r\n if (clientName.indexOf('ace') > -1) {\r\n settings.body = adapterSettings;\r\n }\r\n\r\n if (form && form.hasValueComponents) {\r\n if (validation) {\r\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form, validation).get();\r\n } else {\r\n settings.body.form = FormBuilder.fromLegacyForm(id.toString(), form).get();\r\n }\r\n if (!expandFormAutomatically) {\r\n settings.expanded = settings.inline = false;\r\n }\r\n\r\n settings.body = updateForm(settings, { submit: 'Submit' });\r\n }\r\n\r\n if (options.guideId) {\r\n settings.body.guideId = options.guideId;\r\n }\r\n\r\n return settings;\r\n};\r\n\r\nexport const getListType = (state: any) => {\r\n if (state?.$type === 'Humany.Matching.Bots.Conversations.GuideListState, Humany.Matching') {\r\n return ConversationMessageListItemType.LinkList;\r\n } else if (\r\n state?.$type ===\r\n 'Humany.Matching.Bots.Conversations.States.GuideFeedbackState, Humany.Matching'\r\n ) {\r\n return CustomMessageTypes.FeedbackList;\r\n } else if (\r\n state?.$type === 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\r\n ) {\r\n return CustomMessageTypes.ContactList;\r\n } else return ConversationMessageListItemType.ButtonList;\r\n};\r\n\r\nexport const getKnowledgeBotEndpoint = (\r\n container: Container,\r\n component: any /*: ComponentNodeController */\r\n) => {\r\n const { knowledgeBotEndpoint } = component.properties();\r\n\r\n if (knowledgeBotEndpoint) {\r\n return `${knowledgeBotEndpoint}/conversations`;\r\n }\r\n\r\n const { data } = container.get('$settings');\r\n\r\n if (!data || !data.projection) throw new Error('Missing Knowledge Bot endpoint');\r\n\r\n return `${data.projection}/conversations`;\r\n};\r\n\r\nexport const updateForm = (\r\n contactMethod: ContactMethodType,\r\n {\r\n submit,\r\n errors,\r\n meta,\r\n }: { submit: string; errors?: { [key: string]: string }; meta?: { [key: string]: string } }\r\n): any => {\r\n if (contactMethod?.body?.form) {\r\n const { body } = contactMethod;\r\n const builder = new FormBuilder(body.form);\r\n\r\n if (!body.form.layout.submit) {\r\n builder.createComponent(submitButton(submit, 'submit'));\r\n }\r\n\r\n if (errors) {\r\n builder.setValidationErrors(errors);\r\n }\r\n\r\n if (meta) {\r\n (builder as any).setMeta(meta);\r\n }\r\n\r\n return {\r\n ...body,\r\n form: builder.get(),\r\n };\r\n }\r\n return contactMethod?.body || {};\r\n};\r\n","import { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport {\r\n ActionItem,\r\n CustomMessageTypes,\r\n ListContent,\r\n MessageGroup,\r\n MessageGroupItem,\r\n ServerEntry,\r\n} from './types';\r\nimport { contactMethodFromLegacy, createGroup, getListType } from './utils';\r\n\r\nconst createGroupItem = ({\r\n messageId,\r\n message,\r\n group,\r\n}: {\r\n messageId: string;\r\n message: MessageGroupItem['message'];\r\n group: MessageGroup;\r\n}) => {\r\n return {\r\n id: messageId,\r\n message,\r\n groupId: group.id,\r\n isUser: group.isUser,\r\n };\r\n};\r\n\r\nexport const processEntries = async (entries: ServerEntry[], prevGroup?: MessageGroup) => {\r\n const createListContent = (\r\n listType: string,\r\n entry: ServerEntry,\r\n groupId: string,\r\n listContent: ListContent = {\r\n actions: [],\r\n entryId: entry.id,\r\n groupId,\r\n }\r\n ) => {\r\n const contactMethodIds: string[] = [];\r\n\r\n listContent.actions = entry.content.items.map((i: any) => {\r\n const action = {\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n symbol: !!i.symbol ? i.symbol : undefined,\r\n } as ActionItem;\r\n\r\n if (i.data) {\r\n const entryAction = entry.actions[i.actionKey];\r\n if (listType === CustomMessageTypes.ContactList) {\r\n contactMethodIds.push(i.data.id);\r\n action.data = contactMethodFromLegacy(i.data, {\r\n guideId: entryAction?.guideId?.toString(),\r\n });\r\n } else {\r\n action.data = i.data;\r\n }\r\n }\r\n return action;\r\n });\r\n\r\n if (listType === CustomMessageTypes.ContactList) {\r\n listContent.contactMethodIds = contactMethodIds;\r\n }\r\n\r\n return listContent;\r\n };\r\n\r\n const transform = async (\r\n entry: ServerEntry,\r\n group: MessageGroup,\r\n related: ServerEntry[] = [],\r\n prevGroup?: MessageGroup\r\n ) => {\r\n const messageId = uuid();\r\n\r\n switch (entry.type) {\r\n case 'List':\r\n {\r\n const { header, items, html } = entry.content;\r\n\r\n const result = [];\r\n\r\n let listContent = {\r\n actions: [],\r\n entryId: entry.id,\r\n groupId: group.id,\r\n } as ListContent;\r\n\r\n if (header) {\r\n listContent.header = header;\r\n }\r\n\r\n if (items?.length > 0) {\r\n const listType = getListType(entry.localState);\r\n listContent = createListContent(listType, entry, group.id, listContent);\r\n\r\n // entry has related entries\r\n if (!!related.length) {\r\n const pagingEntry = related.find((e) => e.tags.includes('paging'));\r\n const fallbackEntry = related.find((e) => e.tags.includes('fallback'));\r\n\r\n if (pagingEntry?.content) {\r\n group.meta.paging = {\r\n actions: pagingEntry.actions,\r\n items: pagingEntry.content.items,\r\n localState: pagingEntry.localState,\r\n };\r\n pagingEntry.content.items.forEach((i: any) => {\r\n listContent.actions.push({\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n data: {\r\n groupId: !!prevGroup ? prevGroup.id : group.id,\r\n },\r\n });\r\n });\r\n }\r\n\r\n if (fallbackEntry) {\r\n const fallbackAction = fallbackEntry.content.items.find(\r\n (i: any) => i.actionKey === 'help'\r\n );\r\n if (fallbackAction) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.Separator,\r\n undefined,\r\n ],\r\n group,\r\n })\r\n );\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.NoGoodAlternative,\r\n { body: fallbackAction.title },\r\n ],\r\n group,\r\n })\r\n );\r\n }\r\n }\r\n }\r\n\r\n result.unshift(\r\n createGroupItem({\r\n messageId,\r\n message: [listType, listContent],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (html) {\r\n result.unshift(\r\n createGroupItem({\r\n messageId,\r\n message: [ConversationMessageListItemType.HTML, { body: html }],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n break;\r\n case 'Text':\r\n {\r\n const result = [];\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n { body: entry.content.html },\r\n ],\r\n group,\r\n })\r\n );\r\n\r\n // embedded contact methods\r\n if (!!related.length) {\r\n const contactMethodListEntry = related.find(\r\n (e) =>\r\n e.type === 'List' &&\r\n e.localState?.$type ===\r\n 'Humany.Matching.Bots.Conversations.States.ContactState, Humany.Matching'\r\n );\r\n\r\n const dialogListEntry = related.find((e) => e.tags.includes('dialog'));\r\n const feedbackEntry = related.find((e) => e.tags.includes('feedback'));\r\n const contactMethodEntry = related.find(\r\n (e) => e.tags.includes('contact') && e.type === 'Contact'\r\n );\r\n\r\n if (contactMethodEntry) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.ContactMethod,\r\n {\r\n contactMethodId: contactMethodEntry.content.id,\r\n groupId: group.id,\r\n guideId: contactMethodEntry.content.guideId,\r\n },\r\n ],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (dialogListEntry) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.ButtonList,\r\n {\r\n actions: dialogListEntry.content.items.map((i: any) => {\r\n return {\r\n label: i.title,\r\n actionKey: i.actionKey,\r\n };\r\n }),\r\n },\r\n ],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (contactMethodListEntry) {\r\n const listContent = createListContent(\r\n CustomMessageTypes.ContactList,\r\n contactMethodListEntry,\r\n group.id\r\n );\r\n\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [ConversationMessageListItemType.Separator, undefined],\r\n group,\r\n })\r\n );\r\n\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [CustomMessageTypes.ContactList, listContent],\r\n group,\r\n })\r\n );\r\n }\r\n\r\n if (feedbackEntry) {\r\n if (feedbackEntry.content.html) {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n group,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: feedbackEntry.content.html,\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n group,\r\n message: [\r\n CustomMessageTypes.FeedbackList,\r\n {\r\n actions: feedbackEntry.content.items.map((i: any) => {\r\n return {\r\n actionKey: i.actionKey,\r\n label: i.title,\r\n };\r\n }),\r\n },\r\n ],\r\n })\r\n );\r\n }\r\n }\r\n return result;\r\n }\r\n break;\r\n case 'Contact': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.ContactMethod,\r\n {\r\n contactMethodId: entry.content.id,\r\n groupId: group.id,\r\n guideId: entry.content.guideId,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n case 'CategorizedNoticeList': {\r\n const result = [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n CustomMessageTypes.NotificationList,\r\n {\r\n id: entry.content.item.id.toString(),\r\n header: entry.content.item.title,\r\n items: entry.content.item.listNotices,\r\n symbol: entry.content.item.defaultIcon,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n\r\n (entry.content.notices || []).forEach((notice: any) => {\r\n result.push(\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: notice.body,\r\n },\r\n ],\r\n group,\r\n })\r\n );\r\n });\r\n\r\n return result;\r\n }\r\n case 'footerNotice': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: entry.content.item.body,\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n case 'Error': {\r\n return [\r\n createGroupItem({\r\n messageId,\r\n message: [\r\n ConversationMessageListItemType.HTML,\r\n {\r\n body: entry.content.message || 'Something went wrong.',\r\n },\r\n ],\r\n group,\r\n }),\r\n ];\r\n }\r\n\r\n default:\r\n return [];\r\n }\r\n };\r\n\r\n const splitEntry = (entry: ServerEntry): ServerEntry | ServerEntry[] => {\r\n if (['CategorizedNoticeList', 'NoticeList'].includes(entry.type)) {\r\n return (entry.content.items || []).reduce((acc: any, item: any) => {\r\n if (!entry.content.isInitialNotices) {\r\n return acc;\r\n }\r\n acc.push({\r\n ...entry,\r\n id: uuid(),\r\n type: item.type || entry.type,\r\n content: {\r\n $type: entry.content.$type,\r\n isInitialNotices: entry.content.isInitialNotices,\r\n notices: item.notices,\r\n item,\r\n },\r\n });\r\n return acc;\r\n }, []);\r\n }\r\n return entry;\r\n };\r\n\r\n // map of in which order the messages should be displayed\r\n // lower numbers will be displayed above higher\r\n const sortMap = new Map<string, number>([\r\n ['Text', 1],\r\n ['List', 2],\r\n ['Contact', 3],\r\n ['CategorizedNoticeList', 10],\r\n ]);\r\n\r\n const result: MessageGroup[] = [];\r\n const filteredEntries = entries\r\n .sort((item, other) => {\r\n // sort the entries based on it's types sort value\r\n const defaultSortValue = 20;\r\n\r\n var sortValue = sortMap.get(item.type) || defaultSortValue;\r\n var sortValueOther = sortMap.get(other.type) || defaultSortValue;\r\n return sortValue - sortValueOther;\r\n })\r\n .filter((entry) => !entry.relation) // remove any \"relation entries\"\r\n .reduce<ServerEntry[]>((acc, entry) => {\r\n // some entries needs to be splitted into seperate groups\r\n return acc.concat(splitEntry(entry));\r\n }, []);\r\n\r\n // we dont want to display this type of entry\r\n // as we dont support it, and it was not supported in v4 either\r\n const isNonVisibleRelatedEntry = (e: ServerEntry) => {\r\n return typeof e.actions['selector'] !== 'undefined';\r\n };\r\n\r\n for (const entry of filteredEntries) {\r\n const relatedEntries = entries.filter(\r\n (other) => other.relation === entry.id && !isNonVisibleRelatedEntry(other)\r\n );\r\n const group = createGroup({ isUser: false });\r\n\r\n const items = await transform(entry, group, relatedEntries, prevGroup);\r\n items.forEach((item) => {\r\n group.items.push(item);\r\n });\r\n\r\n if (group.items.length) {\r\n result.push(group);\r\n }\r\n }\r\n return result;\r\n};\r\n","import { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager } from '@webprovisions/platform';\r\nimport { processEntries } from './entry-handler';\r\nimport Store from './store';\r\nimport { ClientEnvelope, MessageGroup, ServerEntry, ServerEnvelope } from './types';\r\n\r\nclass HttpClient {\r\n private globalState: any;\r\n private localState: ServerEntry['localState'];\r\n private clientId: string;\r\n private entries: ServerEntry[];\r\n\r\n constructor(\r\n private endpoint: string,\r\n private events: EventManager,\r\n private store: Store,\r\n private container: Container\r\n ) {\r\n this.clientId = uuid();\r\n this.entries = [];\r\n }\r\n\r\n async start() {\r\n const storedMessages = await this.store.read();\r\n\r\n // if there are a session stored, rehydrate the messages\r\n // otherwise create a new session\r\n if (storedMessages && storedMessages.length > 0) {\r\n const storedGlobalState = this.store.readGlobalState();\r\n this.globalState = storedGlobalState;\r\n return storedMessages;\r\n } else {\r\n const envelope = this.createInitialEnvelope();\r\n const initialResponse = await this.postEnvelope(envelope);\r\n return initialResponse;\r\n }\r\n }\r\n\r\n async sendMessage(message: string) {\r\n const envelope = {\r\n command: { phrase: message },\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n };\r\n\r\n const result = await this.postEnvelope(envelope);\r\n return result;\r\n }\r\n\r\n async helpAction() {\r\n return this.postEnvelope({\r\n action: {\r\n key: 'help',\r\n content: {\r\n $type: 'Humany.Matching.Bots.Conversations.Actions.Help, Humany.Matching',\r\n },\r\n },\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n async nextAction(group: MessageGroup) {\r\n const { paging } = group.meta;\r\n if (!paging.actions?.next) {\r\n return;\r\n }\r\n return this.postEnvelope(\r\n {\r\n action: {\r\n key: 'next',\r\n content: paging.actions.next,\r\n },\r\n localState: paging.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n },\r\n group\r\n ).then((response) => {\r\n const listItemIndex = group.items.findIndex((item) => item.message[0] === 'link-list');\r\n if (listItemIndex === -1 || !response) {\r\n return group;\r\n }\r\n\r\n return {\r\n ...group,\r\n meta: {\r\n ...group.meta,\r\n ...response[0].meta,\r\n },\r\n items: [\r\n ...group.items.slice(0, listItemIndex),\r\n {\r\n ...group.items[listItemIndex],\r\n message: [\r\n response[0].items[0].message[0],\r\n {\r\n ...group.items[listItemIndex].message[1],\r\n ...response[0].items[0].message[1],\r\n },\r\n ],\r\n },\r\n ...group.items.slice(listItemIndex + 1),\r\n ],\r\n };\r\n });\r\n }\r\n\r\n async showContactMethodAction(data: {\r\n contactMethod: any;\r\n actionKey: string;\r\n entryId: string;\r\n }) {\r\n const entry = this.entries.find((e) => e.id === data.entryId);\r\n const actionItem = entry?.actions[data.actionKey];\r\n\r\n if (!actionItem) {\r\n return;\r\n }\r\n\r\n return this.postEnvelope({\r\n action: {\r\n key: data.actionKey,\r\n content: actionItem,\r\n },\r\n localState: entry.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n async defaultAction(action: string) {\r\n const entry = this.getEntryOfAction(action);\r\n\r\n if (!entry) {\r\n return;\r\n }\r\n\r\n return this.postEnvelope({\r\n action: {\r\n key: action,\r\n content: entry.actions[action],\r\n },\r\n localState: entry.localState,\r\n globalState: this.globalState,\r\n clientId: this.clientId,\r\n });\r\n }\r\n\r\n private createInitialEnvelope(): ClientEnvelope {\r\n return {\r\n command: { site: this.endpoint },\r\n clientId: this.clientId,\r\n globalState: {},\r\n funnel: this.container.get('$widget').name,\r\n };\r\n }\r\n\r\n private async postEnvelope(envelope: ClientEnvelope, prevGroup?: MessageGroup) {\r\n try {\r\n const response = await fetch(this.endpoint, this.getHttpOptions(envelope));\r\n\r\n if (!response.ok) {\r\n throw response;\r\n }\r\n\r\n const data = await response.json();\r\n\r\n return this.handleResponse(data, prevGroup);\r\n } catch (error: any) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('Something went wrong when posting the envelope.');\r\n }\r\n let message = 'Something went wrong';\r\n if (\r\n error.message === 'Failed to fetch' ||\r\n error.message === 'NetworkError when attempting to fetch resource.'\r\n ) {\r\n message = 'Lost connection... Please try again.';\r\n }\r\n return this.handleResponse({\r\n entries: [\r\n {\r\n id: uuid(),\r\n type: 'Error',\r\n timestamp: new Date().toISOString(),\r\n content: {\r\n message,\r\n },\r\n actions: {},\r\n tags: [],\r\n },\r\n ],\r\n });\r\n }\r\n }\r\n\r\n private async handleResponse(data: ServerEnvelope, prevGroup?: MessageGroup) {\r\n this.entries = this.entries.concat(data.entries);\r\n\r\n const widgetEntry = data.entries.find((e) => e.type === 'Widget');\r\n\r\n if (widgetEntry) {\r\n this.events.dispatch('provider:widget-entry', widgetEntry.content);\r\n }\r\n\r\n if (data.globalState) {\r\n this.globalState = data.globalState;\r\n }\r\n\r\n this.localState = data.entries.reduce<ServerEntry['localState']>((acc, entry) => {\r\n if (entry.localState) {\r\n return entry.localState;\r\n }\r\n return acc;\r\n }, undefined);\r\n\r\n const groups = await processEntries(data.entries, prevGroup);\r\n return groups;\r\n }\r\n\r\n private getHttpOptions(envelope: ClientEnvelope) {\r\n const fetchOptions = {\r\n method: 'POST',\r\n headers: {\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n };\r\n envelope.funnel = this.container.get('$widget').name;\r\n envelope.localState = envelope.localState || this.localState;\r\n return Object.assign({}, fetchOptions, {\r\n body: JSON.stringify(envelope),\r\n credentials: 'same-origin' as RequestCredentials,\r\n });\r\n }\r\n\r\n private getEntryOfAction(action: string) {\r\n return this.entries.find((entry) => !!entry.actions[action]);\r\n }\r\n}\r\n\r\nexport default HttpClient;\r\n","import { createStorageWriter, readStorage, StorageCategory } from '@telia-ace/widget-services';\r\nimport { Container } from '@webprovisions/platform';\r\nimport { GlobalState, MessageGroup } from './types';\r\n\r\nclass Store {\r\n private enabled = true; // set whether or not to store data\r\n private sessionMessageStorageVariable: string = 'knowledge-bot-messages';\r\n private botProviderGlobalStateKey = 'bot-provider-global-state';\r\n private botProviderMetaStateKey = 'bot-provider-conversation-meta';\r\n\r\n constructor(private container: Container) {}\r\n\r\n async readGlobalState() {\r\n if (!this.enabled) {\r\n return undefined;\r\n }\r\n const state: GlobalState | undefined = await readStorage(\r\n this.container,\r\n this.botProviderGlobalStateKey\r\n );\r\n return state;\r\n }\r\n\r\n async readMetaState() {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n return readStorage(this.container, this.botProviderMetaStateKey);\r\n }\r\n\r\n async write(groups: MessageGroup[]) {\r\n if (!this.enabled) {\r\n return;\r\n }\r\n return createStorageWriter(\r\n this.container,\r\n this.sessionMessageStorageVariable,\r\n StorageCategory.Necessary\r\n ).then((write) => {\r\n return write(groups);\r\n });\r\n }\r\n\r\n async read() {\r\n if (!this.enabled) {\r\n return [];\r\n }\r\n return readStorage<MessageGroup[]>(this.container, this.sessionMessageStorageVariable).then(\r\n (groups) => {\r\n return groups || [];\r\n }\r\n );\r\n }\r\n}\r\n\r\nexport default Store;\r\n","import { ComponentNodeController } from '@telia-ace/knowledge-widget-core';\r\nimport { ConversationMessageListItemType } from '@telia-ace/widget-conversation';\r\nimport { createStorageWriter, StorageCategory } from '@telia-ace/widget-services';\r\nimport { uuid } from '@telia-ace/widget-utilities';\r\nimport { Container, EventManager, Widget } from '@webprovisions/platform';\r\nimport HttpClient from './http-client';\r\nimport Store from './store';\r\nimport { MessageGroup, ServerEntry } from './types';\r\nimport { createGroup, getKnowledgeBotEndpoint } from './utils';\r\n\r\nclass KnowledgeBotProvider {\r\n private agent: any;\r\n private user: any;\r\n private httpClient: HttpClient;\r\n private events: EventManager;\r\n private groups: MessageGroup[] = [];\r\n private store: Store;\r\n\r\n constructor(\r\n private container: Container,\r\n private conversation: any,\r\n component: ComponentNodeController\r\n ) {\r\n const { events } = this.container.get('$widget') as Widget;\r\n this.events = events;\r\n this.store = new Store(container);\r\n this.agent = conversation.createAgent({\r\n name: '',\r\n avatar: undefined,\r\n });\r\n this.user = conversation.user;\r\n const endpoint = getKnowledgeBotEndpoint(container, component);\r\n this.httpClient = new HttpClient(endpoint, events, this.store, this.container);\r\n\r\n this.events.subscribe('provider:widget-entry', (_event, data: ServerEntry['content']) => {\r\n this.onWidgetEntryReceived(data);\r\n });\r\n\r\n this.events.subscribe(\r\n 'provider:open-contact-method',\r\n async (_event, data: { contactMethod: any; entryId: string; actionKey: string }) => {\r\n const response = await this.httpClient.showContactMethodAction(data);\r\n\r\n if (response) {\r\n if (!!data.contactMethod.title) this.printUserMessage(data.contactMethod.title);\r\n this.onMessagesReceived(response);\r\n }\r\n }\r\n );\r\n }\r\n\r\n async initialize() {\r\n const loader = this.conversation.loading();\r\n\r\n const storedMeta: any = await this.store.readMetaState();\r\n if (storedMeta?.agent) {\r\n this.agent.update({\r\n name: storedMeta.agent.name,\r\n avatar: storedMeta.agent.avatar,\r\n });\r\n }\r\n\r\n const response = await this.httpClient.start();\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n\r\n loader();\r\n }\r\n\r\n async onMessagesReceived(groups: MessageGroup[]) {\r\n this.groups = this.groups.concat(groups);\r\n await this.store.write(this.groups);\r\n groups.forEach((group) => {\r\n const items = group.items.map((item) => item.message);\r\n if (group.isUser) {\r\n group.writer = this.user.print(items);\r\n } else {\r\n group.writer = this.agent.print(items);\r\n }\r\n });\r\n }\r\n\r\n async onInput(action: string | { [key: string]: any; actionKey: string; label?: string }) {\r\n const actionKey = typeof action === 'string' ? action : action.actionKey;\r\n\r\n switch (actionKey) {\r\n case 'next':\r\n {\r\n if (typeof action === 'string') {\r\n return;\r\n }\r\n const group = this.groups.find((other) => other.id === action.data?.groupId);\r\n\r\n if (group) {\r\n const response = await this.httpClient.nextAction(group);\r\n if (response) {\r\n const combined = response.items.map((item) => item.message);\r\n group.meta.paging = response?.meta.paging;\r\n group.writer.update(combined);\r\n }\r\n }\r\n }\r\n break;\r\n case 'help':\r\n {\r\n const loader = this.conversation.loading();\r\n\r\n const response = await this.httpClient.helpAction();\r\n loader();\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n }\r\n break;\r\n default:\r\n {\r\n if (typeof action !== 'string' && action.label) {\r\n this.printUserMessage(action.label);\r\n }\r\n const loader = this.conversation.loading();\r\n const response = await this.httpClient.defaultAction(actionKey);\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n loader();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private printUserMessage(message: string) {\r\n const group = createGroup({\r\n isUser: true,\r\n items: [\r\n {\r\n id: uuid(),\r\n isUser: true,\r\n message: [ConversationMessageListItemType.HTML, { body: message }],\r\n },\r\n ],\r\n });\r\n this.onMessagesReceived([group]);\r\n return group;\r\n }\r\n\r\n async onMessageSend(message: string) {\r\n const loader = this.conversation.loading();\r\n const response = await this.httpClient.sendMessage(message);\r\n\r\n this.printUserMessage(message);\r\n\r\n if (response) {\r\n this.onMessagesReceived(response);\r\n }\r\n loader();\r\n }\r\n\r\n private async onWidgetEntryReceived(data: ServerEntry['content']) {\r\n if (data.agent) {\r\n const agentSettings = {\r\n name: data.agent.name,\r\n avatar: data.agent.avatar,\r\n };\r\n this.agent.update(agentSettings);\r\n const write = await createStorageWriter(\r\n this.container,\r\n 'bot-provider-conversation-meta',\r\n StorageCategory.Necessary\r\n );\r\n write({\r\n agent: agentSettings,\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default KnowledgeBotProvider;\r\n","import {\r\n ConversationPlatform,\r\n registerCustomMessageComponent,\r\n} from '@telia-ace/widget-conversation';\r\nimport { Container, Widget } from '@webprovisions/platform';\r\nimport KnowledgeBotProvider from './provider';\r\nimport { CustomMessageTypes } from './types';\r\n\r\nconst KnowledgeBotProviderPlugin = async (container: Container) => {\r\n const platform = await ConversationPlatform.getInstance(container);\r\n\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.ContactList,\r\n import('./ui/contact-method-list')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.ContactMethod,\r\n import('./ui/contact-method')\r\n );\r\n\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.NotificationList,\r\n import('./ui/notification-list')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.NoGoodAlternative,\r\n import('./ui/no-good-alternative')\r\n );\r\n registerCustomMessageComponent(\r\n container,\r\n CustomMessageTypes.FeedbackList,\r\n import('./ui/feedback-list')\r\n );\r\n\r\n platform.registerProvider('ace-knowledge-bot', (conversation, component) => {\r\n const provider = new KnowledgeBotProvider(container, conversation, component);\r\n provider.initialize();\r\n\r\n component.actions.watch('conversation.user-submit', (input, next) => {\r\n provider.onMessageSend(input.text);\r\n });\r\n\r\n component.actions.watch('conversation.action', (input, next) => {\r\n provider.onInput(input);\r\n\r\n return next(input);\r\n });\r\n\r\n component.actions.create('evaluate', (input) => {\r\n const { events } = container.get('$widget') as Widget;\r\n events.dispatch('bot-provider:evaluate', input);\r\n });\r\n\r\n component.actions.create('submit', (input) => {\r\n const { events } = container.get('$widget') as Widget;\r\n events.dispatch('bot-provider:form-submitted', input);\r\n });\r\n });\r\n};\r\n\r\nexport default KnowledgeBotProviderPlugin;\r\n"],"names":["CustomMessageTypes","convertLegacySymbol","symbol","type","content","createGroup","isUser","items","meta","groupId","uuid","i","contactMethodFromLegacy","id","title","defaultIcon","exit","exitType","confirmationText","expandFormAutomatically","form","description","options","adapter","clientName","adapterSettings","customClientName","validation","settings","displayTextBeforeClick","textBeforeClick","FormBuilder","updateForm","getListType","state","ConversationMessageListItemType","getKnowledgeBotEndpoint","container","component","knowledgeBotEndpoint","data","contactMethod","submit","errors","_a","body","builder","submitButton","__spreadProps","__spreadValues","createGroupItem","messageId","message","group","processEntries","entries","prevGroup","__async","createListContent","listType","entry","listContent","contactMethodIds","action","entryAction","transform","_0","_1","_2","related","header","html","result","pagingEntry","e","fallbackEntry","fallbackAction","contactMethodListEntry","dialogListEntry","feedbackEntry","contactMethodEntry","notice","splitEntry","acc","item","sortMap","filteredEntries","other","sortValue","sortValueOther","isNonVisibleRelatedEntry","relatedEntries","HttpClient","endpoint","events","store","__publicField","storedMessages","storedGlobalState","envelope","paging","response","listItemIndex","actionItem","error","widgetEntry","fetchOptions","Store","readStorage","groups","createStorageWriter","StorageCategory","write","KnowledgeBotProvider","conversation","_event","loader","storedMeta","actionKey","combined","agentSettings","KnowledgeBotProviderPlugin","platform","ConversationPlatform","registerCustomMessageComponent","provider","input","next"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEY,IAAAA,sBAAAA,OACRA,EAAA,gBAAgB,oCAChBA,EAAA,cAAc,kCACdA,EAAA,eAAe,mCACfA,EAAA,mBAAmB,uCACnBA,EAAA,oBAAoB,yCALZA,IAAAA,KAAA,CAAA,CAAA;ACMZ,MAAMC,IAAsB,CAACC,MAAmE;AAC5F,MAAIA,GAAQ;AACF,UAAA,EAAE,MAAAC,GAAM,SAAAC,EAAY,IAAAF;AAC1B,QAAIC,KAAQC;AACD,aAAA,EAAE,MAAAD,GAAM,SAAAC;EAEvB;AACJ,GAEaC,IAAc,CAAC;AAAA,EACxB,QAAAC;AAAA,EACA,OAAAC,IAAQ,CAAC;AAAA,EACT,MAAAC,IAAO,CAAC;AACZ,MAIM;AACF,QAAMC,IAAUC;AAgBT,SAdO;AAAA,IACV,IAAID;AAAA,IACJ,QAAAH;AAAA,IACA,OAAOC,EAAM,IAAI,CAACI,OACP;AAAA,MACH,IAAIA,EAAE,MAAMD,EAAK;AAAA,MACjB,QAAAJ;AAAA,MACA,SAAAG;AAAA,MACA,SAASE,EAAE,WAAW,CAAC;AAAA,IAAA,EAE9B;AAAA,IACD,MAAAH;AAAA,EAAA;AAIR,GAEaI,IAA0B,CACnC;AAAA,EACI,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAO,CAACC,CAAI;AAAA,EACZ,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,yBAAAC;AAAA,EACA,MAAAC;AAAA,EACA,aAAAC;AACJ,GACAC,IAGI,CAAA,MACE;AACN,QAAM,EAAE,SAAAC,EAAQ,IAAIP,KAAQ,EAAE,SAAS,CAAG,EAAA,GACpC,EAAE,YAAAQ,IAAa,IAAI,UAAUC,IAAkB,CAAA,GAAI,kBAAAC,IAAmB,GAAO,IAAAH,GAC7E,EAAE,YAAAI,EAAe,IAAAL,GAEjBM,IAAgB;AAAA,IAClB,IAAIf,EAAG,SAAS;AAAA,IAChB,OAAAC;AAAA,IACA,aAAAO;AAAA,IACA,QAAQpB,EAAoBc,CAAW;AAAA,IACvC,YAAYS,MAAe,mBAAmBE,IAAmBF;AAAA,IACjE,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,MAAM,CAAC;AAAA,EAAA;AAGP,MAAAA,EAAW,QAAQ,OAAO,IAAI,MAAMA,EAAW,QAAQ,UAAU,IAAI,IAAI;AACnE,UAAA,EAAE,wBAAAK,GAAwB,iBAAAC,EAAoB,IAAAL;AACpD,IAAII,MAA2B,WAC3BD,EAAS,WAAW,IACpBA,EAAS,QAAQE,IAGjBN,EAAW,QAAQ,YAAY,IAAI,KAC1BI,EAAA,KAAK,cAAcH,EAAgB,cAEnCG,EAAA,KAAK,WAAWH,EAAgB;AAAA,EAEjD;AAEA,UACID,EAAW,QAAQ,YAAY,IAAI,MACnCA,EAAW,QAAQ,MAAM,IAAI,MAC5BA,MAAe,oBAAoBP,MAAa,cAEjDW,EAAS,OAAOH,GAChBG,EAAS,KAAK,uBAAuBV,IAGrCM,EAAW,QAAQ,KAAK,IAAI,OAC5BI,EAAS,OAAOH,IAGhBL,KAAQA,EAAK,uBACTO,IACSC,EAAA,KAAK,OAAOG,EAAY,eAAelB,EAAG,YAAYO,GAAMO,CAAU,EAAE,IAAI,IAE5EC,EAAA,KAAK,OAAOG,EAAY,eAAelB,EAAG,YAAYO,CAAI,EAAE,OAEpED,MACQS,EAAA,WAAWA,EAAS,SAAS,KAG1CA,EAAS,OAAOI,GAAWJ,GAAU,EAAE,QAAQ,UAAU,IAGzDN,EAAQ,YACCM,EAAA,KAAK,UAAUN,EAAQ,UAG7BM;AACX,GAEaK,IAAc,CAACC,OACpBA,KAAA,gBAAAA,EAAO,WAAU,uEACVC,EAAgC,YAEvCD,KAAA,gBAAAA,EAAO,WACP,kFAEOlC,EAAmB,gBAE1BkC,KAAA,gBAAAA,EAAO,WAAU,4EAEVlC,EAAmB,cAChBmC,EAAgC,YAGrCC,IAA0B,CACnCC,GACAC,MACC;AACD,QAAM,EAAE,sBAAAC,EAAA,IAAyBD,EAAU,WAAW;AAEtD,MAAIC;AACA,WAAO,GAAGA;AAGd,QAAM,EAAE,MAAAC,EAAS,IAAAH,EAAU,IAAI,WAAW;AAEtC,MAAA,CAACG,KAAQ,CAACA,EAAK;AAAkB,UAAA,IAAI,MAAM,gCAAgC;AAE/E,SAAO,GAAGA,EAAK;AACnB,GAEaR,KAAa,CACtBS,GACA;AAAA,EACI,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAnC;AACJ,MACM;;AACF,OAAAoC,IAAAH,KAAA,gBAAAA,EAAe,SAAf,QAAAG,EAAqB,MAAM;AACrB,UAAA,EAAE,MAAAC,EAAS,IAAAJ,GACXK,IAAU,IAAIf,EAAYc,EAAK,IAAI;AAEzC,WAAKA,EAAK,KAAK,OAAO,UAClBC,EAAQ,gBAAgBC,EAAaL,GAAQ,QAAQ,CAAC,GAGtDC,KACAG,EAAQ,oBAAoBH,CAAM,GAGlCnC,KACCsC,EAAgB,QAAQtC,CAAI,GAG1BwC,EAAAC,EAAA,IACAJ,IADA;AAAA,MAEH,MAAMC,EAAQ,IAAI;AAAA,IAAA;AAAA,EAE1B;AACO,UAAAL,KAAA,gBAAAA,EAAe,SAAQ;AAClC,GC9KMS,IAAkB,CAAC;AAAA,EACrB,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AACJ,OAKW;AAAA,EACH,IAAIF;AAAA,EACJ,SAAAC;AAAA,EACA,SAASC,EAAM;AAAA,EACf,QAAQA,EAAM;AAAA,IAITC,KAAiB,CAAOC,GAAwBC,MAA6BC,EAAA;AACtF,QAAMC,IAAoB,CACtBC,GACAC,GACAnD,GACAoD,IAA2B;AAAA,IACvB,SAAS,CAAC;AAAA,IACV,SAASD,EAAM;AAAA,IACf,SAAAnD;AAAA,EAAA,MAEH;AACD,UAAMqD,IAA6B,CAAA;AAEnC,WAAAD,EAAY,UAAUD,EAAM,QAAQ,MAAM,IAAI,CAACjD,MAAW;;AACtD,YAAMoD,IAAS;AAAA,QACX,OAAOpD,EAAE;AAAA,QACT,WAAWA,EAAE;AAAA,QACb,QAAUA,EAAE,SAASA,EAAE,SAAS;AAAA,MAAA;AAGpC,UAAIA,EAAE,MAAM;AACF,cAAAqD,IAAcJ,EAAM,QAAQjD,EAAE;AAChC,QAAAgD,MAAa3D,EAAmB,eACf8D,EAAA,KAAKnD,EAAE,KAAK,EAAE,GACxBoD,EAAA,OAAOnD,EAAwBD,EAAE,MAAM;AAAA,UAC1C,UAASiC,IAAAoB,KAAA,gBAAAA,EAAa,YAAb,gBAAApB,EAAsB;AAAA,QAAS,CAC3C,KAEDmB,EAAO,OAAOpD,EAAE;AAAA,MAExB;AACO,aAAAoD;AAAA,IAAA,CACV,GAEGJ,MAAa3D,EAAmB,gBAChC6D,EAAY,mBAAmBC,IAG5BD;AAAA,EAAA,GAGLI,IAAY,CACdC,GACAC,MAGCC,MAAAX,EAAA,SAJDS,GACAC,GAGC,GAAAC,IAAA,WAJDR,GACAP,GACAgB,IAAyB,IACzBb,GACC;AACD,UAAML,IAAYzC;AAElB,YAAQkD,EAAM,MAAM;AAAA,MAChB,KAAK,QACD;AACI,cAAM,EAAE,QAAAU,GAAQ,OAAA/D,GAAO,MAAAgE,EAAA,IAASX,EAAM,SAEhCY,IAAS,CAAA;AAEf,YAAIX,IAAc;AAAA,UACd,SAAS,CAAC;AAAA,UACV,SAASD,EAAM;AAAA,UACf,SAASP,EAAM;AAAA,QAAA;AAOf,YAJAiB,MACAT,EAAY,SAASS,KAGrB/D,KAAA,gBAAAA,EAAO,UAAS,GAAG;AACb,gBAAAoD,IAAW1B,EAAY2B,EAAM,UAAU;AAIzC,cAHJC,IAAcH,EAAkBC,GAAUC,GAAOP,EAAM,IAAIQ,CAAW,GAGhEQ,EAAQ,QAAQ;AACZ,kBAAAI,IAAcJ,EAAQ,KAAK,CAACK,MAAMA,EAAE,KAAK,SAAS,QAAQ,CAAC,GAC3DC,IAAgBN,EAAQ,KAAK,CAACK,MAAMA,EAAE,KAAK,SAAS,UAAU,CAAC;AAmBrE,gBAjBID,KAAA,QAAAA,EAAa,YACbpB,EAAM,KAAK,SAAS;AAAA,cAChB,SAASoB,EAAY;AAAA,cACrB,OAAOA,EAAY,QAAQ;AAAA,cAC3B,YAAYA,EAAY;AAAA,YAAA,GAE5BA,EAAY,QAAQ,MAAM,QAAQ,CAAC9D,MAAW;AAC1C,cAAAkD,EAAY,QAAQ,KAAK;AAAA,gBACrB,OAAOlD,EAAE;AAAA,gBACT,WAAWA,EAAE;AAAA,gBACb,MAAM;AAAA,kBACF,SAAW6C,IAAYA,EAAU,KAAKH,EAAM;AAAA,gBAChD;AAAA,cAAA,CACH;AAAA,YAAA,CACJ,IAGDsB,GAAe;AACT,oBAAAC,IAAiBD,EAAc,QAAQ,MAAM;AAAA,gBAC/C,CAAChE,MAAWA,EAAE,cAAc;AAAA,cAAA;AAEhC,cAAIiE,MACAJ,EAAO;AAAA,gBACHtB,EAAgB;AAAA,kBACZ,WAAAC;AAAA,kBACA,SAAS;AAAA,oBACLhB,EAAgC;AAAA,oBAChC;AAAA,kBACJ;AAAA,kBACA,OAAAkB;AAAA,gBAAA,CACH;AAAA,cAAA,GAELmB,EAAO;AAAA,gBACHtB,EAAgB;AAAA,kBACZ,WAAAC;AAAA,kBACA,SAAS;AAAA,oBACLnD,EAAmB;AAAA,oBACnB,EAAE,MAAM4E,EAAe,MAAM;AAAA,kBACjC;AAAA,kBACA,OAAAvB;AAAA,gBAAA,CACH;AAAA,cAAA;AAAA,YAGb;AAAA,UACJ;AAEAmB,UAAAA,EAAO;AAAA,YACHtB,EAAgB;AAAA,cACZ,WAAAC;AAAA,cACA,SAAS,CAACQ,GAAUE,CAAW;AAAA,cAC/B,OAAAR;AAAA,YAAA,CACH;AAAA,UAAA;AAAA,QAET;AAEA,eAAIkB,KACAC,EAAO;AAAA,UACHtB,EAAgB;AAAA,YACZ,WAAAC;AAAA,YACA,SAAS,CAAChB,EAAgC,MAAM,EAAE,MAAMoC,GAAM;AAAA,YAC9D,OAAAlB;AAAA,UAAA,CACH;AAAA,QAAA,GAIFmB;AAAAA,MACX;AAAA,MAEJ,KAAK,QACD;AACI,cAAMA,IAAS,CAAA;AAaX,YAZJA,EAAO;AAAA,UACHtB,EAAgB;AAAA,YACZ,WAAAC;AAAA,YACA,SAAS;AAAA,cACLhB,EAAgC;AAAA,cAChC,EAAE,MAAMyB,EAAM,QAAQ,KAAK;AAAA,YAC/B;AAAA,YACA,OAAAP;AAAA,UAAA,CACH;AAAA,QAAA,GAICgB,EAAQ,QAAQ;AAClB,gBAAMQ,IAAyBR,EAAQ;AAAA,YACnC,CAACK,MACG;;AAAA,qBAAAA,EAAE,SAAS,YACX9B,IAAA8B,EAAE,eAAF,gBAAA9B,EAAc,WACV;AAAA;AAAA,UAAA,GAGNkC,IAAkBT,EAAQ,KAAK,CAACK,MAAMA,EAAE,KAAK,SAAS,QAAQ,CAAC,GAC/DK,IAAgBV,EAAQ,KAAK,CAACK,MAAMA,EAAE,KAAK,SAAS,UAAU,CAAC,GAC/DM,IAAqBX,EAAQ;AAAA,YAC/B,CAACK,MAAMA,EAAE,KAAK,SAAS,SAAS,KAAKA,EAAE,SAAS;AAAA,UAAA;AAwCpD,cArCIM,KACAR,EAAO;AAAA,YACHtB,EAAgB;AAAA,cACZ,WAAAC;AAAA,cACA,SAAS;AAAA,gBACLnD,EAAmB;AAAA,gBACnB;AAAA,kBACI,iBAAiBgF,EAAmB,QAAQ;AAAA,kBAC5C,SAAS3B,EAAM;AAAA,kBACf,SAAS2B,EAAmB,QAAQ;AAAA,gBACxC;AAAA,cACJ;AAAA,cACA,OAAA3B;AAAA,YAAA,CACH;AAAA,UAAA,GAILyB,KACAN,EAAO;AAAA,YACHtB,EAAgB;AAAA,cACZ,WAAAC;AAAA,cACA,SAAS;AAAA,gBACLhB,EAAgC;AAAA,gBAChC;AAAA,kBACI,SAAS2C,EAAgB,QAAQ,MAAM,IAAI,CAACnE,OACjC;AAAA,oBACH,OAAOA,EAAE;AAAA,oBACT,WAAWA,EAAE;AAAA,kBAAA,EAEpB;AAAA,gBACL;AAAA,cACJ;AAAA,cACA,OAAA0C;AAAA,YAAA,CACH;AAAA,UAAA,GAILwB,GAAwB;AACxB,kBAAMhB,IAAcH;AAAA,cAChB1D,EAAmB;AAAA,cACnB6E;AAAA,cACAxB,EAAM;AAAA,YAAA;AAGVmB,YAAAA,EAAO;AAAA,cACHtB,EAAgB;AAAA,gBACZ,WAAAC;AAAA,gBACA,SAAS,CAAChB,EAAgC,WAAW,MAAS;AAAA,gBAC9D,OAAAkB;AAAA,cAAA,CACH;AAAA,YAAA,GAGLmB,EAAO;AAAA,cACHtB,EAAgB;AAAA,gBACZ,WAAAC;AAAA,gBACA,SAAS,CAACnD,EAAmB,aAAa6D,CAAW;AAAA,gBACrD,OAAAR;AAAA,cAAA,CACH;AAAA,YAAA;AAAA,UAET;AAEA,UAAI0B,MACIA,EAAc,QAAQ,QACtBP,EAAO;AAAA,YACHtB,EAAgB;AAAA,cACZ,WAAAC;AAAA,cACA,OAAAE;AAAA,cACA,SAAS;AAAA,gBACLlB,EAAgC;AAAA,gBAChC;AAAA,kBACI,MAAM4C,EAAc,QAAQ;AAAA,gBAChC;AAAA,cACJ;AAAA,YAAA,CACH;AAAA,UAAA,GAGTP,EAAO;AAAA,YACHtB,EAAgB;AAAA,cACZ,WAAAC;AAAA,cACA,OAAAE;AAAA,cACA,SAAS;AAAA,gBACLrD,EAAmB;AAAA,gBACnB;AAAA,kBACI,SAAS+E,EAAc,QAAQ,MAAM,IAAI,CAACpE,OAC/B;AAAA,oBACH,WAAWA,EAAE;AAAA,oBACb,OAAOA,EAAE;AAAA,kBAAA,EAEhB;AAAA,gBACL;AAAA,cACJ;AAAA,YAAA,CACH;AAAA,UAAA;AAAA,QAGb;AACO6D,eAAAA;AAAAA,MACX;AAAA,MAEJ,KAAK;AACM,eAAA;AAAA,UACHtB,EAAgB;AAAA,YACZ,WAAAC;AAAA,YACA,SAAS;AAAA,cACLnD,EAAmB;AAAA,cACnB;AAAA,gBACI,iBAAiB4D,EAAM,QAAQ;AAAA,gBAC/B,SAASP,EAAM;AAAA,gBACf,SAASO,EAAM,QAAQ;AAAA,cAC3B;AAAA,YACJ;AAAA,YACA,OAAAP;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAGT,KAAK,yBAAyB;AAC1B,cAAMmB,IAAS;AAAA,UACXtB,EAAgB;AAAA,YACZ,WAAAC;AAAA,YACA,SAAS;AAAA,cACLnD,EAAmB;AAAA,cACnB;AAAA,gBACI,IAAI4D,EAAM,QAAQ,KAAK,GAAG,SAAS;AAAA,gBACnC,QAAQA,EAAM,QAAQ,KAAK;AAAA,gBAC3B,OAAOA,EAAM,QAAQ,KAAK;AAAA,gBAC1B,QAAQA,EAAM,QAAQ,KAAK;AAAA,cAC/B;AAAA,YACJ;AAAA,YACA,OAAAP;AAAA,UAAA,CACH;AAAA,QAAA;AAGL,gBAACO,EAAM,QAAQ,WAAW,CAAA,GAAI,QAAQ,CAACqB,MAAgB;AACnDT,UAAAA,EAAO;AAAA,YACHtB,EAAgB;AAAA,cACZ,WAAAC;AAAA,cACA,SAAS;AAAA,gBACLhB,EAAgC;AAAA,gBAChC;AAAA,kBACI,MAAM8C,EAAO;AAAA,gBACjB;AAAA,cACJ;AAAA,cACA,OAAA5B;AAAA,YAAA,CACH;AAAA,UAAA;AAAA,QACL,CACH,GAEMmB;AAAAA,MACX;AAAA,MACA,KAAK;AACM,eAAA;AAAA,UACHtB,EAAgB;AAAA,YACZ,WAAAC;AAAA,YACA,SAAS;AAAA,cACLhB,EAAgC;AAAA,cAChC;AAAA,gBACI,MAAMyB,EAAM,QAAQ,KAAK;AAAA,cAC7B;AAAA,YACJ;AAAA,YACA,OAAAP;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAGT,KAAK;AACM,eAAA;AAAA,UACHH,EAAgB;AAAA,YACZ,WAAAC;AAAA,YACA,SAAS;AAAA,cACLhB,EAAgC;AAAA,cAChC;AAAA,gBACI,MAAMyB,EAAM,QAAQ,WAAW;AAAA,cACnC;AAAA,YACJ;AAAA,YACA,OAAAP;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,MAIT;AACI,eAAO;IACf;AAAA,EAAA,IAGE6B,IAAa,CAACtB,MACZ,CAAC,yBAAyB,YAAY,EAAE,SAASA,EAAM,IAAI,KACnDA,EAAM,QAAQ,SAAS,IAAI,OAAO,CAACuB,GAAUC,OAC5CxB,EAAM,QAAQ,oBAGnBuB,EAAI,KAAKnC,EAAAC,EAAA,IACFW,IADE;AAAA,IAEL,IAAIlD,EAAK;AAAA,IACT,MAAM0E,EAAK,QAAQxB,EAAM;AAAA,IACzB,SAAS;AAAA,MACL,OAAOA,EAAM,QAAQ;AAAA,MACrB,kBAAkBA,EAAM,QAAQ;AAAA,MAChC,SAASwB,EAAK;AAAA,MACd,MAAAA;AAAA,IACJ;AAAA,EAAA,EACH,GACMD,IACR,CAAE,CAAA,IAEFvB,GAKLyB,wBAAc,IAAoB;AAAA,IACpC,CAAC,QAAQ,CAAC;AAAA,IACV,CAAC,QAAQ,CAAC;AAAA,IACV,CAAC,WAAW,CAAC;AAAA,IACb,CAAC,yBAAyB,EAAE;AAAA,EAAA,CAC/B,GAEKb,IAAyB,CAAA,GACzBc,IAAkB/B,EACnB,KAAK,CAAC6B,GAAMG,MAAU;AAInB,QAAIC,IAAYH,EAAQ,IAAID,EAAK,IAAI,KAAK,IACtCK,IAAiBJ,EAAQ,IAAIE,EAAM,IAAI,KAAK;AAChD,WAAOC,IAAYC;AAAA,EAAA,CACtB,EACA,OAAO,CAAC7B,MAAU,CAACA,EAAM,QAAQ,EACjC,OAAsB,CAACuB,GAAKvB,MAElBuB,EAAI,OAAOD,EAAWtB,CAAK,CAAC,GACpC,CAAE,CAAA,GAIH8B,IAA2B,CAAChB,MACvB,OAAOA,EAAE,QAAQ,YAAgB;AAG5C,aAAWd,KAAS0B,GAAiB;AACjC,UAAMK,IAAiBpC,EAAQ;AAAA,MAC3B,CAACgC,MAAUA,EAAM,aAAa3B,EAAM,MAAM,CAAC8B,EAAyBH,CAAK;AAAA,IAAA,GAEvElC,IAAQhD,EAAY,EAAE,QAAQ,GAAO,CAAA;AAGrC,KADQ,MAAM4D,EAAUL,GAAOP,GAAOsC,GAAgBnC,CAAS,GAC/D,QAAQ,CAAC4B,MAAS;AACd,MAAA/B,EAAA,MAAM,KAAK+B,CAAI;AAAA,IAAA,CACxB,GAEG/B,EAAM,MAAM,UACZmB,EAAO,KAAKnB,CAAK;AAAA,EAEzB;AACO,SAAAmB;AACX;AC/bA,MAAMoB,GAAW;AAAA,EAMb,YACYC,GACAC,GACAC,GACA1D,GACV;AAVM,IAAA2D,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AAGI,SAAA,WAAAH,GACA,KAAA,SAAAC,GACA,KAAA,QAAAC,GACA,KAAA,YAAA1D,GAER,KAAK,WAAW3B,KAChB,KAAK,UAAU;EACnB;AAAA,EAEM,QAAQ;AAAA,WAAA+C,EAAA;AACV,YAAMwC,IAAiB,MAAM,KAAK,MAAM,KAAK;AAIzC,UAAAA,KAAkBA,EAAe,SAAS,GAAG;AACvC,cAAAC,IAAoB,KAAK,MAAM,gBAAgB;AACrD,oBAAK,cAAcA,GACZD;AAAA,MAAA,OACJ;AACG,cAAAE,IAAW,KAAK;AAEf,eADiB,MAAM,KAAK,aAAaA,CAAQ;AAAA,MAE5D;AAAA,IACJ;AAAA;AAAA,EAEM,YAAY/C,GAAiB;AAAA,WAAAK,EAAA;AAC/B,YAAM0C,IAAW;AAAA,QACb,SAAS,EAAE,QAAQ/C,EAAQ;AAAA,QAC3B,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MAAA;AAIZ,aADQ,MAAM,KAAK,aAAa+C,CAAQ;AAAA,IAEnD;AAAA;AAAA,EAEM,aAAa;AAAA,WAAA1C,EAAA;AACf,aAAO,KAAK,aAAa;AAAA,QACrB,QAAQ;AAAA,UACJ,KAAK;AAAA,UACL,SAAS;AAAA,YACL,OAAO;AAAA,UACX;AAAA,QACJ;AAAA,QACA,aAAa,KAAK;AAAA,QAClB,UAAU,KAAK;AAAA,MAAA,CAClB;AAAA,IACL;AAAA;AAAA,EAEM,WAAWJ,GAAqB;AAAA,WAAAI,EAAA;;AAC5B,YAAA,EAAE,QAAA2C,EAAO,IAAI/C,EAAM;AACrB,UAAA,IAACT,IAAAwD,EAAO,YAAP,QAAAxD,EAAgB;AAGrB,eAAO,KAAK;AAAA,UACR;AAAA,YACI,QAAQ;AAAA,cACJ,KAAK;AAAA,cACL,SAASwD,EAAO,QAAQ;AAAA,YAC5B;AAAA,YACA,YAAYA,EAAO;AAAA,YACnB,aAAa,KAAK;AAAA,YAClB,UAAU,KAAK;AAAA,UACnB;AAAA,UACA/C;AAAA,QAAA,EACF,KAAK,CAACgD,MAAa;AACX,gBAAAC,IAAgBjD,EAAM,MAAM,UAAU,CAAC+B,MAASA,EAAK,QAAQ,OAAO,WAAW;AACjF,iBAAAkB,MAAkB,MAAM,CAACD,IAClBhD,IAGJL,EAAAC,EAAA,IACAI,IADA;AAAA,YAEH,MAAMJ,IAAA,IACCI,EAAM,OACNgD,EAAS,GAAG;AAAA,YAEnB,OAAO;AAAA,cACH,GAAGhD,EAAM,MAAM,MAAM,GAAGiD,CAAa;AAAA,cACrCtD,EAAAC,EAAA,IACOI,EAAM,MAAMiD,KADnB;AAAA,gBAEI,SAAS;AAAA,kBACLD,EAAS,GAAG,MAAM,GAAG,QAAQ;AAAA,kBAC7BpD,IAAA,IACOI,EAAM,MAAMiD,GAAe,QAAQ,KACnCD,EAAS,GAAG,MAAM,GAAG,QAAQ;AAAA,gBAExC;AAAA,cACJ;AAAA,cACA,GAAGhD,EAAM,MAAM,MAAMiD,IAAgB,CAAC;AAAA,YAC1C;AAAA,UAAA;AAAA,QACJ,CACH;AAAA,IACL;AAAA;AAAA,EAEM,wBAAwB9D,GAI3B;AAAA,WAAAiB,EAAA;AACO,YAAAG,IAAQ,KAAK,QAAQ,KAAK,CAACc,MAAMA,EAAE,OAAOlC,EAAK,OAAO,GACtD+D,IAAa3C,KAAA,gBAAAA,EAAO,QAAQpB,EAAK;AAEvC,UAAI,EAAC+D;AAIL,eAAO,KAAK,aAAa;AAAA,UACrB,QAAQ;AAAA,YACJ,KAAK/D,EAAK;AAAA,YACV,SAAS+D;AAAA,UACb;AAAA,UACA,YAAY3C,EAAM;AAAA,UAClB,aAAa,KAAK;AAAA,UAClB,UAAU,KAAK;AAAA,QAAA,CAClB;AAAA,IACL;AAAA;AAAA,EAEM,cAAcG,GAAgB;AAAA,WAAAN,EAAA;AAC1B,YAAAG,IAAQ,KAAK,iBAAiBG,CAAM;AAE1C,UAAI,EAACH;AAIL,eAAO,KAAK,aAAa;AAAA,UACrB,QAAQ;AAAA,YACJ,KAAKG;AAAA,YACL,SAASH,EAAM,QAAQG;AAAA,UAC3B;AAAA,UACA,YAAYH,EAAM;AAAA,UAClB,aAAa,KAAK;AAAA,UAClB,UAAU,KAAK;AAAA,QAAA,CAClB;AAAA,IACL;AAAA;AAAA,EAEQ,wBAAwC;AACrC,WAAA;AAAA,MACH,SAAS,EAAE,MAAM,KAAK,SAAS;AAAA,MAC/B,UAAU,KAAK;AAAA,MACf,aAAa,CAAC;AAAA,MACd,QAAQ,KAAK,UAAU,IAAI,SAAS,EAAE;AAAA,IAAA;AAAA,EAE9C;AAAA,EAEc,aAAauC,GAA0B3C,GAA0B;AAAA,WAAAC,EAAA;AACvE,UAAA;AACM,cAAA4C,IAAW,MAAM,MAAM,KAAK,UAAU,KAAK,eAAeF,CAAQ,CAAC;AAErE,YAAA,CAACE,EAAS;AACJ,gBAAAA;AAGJ,cAAA7D,IAAO,MAAM6D,EAAS;AAErB,eAAA,KAAK,eAAe7D,GAAMgB,CAAS;AAAA,eACrCgD;AACD,QAAA,QAAQ,IAAI,aAAa,gBACzB,QAAQ,KAAK,iDAAiD;AAElE,YAAIpD,IAAU;AACd,gBACIoD,EAAM,YAAY,qBAClBA,EAAM,YAAY,uDAERpD,IAAA,yCAEP,KAAK,eAAe;AAAA,UACvB,SAAS;AAAA,YACL;AAAA,cACI,IAAI1C,EAAK;AAAA,cACT,MAAM;AAAA,cACN,WAAW,IAAI,KAAK,EAAE,YAAY;AAAA,cAClC,SAAS;AAAA,gBACL,SAAA0C;AAAA,cACJ;AAAA,cACA,SAAS,CAAC;AAAA,cACV,MAAM,CAAC;AAAA,YACX;AAAA,UACJ;AAAA,QAAA,CACH;AAAA,MACL;AAAA,IACJ;AAAA;AAAA,EAEc,eAAeZ,GAAsBgB,GAA0B;AAAA,WAAAC,EAAA;AACzE,WAAK,UAAU,KAAK,QAAQ,OAAOjB,EAAK,OAAO;AAEzC,YAAAiE,IAAcjE,EAAK,QAAQ,KAAK,CAACkC,MAAMA,EAAE,SAAS,QAAQ;AAEhE,aAAI+B,KACA,KAAK,OAAO,SAAS,yBAAyBA,EAAY,OAAO,GAGjEjE,EAAK,gBACL,KAAK,cAAcA,EAAK,cAG5B,KAAK,aAAaA,EAAK,QAAQ,OAAkC,CAAC2C,GAAKvB,MAC/DA,EAAM,aACCA,EAAM,aAEVuB,GACR,MAAS,GAEG,MAAM7B,GAAed,EAAK,SAASgB,CAAS;AAAA,IAE/D;AAAA;AAAA,EAEQ,eAAe2C,GAA0B;AAC7C,UAAMO,IAAe;AAAA,MACjB,QAAQ;AAAA,MACR,SAAS;AAAA,QACL,QAAQ;AAAA,QACR,gBAAgB;AAAA,MACpB;AAAA,IAAA;AAEJ,WAAAP,EAAS,SAAS,KAAK,UAAU,IAAI,SAAS,EAAE,MACvCA,EAAA,aAAaA,EAAS,cAAc,KAAK,YAC3C,OAAO,OAAO,CAAC,GAAGO,GAAc;AAAA,MACnC,MAAM,KAAK,UAAUP,CAAQ;AAAA,MAC7B,aAAa;AAAA,IAAA,CAChB;AAAA,EACL;AAAA,EAEQ,iBAAiBpC,GAAgB;AAC9B,WAAA,KAAK,QAAQ,KAAK,CAACH,MAAU,CAAC,CAACA,EAAM,QAAQG,EAAO;AAAA,EAC/D;AACJ;AC5OA,MAAM4C,GAAM;AAAA,EAMR,YAAoBtE,GAAsB;AALlC,IAAA2D,EAAA,iBAAU;AACV,IAAAA,EAAA,uCAAwC;AACxC,IAAAA,EAAA,mCAA4B;AAC5B,IAAAA,EAAA,iCAA0B;AAEd,SAAA,YAAA3D;AAAA,EAAuB;AAAA,EAErC,kBAAkB;AAAA,WAAAoB,EAAA;AAChB,aAAC,KAAK,UAG6B,MAAMmD;AAAA,QACzC,KAAK;AAAA,QACL,KAAK;AAAA,MAAA,IAJE;AAAA,IAOf;AAAA;AAAA,EAEM,gBAAgB;AAAA,WAAAnD,EAAA;AACd,UAAA,EAAC,KAAK;AAGV,eAAOmD,EAAY,KAAK,WAAW,KAAK,uBAAuB;AAAA,IACnE;AAAA;AAAA,EAEM,MAAMC,GAAwB;AAAA,WAAApD,EAAA;AAC5B,UAAA,EAAC,KAAK;AAGH,eAAAqD;AAAA,UACH,KAAK;AAAA,UACL,KAAK;AAAA,UACLC,EAAgB;AAAA,QAAA,EAClB,KAAK,CAACC,MACGA,EAAMH,CAAM,CACtB;AAAA,IACL;AAAA;AAAA,EAEM,OAAO;AAAA,WAAApD,EAAA;AACL,aAAC,KAAK,UAGHmD,EAA4B,KAAK,WAAW,KAAK,6BAA6B,EAAE;AAAA,QACnF,CAACC,MACUA,KAAU,CAAA;AAAA,MACrB,IALO;IAOf;AAAA;AACJ;AC3CA,MAAMI,GAAqB;AAAA,EAQvB,YACY5E,GACA6E,GACR5E,GACF;AAXM,IAAA0D,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,gBAAyB,CAAA;AACzB,IAAAA,EAAA;AAGI,SAAA,YAAA3D,GACA,KAAA,eAAA6E;AAGR,UAAM,EAAE,QAAApB,EAAO,IAAI,KAAK,UAAU,IAAI,SAAS;AAC/C,SAAK,SAASA,GACT,KAAA,QAAQ,IAAIa,GAAMtE,CAAS,GAC3B,KAAA,QAAQ6E,EAAa,YAAY;AAAA,MAClC,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA,CACX,GACD,KAAK,OAAOA,EAAa;AACnB,UAAArB,IAAWzD,EAAwBC,GAAWC,CAAS;AACxD,SAAA,aAAa,IAAIsD,GAAWC,GAAUC,GAAQ,KAAK,OAAO,KAAK,SAAS,GAE7E,KAAK,OAAO,UAAU,yBAAyB,CAACqB,GAAQ3E,MAAiC;AACrF,WAAK,sBAAsBA,CAAI;AAAA,IAAA,CAClC,GAED,KAAK,OAAO;AAAA,MACR;AAAA,MACA,CAAO2E,GAAQ3E,MAAqEiB,EAAA;AAChF,cAAM4C,IAAW,MAAM,KAAK,WAAW,wBAAwB7D,CAAI;AAEnE,QAAI6D,MACM7D,EAAK,cAAc,SAAY,KAAA,iBAAiBA,EAAK,cAAc,KAAK,GAC9E,KAAK,mBAAmB6D,CAAQ;AAAA,MAExC;AAAA,IAAA;AAAA,EAER;AAAA,EAEM,aAAa;AAAA,WAAA5C,EAAA;AACT,YAAA2D,IAAS,KAAK,aAAa,QAAQ,GAEnCC,IAAkB,MAAM,KAAK,MAAM,cAAc;AACvD,MAAIA,KAAA,QAAAA,EAAY,SACZ,KAAK,MAAM,OAAO;AAAA,QACd,MAAMA,EAAW,MAAM;AAAA,QACvB,QAAQA,EAAW,MAAM;AAAA,MAAA,CAC5B;AAGL,YAAMhB,IAAW,MAAM,KAAK,WAAW,MAAM;AAC7C,MAAIA,KACA,KAAK,mBAAmBA,CAAQ,GAG7Be;IACX;AAAA;AAAA,EAEM,mBAAmBP,GAAwB;AAAA,WAAApD,EAAA;AAC7C,WAAK,SAAS,KAAK,OAAO,OAAOoD,CAAM,GACvC,MAAM,KAAK,MAAM,MAAM,KAAK,MAAM,GAC3BA,EAAA,QAAQ,CAACxD,MAAU;AACtB,cAAM9C,IAAQ8C,EAAM,MAAM,IAAI,CAAC+B,MAASA,EAAK,OAAO;AACpD,QAAI/B,EAAM,SACNA,EAAM,SAAS,KAAK,KAAK,MAAM9C,CAAK,IAEpC8C,EAAM,SAAS,KAAK,MAAM,MAAM9C,CAAK;AAAA,MACzC,CACH;AAAA,IACL;AAAA;AAAA,EAEM,QAAQwD,GAA4E;AAAA,WAAAN,EAAA;AACtF,YAAM6D,IAAY,OAAOvD,KAAW,WAAWA,IAASA,EAAO;AAE/D,cAAQuD,GAAW;AAAA,QACf,KAAK;AACD;AACQ,gBAAA,OAAOvD,KAAW;AAClB;AAEE,kBAAAV,IAAQ,KAAK,OAAO,KAAK,CAACkC;;AAAU,qBAAAA,EAAM,SAAO3C,IAAAmB,EAAO,SAAP,gBAAAnB,EAAa;AAAA,aAAO;AAE3E,gBAAIS,GAAO;AACP,oBAAMgD,IAAW,MAAM,KAAK,WAAW,WAAWhD,CAAK;AACvD,kBAAIgD,GAAU;AACV,sBAAMkB,IAAWlB,EAAS,MAAM,IAAI,CAACjB,MAASA,EAAK,OAAO;AACpD,gBAAA/B,EAAA,KAAK,SAASgD,KAAA,gBAAAA,EAAU,KAAK,QAC7BhD,EAAA,OAAO,OAAOkE,CAAQ;AAAA,cAChC;AAAA,YACJ;AAAA,UACJ;AACA;AAAA,QACJ,KAAK;AACD;AACU,kBAAAH,IAAS,KAAK,aAAa,QAAQ,GAEnCf,IAAW,MAAM,KAAK,WAAW,WAAW;AAC3C,YAAAe,KACHf,KACA,KAAK,mBAAmBA,CAAQ;AAAA,UAExC;AACA;AAAA,QACJ;AACI;AACI,YAAI,OAAOtC,KAAW,YAAYA,EAAO,SAChC,KAAA,iBAAiBA,EAAO,KAAK;AAEhC,kBAAAqD,IAAS,KAAK,aAAa,QAAQ,GACnCf,IAAW,MAAM,KAAK,WAAW,cAAciB,CAAS;AAC9D,YAAIjB,KACA,KAAK,mBAAmBA,CAAQ,GAE7Be;UACX;AACA;AAAA,MACR;AAAA,IACJ;AAAA;AAAA,EAEQ,iBAAiBhE,GAAiB;AACtC,UAAMC,IAAQhD,EAAY;AAAA,MACtB,QAAQ;AAAA,MACR,OAAO;AAAA,QACH;AAAA,UACI,IAAIK,EAAK;AAAA,UACT,QAAQ;AAAA,UACR,SAAS,CAACyB,EAAgC,MAAM,EAAE,MAAMiB,GAAS;AAAA,QACrE;AAAA,MACJ;AAAA,IAAA,CACH;AACI,gBAAA,mBAAmB,CAACC,CAAK,CAAC,GACxBA;AAAA,EACX;AAAA,EAEM,cAAcD,GAAiB;AAAA,WAAAK,EAAA;AAC3B,YAAA2D,IAAS,KAAK,aAAa,QAAQ,GACnCf,IAAW,MAAM,KAAK,WAAW,YAAYjD,CAAO;AAE1D,WAAK,iBAAiBA,CAAO,GAEzBiD,KACA,KAAK,mBAAmBA,CAAQ,GAE7Be;IACX;AAAA;AAAA,EAEc,sBAAsB5E,GAA8B;AAAA,WAAAiB,EAAA;AAC9D,UAAIjB,EAAK,OAAO;AACZ,cAAMgF,IAAgB;AAAA,UAClB,MAAMhF,EAAK,MAAM;AAAA,UACjB,QAAQA,EAAK,MAAM;AAAA,QAAA;AAElB,aAAA,MAAM,OAAOgF,CAAa,IACjB,MAAMV;AAAA,UAChB,KAAK;AAAA,UACL;AAAA,UACAC,EAAgB;AAAA,QAAA,GAEd;AAAA,UACF,OAAOS;AAAA,QAAA,CACV;AAAA,MACL;AAAA,IACJ;AAAA;AACJ;ACvKM,MAAAC,KAA6B,CAAOpF,MAAyBoB,EAAA;AAC/D,QAAMiE,IAAW,MAAMC,EAAqB,YAAYtF,CAAS;AAEjE,EAAAuF;AAAA,IACIvF;AAAA,IACArC,EAAmB;AAAA,IACnB,OAAO;AAAA,EAAA,GAEX4H;AAAA,IACIvF;AAAA,IACArC,EAAmB;AAAA,IACnB,OAAO;AAAA,EAAA,GAGX4H;AAAA,IACIvF;AAAA,IACArC,EAAmB;AAAA,IACnB,OAAO;AAAA,EAAA,GAEX4H;AAAA,IACIvF;AAAA,IACArC,EAAmB;AAAA,IACnB,OAAO;AAAA,EAAA,GAEX4H;AAAA,IACIvF;AAAA,IACArC,EAAmB;AAAA,IACnB,OAAO;AAAA,EAAA,GAGX0H,EAAS,iBAAiB,qBAAqB,CAACR,GAAc5E,MAAc;AACxE,UAAMuF,IAAW,IAAIZ,GAAqB5E,GAAW6E,GAAc5E,CAAS;AAC5E,IAAAuF,EAAS,WAAW,GAEpBvF,EAAU,QAAQ,MAAM,4BAA4B,CAACwF,GAAOC,MAAS;AACxD,MAAAF,EAAA,cAAcC,EAAM,IAAI;AAAA,IAAA,CACpC,GAEDxF,EAAU,QAAQ,MAAM,uBAAuB,CAACwF,GAAOC,OACnDF,EAAS,QAAQC,CAAK,GAEfC,EAAKD,CAAK,EACpB,GAEDxF,EAAU,QAAQ,OAAO,YAAY,CAACwF,MAAU;AAC5C,YAAM,EAAE,QAAAhC,EAAW,IAAAzD,EAAU,IAAI,SAAS;AACnC,MAAAyD,EAAA,SAAS,yBAAyBgC,CAAK;AAAA,IAAA,CACjD,GAEDxF,EAAU,QAAQ,OAAO,UAAU,CAACwF,MAAU;AAC1C,YAAM,EAAE,QAAAhC,EAAW,IAAAzD,EAAU,IAAI,SAAS;AACnC,MAAAyD,EAAA,SAAS,+BAA+BgC,CAAK;AAAA,IAAA,CACvD;AAAA,EAAA,CACJ;AACL;"}
|