{"version":3,"file":"SpatialInput.vue.mjs","sources":["../../../lib/data-provider-interface/components/SpatialInput.vue"],"sourcesContent":["<script setup>\n\nimport { ref, reactive, watch, computed, onBeforeMount, onMounted, nextTick, watchEffect } from 'vue';\nimport { useStore } from 'vuex';\nimport { getTranslationFor } from \"../../utils/helpers\";\nimport { onClickOutside, whenever } from '@vueuse/core'\nimport { getCurrentInstance } from \"vue\";\nimport { useRoute } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport { useTed } from '../../composables/useTed';\nimport { useAutocomplete } from '../composables/aucotomplete';\nimport { useRequestUriName } from '../composables/useRequestUriName';\nimport { useDpiContext } from '../composables';\n\n\nlet instance = getCurrentInstance().appContext.app.config.globalProperties.$env\nlet route = useRoute();\nconst dpiContext = useDpiContext();\n\nconst props = defineProps({\n    context: Object,\n})\n\nconst { requestAutocompleteSuggestions } = useAutocomplete()\n\n// let listOfVoc: [{ item: 'Country', active: false }, { item: 'Place', active: false }, { item: 'Continent', active: false }],\nlet listOfVoc = ref([])\nconst typeText = ref('')\nlet inputText = ref({})\nlet voc = ref({})\nlet matches = ref({})\nlet manURL = ref({})\nconst store = useStore();\nconst { t, locale } = useI18n({ inheritLocale: true, useScope: 'global' });\nconst ted = useTed();\n\nconst man = ref(false)\nconst vocSearch = ref(false)\n\nconst isEdit = computed(() => !!dpiContext.value.edit?.enabled)\nconst resourceNameWhenEditing = computed(() => !!isEdit.value && props.context.value.resource)\n// e.g. extract \"municipalityKey\" (second to last) out of resourceName\nconst keyFromResourceName = computed(() => {\n    if (resourceNameWhenEditing.value) {\n        return resourceNameWhenEditing.value.split('/')[resourceNameWhenEditing.value.split('/').length - 2]\n    }\n    return ''\n})\nconst spatialVocabName = computed(() => {\n  if (!keyFromResourceName.value) {\n    return ''\n  }\n\n  const maybePrefix = props.context.attrs.identifier === 'politicalGeocodingURI'\n    ? 'political-geocoding-'\n    // todo: extend this for other vocabularies\n    : ''\n\n  // transform key from camelCase to kebab-case\n  const vocabKey = keyFromResourceName.value.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n  return `${maybePrefix}${vocabKey}`\n})\n\nconst translatedResourceName = computed(() => {\n  // transform key 'districtKey' to 'District Key'\n  const vocabKey = keyFromResourceName.value.replace(/([a-z])([A-Z])/g, '$1 $2').toLowerCase()\n  // make first letters of each word uppercase\n  const vocabKeyUpper = vocabKey.split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ')\n  return t(`message.dataupload.datasets.conditional.${vocabKeyUpper}`)\n})\n\nconst { execute, state, isLoading } = useRequestUriName({\n  voc: spatialVocabName,\n  res: computed(() => props.context.value.resource),\n  // property: 'dcatde:politicalGeocodingURI',\n  property: computed(() => props.context.attrs.identifier === 'politicalGeocodingURI' ? 'dcatde:politicalGeocodingURI' : 'dct:spatial'),  \n  locale,\n})\n\nconst restoredValueFromEditMode = computed(() => {\n  if (isEdit.value && !isLoading.value && resourceNameWhenEditing.value && state.value) {\n    return `${translatedResourceName.value}: ${state.value} (${resourceNameWhenEditing.value.split('/').pop()})`\n  }\n\n  return ''\n})\n\nconst once = ref(false)\nwatchEffect(() => {\n  if (once.value) return;\n\n  if (!!resourceNameWhenEditing.value) {\n    once.value = true\n    execute()\n  }\n}, { immediate: true })\n\nwhenever(restoredValueFromEditMode, () => {\n  const v = { name: restoredValueFromEditMode.value, resource: resourceNameWhenEditing.value }\n  props.context.node.input(v)\n})\n\n// If true, then:\n// - hides the select input for manual and vocabulary\n// - pre-selects the vocabulary option\n// When using formkit schema, enable this option by setting vocabularyOnly to true\n// {\n//     $formkit: 'spatialinput',\n//     name: 'dcatde:politicalGeocodingURI',\n//     identifier: 'politicalGeocodingURI',\n//     vocabularyOnly: true,\n// }\nconst vocabularyOnly = computed(() => !!props.context?.attrs?.vocabularyOnly)\n\nif (props.context.attrs.identifier === 'politicalGeocodingURI') {\n    listOfVoc.value.push(\n        { item: 'Municipality Key', active: false, placeholder: ted('message.dataupload.datasets.conditional.Municipality Key', 'Municipality Key') },\n        { item: 'Regional Key', active: false, placeholder: ted('message.dataupload.datasets.conditional.Regional Key', 'Regional Key') },\n        { item: 'Municipal Association Key', active: false, placeholder: ted('message.dataupload.datasets.conditional.Municipal Association Key', 'Municipal Association Key') },\n        { item: 'District Key', active: false, placeholder: ted('message.dataupload.datasets.conditional.District Key', 'District Key') },\n        { item: 'Government District Key', active: false, placeholder: ted('message.dataupload.datasets.conditional.Government District Key', 'Government District Key') },\n        { item: 'State Key', active: false, placeholder: ted('message.dataupload.datasets.conditional.State Key', 'State Key') },\n    )\n\n}\nif (props.context.attrs.identifier === 'spatial') {\n    listOfVoc.value.push(\n        { item: 'Country', active: false, placeholder: ted('message.dataupload.datasets.conditional.Country', 'Country') },\n        { item: 'Place', active: false, placeholder: ted('message.dataupload.datasets.conditional.Place', 'Place') },\n        { item: 'Continent', active: false, placeholder: ted('message.dataupload.datasets.conditional.Continent', 'Continent') },\n    )\n}\n\nwatch(inputText, async () => {\n    getAutocompleteSuggestions();\n})\nwatch(voc, async (newValue, oldValue) => {\n    if (newValue === oldValue) { return }\n    voc.value = voc.value.toLowerCase();\n})\nwatch(manURL, async () => {\n    props.context.node.input({ 'name': manURL, 'resource': manURL })\n})\nonMounted(async () => {\n    matches = [{ name: ted('message.dataupload.info.searchVocabulary', '--- Type in anything for a live search of the vocabulary ---').value, resource: 'invalid' }]\n\n    await nextTick()\n    // DOM loaded\n    if (props.context.value.name === undefined || props.context.value.name === \"\") {\n        showTable.activeValue = false\n    } else showTable.activeValue = true\n    // console.log(showTable.activeValue);\n\n    if (vocabularyOnly.value) {\n        activeInput('showTable'); vocSearch.value = true; if (man.value) { man.value = false }\n    }\n\n});\n\nfunction closeAll() {\n    listOfVoc.value.forEach(element => {\n        element.active = false;\n    });\n}\nfunction removeProperty(e) {\n    //   props.context.value = {}\n    showTable.activeValue = false\n    props.context.node.input({})\n}\nfunction saveToLocal(el) {\n\n    let pathToLocalStorage = JSON.parse(localStorage.getItem(`dpi_${route.params.property}`));\n    let arr\n    if (props.context.attrs.identifier === 'politicalGeocodingURI') {\n        arr = pathToLocalStorage.Advised['dcatde:politicalGeocodingURI'];\n    }\n    else arr = pathToLocalStorage.Advised['dct:spatial'];\n\n    arr.forEach((element, index) => {\n        if (Object.keys(element).length === 0) {\n            arr.splice(index, 1)\n        }\n    })\n    arr.push(props.context.node._value)\n    if (props.context.attrs.identifier === 'politicalGeocodingURI') {\n        pathToLocalStorage.Advised['dcatde:politicalGeocodingURI'] = arr\n    }\n    else pathToLocalStorage.Advised['dct:spatial'] = arr\n\n    localStorage.setItem(`dpi_${route.params.property}`, JSON.stringify(pathToLocalStorage))\n}\nconst getAutocompleteSuggestions = async () => {\n\n    let vocCache = voc.value?.toLowerCase()\n\n    if (props.context.attrs.identifier === 'politicalGeocodingURI') {\n\n        vocCache = 'political-geocoding-' + vocCache.toLowerCase().replaceAll(\" \", '-')\n\n        try {\n            let text = inputText.value;\n            await requestAutocompleteSuggestions({ voc: vocCache, text: text, base: instance.api.baseUrl }).then((response) => {\n                const results = response.data.result.results.map((r) => ({\n                    name: getTranslationFor(r.alt_label, locale.value, []) + \" (\" + r.id + \")\",\n                    resource: r.resource,\n                }));\n                matches = results;\n            });\n        } catch (error) {\n        }\n    }\n    else {\n        try {\n            let text = inputText.value;\n            await requestAutocompleteSuggestions({ voc: vocCache, text: text, base: instance.api.baseUrl }).then((response) => {\n                const results = response.data.result.results.map((r) => ({\n                    name: getTranslationFor(r.pref_label, locale.value, []) + \" (\" + r.id + \")\",\n                    resource: r.resource,\n                }));\n                matches = results;\n            });\n        } catch (error) {\n        }\n    }\n\n}\n\nvar showTable = reactive({\n    first: false,\n    second: false,\n    third: false,\n    activeValue: false\n})\n\nconst I1 = ref(null);\nconst I2 = ref(null);\nconst I3 = ref(null);\n\nonClickOutside(I1, event => showTable.first = false)\nonClickOutside(I2, event => showTable.second = false)\nonClickOutside(I3, event => showTable.third = false)\nfunction activeInput(e) {\n\n    // console.log('in', showTable);\n    if (e === \"showTable\") showTable.first = !showTable.first;\n    if (e === \"showVocTable\") showTable.second = !showTable.second;\n    if (e === \"showVocEntries\") {\n        if (showTable.third === true) {\n        }\n        else showTable.third = !showTable.third;\n    }\n}\nfunction manURLInput(e) {\n    props.context.node.input({ 'name': e.target.value, 'resource': e.target.value })\n}\n\nfunction handleSpatielListClick(el) {\n  props.context.node.input(el);\n  inputText.value = el.name;\n  activeInput('showVocEntries');\n  showTable.third = false;\n  saveToLocal(el)\n}\n\nfunction submitType() {\n    activeInput('showVocTable');\n\n}\n// console.log(voc);\n</script>\n\n<template>\n    <div class=\"d-flex flex-column w-100 spatialWrap\">\n        <div class=\"d-flex formkit-inner mx-3 mb-3\" v-if=\"!props.context.attrs.multiple && showTable.activeValue\">\n            <!-- <div class=\"infoI\">\n                <div class=\"tooltipFormkit\">{{ props.context.attrs.info }}</div>\n            </div> -->\n            <a class=\"autocompleteInputSingleValue \">{{ restoredValueFromEditMode }}</a>\n            <div class=\"removeX\" @click=\"removeProperty\"></div>\n        </div>\n        <div v-else>\n            <div class=\" w-100 d-flex\">\n                <div v-if=\"!vocabularyOnly\" class=\"d-flex position-relative m-3 w-100\">\n                    <label class=\"w-100\"> {{ $t('message.dataupload.info.preferredInput') }}\n                        <input id=\"I1\" type=\"text\" class=\"selectInputField formkit-inner\" readonly=\"readonly\"\n                            :placeholder=\"$t('message.dataupload.info.preferredInput')\"\n                            @click=\"activeInput('showTable')\" />\n                    </label>\n\n                    <ul ref=\"I1\" v-show=\"showTable.first\" class=\"spatialListUpload\">\n                        <li @click=\"activeInput('showTable'); man = true; if (vocSearch) { vocSearch = false; };\"\n                            class=\"p-2 border-b border-gray-200 choosableItemsAC\">\n                            {{ $t('message.dataupload.datasets.conditional.manually') }}\n                        </li>\n                        <li @click=\"activeInput('showTable'); vocSearch = true; if (man) { man = false }\"\n                            class=\"p-2 border-b border-gray-200 choosableItemsAC\">\n                            {{ $t('message.dataupload.datasets.conditional.vocabulary') }}\n                        </li>\n                    </ul>\n                </div>\n                <div v-if=\"man\" class=\"d-flex position-relative m-3 w-100\">\n                    <label class=\"w-100\">\n                        <!-- todo: I borrowed this from another input. Maybe refactor? -->\n                        {{ $te('message.dataupload.datasets.isReferencedByUrl.placeholder') ? $t('message.dataupload.datasets.isReferencedByUrl.placeholder') : 'Provide an URL' }}\n                        <input type=\"URL\" class=\"selectInputField formkit-inner\" placeholder=\"URL\"\n                            @input=\"manURLInput($event)\">\n                    </label>\n                </div>\n                <div v-if=\"vocSearch\" class=\"d-flex position-relative m-3 w-100\">\n                    <!-- todo: I borrowed this from another input. Maybe refactor? -->\n                    <label class=\"w-100\"> {{ $te('message.dataupload.datasets.contributorType.placeholder') ? $t('message.dataupload.datasets.contributorType.placeholder') : 'Choose type of vocabulary' }} \n                        <input id=\"I2\" type=\"text\" class=\"selectInputField formkit-inner\" readonly=\"readonly\" v-model=\"typeText\"\n                            :placeholder=\"$te('message.dataupload.datasets.accessRights.placeholder') ? $t('message.dataupload.datasets.accessRights.placeholder') : 'Choose type of vocabulary'\" @click=\"activeInput('showVocTable');\">\n                    </label>\n                    <ul ref=\"I2\" v-if=\"showTable.second\" class=\"spatialListUpload\">\n                        <li v-for=\"el in listOfVoc\" :key=\"el\" class=\"p-2 border-b border-gray-200 choosableItemsAC\"\n                            @click=\" closeAll(); el.active = !el.active; activeInput('showVocTable'); inputText = ''; voc = el.item; typeText = el.placeholder\">\n                            {{ $t('message.dataupload.datasets.conditional.' + el.item) }}</li>\n                    </ul>\n                </div>\n            </div>\n            <div class=\"m-3\" v-if=\"vocSearch\">\n                <div v-for=\"el in listOfVoc\" :key=\"el\" class=\"position-relative\">\n                    <label class=\"w-100\" v-if=\"el.active\">\n                    <!-- todo: I borrowed this from another input. Maybe refactor? -->\n                    <!-- {{ $te('message.dataupload.datasets.accessRights.placeholder') ? $t('message.dataupload.datasets.accessRights.placeholder') : 'Choose type of vocabulary' }}  -->\n                    {{ el.placeholder ? el.placeholder : $t('message.dataupload.datasets.conditional.' + el.item) }}\n                        <input id=\"I3\" type=\"text\"\n                            v-model=\"inputText\" class=\"selectInputField formkit-inner\" :placeholder=\"$te('message.dataupload.datasets.accessRights.placeholder') ? $t('message.dataupload.datasets.accessRights.placeholder') : 'Choose type of vocabulary'\"\n                            @click=\"activeInput('showVocEntries'); inputText = ''\"\n                        >\n                    </label>\n                    <ul ref=\"I3\" v-if=\"showTable.third && el.active\" class=\"spatialListUpload\">\n                        <li v-for=\"el in matches\" :key=\"el\" class=\"p-2 border-b border-gray-200 choosableItemsAC\"\n                            @click=\"handleSpatielListClick(el)\">\n                            {{ el.name }}</li>\n                    </ul>\n                </div>\n\n            </div>\n\n        </div>\n    </div>\n</template>\n\n<script>\n\n</script>\n\n<style lang=\"scss\" scoped>\n.spatialWrap label {\n    font-family: var(--fk-font-family-label);\n    font-size: var(--fk-font-size-label);\n    font-weight: var(--fk-font-weight-label);\n    line-height: var(--fk-line-height-label);\n}\n\n.spatialWrap {\n    .spatialListUpload {\n        width: 100%;\n        left: 0;\n        top: 78px;\n    }\n}\n</style>\n"],"names":["instance","getCurrentInstance","route","useRoute","dpiContext","useDpiContext","props","__props","requestAutocompleteSuggestions","useAutocomplete","listOfVoc","ref","typeText","inputText","voc","matches","manURL","useStore","t","locale","useI18n","ted","useTed","man","vocSearch","isEdit","computed","_a","resourceNameWhenEditing","keyFromResourceName","spatialVocabName","maybePrefix","vocabKey","translatedResourceName","vocabKeyUpper","word","execute","state","isLoading","useRequestUriName","restoredValueFromEditMode","once","watchEffect","whenever","v","vocabularyOnly","_b","watch","getAutocompleteSuggestions","newValue","oldValue","onMounted","nextTick","showTable","activeInput","closeAll","element","removeProperty","e","saveToLocal","el","pathToLocalStorage","arr","index","vocCache","text","response","r","getTranslationFor","reactive","I1","I2","I3","onClickOutside","event","manURLInput","handleSpatielListClick","_openBlock","_createElementBlock","_hoisted_1","_unref","_hoisted_2","_createElementVNode","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","$t","_vShow","_hoisted_9","_hoisted_10","$te","_cache","$event","_hoisted_11","_hoisted_12","_Fragment","_renderList","_isRef","_hoisted_14","_hoisted_15","_hoisted_16","_createTextVNode","_hoisted_18"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,QAAIA,IAAWC,GAAkB,EAAG,WAAW,IAAI,OAAO,iBAAiB,MACvEC,IAAQC,GAAQ;AACpB,UAAMC,IAAaC,GAAa,GAE1BC,IAAQC,GAIR,EAAE,gCAAAC,EAAgC,IAAGC,GAAgB;AAG3D,QAAIC,IAAYC,EAAI,EAAE;AACtB,UAAMC,IAAWD,EAAI,EAAE;AACvB,QAAIE,IAAYF,EAAI,EAAE,GAClBG,IAAMH,EAAI,EAAE,GACZI,IAAUJ,EAAI,EAAE,GAChBK,IAASL,EAAI,EAAE;AACL,IAAAM,GAAU;AACxB,UAAM,EAAE,GAAAC,GAAG,QAAAC,EAAQ,IAAGC,GAAQ,EAAE,eAAe,IAAM,UAAU,SAAQ,CAAE,GACnEC,IAAMC,GAAM,GAEZC,IAAMZ,EAAI,EAAK,GACfa,IAAYb,EAAI,EAAK,GAErBc,IAASC,EAAS;;AAAM,cAAC,GAACC,IAAAvB,EAAW,MAAM,SAAjB,QAAAuB,EAAuB;AAAA,KAAO,GACxDC,IAA0BF,EAAS,MAAM,CAAC,CAACD,EAAO,SAASnB,EAAM,QAAQ,MAAM,QAAQ,GAEvFuB,IAAsBH,EAAS,MAC7BE,EAAwB,QACjBA,EAAwB,MAAM,MAAM,GAAG,EAAEA,EAAwB,MAAM,MAAM,GAAG,EAAE,SAAS,CAAC,IAEhG,EACV,GACKE,IAAmBJ,EAAS,MAAM;AACtC,UAAI,CAACG,EAAoB;AACvB,eAAO;AAGT,YAAME,IAAczB,EAAM,QAAQ,MAAM,eAAe,0BACnD,yBAEA,IAGE0B,IAAWH,EAAoB,MAAM,QAAQ,mBAAmB,OAAO,EAAE,YAAY;AAC3F,aAAO,GAAGE,CAAW,GAAGC,CAAQ;AAAA,IAClC,CAAC,GAEKC,IAAyBP,EAAS,MAAM;AAI5C,YAAMQ,IAFWL,EAAoB,MAAM,QAAQ,mBAAmB,OAAO,EAAE,YAAY,EAE5D,MAAM,GAAG,EAAE,IAAI,CAAAM,MAAQA,EAAK,OAAO,CAAC,EAAE,YAAa,IAAGA,EAAK,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG;AAC5G,aAAOjB,EAAE,2CAA2CgB,CAAa,EAAE;AAAA,IACrE,CAAC,GAEK,EAAE,SAAAE,IAAS,OAAAC,GAAO,WAAAC,GAAS,IAAKC,GAAkB;AAAA,MACtD,KAAKT;AAAA,MACL,KAAKJ,EAAS,MAAMpB,EAAM,QAAQ,MAAM,QAAQ;AAAA;AAAA,MAEhD,UAAUoB,EAAS,MAAMpB,EAAM,QAAQ,MAAM,eAAe,0BAA0B,iCAAiC,aAAa;AAAA,MACpI,QAAAa;AAAA,IACF,CAAC,GAEKqB,IAA4Bd,EAAS,MACrCD,EAAO,SAAS,CAACa,GAAU,SAASV,EAAwB,SAASS,EAAM,QACtE,GAAGJ,EAAuB,KAAK,KAAKI,EAAM,KAAK,KAAKT,EAAwB,MAAM,MAAM,GAAG,EAAE,IAAG,CAAE,MAGpG,EACR,GAEKa,IAAO9B,EAAI,EAAK;AACtB,IAAA+B,GAAY,MAAM;AAChB,MAAID,EAAK,SAEHb,EAAwB,UAC5Ba,EAAK,QAAQ,IACbL,GAAQ;AAAA,IAEZ,GAAG,EAAE,WAAW,IAAM,GAEtBO,GAASH,GAA2B,MAAM;AACxC,YAAMI,IAAI,EAAE,MAAMJ,EAA0B,OAAO,UAAUZ,EAAwB,MAAM;AAC3F,MAAAtB,EAAM,QAAQ,KAAK,MAAMsC,CAAC;AAAA,IAC5B,CAAC;AAYD,UAAMC,IAAiBnB,EAAS;;AAAM,cAAC,GAACoB,KAAAnB,IAAArB,EAAM,YAAN,gBAAAqB,EAAe,UAAf,QAAAmB,EAAsB;AAAA,KAAc;AAE5E,IAAIxC,EAAM,QAAQ,MAAM,eAAe,2BACnCI,EAAU,MAAM;AAAA,MACZ,EAAE,MAAM,oBAAoB,QAAQ,IAAO,aAAaW,EAAI,4DAA4D,kBAAkB,EAAG;AAAA,MAC7I,EAAE,MAAM,gBAAgB,QAAQ,IAAO,aAAaA,EAAI,wDAAwD,cAAc,EAAG;AAAA,MACjI,EAAE,MAAM,6BAA6B,QAAQ,IAAO,aAAaA,EAAI,qEAAqE,2BAA2B,EAAG;AAAA,MACxK,EAAE,MAAM,gBAAgB,QAAQ,IAAO,aAAaA,EAAI,wDAAwD,cAAc,EAAG;AAAA,MACjI,EAAE,MAAM,2BAA2B,QAAQ,IAAO,aAAaA,EAAI,mEAAmE,yBAAyB,EAAG;AAAA,MAClK,EAAE,MAAM,aAAa,QAAQ,IAAO,aAAaA,EAAI,qDAAqD,WAAW,EAAG;AAAA,IAC5H,GAGAf,EAAM,QAAQ,MAAM,eAAe,aACnCI,EAAU,MAAM;AAAA,MACZ,EAAE,MAAM,WAAW,QAAQ,IAAO,aAAaW,EAAI,mDAAmD,SAAS,EAAG;AAAA,MAClH,EAAE,MAAM,SAAS,QAAQ,IAAO,aAAaA,EAAI,iDAAiD,OAAO,EAAG;AAAA,MAC5G,EAAE,MAAM,aAAa,QAAQ,IAAO,aAAaA,EAAI,qDAAqD,WAAW,EAAG;AAAA,IAC5H,GAGJ0B,EAAMlC,GAAW,YAAY;AACzB,MAAAmC;IACJ,CAAC,GACDD,EAAMjC,GAAK,OAAOmC,GAAUC,MAAa;AACrC,MAAID,MAAaC,MACjBpC,EAAI,QAAQA,EAAI,MAAM,YAAW;AAAA,IACrC,CAAC,GACDiC,EAAM/B,GAAQ,YAAY;AACtB,MAAAV,EAAM,QAAQ,KAAK,MAAM,EAAE,MAAQU,GAAQ,UAAYA,GAAQ;AAAA,IACnE,CAAC,GACDmC,GAAU,YAAY;AAClB,MAAApC,IAAU,CAAC,EAAE,MAAMM,EAAI,4CAA4C,8DAA8D,EAAE,OAAO,UAAU,WAAW,GAE/J,MAAM+B,GAAS,GAEX9C,EAAM,QAAQ,MAAM,SAAS,UAAaA,EAAM,QAAQ,MAAM,SAAS,KACvE+C,EAAU,cAAc,KACrBA,EAAU,cAAc,IAG3BR,EAAe,UACfS,EAAY,WAAW,GAAG9B,EAAU,QAAQ,IAAUD,EAAI,UAASA,EAAI,QAAQ;AAAA,IAGvF,CAAC;AAED,aAASgC,KAAW;AAChB,MAAA7C,EAAU,MAAM,QAAQ,CAAA8C,MAAW;AAC/B,QAAAA,EAAQ,SAAS;AAAA,MACzB,CAAK;AAAA,IACL;AACA,aAASC,GAAeC,GAAG;AAEvB,MAAAL,EAAU,cAAc,IACxB/C,EAAM,QAAQ,KAAK,MAAM,CAAA,CAAE;AAAA,IAC/B;AACA,aAASqD,GAAYC,GAAI;AAErB,UAAIC,IAAqB,KAAK,MAAM,aAAa,QAAQ,OAAO3D,EAAM,OAAO,QAAQ,EAAE,CAAC,GACpF4D;AACJ,MAAIxD,EAAM,QAAQ,MAAM,eAAe,0BACnCwD,IAAMD,EAAmB,QAAQ,8BAA8B,IAE9DC,IAAMD,EAAmB,QAAQ,aAAa,GAEnDC,EAAI,QAAQ,CAACN,GAASO,MAAU;AAC5B,QAAI,OAAO,KAAKP,CAAO,EAAE,WAAW,KAChCM,EAAI,OAAOC,GAAO,CAAC;AAAA,MAE/B,CAAK,GACDD,EAAI,KAAKxD,EAAM,QAAQ,KAAK,MAAM,GAC9BA,EAAM,QAAQ,MAAM,eAAe,0BACnCuD,EAAmB,QAAQ,8BAA8B,IAAIC,IAE5DD,EAAmB,QAAQ,aAAa,IAAIC,GAEjD,aAAa,QAAQ,OAAO5D,EAAM,OAAO,QAAQ,IAAI,KAAK,UAAU2D,CAAkB,CAAC;AAAA,IAC3F;AACA,UAAMb,KAA6B,YAAY;;AAE3C,UAAIgB,KAAWrC,IAAAb,EAAI,UAAJ,gBAAAa,EAAW;AAE1B,UAAIrB,EAAM,QAAQ,MAAM,eAAe,yBAAyB;AAE5D,QAAA0D,IAAW,yBAAyBA,EAAS,YAAa,EAAC,WAAW,KAAK,GAAG;AAE9E,YAAI;AACA,cAAIC,IAAOpD,EAAU;AACrB,gBAAML,EAA+B,EAAE,KAAKwD,GAAU,MAAMC,GAAM,MAAMjE,EAAS,IAAI,QAAO,CAAE,EAAE,KAAK,CAACkE,MAAa;AAK/G,YAAAnD,IAJgBmD,EAAS,KAAK,OAAO,QAAQ,IAAI,CAACC,OAAO;AAAA,cACrD,MAAMC,EAAkBD,EAAE,WAAWhD,EAAO,OAAO,CAAA,CAAE,IAAI,OAAOgD,EAAE,KAAK;AAAA,cACvE,UAAUA,EAAE;AAAA,YACf,EAAC;AAAA,UAElB,CAAa;AAAA,QACJ,QAAe;AAAA,QAChB;AAAA,MACJ;AAEI,YAAI;AACA,cAAIF,IAAOpD,EAAU;AACrB,gBAAML,EAA+B,EAAE,KAAKwD,GAAU,MAAMC,GAAM,MAAMjE,EAAS,IAAI,QAAO,CAAE,EAAE,KAAK,CAACkE,MAAa;AAK/G,YAAAnD,IAJgBmD,EAAS,KAAK,OAAO,QAAQ,IAAI,CAACC,OAAO;AAAA,cACrD,MAAMC,EAAkBD,EAAE,YAAYhD,EAAO,OAAO,CAAA,CAAE,IAAI,OAAOgD,EAAE,KAAK;AAAA,cACxE,UAAUA,EAAE;AAAA,YACf,EAAC;AAAA,UAElB,CAAa;AAAA,QACJ,QAAe;AAAA,QAChB;AAAA,IAGR;AAEA,QAAId,IAAYgB,GAAS;AAAA,MACrB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,aAAa;AAAA,IACjB,CAAC;AAED,UAAMC,IAAK3D,EAAI,IAAI,GACb4D,IAAK5D,EAAI,IAAI,GACb6D,IAAK7D,EAAI,IAAI;AAEnB,IAAA8D,EAAeH,GAAI,CAAAI,MAASrB,EAAU,QAAQ,EAAK,GACnDoB,EAAeF,GAAI,CAAAG,MAASrB,EAAU,SAAS,EAAK,GACpDoB,EAAeD,GAAI,CAAAE,MAASrB,EAAU,QAAQ,EAAK;AACnD,aAASC,EAAYI,GAAG;AAGpB,MAAIA,MAAM,gBAAaL,EAAU,QAAQ,CAACA,EAAU,QAChDK,MAAM,mBAAgBL,EAAU,SAAS,CAACA,EAAU,SACpDK,MAAM,qBACFL,EAAU,UAAU,OAEnBA,EAAU,QAAQ,CAACA,EAAU;AAAA,IAE1C;AACA,aAASsB,GAAYjB,GAAG;AACpB,MAAApD,EAAM,QAAQ,KAAK,MAAM,EAAE,MAAQoD,EAAE,OAAO,OAAO,UAAYA,EAAE,OAAO,MAAK,CAAE;AAAA,IACnF;AAEA,aAASkB,GAAuBhB,GAAI;AAClC,MAAAtD,EAAM,QAAQ,KAAK,MAAMsD,CAAE,GAC3B/C,EAAU,QAAQ+C,EAAG,MACrBN,EAAY,gBAAgB,GAC5BD,EAAU,QAAQ,IAClBM,GAAc;AAAA,IAChB;sBAUIkB,EAAA,GAAAC,EAsEM,OAtENC,IAsEM;AAAA,OArEiDzE,EAAM,QAAQ,MAAM,YAAY0E,EAAS3B,CAAA,EAAC,eAA7FwB,KAAAC,EAMM,OANNG,IAMM;AAAA,QAFFC,EAA4E,KAA5EC,IAA4EC,EAAhC5C,EAAyB,KAAA,GAAA,CAAA;AAAA;QACrE0C,EAAmD,OAAA;AAAA,UAA9C,OAAM;AAAA,UAAW,SAAOzB;AAAA;kBAEjCqB,EA6DM,OAAAO,IAAA;AAAA,QA5DFH,EAuCM,OAvCNI,IAuCM;AAAA,UAtCUzC,EAAc,qBAA1BgC,KAAAC,EAiBM,OAjBNS,IAiBM;AAAA,YAhBFL,EAIQ,SAJRM,IAIQ;AAAA,cAJiBC,EAAAA,EAAAA,EAAAA,gDAA+C,KACpE,CAAA;AAAA,cAAAP,EAEwC,SAAA;AAAA,gBAFjC,IAAG;AAAA,gBAAK,MAAK;AAAA,gBAAO,OAAM;AAAA,gBAAiC,UAAS;AAAA,gBACtE,aAAaO,EAAE,GAAA,wCAAA;AAAA,gBACf,gCAAOnC,EAAW,WAAA;AAAA;;;cAG3B4B,EASK,MAAA;AAAA,uBATG;AAAA,cAAJ,KAAIZ;AAAA,cAA8B,OAAM;AAAA;cACxCY,EAGK,MAAA;AAAA,gBAHA;AAAO,kBAAA5B,EAAW,WAAA,GAAe/B,UAAgB,IAAAC,EAAA,UAAaA,EAAS,QAAA;AAAA,gBAAA;AAAA,gBACxE,OAAM;AAAA,mBACHiE,EAAE,GAAA,kDAAA,CAAA,GAAA,CAAA;AAAA;cAETP,EAGK,MAAA;AAAA,gBAHA;AAAO,kBAAA5B,EAAW,WAAA,GAAe9B,UAAsB,IAAAD,EAAA,UAAOA,EAAG,QAAA;AAAA,gBAAA;AAAA,gBAClE,OAAM;AAAA,mBACHkE,EAAE,GAAA,oDAAA,CAAA,GAAA,CAAA;AAAA;cAPQ,CAAAC,IAAAV,EAAA3B,CAAA,EAAU,KAAK;AAAA;;;UAW7B9B,EAAG,SAAdsD,KAAAC,EAOM,OAPNa,IAOM;AAAA,YANFT,EAKQ,SALRU,IAKQ;AAAA,kBAHDC,EAAG,IAAA,2DAAA,IAAgEJ,EAAE,GAAA,2DAAA,IAAA,gBAAA,IAAmF,KAC3J,CAAA;AAAA,cAAAP,EACiC,SAAA;AAAA,gBAD1B,MAAK;AAAA,gBAAM,OAAM;AAAA,gBAAiC,aAAY;AAAA,gBAChE,SAAKY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEpB,GAAYoB,CAAM;AAAA;;;;UAG3BvE,EAAS,SAApBqD,KAAAC,EAWM,OAXNkB,IAWM;AAAA,YATFd,EAGQ,SAHRe,IAGQ;AAAA,kBAHiBJ,EAAG,IAAA,yDAAA,IAA8DJ,EAAE,GAAA,yDAAA,IAAA,2BAAA,IAA4F,KACpL,CAAA;AAAA,gBAAAP,EACgN,SAAA;AAAA,gBADzM,IAAG;AAAA,gBAAK,MAAK;AAAA,gBAAO,OAAM;AAAA,gBAAiC,UAAS;AAAA,8DAAoBtE,EAAQ,QAAAmF;AAAA,gBAClG,aAAaF,EAAG,IAAA,sDAAA,IAA2DJ,EAAE,GAAA,sDAAA,IAAA;AAAA,gBAAyF;AAAO,kBAAAnC,EAAW,cAAA;AAAA,gBAAA;AAAA;oBAD9F1C,EAAQ,KAAA;AAAA;;;YAGxFoE,EAAA3B,CAAA,EAAU,eAA7ByB,EAIK,MAAA;AAAA;uBAJG;AAAA,cAAJ,KAAIP;AAAA,cAA6B,OAAM;AAAA;sBACvCO,EAEuEoB,GAAA,MAAAC,EAFtDnB,EAAStE,CAAA,GAAA,CAAfkD,YAAXkB,EAEuE,MAAA;AAAA,gBAF1C,KAAKlB;AAAA,gBAAI,OAAM;AAAA,gBACvC,SAAK,CAAAmC,MAAA;AAAG,kBAAAxC,GAAQ,GAAIK,EAAG,SAAU,CAAAA,EAAG,QAAQN,mBAA6B8C,EAASvF,CAAA,IAAAA,EAAA,QAAA,KAAAA,IAAA,IAAOuF,EAAGtF,CAAA,IAAAA,EAAA,QAAA8C,EAAA,OAAA9C,IAAG8C,EAAG,MAAMhD,EAAQ,QAAGgD,EAAG;AAAA,gBAAW;AAAA,mBAC/H6B,EAAE,GAAA,6CAA8C7B,EAAG,IAAI,CAAA,GAAA,GAAAyC,EAAA;;;;;QAInD7E,EAAS,SAAhCqD,KAAAC,EAkBM,OAlBNwB,IAkBM;AAAA,kBAjBFxB,EAeMoB,GAAA,MAAAC,EAfYnB,EAAStE,CAAA,GAAA,CAAfkD,YAAZkB,EAeM,OAAA;AAAA,YAfwB,KAAKlB;AAAA,YAAI,OAAM;AAAA;YACdA,EAAG,UAA9BiB,KAAAC,EAQQ,SARRyB,IAQQ;AAAA,cALLC,EAAApB,EAAAxB,EAAG,cAAcA,EAAG,cAAc6B,EAAAA,GAAgD,6CAAA7B,EAAG,IAAI,KAAI,KAC5F,CAAA;AAAA,gBAAAsB,EAGC,SAAA;AAAA,gBAHM,IAAG;AAAA,gBAAK,MAAK;AAAA,qEACPrE,EAAS,QAAAkF,IAAAlF,IAAAkF;AAAA,gBAAE,OAAM;AAAA,gBAAkC,aAAaF,EAAG,IAAA,sDAAA,IAA2DJ,EAAE,GAAA,sDAAA,IAAA;AAAA,gBACxI,SAAKK,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAA;AAAE,kBAAAzC,EAAW,gBAAA,GAAoB8C,EAASvF,CAAA,IAAAA,EAAA,QAAA,KAAAA,IAAA;AAAA,gBAAA;AAAA;oBADvCmE,EAASnE,CAAA,CAAA;AAAA;;;YAIPmE,EAAA3B,CAAA,EAAU,SAASO,EAAG,eAAzCkB,EAIK,MAAA;AAAA;;uBAJG;AAAA,cAAJ,KAAIN;AAAA,cAAyC,OAAM;AAAA;sBACnDM,EAEsBoB,GAAA,MAAAC,EAFLnB,EAAOjE,CAAA,GAAA,CAAb6C,YAAXkB,EAEsB,MAAA;AAAA,gBAFK,KAAKlB;AAAA,gBAAI,OAAM;AAAA,gBACrC,SAAK,CAAAmC,MAAEnB,GAAuBhB,CAAE;AAAA,cAC9B,GAAAwB,EAAAxB,EAAG,IAAI,GAAA,GAAA6C,EAAA;;;;;;;;"}