import { NetworkStatus } from "/_nuxt/node_modules/.cache/vite/client/deps/@apollo_client_core.js?v=e4f18c29"; import { useQuery } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { convertThrowIntoFetchResult } from "/_nuxt/lib/common/helpers/graphql.ts"; import { isUndefined } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29"; import { useScopedState } from "/_nuxt/lib/common/composables/scopedState.ts"; import { useNuxtApp } from "/_nuxt/node_modules/nuxt/dist/app/nuxt.js?v=e4f18c29"; import { ref, computed, shallowRef } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useLogger } from "/_nuxt/composables/logging.ts"; import { useRouter } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29"; export const useApolloClientIfAvailable = () => { const nuxt = useNuxtApp(); const getClient = () => nuxt.$apollo?.default ? nuxt.$apollo.default : void 0; return getClient; }; export const useApolloClientFromNuxt = () => { const getClient = useApolloClientIfAvailable(); const client = getClient(); if (!client) { throw new Error("Apollo Client can't be resolved from NuxtApp yet"); } return client; }; export const usePreloadApolloQueries = () => { const client = useApolloClientFromNuxt(); return async (params) => { const { queries } = params; const promises = queries.map( (q) => client.query({ ...q, errorPolicy: "all" }).catch(convertThrowIntoFetchResult) ); return await Promise.all(promises); }; }; export const useQueryLoaded = (params) => { const { onResult } = params; const loaded = ref(false); onResult(() => { loaded.value = true; }); return loaded; }; export const usePaginatedQuery = (params) => { const logger = useLogger(); const { query, baseVariables, resolveKey, options, resolveCurrentResult, resolveNextPageVariables, resolveInitialResult } = params; const cacheBusterKey = ref(0); const loadingCompleted = ref(false); const hasMoreToLoad = (result) => { if (isUndefined(result)) return true; const itemCount = result.items.length; const totalCount = result.totalCount; const hasMoreItemsAccordingToCount = itemCount < totalCount; const hasEmptyResponse = !result.items.length && !result.cursor?.length; return hasMoreItemsAccordingToCount && !hasEmptyResponse; }; const useQueryReturn = useQuery(query, baseVariables, options || {}); const queryKey = computed( () => `key-${JSON.stringify(resolveKey(baseVariables.value))}-${cacheBusterKey.value}` ); const currentResult = computed( () => resolveCurrentResult(useQueryReturn.result.value) ); const isVeryFirstLoading = computed( () => useQueryReturn.loading.value && !currentResult.value?.items.length ); const getCursorForNextPage = () => { const currRes = currentResult.value; const initRes = resolveInitialResult?.(); if (currRes?.cursor) return currRes.cursor; if (initRes?.cursor) return initRes.cursor; return null; }; const onInfiniteLoad = async (state) => { const loadComplete = () => { state.complete(); loadingCompleted.value = true; }; const cursor = getCursorForNextPage(); let loadMore = hasMoreToLoad(currentResult.value); if (!loadMore || !cursor) return loadComplete(); try { const res = await useQueryReturn.fetchMore({ variables: resolveNextPageVariables(baseVariables.value, cursor) }); loadMore = hasMoreToLoad(resolveCurrentResult(res?.data)); } catch (e) { logger.error(e); state.error(); return; } state.loaded(); if (!loadMore) { loadComplete(); } }; const bustCache = () => { cacheBusterKey.value++; loadingCompleted.value = false; }; useQueryReturn.onResult((res) => { if (res.loading) return; const moreToLoad = hasMoreToLoad(resolveCurrentResult(res?.data)); if (moreToLoad && loadingCompleted.value) { bustCache(); } }); return { query: useQueryReturn, identifier: queryKey, onInfiniteLoad, bustCache, isVeryFirstLoading }; }; export const usePageQueryStandardFetchPolicy = () => { if (false) return computed(() => void 0); const router = useRouter(); const hasNavigatedInCSR = useScopedState( "usePageQueryStandardFetchPolicy-state", () => ref(false) ); const quitTracking = router.beforeEach((to, from) => { if (!from || !to) return; hasNavigatedInCSR.value = true; quitTracking(); }); return computed(() => { return hasNavigatedInCSR.value ? "cache-and-network" : void 0; }); }; export const useQueryResultVariables = (useQueryRet) => { const { variables, onResult } = useQueryRet; const currentVariables = shallowRef(); onResult((res) => { if (res.networkStatus !== NetworkStatus.ready) return; currentVariables.value = variables.value; }); const resultVariables = computed(() => currentVariables.value); return resultVariables; }; //# sourceMappingURL=data:application/json;base64,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QUFRLHNCQUFzQjtBQUFBLEVBQ3pELENBQUM7QUFDSDtBQU1PLGFBQU0sMEJBQTBCLENBSXJDLGdCQUNHO0FBQ0gsUUFBTSxFQUFFLFdBQVcsU0FBUyxJQUFJO0FBRWhDLFFBQU0sbUJBQW1CLFdBQXdDO0FBQ2pFLFdBQVMsQ0FBQyxRQUFRO0FBQ2hCLFFBQUksSUFBSSxrQkFBa0IsY0FBYyxNQUFPO0FBQy9DLHFCQUFpQixRQUFRLFVBQVU7QUFBQSxFQUNyQyxDQUFDO0FBRUQsUUFBTSxrQkFBa0IsU0FBUyxNQUFNLGlCQUFpQixLQUFLO0FBRTdELFNBQU87QUFDVCIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZ3JhcGhxbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbmltcG9ydCB7XHJcbiAgTmV0d29ya1N0YXR1cyxcclxuICB0eXBlIE9wZXJhdGlvblZhcmlhYmxlcyxcclxuICB0eXBlIFF1ZXJ5T3B0aW9ucyxcclxuICB0eXBlIFdhdGNoUXVlcnlGZXRjaFBvbGljeVxyXG59IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnXHJcbmltcG9ydCB0eXBlIHtcclxuICBEb2N1bWVudFBhcmFtZXRlcixcclxuICBPcHRpb25zUGFyYW1ldGVyXHJcbn0gZnJvbSAnQHZ1ZS9hcG9sbG8tY29tcG9zYWJsZS9kaXN0L3VzZVF1ZXJ5LmpzJ1xyXG5pbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdCB9IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL2dyYXBocWwnXHJcbmltcG9ydCB0eXBlIHsgSW5maW5pdGVMb2FkZXJTdGF0ZSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJ1xyXG5pbXBvcnQgdHlwZSB7IE1heWJlTnVsbE9yVW5kZWZpbmVkLCBPcHRpb25hbCB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgdXNlU2NvcGVkU3RhdGUgfSBmcm9tICd+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvc2NvcGVkU3RhdGUnXHJcblxyXG5leHBvcnQgY29uc3QgdXNlQXBvbGxvQ2xpZW50SWZBdmFpbGFibGUgPSAoKSA9PiB7XHJcbiAgY29uc3QgbnV4dCA9IHVzZU51eHRBcHAoKVxyXG4gIGNvbnN0IGdldENsaWVudCA9ICgpID0+IChudXh0LiRhcG9sbG8/LmRlZmF1bHQgPyBudXh0LiRhcG9sbG8uZGVmYXVsdCA6IHVuZGVmaW5lZClcclxuICByZXR1cm4gZ2V0Q2xpZW50XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB1c2VBcG9sbG9DbGllbnRGcm9tTnV4dCA9ICgpID0+IHtcclxuICBjb25zdCBnZXRDbGllbnQgPSB1c2VBcG9sbG9DbGllbnRJZkF2YWlsYWJsZSgpXHJcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KClcclxuICBpZiAoIWNsaWVudCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXBvbGxvIENsaWVudCBjYW4ndCBiZSByZXNvbHZlZCBmcm9tIE51eHRBcHAgeWV0XCIpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2xpZW50XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB1c2VQcmVsb2FkQXBvbGxvUXVlcmllcyA9ICgpID0+IHtcclxuICBjb25zdCBjbGllbnQgPSB1c2VBcG9sbG9DbGllbnRGcm9tTnV4dCgpXHJcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXM6IHsgcXVlcmllczogUXVlcnlPcHRpb25zW10gfSkgPT4ge1xyXG4gICAgY29uc3QgeyBxdWVyaWVzIH0gPSBwYXJhbXNcclxuXHJcbiAgICBjb25zdCBwcm9taXNlcyA9IHF1ZXJpZXMubWFwKChxKSA9PlxyXG4gICAgICBjbGllbnRcclxuICAgICAgICAucXVlcnkoe1xyXG4gICAgICAgICAgLi4ucSxcclxuICAgICAgICAgIGVycm9yUG9saWN5OiAnYWxsJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdClcclxuICAgIClcclxuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVc2VmdWwgaW4gU1NSIHRvIHRyYWNrIHdoZW4gYSB1c2VRdWVyeSBjYWxsIGhhcyBsb2FkZWQuIEp1c3QgcGFzcyBpbiB0aGUgdXNlUXVlcnkgY2FsbCdzXHJcbiAqIG9uUmVzdWx0IGNhbGxiYWNrXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdXNlUXVlcnlMb2FkZWQgPSAocGFyYW1zOiB7XHJcbiAgb25SZXN1bHQ6IChsb2FkZWRDYjogKCkgPT4gdW5rbm93bikgPT4gdW5rbm93blxyXG59KSA9PiB7XHJcbiAgY29uc3QgeyBvblJlc3VsdCB9ID0gcGFyYW1zXHJcblxyXG4gIGNvbnN0IGxvYWRlZCA9IHJlZihmYWxzZSlcclxuICBvblJlc3VsdCgoKSA9PiB7XHJcbiAgICBsb2FkZWQudmFsdWUgPSB0cnVlXHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIGxvYWRlZFxyXG59XHJcblxyXG4vLyBDcmVhdGUgVFMgdHlwZSBmb3Igb2JqZWN0IHdpdGggc2VyaWFsaXphYmxlIHByb3BlcnRpZXNcclxudHlwZSBTZXJpYWxpemFibGVWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsXHJcbnR5cGUgU2VyaWFsaXphYmxlT2JqZWN0ID0ge1xyXG4gIFtrZXk6IHN0cmluZ106XHJcbiAgICB8IFNlcmlhbGl6YWJsZVZhbHVlXHJcbiAgICB8IFNlcmlhbGl6YWJsZU9iamVjdFxyXG4gICAgfCBTZXJpYWxpemFibGVWYWx1ZVtdXHJcbiAgICB8IFNlcmlhbGl6YWJsZU9iamVjdFtdXHJcbiAgICB8IEFycmF5PFNlcmlhbGl6YWJsZVZhbHVlIHwgU2VyaWFsaXphYmxlT2JqZWN0PlxyXG4gICAgfCB1bmRlZmluZWRcclxuICAgIHwgbnVsbFxyXG59XHJcblxyXG50eXBlIEJhc2ljQ3Vyc29yQ29udGFpbmVyID0ge1xyXG4gIGN1cnNvcj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcclxufVxyXG5cclxudHlwZSBCYXNpY1BhZ2luYXRlZFJlc3VsdCA9IEJhc2ljQ3Vyc29yQ29udGFpbmVyICYge1xyXG4gIHRvdGFsQ291bnQ6IG51bWJlclxyXG4gIGl0ZW1zOiB1bmtub3duW11cclxufVxyXG5cclxuLyoqXHJcbiAqIFNpbXBsaWZpZXMgc2V0dGluZyB1cCBwYWdpbmF0aW9uIGJldHdlZW4gYW4gQXBvbGxvIENsaWVudCBxdWVyeSBhbmQgdGhlIFZ1ZSBJbmZpbml0ZUxvYWRlciBjb21wb25lbnQuIE1hbmFnZXMgbG9hZGluZyBuZXh0IHBhZ2VzLFxyXG4gKiByZXNldGluZyBzdGF0ZSBvbiByZWZldGNoLCBhbmQgbW9yZS5cclxuICpcclxuICogQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHNldCB1cCBhbGwgb2YgdGhlIHBhcmFtcywgZXNwZWNpYWxseSB0aGUgdmFyaW91cyByZXNvbHV0aW9uIHByZWRpY2F0ZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCB1c2VQYWdpbmF0ZWRRdWVyeSA9IDxcclxuICBUUmVzdWx0ID0gYW55LFxyXG4gIFRWYXJpYWJsZXMgZXh0ZW5kcyBPcGVyYXRpb25WYXJpYWJsZXMgPSBPcGVyYXRpb25WYXJpYWJsZXNcclxuPihwYXJhbXM6IHtcclxuICBxdWVyeTogRG9jdW1lbnRQYXJhbWV0ZXI8VFJlc3VsdCwgVFZhcmlhYmxlcz5cclxuICBiYXNlVmFyaWFibGVzOiBDb21wdXRlZFJlZjxUVmFyaWFibGVzPlxyXG4gIG9wdGlvbnM/OiBPcHRpb25zUGFyYW1ldGVyPFRSZXN1bHQsIFRWYXJpYWJsZXM+XHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgZm9yIHRoZSBxdWVyeSBiYXNlZCBvbiB2YXJpYWJsZXMuIFRoZSBrZXkgc2hvdWxkIHN0YXkgdGhlIHNhbWUgZm9yXHJcbiAgICogYWxsIHBhZ2VzIG9mIHRoZSBxdWVyeSwgc28gbWFrZSBzdXJlIHRvIGJ1aWxkIGl0IG9ubHkgb3V0IGZyb20gbWVhbmluZ2Z1bCB2YXJpYWJsZXMgdGhhdCB3b3VsZFxyXG4gICAqIHJlcXVpcmUgYSBuZXcgcXVlcnkgJiBuZXcgcGFnaW5hdGlvbiBzdGF0ZSBpZiBjaGFuZ2VkLlxyXG4gICAqXHJcbiAgICogRXhhbXBsZTogRG9uJ3QgaW5jbHVkZSBcImN1cnNvclwiLCBiZWNhdXNlIG11bHRpcGxlIHBhZ2VzIG9mIHRoZSBzYW1lIHF1ZXJ5IHdpbGwgaGF2ZSBkaWZmZXJlbnQgY3Vyc29yc1xyXG4gICAqL1xyXG4gIHJlc29sdmVLZXk6IChcclxuICAgIHZhcnM6IFRWYXJpYWJsZXNcclxuICApID0+XHJcbiAgICB8IFNlcmlhbGl6YWJsZVZhbHVlXHJcbiAgICB8IFNlcmlhbGl6YWJsZU9iamVjdFxyXG4gICAgfCBTZXJpYWxpemFibGVWYWx1ZVtdXHJcbiAgICB8IFNlcmlhbGl6YWJsZU9iamVjdFtdXHJcbiAgICB8IEFycmF5PFNlcmlhbGl6YWJsZVZhbHVlIHwgU2VyaWFsaXphYmxlT2JqZWN0PlxyXG5cclxuICAvKipcclxuICAgKiBQcmVkaWNhdGUgZm9yIHJlc29sdmluZyB0aGUgY3VycmVudCBwYWdpbmF0ZWQgcmVzdWx0IGZyb20gdGhlIHF1ZXJ5IHJlc3VsdC4gUmV0dXJuIHVuZGVmaW5lZFxyXG4gICAqIGlmIHF1ZXJ5IGhhc24ndCBmaW5pc2hlZCBsb2FkaW5nIHlldC5cclxuICAgKi9cclxuICByZXNvbHZlQ3VycmVudFJlc3VsdDogKFxyXG4gICAgcmVzdWx0OiBUUmVzdWx0IHwgdW5kZWZpbmVkXHJcbiAgKSA9PiBCYXNpY1BhZ2luYXRlZFJlc3VsdCB8IHVuZGVmaW5lZFxyXG4gIC8qKlxyXG4gICAqIFVzZSB0aGlzIHRvIHJlc29sdmUgdGhlIGluaXRpYWwgY3Vyc29yIHRoYXQgbWF5IGhhdmUgY29tZSBmcm9tIGEgcHJldmlvdXMgbm9uLXBhZ2luYXRlZCBxdWVyeS4gSWYgdW5kZWZpbmVkLFxyXG4gICAqIG9yIHJldHVybnMgdW5kZWZpbmVkIC0gd2UgZXhwZWN0IHRoYXQgdGhlcmUncyBubyBpbml0aWFsIHJlc3VsdFxyXG4gICAqL1xyXG4gIHJlc29sdmVJbml0aWFsUmVzdWx0PzogKCkgPT4gQmFzaWNDdXJzb3JDb250YWluZXIgfCB1bmRlZmluZWRcclxuICAvKipcclxuICAgKiBQcmVkaWNhdGUgZm9yIHJlc29sdmluZyB0aGUgdmFyaWFibGVzIHRvIHVzZSBmb3IgbmV4dCBwYWdlIG9mIGl0ZW1zXHJcbiAgICovXHJcbiAgcmVzb2x2ZU5leHRQYWdlVmFyaWFibGVzOiAoYmFzZVZhcmlhYmxlczogVFZhcmlhYmxlcywgbmV3Q3Vyc29yOiBzdHJpbmcpID0+IFRWYXJpYWJsZXNcclxuICAvKipcclxuICAgKiBSZXNvbHZlIGN1cnNvciBmcm9tIHZhcmlhYmxlcyBvYmplY3QuIElmIG5vdCBhdmFpbGFibGUsIHJldHVybiBudWxsIG9yIHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIHJlc29sdmVDdXJzb3JGcm9tVmFyaWFibGVzOiAodmFyczogVFZhcmlhYmxlcykgPT4gTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPlxyXG59KSA9PiB7XHJcbiAgY29uc3QgbG9nZ2VyID0gdXNlTG9nZ2VyKClcclxuXHJcbiAgY29uc3Qge1xyXG4gICAgcXVlcnksXHJcbiAgICBiYXNlVmFyaWFibGVzLFxyXG4gICAgcmVzb2x2ZUtleSxcclxuICAgIG9wdGlvbnMsXHJcbiAgICByZXNvbHZlQ3VycmVudFJlc3VsdCxcclxuICAgIHJlc29sdmVOZXh0UGFnZVZhcmlhYmxlcyxcclxuICAgIHJlc29sdmVJbml0aWFsUmVzdWx0XHJcbiAgfSA9IHBhcmFtc1xyXG4gIGNvbnN0IGNhY2hlQnVzdGVyS2V5ID0gcmVmKDApXHJcbiAgY29uc3QgbG9hZGluZ0NvbXBsZXRlZCA9IHJlZihmYWxzZSlcclxuXHJcbiAgLy8gY2FuJ3QgYmUgYSBjb21wdXRlZCwgYmVjYXVzZSB3ZSBoYXZlIHRvIGludm9rZSBpdCBvbiB0aGUgcmVzdWx0IG9mIHRoZSBmZXRjaE1vcmUgY2FsbCxcclxuICAvLyBiZWZvcmUgdGhlIHJlc3VsdCBoYXMgYmVlbiBtZXJnZWQgaW50byB0aGUgY2FjaGUgYW5kIHRoZSByZXN1bHRzIGJlY29tZSBtZXJnZWQgd2l0aCByZXN1bHRzXHJcbiAgLy8gb2YgcHJldmlvdXMgcGFnZXNcclxuICBjb25zdCBoYXNNb3JlVG9Mb2FkID0gKHJlc3VsdDogQmFzaWNQYWdpbmF0ZWRSZXN1bHQgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGlmIChpc1VuZGVmaW5lZChyZXN1bHQpKSByZXR1cm4gdHJ1ZVxyXG5cclxuICAgIGNvbnN0IGl0ZW1Db3VudCA9IHJlc3VsdC5pdGVtcy5sZW5ndGhcclxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudFxyXG4gICAgY29uc3QgaGFzTW9yZUl0ZW1zQWNjb3JkaW5nVG9Db3VudCA9IGl0ZW1Db3VudCA8IHRvdGFsQ291bnRcclxuICAgIGNvbnN0IGhhc0VtcHR5UmVzcG9uc2UgPSAhcmVzdWx0Lml0ZW1zLmxlbmd0aCAmJiAhcmVzdWx0LmN1cnNvcj8ubGVuZ3RoXHJcblxyXG4gICAgcmV0dXJuIGhhc01vcmVJdGVtc0FjY29yZGluZ1RvQ291bnQgJiYgIWhhc0VtcHR5UmVzcG9uc2VcclxuICB9XHJcblxyXG4gIGNvbnN0IHVzZVF1ZXJ5UmV0dXJuID0gdXNlUXVlcnkocXVlcnksIGJhc2VWYXJpYWJsZXMsIG9wdGlvbnMgfHwge30pXHJcbiAgY29uc3QgcXVlcnlLZXkgPSBjb21wdXRlZChcclxuICAgICgpID0+XHJcbiAgICAgIGBrZXktJHtKU09OLnN0cmluZ2lmeShyZXNvbHZlS2V5KGJhc2VWYXJpYWJsZXMudmFsdWUpKX0tJHtjYWNoZUJ1c3RlcktleS52YWx1ZX1gXHJcbiAgKVxyXG4gIGNvbnN0IGN1cnJlbnRSZXN1bHQgPSBjb21wdXRlZCgoKSA9PlxyXG4gICAgcmVzb2x2ZUN1cnJlbnRSZXN1bHQodXNlUXVlcnlSZXR1cm4ucmVzdWx0LnZhbHVlKVxyXG4gIClcclxuXHJcbiAgY29uc3QgaXNWZXJ5Rmlyc3RMb2FkaW5nID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PiB1c2VRdWVyeVJldHVybi5sb2FkaW5nLnZhbHVlICYmICFjdXJyZW50UmVzdWx0LnZhbHVlPy5pdGVtcy5sZW5ndGhcclxuICApXHJcblxyXG4gIGNvbnN0IGdldEN1cnNvckZvck5leHRQYWdlID0gKCkgPT4ge1xyXG4gICAgY29uc3QgY3VyclJlcyA9IGN1cnJlbnRSZXN1bHQudmFsdWVcclxuICAgIGNvbnN0IGluaXRSZXMgPSByZXNvbHZlSW5pdGlhbFJlc3VsdD8uKClcclxuXHJcbiAgICBpZiAoY3VyclJlcz8uY3Vyc29yKSByZXR1cm4gY3VyclJlcy5jdXJzb3JcclxuICAgIGlmIChpbml0UmVzPy5jdXJzb3IpIHJldHVybiBpbml0UmVzLmN1cnNvclxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IG9uSW5maW5pdGVMb2FkID0gYXN5bmMgKHN0YXRlOiBJbmZpbml0ZUxvYWRlclN0YXRlKSA9PiB7XHJcbiAgICBjb25zdCBsb2FkQ29tcGxldGUgPSAoKSA9PiB7XHJcbiAgICAgIHN0YXRlLmNvbXBsZXRlKClcclxuICAgICAgbG9hZGluZ0NvbXBsZXRlZC52YWx1ZSA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJzb3IgPSBnZXRDdXJzb3JGb3JOZXh0UGFnZSgpXHJcbiAgICBsZXQgbG9hZE1vcmUgPSBoYXNNb3JlVG9Mb2FkKGN1cnJlbnRSZXN1bHQudmFsdWUpXHJcbiAgICBpZiAoIWxvYWRNb3JlIHx8ICFjdXJzb3IpIHJldHVybiBsb2FkQ29tcGxldGUoKVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHVzZVF1ZXJ5UmV0dXJuLmZldGNoTW9yZSh7XHJcbiAgICAgICAgdmFyaWFibGVzOiByZXNvbHZlTmV4dFBhZ2VWYXJpYWJsZXMoYmFzZVZhcmlhYmxlcy52YWx1ZSwgY3Vyc29yKVxyXG4gICAgICB9KVxyXG4gICAgICBsb2FkTW9yZSA9IGhhc01vcmVUb0xvYWQocmVzb2x2ZUN1cnJlbnRSZXN1bHQocmVzPy5kYXRhKSlcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgbG9nZ2VyLmVycm9yKGUpXHJcbiAgICAgIHN0YXRlLmVycm9yKClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGUubG9hZGVkKClcclxuICAgIGlmICghbG9hZE1vcmUpIHtcclxuICAgICAgbG9hZENvbXBsZXRlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGJ1c3RDYWNoZSA9ICgpID0+IHtcclxuICAgIGNhY2hlQnVzdGVyS2V5LnZhbHVlKytcclxuICAgIGxvYWRpbmdDb21wbGV0ZWQudmFsdWUgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLy8gSWYgYWZ0ZXIgdGhlIHF1ZXJ5IHJ1bnMgdGhlcmUgaXMgc3RpbGwgbW9yZSB0byBsb2FkLCBidXQgbG9hZGluZyBpcyBtYXJrZWQgYXMgY29tcGxldGUgKHdoaWNoIGNhbiBoYXBwZW5cclxuICAvLyBpZiBjYWNoZSBpcyBldmljdGVkIGFuZCBpbml0aWFsIHF1ZXJ5IHJlcnVucykgLSB3ZSBzaG91bGQgYnVzdCB0aGUgY2FjaGUsXHJcbiAgLy8gJiByZXNldCBsb2FkZXIgc3RhdGUsIHNvIGluZmluaXRlIGxvYWRlciByZXN0YXJ0c1xyXG4gIHVzZVF1ZXJ5UmV0dXJuLm9uUmVzdWx0KChyZXMpID0+IHtcclxuICAgIGlmIChyZXMubG9hZGluZykgcmV0dXJuXHJcblxyXG4gICAgLy8gSWYgbW9yZSB0byBsb2FkICYgbG9hZGluZyBjb21wbGV0ZWQsIGJ1c3QgY2FjaGVcclxuICAgIGNvbnN0IG1vcmVUb0xvYWQgPSBoYXNNb3JlVG9Mb2FkKHJlc29sdmVDdXJyZW50UmVzdWx0KHJlcz8uZGF0YSkpXHJcbiAgICBpZiAobW9yZVRvTG9hZCAmJiBsb2FkaW5nQ29tcGxldGVkLnZhbHVlKSB7XHJcbiAgICAgIGJ1c3RDYWNoZSgpXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHF1ZXJ5OiB1c2VRdWVyeVJldHVybixcclxuICAgIGlkZW50aWZpZXI6IHF1ZXJ5S2V5LFxyXG4gICAgb25JbmZpbml0ZUxvYWQsXHJcbiAgICBidXN0Q2FjaGUsXHJcbiAgICBpc1ZlcnlGaXJzdExvYWRpbmdcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXZSB3YW50IG91ciBwYWdlIHF1ZXJpZXMgdG8gaGF2ZSB0aGUgY2FjaGUtYW5kLW5ldHdvcmsgZmV0Y2ggcG9saWN5LCBzbyB0aGF0IHdoZW4geW91IHN3aXRjaCB0byBhIG5ldyBwYWdlLCB0aGUgZGF0YVxyXG4gKiBnZXRzIHJlZnJlc2hlZCwgYnV0IGluIHRoZSBiYWNrZ3JvdW5kIC0gd2hpbGUgdGhlIG9sZCBkYXRhIGlzIHN0aWxsIHNob3duLlxyXG4gKlxyXG4gKiBUaGlzLCBob3dldmVyLCBpcyB1bm5lY2Vzc2FyeSB3aGVuIGh5ZHJhdGluZyB0aGUgU1NSIHBhZ2UgaW4gQ1NSIGZvciB0aGUgZmlyc3QgdGltZSwgYW5kIGFsc29cclxuICogY2F1c2VzIHdlaXJkIGh5ZHJhdGlvbiBtaXNtYXRjaGVzLlxyXG4gKlxyXG4gKiBTbyB0aGlzIHNldHMgdGhlIGNvcnJlY3QgZmV0Y2ggcG9saWN5IGJhc2VkIG9uIHdoZXRoZXIgdGhpcyBpcyBhIENTUi0+Q1NSIG5hdmlnYXRpb25cclxuICovXHJcbmV4cG9ydCBjb25zdCB1c2VQYWdlUXVlcnlTdGFuZGFyZEZldGNoUG9saWN5ID0gKCkgPT4ge1xyXG4gIGlmIChpbXBvcnQubWV0YS5zZXJ2ZXIpIHJldHVybiBjb21wdXRlZCgoKSA9PiB1bmRlZmluZWQpXHJcblxyXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXHJcbiAgY29uc3QgaGFzTmF2aWdhdGVkSW5DU1IgPSB1c2VTY29wZWRTdGF0ZShcclxuICAgICd1c2VQYWdlUXVlcnlTdGFuZGFyZEZldGNoUG9saWN5LXN0YXRlJyxcclxuICAgICgpID0+IHJlZihmYWxzZSlcclxuICApXHJcbiAgY29uc3QgcXVpdFRyYWNraW5nID0gcm91dGVyLmJlZm9yZUVhY2goKHRvLCBmcm9tKSA9PiB7XHJcbiAgICBpZiAoIWZyb20gfHwgIXRvKSByZXR1cm5cclxuICAgIGhhc05hdmlnYXRlZEluQ1NSLnZhbHVlID0gdHJ1ZVxyXG4gICAgcXVpdFRyYWNraW5nKClcclxuICB9KVxyXG5cclxuICByZXR1cm4gY29tcHV0ZWQoKCk6IE9wdGlvbmFsPFdhdGNoUXVlcnlGZXRjaFBvbGljeT4gPT4ge1xyXG4gICAgLy8gdXNlIGNhY2hlLCBidXQgcmVsb2FkIGluIGJhY2tncm91bmRcclxuICAgIC8vIHdlIG9ubHkgd2FubmEgZG8gdGhpcyB3aGVuIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBDU1Igcm91dGVzXHJcbiAgICByZXR1cm4gaGFzTmF2aWdhdGVkSW5DU1IudmFsdWUgPyAnY2FjaGUtYW5kLW5ldHdvcmsnIDogdW5kZWZpbmVkXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEJ5IGRlZmF1bHQgJ3ZhcmlhYmxlcycgb2ZmIHVzZVF1ZXJ5IHVwZGF0ZXMgdGhlIG1vbWVudCB2YXJpYWJsZXMgYXJlIHVwZGF0ZWQuIFRoaXMgcmV0dXJucyB0aGUgdmFyaWFibGVzXHJcbiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aXZlIHJlc3VsdC4gU28gaWYgdGhlIHJlc3VsdCBpcyBzdGlsbCBsb2FkaW5nLCB0aGUgdmFyaWFibGVzIGFyZSBnb25uYSBiZSB1bmRlZmluZWQgdG9vLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHVzZVF1ZXJ5UmVzdWx0VmFyaWFibGVzID0gPFxyXG4gIFRSZXN1bHQgPSBhbnksXHJcbiAgVFZhcmlhYmxlcyBleHRlbmRzIE9wZXJhdGlvblZhcmlhYmxlcyA9IE9wZXJhdGlvblZhcmlhYmxlc1xyXG4+KFxyXG4gIHVzZVF1ZXJ5UmV0OiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VRdWVyeTxUUmVzdWx0LCBUVmFyaWFibGVzPj5cclxuKSA9PiB7XHJcbiAgY29uc3QgeyB2YXJpYWJsZXMsIG9uUmVzdWx0IH0gPSB1c2VRdWVyeVJldFxyXG5cclxuICBjb25zdCBjdXJyZW50VmFyaWFibGVzID0gc2hhbGxvd1JlZjwodHlwZW9mIHZhcmlhYmxlcylbJ3ZhbHVlJ10+KClcclxuICBvblJlc3VsdCgocmVzKSA9PiB7XHJcbiAgICBpZiAocmVzLm5ldHdvcmtTdGF0dXMgIT09IE5ldHdvcmtTdGF0dXMucmVhZHkpIHJldHVyblxyXG4gICAgY3VycmVudFZhcmlhYmxlcy52YWx1ZSA9IHZhcmlhYmxlcy52YWx1ZVxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IHJlc3VsdFZhcmlhYmxlcyA9IGNvbXB1dGVkKCgpID0+IGN1cnJlbnRWYXJpYWJsZXMudmFsdWUpXHJcblxyXG4gIHJldHVybiByZXN1bHRWYXJpYWJsZXNcclxufVxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvbGliL2NvbW1vbi9jb21wb3NhYmxlcy9ncmFwaHFsLnRzIn0=