{"version":3,"sources":["webpack:///./node_modules/core-js/internals/string-pad.js","webpack:///./src/views/dashboard/image-consultations/list/ImageConsultations.store.js","webpack:///./node_modules/core-js/modules/es.set.constructor.js","webpack:///./src/helpers/date-utils.js","webpack:///./node_modules/core-js/modules/es.string.pad-start.js","webpack:///./node_modules/core-js/modules/es.set.js","webpack:///./src/store/static/PatientDocumentOptions.js","webpack:///./src/views/dashboard/image-consultations/list/ImageConsultations.vue?4200","webpack:///./src/views/dashboard/image-consultations/components/QualityAssuranceToken.vue?29d3","webpack:///src/views/dashboard/image-consultations/components/QualityAssuranceToken.vue","webpack:///./src/views/dashboard/image-consultations/components/QualityAssuranceToken.vue?4bbf","webpack:///./src/views/dashboard/image-consultations/components/QualityAssuranceToken.vue","webpack:///src/views/dashboard/image-consultations/list/ImageConsultations.vue","webpack:///./src/views/dashboard/image-consultations/list/ImageConsultations.vue?1393","webpack:///./src/views/dashboard/image-consultations/list/ImageConsultations.vue","webpack:///./node_modules/core-js/internals/string-pad-webkit-bug.js","webpack:///./src/views/dashboard/components/lists/AssessmentList.vue?7112","webpack:///src/views/dashboard/components/lists/AssessmentList.vue","webpack:///./src/views/dashboard/components/lists/AssessmentList.vue?4463","webpack:///./src/views/dashboard/components/lists/AssessmentList.vue","webpack:///./src/views/dashboard/image-consultations/components/ErrorMessage.vue?7268","webpack:///src/views/dashboard/image-consultations/components/ErrorMessage.vue","webpack:///./src/views/dashboard/image-consultations/components/ErrorMessage.vue?97c9","webpack:///./src/views/dashboard/image-consultations/components/ErrorMessage.vue","webpack:///../../../src/components/VBanner/VBanner.ts","webpack:///./src/views/dashboard/components/lists/utils/parserUtils.js"],"names":["uncurryThis","toLength","toString","$repeat","requireObjectCoercible","repeat","stringSlice","slice","ceil","Math","createMethod","IS_END","$this","maxLength","fillString","fillLen","stringFiller","S","intMaxLength","stringLength","length","fillStr","undefined","module","exports","start","end","getters","errorMessage","state","initialState","assesmentListItems","aiAssesmentListItems","mutations","setListData","payload","dataTableItems","parserUtils","parseApiPayloadToAssessmentDataTableList","setAiAssessmentListData","setErrorMessage","clear","Object","assign","actions","get","commit","endpoint","axios","process","response","data","errors","detail","getAiAssessments","getQaAiAssessments","searchTerm","getQaListByClinicUuid","clinicUuid","namespaced","collection","collectionStrong","init","this","arguments","dateUtils","isToday","date","today","Date","getDate","getMonth","getFullYear","isThisIsoWeek","todayIsoWeek","_getWeek","todayIsoYear","_getWeekYear","dateIsoWeek","dateIsoYear","someDate","getTime","setHours","setDate","getDay","week1","round","subtractDaysFromToday","dateObj","days","includeToday","Error","offsetDays","daysBetweenDatesForRange","date0","date1","ONE_DAY","utc0","UTC","utc1","floor","abs","formatDateToYYYYMMDD","dateString","delimiter","day","month","year","padStart","formatDateToDDMMYYYY","formatDateToDDMMYYYYTime","hour","getHours","minute","getMinutes","isValidDate","d","isNaN","$","$padStart","WEBKIT_BUG","target","proto","forced","title","color","value","format","render","_vm","_h","$createElement","_c","_self","attrs","on","pushToDetail","getQaList","staticRenderFns","increment","_v","_s","reveal","scopedSlots","_u","key","fn","ref","dismiss","$event","getByClinicUuid","staticStyle","model","callback","$$v","clinicUuidToFilterBy","expression","_e","name","nrOfTimesPressed","nrOfTimesToPressToReveal","nrOfTimesToPressToReset","methods","component","VBanner","VBtn","VCol","VContainer","VIcon","VRow","VTextField","components","AssessmentList","ErrorMessage","QualityAssuranceToken","computed","mapState","mapGetters","created","mounted","mapActions","mapMutations","id","console","userAgent","test","staticClass","$t","search","headers","items","rowClick","item","status","_iconColorIsUserVerifiedByClinic","_iconIsUserVerifiedByClinic","props","type","required","default","text","context","goToSelected","icon","VChip","VDataTable","VDivider","domProps","mixins","VSheet","Mobile","Toggleable","extend","inheritAttrs","app","Boolean","String","iconColor","singleLine","sticky","classes","options","call","hasIcon","isMobile","isSticky","$slots","styles","top","$vuetify","application","bar","convertToUnit","position","zIndex","toggle","isActive","iconClick","e","$emit","genIcon","content","size","VAvatar","click","genText","genActions","children","getSlot","genContent","genWrapper","h","attrs$","class","style","directives","VExpandTransition","outlined","setBackgroundColor","TREATMENT_TYPE__PLANNED","TREATMENT_TYPE__COMPLETED","dateOptions","i","resource","attribs","attributes","relationships","relatedImageAsJsonApi","uploaded_images","isPending","is_pending","isAnamnesisQuestionnaire","is_anamnesis_questionnaire","isJournalized","is_journalized","is_journalized_by_clinic","imageUrls","guiUrls","thumbnailUrls","j","imageResource","url","guiUrl","gui_url","thumbnailUrl","thumbnail_url","push","_createdAt","created_at","createdAt","createdAtDate","toLocaleDateString","now","diffInMs","diffInHours","roundedDiffInHours","toFixed","uuid","isUserVerifiedByClinic","is_user_verified_by_clinic","isFromAdentAssessmentWidget","is_from_adent_assessment_widget","parseApiPayloadToMedicalHistoryDataTableList","patient","patientFullname","full_name","phone_number","supportId","cognito_id","_updatedAt","updated_at","updatedAt","updatedAtDate","_completedAt","completed_at","completedAt","completedAtDate","sortableAt","isBookmarked","is_bookmarked","isJournalizedByConnector","is_journalized_by_connector","parseApiPayloadToInstallmentDataTableList","cognitoId","_sentAt","sent_at","sentAtDate","_confirmedAt","confirmed_at","confirmedAtDate","_initialPaymentReceivedAt","initial_payment_received_at","initialPaymentReceivedAtDate","isSent","is_sent","isConfirmed","is_confirmed","confirmedAt","isInitialPaymentReceived","is_initial_payment_received","initialPaymentReceivedAt","groupByDocumentType","fallbackTitle","allowSubgroup","primarySubgroupKey","groupDict","categoryUuid","documentType","categoryTitle","documentTitle","categoryPrecedence","precedence","_addToGroupDocumentDict","asList0","asList1","elem","groupBySystemInitial","byInitial","sort","a","b","parseDocumentList","_rejectedAt","rejected_at","rejectedAtDate","document_type","documentText","getDocumentText","documentPrecedence","isRejected","is_rejected","rejectedAt","amountTotal","amount_total","systemInitial","system_user_initials","parseInstructionList","dateOptionsShort","instructionCard","instruction_card","imageListJson","images","imageList","_parseImageList","imagePovList","_parseimagePovList","shareLogListJson","share_logs","shareLogList","_parseShareLogList","digitalConsultListJson","digital_consult_logs","digitalConsultList","_parseDigitalConsultList","patientFirstname","first_name","instructionCardUuid","instructionCardTitle","title_da","createdAtDateShort","updatedAtDateShort","sentAt","_openedAt","opened_at","openedAt","openedAtDate","_bookmarkedAt","bookmarked_at","bookmarkedAt","bookmarkedAtDate","_nextDigitalConsultAt","next_digital_consult_at","nextDigitalConsultAt","nextDigitalConsultAtDate","nextDigitalConsultAtDateShort","_latestDigitalConsultAt","latest_digital_consult_at","latestDigitalConsultAt","latestDigitalConsultAtDate","latestDigitalConsultAtDateShort","_latestImageReceivedAt","latest_image_received_at","latestImageReceivedAt","latestImageReceivedAtDate","latestImageReceivedAtDateShort","_journalizedAt","journalized_at","journalizedAt","journalizedAtDate","_beforeScanCompletedAt","before_scan_completed_at","beforeScanCompleted_at","beforeScanCompletedAt","beforeScanCompletedAtDate","_afterScanCompletedAt","after_scan_completed_at","afterScanCompleted_at","afterScanCompletedAt","afterScanCompletedAtDate","_latestScanCompletedAt","latest_scan_completed_at","latestScanCompletedAt","latestScanCompletedAtDate","latestMessageToPatientSentAtRaw","latest_message_to_patient_sent_at_raw","latestMessageToPatientSentAtTitle","latest_message_to_patient_sent_at_title","_latestMessageToPatientSentAt","latest_message_to_patient_sent_at","latestMessageToPatientSentAt","latestMessageToPatientSentAtDate","hasAnyImageReady","has_any_image_ready","completedScanCount","completed_scan_count","isAutomaticallyUpdatedSinceViewed","is_automatically_updated_since_viewed","automaticallyUpdatedSinceViewedRaw","automatically_updated_since_viewed_raw","automaticallyUpdatedSinceViewedTitle","automatically_updated_since_viewed_title","_automaticallyUpdatedSinceViewedAt","automatically_updated_since_viewed_at","automaticallyUpdatedSinceViewedAt","automaticallyUpdatedSinceViewedAtDate","_noteLog","note_log","noteLog","_parseNoteLog","_clinic","clinic","clinicAttribs","clinicRels","instructionSmsTemplates","instruction_sms_templates","instructionInternalMessageTemplates","instruction_internal_message_templates","clinicEmail","email","_recipientEmails","organization","organizationAttribs","recipient_emails","recipientEmails","Set","firstname","isOpened","is_opened","isStarted","is_started","isCompleted","is_completed","isBeforeScanCompleted","is_before_scan_completed","isAfterScanCompleted","is_after_scan_completed","isLatestScanCompleted","is_latest_scan_completed","isMessageToPatientSentToday","is_message_to_patient_sent_today","isMessageToPatientSentThisWeek","is_message_to_patient_sent_this_week","isPendingDigitalConsult","is_pending_digital_consult","latestMessageToPatientSentAtTs","isDigitalConsultCompletedToday","is_digital_consult_completed_today","isDigitalConsultCompletedThisWeek","is_digital_consult_completed_this_week","nextDigitalConsultAtTs","latestDigitalConsultAtTs","latestImageReceivedAtTs","scanWeekday","scan_weekday","scanIntervalDays","scan_interval_days","itemList","createdAtTs","prettyCreatedAt","messageType","message_type","messageBodyTrunc","message_body_trunc","body","ts","description","timestamp","note","tagList","uniqueList","pointOfView","point_of_view","includes","meta","_getPointOfViewMeta","tag","isFacePov","image","rawCroppedUrl","raw_cropped_url","hueCroppedUrl","hue_color_cropped_url","pointOfViewTitle","pointOfViewPrecedence","_sortListByDateAndPrecedence","dateA","dateB","condition0","condition1","povClean","trim","_capitalize","arr","split","capital","map","charAt","toUpperCase","toLowerCase","capitalString","join","parseReviewLogList","patAttribs","patientPhoneNumber","patientEmail","contact_email","_resolvedAt","resolved_at","resolvedAt","resolvedAtDate","patientNote","patient_note","maxNoteLength","patientNoteTruncated","score","scoreRaw","score_raw","isResolved","is_resolved","_dataList","parseClinicalPhotoList","patient_phone_number","patient_full_name","patientCognitoId","patient_cognito_id","nameList","hasAnyImagePending","has_any_image_pending","parseConnectorLogList","requestType","requestTypeName","isRequested","is_requested","isDownloaded","is_downloaded","isImported","is_imported","isProcessed","is_processed","shouldDownload","should_download","shouldImport","should_import","parseDentistList","locales","dentistList","parseDentist","dentist","dentistListSorted","localeCompare","parseSystemInitialList","systemInitialList","last_name","label","systemInitialListSorted","parseTreatmentItemCollectionMeta","dentistListJson","dentist_list","systemInitialListJson","system_initials_list","primaryTreatmentGroupList","primary_treatment_group_list","isNumber","parseTreatmentItemCollectionList","resources","parseTreatmentItemCollection","patient_first_name","lastname","patient_last_name","birthdate","patient_birthdate","phonenumber","patient_email","_parseLog","dataList","_billedAtLog","billed_at_log","billedAtLog","_journalChangeLog","journal_change_log","journalChangeLog","_parseJournalChangeLog","_pipelineChangeLog","pipeline_status_log","pipelineChangeLog","excludeTooSimilar","bookedAt","booked_at","billedAt","billed_at","smsSentAt","reminder_sms_sent_at","emailSentAt","reminder_email_sent_at","anySentAt","autoUpdateAt","pipeline_status_auto_updated_at","hostedPatientLink","deeplink_to_web","prettyDate","displayName","_documents","documents","parsePatientDocumentList","docs","documentList","_treatments","treatment_items","groupTreatmentItemListByType","groupedTreatmentItemList","clinicTitle","treatmentSmsTemplates","treatment_sms_templates","reminderSmsTemplates","reminder_sms_templates","reminderEmailTemplates","reminder_email_templates","_dentist","dentistUuid","dentistName","dentistAttribs","dentistNameRaw","dentist_first_name_raw","dentist_last_name_raw","prettySentAt","prettyOpenedAt","prettyBookmarkedAt","prettyConfirmedAt","prettyCompletedAt","prettyBookedAt","prettyBilledAt","prettySmsSentAt","prettyEmailSentAt","prettyAnySentAt","prettyAutoUpdateAt","isSmsSentToday","isEmailSentToday","isSmsSentThisWeek","isEmailSentThisWeek","isAnySentToday","isAnySentThisWeek","daysAgo","_action","automated_action","action","_parseAutomatedAction","commonList","sortedCommonList","searchtext","isReminderCallAny","is_reminder_call_any","isReminderMessageAny","is_reminder_message_any","isReminderAny","isReceived","is_received","openedCount","opened_count","isBooked","is_booked","isBilled","is_billed","uuidSms","uuidEmail","uuidCall","amountTotalPlanned","amount_total_planned","amountTotalCompleted","amount_total_completed","pipeline_status","systemUserInitials","didChangeThisWeek","did_pipeline_status_change_this_week","includeAutoReminderToPatient","include_auto_reminder_message_to_patient","parseTreatmentItemList","_treatment","treatment","_document","document","parseTreatmentOption","option","parseTreatmentGroupFromOption","treatmentGroup","parsePatientDocument","doc","group","price","isPaid","is_paid","then","timeDifference","daysDifference","groupedDict","uuidPrefix","itemType","documentUuid","coveragePublic","coverage_public","coverageDanmark","coverage_danmark","coverageDanmarkMax","coverage_danmark_max","displayImage","titleLookup","recapDescriptionLookup","treatmentAttribs","display_image","recap_description_da","current","currentList","planned","completed","isScanned","_total","plannedPriceTotal","completedPriceTotal","issuedAt","issued_at","is_opened_list","_options","PatientDocumentOptions","_option","readableDocumentType","i18n","t","isPendingAnyAmount","is_pending_any_amount","isPrevThisWeek","is_prev_this_week","isBelowAmount","is_below_amount","actionType","action_type","prevRegisteredAt","prev_registered_at","prevScheduledAt","prev_scheduled_at","nextScheduledAt","next_scheduled_at","prettyPrevRegisteredAt","prettyPrevScheduledAt","prettyNextScheduledAt","groupData","parseTreatmentGroup","parseTreatmentGroupList","groupList","groupByTreatmentOption","category","_addToGroupTreatmentDict","asList","groupByDate","groupByTotalSumTreatment","groupByTotalSumDocument","groupByDateFlattenValue","newList","groupByDateFlattenLabel","isFirst","isLast","groupByTreatmentGroup","groupByDentist","byDentist","newGroupDict","amount","curr","amountTotalBilled","amountTotalPaid","countPlanned","countCompleted","countBilled","countPaid","entry","amountNew","count","precedenceOrFallback","byGroup","_similarityStrList","subtitle","recap_description","similarityStr"],"mappings":"8HACA,IAAIA,EAAc,EAAQ,QACtBC,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QACnBC,EAAU,EAAQ,QAClBC,EAAyB,EAAQ,QAEjCC,EAASL,EAAYG,GACrBG,EAAcN,EAAY,GAAGO,OAC7BC,EAAOC,KAAKD,KAGZE,EAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAOC,EAAWC,GACjC,IAIIC,EAASC,EAJTC,EAAIf,EAASE,EAAuBQ,IACpCM,EAAejB,EAASY,GACxBM,EAAeF,EAAEG,OACjBC,OAAyBC,IAAfR,EAA2B,IAAMZ,EAASY,GAExD,OAAII,GAAgBC,GAA2B,IAAXE,EAAsBJ,GAC1DF,EAAUG,EAAeC,EACzBH,EAAeX,EAAOgB,EAASb,EAAKO,EAAUM,EAAQD,SAClDJ,EAAaI,OAASL,IAASC,EAAeV,EAAYU,EAAc,EAAGD,IACxEJ,EAASM,EAAID,EAAeA,EAAeC,KAItDM,EAAOC,QAAU,CAGfC,MAAOf,GAAa,GAGpBgB,IAAKhB,GAAa,K,4HC9BdiB,EAAU,CACdC,aADc,SACDC,GACX,OAAOA,EAAMD,eAIXE,EAAe,CACnBC,mBAAoB,GACpBC,qBAAsB,GACtBJ,aAAc,IAGVK,EAAY,CAChBC,YADgB,SACJL,GAAqB,IAAdM,EAAc,uDAAJ,GACrBC,EAAiBC,OAAYC,yCAAyCH,GAC5EN,EAAME,mBAAN,eAA+BK,IAEjCG,wBALgB,SAKQV,GAAqB,IAAdM,EAAc,uDAAJ,GACjCC,EAAiBC,OAAYC,yCAAyCH,GAC5EN,EAAMG,qBAAN,eAAiCI,IAEnCI,gBATgB,SASAX,EAAOM,GACrBN,EAAMD,aAAeO,GAEvBM,MAZgB,SAYVZ,GACJa,OAAOC,OAAOd,EAAOC,KAInBc,EAAU,CACRC,IADQ,YACQ,4JAAVC,EAAU,EAAVA,OAGJC,EAAW,wCAHG,kBAMDC,OAAMH,IAAN,UAAaI,6CAAb,YAAwDF,EAAxD,MANC,OAMlBG,EANkB,0DAQlBJ,EAAO,kBAAD,UAAuB,KAAEI,SAASC,KAAKC,OAAO,GAAGC,SARrC,QAUdF,EAAOD,EAASC,KAAKA,KAC3BL,EAAO,cAAeK,GAXF,4DAchBG,iBAfQ,YAeqB,4JAAVR,EAAU,EAAVA,OAGjBC,EAAW,yCAHgB,kBAMdC,OAAMH,IAAN,UAAaI,6CAAb,YAAwDF,EAAxD,MANc,OAM/BG,EAN+B,0DAQ/BJ,EAAO,kBAAD,UAAuB,KAAEI,SAASC,KAAKC,OAAO,GAAGC,SARxB,QAU3BF,EAAOD,EAASC,KAAKA,KAC3BL,EAAO,0BAA2BK,GAXD,4DAc7BI,mBA7BQ,cA6BuC,8JAA1BT,EAA0B,EAA1BA,OAAYU,EAAc,EAAdA,WAGjCT,EAH+C,sBAGrBS,EAHqB,qCAIhClC,IAAfkC,GAA2C,OAAfA,IAC9BT,EAAW,iCALsC,kBAUhCC,OAAMH,IAAN,UAAaI,6CAAb,YAAwDF,EAAxD,MAVgC,OAUjDG,EAViD,4DAYjDJ,EAAO,kBAAD,UAAuB,KAAEI,SAASC,KAAKC,OAAO,GAAGC,SAZN,QAc7CF,EAAOD,EAASC,KAAKA,KAC3BL,EAAO,0BAA2BK,GAfiB,6DAkB/CM,sBA/CQ,WA+C0BC,GAAY,4JAAtBZ,EAAsB,EAAtBA,OAGtBC,EAH4C,sBAGlBW,EAHkB,qDAI3BV,OAAMH,IAAN,UAAaI,6CAAb,YAAwDF,EAAxD,MAJ2B,OAI5CG,EAJ4C,OAK5CC,EAAOD,EAASC,KAAKA,KAC3BL,EAAO,cAAeK,GAN4B,+CAUvC,QACbQ,YAAY,EACZ9B,MAAO,kBAAKC,GACZH,UACAiB,UACAX,c,oCC7FF,IAAI2B,EAAa,EAAQ,QACrBC,EAAmB,EAAQ,QAI/BD,EAAW,OAAO,SAAUE,GAC1B,OAAO,WAAiB,OAAOA,EAAKC,KAAMC,UAAU5C,OAAS4C,UAAU,QAAK1C,MAC3EuC,I,oGCRGI,EAAY,CACdC,QADc,SACNC,GACJ,IAAKA,EACD,OAAO,EAEX,IAAMC,EAAQ,IAAIC,KAClB,OAAOF,EAAKG,WAAaF,EAAME,WAC3BH,EAAKI,YAAcH,EAAMG,YACzBJ,EAAKK,eAAiBJ,EAAMI,eAGpCC,cAXc,SAWAN,GACV,IAAKA,EACD,OAAO,EAEX,IAAMC,EAAQ,IAAIC,KACZK,EAAeX,KAAKY,SAASP,GAC7BQ,EAAeb,KAAKc,aAAaT,GACjCU,EAAcf,KAAKY,SAASR,GAC5BY,EAAchB,KAAKc,aAAaV,GACtC,OAAOW,IAAgBJ,GAAgBK,IAAgBH,GAG3DD,SAvBc,SAuBLK,GACL,IAAIb,EAAO,IAAIE,KAAKW,EAASC,WAC7Bd,EAAKe,SAAS,EAAG,EAAG,EAAG,GACvBf,EAAKgB,QAAQhB,EAAKG,UAAY,GAAKH,EAAKiB,SAAW,GAAK,GACxD,IAAIC,EAAQ,IAAIhB,KAAKF,EAAKK,cAAe,EAAG,GAC5C,OAAO,EAAI/D,KAAK6E,QAAQnB,EAAKc,UAAYI,EAAMJ,WAAa,MAAW,GAAKI,EAAMD,SAAW,GAAK,GAAK,IAG3GP,aA/Bc,SA+BDG,GACT,IAAIb,EAAO,IAAIE,KAAKW,EAASC,WAE7B,OADAd,EAAKgB,QAAQhB,EAAKG,UAAY,GAAKH,EAAKiB,SAAW,GAAK,GACjDjB,EAAKK,eAGhBe,sBArCc,YAqC6C,IACnDC,EADgBrB,EAAmC,EAAnCA,KAAMsB,EAA6B,EAA7BA,KAA6B,IAAvBC,oBAAuB,SAEvD,GAAoB,kBAATvB,EACPqB,EAAU,IAAInB,KAAKF,OAChB,MAAIA,aAAgBE,MAGvB,MAAM,IAAIsB,MACN,8EAHJH,EAAUrB,EAMd,IAAIyB,EAAaH,EAIjB,OAHIC,IACAE,EAAaH,EAAO,GAEjB,IAAIpB,KAAKmB,EAAQP,UAAyB,GAAbW,EAAkB,GAAK,GAAK,MAGpEC,yBAvDc,YAuDkD,IAArCC,EAAqC,EAArCA,MAAOC,EAA8B,EAA9BA,MAA8B,IAAvBL,oBAAuB,SACtDM,EAAU,MAGVC,EAAO5B,KAAK6B,IACdJ,EAAMtB,cACNsB,EAAMvB,WACNuB,EAAMxB,WAEJ6B,EAAO9B,KAAK6B,IACdH,EAAMvB,cACNuB,EAAMxB,WACNwB,EAAMzB,WAINmB,EAAOhF,KAAK2F,MAAM3F,KAAK4F,IAAIF,EAAOF,GAAQD,GAK9C,OAJIN,IACAD,GAAc,GAGXA,GAGXa,qBA/Ec,YA+E8C,IAArCnC,EAAqC,EAArCA,KAAMoC,EAA+B,EAA/BA,WAA+B,IAAnBC,iBAAmB,MAAP,IAAO,EACxD,GAAKrC,GAASoC,EAAd,CACA,IAAIT,EAAQ3B,EACP2B,IACDA,EAAQ,IAAIzB,KAAKkC,IAErB,IAAIE,EAAMX,EAAMxB,UAAUpE,WACtBwG,GAASZ,EAAMvB,WAAa,GAAGrE,WAC/ByG,EAAOb,EAAMtB,cAActE,WAAWK,OAAO,GAGjD,OAFAkG,EAAMA,EAAIG,SAAS,EAAG,KACtBF,EAAQA,EAAME,SAAS,EAAG,KACnB,GAAP,OAAUD,GAAV,OAAiBH,GAAjB,OAA6BE,GAA7B,OAAqCF,GAArC,OAAiDC,KAGrDI,qBA7Fc,YA6F8C,IAArC1C,EAAqC,EAArCA,KAAMoC,EAA+B,EAA/BA,WAA+B,IAAnBC,iBAAmB,MAAP,IAAO,EACxD,GAAKrC,GAASoC,EAAd,CACA,IAAIT,EAAQ3B,EACP2B,IACDA,EAAQ,IAAIzB,KAAKkC,IAErB,IAAIE,EAAMX,EAAMxB,UAAUpE,WACtBwG,GAASZ,EAAMvB,WAAa,GAAGrE,WAC/ByG,EAAOb,EAAMtB,cAActE,WAAWK,OAAO,GAGjD,OAFAkG,EAAMA,EAAIG,SAAS,EAAG,KACtBF,EAAQA,EAAME,SAAS,EAAG,KACnB,GAAP,OAAUH,GAAV,OAAgBD,GAAhB,OAA4BE,GAA5B,OAAoCF,GAApC,OAAgDG,KAGpDG,yBA3Gc,YA2GkD,IAArC3C,EAAqC,EAArCA,KAAMoC,EAA+B,EAA/BA,WAA+B,IAAnBC,iBAAmB,MAAP,IAAO,EAC5D,GAAKrC,GAASoC,EAAd,CACA,IAAIT,EAAQ3B,EACP2B,IACDA,EAAQ,IAAIzB,KAAKkC,IAErB,IAAIE,EAAMX,EAAMxB,UAAUpE,WACtBwG,GAASZ,EAAMvB,WAAa,GAAGrE,WAC/ByG,EAAOb,EAAMtB,cAActE,WAAWK,OAAO,GAC7CwG,EAAOjB,EAAMkB,WAAW9G,WACxB+G,EAASnB,EAAMoB,aAAahH,WAKhC,OAJAuG,EAAMA,EAAIG,SAAS,EAAG,KACtBF,EAAQA,EAAME,SAAS,EAAG,KAC1BG,EAAOA,EAAKH,SAAS,EAAG,KACxBK,EAASA,EAAOL,SAAS,EAAG,KACrB,GAAP,OAAUH,GAAV,OAAgBD,GAAhB,OAA4BE,GAA5B,OAAoCF,GAApC,OAAgDG,EAAhD,aAAyDI,EAAzD,YAAiEE,KAGrEE,YA7Hc,SA6HFC,GACR,OAAOA,aAAa/C,OAASgD,MAAMD,KAI5BnD,U,oCCjIf,IAAIqD,EAAI,EAAQ,QACZC,EAAY,EAAQ,QAA2B9F,MAC/C+F,EAAa,EAAQ,QAIzBF,EAAE,CAAEG,OAAQ,SAAUC,OAAO,EAAMC,OAAQH,GAAc,CACvDZ,SAAU,SAAkB/F,GAC1B,OAAO0G,EAAUxD,KAAMlD,EAAWmD,UAAU5C,OAAS,EAAI4C,UAAU,QAAK1C,O,qBCR5E,EAAQ,S,kCCDO,QAEX,CACIsG,MAAO,2CACPC,MAAO,QACPC,MAAO,YACPC,OAAQ,OAEZ,CACIH,MAAO,2BACPC,MAAO,QACPC,MAAO,OACPC,OAAQ,OAEZ,CACIH,MAAO,mCACPC,MAAO,QACPC,MAAO,cACPC,OAAQ,OAEZ,CACIH,MAAO,8BACPC,MAAO,QACPC,MAAO,eACPC,OAAQ,OAEZ,CACIH,MAAO,gCACPC,MAAO,QACPC,MAAO,YACPC,OAAQ,OAOZ,CACIH,MAAO,gBACPC,MAAO,MACPC,MAAO,GACPC,OAAQ,M,2CCzChB,IAAIC,EAAS,WAAa,IAAIC,EAAIlE,KAASmE,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,kBAAkB,CAACE,MAAM,CAAC,MAAQ,wBAAwB,MAAQL,EAAIlG,oBAAoBwG,GAAG,CAAC,eAAiBN,EAAIO,gBAAgBJ,EAAG,gBAAgB,CAACE,MAAM,CAAC,gBAAgBL,EAAIrG,cAAgB,MAAMwG,EAAG,0BAA0B,CAACG,GAAG,CAAC,UAAYN,EAAIQ,cAAc,IACjXC,EAAkB,G,4DCDlB,EAAS,WAAa,IAAIT,EAAIlE,KAASmE,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,YAAY,MAAQ,GAAG,IAAM,YAAY,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,KAAK,GAAK,OAAO,CAACF,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAO,GAAMC,GAAG,CAAC,MAAQN,EAAIU,YAAY,CAACP,EAAG,SAAS,CAACH,EAAIW,GAAGX,EAAIY,GAAGZ,EAAIa,OAAS,sBAAwB,yBAAyB,GAAIb,EAAU,OAAEG,EAAG,WAAW,CAACE,MAAM,CAAC,cAAc,GAAG,WAAa,sBAAsBS,YAAYd,EAAIe,GAAG,CAAC,CAACC,IAAI,UAAUC,GAAG,SAASC,GACjfA,EAAIC,QAClB,MAAO,CAAChB,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,WAAWC,GAAG,CAAC,MAAQ,SAASc,GAAiBpB,EAAIa,QAAO,KAAS,CAACb,EAAIW,GAAG,eAAeR,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,GAAG,MAAQ,WAAWC,GAAG,CAAC,MAAQ,SAASc,GAAQ,OAAOpB,EAAIqB,qBAAqB,CAACrB,EAAIW,GAAG,kBAAkB,MAAK,EAAM,aAAa,CAACR,EAAG,eAAe,CAACmB,YAAY,CAAC,YAAY,SAASjB,MAAM,CAAC,MAAQ,aAAakB,MAAM,CAAC1B,MAAOG,EAAwB,qBAAEwB,SAAS,SAAUC,GAAMzB,EAAI0B,qBAAqBD,GAAKE,WAAW,2BAA2B,GAAG3B,EAAI4B,MAAM,IAAI,IAAI,IAChhB,EAAkB,GC+CtB,GACAC,6BAEA3G,KAHA,WAIA,OACAwG,wBACAb,UACAiB,mBACAC,2BACAC,6BAGAC,SACAvB,UADA,WAEA,yBACA,wDACA,gBAEA,uDACA,eACA,0BAGAW,gBAXA,WAYA,gCACA,6BC3E4Y,I,qHCOxYa,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,EAAiB,QAWhC,IAAkBA,EAAW,CAACC,UAAA,KAAQC,OAAA,KAAKC,OAAA,KAAKC,aAAA,KAAWC,QAAA,KAAMC,OAAA,KAAKC,aAAA,OCVvD,OACfZ,mCACAa,YACAC,sBACAC,oBACAC,yBAGA3H,KARA,WASA,UAGA4H,0CACAC,gBACAjJ,+BAAA,4CAEAkJ,gBACArJ,2CAIAsJ,QArBA,WAsBA,6BAAA3J,iBAGA4J,QAzBA,WA0BA,YAGAjB,wDACAkB,8BACA,MACA,2BAEAC,yCALA,IAOA7C,aAPA,SAOA8C,GAGAC,+CACA,qDAGA9C,UAdA,SAcA/E,GACA,kCC/DyY,ICOrY,EAAY,eACd,EACAsE,EACAU,GACA,EACA,KACA,KACA,MAIa,e,gCCjBf,IAAI8C,EAAY,EAAQ,QAExBjK,EAAOC,QAAU,mEAAmEiK,KAAKD,I,kCCHzF,IAAIxD,EAAS,WAAa,IAAIC,EAAIlE,KAASmE,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,cAAc,IAAM,YAAY,CAACF,EAAG,qBAAqB,CAACA,EAAG,eAAe,CAACsD,YAAY,eAAenC,YAAY,CAAC,YAAY,SAASjB,MAAM,CAAC,cAAc,cAAc,MAAQL,EAAI0D,GAAG,kBAAkB,eAAe,GAAG,cAAc,IAAInC,MAAM,CAAC1B,MAAOG,EAAU,OAAEwB,SAAS,SAAUC,GAAMzB,EAAI2D,OAAOlC,GAAKE,WAAW,YAAYxB,EAAG,YAAY,CAACsD,YAAY,SAAStD,EAAG,eAAe,CAACE,MAAM,CAAC,QAAUL,EAAI4D,QAAQ,MAAQ5D,EAAI6D,MAAM,OAAS7D,EAAI2D,OAAO,UAAU,CAAC,sBAAsB,YAAY,EAAC,IAAOrD,GAAG,CAAC,gBAAgB,SAASc,GAAQpB,EAAI2D,OAAOvC,GAAQ,YAAYpB,EAAI8D,UAAUhD,YAAYd,EAAIe,GAAG,CAAC,CAACC,IAAI,cAAcC,GAAG,SAASC,GAC/vB,IAAI6C,EAAO7C,EAAI6C,KACf,MAAO,CAAC5D,EAAG,SAAS,CAACE,MAAM,CAAC,MAAQ0D,EAAKnE,MAAM,KAAO,KAAK,CAACI,EAAIW,GAAG,IAAIX,EAAIY,GAAGmD,EAAKC,QAAQ,UAAU,CAAChD,IAAI,8BAA8BC,GAAG,SAASC,GACpJ,IAAI6C,EAAO7C,EAAI6C,KACf,MAAO,CAAC5D,EAAG,SAAS,CAACE,MAAM,CAAC,MAAQL,EAAIiE,iCAAiCF,KAAQ,CAAC/D,EAAIW,GAAG,IAAIX,EAAIY,GAAGZ,EAAIkE,4BAA4BH,IAAO,WAAW,MAAK,MAAS,IAAI,IACpKtD,EAAkB,GCmCP,GACfoB,sCAEAsC,OACAN,OACAO,mBACAC,aAEA1E,aACAC,OACAwE,YACAE,oBAIApJ,gBAAA,OACA0I,SACA,CACAW,YACA1E,cAEA,CACA0E,UACA1E,cAEA,CACA0E,YACA1E,cAEA,CACA0E,4BACA1E,sBAGA8D,gBAGA1B,SACA6B,SADA,SACAC,EAAAS,GACA,sBAEAC,aAJA,SAIAV,GACA,aACA,gCAGAE,iCATA,SASAF,GACA,aASA,OARA,yBACAnE,YAEA,0BACA,gCAEAA,aAEA,GAEAsE,4BArBA,SAqBAH,GACA,kBASA,OARA,yBACAW,cAEA,0BACA,gCAEAA,eAEA,KC5GqY,I,yGCOjYxC,EAAY,eACd,EACAnC,EACAU,GACA,EACA,KACA,KACA,MAIa,OAAAyB,EAAiB,QAUhC,IAAkBA,EAAW,CAACyC,QAAA,KAAMrC,aAAA,KAAWsC,aAAA,KAAWC,WAAA,KAAStC,QAAA,KAAME,aAAA,Q,kCC5BzE,IAAI1C,EAAS,WAAa,IAAIC,EAAIlE,KAASmE,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,cAAc,CAACE,MAAM,CAAC,GAAK,YAAY,MAAQ,GAAG,IAAM,YAAY,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,MAAM,CAAC,KAAO,KAAK,GAAK,OAAO,CAACF,EAAG,OAAO,CAACsD,YAAY,cAAcqB,SAAS,CAAC,YAAc9E,EAAIY,GAAGZ,EAAIrG,oBAAoB,IAAI,IAC5T8G,EAAkB,GCoBtB,GACAoB,oBAEAsC,OACAxK,cACAyK,YACAC,eC3BmY,I,qECO/XnC,EAAY,eACd,EACAnC,EACAU,GACA,EACA,KACA,KACA,MAIa,OAAAyB,EAAiB,QAOhC,IAAkBA,EAAW,CAACG,OAAA,KAAKC,aAAA,KAAWE,OAAA,Q,wKCC/BuC,sBACbC,OACAC,OACAC,QACAC,OAAO,CACPtD,KAAM,WAENuD,cAAc,EAEdjB,MAAO,CACLkB,IAAKC,QACLZ,KAAMa,OACNC,UAAWD,OACXE,WAAYH,QACZI,OAAQJ,QACRzF,MAAO,CACLuE,KAAMkB,QACNhB,SAAS,IAIbxB,SAAU,CACR6C,QADQ,WAEN,OAAO,iCACFX,OAAOY,QAAQ9C,SAAS6C,QAAQE,KAAK/J,OAD1C,IAEE,qBAAsBA,KAAKgK,QAC3B,sBAAuBhK,KAAKiK,SAC5B,wBAAyBjK,KAAK2J,WAC9B,mBAAoB3J,KAAKkK,YAG7BF,QAVQ,WAWN,OAAOR,QAAQxJ,KAAK4I,MAAQ5I,KAAKmK,OAAOvB,OAE1CsB,SAbQ,WAcN,OAAOlK,KAAK4J,QAAU5J,KAAKuJ,KAE7Ba,OAhBQ,WAiBN,IAAMA,EAAM,kBAA6BlB,OAAOY,QAAQ9C,SAASoD,OAAOL,KAAK/J,OAE7E,GAAIA,KAAKkK,SAAU,CACjB,IAAMG,EAAOrK,KAAKuJ,IAEbvJ,KAAKsK,SAASC,YAAYC,IAAMxK,KAAKsK,SAASC,YAAYF,IAD3D,EAGJD,EAAOC,IAAMI,eAAcJ,GAC3BD,EAAOM,SAAW,SAClBN,EAAOO,OAAS,EAGlB,OAAOP,IAIXjE,QAAS,CAEPyE,OAFO,WAGL5K,KAAK6K,UAAY7K,KAAK6K,UAExBC,UALO,SAKIC,GACT/K,KAAKgL,MAAM,aAAcD,IAE3BE,QARO,WAWL,IAAIC,EAFJ,GAAKlL,KAAKgK,QAeV,OAVEkB,EADElL,KAAK4I,KACG5I,KAAKoE,eAAeqC,OAAO,CACnC4B,MAAO,CACLvE,MAAO9D,KAAK0J,UACZyB,KAAM,KAEP,CAACnL,KAAK4I,OAEC5I,KAAKmK,OAAOvB,KAGjB5I,KAAKoE,eAAegH,OAAS,CAClCzD,YAAa,iBACbU,MAAO,CACLvE,MAAO9D,KAAK8D,MACZqH,KAAM,IAER3G,GAAI,CACF6G,MAAOrL,KAAK8K,YAEb,CAACI,KAENI,QAnCO,WAoCL,OAAOtL,KAAKoE,eAAe,MAAO,CAChCuD,YAAa,kBACZ3H,KAAKmK,OAAO3B,UAEjB+C,WAxCO,WAwCG,WACFC,EAAWC,eAAQzL,KAAM,UAAW,CACxCqF,QAAS,kBAAM,EAAKwF,UAAW,KAGjC,GAAKW,EAEL,OAAOxL,KAAKoE,eAAe,MAAO,CAChCuD,YAAa,qBACZ6D,IAELE,WAnDO,WAoDL,OAAO1L,KAAKoE,eAAe,MAAO,CAChCuD,YAAa,qBACZ,CACD3H,KAAKiL,UACLjL,KAAKsL,aAGTK,WA3DO,WA4DL,OAAO3L,KAAKoE,eAAe,MAAO,CAChCuD,YAAa,qBACZ,CACD3H,KAAK0L,aACL1L,KAAKuL,iBAKXtH,OAvHO,SAuHC2H,GACN,IAAMxM,EAAO,CACXuI,YAAa,WACbpD,MAAOvE,KAAK6L,OACZC,MAAO9L,KAAK6J,QACZkC,MAAO/L,KAAKoK,OACZ4B,WAAY,CAAC,CACXjG,KAAM,OACNhC,MAAO/D,KAAK6K,YAIhB,OAAOe,EAAEK,OAAmB,CAC1BL,EACE,MACA5L,KAAKkM,SAAW9M,EAAOY,KAAKmM,mBAAmBnM,KAAK8D,MAAO1E,GAC3D,CAACY,KAAK2L,qB,iTCjKRS,EAA0B,UAC1BC,EAA4B,YAE5B/N,EAAc,CAClBC,yCADkB,SACuBH,GAiBvC,IAAMkO,EAAc,CAAE1J,KAAM,UAAWD,MAAO,QAASD,IAAK,WAEtDrE,EAAiB,GACnBkO,EAAI,EACR,IAAKA,KAAKnO,EAAS,OACXoO,EAAWpO,EAAQmO,GACnBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBC,EAAwBD,EAAcE,gBAAgBzN,KAExD0E,EAAQ,UACRoE,EAAS,kBACP4E,EAAYL,EAAQM,WACpBC,EAA2BP,EAAQQ,2BACnCC,EAAa,UAAGT,EAAQU,sBAAX,QAA6BV,EAAQW,yBACpDJ,GACFlJ,EAAQ,OACRoE,EAAS,oBACAgF,GACTpJ,EAAQ,UACRoE,EAAS,eACC4E,IACVhJ,EAAQ,UACRoE,EAAS,WAGX,IAAMmF,EAAY,GACZC,EAAU,GACVC,EAAgB,GAClBC,EAAI,EACR,IAAKA,KAAKZ,EAAuB,CAC/B,IAAMa,EAAgBb,EAAsBY,GACtCE,EAAMD,EAAcf,WAAWgB,IAC/BC,EAASF,EAAcf,WAAWkB,QAClCC,EAAeJ,EAAcf,WAAWoB,cAC9CT,EAAUU,KAAKL,GACfJ,EAAQS,KAAKJ,GACbJ,EAAcQ,KAAKF,GAGrB,IAAMG,EAAevB,EAAQwB,WAAa,IAAI3N,KAAKmM,EAAQwB,YAAc,KACnEC,EAAcF,EAAaA,EAAW9M,UAAY,KAClDiN,EAAkBH,EAAaA,EAAWI,mBAAmB,QAAS9B,GAAe,KAErF+B,EAAM,IAAI/N,KACVgO,EAAaN,EAAaK,EAAML,EAAa,EAC7CO,EAAcD,EAAW,KACzBE,EAAqBD,EAAYE,QAAQ,GAEzCxG,EAAO,CACXyG,KAAMjC,EAAQiC,KACd3I,KAAM0G,EAAQ1G,KACdmI,UAAWA,EACX9N,KAAM+N,EACNI,YAAaC,EACbtG,OAAQA,EACRpE,MAAOA,EACP6K,uBAAwBlC,EAAQmC,2BAChCC,4BAA6BpC,EAAQqC,gCACrC9B,yBAA0BA,EAC1BE,cAAeA,EACfG,UAAWA,EACXC,QAASA,EACTC,cAAeA,GAEjBlP,EAAe0P,KAAK9F,GAEtB,OAAO5J,GAGT0Q,6CAxFkB,SAwF2B3Q,GAC3C,IAAMkO,EAAc,CAAE1J,KAAM,UAAWD,MAAO,QAASD,IAAK,WAEtDrE,EAAiB,GACnBkO,EAAI,EACR,IAAKA,KAAKnO,EAAS,CACjB,IAAMoO,EAAWpO,EAAQmO,GACnBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBqC,EAAUrC,EAAcqC,QAAQ5P,KAElC6P,EAAoBD,EAAUA,EAAQtC,WAAWwC,UAAY,KAIjE,GAHuB,MAAnBD,GAAqD,GAA1BA,EAAgB5R,SAC7C4R,EAAkBD,EAAQtC,WAAWyC,cAEhB,MAAnBF,GAAqD,GAA1BA,EAAgB5R,OAAa,CAC1D,IAAM+R,EAAYJ,EAAQtC,WAAW2C,WAAW7S,MAAM,EAAG,GACzDyS,EAAkB,6BAAH,OAAgCG,EAAhC,KAGjB,IAAMpB,EAAa,IAAI1N,KAAKmM,EAAQwB,YAC9BC,EAAYF,EAAW9M,UACvBiN,EAAgBH,EAAWI,mBAAmB,QAAS9B,GAEvDgD,EAAa,IAAIhP,KAAKmM,EAAQ8C,YAC9BC,EAAYF,EAAWpO,UACvBuO,EAAgBH,EAAWlB,mBAAmB,QAAS9B,GAEvDoD,EAAe,IAAIpP,KAAKmM,EAAQkD,cAChCC,EAAcF,EAAaxO,UAC3B2O,EAAkBH,EAAatB,mBAAmB,QAAS9B,GAE7DwD,EAAaF,EACZxM,EAAYsM,KACfI,EAAa5B,GAGf,IAAMjG,EAAO,CACXyG,KAAMjC,EAAQiC,KACd3I,KAAMkJ,EACNf,UAAWA,EACXsB,UAAWA,EACXI,YAAaA,EACbxP,KAAMyP,EACNC,WAAYA,EACZC,aAActD,EAAQuD,cACtB9C,cAAeT,EAAQU,eACvB8C,yBAA0BxD,EAAQyD,4BAClCT,cAAeA,EACftB,cAAeA,EACf0B,gBAAiBA,GAEnBxR,EAAe0P,KAAK9F,GAEtB,OAAO5J,GAGT8R,0CAjJkB,SAiJwB/R,GACxC,IAAMkO,EAAc,CAAE1J,KAAM,UAAWD,MAAO,QAASD,IAAK,WAEtDrE,EAAiB,GACnBkO,EAAI,EACR,IAAKA,KAAKnO,EAAS,CACjB,IAAMoO,EAAWpO,EAAQmO,GACnBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBqC,EAAUrC,EAAcqC,QAAQ5P,KAEhCgQ,EAAY3C,EAAQiC,KAAKlS,MAAM,EAAG,GAEpCyS,EAAoBD,EAAUA,EAAQtC,WAAWwC,UAAY,KAIjE,GAHuB,MAAnBD,GAAqD,GAA1BA,EAAgB5R,SAC7C4R,EAAkBD,EAAQtC,WAAWyC,cAEhB,MAAnBF,GAAqD,GAA1BA,EAAgB5R,OAAa,CAC1D,IAAM+S,EAAYpB,EAAQtC,WAAW2C,WAAW7S,MAAM,EAAG,GACzDyS,EAAkB,6BAAH,OAAgCmB,EAAhC,KAGjB,IAAMpC,EAAa,IAAI1N,KAAKmM,EAAQwB,YAC9BC,EAAYF,EAAW9M,UACvBiN,EAAgBH,EAAWI,mBAAmB,QAAS9B,GAEvDgD,EAAa,IAAIhP,KAAKmM,EAAQ8C,YAC9BE,EAAgBH,EAAWlB,mBAAmB,QAAS9B,GAEvD+D,EAAU,IAAI/P,KAAKmM,EAAQ6D,SAC3BC,EAAaF,EAAQjC,mBAAmB,QAAS9B,GAEjDkE,EAAuC,MAAxB/D,EAAQgE,aAAuB,KAAO,IAAInQ,KAAKmM,EAAQgE,cACtEC,EAAkC,MAAhBF,EAAuB,KAAOA,EAAapC,mBAAmB,QAAS9B,GAEzFqE,EAAmE,MAAvClE,EAAQmE,4BAAsC,KAAO,IAAItQ,KAAKmM,EAAQmE,6BAClGC,EAA4D,MAA7BF,EAAoC,KAAOA,EAA0BvC,mBAAmB,QAAS9B,GAEhIrE,EAAO,CACXyG,KAAMjC,EAAQiC,KACd3I,KAAMkJ,EACNf,UAAWA,EACX9N,KAAM+N,EACNA,cAAeA,EACfsB,cAAeA,EACfqB,OAAQrE,EAAQsE,QAChBC,YAAavE,EAAQwE,aACrBC,YAAaR,EACbS,yBAA0B1E,EAAQ2E,4BAClCC,yBAA0BR,EAC1Bd,aAActD,EAAQuD,cACtB9C,cAAeT,EAAQU,eACvBoD,WAAYA,EACZnB,UAAWA,GAEb/Q,EAAe0P,KAAK9F,GAEtB,OAAO5J,GAGHiT,oBA7MY,YAkNf,kMAJDvJ,EAIC,EAJDA,MAIC,IAHDwJ,qBAGC,MAHe,yBAGf,MAFDC,qBAEC,aADDC,0BACC,MADoB,YACpB,EACGC,EAAY,GADf,2BAEa3J,GAFb,qDAEQwE,EAFR,WAGOtE,EAAOF,EAAMwE,GACboF,EAAe1J,EAAK2J,aACpBC,EALP,UAKuB5J,EAAK6J,qBAL5B,QAK6CP,EACtCQ,EAAsB9J,GAAD,UAAaA,EAAK+J,kBAAlB,QAAQ,EANpC,UAQmB,EAAKC,wBAAwB,CAC7ChK,KAAMA,EACNyJ,UAAWA,EACXC,aAAcA,EACdE,cAAeA,EACfE,mBAAoBA,IAbvB,QAQCL,EARD,8BAiBD,IAAShD,KADLwD,EAAU,GACGR,EACfQ,EAAQnE,KAAK2D,EAAUhD,IAGrByD,EAAU,GArBb,2BAsBaD,GAtBb,kDAsBQ1E,EAtBR,WAuBO4E,EAAOF,EAAQ1E,IACjBgE,EAxBL,kCAyB2B,EAAKa,qBAAqB,CAChDtK,MAAOqK,EAAKrK,MACZyJ,eAAe,IA3BpB,QAyBSc,EAzBT,OA6BGF,EAAK,aAAeE,EACpBF,EAAK,YAAcA,EAAKX,GA9B3B,QAgCCU,EAAQpE,KAAKqE,GAhCd,iDAmCMD,EAAQI,MAAK,SAACC,EAAGC,GAAJ,eAAU,UAACA,EAAET,kBAAH,QAAiB,IAAjB,UAAuBQ,EAAER,kBAAzB,QAAuC,OAnCpE,+CAsCHU,kBAxPkB,SAwPAtU,GAChB,IAAMkO,EAAc,CAAE1J,KAAM,UAAWD,MAAO,QAASD,IAAK,WAEtDrE,EAAiB,GACnBkO,EAAI,EACR,IAAKA,KAAKnO,EAAS,CACjB,IAAMoO,EAAWpO,EAAQmO,GACnBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBqC,EAAUrC,EAAcqC,QAAQ5P,KAEhCgQ,EAAY3C,EAAQiC,KAAKlS,MAAM,EAAG,GAEpCyS,EAAoBD,EAAUA,EAAQtC,WAAWwC,UAAY,KAIjE,GAHuB,MAAnBD,GAAqD,GAA1BA,EAAgB5R,SAC7C4R,EAAoBD,EAAUA,EAAQtC,WAAWyC,aAAe,MAE3C,MAAnBF,GAAqD,GAA1BA,EAAgB5R,OAAa,CAC1D,IAAM+S,EAAcpB,EAAUA,EAAQtC,WAAW2C,WAAW7S,MAAM,EAAG,GAAK,KAC1EyS,EAAkB,6BAAH,OAAgCmB,EAAhC,KAGjB,IAAMpC,EAAa,IAAI1N,KAAKmM,EAAQwB,YAC9BC,EAAYF,EAAW9M,UACvBiN,EAAgBH,EAAWI,mBAAmB,QAAS9B,GAEvDgD,EAAa,IAAIhP,KAAKmM,EAAQ8C,YAC9BE,EAAgBH,EAAWlB,mBAAmB,QAAS9B,GAEvD+D,EAAU,IAAI/P,KAAKmM,EAAQ6D,SAC3BC,EAAaF,EAAQjC,mBAAmB,QAAS9B,GAEjDkE,EAAuC,MAAxB/D,EAAQgE,aAAuB,KAAO,IAAInQ,KAAKmM,EAAQgE,cACtEC,EAAkC,MAAhBF,EAAuB,KAAOA,EAAapC,mBAAmB,QAAS9B,GAEzFqG,EAAqC,MAAvBlG,EAAQmG,YAAsB,KAAO,IAAItS,KAAKmM,EAAQmG,aACpEC,EAAgC,MAAfF,EAAsB,KAAOA,EAAYvE,mBAAmB,QAAS9B,GAEtFsF,EAAenF,EAAQqG,cACvBC,EAAe/S,KAAKgT,gBAAgB,CAAEpB,aAAcA,IACpDE,EAAgBiB,EAAalP,MAC7BoP,EAAqBF,EAAaf,WAElC/J,EAAO,CACXyG,KAAMjC,EAAQiC,KACd3I,KAAMkJ,EACN2C,aAAcA,EACdE,cAAeA,EACfE,WAAYiB,EACZ/E,UAAWA,EACX9N,KAAM+N,EACNA,cAAeA,EACfsB,cAAeA,EACfqB,OAAQrE,EAAQsE,QAChBC,YAAavE,EAAQwE,aACrBC,YAAaR,EACbwC,WAAYzG,EAAQ0G,YACpBC,WAAYP,EACZ9C,aAActD,EAAQuD,cACtB9C,cAAeT,EAAQU,eACvBoD,WAAYA,EACZ8C,YAAa5G,EAAQ6G,aACrB5F,IAAKjB,EAAQiB,IACb0B,UAAWA,EACXmE,cAAe9G,EAAQ+G,sBAEzBnV,EAAe0P,KAAK9F,GAEtB,OAAO5J,GAIToV,qBAhUkB,SAgUGrV,GACnB,IAAMkO,EAAc,CAAE1J,KAAM,UAAWD,MAAO,QAASD,IAAK,WACtDgR,EAAmB,CAAE/Q,MAAO,QAASD,IAAK,WAE1CrE,EAAiB,GACnBkO,EAAI,EACR,IAAKA,KAAKnO,EAAS,SACXoO,EAAWpO,EAAQmO,GACnBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBqC,EAAUrC,EAAcqC,QAAQ5P,KAChCuU,EAAkBhH,EAAciH,iBAAiBxU,KAEjDyU,EAAgBlH,EAAcmH,OAAO1U,KACrC2U,EAAY/T,KAAKgU,gBAAgB,CAAE5V,QAASyV,IAC5CI,EAAejU,KAAKkU,mBAAmB,CAAE9V,QAASyV,IAElDM,EAAoBxH,EAAcyH,WAAkBzH,EAAcyH,WAAWhV,KAA9B,GAC/CiV,EAAerU,KAAKsU,mBAAmB,CAAElW,QAAS+V,IAElDI,EAAyB5H,EAAc6H,qBAAqBpV,KAC5DqV,EAAqBzU,KAAK0U,yBAAyB,CAAEtW,QAASmW,IAE9DnE,EAAcpB,EAAUA,EAAQtC,WAAW2C,WAAa,KAE1DsF,EAAqB3F,EAAUA,EAAQtC,WAAWkI,WAAa,KAC/D3F,EAAoBD,EAAUA,EAAQtC,WAAWwC,UAAY,KAIjE,GAHuB,MAAnBD,GAAqD,GAA1BA,EAAgB5R,SAC7C4R,EAAoBD,EAAUA,EAAQtC,WAAWyC,aAAe,MAE3C,MAAnBF,GAAqD,GAA1BA,EAAgB5R,OAAa,CAC1D,IAAM+R,EAAYgB,EAAU5T,MAAM,EAAG,GACrCyS,EAAkB,6BAAH,OAAgCG,EAAhC,KAGjB,IAAIyF,EAAsB,KACtBC,EAAuB,KACrBnB,IACJkB,EAAsBlB,EAAgBjH,WAAWgC,KACjDoG,EAAuBnB,EAAgBjH,WAAWqI,UAGpD,IAAM/G,EAAevB,EAAQwB,WAAa,IAAI3N,KAAKmM,EAAQwB,YAAc,KACnEC,EAAcF,EAAaA,EAAW9M,UAAY,KAClDiN,EAAkBH,EAAaA,EAAWI,mBAAmB,QAAS9B,GAAe,KACrF0I,EAAuBhH,EAAaA,EAAWI,mBAAmB,QAASsF,GAAoB,KAE/FpE,EAAe7C,EAAQ8C,WAAa,IAAIjP,KAAKmM,EAAQ8C,YAAc,KACnEC,EAAcF,EAAaA,EAAWpO,UAAY,KAClDuO,EAAkBH,EAAaA,EAAWlB,mBAAmB,QAAS9B,GAAe,KACrF2I,EAAuB3F,EAAaA,EAAWlB,mBAAmB,QAASsF,GAAoB,KAE/FrD,EAAY5D,EAAQ6D,QAAU,IAAIhQ,KAAKmM,EAAQ6D,SAAW,KAC1D4E,EAAW7E,EAAUA,EAAQnP,UAAY,KACzCqP,EAAeF,EAAUA,EAAQjC,mBAAmB,QAAS9B,GAAe,KAE5EoD,EAAiBjD,EAAQkD,aAAe,IAAIrP,KAAKmM,EAAQkD,cAAgB,KACzEC,EAAgBF,EAAeA,EAAaxO,UAAY,KACxD2O,EAAoBH,EAAeA,EAAatB,mBAAmB,QAAS9B,GAAe,KAE3FkE,EAAiB/D,EAAQgE,aAAe,IAAInQ,KAAKmM,EAAQgE,cAAgB,KACzES,EAAgBV,EAAeA,EAAatP,UAAY,KACxDwP,EAAoBF,EAAeA,EAAapC,mBAAmB,QAAS9B,GAAe,KAE3F6I,EAAc1I,EAAQ2I,UAAY,IAAI9U,KAAKmM,EAAQ2I,WAAa,KAChEC,EAAaF,EAAYA,EAAUjU,UAAY,KAC/CoU,EAAiBH,EAAYA,EAAU/G,mBAAmB,QAAS9B,GAAe,KAElFiJ,EAAkB9I,EAAQ+I,cAAgB,IAAIlV,KAAKmM,EAAQ+I,eAAiB,KAC5EC,EAAiBF,EAAgBA,EAAcrU,UAAY,KAC3DwU,EAAqBH,EAAgBA,EAAcnH,mBAAmB,QAAS9B,GAAe,KAE9FqJ,EAA0BlJ,EAAQmJ,wBAA0B,IAAItV,KAAKmM,EAAQmJ,yBAA2B,KACxGC,EAAyBF,EAAwBA,EAAsBzU,UAAY,KACnF4U,EAA6BH,EAAwBA,EAAsBvH,mBAAmB,QAAS9B,GAAe,KACtHyJ,EAAkCJ,EAAwBA,EAAsBvH,mBAAmB,QAASsF,GAAoB,KAEhIsC,EAA4BvJ,EAAQwJ,0BAA4B,IAAI3V,KAAKmM,EAAQwJ,2BAA6B,KAC9GC,GAA2BF,EAA0BA,EAAwB9U,UAAY,KACzFiV,GAA+BH,EAA0BA,EAAwB5H,mBAAmB,QAAS9B,GAAe,KAC5H8J,GAAoCJ,EAA0BA,EAAwB5H,mBAAmB,QAASsF,GAAoB,KAEtI2C,GAA2B5J,EAAQ6J,yBAA2B,IAAIhW,KAAKmM,EAAQ6J,0BAA4B,KAC3GC,GAA0BF,GAAyBA,GAAuBnV,UAAY,KACtFsV,GAA8BH,GAAyBA,GAAuBjI,mBAAmB,QAAS9B,GAAe,KACzHmK,GAAmCJ,GAAyBA,GAAuBjI,mBAAmB,QAASsF,GAAoB,KAEnIgD,GAAmBjK,EAAQkK,eAAiB,IAAIrW,KAAKmM,EAAQkK,gBAAkB,KAC/EC,GAAkBF,GAAiBA,GAAexV,UAAY,KAC9D2V,GAAsBH,GAAiBA,GAAetI,mBAAmB,QAAS9B,GAAe,KAEjGwK,GAA2BrK,EAAQsK,yBAA2B,IAAIzW,KAAKmM,EAAQuK,wBAA0B,KACzGC,GAA0BH,GAAyBA,GAAuB5V,UAAY,KACtFgW,GAA8BJ,GAAyBA,GAAuB1I,mBAAmB,QAAS9B,GAAe,KAEzH6K,GAA0B1K,EAAQ2K,wBAA0B,IAAI9W,KAAKmM,EAAQ4K,uBAAyB,KACtGC,GAAyBH,GAAwBA,GAAsBjW,UAAY,KACnFqW,GAA6BJ,GAAwBA,GAAsB/I,mBAAmB,QAAS9B,GAAe,KAEtHkL,GAA2B/K,EAAQgL,yBAA2B,IAAInX,KAAKmM,EAAQgL,0BAA4B,KAC3GC,GAA0BF,GAAyBA,GAAuBtW,UAAY,KACtFyW,GAA8BH,GAAyBA,GAAuBpJ,mBAAmB,QAAS9B,GAAe,KAEzHsL,GAAkCnL,EAAQoL,sCAC1CC,GAAoCrL,EAAQsL,wCAC5CC,GAAkCvL,EAAQgL,yBAA2B,IAAInX,KAAKmM,EAAQwL,mCAAqC,KAC3HC,GAAiCF,GAAgCA,GAA8B9W,UAAY,KAC3GiX,GAAqCH,GAAgCA,GAA8B5J,mBAAmB,QAAS9B,GAAe,KAE9I8L,GAAmB3L,EAAQ4L,oBAC3BC,GAAqB7L,EAAQ8L,qBAE7BC,GAAoC/L,EAAQgM,sCAC5CC,GAAqCjM,EAAQkM,uCAC7CC,GAAuCnM,EAAQoM,yCAC/CC,GAAuCrM,EAAQsM,sCAAwC,IAAIzY,KAAKmM,EAAQsM,uCAAyC,KACjJC,GAAsCF,GAAqCA,GAAmC5X,UAAY,KAC1H+X,GAA0CH,GAAqCA,GAAmC1K,mBAAmB,QAAS9B,GAAe,KAE7J4M,GAAWzM,EAAQ0M,SACnBC,GAAUpZ,KAAKqZ,cAAcH,IAE7BI,GAAU3M,EAAc4M,OAAOna,KAC/Boa,GAAgBF,GAAQ5M,WACxB+M,GAAaH,GAAQ3M,cACrB+M,GAAuB,UAAGF,GAAcG,iCAAjB,QAA8C,GACrEC,GAAmC,UAAGJ,GAAcK,8CAAjB,QAA2D,GAC9FC,GAAcN,GAAcO,MAE9BC,GAAmB,GACvB,GAAMP,IAAgBA,GAAWQ,cAAkBR,GAAWQ,aAAa7a,KAAM,QACzE8a,GAAsBT,GAAWQ,aAAa7a,KAAKsN,WACzDsN,GAAgB,WAAGE,GAAoBC,wBAAvB,UAA2C,GAE7DH,GAAiBjM,KAAK+L,IACtB,IAAMM,GAAkB,eAAI,IAAIC,IAAIL,KAE9B/R,GAAO,CACXyG,KAAMjC,EAAQiC,KACd7K,MAAOiR,EACP/O,KAAMkJ,EACNqL,UAAW3F,EACXvE,UAAWA,EACXU,OAAQrE,EAAQsE,QAChBC,YAAavE,EAAQwE,aACrBsJ,SAAU9N,EAAQ+N,UAClBC,UAAWhO,EAAQiO,WACnBC,YAAalO,EAAQmO,aACrB7K,aAActD,EAAQuD,cACtB9C,cAAeT,EAAQU,eACvB0N,sBAAuBpO,EAAQqO,yBAC/BC,qBAAsBtO,EAAQuO,wBAC9BC,sBAAuBxO,EAAQyO,yBAC/B5C,mBAAoBA,GACpBpK,UAAWA,EACXsB,UAAWA,EACXrB,cAAeA,EACf6G,mBAAoBA,EACpBvF,cAAeA,EACfwF,mBAAoBA,EACpBC,OAAQA,EACR3E,WAAYA,EACZqG,cAAeA,GACfC,kBAAmBA,GACnBjH,YAAaA,EACbC,gBAAiBA,EACjBqB,YAAaA,EACbR,gBAAiBA,EACjB2E,SAAUA,EACVC,aAAcA,EACdG,aAAcA,EACdC,iBAAkBA,EAClByF,4BAA6B1O,EAAQ2O,iCACrCC,+BAAgC5O,EAAQ6O,qCACxCC,wBAAyB9O,EAAQ+O,2BACjCtD,6BAA8BA,GAC9BuD,+BAAgCzD,GAChCG,iCAAkCA,GAClCP,gCAAiCA,GACjCE,kCAAmCA,GACnC4D,+BAAgCjP,EAAQkP,mCACxCC,kCAAmCnP,EAAQoP,uCAC3ChG,qBAAsBA,EACtBiG,uBAAwBnG,EACxBG,yBAA0BA,EAC1BC,8BAA+BA,EAC/BG,uBAAwBA,GACxB6F,yBAA0B/F,EAC1BG,2BAA4BA,GAC5BC,gCAAiCA,GACjCG,sBAAuBA,GACvByF,wBAAyB3F,GACzBG,0BAA2BA,GAC3BC,+BAAgCA,GAChC2B,iBAAkBA,GAClBgB,QAASA,GACTnC,sBAAuBA,GACvBC,0BAA2BA,GAC3BI,qBAAsBA,GACtBC,yBAA0BA,GAC1BG,sBAAuBA,GACvBC,0BAA2BA,GAC3Ba,kCAAmCA,GACnCE,mCAAoCA,GACpCE,qCAAsCA,GACtCI,kCAAmCA,GACnCC,sCAAuCA,GACvCpE,oBAAqBA,EACrBf,OAAQC,EACRE,aAAcA,EACdI,aAAcA,EACdI,mBAAoBA,EACpB2F,gBAAiBA,GACjBV,wBAAyBA,GACzBE,oCAAqCA,GACrCqC,YAAaxP,EAAQyP,aACrBC,iBAAkB1P,EAAQ2P,oBAE5B/d,EAAe0P,KAAK9F,IAEtB,OAAO5J,GAGTiW,mBA/hBkB,YA+hBc,IAAXlW,EAAW,EAAXA,QACfie,EAAW,GACf,IAAK,IAAI9P,KAAKnO,EAAS,CACrB,IAAM6J,EAAO7J,EAAQmO,GACfE,EAAUxE,EAAKyE,WACfwB,EAAY,IAAI5N,KAAKmM,EAAQwB,YAC7BqO,EAAcpO,EAAUhN,UACxBqb,EAAkBrc,OAAU6C,yBAAyB,CAAE3C,KAAM8N,IAC7DsO,EAAc/P,EAAQgQ,aACtBC,EAAmBjQ,EAAQkQ,mBAC3BvK,EAAO,CACX1D,KAAMjC,EAAQiC,KACdkO,KAAMnQ,EAAQ5I,MACdqK,UAAWA,EACXqO,gBAAiBA,EACjBM,GAAIP,EACJhU,KAAMkU,EACNM,YAAaJ,GAEfL,EAAStO,KAAKqE,GAEhB,OAAOiK,EAAS9J,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAEoK,GAAKrK,EAAEqK,OAG1CnI,yBAvjBkB,YAujBoB,IAAXtW,EAAW,EAAXA,QACrBie,EAAW,GACf,IAAK,IAAI9P,KAAKnO,EAAS,CACrB,IAAM6J,EAAO7J,EAAQmO,GACfE,EAAUxE,EAAKyE,WACfwB,EAAY,IAAI5N,KAAKmM,EAAQsQ,WAC7BT,EAAcpO,EAAUhN,UACxBqb,EAAkBrc,OAAU6C,yBAAyB,CAAE3C,KAAM8N,IAC7DkE,EAAO,CACX1D,KAAMjC,EAAQiC,KACdkO,KAAMnQ,EAAQuQ,KACd1U,KAAM,UACNwU,YAAa,KACb5O,UAAWA,EACXqO,gBAAiBA,EACjBM,GAAIP,GAEND,EAAStO,KAAKqE,GAEhB,OAAOiK,EAAS9J,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAEoK,GAAKrK,EAAEqK,OAG1C3I,mBA7kBkB,YA6kBc,IAAX9V,EAAW,EAAXA,QACf6e,EAAU,GACVC,EAAa,GACjB,IAAK,IAAI3Q,KAAKnO,EAAS,CACrB,IAAM6J,EAAO7J,EAAQmO,GACfE,EAAUxE,EAAKyE,WACfyQ,EAAc1Q,EAAQ2Q,cAC5B,IAAIF,EAAWG,SAASF,GAAxB,CAGAD,EAAWnP,KAAKoP,GAChB,IAAMG,EAAOtd,KAAKud,oBAAoB,CAAEJ,YAAaA,IAC/CK,EAAM,CACVjW,GAAI4V,EACJtZ,MAAOyZ,EAAKzZ,MACZmO,WAAYsL,EAAKtL,WACjByL,UAAWH,EAAKG,WAElBR,EAAQlP,KAAKyP,IAGf,OADAP,EAAQ1K,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAER,WAAaS,EAAET,cACjCiL,GAGTjJ,gBArmBkB,YAqmBW,IAAX5V,EAAW,EAAXA,QACZ2V,EAAY,GAChB,IAAK,IAAIxH,KAAKnO,EAAS,CACrB,IAAM6J,EAAO7J,EAAQmO,GACfE,EAAUxE,EAAKyE,WACfwB,EAAY,IAAI5N,KAAKmM,EAAQwB,YAC7BsO,EAAkBrc,OAAU6C,yBAAyB,CAAE3C,KAAM8N,IAC7DiP,EAAc1Q,EAAQ2Q,cACtBE,EAAOtd,KAAKud,oBAAoB,CAAEJ,YAAaA,IAC/CO,EAAQ,CACZhP,KAAMjC,EAAQiC,KACdhB,IAAKjB,EAAQiB,IACbiQ,cAAelR,EAAQmR,gBACvBC,cAAepR,EAAQqR,sBACvB5P,UAAWA,EACXqO,gBAAiBA,EACjBY,YAAaA,EACbY,iBAAkBT,EAAKzZ,MACvBma,sBAAuBV,EAAKtL,WAC5ByL,UAAWH,EAAKG,WAElB1J,EAAUhG,KAAK2P,GAEjB,OAAO1d,KAAKie,6BAA6B,CAAElW,MAAOgM,KAGpDkK,6BA/nBkB,YA+nBsB,IAATlW,EAAS,EAATA,MAC7B,OAAOA,EAAMwK,MAAK,SAACC,EAAGC,GACpB,IAAMyL,EAAQ1L,EAAEtE,UACViQ,EAAQ1L,EAAEvE,UACVkQ,EAAaF,EAAM3d,YAAc4d,EAAM5d,UACvC8d,EAAa7L,EAAEwL,sBAAwBvL,EAAEuL,sBAE/C,OAAIE,EAAM3d,YAAc4d,EAAM5d,UACrB6d,EAGAC,MAKbrL,gBA/oBkB,YA+oBgB,IAAhBpB,EAAgB,EAAhBA,aACZ/N,EAAQ,QACRmO,EAAa,EAmCjB,MAlCoB,eAAhBJ,GACF/N,EAAQ,aACRmO,EAAa,IACY,WAAhBJ,GACT/N,EAAQ,aACRmO,EAAa,IACY,QAAhBJ,GACT/N,EAAQ,iBACRmO,EAAa,IACY,QAAhBJ,GACT/N,EAAQ,UACRmO,EAAa,IACY,gBAAhBJ,GACT/N,EAAQ,mBACRmO,EAAa,IACY,mBAAhBJ,GACT/N,EAAQ,gBACRmO,EAAa,IACY,aAAhBJ,GACT/N,EAAQ,WACRmO,EAAa,IACY,gBAAhBJ,GACT/N,EAAQ,UACRmO,EAAa,IACY,aAAhBJ,GACT/N,EAAQ,MACRmO,EAAa,GACY,aAAhBJ,GACT/N,EAAQ,wBACRmO,EAAa,GACY,wBAAhBJ,IACT/N,EAAQ,WACRmO,EAAa,IAER,CAAEnO,MAAOA,EAAOmO,WAAYA,IAGrCuL,oBAvrBkB,YAurBmB,IAAfJ,EAAe,EAAfA,YACdmB,EAAanB,EAAcA,EAAYoB,KAAK,QAAU,GACxD1a,EAAQ7D,KAAKwe,YAAY,CAAEza,MAAOoZ,IAClCnL,EAAa,GACD,cAAZsM,GAGmB,oBAAZA,GAFTza,EAAQ,8BACRmO,EAAa,IAIQ,cAAZsM,GACTza,EAAQ,kBACRmO,EAAa,GACQ,aAAZsM,GACTza,EAAQ,2BACRmO,EAAa,GACQ,cAAZsM,GACTza,EAAQ,yBACRmO,EAAa,GACQ,cAAZsM,GACTza,EAAQ,YACRmO,EAAa,IACQ,eAAZsM,GACTza,EAAQ,aACRmO,EAAa,IACQ,qBAAZsM,GACTza,EAAQ,8BACRmO,EAAa,GACQ,oBAAZsM,GACTza,EAAQ,wBACRmO,EAAa,GACQ,qBAAZsM,GACTza,EAAQ,sBACRmO,EAAa,GACQ,mCAAZsM,GACTza,EAAQ,gCACRmO,EAAa,GACQ,mCAAZsM,GACTza,EAAQ,iCACRmO,EAAa,GACQ,kCAAZsM,GACTza,EAAQ,mCACRmO,EAAa,GACQ,mCAAZsM,GACTza,EAAQ,iCACRmO,EAAa,GACQ,iCAAZsM,IACTza,EAAQ,qCACRmO,EAAa,IAEf,IAAMyL,EAAYa,EAASjB,SAAS,QACpC,MAAO,CAAExZ,MAAOA,EAAOmO,WAAYA,EAAYyL,UAAWA,IAG5De,YA7uBkB,YA6uBK,IAATza,EAAS,EAATA,MACR0a,EAAM1a,EAAM2a,MAAM,KAClBC,EAAUF,EAAIG,KAAI,SAAA3W,GAAI,OAAIA,EAAK4W,OAAO,GAAGC,cAAgB7W,EAAKzL,MAAM,GAAGuiB,iBACvEC,EAAgBL,EAAQM,KAAK,KACjC,OAAOD,GAGTE,mBApvBkB,SAovBC9gB,GACjB,IAAMkO,EAAc,CAAE1J,KAAM,UAAWD,MAAO,QAASD,IAAK,WAEtDrE,EAAiB,GACnBkO,EAAI,EACR,IAAKA,KAAKnO,EAAS,OACXoO,EAAWpO,EAAQmO,GACnBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBqC,EAAUrC,EAAcqC,QAAQ5P,KAChC+f,EAAenQ,EAAUA,EAAQtC,WAAa,KAE9C0S,EAAuBD,EAAaA,EAAWhQ,aAAe,KAC9DkQ,EAAiBF,EAAaA,EAAWG,cAAgB,KAE3DrQ,EAAoBkQ,EAAaA,EAAWjQ,UAAY,KAI5D,GAHuB,MAAnBD,GAAqD,GAA1BA,EAAgB5R,SAC7C4R,EAAkBmQ,GAEG,MAAnBnQ,GAAqD,GAA1BA,EAAgB5R,OAAa,CAC1D,IAAM+R,EAAc+P,EAAaA,EAAW9P,WAAW7S,MAAM,EAAG,GAAK,KACrEyS,EAAkB,6BAAH,OAAgCG,EAAhC,KAGjB,IAAMpB,EAAevB,EAAQwB,WAAa,IAAI3N,KAAKmM,EAAQwB,YAAc,KACnEC,EAAcF,EAAaA,EAAW9M,UAAY,KAClDiN,EAAkBH,EAAaA,EAAWI,mBAAmB,QAAS9B,GAAe,KAErFgD,EAAe7C,EAAQ8C,WAAa,IAAIjP,KAAKmM,EAAQ8C,YAAc,KACnEC,EAAcF,EAAaA,EAAWpO,UAAY,KAClDuO,EAAkBH,EAAaA,EAAWlB,mBAAmB,QAAS9B,GAAe,KAErF+D,EAAY5D,EAAQ6D,QAAU,IAAIhQ,KAAKmM,EAAQ6D,SAAW,KAC1D4E,EAAW7E,EAAUA,EAAQnP,UAAY,KACzCqP,EAAeF,EAAUA,EAAQjC,mBAAmB,QAAS9B,GAAe,KAE5EoD,EAAiBjD,EAAQkD,aAAe,IAAIrP,KAAKmM,EAAQkD,cAAgB,KACzEC,EAAgBF,EAAeA,EAAaxO,UAAY,KACxD2O,EAAoBH,EAAeA,EAAatB,mBAAmB,QAAS9B,GAAe,KAE3FiT,EAAgB9S,EAAQ+S,YAAc,IAAIlf,KAAKmM,EAAQ+S,aAAe,KACtEC,EAAeF,EAAcA,EAAYre,UAAY,KACrDwe,EAAmBH,EAAcA,EAAYnR,mBAAmB,QAAS9B,GAAe,KAExF6I,EAAc1I,EAAQ2I,UAAY,IAAI9U,KAAKmM,EAAQ2I,WAAa,KAChEC,EAAaF,EAAYA,EAAUjU,UAAY,KAC/CoU,EAAiBH,EAAYA,EAAU/G,mBAAmB,QAAS9B,GAAe,KAElFiJ,EAAkB9I,EAAQ+I,cAAgB,IAAIlV,KAAKmM,EAAQ+I,eAAiB,KAC5EC,EAAiBF,EAAgBA,EAAcrU,UAAY,KAC3DwU,EAAqBH,EAAgBA,EAAcnH,mBAAmB,QAAS9B,GAAe,KAE9FoK,EAAmBjK,EAAQkK,eAAiB,IAAIrW,KAAKmM,EAAQkK,gBAAkB,KAC/EC,EAAkBF,EAAiBA,EAAexV,UAAY,KAC9D2V,EAAsBH,EAAiBA,EAAetI,mBAAmB,QAAS9B,GAAe,KAEjG4M,EAAWzM,EAAQ0M,SACnBC,EAAUpZ,KAAKqZ,cAAcH,GAE7ByG,EAAW,UAAGlT,EAAQmT,oBAAX,QAA2B,GACtCC,EAAgB,GAClBC,EAAuBH,EAAYtiB,OAASwiB,EAArB,UAAwCF,EAAYnjB,MAAM,EAAGqjB,GAA7D,OAAmFF,EAExG1X,EAAO,CACXyG,KAAMjC,EAAQiC,KACdqR,MAAOtT,EAAQsT,MACfC,SAAUvT,EAAQwT,UAClBN,YAAaA,EACbG,qBAAsBA,EACtB/Z,KAAMkJ,EACNmQ,mBAAoBA,EACpBC,aAAcA,EACdnR,UAAWA,EACXsB,UAAWA,EACXpP,KAAMqP,EACNsN,UAAWvN,EACXsB,OAAQrE,EAAQsE,QAChBwJ,SAAU9N,EAAQ+N,UAClBG,YAAalO,EAAQmO,aACrBsF,WAAYzT,EAAQ0T,YACpBpQ,aAActD,EAAQuD,cACtB9C,cAAeT,EAAQU,eACvBgB,cAAeA,EACfsB,cAAeA,EACfyF,OAAQA,EACR3E,WAAYA,EACZqG,cAAeA,EACfC,kBAAmBA,EACnBjH,YAAaA,EACbC,gBAAiBA,EACjB4P,WAAYA,EACZC,eAAgBA,EAChBrK,SAAUA,EACVC,aAAcA,EACdG,aAAcA,EACdC,iBAAkBA,EAClB0D,QAASA,GAEX/a,EAAe0P,KAAK9F,GAEtB,OAAO5J,GAGTgb,cA31BkB,SA21BJjb,GACZ,IAAKA,EACH,MAAO,GAET,IAJqB,EAIjBgiB,EAAY,GAJK,iBAKJhiB,GALI,IAKrB,IAAK,EAAL,qBAA0B,KAAjB6J,EAAiB,QACxB,GAAKA,EAAL,CAGA,IAAMiG,EAAY,IAAI5N,KAAK2H,EAAK8U,WAC1BF,EAAK3O,EAAUhN,UACfqb,EAAkBrc,OAAU6C,yBAAyB,CAAE3C,KAAM8N,IACnEkS,EAAUrS,KAAK,CACbW,KAAMzG,EAAKyG,KACXmO,GAAIA,EACJ3O,UAAWA,EACX0O,KAAM3U,EAAK+U,KACX1U,KAAM,OACNwU,YAAa,KACbP,gBAAiBA,MAnBA,8BAuBrB,OAAO6D,EAAU7N,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAEoK,GAAKrK,EAAEqK,OAI3CwD,uBAt3BkB,SAs3BKjiB,GACrB,IAAMkO,EAAc,CAAE1J,KAAM,UAAWD,MAAO,QAASD,IAAK,WAEtDrE,EAAiB,GACnBkO,EAAI,EACR,IAAKA,KAAKnO,EAAS,CACjB,IAAMoO,EAAWpO,EAAQmO,GACnBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBqC,EAAUrC,EAAcqC,QAAQ5P,KAElCggB,EAAqB3S,EAAQ6T,qBAC7BrR,EAAkBxC,EAAQ8T,kBAC1BC,EAAmB/T,EAAQgU,mBAE/B,GAAe,MAAXzR,GAAyC,MAAtBA,EAAQtC,WAAoB,CACjD,IAAIyS,EAAanQ,EAAQtC,WACzB0S,EAAqBD,EAAWhQ,aAChCF,EAAkBkQ,EAAWjQ,UAC7BsR,EAAmBrB,EAAW9P,WAGhC,IAAIqR,EAAW,GACQ,MAAnBzR,GAA2BA,EAAgB5R,OAAS,EACtDqjB,EAAS3S,KAAKkB,GACiB,MAAtBmQ,GAA8BA,EAAmB/hB,OAAS,EACnEqjB,EAAS3S,KAAKqR,GACe,MAApBoB,GAA4BA,EAAiBnjB,OAAS,GAC/DqjB,EAAS3S,KAAKyS,GAGhB,IAAMxS,EAAevB,EAAQwB,WAAa,IAAI3N,KAAKmM,EAAQwB,YAAc,KACnEC,EAAcF,EAAaA,EAAW9M,UAAY,KAClDiN,EAAkBH,EAAaA,EAAWI,mBAAmB,QAAS9B,GAAe,KAErF8L,EAAmB3L,EAAQ4L,oBAC3BsI,EAAqBlU,EAAQmU,sBAE/B7a,EAAO2a,EAASzB,KAAK,OAEnBhX,EAAO,CACXyG,KAAMjC,EAAQiC,KACd3I,KAAMA,EACNmI,UAAWA,EACX9N,KAAM+N,EACN4B,aAActD,EAAQuD,cACtB9C,cAAeT,EAAQU,eACvBiL,iBAAkBA,EAClBuI,mBAAoBA,GAEtBtiB,EAAe0P,KAAK9F,GAEtB,OAAO5J,GAGTwiB,sBA76BkB,SA66BIziB,GACpB,IAAMkO,EAAc,CAAE1J,KAAM,UAAWD,MAAO,QAASD,IAAK,WAEtDrE,EAAiB,GACnBkO,EAAI,EACR,IAAKA,KAAKnO,EAAS,CACjB,IAAMoO,EAAWpO,EAAQmO,GACnBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBqC,EAAUrC,EAAcqC,QAAQ5P,KAElC0hB,EAAcrU,EAAQnE,KACtByY,EAAkB,IACH,6BAAfD,EACFC,EAAkB,iBACTD,EAAc,kBACvBC,EAAkB,kBACTD,EAAc,uBACvBC,EAAkB,uBACTD,EAAc,oBACvBC,EAAkB,oCACTD,EAAc,oBACvBC,EAAkB,iCACTD,EAAc,iCACvBC,EAAkB,6CAGpB,IAAI9R,EAAkB,KAClBuR,EAAmB,KAEvB,GAAe,MAAXxR,GAAyC,MAAtBA,EAAQtC,WAAoB,CACjD,IAAIyS,EAAanQ,EAAQtC,WACzBuC,EAAkBkQ,EAAWjQ,UAC7BsR,EAAmBrB,EAAW9P,WAGhC,IAAIqR,EAAW,GACQ,MAAnBzR,GAA2BA,EAAgB5R,OAAS,EACtDqjB,EAAS3S,KAAKkB,GACe,MAApBuR,GAA4BA,EAAiBnjB,OAAS,GAC/DqjB,EAAS3S,KAAKyS,GAGhB,IAAMxS,EAAevB,EAAQwB,WAAa,IAAI3N,KAAKmM,EAAQwB,YAAc,KACnEC,EAAcF,EAAaA,EAAW9M,UAAY,KAClDiN,EAAkBH,EAAaA,EAAWI,mBAAmB,QAAS9B,GAAe,KAEvFvG,EAAO2a,EAASzB,KAAK,OAEnBhX,EAAO,CACXyG,KAAMjC,EAAQiC,KACd3I,KAAMA,EACN+a,YAAaA,EACbC,gBAAiBA,EACjB7S,UAAWA,EACX9N,KAAM+N,EACN4B,aAActD,EAAQuD,cACtBgR,YAAavU,EAAQwU,aACrBC,aAAczU,EAAQ0U,cACtBC,WAAY3U,EAAQ4U,YACpBC,YAAa7U,EAAQ8U,aACrBC,eAAgB/U,EAAQgV,gBACxBC,aAAcjV,EAAQkV,eAExBtjB,EAAe0P,KAAK9F,GAEtB,OAAO5J,GAGHujB,iBAl/BY,YAk/BgB,sKAAT7Z,EAAS,EAATA,MACjB8Z,EAAU,QACZC,EAAc,GAFc,2BAGhB/Z,GAHgB,qDAGrBwE,EAHqB,WAIxBtE,EAAOF,EAAMwE,GAJW,SAKR,EAAKwV,aAAa,CAAEC,QAAS/Z,IALrB,OAKxB+Z,EALwB,OAM9BF,EAAY/T,KAAKiU,GANa,8BAS1BC,EAAoBH,EAAYvP,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEzM,KAAKgZ,cAAcmD,cAAczP,EAAE1M,KAAKgZ,cAAe8C,MAT9E,kBAUzBI,GAVyB,+CAa5BE,uBA//BY,YA+/BsB,qKAATpa,EAAS,EAATA,MACvB8Z,EAAU,QACZO,EAAoB,GAFc,2BAGtBra,GAHsB,iDAG3BwE,EAH2B,WAI9BtE,EAAOF,EAAMwE,GACbE,EAAUxE,EAAKyE,WACf3I,EAAQ0I,EAAQ1I,MACjBA,EAP+B,uDAU9BuW,EAAY7N,EAAQmI,WACpB7O,EAX8B,UAWpBuU,EAXoB,YAWP7N,EAAQ4V,WAC/BC,EAAShI,EAAD,UAAwBvW,EAAxB,aAAkCuW,EAAlC,KAAavW,EACrBqO,EAAO,CACXrO,MAAOA,EACP2K,KAAMjC,EAAQiC,KACd3I,KAAMA,EACNuc,MAAOA,GAETF,EAAkBrU,KAAKqE,GAnBa,8BAqBhCmQ,EAA0BH,EAAkB7P,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEzO,MAAMgb,cAAcmD,cAAczP,EAAE1O,MAAMgb,cAAe8C,MArBtF,kBAsB/BU,GAtB+B,+CAyBlCC,iCAxhCY,SAwhCqBlF,GAAM,yKACtCA,EADsC,yCAElC,MAFkC,cAKrCmF,EALqC,UAKnBnF,EAAKoF,oBALc,QAKE,GALF,SAMjB,EAAKd,iBAAiB,CAAE7Z,MAAO0a,IANd,cAMrCX,EANqC,OAQrCa,EARqC,UAQbrF,EAAKsF,4BARQ,QAQgB,GARhB,SASX,EAAKT,uBAAuB,CAAEpa,MAAO4a,IAT1B,cASrCP,EATqC,OAWrCS,EAA4BvF,EAAKwF,6BAXI,kBAapC,CACLhB,YAAaA,EACbM,kBAAmBA,EACnBS,0BAA2BA,IAhBc,+CAoB7CE,SA5iCkB,SA4iCThf,GACP,MAAuB,iBAATA,GAGVif,iCAhjCY,SAgjCqBC,GAAW,gKAC1Clb,EAAQ,GACVwE,EAAI,EAFwC,2BAGtC0W,GAHsC,qDAG3C1W,EAH2C,WAIxCC,EAAWyW,EAAU1W,GAJmB,SAK3B,EAAK2W,6BAA6B1W,GALP,OAKxCvE,EALwC,OAM9CF,EAAMgG,KAAK9F,GANmC,gDAQzCF,GARyC,+CAW5Cmb,6BA3jCY,SA2jCiB1W,GAAU,kWACrC1C,EAAU,CAAElH,KAAM,UAAWD,MAAO,OAAQD,IAAK,WAEjD+J,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cAEzB+B,EAAOjC,EAAQiC,KACf0B,EAAY3D,EAAQ4C,WACpBiL,EAAY7N,EAAQ0W,mBACpBC,EAAW3W,EAAQ4W,kBACnBC,EAAY7W,EAAQ8W,kBACpBC,EAAc/W,EAAQ6T,qBACtBvG,EAAQtN,EAAQgX,cAEhBvK,EAAWzM,EAAQ0M,SACnBC,EAAU,EAAKsK,UAAU,CAAEC,SAAUzK,EAAU5Q,KAAM,SAErDsb,EAAenX,EAAQoX,cACvBC,EAAc,EAAKJ,UAAU,CAAEC,SAAUC,EAActb,KAAM,cAE7Dyb,EAAoBtX,EAAQuX,mBAC5BC,EAAmB,EAAKC,uBAAuB,CAAEP,SAAUI,IAE3DI,EAAqB1X,EAAQ2X,oBAC7BC,EAAoB,EAAKX,UAAU,CACvCC,SAAUQ,EACV7b,KAAM,aACNgc,mBAAmB,IAGjBpW,EAAY,KACVzB,EAAQwB,aACZC,EAAY,IAAI5N,KAAKmM,EAAQwB,aAE3BwH,EAAe,KACbhJ,EAAQ+I,gBACZC,EAAe,IAAInV,KAAKmM,EAAQ+I,gBAE9BN,EAAS,KACPzI,EAAQ6D,UACZ4E,EAAS,IAAI5U,KAAKmM,EAAQ6D,UAExB+E,EAAW,KACT5I,EAAQ2I,YACZC,EAAW,IAAI/U,KAAKmM,EAAQ2I,YAE1BmP,EAAW,KACT9X,EAAQ+X,YACZD,EAAW,IAAIjkB,KAAKmM,EAAQ+X,YAE1BtT,EAAc,KACZzE,EAAQgE,eACZS,EAAc,IAAI5Q,KAAKmM,EAAQgE,eAE7Bb,EAAc,KACZnD,EAAQkD,eACZC,EAAc,IAAItP,KAAKmM,EAAQkD,eAE7B8U,EAAW,KACThY,EAAQiY,YACZD,EAAW,IAAInkB,KAAKmM,EAAQiY,YAE1BC,EAAY,KACVlY,EAAQmY,uBACZD,EAAY,IAAIrkB,KAAKmM,EAAQmY,uBAE3BC,EAAc,KACZpY,EAAQqY,yBACZD,EAAc,IAAIvkB,KAAKmM,EAAQqY,yBAE7BC,EAtEuC,UAsE3BF,SAtE2B,QAsEZF,EAC3BK,EAAe,KACbvY,EAAQwY,kCACZD,EAAe,IAAI1kB,KAAKmM,EAAQwY,kCAG5BC,EAAoBzY,EAAQ0Y,gBAC5BC,EAAalX,EAAUE,mBAAmB,QAAStE,GACnDub,EA9EqC,UA8EpB/K,EA9EoB,YA8EP8I,GAE9BkC,EAAa3Y,EAAc4Y,UAAUnmB,KAhFA,UAiFhB,EAAKomB,yBAAyB,CAAEC,KAAMH,IAjFtB,eAiFrCI,EAjFqC,OAmFrCC,EAAchZ,EAAciZ,gBAAgBxmB,KAnFP,UAoFJ,EAAKymB,6BAA6B,CAAEzmB,KAAMumB,IApFtC,eAoFrCG,EApFqC,OAsFrCxM,EAAU3M,EAAc4M,OAAOna,KAC/Boa,EAAgBF,EAAQ5M,WACxBqZ,EAAcvM,EAAc3V,MAC5BmiB,EAzFqC,UAyFbxM,EAAcyM,+BAzFD,QAyF4B,GACjEC,EA1FqC,UA0Fd1M,EAAc2M,8BA1FA,QA0F0B,GAC/DC,EA3FqC,UA2FZ5M,EAAc6M,gCA3FF,QA2F8B,GAEnEC,EAAW3Z,EAAcqV,QAAQ5iB,KACnCmnB,GAAc,KACdC,GAAc,GACZF,IACEG,GAAiBH,EAAS5Z,WAChC6Z,GAAcE,GAAe/X,KAC7B8X,GAAc,GAAH,OAAMC,GAAe7R,WAArB,YAAmC6R,GAAepE,YAE3DqE,GAAiB,GACjBja,EAAQka,yBACVD,IAAkBja,EAAQka,wBAExBla,EAAQma,wBACVF,IAAkB,IAAJ,OAAQja,EAAQma,wBAG1BC,GAAe3mB,OAAU4C,qBAAqB,CAAE1C,KAAM8U,IACtD4R,GAAiB5mB,OAAU4C,qBAAqB,CAAE1C,KAAMiV,IACxD0R,GAAqB7mB,OAAU4C,qBAAqB,CAAE1C,KAAMqV,IAC5DuR,GAAoB9mB,OAAU4C,qBAAqB,CAAE1C,KAAM8Q,IAC3D+V,GAAoB/mB,OAAU4C,qBAAqB,CAAE1C,KAAMwP,IAC3DsX,GAAiBhnB,OAAU4C,qBAAqB,CAAE1C,KAAMmkB,IACxD4C,GAAiBjnB,OAAU4C,qBAAqB,CAAE1C,KAAMqkB,IACxD2C,GAAkBlnB,OAAU4C,qBAAqB,CAAE1C,KAAMukB,IACzD0C,GAAoBnnB,OAAU4C,qBAAqB,CAAE1C,KAAMykB,IAC3DyC,GAAkBpnB,OAAU4C,qBAAqB,CAAE1C,KAAM2kB,IACzDwC,GAAqBrnB,OAAU4C,qBAAqB,CAAE1C,KAAM4kB,IAC5DwC,GAAiBtnB,OAAUC,QAAQwkB,GACnC8C,GAAmBvnB,OAAUC,QAAQ0kB,GACrC6C,GAAoBxnB,OAAUQ,cAAcikB,GAC5CgD,GAAsBznB,OAAUQ,cAAcmkB,GAC9C+C,GAAiBJ,IAAkBC,GACnCI,GAAoBH,IAAqBC,GACzCG,GAAU,EAAKA,QAAQ5Z,GAEvB6Z,GAAWpb,EAAcqb,iBAA0Brb,EAAcqb,iBAAiB5oB,KAAtC,KAC5C6oB,GAAoB,MAAXF,GAAkB,KAAO,EAAKG,sBAAsB,CAAEjgB,KAAM8f,KAErE5T,GAAoBxH,EAAcyH,WAAkBzH,EAAcyH,WAAWhV,KAA9B,GAC/CiV,GAAe,EAAKC,mBAAmB,CAAElW,QAAS+V,KAEpDgU,GAAa,GACjB,OAAI9T,SAAJ,IAAIA,OAAchX,QAAQ8qB,GAAWpa,KAAX,MAAAoa,GAAU,eAAS9T,KAC7C,OAAI+E,QAAJ,IAAIA,KAAS/b,QAAQ8qB,GAAWpa,KAAX,MAAAoa,GAAU,eAAS/O,IAElCgP,GAAmBD,GAAW5V,MAAK,SAACC,EAAGC,GAAJ,eAAU,UAACA,EAAEoK,UAAH,QAAS,IAAT,UAAerK,EAAEqK,UAAjB,QAAuB,MAEpEwL,GAAa,UAAGhD,EAAH,YAAkBmB,GAAlB,YAAiCE,GAAjC,YAAmDpD,GAAYvE,cAE5EuJ,GAAoB7b,EAAQ8b,qBAC5BC,GAAuB/b,EAAQgc,wBAC/BC,GAAgBJ,IAAqBE,GAErCvgB,GAAO,CACX7H,KAAMglB,EACNlX,UAAWA,EACXQ,KAAMA,EACN0B,UAAWA,EACXrK,KAAMsf,EACNgD,WAAYA,GACZ/N,UAAWA,EACX8I,SAAUA,EACVE,UAAWA,EACXvJ,MAAOA,EACPyJ,YAAaA,EACb1S,OAAQrE,EAAQsE,QAChBmE,OAAQ2R,GACR8B,WAAYlc,EAAQmc,YACpBrO,SAAU9N,EAAQ+N,UAClBnF,SAAUyR,GACV+B,YAAapc,EAAQqc,aACrBC,SAAUtc,EAAQuc,UAClBzE,SAAU2C,GACVlW,YAAavE,EAAQwE,aACrBC,YAAa8V,GACbrM,YAAalO,EAAQmO,aACrBhL,YAAaqX,GACbgC,SAAUxc,EAAQyc,UAClBzE,SAAU0C,GACVpX,aAActD,EAAQuD,cACtB0Y,cAAeA,GACfJ,kBAAmBA,GACnBE,qBAAsBA,GACtB/S,aAAcsR,GACda,eAAgBA,GAChBC,kBAAmBA,GACnB9C,UAAWuC,GACXE,eAAgBA,GAChB7C,UAAWyC,GACXK,iBAAkBA,GAClB5C,YAAawC,GACbnC,kBAAmBA,EACnBQ,aAAcA,EACdI,yBAA0BA,EAC1BqD,QAASza,EACT0a,UAAW1a,EACX2a,SAAU3a,EACV2E,YAAa5G,EAAQ6G,aACrBgW,mBAAoB7c,EAAQ8c,qBAC5BC,qBAAsB/c,EAAQgd,uBAC9BvhB,OAAQuE,EAAQid,gBAChB5B,QAASA,GACT1O,QAASA,EACT0K,YAAaA,EACbzP,aAAcA,GACd8T,WAAYC,GACZpC,sBAAuBA,EACvBE,qBAAsBA,EACtBE,uBAAwBA,EACxBG,YAAaA,GACbC,YAAaA,GACbT,YAAaA,EACb4D,mBAAoBld,EAAQ+G,qBAC5ByU,OAAQA,GACRhE,iBAAkBA,EAClBI,kBAAmBA,EACnBW,aAAcuC,GACdqC,kBAAmBnd,EAAQod,qCAC3BC,6BAA8Brd,EAAQsd,0CAnNG,kBAqNpC9hB,IArNoC,+CAwNvC+hB,uBAnxCY,SAmxCW/G,GAAW,sLAChClb,EAAQ,GACVwE,EAAI,EAF8B,2BAG5B0W,GAH4B,qDAGjC1W,EAHiC,WAI9BC,EAAWyW,EAAU1W,GACrBE,EAAUD,EAASE,WACnBC,EAAgBH,EAASG,cACzBsd,EAAetd,EAAcud,UAAYvd,EAAcud,UAAU9qB,KAAO,KACxE+qB,EAAcxd,EAAcyd,SAAWzd,EAAcyd,SAAShrB,KAAO,KACrEknB,EAAa3Z,EAAcqV,QAAUrV,EAAcqV,QAAQ5iB,KAAO,KAElEsP,EAAOjC,EAAQiC,KACjBR,EAAY,KACVzB,EAAQwB,aACZC,EAAY,IAAI5N,KAAKmM,EAAQwB,aAdK,UAiBZ,EAAKoc,qBAAqB,CAAEC,OAAQL,IAjBxB,eAiB9BC,EAjB8B,iBAkBP,EAAKK,8BAA8B,CAAED,OAAQL,IAlBtC,eAkB9BO,EAlB8B,iBAmBb,EAAKC,qBAAqB,CAAEC,IAAKP,IAnBpB,eAmB9BC,EAnB8B,iBAoBd,EAAKrI,aAAa,CAAEC,QAASsE,IApBf,QAoB9BtE,EApB8B,OAsB9B/Z,EAAO,CACXiG,UAAWA,EACXQ,KAAMA,EACN7K,MAAO4I,EAAQsI,SACfqV,SAAUA,EACVF,UAAWA,EACXS,MAAOH,EACPxI,QAASA,EACT4I,MAAOne,EAAQme,MACftiB,KAAMmE,EAAQnE,KACdqS,YAAalO,EAAQmO,aACrBqO,SAAUxc,EAAQyc,UAClB2B,OAAQpe,EAAQqe,SAElB/iB,EAAMgG,KAAK9F,GApCyB,gDAsC/BF,GAtC+B,+CAyCxC+f,QA5zCkB,SA4zCV1nB,GACN,IAAKA,EACH,OAAO,KAET,IAAMiO,EAAM,IAAI/N,KACVyqB,EAAO,IAAIzqB,KAAKF,GAEtBiO,EAAIlN,SAAS,EAAG,EAAG,EAAG,GACtB4pB,EAAK5pB,SAAS,EAAG,EAAG,EAAG,GACvB,IAAM6pB,EAAiBtuB,KAAK4F,IAAI+L,EAAInN,UAAY6pB,EAAK7pB,WAC/C+pB,EAAiBvuB,KAAK2F,MAAM2oB,EAAiB,OACnD,OAAOC,GAGHpF,6BA10CY,YA00C4B,0NAe5C,IAAStZ,KAf0BxE,EAAS,EAATA,MAa7B+B,EAAU,CAAElH,KAAM,UAAWD,MAAO,OAAQD,IAAK,WACnDwoB,EAAc,GACJnjB,EACNE,EAAOF,EAAMwE,GACbE,EAAUxE,EAAKyE,WACfC,EAAgB1E,EAAK0E,cACrBud,EAAYvd,EAAcud,UAAU9qB,KACpCgrB,EAAWzd,EAAcyd,SAAShrB,KAClCsP,EAAOjC,EAAQiC,KACfyc,EAAazc,EAAKlS,MAAM,EAAG,GAC3B0R,EAAY,IAAI5N,KAAKmM,EAAQwB,YAC7BmX,EAAalX,EAAUE,mBAAmB,QAAStE,GACnDshB,EAAW3e,EAAQnE,KACnB+iB,EAXa,iBAWEjB,QAXF,IAWEA,OAXF,EAWEA,EAAU1d,WAAWgC,YAXvB,QAW+B,GAE9Ckc,EAAQne,EAAQme,MACf,EAAK7H,SAAS6H,KACjBA,EAAQ,GAENU,EAAiB7e,EAAQ8e,gBACxB,EAAKxI,SAASuI,KACjBA,EAAiB,GAEfE,EAAkB/e,EAAQgf,iBACzB,EAAK1I,SAASyI,KACjBA,EAAkB,GAEhBE,EAAqBjf,EAAQkf,qBAC5B,EAAK5I,SAAS2I,KACjBA,EAAqB,GAGnBE,EAAe,KACfC,EAAc,KACdC,EAAyB,KACX,OAAd5B,IACI6B,EAAmB7B,EAAUxd,WACnCkf,EAAeG,EAAiBC,cAGhCH,EAAcE,EAAiBhX,SAC/B+W,EAAyBC,EAAiBE,sBAExCC,EAzCe,UAyCLhB,EAAYG,UAzCP,QAyCwB,GAC3Ca,EAAQb,aAAeA,EACvBa,EAAQla,WAAa,EACjBma,OA5Ce,EA6Cff,IAAahf,EACf+f,EAAW,UAAGD,EAAQE,eAAX,QAAsB,GACxBhB,IAAa/e,IACtB8f,EAAW,UAAGD,EAAQG,iBAAX,QAAwB,IAErCF,EAAYpe,KAAK,CACfW,KAAMA,EACNyc,WAAYA,EACZ/qB,KAAMglB,EACNlX,UAAWA,EACXkd,SAAUA,EACVkB,WAAW,EACXzoB,MAAO4I,EAAQ5I,MACf+mB,MAAOA,EACPU,eAAgBA,EAChBE,gBAAiBA,EACjBE,mBAAoBA,EACpB1Z,WAAYvF,EAAQuF,WACpB4Z,aAAcA,EACdC,YAAaA,EACbC,uBAAwBA,IAEtBV,IAAahf,GACf8f,EAAQE,QAAUD,EACdI,EAFoC,UAE3BL,EAAQM,yBAFmB,QAEE,EAC1CN,EAAQM,kBAAoBD,EAAS3B,GAC5BQ,IAAa/e,IACtB6f,EAAQG,UAAYF,EAChBI,EAF6C,UAEpCL,EAAQO,2BAF4B,QAEL,EAC5CP,EAAQO,oBAAsBF,EAAS3B,QAEjBrtB,IAApB2uB,EAAQE,UACVF,EAAQE,QAAU,SAEM7uB,IAAtB2uB,EAAQG,YACVH,EAAQG,UAAY,SAEY9uB,IAA9B2uB,EAAQM,oBACVN,EAAQM,kBAAoB,QAEMjvB,IAAhC2uB,EAAQO,sBACVP,EAAQO,oBAAsB,GAEhCvB,EAAYG,GAAgBa,EAvGc,yBAyGrChB,GAzGqC,8CA4GxC1F,yBAt7CY,YAs7CuB,kKAARC,EAAQ,EAARA,KAC3BH,EAAa,GADsB,2BAEzBG,GAFyB,qDAE9BlZ,EAF8B,WAG/Bme,EAAMjF,EAAKlZ,GAHoB,SAId,EAAKke,qBAAqB,CAAEC,IAAKA,IAJnB,OAI/Ble,EAJ+B,OAKrC8Y,EAAWvX,KAAKvB,GALqB,gDAOhC8Y,GAPgC,+CAUnCmF,qBAh8CY,YAg8CkB,6KAAPC,EAAO,EAAPA,IACrB5gB,EAAU,CAAElH,KAAM,UAAWD,MAAO,OAAQD,IAAK,WACjD+J,EAAUie,EAAIhe,WACdgC,EAAOjC,EAAQiC,KACfyc,EAAazc,EAAKlS,MAAM,EAAG,GAC3BkwB,EAAW,IAAIpsB,KAAKmM,EAAQkgB,WAC5BvH,EAAasH,EAASte,mBAAmB,QAAStE,GAClDyQ,EAAW9N,EAAQmgB,eACnBhb,EAAenF,EAAQqG,cACvBpF,EAAMjB,EAAQiB,IACdmf,EAV4B,eAUbC,QACjBxC,EAASuC,EAAS,GAXY,2BAYpBA,GAZoB,kDAYzBtgB,EAZyB,WAa1BwgB,EAAUF,EAAStgB,GACrBwgB,EAAQhpB,QAAU6N,EAdU,wBAe9B0Y,EAASyC,EAfqB,4DAmB9BC,EAAuBC,OAAKC,EAAE5C,EAAOzmB,OACrC2I,EAAW,CACbkC,KAAMA,EACNyc,WAAYA,EACZzd,IAAKA,EACLtN,KAAMglB,EACNsH,SAAUA,EACV5b,QAAQ,EACR6X,YAAY,EACZpO,SAAUA,EACV3I,aAAcA,EACdob,qBAAsBA,GA9BU,kBAgC3BxgB,GAhC2B,+CAmCpC0b,sBAn+CkB,YAm+Cc,QAARjgB,EAAQ,EAARA,KAChBwE,EAAUxE,EAAKyE,WACfI,EAAS,UAAGL,EAAQM,kBAAX,SACTogB,EAAkB,UAAG1gB,EAAQ2gB,6BAAX,QAAoCtgB,EACtDugB,EAAiB5gB,EAAQ6gB,kBACzBC,EAAgB9gB,EAAQ+gB,gBACxBC,EAAahhB,EAAQihB,YACvBC,EAAmB,KACjBlhB,EAAQmhB,qBACZD,EAAmB,IAAIrtB,KAAKmM,EAAQmhB,qBAEtC,IAAIC,EAAkB,KAChBphB,EAAQqhB,oBACZD,EAAkB,IAAIvtB,KAAKmM,EAAQqhB,oBAErC,IAAIC,EAAkB,KAChBthB,EAAQuhB,oBACZD,EAAkB,IAAIztB,KAAKmM,EAAQuhB,oBAGrC,IAAMC,EAAyB/tB,OAAU4C,qBAAqB,CAAE1C,KAAMutB,IAChEO,EAAwBhuB,OAAU4C,qBAAqB,CAAE1C,KAAMytB,IAC/DM,EAAwBjuB,OAAU4C,qBAAqB,CAAE1C,KAAM2tB,IAEjEvhB,EAAW,CACbkC,KAAMjC,EAAQiC,KACd7K,MAAO4I,EAAQ5I,MACfiZ,YAAarQ,EAAQqQ,YACrBhQ,UAAWA,EACXqgB,mBAAoBA,EACpBE,eAAgBA,EAChBI,WAAYA,EACZF,cAAeA,EACfI,iBAAkBM,EAClBJ,gBAAiBK,EACjBH,gBAAiBI,GAGnB,OAAO3hB,GAGH6d,qBA5gDY,YA4gDqB,qKAAVC,EAAU,EAAVA,OACtBA,EADgC,yCAE5B,MAF4B,cAI/B7d,EAAU6d,EAAO5d,WAJc,SAKnB,EAAK6d,8BAA8B,CAAED,WALlB,cAKjCK,EALiC,OAMjCne,EAAW,CACbkC,KAAMjC,EAAQiC,KACd7K,MAAO4I,EAAQsI,SACf/C,WAAU,UAAEvF,EAAQuF,kBAAV,QAAwB,EAClC2Y,MAAOA,GAV4B,kBAY9Bne,GAZ8B,8CAejCuV,aA3hDY,YA2hDc,0JAAXC,EAAW,EAAXA,QACdA,EADyB,yCAErB,MAFqB,cAIxBvV,EAAUuV,EAAQtV,WAClB4N,EAAY7N,EAAQmI,WACpBwO,EAAW3W,EAAQ4V,UACrB7V,EAAW,CACbkC,KAAMjC,EAAQiC,KACd3I,KAAM,GAAF,OAAKuU,EAAL,YAAkB8I,GACtB9I,UAAWA,EACX8I,SAAUA,EACVvf,MAAO4I,EAAQ5I,MACfkW,MAAOtN,EAAQsN,OAba,kBAevBvN,GAfuB,8CAkB1B+d,8BA7iDY,YA6iD8B,mKAAVD,EAAU,EAAVA,OAC/BA,EADyC,yCAErC,MAFqC,cAIxC3d,EAAgB2d,EAAO3d,cACvByhB,EAAczhB,EAAcge,MAAQhe,EAAcge,MAAMvrB,KAAO,KALvB,SAM1B,EAAKivB,oBAAoB,CAAE1D,MAAOyD,IANR,cAMxCzD,EANwC,yBAOvCA,GAPuC,8CAU1C0D,oBAvjDY,YAujDmB,wJAAT1D,EAAS,EAATA,MACrBA,EAD8B,yCAE1B,MAF0B,cAI7Ble,EAAUke,EAAMje,WAClBF,EAAW,CACbkC,KAAMjC,EAAQiC,KACd7K,MAAO4I,EAAQsI,SACf/C,WAAU,UAAEvF,EAAQuF,kBAAV,QAAwB,GARD,kBAU5BxF,GAV4B,8CAa/B8hB,wBApkDY,YAokDuB,mKAATvmB,EAAS,EAATA,MACzBA,EADkC,yCAE9B,MAF8B,OAKvC,IAASwE,KADLgiB,EAAY,GACFxmB,EACNE,EAAOF,EAAMwE,GACnBgiB,EAAUxgB,KAAK,EAAKsgB,oBAAoB,CAAE1D,MAAO1iB,KAPZ,yBAShCsmB,GATgC,8CAYnCC,uBAhlDY,YAolDf,wLAHDzmB,EAGC,EAHDA,MAGC,IAFD7C,WAEC,MAFK,YAEL,MADDqM,qBACC,MADe,yBACf,EACGG,EAAY,GADf,2BAEa3J,GAFb,qDAEQwE,EAFR,WAGOtE,EAAOF,EAAMwE,GACbkiB,EAAWxmB,EAAK/C,GAChByM,EAAgB8c,EAAwBA,EAAS/f,KAAtB,WAC3BmD,EAAiB4c,EAA2BA,EAAS5qB,MAAzB0N,EAC5BQ,EAAsB0c,GAAD,UAAiBA,EAASzc,kBAA1B,QAAY,EAPxC,UASmB,EAAK0c,yBAAyB,CAC9CzmB,KAAMA,EACNyJ,UAAWA,EACXC,aAAcA,EACdE,cAAeA,EACfE,mBAAoBA,IAdvB,QASCL,EATD,8BAkBD,IAAShD,KADLigB,EAAS,GACIjd,EACfid,EAAO5gB,KAAK2D,EAAUhD,IAnBvB,OAqBKmT,EAAU,QArBf,kBAsBM8M,EAAOpc,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE3O,MAAMkb,cAAcmD,cAAczP,EAAE5O,MAAMkb,cAAe8C,OAtBvF,+CAyBG+M,YA7mDY,YA6mDW,8KAAT7mB,EAAS,EAATA,MACd2J,EAAY,GADW,2BAEb3J,GAFa,iDAElBwE,EAFkB,WAGnBtE,EAAOF,EAAMwE,GACb2B,EAAYjG,EAAKiG,UAClBA,EALoB,4DAQnByD,EAAezR,OAAUqC,qBAAqB,CAAEnC,KAAM8N,IACtD2D,EAAgB3R,OAAU4C,qBAAqB,CAAE1C,KAAM8N,IACvD6D,EAAqB,EAVF,UAYP,EAAK2c,yBAAyB,CAC9CzmB,KAAMA,EACNyJ,UAAWA,EACXC,aAAcA,EACdE,cAAeA,EACfE,mBAAoBA,IAjBG,QAYzBL,EAZyB,8BAqB3B,IAAShD,KADLigB,EAAS,GACIjd,EACfid,EAAO5gB,KAAK2D,EAAUhD,IAtBG,OAwBrBmT,EAAU,QAxBW,kBAyBpB8M,EAAOpc,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE9D,KAAKqQ,cAAcmD,cAAczP,EAAE/D,KAAKqQ,cAAe8C,OAzB3D,+CA4BvBgN,yBAzoDY,YAyoDwB,4KAAT9mB,EAAS,EAATA,MAC3B2J,EAAY,GADwB,2BAE1B3J,GAF0B,iDAE/BwE,EAF+B,WAGhCtE,EAAOF,EAAMwE,GACb2B,EAAYjG,EAAKiG,UAClBA,EALiC,4DAQhCyD,EAAe,QACfE,EAAgB,QAChBE,EAAqB,EAVW,UAYpB,EAAK2c,yBAAyB,CAC9CzmB,KAAMA,EACNyJ,UAAWA,EACXC,aAAcA,EACdE,cAAeA,EACfE,mBAAoBA,IAjBgB,QAYtCL,EAZsC,8BAqBxC,IAAShD,KADLigB,EAAS,GACIjd,EACfid,EAAO5gB,KAAK2D,EAAUhD,IAtBgB,yBAwBjCigB,GAxBiC,+CA2BpCG,wBApqDY,YAoqDuB,4KAAT/mB,EAAS,EAATA,MAC1B2J,EAAY,GADuB,2BAEzB3J,GAFyB,iDAE9BwE,EAF8B,WAG/BtE,EAAOF,EAAMwE,GACb2B,EAAYjG,EAAKiG,UAClBA,EALgC,4DAQ/ByD,EAAe,QACfE,EAAgB,QAChBE,EAAqB,EAVU,UAYnB,EAAKE,wBAAwB,CAC7ChK,KAAMA,EACNyJ,UAAWA,EACXC,aAAcA,EACdE,cAAeA,EACfE,mBAAoBA,IAjBe,QAYrCL,EAZqC,8BAqBvC,IAAShD,KADLigB,EAAS,GACIjd,EACfid,EAAO5gB,KAAK2D,EAAUhD,IAtBe,yBAwBhCigB,GAxBgC,+CA2BnCI,wBA/rDY,YA+rDuB,qJAEvC,IAASxiB,KAFqBxE,EAAS,EAATA,MAC1BinB,EAAU,GACAjnB,EACNE,EAAOF,EAAMwE,GACnByiB,EAAQjhB,KAAK9F,EAAKqhB,oBAJmB,yBAMhC0F,GANgC,8CASnCC,wBAxsDY,YAwsDuB,yJAEvC,IAF8BlnB,EAAS,EAATA,MAC1BinB,EAAU,GACLziB,EAAI,EAAGA,EAAIxE,EAAM1K,OAAQkP,IAC1BtE,EAAOF,EAAMwE,GACb2iB,EAAgB,IAAN3iB,EACV4iB,EAAS5iB,IAAMxE,EAAM1K,OAAS,EAChC6xB,GAAWC,EACbH,EAAQjhB,KAAK9F,EAAKyG,MAElBsgB,EAAQjhB,KAAK,KATsB,yBAYhCihB,GAZgC,8CAenCI,sBAvtDY,YA6tDf,wMALDrnB,EAKC,EALDA,MAKC,IAJD7C,WAIC,MAJK,QAIL,MAHDqM,qBAGC,MAHe,yBAGf,MAFDC,qBAEC,aADDC,0BACC,MADoB,YACpB,EACGC,EAAY,GADf,2BAEa3J,GAFb,qDAEQwE,EAFR,WAGOtE,EAAOF,EAAMwE,GACbkiB,EAAWxmB,EAAK/C,GAChByM,EAAgB8c,EAAwBA,EAAS/f,KAAtB,WAC3BmD,EAAiB4c,EAA2BA,EAAS5qB,MAAzB0N,EAC5BQ,EAAsB0c,GAAD,UAAiBA,EAASzc,kBAA1B,QAAY,EAPxC,UASmB,EAAK0c,yBAAyB,CAC9CzmB,KAAMA,EACNyJ,UAAWA,EACXC,aAAcA,EACdE,cAAeA,EACfE,mBAAoBA,IAdvB,QASCL,EATD,8BAmBD,IAAShD,KADLwD,EAAU,GACGR,EACfQ,EAAQnE,KAAK2D,EAAUhD,IAGrByD,EAAU,GAvBb,2BAwBaD,GAxBb,kDAwBQ1E,EAxBR,WAyBO4E,EAAOF,EAAQ1E,IACjBgE,EA1BL,kCA2B2B,EAAK6d,eAAe,CAC1CtnB,MAAOqK,EAAKrK,MACZyJ,eAAe,IA7BpB,QA2BS8d,EA3BT,OA+BGld,EAAK,aAAekd,EACpBld,EAAK,YAAcA,EAAKX,GAhC3B,QAkCCU,EAAQpE,KAAKqE,GAlCd,+BAqCKyP,EAAU,QArCf,kBAsCM1P,EAAQI,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE3O,MAAMkb,cAAcmD,cAAczP,EAAE5O,MAAMkb,cAAe8C,OAtCxF,+CAyCG6M,yBAtwDY,YA4wDf,0NALDzmB,EAKC,EALDA,KACAyJ,EAIC,EAJDA,UACAC,EAGC,EAHDA,aACAE,EAEC,EAFDA,cACAE,EACC,EADDA,mBAEIwd,EAAe7d,EAEbiJ,EAHL,UAGmB1S,EAAK0S,mBAHxB,SAIKsO,EAJL,UAIgBhhB,EAAKghB,gBAJrB,SAKK4B,EALL,UAKc5iB,EAAK4iB,cALnB,SAMK2E,EANL,UAMcvnB,EAAK2iB,aANnB,QAM4B,EAEvB6E,EARL,UAQYF,EAAa5d,UARzB,QAQ0C,GACvC2X,EATH,UASwBmG,EAAKnG,0BAT7B,QASmD,EAChDE,EAVH,UAU0BiG,EAAKjG,4BAV/B,QAUuD,EACpDkG,EAXH,UAWuBD,EAAKC,yBAX5B,QAWiD,EAC9CC,EAZH,UAYqBF,EAAKE,uBAZ1B,QAY6C,EAE1CC,EAdH,UAckBH,EAAKG,oBAdvB,QAcuC,EACpCC,EAfH,UAeoBJ,EAAKI,sBAfzB,QAe2C,EACxCC,EAhBH,UAgBiBL,EAAKK,mBAhBtB,QAgBqC,EAClCC,EAjBH,UAiBeN,EAAKM,iBAjBpB,QAiBiC,EAElCzG,GAAsBkG,EACtBI,GAAgB,GACI,IAAhBjV,IACFkV,GAAkB,EAClBrG,GAAwBgG,IAET,IAAbvG,IACF6G,GAAe,EACfJ,GAAqBF,IAER,IAAX3E,IACFkF,GAAa,EACbJ,GAAmBH,GAGjBznB,EAlCH,UAkCW0nB,EAAK1nB,aAlChB,QAkCyB,GAC1BA,EAAMgG,KAAK9F,GAEL+nB,EAAQ,CACZnsB,MAAOgO,EACPnD,KAAMiD,EACN2X,mBAAoBA,EACpBE,qBAAsBA,EACtBkG,kBAAmBA,EACnBC,gBAAiBA,EACjBC,aAAcA,EACdC,eAAgBA,EAChBC,YAAaA,EACbC,UAAWA,EACX/d,WAAYD,EACZhK,MAAOA,GAETwnB,EAAa5d,GAAgBqe,EAnD5B,kBAoDMT,GApDN,+CAuDGtd,wBAn0DY,YAy0Df,wLALDhK,EAKC,EALDA,KACAyJ,EAIC,EAJDA,UACAC,EAGC,EAHDA,aACAE,EAEC,EAFDA,cACAE,EACC,EADDA,mBAEIwd,EAAe7d,EAEb+d,EAHL,UAGYF,EAAa5d,UAHzB,QAG0C,GACvCse,EAJH,UAIehoB,EAAKoL,mBAJpB,QAImC,EAChCA,EALH,UAKiBoc,EAAKpc,mBALtB,QAKqC,EAElC6c,EAPH,UAOWT,EAAKS,aAPhB,QAOyB,EAE1B7c,GAAe4c,EACfC,GAAS,EAELnoB,EAZH,UAYW0nB,EAAK1nB,aAZhB,QAYyB,GAC1BA,EAAMgG,KAAK9F,GAEPkoB,EAAuBpe,EACA,OAAvBA,IACFoe,EAAuB9c,EAAc6c,GAGjCF,EAAQ,CACZnsB,MAAOgO,EACPnD,KAAMiD,EACN0B,YAAaA,EACb6c,MAAOA,EACPle,WAAYtV,KAAKD,KAAK0zB,GACtBpoB,MAAOA,GAETwnB,EAAa5d,GAAgBqe,EA5B5B,kBA6BMT,GA7BN,+CAgCGld,qBAz2DY,YA62Df,kLAHDtK,EAGC,EAHDA,MAGC,IAFDyJ,mBAEC,aADDD,qBACC,MADe,WACf,EACGG,EAAY,GADf,2BAEa3J,GAFb,qDAEQwE,EAFR,WAGOtE,EAAOF,EAAMwE,GACboF,EAAgB1J,EAAKsL,cAA6BtL,EAAKsL,cAAlB,WACrC1B,EAAiB5J,EAAKsL,cAAgCtL,EAAKsL,cAArBhC,EACtCQ,EAAqB,KAN5B,UAQmB,EAAKE,wBAAwB,CAC7ChK,KAAMA,EACNyJ,UAAWA,EACXC,aAAcA,EACdE,cAAeA,EACfE,mBAAoBA,IAbvB,QAQCL,EARD,8BAiBD,IAAShD,KADLwD,EAAU,GACGR,EACfQ,EAAQnE,KAAK2D,EAAUhD,IAlBxB,OAqBKmT,EAAU,QArBf,kBAsBM3P,EAAQK,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE3O,MAAMkb,cAAcmD,cAAczP,EAAE5O,MAAMkb,cAAe8C,OAtBxF,+CAyBGwN,eAt4DY,YA44Df,0MALDtnB,EAKC,EALDA,MAKC,IAJD7C,WAIC,MAJK,UAIL,MAHDqM,qBAGC,MAHe,iBAGf,MAFDC,qBAEC,aADDC,0BACC,MADoB,UACpB,EACGC,EAAY,GADf,2BAEa3J,GAFb,qDAEQwE,EAFR,WAGOtE,EAAOF,EAAMwE,GACbkiB,EAAWxmB,EAAK/C,GAChByM,EAAgB8c,EAAwBA,EAAS/f,KAAtB,WAC3BmD,EAAiB4c,EAAD,UAA6BA,EAAS1oB,YAAtC,QAA8C,GAAlCwL,EAC5BQ,EAAsB0c,GAAD,UAAiBA,EAASzc,kBAA1B,QAAY,EAPxC,UASmB,EAAK0c,yBAAyB,CAC9CzmB,KAAMA,EACNyJ,UAAWA,EACXC,aAAcA,EACdE,cAAeA,EACfE,mBAAoBA,IAdvB,QASCL,EATD,8BAkBD,IAAShD,KADLwD,EAAU,GACGR,EACfQ,EAAQnE,KAAK2D,EAAUhD,IAGrByD,EAAU,GAtBb,2BAuBaD,GAvBb,kDAuBQ1E,EAvBR,WAwBO4E,EAAOF,EAAQ1E,IACjBgE,EAzBL,kCA0ByB,EAAK4d,sBAAsB,CAC/CrnB,MAAOqK,EAAKrK,MACZyJ,eAAe,IA5BpB,QA0BS4e,EA1BT,OA8BGhe,EAAK,WAAage,EAClBhe,EAAK,YAAcA,EAAKX,GA/B3B,QAiCCU,EAAQpE,KAAKqE,GAjCd,+BAoCKyP,EAAU,QApCf,kBAqCM1P,EAAQI,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE3O,MAAMkb,cAAcmD,cAAczP,EAAE5O,MAAMkb,cAAe8C,OArCxF,+CAwCH6B,UAp7DkB,YAo7DuC,IAA7CC,EAA6C,EAA7CA,SAAUrb,EAAmC,EAAnCA,KAAmC,IAA7Bgc,yBAA6B,SACvD,IAAKX,EACH,MAAO,GAET,IAJuD,EAInDqL,EAAU,GACVqB,EAAqB,GAL8B,iBAMtC1M,GANsC,IAMvD,IAAK,EAAL,qBAA2B,KAAlB1b,EAAkB,QACzB,GAAKA,GAGAA,EAAK8U,UAAV,CAGA,IAAMA,EAAY,IAAIzc,KAAK2H,EAAK8U,WAC1BF,EAAKE,EAAU7b,UACfqb,EAAkBrc,OAAU6C,yBAAyB,CAAE3C,KAAM2c,IAC7DlZ,EAAQoE,EAAKpE,MACbysB,EAAWroB,EAAKqoB,SAChBxT,EAAc7U,EAAKsoB,kBACnB3T,EAAO3U,EAAK+U,KACZwT,EAAgB,GAAH,OAAMjU,EAAN,YAAyB1Y,EAAzB,YAAkCysB,EAAlC,YAA8CxT,GACjE,IAAIwH,IAAqB+L,EAAmBhT,SAASmT,GAArD,CAGA,IAAMpe,EAAO,CACX1D,KAAMzG,EAAKyG,KACXqO,UAAWA,EACXF,GAAIA,EACJvU,KAAMA,EACNsU,KAAMA,EACNL,gBAAiBA,EACjB1Y,MAAOA,EACPysB,SAAUA,EACVxT,YAAaA,GAEfkS,EAAQjhB,KAAKqE,GACbie,EAAmBtiB,KAAKyiB,MApC6B,8BAsCvD,OAAOxB,EAAQzc,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAEoK,GAAKrK,EAAEqK,OAGzCqH,uBA79DkB,YA69D6C,IAAtCP,EAAsC,EAAtCA,SAAsC,IAA5BW,yBAA4B,SAC7D,IAAKX,EACH,MAAO,GAET,IAJ6D,EAIzDqL,EAAU,GACVqB,EAAqB,GALoC,iBAM5C1M,GAN4C,IAM7D,IAAK,EAAL,qBAA2B,KAAlB1b,EAAkB,QACzB,GAAKA,GAGAA,EAAK8U,UAAV,CAGA,IAAMA,EAAY,IAAIzc,KAAK2H,EAAK8U,WAC1BF,EAAKE,EAAU7b,UACfqb,EAAkBrc,OAAU6C,yBAAyB,CAAE3C,KAAM2c,IAC7DlZ,EAAQoE,EAAKpE,MACbysB,EAAWroB,EAAKqoB,SAChBxT,EAAc7U,EAAKsoB,kBACnBC,EAAgB,GAAH,OAAMjU,EAAN,YAAyB1Y,EAAzB,YAAkCysB,EAAlC,YAA8CxT,GACjE,IAAIwH,IAAqB+L,EAAmBhT,SAASmT,GAArD,CAGA,IAAMpe,EAAO,CACX1D,KAAMzG,EAAKyG,KACXqO,UAAWA,EACXF,GAAIA,EACJvU,KAAML,EAAKK,KACXiU,gBAAiBA,EACjB1Y,MAAOA,EACPysB,SAAUA,EACVxT,YAAaA,GAEfkS,EAAQjhB,KAAKqE,GACbie,EAAmBtiB,KAAKyiB,MAlCmC,8BAoC7D,OAAOxB,EAAQzc,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAEoK,GAAKrK,EAAEqK,QAM3C,SAASzZ,EAAYC,GACnB,OAAOA,aAAa/C,OAASgD,MAAMD,GAHtB/E","file":"js/chunk-4943bfb6.88a3c630.js","sourcesContent":["// https://github.com/tc39/proposal-string-pad-start-end\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = toString(requireObjectCoercible($this));\n var intMaxLength = toLength(maxLength);\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : toString(fillString);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","import axios from '@/helpers/axios'\nimport parserUtils from '@/views/dashboard/components/lists/utils/parserUtils'\n\nconst getters = {\n errorMessage(state) {\n return state.errorMessage\n },\n}\n\nconst initialState = {\n assesmentListItems: [],\n aiAssesmentListItems: [],\n errorMessage: '',\n}\n\nconst mutations = {\n setListData(state, payload = []) {\n const dataTableItems = parserUtils.parseApiPayloadToAssessmentDataTableList(payload)\n state.assesmentListItems = [...dataTableItems]\n },\n setAiAssessmentListData(state, payload = []) {\n const dataTableItems = parserUtils.parseApiPayloadToAssessmentDataTableList(payload)\n state.aiAssesmentListItems = [...dataTableItems]\n },\n setErrorMessage(state, payload) {\n state.errorMessage = payload\n },\n clear(state) {\n Object.assign(state, initialState)\n },\n}\n\nconst actions = {\n async get({ commit }) {\n /** Returns the list of virtual consultation assessments.\n */\n const endpoint = 'assessments/my_patients_consultations'\n let response\n try {\n response = await axios.get(`${process.env.VUE_APP_API_ASSESSMENTS_URL}/${endpoint}/`)\n } catch (e) {\n commit('setErrorMessage', `${e.response.data.errors[0].detail}`)\n }\n const data = response.data.data\n commit('setListData', data)\n },\n\n async getAiAssessments({ commit }) {\n /** Returns the list of AI assessments.\n */\n const endpoint = 'assessments/my_patients_ai_assessments'\n let response\n try {\n response = await axios.get(`${process.env.VUE_APP_API_ASSESSMENTS_URL}/${endpoint}/`)\n } catch (e) {\n commit('setErrorMessage', `${e.response.data.errors[0].detail}`)\n }\n const data = response.data.data\n commit('setAiAssessmentListData', data)\n },\n\n async getQaAiAssessments({ commit }, { searchTerm }) {\n /** Returns the list of AI assessments.\n */\n let endpoint = `assessments/${searchTerm}/qa_ai_assessments_by_search`\n if (searchTerm === undefined || searchTerm === null) {\n endpoint = 'assessments/qa_ai_assessments'\n }\n\n let response\n try {\n response = await axios.get(`${process.env.VUE_APP_API_ASSESSMENTS_URL}/${endpoint}/`)\n } catch (e) {\n commit('setErrorMessage', `${e.response.data.errors[0].detail}`)\n }\n const data = response.data.data\n commit('setAiAssessmentListData', data)\n },\n\n async getQaListByClinicUuid({ commit }, clinicUuid) {\n /**\n */\n const endpoint = `assessments/${clinicUuid}/qa_managers_consultation_list_by_clinic`\n const response = await axios.get(`${process.env.VUE_APP_API_ASSESSMENTS_URL}/${endpoint}/`)\n const data = response.data.data\n commit('setListData', data)\n },\n}\n\nexport default {\n namespaced: true,\n state: { ...initialState },\n getters,\n actions,\n mutations,\n}\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","const dateUtils = {\n isToday(date) {\n if (!date) {\n return false\n }\n const today = new Date()\n return date.getDate() == today.getDate() &&\n date.getMonth() == today.getMonth() &&\n date.getFullYear() == today.getFullYear()\n },\n\n isThisIsoWeek(date) {\n if (!date) {\n return false;\n }\n const today = new Date();\n const todayIsoWeek = this._getWeek(today);\n const todayIsoYear = this._getWeekYear(today);\n const dateIsoWeek = this._getWeek(date);\n const dateIsoYear = this._getWeekYear(date);\n return dateIsoWeek === todayIsoWeek && dateIsoYear === todayIsoYear;\n },\n\n _getWeek(someDate) {\n var date = new Date(someDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n var week1 = new Date(date.getFullYear(), 0, 4);\n return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n },\n\n _getWeekYear(someDate) {\n var date = new Date(someDate.getTime());\n date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n return date.getFullYear();\n },\n\n subtractDaysFromToday({ date, days, includeToday = true }) {\n let dateObj;\n if (typeof date === \"string\") {\n dateObj = new Date(date);\n } else if (date instanceof Date) {\n dateObj = date;\n } else {\n throw new Error(\n \"Invalid date format. Expected either a Date object or a valid date string.\"\n );\n }\n let offsetDays = days;\n if (includeToday) {\n offsetDays = days - 1;\n }\n return new Date(dateObj.getTime() - offsetDays * 24 * 60 * 60 * 1000);\n },\n\n daysBetweenDatesForRange({ date0, date1, includeToday = true }) {\n const ONE_DAY = 1000 * 60 * 60 * 24;\n\n // Convert dates to UTC timestamps\n const utc0 = Date.UTC(\n date0.getFullYear(),\n date0.getMonth(),\n date0.getDate()\n );\n const utc1 = Date.UTC(\n date1.getFullYear(),\n date1.getMonth(),\n date1.getDate()\n );\n\n // Calculate difference in days\n let days = Math.floor(Math.abs(utc1 - utc0) / ONE_DAY);\n if (includeToday) {\n days = days + 1\n }\n\n return days;\n },\n\n formatDateToYYYYMMDD({ date, dateString, delimiter = '-' }) {\n if (!date && !dateString) return;\n let date0 = date\n if (!date0) {\n date0 = new Date(dateString)\n }\n let day = date0.getDate().toString();\n let month = (date0.getMonth() + 1).toString();\n let year = date0.getFullYear().toString().slice(-4);\n day = day.padStart(2, '0');\n month = month.padStart(2, '0');\n return `${year}${delimiter}${month}${delimiter}${day}`;\n },\n\n formatDateToDDMMYYYY({ date, dateString, delimiter = '-' }) {\n if (!date && !dateString) return;\n let date0 = date\n if (!date0) {\n date0 = new Date(dateString);\n }\n let day = date0.getDate().toString();\n let month = (date0.getMonth() + 1).toString();\n let year = date0.getFullYear().toString().slice(-4);\n day = day.padStart(2, '0');\n month = month.padStart(2, '0');\n return `${day}${delimiter}${month}${delimiter}${year}`;\n },\n\n formatDateToDDMMYYYYTime({ date, dateString, delimiter = '-' }) {\n if (!date && !dateString) return;\n let date0 = date\n if (!date0) {\n date0 = new Date(dateString);\n }\n let day = date0.getDate().toString();\n let month = (date0.getMonth() + 1).toString();\n let year = date0.getFullYear().toString().slice(-4);\n let hour = date0.getHours().toString();\n let minute = date0.getMinutes().toString();\n day = day.padStart(2, '0');\n month = month.padStart(2, '0');\n hour = hour.padStart(2, '0');\n minute = minute.padStart(2, '0');\n return `${day}${delimiter}${month}${delimiter}${year}, ${hour}:${minute}`;\n },\n\n isValidDate(d) {\n return d instanceof Date && !isNaN(d);\n }\n}\n\nexport default dateUtils\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.set.constructor');\n","export default [\n // NOTE: `value` and `format` is aligned with API\n {\n title: \"DOCUMENT_TYPE_TREATMENT_SUGGESTION_TITLE\",\n color: \"black\",\n value: \"treatment\",\n format: \"pdf\",\n },\n {\n title: \"DOCUMENT_TYPE_BILL_TITLE\",\n color: \"black\",\n value: \"bill\",\n format: \"pdf\",\n },\n {\n title: \"DOCUMENT_TYPE_INSTRUCTIONS_TITLE\",\n color: \"black\",\n value: \"instruction\",\n format: \"pdf\",\n },\n {\n title: \"DOCUMENT_TYPE_JOURNAL_TITLE\",\n color: \"black\",\n value: \"journal_item\",\n format: \"pdf\",\n },\n {\n title: \"DOCUMENT_TYPE_OTHER_PDF_TITLE\",\n color: \"black\",\n value: \"other_pdf\",\n format: \"pdf\",\n },\n // {\n // title: 'Røntgenbillede (JPG)',\n // value: '',\n // format: 'jpg',\n // },\n {\n title: \"No attachment\",\n color: \"red\",\n value: \"\",\n format: \"\",\n },\n]","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('assessment-list',{attrs:{\"title\":\"Virtual Consultations\",\"items\":_vm.assesmentListItems},on:{\"idSelectedGoTo\":_vm.pushToDetail}}),_c('error-message',{attrs:{\"error-message\":_vm.errorMessage || ''}}),_c('quality-assurance-token',{on:{\"getQaList\":_vm.getQaList}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"id\":\"dashboard\",\"fluid\":\"\",\"tag\":\"section\"}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"sm\":\"12\"}},[_c('v-btn',{attrs:{\"icon\":true},on:{\"click\":_vm.increment}},[_c('v-icon',[_vm._v(_vm._s(_vm.reveal ? 'mdi-dots-horizontal' : 'mdi-dots-vertical'))])],1),(_vm.reveal)?_c('v-banner',{attrs:{\"single-line\":\"\",\"transition\":\"slide-y-transition\"},scopedSlots:_vm._u([{key:\"actions\",fn:function(ref){\nvar dismiss = ref.dismiss;\nreturn [_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){dismiss, _vm.reveal=false}}},[_vm._v(\" Dismiss \")]),_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){return _vm.getByClinicUuid()}}},[_vm._v(\" Filter \")])]}}],null,false,1665654184)},[_c('v-text-field',{staticStyle:{\"max-width\":\"250px\"},attrs:{\"color\":\"secondary\"},model:{value:(_vm.clinicUuidToFilterBy),callback:function ($$v) {_vm.clinicUuidToFilterBy=$$v},expression:\"clinicUuidToFilterBy\"}})],1):_vm._e()],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n {{ reveal ? 'mdi-dots-horizontal' : 'mdi-dots-vertical' }}\n \n \n \n \n \n Dismiss\n \n \n Filter\n \n \n \n \n \n \n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QualityAssuranceToken.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QualityAssuranceToken.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./QualityAssuranceToken.vue?vue&type=template&id=6e8ba9fc&\"\nimport script from \"./QualityAssuranceToken.vue?vue&type=script&lang=js&\"\nexport * from \"./QualityAssuranceToken.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBanner } from 'vuetify/lib/components/VBanner';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VBanner,VBtn,VCol,VContainer,VIcon,VRow,VTextField})\n","\n \n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageConsultations.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageConsultations.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageConsultations.vue?vue&type=template&id=8b4a3cc0&\"\nimport script from \"./ImageConsultations.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageConsultations.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"id\":\"data-tables\",\"tag\":\"section\"}},[_c('base-material-card',[_c('v-text-field',{staticClass:\"ml-auto mr-4\",staticStyle:{\"max-width\":\"250px\"},attrs:{\"append-icon\":\"mdi-magnify\",\"label\":_vm.$t('GENERIC_SEARCH'),\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}}),_c('v-divider',{staticClass:\"mt-3\"}),_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.items,\"search\":_vm.search,\"sort-by\":['createdAtTimestamp'],\"sort-desc\":[true]},on:{\"update:search\":function($event){_vm.search=$event},\"click:row\":_vm.rowClick},scopedSlots:_vm._u([{key:\"item.status\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-chip',{attrs:{\"color\":item.color,\"dark\":\"\"}},[_vm._v(\" \"+_vm._s(item.status)+\" \")])]}},{key:\"item.isUserVerifiedByClinic\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-icon',{attrs:{\"color\":_vm._iconColorIsUserVerifiedByClinic(item)}},[_vm._v(\" \"+_vm._s(_vm._iconIsUserVerifiedByClinic(item))+\" \")])]}}],null,true)})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n\n \n\n \n\n \n \n \n {{ item.status }}\n \n \n \n \n {{ _iconIsUserVerifiedByClinic(item) }}\n \n \n \n \n \n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AssessmentList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AssessmentList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AssessmentList.vue?vue&type=template&id=e94dfe4e&\"\nimport script from \"./AssessmentList.vue?vue&type=script&lang=js&\"\nexport * from \"./AssessmentList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VChip,VContainer,VDataTable,VDivider,VIcon,VTextField})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"id\":\"dashboard\",\"fluid\":\"\",\"tag\":\"section\"}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"sm\":\"12\"}},[_c('span',{staticClass:\"error--text\",domProps:{\"textContent\":_vm._s(_vm.errorMessage)}})])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n \n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorMessage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorMessage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ErrorMessage.vue?vue&type=template&id=8ce2a30a&\"\nimport script from \"./ErrorMessage.vue?vue&type=script&lang=js&\"\nexport * from \"./ErrorMessage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCol,VContainer,VRow})\n","// Styles\nimport './VBanner.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VAvatar from '../VAvatar'\nimport VIcon from '../VIcon'\nimport { VExpandTransition } from '../transitions'\n\n// Mixins\nimport Mobile from '../../mixins/mobile'\nimport Toggleable from '../../mixins/toggleable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport {\n convertToUnit,\n getSlot,\n} from '../../util/helpers'\n\n// Typeslint\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n VSheet,\n Mobile,\n Toggleable\n).extend({\n name: 'v-banner',\n\n inheritAttrs: false,\n\n props: {\n app: Boolean,\n icon: String,\n iconColor: String,\n singleLine: Boolean,\n sticky: Boolean,\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VSheet.options.computed.classes.call(this),\n 'v-banner--has-icon': this.hasIcon,\n 'v-banner--is-mobile': this.isMobile,\n 'v-banner--single-line': this.singleLine,\n 'v-banner--sticky': this.isSticky,\n }\n },\n hasIcon (): boolean {\n return Boolean(this.icon || this.$slots.icon)\n },\n isSticky (): boolean {\n return this.sticky || this.app\n },\n styles (): object {\n const styles: Record = { ...VSheet.options.computed.styles.call(this) }\n\n if (this.isSticky) {\n const top = !this.app\n ? 0\n : (this.$vuetify.application.bar + this.$vuetify.application.top)\n\n styles.top = convertToUnit(top)\n styles.position = 'sticky'\n styles.zIndex = 1\n }\n\n return styles\n },\n },\n\n methods: {\n /** @public */\n toggle () {\n this.isActive = !this.isActive\n },\n iconClick (e: MouseEvent) {\n this.$emit('click:icon', e)\n },\n genIcon () {\n if (!this.hasIcon) return undefined\n\n let content\n\n if (this.icon) {\n content = this.$createElement(VIcon, {\n props: {\n color: this.iconColor,\n size: 28,\n },\n }, [this.icon])\n } else {\n content = this.$slots.icon\n }\n\n return this.$createElement(VAvatar, {\n staticClass: 'v-banner__icon',\n props: {\n color: this.color,\n size: 40,\n },\n on: {\n click: this.iconClick,\n },\n }, [content])\n },\n genText () {\n return this.$createElement('div', {\n staticClass: 'v-banner__text',\n }, this.$slots.default)\n },\n genActions () {\n const children = getSlot(this, 'actions', {\n dismiss: () => this.isActive = false,\n })\n\n if (!children) return undefined\n\n return this.$createElement('div', {\n staticClass: 'v-banner__actions',\n }, children)\n },\n genContent () {\n return this.$createElement('div', {\n staticClass: 'v-banner__content',\n }, [\n this.genIcon(),\n this.genText(),\n ])\n },\n genWrapper () {\n return this.$createElement('div', {\n staticClass: 'v-banner__wrapper',\n }, [\n this.genContent(),\n this.genActions(),\n ])\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-banner',\n attrs: this.attrs$,\n class: this.classes,\n style: this.styles,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }\n\n return h(VExpandTransition, [\n h(\n 'div',\n this.outlined ? data : this.setBackgroundColor(this.color, data),\n [this.genWrapper()],\n ),\n ])\n },\n})\n","import PatientDocumentOptions from \"@/store/static/PatientDocumentOptions\";\nimport dateUtils from '@/helpers/date-utils';\nimport i18n from '@/i18n'\n\nconst TREATMENT_TYPE__PLANNED = \"planned\"\nconst TREATMENT_TYPE__COMPLETED = \"completed\"\n\nconst parserUtils = {\n parseApiPayloadToAssessmentDataTableList(payload) {\n /** Converts a *standardized* API payload to a *standardized* assessment\n *\n * DEVELOPER NOTE:\n * This is a SUPER coupled implementation. Break it as soon as it\n * becomes constraining, but the intention is to help keep\n * assessment lists aligned and avoid regression (i.e. forgetting\n * to update one place when others are updated):\n *\n * - Assessment list for all patients\n * - Assessment list for individual patients\n *\n * Typical use case: When updating one place, we are 'forced' to come\n * here (probably why you are reading it now), and please search the\n * repo for the above function name to get reminded where similar lists\n * might need to be updated.\n */\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const relatedImageAsJsonApi = relationships.uploaded_images.data\n\n let color = 'warning'\n let status = 'Pending Consult'\n const isPending = attribs.is_pending\n const isAnamnesisQuestionnaire = attribs.is_anamnesis_questionnaire\n const isJournalized = attribs.is_journalized ?? attribs.is_journalized_by_clinic;\n if (isAnamnesisQuestionnaire) {\n color = 'grey'\n status = 'No action needed'\n } else if (isJournalized) {\n color = 'success'\n status = 'Journalized'\n } else if (!isPending) {\n color = 'success'\n status = 'Handled'\n }\n\n const imageUrls = []\n const guiUrls = []\n const thumbnailUrls = []\n let j = 0\n for (j in relatedImageAsJsonApi) {\n const imageResource = relatedImageAsJsonApi[j]\n const url = imageResource.attributes.url\n const guiUrl = imageResource.attributes.gui_url\n const thumbnailUrl = imageResource.attributes.thumbnail_url\n imageUrls.push(url)\n guiUrls.push(guiUrl)\n thumbnailUrls.push(thumbnailUrl)\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const now = new Date();\n const diffInMs = !!_createdAt ? now - _createdAt : 0;\n const diffInHours = diffInMs / 3600000;\n const roundedDiffInHours = diffInHours.toFixed(1)\n\n const item = {\n uuid: attribs.uuid,\n name: attribs.name,\n createdAt: createdAt,\n date: createdAtDate,\n diffInHours: roundedDiffInHours,\n status: status,\n color: color,\n isUserVerifiedByClinic: attribs.is_user_verified_by_clinic,\n isFromAdentAssessmentWidget: attribs.is_from_adent_assessment_widget,\n isAnamnesisQuestionnaire: isAnamnesisQuestionnaire,\n isJournalized: isJournalized,\n imageUrls: imageUrls,\n guiUrls: guiUrls,\n thumbnailUrls: thumbnailUrls,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n parseApiPayloadToMedicalHistoryDataTableList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n let patientFullname = !!patient ? patient.attributes.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = patient.attributes.phone_number\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const supportId = patient.attributes.cognito_id.slice(0, 8)\n patientFullname = `Navn mangler (Support id: ${supportId})`\n }\n\n const _createdAt = new Date(attribs.created_at)\n const createdAt = _createdAt.getTime()\n const createdAtDate = _createdAt.toLocaleDateString('da-DK', dateOptions);\n\n const _updatedAt = new Date(attribs.updated_at)\n const updatedAt = _updatedAt.getTime()\n const updatedAtDate = _updatedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _completedAt = new Date(attribs.completed_at)\n const completedAt = _completedAt.getTime()\n const completedAtDate = _completedAt.toLocaleDateString('da-DK', dateOptions);\n\n let sortableAt = completedAt;\n if (!isValidDate(_completedAt)) {\n sortableAt = createdAt;\n }\n\n const item = {\n uuid: attribs.uuid,\n name: patientFullname,\n createdAt: createdAt,\n updatedAt: updatedAt,\n completedAt: completedAt,\n date: completedAtDate,\n sortableAt: sortableAt,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n isJournalizedByConnector: attribs.is_journalized_by_connector,\n updatedAtDate: updatedAtDate,\n createdAtDate: createdAtDate,\n completedAtDate: completedAtDate,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n parseApiPayloadToInstallmentDataTableList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n const supportId = attribs.uuid.slice(0, 8);\n\n let patientFullname = !!patient ? patient.attributes.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = patient.attributes.phone_number\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const cognitoId = patient.attributes.cognito_id.slice(0, 8)\n patientFullname = `Navn mangler (Support id: ${cognitoId})`\n }\n\n const _createdAt = new Date(attribs.created_at)\n const createdAt = _createdAt.getTime()\n const createdAtDate = _createdAt.toLocaleDateString('da-DK', dateOptions);\n\n const _updatedAt = new Date(attribs.updated_at)\n const updatedAtDate = _updatedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _sentAt = new Date(attribs.sent_at)\n const sentAtDate = _sentAt.toLocaleDateString('da-DK', dateOptions);\n\n const _confirmedAt = attribs.confirmed_at == null ? null : new Date(attribs.confirmed_at)\n const confirmedAtDate = _confirmedAt == null ? null : _confirmedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _initialPaymentReceivedAt = attribs.initial_payment_received_at == null ? null : new Date(attribs.initial_payment_received_at)\n const initialPaymentReceivedAtDate = _initialPaymentReceivedAt == null ? null : _initialPaymentReceivedAt.toLocaleDateString('da-DK', dateOptions);\n\n const item = {\n uuid: attribs.uuid,\n name: patientFullname,\n createdAt: createdAt,\n date: createdAtDate,\n createdAtDate: createdAtDate,\n updatedAtDate: updatedAtDate,\n isSent: attribs.is_sent,\n isConfirmed: attribs.is_confirmed,\n confirmedAt: confirmedAtDate,\n isInitialPaymentReceived: attribs.is_initial_payment_received,\n initialPaymentReceivedAt: initialPaymentReceivedAtDate,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n sentAtDate: sentAtDate,\n supportId: supportId,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n async groupByDocumentType({\n items,\n fallbackTitle = 'ٴ Øvrig: Uden kategori', // @sortprefix: Note the arabic prefix for alphatic sort\n allowSubgroup = false,\n primarySubgroupKey = 'byInitial',\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const categoryUuid = item.documentType\n const categoryTitle = item.documentTitle ?? fallbackTitle\n const categoryPrecedence = !item ? 0 : (item.precedence ?? 0)\n\n groupDict = await this._addToGroupDocumentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList0 = []\n for (let uuid in groupDict) {\n asList0.push(groupDict[uuid])\n }\n\n let asList1 = []\n for (let j in asList0) {\n const elem = asList0[j]\n if (allowSubgroup) {\n const byInitial = await this.groupBySystemInitial({\n items: elem.items,\n allowSubgroup: false,\n })\n elem['byInitial'] = byInitial\n elem['subgroup'] = elem[primarySubgroupKey]\n }\n asList1.push(elem)\n }\n\n return asList1.sort((a, b) => (b.precedence ?? 0) - (a.precedence ?? 0))\n },\n\n parseDocumentList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n const supportId = attribs.uuid.slice(0, 8);\n\n let patientFullname = !!patient ? patient.attributes.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = !!patient ? patient.attributes.phone_number : null\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const cognitoId = !!patient ? patient.attributes.cognito_id.slice(0, 8) : null\n patientFullname = `Navn mangler (Support id: ${cognitoId})`\n }\n\n const _createdAt = new Date(attribs.created_at)\n const createdAt = _createdAt.getTime()\n const createdAtDate = _createdAt.toLocaleDateString('da-DK', dateOptions);\n\n const _updatedAt = new Date(attribs.updated_at)\n const updatedAtDate = _updatedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _sentAt = new Date(attribs.sent_at)\n const sentAtDate = _sentAt.toLocaleDateString('da-DK', dateOptions);\n\n const _confirmedAt = attribs.confirmed_at == null ? null : new Date(attribs.confirmed_at)\n const confirmedAtDate = _confirmedAt == null ? null : _confirmedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _rejectedAt = attribs.rejected_at == null ? null : new Date(attribs.rejected_at)\n const rejectedAtDate = _rejectedAt == null ? null : _rejectedAt.toLocaleDateString('da-DK', dateOptions);\n\n const documentType = attribs.document_type;\n const documentText = this.getDocumentText({ documentType: documentType });\n const documentTitle = documentText.title\n const documentPrecedence = documentText.precedence\n\n const item = {\n uuid: attribs.uuid,\n name: patientFullname,\n documentType: documentType,\n documentTitle: documentTitle,\n precedence: documentPrecedence,\n createdAt: createdAt,\n date: createdAtDate,\n createdAtDate: createdAtDate,\n updatedAtDate: updatedAtDate,\n isSent: attribs.is_sent,\n isConfirmed: attribs.is_confirmed,\n confirmedAt: confirmedAtDate,\n isRejected: attribs.is_rejected,\n rejectedAt: rejectedAtDate,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n sentAtDate: sentAtDate,\n amountTotal: attribs.amount_total,\n url: attribs.url,\n supportId: supportId,\n systemInitial: attribs.system_user_initials,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n\n parseInstructionList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n const dateOptionsShort = { month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n const instructionCard = relationships.instruction_card.data\n\n const imageListJson = relationships.images.data\n const imageList = this._parseImageList({ payload: imageListJson })\n const imagePovList = this._parseimagePovList({ payload: imageListJson })\n\n const shareLogListJson = !relationships.share_logs ? [] : relationships.share_logs.data\n const shareLogList = this._parseShareLogList({ payload: shareLogListJson })\n\n const digitalConsultListJson = relationships.digital_consult_logs.data\n const digitalConsultList = this._parseDigitalConsultList({ payload: digitalConsultListJson })\n\n const cognitoId = !!patient ? patient.attributes.cognito_id : null\n\n let patientFirstname = !!patient ? patient.attributes.first_name : null\n let patientFullname = !!patient ? patient.attributes.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = !!patient ? patient.attributes.phone_number : null\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const supportId = cognitoId.slice(0, 8)\n patientFullname = `Navn mangler (Support id: ${supportId})`\n }\n\n let instructionCardUuid = null\n let instructionCardTitle = null\n if (!!instructionCard) {\n instructionCardUuid = instructionCard.attributes.uuid\n instructionCardTitle = instructionCard.attributes.title_da\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n const createdAtDateShort = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _updatedAt = !!attribs.updated_at ? new Date(attribs.updated_at) : null;\n const updatedAt = !!_updatedAt ? _updatedAt.getTime() : null;\n const updatedAtDate = !!_updatedAt ? _updatedAt.toLocaleDateString('da-DK', dateOptions) : null;\n const updatedAtDateShort = !!_updatedAt ? _updatedAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _sentAt = !!attribs.sent_at ? new Date(attribs.sent_at) : null;\n const sentAt = !!_sentAt ? _sentAt.getTime() : null;\n const sentAtDate = !!_sentAt ? _sentAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _completedAt = !!attribs.completed_at ? new Date(attribs.completed_at) : null;\n const completedAt = !!_completedAt ? _completedAt.getTime() : null;\n const completedAtDate = !!_completedAt ? _completedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _confirmedAt = !!attribs.confirmed_at ? new Date(attribs.confirmed_at) : null;\n const confirmedAt = !!_confirmedAt ? _confirmedAt.getTime() : null;\n const confirmedAtDate = !!_confirmedAt ? _confirmedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _openedAt = !!attribs.opened_at ? new Date(attribs.opened_at) : null;\n const openedAt = !!_openedAt ? _openedAt.getTime() : null;\n const openedAtDate = !!_openedAt ? _openedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _bookmarkedAt = !!attribs.bookmarked_at ? new Date(attribs.bookmarked_at) : null;\n const bookmarkedAt = !!_bookmarkedAt ? _bookmarkedAt.getTime() : null;\n const bookmarkedAtDate = !!_bookmarkedAt ? _bookmarkedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _nextDigitalConsultAt = !!attribs.next_digital_consult_at ? new Date(attribs.next_digital_consult_at) : null;\n const nextDigitalConsultAt = !!_nextDigitalConsultAt ? _nextDigitalConsultAt.getTime() : null;\n const nextDigitalConsultAtDate = !!_nextDigitalConsultAt ? _nextDigitalConsultAt.toLocaleDateString('da-DK', dateOptions) : null;\n const nextDigitalConsultAtDateShort = !!_nextDigitalConsultAt ? _nextDigitalConsultAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _latestDigitalConsultAt = !!attribs.latest_digital_consult_at ? new Date(attribs.latest_digital_consult_at) : null;\n const latestDigitalConsultAt = !!_latestDigitalConsultAt ? _latestDigitalConsultAt.getTime() : null;\n const latestDigitalConsultAtDate = !!_latestDigitalConsultAt ? _latestDigitalConsultAt.toLocaleDateString('da-DK', dateOptions) : null;\n const latestDigitalConsultAtDateShort = !!_latestDigitalConsultAt ? _latestDigitalConsultAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _latestImageReceivedAt = !!attribs.latest_image_received_at ? new Date(attribs.latest_image_received_at) : null;\n const latestImageReceivedAt = !!_latestImageReceivedAt ? _latestImageReceivedAt.getTime() : null;\n const latestImageReceivedAtDate = !!_latestImageReceivedAt ? _latestImageReceivedAt.toLocaleDateString('da-DK', dateOptions) : null;\n const latestImageReceivedAtDateShort = !!_latestImageReceivedAt ? _latestImageReceivedAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _journalizedAt = !!attribs.journalized_at ? new Date(attribs.journalized_at) : null;\n const journalizedAt = !!_journalizedAt ? _journalizedAt.getTime() : null;\n const journalizedAtDate = !!_journalizedAt ? _journalizedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _beforeScanCompletedAt = !!attribs.before_scan_completed_at ? new Date(attribs.beforeScanCompleted_at) : null;\n const beforeScanCompletedAt = !!_beforeScanCompletedAt ? _beforeScanCompletedAt.getTime() : null;\n const beforeScanCompletedAtDate = !!_beforeScanCompletedAt ? _beforeScanCompletedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _afterScanCompletedAt = !!attribs.after_scan_completed_at ? new Date(attribs.afterScanCompleted_at) : null;\n const afterScanCompletedAt = !!_afterScanCompletedAt ? _afterScanCompletedAt.getTime() : null;\n const afterScanCompletedAtDate = !!_afterScanCompletedAt ? _afterScanCompletedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _latestScanCompletedAt = !!attribs.latest_scan_completed_at ? new Date(attribs.latest_scan_completed_at) : null;\n const latestScanCompletedAt = !!_latestScanCompletedAt ? _latestScanCompletedAt.getTime() : null;\n const latestScanCompletedAtDate = !!_latestScanCompletedAt ? _latestScanCompletedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const latestMessageToPatientSentAtRaw = attribs.latest_message_to_patient_sent_at_raw;\n const latestMessageToPatientSentAtTitle = attribs.latest_message_to_patient_sent_at_title;\n const _latestMessageToPatientSentAt = !!attribs.latest_scan_completed_at ? new Date(attribs.latest_message_to_patient_sent_at) : null;\n const latestMessageToPatientSentAt = !!_latestMessageToPatientSentAt ? _latestMessageToPatientSentAt.getTime() : null;\n const latestMessageToPatientSentAtDate = !!_latestMessageToPatientSentAt ? _latestMessageToPatientSentAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const hasAnyImageReady = attribs.has_any_image_ready\n const completedScanCount = attribs.completed_scan_count\n\n const isAutomaticallyUpdatedSinceViewed = attribs.is_automatically_updated_since_viewed;\n const automaticallyUpdatedSinceViewedRaw = attribs.automatically_updated_since_viewed_raw;\n const automaticallyUpdatedSinceViewedTitle = attribs.automatically_updated_since_viewed_title;\n const _automaticallyUpdatedSinceViewedAt = !!attribs.automatically_updated_since_viewed_at ? new Date(attribs.automatically_updated_since_viewed_at) : null;\n const automaticallyUpdatedSinceViewedAt = !!_automaticallyUpdatedSinceViewedAt ? _automaticallyUpdatedSinceViewedAt.getTime() : null;\n const automaticallyUpdatedSinceViewedAtDate = !!_automaticallyUpdatedSinceViewedAt ? _automaticallyUpdatedSinceViewedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _noteLog = attribs.note_log\n const noteLog = this._parseNoteLog(_noteLog);\n\n const _clinic = relationships.clinic.data\n const clinicAttribs = _clinic.attributes\n const clinicRels = _clinic.relationships\n const instructionSmsTemplates = clinicAttribs.instruction_sms_templates ?? []\n const instructionInternalMessageTemplates = clinicAttribs.instruction_internal_message_templates ?? []\n const clinicEmail = clinicAttribs.email\n\n let _recipientEmails = [];\n if (!!clinicRels && !!clinicRels.organization && !!clinicRels.organization.data) {\n const organizationAttribs = clinicRels.organization.data.attributes\n _recipientEmails = organizationAttribs.recipient_emails ?? [];\n }\n _recipientEmails.push(clinicEmail);\n const recipientEmails = [...new Set(_recipientEmails)];\n\n const item = {\n uuid: attribs.uuid,\n title: instructionCardTitle,\n name: patientFullname,\n firstname: patientFirstname,\n cognitoId: cognitoId,\n isSent: attribs.is_sent,\n isConfirmed: attribs.is_confirmed,\n isOpened: attribs.is_opened,\n isStarted: attribs.is_started,\n isCompleted: attribs.is_completed,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n isBeforeScanCompleted: attribs.is_before_scan_completed,\n isAfterScanCompleted: attribs.is_after_scan_completed,\n isLatestScanCompleted: attribs.is_latest_scan_completed,\n completedScanCount: completedScanCount,\n createdAt: createdAt,\n updatedAt: updatedAt,\n createdAtDate: createdAtDate,\n createdAtDateShort: createdAtDateShort,\n updatedAtDate: updatedAtDate,\n updatedAtDateShort: updatedAtDateShort,\n sentAt: sentAt,\n sentAtDate: sentAtDate,\n journalizedAt: journalizedAt,\n journalizedAtDate: journalizedAtDate,\n completedAt: completedAt,\n completedAtDate: completedAtDate,\n confirmedAt: confirmedAt,\n confirmedAtDate: confirmedAtDate,\n openedAt: openedAt,\n openedAtDate: openedAtDate,\n bookmarkedAt: bookmarkedAt,\n bookmarkedAtDate: bookmarkedAtDate,\n isMessageToPatientSentToday: attribs.is_message_to_patient_sent_today,\n isMessageToPatientSentThisWeek: attribs.is_message_to_patient_sent_this_week,\n isPendingDigitalConsult: attribs.is_pending_digital_consult,\n latestMessageToPatientSentAt: latestMessageToPatientSentAt,\n latestMessageToPatientSentAtTs: _latestMessageToPatientSentAt,\n latestMessageToPatientSentAtDate: latestMessageToPatientSentAtDate,\n latestMessageToPatientSentAtRaw: latestMessageToPatientSentAtRaw,\n latestMessageToPatientSentAtTitle: latestMessageToPatientSentAtTitle,\n isDigitalConsultCompletedToday: attribs.is_digital_consult_completed_today,\n isDigitalConsultCompletedThisWeek: attribs.is_digital_consult_completed_this_week,\n nextDigitalConsultAt: nextDigitalConsultAt,\n nextDigitalConsultAtTs: _nextDigitalConsultAt,\n nextDigitalConsultAtDate: nextDigitalConsultAtDate,\n nextDigitalConsultAtDateShort: nextDigitalConsultAtDateShort,\n latestDigitalConsultAt: latestDigitalConsultAt,\n latestDigitalConsultAtTs: _latestDigitalConsultAt,\n latestDigitalConsultAtDate: latestDigitalConsultAtDate,\n latestDigitalConsultAtDateShort: latestDigitalConsultAtDateShort,\n latestImageReceivedAt: latestImageReceivedAt,\n latestImageReceivedAtTs: _latestImageReceivedAt,\n latestImageReceivedAtDate: latestImageReceivedAtDate,\n latestImageReceivedAtDateShort: latestImageReceivedAtDateShort,\n hasAnyImageReady: hasAnyImageReady,\n noteLog: noteLog,\n beforeScanCompletedAt: beforeScanCompletedAt,\n beforeScanCompletedAtDate: beforeScanCompletedAtDate,\n afterScanCompletedAt: afterScanCompletedAt,\n afterScanCompletedAtDate: afterScanCompletedAtDate,\n latestScanCompletedAt: latestScanCompletedAt,\n latestScanCompletedAtDate: latestScanCompletedAtDate,\n isAutomaticallyUpdatedSinceViewed: isAutomaticallyUpdatedSinceViewed,\n automaticallyUpdatedSinceViewedRaw: automaticallyUpdatedSinceViewedRaw,\n automaticallyUpdatedSinceViewedTitle: automaticallyUpdatedSinceViewedTitle,\n automaticallyUpdatedSinceViewedAt: automaticallyUpdatedSinceViewedAt,\n automaticallyUpdatedSinceViewedAtDate: automaticallyUpdatedSinceViewedAtDate,\n instructionCardUuid: instructionCardUuid,\n images: imageList,\n imagePovList: imagePovList,\n shareLogList: shareLogList,\n digitalConsultList: digitalConsultList,\n recipientEmails: recipientEmails,\n instructionSmsTemplates: instructionSmsTemplates,\n instructionInternalMessageTemplates: instructionInternalMessageTemplates,\n scanWeekday: attribs.scan_weekday,\n scanIntervalDays: attribs.scan_interval_days,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n _parseShareLogList({ payload }) {\n let itemList = []\n for (let i in payload) {\n const item = payload[i];\n const attribs = item.attributes\n const createdAt = new Date(attribs.created_at);\n const createdAtTs = createdAt.getTime();\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: createdAt })\n const messageType = attribs.message_type\n const messageBodyTrunc = attribs.message_body_trunc\n const elem = {\n uuid: attribs.uuid,\n body: attribs.title,\n createdAt: createdAt,\n prettyCreatedAt: prettyCreatedAt,\n ts: createdAtTs,\n type: messageType,\n description: messageBodyTrunc,\n }\n itemList.push(elem)\n }\n return itemList.sort((a, b) => b.ts - a.ts);\n },\n\n _parseDigitalConsultList({ payload }) {\n let itemList = []\n for (let i in payload) {\n const item = payload[i];\n const attribs = item.attributes\n const createdAt = new Date(attribs.timestamp);\n const createdAtTs = createdAt.getTime();\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: createdAt })\n const elem = {\n uuid: attribs.uuid,\n body: attribs.note,\n type: 'consult',\n description: null,\n createdAt: createdAt,\n prettyCreatedAt: prettyCreatedAt,\n ts: createdAtTs,\n }\n itemList.push(elem)\n }\n return itemList.sort((a, b) => b.ts - a.ts);\n },\n\n _parseimagePovList({ payload }) {\n let tagList = []\n let uniqueList = []\n for (let i in payload) {\n const item = payload[i];\n const attribs = item.attributes\n const pointOfView = attribs.point_of_view\n if (uniqueList.includes(pointOfView)) {\n continue;\n }\n uniqueList.push(pointOfView)\n const meta = this._getPointOfViewMeta({ pointOfView: pointOfView })\n const tag = {\n id: pointOfView,\n title: meta.title,\n precedence: meta.precedence,\n isFacePov: meta.isFacePov,\n }\n tagList.push(tag)\n }\n tagList.sort((a, b) => a.precedence - b.precedence);\n return tagList;\n },\n\n _parseImageList({ payload }) {\n let imageList = []\n for (let i in payload) {\n const item = payload[i];\n const attribs = item.attributes\n const createdAt = new Date(attribs.created_at);\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: createdAt })\n const pointOfView = attribs.point_of_view\n const meta = this._getPointOfViewMeta({ pointOfView: pointOfView })\n const image = {\n uuid: attribs.uuid,\n url: attribs.url,\n rawCroppedUrl: attribs.raw_cropped_url,\n hueCroppedUrl: attribs.hue_color_cropped_url,\n createdAt: createdAt,\n prettyCreatedAt: prettyCreatedAt,\n pointOfView: pointOfView,\n pointOfViewTitle: meta.title,\n pointOfViewPrecedence: meta.precedence,\n isFacePov: meta.isFacePov,\n }\n imageList.push(image)\n }\n return this._sortListByDateAndPrecedence({ items: imageList });\n },\n\n _sortListByDateAndPrecedence({ items }) {\n return items.sort((a, b) => {\n const dateA = a.createdAt;\n const dateB = b.createdAt;\n const condition0 = dateA.getDate() !== dateB.getDate();\n const condition1 = a.pointOfViewPrecedence - b.pointOfViewPrecedence;\n // Compare dates\n if (dateA.getDate() !== dateB.getDate()) {\n return condition0;\n } else {\n // If dates are the same, compare precedence\n return condition1;\n }\n });\n },\n\n getDocumentText({ documentType }) {\n let title = 'Andet' // this._capitalize({ value: documentType })\n let precedence = 0\n if (documentType == 'instruction') {\n title = 'Vejledning'\n precedence = 17\n } else if (documentType == 'receipt') {\n title = 'Kvittering'\n precedence = 19\n } else if (documentType == 'giro') {\n title = 'Afdragsordning'\n precedence = 15\n } else if (documentType == 'bill') {\n title = 'Regning'\n precedence = 18\n } else if (documentType == 'overdue_bill') {\n title = 'Rykker (regning)'\n precedence = 16\n } else if (documentType == 'medical_history') {\n title = 'Helbredsskema'\n precedence = 10\n } else if (documentType == 'treatment') {\n title = 'Overslag'\n precedence = 20\n } else if (documentType == 'journal_item') {\n title = 'Journal'\n precedence = 10\n } else if (documentType == 'other_pdf') {\n title = 'PDF'\n precedence = 9\n } else if (documentType == 'other_jpg') {\n title = 'Billede eller røntgen'\n precedence = 5\n } else if (documentType == 'standalone_free_text') {\n title = 'Fritekst'\n precedence = 11\n }\n return { title: title, precedence: precedence };\n },\n\n _getPointOfViewMeta({ pointOfView }) {\n const povClean = !!pointOfView ? pointOfView.trim('.jpg') : '';\n let title = this._capitalize({ value: pointOfView })\n let precedence = 20;\n if (povClean == 'face-smile') {\n title = 'Naturligt smil (på afstand)';\n precedence = 15;\n } else if (povClean == 'face-smile-front') {\n title = 'Naturligt smil (på afstand)';\n precedence = 15;\n } else if (povClean == 'bite-front') {\n title = 'Tænder (tæt på)';\n precedence = 1;\n } else if (povClean == 'bite-left') {\n title = 'Tænder (tæt på, venstre)';\n precedence = 5;\n } else if (povClean == 'bite-right') {\n title = 'Tænder (tæt på, højre)';\n precedence = 6;\n } else if (povClean == 'upper-arch') {\n title = 'Øvre kæbe';\n precedence = 12;\n } else if (povClean == 'bottom-arch') {\n title = 'Nedre kæbe';\n precedence = 11;\n } else if (povClean == 'closed-bite-front') {\n title = 'Sammenbid med skinne forfra'\n precedence = 3;\n } else if (povClean == 'closed-bite-left') {\n title = 'Sammenbid fra venstre'\n precedence = 5;\n } else if (povClean == 'closed-bite-right') {\n title = 'Sammenbid fra højre'\n precedence = 7;\n } else if (povClean == 'closed-bite-front-excl-aligners') {\n title = 'Sammenbid u. skinne og forfra'\n precedence = 1;\n } else if (povClean == 'closed-bite-front-incl-aligners') {\n title = 'Sammenbid med skinne og forfra'\n precedence = 2;\n } else if (povClean == 'closed-bite-left-incl-aligners') {\n title = 'Sammenbid med skinne fra venstre'\n precedence = 6;\n } else if (povClean == 'closed-bite-right-incl-aligners') {\n title = 'Sammenbid med skinne fra højre'\n precedence = 8;\n } else if (povClean == 'open-bite-front-incl-aligners') {\n title = 'Let åben mund med skinne og forfra'\n precedence = 10;\n }\n const isFacePov = povClean.includes('face');\n return { title: title, precedence: precedence, isFacePov: isFacePov }\n },\n\n _capitalize({ value }) {\n let arr = value.split('-');\n let capital = arr.map(item => item.charAt(0).toUpperCase() + item.slice(1).toLowerCase());\n let capitalString = capital.join(\" \");\n return capitalString\n },\n\n parseReviewLogList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n const patAttribs = !!patient ? patient.attributes : null\n\n const patientPhoneNumber = !!patAttribs ? patAttribs.phone_number : null\n const patientEmail = !!patAttribs ? patAttribs.contact_email : null\n\n let patientFullname = !!patAttribs ? patAttribs.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = patientPhoneNumber\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const supportId = !!patAttribs ? patAttribs.cognito_id.slice(0, 8) : null\n patientFullname = `Navn mangler (Support id: ${supportId})`\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _updatedAt = !!attribs.updated_at ? new Date(attribs.updated_at) : null;\n const updatedAt = !!_updatedAt ? _updatedAt.getTime() : null;\n const updatedAtDate = !!_updatedAt ? _updatedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _sentAt = !!attribs.sent_at ? new Date(attribs.sent_at) : null;\n const sentAt = !!_sentAt ? _sentAt.getTime() : null;\n const sentAtDate = !!_sentAt ? _sentAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _completedAt = !!attribs.completed_at ? new Date(attribs.completed_at) : null;\n const completedAt = !!_completedAt ? _completedAt.getTime() : null;\n const completedAtDate = !!_completedAt ? _completedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _resolvedAt = !!attribs.resolved_at ? new Date(attribs.resolved_at) : null;\n const resolvedAt = !!_resolvedAt ? _resolvedAt.getTime() : null;\n const resolvedAtDate = !!_resolvedAt ? _resolvedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _openedAt = !!attribs.opened_at ? new Date(attribs.opened_at) : null;\n const openedAt = !!_openedAt ? _openedAt.getTime() : null;\n const openedAtDate = !!_openedAt ? _openedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _bookmarkedAt = !!attribs.bookmarked_at ? new Date(attribs.bookmarked_at) : null;\n const bookmarkedAt = !!_bookmarkedAt ? _bookmarkedAt.getTime() : null;\n const bookmarkedAtDate = !!_bookmarkedAt ? _bookmarkedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _journalizedAt = !!attribs.journalized_at ? new Date(attribs.journalized_at) : null;\n const journalizedAt = !!_journalizedAt ? _journalizedAt.getTime() : null;\n const journalizedAtDate = !!_journalizedAt ? _journalizedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _noteLog = attribs.note_log\n const noteLog = this._parseNoteLog(_noteLog);\n\n const patientNote = attribs.patient_note ?? '';\n const maxNoteLength = 25;\n let patientNoteTruncated = patientNote.length > maxNoteLength ? `${patientNote.slice(0, maxNoteLength)}...` : patientNote;\n\n const item = {\n uuid: attribs.uuid,\n score: attribs.score,\n scoreRaw: attribs.score_raw,\n patientNote: patientNote,\n patientNoteTruncated: patientNoteTruncated,\n name: patientFullname,\n patientPhoneNumber: patientPhoneNumber,\n patientEmail: patientEmail,\n createdAt: createdAt,\n updatedAt: updatedAt,\n date: updatedAtDate,\n timestamp: updatedAt,\n isSent: attribs.is_sent,\n isOpened: attribs.is_opened,\n isCompleted: attribs.is_completed,\n isResolved: attribs.is_resolved,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n createdAtDate: createdAtDate,\n updatedAtDate: updatedAtDate,\n sentAt: sentAt,\n sentAtDate: sentAtDate,\n journalizedAt: journalizedAt,\n journalizedAtDate: journalizedAtDate,\n completedAt: completedAt,\n completedAtDate: completedAtDate,\n resolvedAt: resolvedAt,\n resolvedAtDate: resolvedAtDate,\n openedAt: openedAt,\n openedAtDate: openedAtDate,\n bookmarkedAt: bookmarkedAt,\n bookmarkedAtDate: bookmarkedAtDate,\n noteLog: noteLog,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n _parseNoteLog(payload) {\n if (!payload) {\n return []\n }\n let _dataList = []\n for (let item of payload) {\n if (!item) {\n continue\n }\n const createdAt = new Date(item.timestamp)\n const ts = createdAt.getTime();\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: createdAt })\n _dataList.push({\n uuid: item.uuid,\n ts: ts,\n createdAt: createdAt,\n body: item.note,\n type: 'note',\n description: null,\n prettyCreatedAt: prettyCreatedAt,\n })\n }\n // NOTE: If you update sorting, also check (latest) note in list is as expected.\n return _dataList.sort((a, b) => b.ts - a.ts);\n },\n\n\n parseClinicalPhotoList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n let patientPhoneNumber = attribs.patient_phone_number\n let patientFullname = attribs.patient_full_name\n let patientCognitoId = attribs.patient_cognito_id\n\n if (patient != null && patient.attributes != null) {\n let patAttribs = patient.attributes\n patientPhoneNumber = patAttribs.phone_number\n patientFullname = patAttribs.full_name\n patientCognitoId = patAttribs.cognito_id\n }\n\n let nameList = []\n if (patientFullname != null && patientFullname.length > 0) {\n nameList.push(patientFullname)\n } else if (patientPhoneNumber != null && patientPhoneNumber.length > 0) {\n nameList.push(patientPhoneNumber)\n } else if (patientCognitoId != null && patientCognitoId.length > 0) {\n nameList.push(patientCognitoId)\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const hasAnyImageReady = attribs.has_any_image_ready\n const hasAnyImagePending = attribs.has_any_image_pending\n\n let name = nameList.join(' • ')\n\n const item = {\n uuid: attribs.uuid,\n name: name,\n createdAt: createdAt,\n date: createdAtDate,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n hasAnyImageReady: hasAnyImageReady,\n hasAnyImagePending: hasAnyImagePending,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n parseConnectorLogList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n let requestType = attribs.type\n let requestTypeName = '-'\n if (requestType == 'medical_history_completed') {\n requestTypeName = 'Helbredsskema'\n } else if (requestType = 'treatment_sent') {\n requestTypeName = 'Sendt overslag'\n } else if (requestType = 'treatment_comfirmed') {\n requestTypeName = 'Informeret samtykke'\n } else if (requestType = 'treatment_billed') {\n requestTypeName = 'Informeret samtykke (faktureret)'\n } else if (requestType = 'instruction_sent') {\n requestTypeName = 'Sendt patientbrev/-vejledning'\n } else if (requestType = 'instruction_sent_by_receipt') {\n requestTypeName = 'Sendt patientbrev/-vejledning via regning'\n }\n\n let patientFullname = null\n let patientCognitoId = null\n\n if (patient != null && patient.attributes != null) {\n let patAttribs = patient.attributes\n patientFullname = patAttribs.full_name\n patientCognitoId = patAttribs.cognito_id\n }\n\n let nameList = []\n if (patientFullname != null && patientFullname.length > 0) {\n nameList.push(patientFullname)\n } else if (patientCognitoId != null && patientCognitoId.length > 0) {\n nameList.push(patientCognitoId)\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n let name = nameList.join(' • ')\n\n const item = {\n uuid: attribs.uuid,\n name: name,\n requestType: requestType,\n requestTypeName: requestTypeName,\n createdAt: createdAt,\n date: createdAtDate,\n isBookmarked: attribs.is_bookmarked,\n isRequested: attribs.is_requested,\n isDownloaded: attribs.is_downloaded,\n isImported: attribs.is_imported,\n isProcessed: attribs.is_processed,\n shouldDownload: attribs.should_download,\n shouldImport: attribs.should_import,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n async parseDentistList({ items }) {\n const locales = \"da-DK\";\n let dentistList = []\n for (const i in items) {\n const item = items[i]\n const dentist = await this.parseDentist({ dentist: item })\n dentistList.push(dentist)\n }\n\n const dentistListSorted = dentistList.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase(), locales))\n return dentistListSorted\n },\n\n async parseSystemInitialList({ items }) {\n const locales = \"da-DK\";\n let systemInitialList = []\n for (const i in items) {\n const item = items[i]\n const attribs = item.attributes\n const value = attribs.value\n if (!value) {\n continue\n }\n const firstname = attribs.first_name\n const name = `${firstname} ${attribs.last_name}`\n const label = !firstname ? value : `${value} (${firstname})`\n const elem = {\n value: value,\n uuid: attribs.uuid,\n name: name,\n label: label,\n }\n systemInitialList.push(elem)\n }\n const systemInitialListSorted = systemInitialList.sort((a, b) => a.value.toLowerCase().localeCompare(b.value.toLowerCase(), locales))\n return systemInitialListSorted;\n },\n\n async parseTreatmentItemCollectionMeta(meta) {\n if (!meta) {\n return null;\n }\n\n const dentistListJson = meta.dentist_list ?? []\n const dentistList = await this.parseDentistList({ items: dentistListJson })\n\n const systemInitialListJson = meta.system_initials_list ?? []\n const systemInitialList = await this.parseSystemInitialList({ items: systemInitialListJson })\n\n const primaryTreatmentGroupList = meta.primary_treatment_group_list;\n\n return {\n dentistList: dentistList,\n systemInitialList: systemInitialList,\n primaryTreatmentGroupList: primaryTreatmentGroupList,\n }\n },\n\n isNumber(value) {\n return typeof value == 'number'\n },\n\n async parseTreatmentItemCollectionList(resources) {\n const items = []\n let i = 0\n for (i in resources) {\n const resource = resources[i]\n const item = await this.parseTreatmentItemCollection(resource)\n items.push(item)\n }\n return items\n },\n\n async parseTreatmentItemCollection(resource) {\n const options = { year: 'numeric', month: 'long', day: 'numeric' };\n\n const attribs = resource.attributes\n const relationships = resource.relationships\n\n const uuid = attribs.uuid\n const cognitoId = attribs.cognito_id\n const firstname = attribs.patient_first_name\n const lastname = attribs.patient_last_name\n const birthdate = attribs.patient_birthdate\n const phonenumber = attribs.patient_phone_number\n const email = attribs.patient_email\n\n const _noteLog = attribs.note_log\n const noteLog = this._parseLog({ dataList: _noteLog, type: 'note' })\n\n const _billedAtLog = attribs.billed_at_log\n const billedAtLog = this._parseLog({ dataList: _billedAtLog, type: 'billed_at' })\n\n const _journalChangeLog = attribs.journal_change_log\n const journalChangeLog = this._parseJournalChangeLog({ dataList: _journalChangeLog })\n\n const _pipelineChangeLog = attribs.pipeline_status_log\n const pipelineChangeLog = this._parseLog({\n dataList: _pipelineChangeLog,\n type: 'change_log',\n excludeTooSimilar: true,\n })\n\n let createdAt = null\n if (!!attribs.created_at) {\n createdAt = new Date(attribs.created_at)\n }\n let bookmarkedAt = null\n if (!!attribs.bookmarked_at) {\n bookmarkedAt = new Date(attribs.bookmarked_at)\n }\n let sentAt = null\n if (!!attribs.sent_at) {\n sentAt = new Date(attribs.sent_at)\n }\n let openedAt = null\n if (!!attribs.opened_at) {\n openedAt = new Date(attribs.opened_at)\n }\n let bookedAt = null\n if (!!attribs.booked_at) {\n bookedAt = new Date(attribs.booked_at)\n }\n let confirmedAt = null\n if (!!attribs.confirmed_at) {\n confirmedAt = new Date(attribs.confirmed_at)\n }\n let completedAt = null\n if (!!attribs.completed_at) {\n completedAt = new Date(attribs.completed_at)\n }\n let billedAt = null\n if (!!attribs.billed_at) {\n billedAt = new Date(attribs.billed_at)\n }\n let smsSentAt = null\n if (!!attribs.reminder_sms_sent_at) {\n smsSentAt = new Date(attribs.reminder_sms_sent_at)\n }\n let emailSentAt = null\n if (!!attribs.reminder_email_sent_at) {\n emailSentAt = new Date(attribs.reminder_email_sent_at)\n }\n let anySentAt = emailSentAt ?? smsSentAt;\n let autoUpdateAt = null\n if (!!attribs.pipeline_status_auto_updated_at) {\n autoUpdateAt = new Date(attribs.pipeline_status_auto_updated_at)\n }\n\n const hostedPatientLink = attribs.deeplink_to_web\n const prettyDate = createdAt.toLocaleDateString('da-DK', options);\n const displayName = `${firstname} ${lastname}`\n\n const _documents = relationships.documents.data\n const documentList = await this.parsePatientDocumentList({ docs: _documents })\n\n const _treatments = relationships.treatment_items.data\n const groupedTreatmentItemList = await this.groupTreatmentItemListByType({ data: _treatments })\n\n const _clinic = relationships.clinic.data\n const clinicAttribs = _clinic.attributes\n const clinicTitle = clinicAttribs.title\n const treatmentSmsTemplates = clinicAttribs.treatment_sms_templates ?? []\n const reminderSmsTemplates = clinicAttribs.reminder_sms_templates ?? []\n const reminderEmailTemplates = clinicAttribs.reminder_email_templates ?? []\n\n const _dentist = relationships.dentist.data\n let dentistUuid = null;\n let dentistName = ''\n if (!!_dentist) {\n const dentistAttribs = _dentist.attributes\n dentistUuid = dentistAttribs.uuid;\n dentistName = `${dentistAttribs.first_name} ${dentistAttribs.last_name}`\n }\n let dentistNameRaw = ''\n if (attribs.dentist_first_name_raw) {\n dentistNameRaw += attribs.dentist_first_name_raw\n }\n if (attribs.dentist_last_name_raw) {\n dentistNameRaw += ` ${attribs.dentist_last_name_raw}`\n }\n\n const prettySentAt = dateUtils.formatDateToDDMMYYYY({ date: sentAt });\n const prettyOpenedAt = dateUtils.formatDateToDDMMYYYY({ date: openedAt });\n const prettyBookmarkedAt = dateUtils.formatDateToDDMMYYYY({ date: bookmarkedAt });\n const prettyConfirmedAt = dateUtils.formatDateToDDMMYYYY({ date: confirmedAt });\n const prettyCompletedAt = dateUtils.formatDateToDDMMYYYY({ date: completedAt });\n const prettyBookedAt = dateUtils.formatDateToDDMMYYYY({ date: bookedAt });\n const prettyBilledAt = dateUtils.formatDateToDDMMYYYY({ date: billedAt });\n const prettySmsSentAt = dateUtils.formatDateToDDMMYYYY({ date: smsSentAt });\n const prettyEmailSentAt = dateUtils.formatDateToDDMMYYYY({ date: emailSentAt });\n const prettyAnySentAt = dateUtils.formatDateToDDMMYYYY({ date: anySentAt });\n const prettyAutoUpdateAt = dateUtils.formatDateToDDMMYYYY({ date: autoUpdateAt });\n const isSmsSentToday = dateUtils.isToday(smsSentAt)\n const isEmailSentToday = dateUtils.isToday(emailSentAt)\n const isSmsSentThisWeek = dateUtils.isThisIsoWeek(smsSentAt)\n const isEmailSentThisWeek = dateUtils.isThisIsoWeek(emailSentAt)\n const isAnySentToday = isSmsSentToday || isEmailSentToday;\n const isAnySentThisWeek = isSmsSentThisWeek || isEmailSentThisWeek;\n const daysAgo = this.daysAgo(createdAt);\n\n const _action = !relationships.automated_action ? null : relationships.automated_action.data;\n const action = _action == null ? null : this._parseAutomatedAction({ item: _action })\n\n const shareLogListJson = !relationships.share_logs ? [] : relationships.share_logs.data;\n const shareLogList = this._parseShareLogList({ payload: shareLogListJson })\n\n let commonList = [];\n if (shareLogList?.length) commonList.push(...shareLogList);\n if (noteLog?.length) commonList.push(...noteLog);\n\n const sortedCommonList = commonList.sort((a, b) => (b.ts ?? 0) - (a.ts ?? 0))\n\n const searchtext = `${displayName} ${dentistName} ${dentistNameRaw} ${birthdate}`.toLowerCase()\n\n const isReminderCallAny = attribs.is_reminder_call_any\n const isReminderMessageAny = attribs.is_reminder_message_any\n const isReminderAny = isReminderCallAny || isReminderMessageAny\n\n const item = {\n date: prettyDate,\n createdAt: createdAt,\n uuid: uuid,\n cognitoId: cognitoId,\n name: displayName,\n searchtext: searchtext,\n firstname: firstname,\n lastname: lastname,\n birthdate: birthdate,\n email: email,\n phonenumber: phonenumber,\n isSent: attribs.is_sent,\n sentAt: prettySentAt,\n isReceived: attribs.is_received,\n isOpened: attribs.is_opened,\n openedAt: prettyOpenedAt,\n openedCount: attribs.opened_count,\n isBooked: attribs.is_booked,\n bookedAt: prettyBookedAt,\n isConfirmed: attribs.is_confirmed,\n confirmedAt: prettyConfirmedAt,\n isCompleted: attribs.is_completed,\n completedAt: prettyCompletedAt,\n isBilled: attribs.is_billed,\n billedAt: prettyBilledAt,\n isBookmarked: attribs.is_bookmarked,\n isReminderAny: isReminderAny,\n isReminderCallAny: isReminderCallAny,\n isReminderMessageAny: isReminderMessageAny,\n bookmarkedAt: prettyBookmarkedAt,\n isAnySentToday: isAnySentToday,\n isAnySentThisWeek: isAnySentThisWeek,\n anySentAt: prettyAnySentAt,\n isSmsSentToday: isSmsSentToday,\n smsSentAt: prettySmsSentAt,\n isEmailSentToday: isEmailSentToday,\n emailSentAt: prettyEmailSentAt,\n hostedPatientLink: hostedPatientLink,\n documentList: documentList,\n groupedTreatmentItemList: groupedTreatmentItemList,\n uuidSms: uuid,\n uuidEmail: uuid,\n uuidCall: uuid,\n amountTotal: attribs.amount_total,\n amountTotalPlanned: attribs.amount_total_planned,\n amountTotalCompleted: attribs.amount_total_completed,\n status: attribs.pipeline_status,\n daysAgo: daysAgo,\n noteLog: noteLog,\n billedAtLog: billedAtLog,\n shareLogList: shareLogList,\n commonList: sortedCommonList,\n treatmentSmsTemplates: treatmentSmsTemplates,\n reminderSmsTemplates: reminderSmsTemplates,\n reminderEmailTemplates: reminderEmailTemplates,\n dentistUuid: dentistUuid,\n dentistName: dentistName,\n clinicTitle: clinicTitle,\n systemUserInitials: attribs.system_user_initials,\n action: action,\n journalChangeLog: journalChangeLog,\n pipelineChangeLog: pipelineChangeLog,\n autoUpdateAt: prettyAutoUpdateAt,\n didChangeThisWeek: attribs.did_pipeline_status_change_this_week,\n includeAutoReminderToPatient: attribs.include_auto_reminder_message_to_patient,\n }\n return item\n },\n\n async parseTreatmentItemList(resources) {\n const items = []\n let i = 0\n for (i in resources) {\n const resource = resources[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const _treatment = !!relationships.treatment ? relationships.treatment.data : null\n const _document = !!relationships.document ? relationships.document.data : null\n const _dentist = !!relationships.dentist ? relationships.dentist.data : null\n\n const uuid = attribs.uuid\n let createdAt = null\n if (!!attribs.created_at) {\n createdAt = new Date(attribs.created_at)\n }\n\n const treatment = await this.parseTreatmentOption({ option: _treatment })\n const treatmentGroup = await this.parseTreatmentGroupFromOption({ option: _treatment })\n const document = await this.parsePatientDocument({ doc: _document })\n const dentist = await this.parseDentist({ dentist: _dentist })\n\n const item = {\n createdAt: createdAt,\n uuid: uuid,\n title: attribs.title_da,\n document: document,\n treatment: treatment,\n group: treatmentGroup,\n dentist: dentist,\n price: attribs.price,\n type: attribs.type,\n isCompleted: attribs.is_completed,\n isBilled: attribs.is_billed,\n isPaid: attribs.is_paid,\n }\n items.push(item)\n }\n return items\n },\n\n daysAgo(date) {\n if (!date) {\n return null;\n }\n const now = new Date();\n const then = new Date(date);\n // Set both dates to midnight\n now.setHours(0, 0, 0, 0);\n then.setHours(0, 0, 0, 0);\n const timeDifference = Math.abs(now.getTime() - then.getTime());\n const daysDifference = Math.floor(timeDifference / (1000 * 60 * 60 * 24));\n return daysDifference;\n },\n\n async groupTreatmentItemListByType({ items }) {\n // Output:\n // {\n // 'documentUuid: str': {\n // precedence: int,\n // documentUuid: str\n // planned: List[Dict[str, Any]],\n // completed: List[Dict[str, Any]],\n // plannedPriceTotal: float,\n // completedPriceTotal: float,\n // },\n // ...\n // }\n const options = { year: 'numeric', month: 'long', day: 'numeric' };\n let groupedDict = {}\n for (let i in items) {\n const item = items[i]\n const attribs = item.attributes\n const relationships = item.relationships\n const treatment = relationships.treatment.data\n const document = relationships.document.data\n const uuid = attribs.uuid\n const uuidPrefix = uuid.slice(0, 6)\n const createdAt = new Date(attribs.created_at)\n const prettyDate = createdAt.toLocaleDateString('da-DK', options);\n const itemType = attribs.type;\n const documentUuid = document?.attributes.uuid ?? ''\n\n let price = attribs.price\n if (!this.isNumber(price)) {\n price = 0\n }\n let coveragePublic = attribs.coverage_public\n if (!this.isNumber(coveragePublic)) {\n coveragePublic = 0\n }\n let coverageDanmark = attribs.coverage_danmark\n if (!this.isNumber(coverageDanmark)) {\n coverageDanmark = 0\n }\n let coverageDanmarkMax = attribs.coverage_danmark_max\n if (!this.isNumber(coverageDanmarkMax)) {\n coverageDanmarkMax = 0\n }\n\n let displayImage = null\n let titleLookup = null\n let recapDescriptionLookup = null\n if (treatment !== null) {\n const treatmentAttribs = treatment.attributes\n displayImage = treatmentAttribs.display_image\n // IMPORTANT: Using raw strings during development here.\n // TODO: Use `title_lookup` etc.\n titleLookup = treatmentAttribs.title_da\n recapDescriptionLookup = treatmentAttribs.recap_description_da\n }\n let current = groupedDict[documentUuid] ?? {}\n current.documentUuid = documentUuid\n current.precedence = 0 // TODO: update\n let currentList\n if (itemType === TREATMENT_TYPE__PLANNED) {\n currentList = current.planned ?? []\n } else if (itemType === TREATMENT_TYPE__COMPLETED) {\n currentList = current.completed ?? []\n }\n currentList.push({\n uuid: uuid,\n uuidPrefix: uuidPrefix,\n date: prettyDate,\n createdAt: createdAt,\n itemType: itemType,\n isScanned: true, // NOTE: Currently hardcoded\n title: attribs.title,\n price: price,\n coveragePublic: coveragePublic,\n coverageDanmark: coverageDanmark,\n coverageDanmarkMax: coverageDanmarkMax,\n precedence: attribs.precedence,\n displayImage: displayImage,\n titleLookup: titleLookup,\n recapDescriptionLookup: recapDescriptionLookup,\n })\n if (itemType === TREATMENT_TYPE__PLANNED) {\n current.planned = currentList\n let _total = current.plannedPriceTotal ?? 0\n current.plannedPriceTotal = _total + price\n } else if (itemType === TREATMENT_TYPE__COMPLETED) {\n current.completed = currentList\n let _total = current.completedPriceTotal ?? 0\n current.completedPriceTotal = _total + price\n }\n if (current.planned === undefined) {\n current.planned = []\n }\n if (current.completed === undefined) {\n current.completed = []\n }\n if (current.plannedPriceTotal === undefined) {\n current.plannedPriceTotal = 0\n }\n if (current.completedPriceTotal === undefined) {\n current.completedPriceTotal = 0\n }\n groupedDict[documentUuid] = current\n }\n return groupedDict\n },\n\n async parsePatientDocumentList({ docs }) {\n let _documents = []\n for (let i in docs) {\n const doc = docs[i]\n const resource = await this.parsePatientDocument({ doc: doc })\n _documents.push(resource)\n }\n return _documents\n },\n\n async parsePatientDocument({ doc }) {\n const options = { year: 'numeric', month: 'long', day: 'numeric' };\n const attribs = doc.attributes\n const uuid = attribs.uuid\n const uuidPrefix = uuid.slice(0, 6)\n const issuedAt = new Date(attribs.issued_at)\n const prettyDate = issuedAt.toLocaleDateString('da-DK', options);\n const isOpened = attribs.is_opened_list\n const documentType = attribs.document_type\n const url = attribs.url\n const _options = [...PatientDocumentOptions]\n let option = _options[0]\n for (let i in _options) {\n const _option = _options[i]\n if (_option.value === documentType) {\n option = _option\n break\n }\n }\n let readableDocumentType = i18n.t(option.title)\n let resource = {\n uuid: uuid,\n uuidPrefix: uuidPrefix,\n url: url,\n date: prettyDate,\n issuedAt: issuedAt,\n isSent: true, // NOTE: Currently hardcoded on this list\n isReceived: true,\n isOpened: isOpened,\n documentType: documentType,\n readableDocumentType: readableDocumentType,\n }\n return resource\n },\n\n _parseAutomatedAction({ item }) {\n const attribs = item.attributes\n const isPending = attribs.is_pending ?? false\n const isPendingAnyAmount = attribs.is_pending_any_amount ?? isPending\n const isPrevThisWeek = attribs.is_prev_this_week\n const isBelowAmount = attribs.is_below_amount\n const actionType = attribs.action_type\n let prevRegisteredAt = null\n if (!!attribs.prev_registered_at) {\n prevRegisteredAt = new Date(attribs.prev_registered_at)\n }\n let prevScheduledAt = null\n if (!!attribs.prev_scheduled_at) {\n prevScheduledAt = new Date(attribs.prev_scheduled_at)\n }\n let nextScheduledAt = null\n if (!!attribs.next_scheduled_at) {\n nextScheduledAt = new Date(attribs.next_scheduled_at)\n }\n\n const prettyPrevRegisteredAt = dateUtils.formatDateToDDMMYYYY({ date: prevRegisteredAt });\n const prettyPrevScheduledAt = dateUtils.formatDateToDDMMYYYY({ date: prevScheduledAt });\n const prettyNextScheduledAt = dateUtils.formatDateToDDMMYYYY({ date: nextScheduledAt });\n\n let resource = {\n uuid: attribs.uuid,\n title: attribs.title,\n description: attribs.description,\n isPending: isPending,\n isPendingAnyAmount: isPendingAnyAmount,\n isPrevThisWeek: isPrevThisWeek,\n actionType: actionType,\n isBelowAmount: isBelowAmount,\n prevRegisteredAt: prettyPrevRegisteredAt,\n prevScheduledAt: prettyPrevScheduledAt,\n nextScheduledAt: prettyNextScheduledAt,\n }\n\n return resource\n },\n\n async parseTreatmentOption({ option }) {\n if (!option) {\n return null\n }\n const attribs = option.attributes\n let group = await this.parseTreatmentGroupFromOption({ option })\n let resource = {\n uuid: attribs.uuid,\n title: attribs.title_da,\n precedence: attribs.precedence ?? 0,\n group: group,\n }\n return resource\n },\n\n async parseDentist({ dentist }) {\n if (!dentist) {\n return null\n }\n const attribs = dentist.attributes\n const firstname = attribs.first_name\n const lastname = attribs.last_name\n let resource = {\n uuid: attribs.uuid,\n name: `${firstname} ${lastname}`,\n firstname: firstname,\n lastname: lastname,\n title: attribs.title,\n email: attribs.email,\n }\n return resource\n },\n\n async parseTreatmentGroupFromOption({ option }) {\n if (!option) {\n return null\n }\n const relationships = option.relationships\n const groupData = !!relationships.group ? relationships.group.data : null\n const group = await this.parseTreatmentGroup({ group: groupData })\n return group\n },\n\n async parseTreatmentGroup({ group }) {\n if (!group) {\n return null;\n }\n const attribs = group.attributes\n let resource = {\n uuid: attribs.uuid,\n title: attribs.title_da,\n precedence: attribs.precedence ?? 0,\n }\n return resource\n },\n\n async parseTreatmentGroupList({ items }) {\n if (!items) {\n return null\n }\n let groupList = []\n for (let i in items) {\n const item = items[i]\n groupList.push(this.parseTreatmentGroup({ group: item }))\n }\n return groupList\n },\n\n async groupByTreatmentOption({\n items,\n key = 'treatment',\n fallbackTitle = 'ٴ Øvrig: Uden kategori', // NOTE: See @sortprefix\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const category = item[key]\n const categoryUuid = !category ? 'fallback' : category.uuid\n const categoryTitle = !category ? fallbackTitle : category.title\n const categoryPrecedence = !category ? 0 : (category.precedence ?? 0)\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList = []\n for (let uuid in groupDict) {\n asList.push(groupDict[uuid])\n }\n const locales = \"da-DK\";\n return asList.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase(), locales))\n },\n\n async groupByDate({ items }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const createdAt = item.createdAt\n if (!createdAt) {\n continue;\n }\n const categoryUuid = dateUtils.formatDateToYYYYMMDD({ date: createdAt })\n const categoryTitle = dateUtils.formatDateToDDMMYYYY({ date: createdAt })\n const categoryPrecedence = 0 // TODO: Add if needed\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList = []\n for (let uuid in groupDict) {\n asList.push(groupDict[uuid])\n }\n const locales = \"da-DK\";\n return asList.sort((a, b) => a.uuid.toLowerCase().localeCompare(b.uuid.toLowerCase(), locales))\n },\n\n async groupByTotalSumTreatment({ items }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const createdAt = item.createdAt\n if (!createdAt) {\n continue;\n }\n const categoryUuid = 'total'\n const categoryTitle = 'I alt'\n const categoryPrecedence = 0\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList = []\n for (let uuid in groupDict) {\n asList.push(groupDict[uuid])\n }\n return asList\n },\n\n async groupByTotalSumDocument({ items }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const createdAt = item.createdAt\n if (!createdAt) {\n continue;\n }\n const categoryUuid = 'total'\n const categoryTitle = 'I alt'\n const categoryPrecedence = 0\n\n groupDict = await this._addToGroupDocumentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList = []\n for (let uuid in groupDict) {\n asList.push(groupDict[uuid])\n }\n return asList\n },\n\n async groupByDateFlattenValue({ items }) {\n let newList = []\n for (let i in items) {\n const item = items[i]\n newList.push(item.amountTotalPlanned)\n }\n return newList\n },\n\n async groupByDateFlattenLabel({ items }) {\n let newList = []\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const isFirst = i === 0\n const isLast = i === items.length - 1\n if (isFirst || isLast) {\n newList.push(item.uuid)\n } else {\n newList.push('-')\n }\n }\n return newList\n },\n\n async groupByTreatmentGroup({\n items,\n key = 'group',\n fallbackTitle = 'ٴ Øvrig: Uden kategori', // NOTE: See @sortprefix\n allowSubgroup = false,\n primarySubgroupKey = 'byDentist',\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const category = item[key]\n const categoryUuid = !category ? 'fallback' : category.uuid\n const categoryTitle = !category ? fallbackTitle : category.title\n const categoryPrecedence = !category ? 0 : (category.precedence ?? 0)\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n\n let asList0 = []\n for (let uuid in groupDict) {\n asList0.push(groupDict[uuid])\n }\n\n let asList1 = []\n for (let j in asList0) {\n const elem = asList0[j]\n if (allowSubgroup) {\n const byDentist = await this.groupByDentist({\n items: elem.items,\n allowSubgroup: false,\n })\n elem['byDentist'] = byDentist\n elem['subgroup'] = elem[primarySubgroupKey]\n }\n asList1.push(elem)\n }\n\n const locales = \"da-DK\";\n return asList1.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase(), locales))\n },\n\n async _addToGroupTreatmentDict({\n item,\n groupDict,\n categoryUuid,\n categoryTitle,\n categoryPrecedence,\n }) {\n let newGroupDict = groupDict\n\n const isCompleted = item.isCompleted ?? false;\n const isBilled = item.isBilled ?? false;\n const isPaid = item.isPaid ?? false;\n const amount = item.price ?? 0\n\n const curr = newGroupDict[categoryUuid] ?? {}\n let amountTotalPlanned = curr.amountTotalPlanned ?? 0\n let amountTotalCompleted = curr.amountTotalCompleted ?? 0\n let amountTotalBilled = curr.amountTotalBilled ?? 0\n let amountTotalPaid = curr.amountTotalPaid ?? 0\n\n let countPlanned = curr.countPlanned ?? 0\n let countCompleted = curr.countCompleted ?? 0\n let countBilled = curr.countBilled ?? 0\n let countPaid = curr.countPaid ?? 0\n\n amountTotalPlanned += amount;\n countPlanned += 1\n if (isCompleted === true) {\n countCompleted += 1\n amountTotalCompleted += amount\n }\n if (isBilled === true) {\n countBilled += 1\n amountTotalBilled += amount\n }\n if (isPaid === true) {\n countPaid += 1\n amountTotalPaid += amount\n }\n\n let items = curr.items ?? []\n items.push(item) // NOTE: Adds reference to components used\n\n const entry = {\n title: categoryTitle,\n uuid: categoryUuid,\n amountTotalPlanned: amountTotalPlanned,\n amountTotalCompleted: amountTotalCompleted,\n amountTotalBilled: amountTotalBilled,\n amountTotalPaid: amountTotalPaid,\n countPlanned: countPlanned,\n countCompleted: countCompleted,\n countBilled: countBilled,\n countPaid: countPaid,\n precedence: categoryPrecedence,\n items: items,\n }\n newGroupDict[categoryUuid] = entry\n return newGroupDict\n },\n\n async _addToGroupDocumentDict({\n item,\n groupDict,\n categoryUuid,\n categoryTitle,\n categoryPrecedence,\n }) {\n let newGroupDict = groupDict\n\n const curr = newGroupDict[categoryUuid] ?? {}\n let amountNew = item.amountTotal ?? 0\n let amountTotal = curr.amountTotal ?? 0\n\n let count = curr.count ?? 0\n\n amountTotal += amountNew;\n count += 1\n\n let items = curr.items ?? []\n items.push(item) // NOTE: Adds reference to components used\n\n let precedenceOrFallback = categoryPrecedence\n if (categoryPrecedence === null) {\n precedenceOrFallback = amountTotal + count\n }\n\n const entry = {\n title: categoryTitle,\n uuid: categoryUuid,\n amountTotal: amountTotal,\n count: count,\n precedence: Math.ceil(precedenceOrFallback),\n items: items,\n }\n newGroupDict[categoryUuid] = entry\n return newGroupDict\n },\n\n async groupBySystemInitial({\n items,\n allowSubgroup = false,\n fallbackTitle = 'ٴ Ukendt', // NOTE: See @sortprefix\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const categoryUuid = !item.systemInitial ? 'fallback' : item.systemInitial\n const categoryTitle = !item.systemInitial ? fallbackTitle : item.systemInitial\n const categoryPrecedence = null // NOTE: Infers in function below\n\n groupDict = await this._addToGroupDocumentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList0 = []\n for (let uuid in groupDict) {\n asList0.push(groupDict[uuid])\n }\n\n const locales = \"da-DK\";\n return asList0.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase(), locales))\n },\n\n async groupByDentist({\n items,\n key = 'dentist',\n fallbackTitle = 'ٴ Øvrig/Ukendt', // NOTE: See @sortprefix\n allowSubgroup = false,\n primarySubgroupKey = 'byGroup',\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const category = item[key]\n const categoryUuid = !category ? 'fallback' : category.uuid\n const categoryTitle = !category ? fallbackTitle : (category.name ?? '')\n const categoryPrecedence = !category ? 0 : (category.precedence ?? 0)\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList0 = []\n for (let uuid in groupDict) {\n asList0.push(groupDict[uuid])\n }\n\n let asList1 = []\n for (let j in asList0) {\n const elem = asList0[j]\n if (allowSubgroup) {\n const byGroup = await this.groupByTreatmentGroup({\n items: elem.items,\n allowSubgroup: false,\n })\n elem['byGroup'] = byGroup\n elem['subgroup'] = elem[primarySubgroupKey]\n }\n asList1.push(elem)\n }\n\n const locales = \"da-DK\";\n return asList1.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase(), locales))\n },\n\n _parseLog({ dataList, type, excludeTooSimilar = false }) {\n if (!dataList) {\n return []\n }\n let newList = []\n let _similarityStrList = []\n for (let item of dataList) {\n if (!item) {\n continue\n }\n if (!item.timestamp) {\n continue\n }\n const timestamp = new Date(item.timestamp)\n const ts = timestamp.getTime()\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: timestamp });\n const title = item.title\n const subtitle = item.subtitle\n const description = item.recap_description\n const body = item.note\n const similarityStr = `${prettyCreatedAt}:${title}:${subtitle}:${description}`\n if (excludeTooSimilar && _similarityStrList.includes(similarityStr)) {\n continue\n }\n const elem = {\n uuid: item.uuid,\n timestamp: timestamp,\n ts: ts,\n type: type,\n body: body,\n prettyCreatedAt: prettyCreatedAt,\n title: title,\n subtitle: subtitle,\n description: description,\n }\n newList.push(elem)\n _similarityStrList.push(similarityStr)\n }\n return newList.sort((a, b) => b.ts - a.ts);\n },\n\n _parseJournalChangeLog({ dataList, excludeTooSimilar = true }) {\n if (!dataList) {\n return []\n }\n let newList = []\n let _similarityStrList = []\n for (let item of dataList) {\n if (!item) {\n continue\n }\n if (!item.timestamp) {\n continue\n }\n const timestamp = new Date(item.timestamp)\n const ts = timestamp.getTime()\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: timestamp });\n const title = item.title\n const subtitle = item.subtitle\n const description = item.recap_description\n const similarityStr = `${prettyCreatedAt}:${title}:${subtitle}:${description}`\n if (excludeTooSimilar && _similarityStrList.includes(similarityStr)) {\n continue\n }\n const elem = {\n uuid: item.uuid,\n timestamp: timestamp,\n ts: ts,\n type: item.type,\n prettyCreatedAt: prettyCreatedAt,\n title: title,\n subtitle: subtitle,\n description: description,\n }\n newList.push(elem)\n _similarityStrList.push(similarityStr)\n }\n return newList.sort((a, b) => b.ts - a.ts);\n },\n}\n\nexport default parserUtils\n\nfunction isValidDate(d) {\n return d instanceof Date && !isNaN(d);\n}"],"sourceRoot":""}