{"version":3,"file":"share_folder_page-CNcFeII2.js","sources":["../../src/pages/browse_page/share_folder_page.tsx"],"sourcesContent":["import React from 'react';\n\nimport {useQueryClient} from '@tanstack/react-query';\nimport {useSetAtom} from 'jotai';\nimport once from 'lodash/once';\nimport {DndProvider} from 'react-dnd';\nimport {HTML5Backend} from 'react-dnd-html5-backend';\nimport {useIntl} from 'react-intl';\nimport {Navigate, useParams} from 'react-router';\nimport styled, {css} from 'styled-components';\n\nimport {Box} from '@dropbox/dig-foundations';\nimport {GlyphLogo, ReplayGlyph, ReplayWordmark} from '@dropbox/dig-logos';\nimport {GlobalHeader} from '@dropbox/dpc-ia/global_header';\n\nimport {useExtensionContext} from '~/components/extension_context';\nimport {useGrantBook} from '~/components/password_cache_provider';\nimport {CopyLinkSnackbar} from '~/components/share_modal/copy_link_snackbar';\nimport {breakpointSmall, spacing} from '~/components/styled';\nimport type {ShareFolderProp} from '~/lib/api';\nimport {ShareLinkNotAuthedError} from '~/lib/api';\nimport {useGetFolderWithShareLinkQuery} from '~/lib/api_queries';\nimport type {Branding} from '~/lib/branding';\nimport type {LoggingClient} from '~/lib/logging/logger';\nimport {useMatchesTutorialsRoute} from '~/lib/onboarding_v2/use_matches_tutorials_route';\nimport {replayApi} from '~/lib/query_client';\nimport {replayStorage} from '~/lib/storage';\nimport {getReferrer} from '~/lib/utils';\nimport {LoadingGridPlaceholder} from '~/pages/browse_page/components/tiles/tile_grid';\nimport type {SharedFolderLinkRouteParams} from '~/route_path_matches';\nimport {browseAtom, browseLoadingState, browseSortAtom, browseViewTypeAtom} from '~/state/browse';\n\nimport {BrowsePageItemsView} from './browse_items_view';\nimport type {EditActionsDeps} from './browse_items_view_context';\nimport {BrowseLoggingProvider, useBrowseLogEventMaker} from './browse_logging_context';\nimport {BrowseSnackbarStatus} from './components/browse_page_snackbar';\nimport type {BrowseItemsProps} from './components/common';\nimport {ShareFolderHeader} from './components/header/browse_page_folder_header';\nimport {useSettingsRow} from './components/settings_row';\nimport {FoldersProvider} from './folders_context';\nimport {Page} from '../components/page';\nimport {SigninPage} from '../landing_page/landing_page';\n\nconst ItemsViewContainer = styled(Box)`\n max-height: 100%;\n overflow: auto;\n padding: 0 ${spacing('Micro Large')};\n}`;\n\nconst ReplayLogomark = styled.div`\n width: ${spacing('Macro Medium')};\n height: ${spacing('Macro Medium')};\n ${breakpointSmall(css`\n display: none;\n `)}\n`;\n\nconst LoadingShareFolderPage = () => {\n const setBrowse = useSetAtom(browseAtom);\n const makeLogEvent = useBrowseLogEventMaker();\n const logEvent = React.useMemo(() => makeLogEvent(), [makeLogEvent]);\n\n React.useEffect(() => {\n setBrowse(browseLoadingState);\n }, [setBrowse]);\n\n return (\n <Page title=\"Dropbox Replay\">\n <>\n <ShareFolderPageTopHeader logEvent={logEvent} />\n <ShareFolderHeader loading />\n <ItemsViewContainer marginTop=\"Micro Large\">\n <LoadingGridPlaceholder />\n </ItemsViewContainer>\n </>\n </Page>\n );\n};\n\nconst editActionsDeps: EditActionsDeps = {\n editActionsEnabled: false,\n};\n\nconst ShareFolderPage = () => {\n const {hasLoggedOutError} = useMatchesTutorialsRoute();\n\n const {shareToken, folderId} = useParams() as SharedFolderLinkRouteParams;\n\n const grantBook = useGrantBook(shareToken);\n const setBrowseSort = useSetAtom(browseSortAtom);\n const setBrowseViewType = useSetAtom(browseViewTypeAtom);\n const folderQuery = useGetFolderWithShareLinkQuery({\n folderId,\n shareToken,\n grantBook,\n });\n\n React.useEffect(() => {\n setBrowseSort(replayStorage.getBrowseSort());\n setBrowseViewType(replayStorage.getBrowseViewType());\n }, [setBrowseSort, setBrowseViewType]);\n\n if (folderQuery.error instanceof ShareLinkNotAuthedError) {\n return (\n <Navigate\n to={{\n pathname: '/pw',\n search: `?for=${encodeURIComponent(\n window.location.href.replace(window.location.origin, ''),\n )}`,\n }}\n />\n );\n }\n\n if (hasLoggedOutError) {\n return <SigninPage />;\n }\n\n if (!folderQuery.data) {\n if (folderQuery.error) {\n throw folderQuery.error;\n }\n\n return <LoadingShareFolderPage />;\n }\n\n const accessLevel = folderQuery.data.folder.accessLevel['.tag'];\n if (\n accessLevel === 'admin' ||\n accessLevel === 'owner' ||\n accessLevel === 'super_admin' ||\n accessLevel === 'reviewer'\n ) {\n const lowerLevelFolder =\n folderQuery.data.folder.folderNameIdChainFromRoot[\n folderQuery.data.folder.folderNameIdChainFromRoot.length - 1\n ];\n\n if (accessLevel === 'reviewer') {\n // for reviewers, redirect to the shared folder view\n return <Navigate replace to={`/shared/folder/${lowerLevelFolder.id}`} />;\n } else {\n // redirect to the full folder view, as the user has edit access to it\n return <Navigate replace to={`/folder/${lowerLevelFolder.id}`} />;\n }\n }\n\n return (\n <ShareFolder folderInfo={folderQuery.data} grantBook={grantBook} shareToken={shareToken} />\n );\n};\n\nfunction ShareFolder({\n folderInfo,\n grantBook,\n shareToken,\n}: {\n folderInfo: ShareFolderProp;\n grantBook: string | undefined;\n shareToken: string;\n}) {\n const {redCarpet} = useExtensionContext();\n const setBrowse = useSetAtom(browseAtom);\n const queryClient = useQueryClient();\n const refreshFolders = React.useCallback(async () => {\n queryClient.invalidateQueries(\n replayApi.getFolderWithShareLink(folderInfo.folder.folderId, {grantBook, shareToken}),\n );\n }, [queryClient, folderInfo.folder.folderId, grantBook, shareToken]);\n\n const makeLogEvent = useBrowseLogEventMaker();\n const projectId = folderInfo.folder.currentProjectIdForAmplitude;\n const logEvent = React.useMemo(() => makeLogEvent({projectId}), [makeLogEvent, projectId]);\n const [mobileAndFilter, tableHeader] = useSettingsRow({\n hasSelectAllCheckbox: editActionsDeps.editActionsEnabled,\n hasTopBorder: false,\n logEvent,\n });\n\n React.useEffect(() => {\n setBrowse({\n hasFetchError: false,\n accessLevel: folderInfo.folder.accessLevel['.tag'],\n isRoot: false,\n projects: folderInfo.folder.projectsWithVideos,\n folders: folderInfo.folder.folders,\n teamInfoItems: [],\n snackbar: {status: BrowseSnackbarStatus.HIDDEN},\n hasMorePages: false,\n });\n }, [folderInfo, setBrowse]);\n\n const intl = useIntl();\n\n const untitledFolderFallbackName = intl.formatMessage({\n defaultMessage: 'Untitled folder',\n id: 'z5pwgm',\n description:\n \"Default title given to a user's folder if for some reason the name of their folder is blank (should not happen normally)\",\n });\n\n const makeFileLink: BrowseItemsProps['makeFileLink'] = React.useCallback(\n (linkArgs) => {\n return `/share-folder/${shareToken}/video/${linkArgs.videoId}`;\n },\n [shareToken],\n );\n\n const makeFolderLink: BrowseItemsProps['makeFolderLink'] = React.useCallback(\n (linkArgs) => {\n return `/share-folder/${shareToken}/folder/${linkArgs.folderId}`;\n },\n [shareToken],\n );\n\n const logPageEvent = React.useMemo(() => {\n // Wrap this in `once` so that it only fires once each time the component\n // mounts; we only call it after the folder info has loaded\n return once((currentProjectIdForAmplitude?: string) => {\n const params = new URLSearchParams(window.location.search);\n const emailToken = params.get('_tk');\n let campaignId = emailToken ? Number(emailToken.split('dropbox_email_')[1]) : 0;\n if (!campaignId) {\n campaignId = 0;\n }\n\n const innerLogEvent = makeLogEvent({\n projectId: currentProjectIdForAmplitude,\n });\n\n // eslint-disable-next-line deprecation/deprecation\n innerLogEvent('shown_reel_page', {\n reel_page_source: 'share_folder_folder_page',\n access_type: 'other',\n email_campaign_id: campaignId,\n referrer: getReferrer() || '',\n red_carpet_mode: redCarpet.mode,\n });\n });\n }, [makeLogEvent, redCarpet.mode]);\n\n React.useEffect(() => {\n logPageEvent(folderInfo.folder.currentProjectIdForAmplitude);\n }, [folderInfo, logPageEvent]);\n\n const folderChain = folderInfo.folder.folderNameIdChainFromRoot;\n const topLevelFolder = folderChain[0];\n const {name: topLevelTitle} = topLevelFolder;\n const currentFolder = folderChain[folderChain.length - 1];\n\n return (\n <Page title={topLevelTitle ?? untitledFolderFallbackName}>\n <ShareFolderPageTopHeader logEvent={logEvent} />\n <ShareFolderHeader\n accessLevel={folderInfo.folder.accessLevel['.tag']}\n branding={topLevelFolder.branding as Branding}\n breadcrumbPath={folderChain}\n downloadsEnabled={folderInfo.downloadsEnabled}\n folderId={currentFolder.id}\n folderName={currentFolder.name ?? untitledFolderFallbackName}\n isProject={!!topLevelFolder.branding}\n isSubfolder={folderChain.length > 1}\n isViewOnlyLinkAccess={!folderInfo.showComments}\n loading={false}\n makeFolderLink={makeFolderLink}\n projectDescription={topLevelFolder.description}\n projectName={topLevelTitle ?? untitledFolderFallbackName}\n shareToken={shareToken}\n />\n <Box paddingLeft=\"16\" paddingRight=\"16\">\n {mobileAndFilter}\n </Box>\n <div role=\"table\">\n <Box paddingLeft=\"16\" paddingRight=\"16\" role=\"rowgroup\">\n {tableHeader}\n </Box>\n </div>\n <ItemsViewContainer>\n <BrowsePageItemsView\n breadcrumbPath={folderChain}\n currentFolderId={currentFolder.id}\n currentFolderPermission={folderInfo.folder.accessLevel['.tag']}\n currentProjectAmplitudeId={folderInfo.folder.currentProjectIdForAmplitude}\n editActionsDeps={editActionsDeps}\n grantBook={grantBook}\n isRootLevelView={false}\n logEvent={logEvent}\n makeFileLink={makeFileLink}\n makeFolderLink={makeFolderLink}\n refreshFolders={refreshFolders}\n routeName=\"share-folder\"\n shareRecipients={{}}\n shareToken={shareToken}\n />\n </ItemsViewContainer>\n </Page>\n );\n}\n\nexport const ShareFolderPageWithProviders = () => {\n // The DndProvider is necessary for the drag and drop hooks to run without\n // errors, even though the effect of those hooks is disabled by the edit\n // actions props. Ideally, we would only run the hooks if the drag and drop\n // features are enabled, but that would require significant refactoring.\n\n return (\n <DndProvider backend={HTML5Backend}>\n <BrowseLoggingProvider location=\"shared_folder\">\n <FoldersProvider>\n <ShareFolderPage />\n <CopyLinkSnackbar />\n </FoldersProvider>\n </BrowseLoggingProvider>\n </DndProvider>\n );\n};\n\nconst ShareFolderPageTopHeader = ({logEvent}: {logEvent: LoggingClient['logEvent']}) => {\n const intl = useIntl();\n return (\n <GlobalHeader.Wrapper>\n <GlobalHeader.Logo\n aria-label={intl.formatMessage({\n defaultMessage: 'Go to homepage',\n id: 'BOYNtR',\n description:\n 'Aria label for the product logo in the page header. When clicked, it takes you back to the main homepage.',\n })}\n href=\"/\"\n onClick={() =>\n // eslint-disable-next-line deprecation/deprecation\n logEvent('select_replay_home')\n }\n src={ReplayWordmark}\n />\n <ReplayLogomark>\n <GlyphLogo size={32} src={ReplayGlyph} />\n </ReplayLogomark>\n </GlobalHeader.Wrapper>\n );\n};\n"],"names":["ItemsViewContainer","styled","Box","spacing","ReplayLogomark","breakpointSmall","css","LoadingShareFolderPage","setBrowse","useSetAtom","browseAtom","makeLogEvent","useBrowseLogEventMaker","logEvent","React","browseLoadingState","jsx","Page","jsxs","Fragment","ShareFolderPageTopHeader","ShareFolderHeader","LoadingGridPlaceholder","editActionsDeps","ShareFolderPage","hasLoggedOutError","useMatchesTutorialsRoute","shareToken","folderId","useParams","grantBook","useGrantBook","setBrowseSort","browseSortAtom","setBrowseViewType","browseViewTypeAtom","folderQuery","useGetFolderWithShareLinkQuery","replayStorage","ShareLinkNotAuthedError","Navigate","SigninPage","accessLevel","lowerLevelFolder","ShareFolder","folderInfo","redCarpet","useExtensionContext","queryClient","useQueryClient","refreshFolders","replayApi","projectId","mobileAndFilter","tableHeader","useSettingsRow","BrowseSnackbarStatus","untitledFolderFallbackName","useIntl","makeFileLink","linkArgs","makeFolderLink","logPageEvent","once","currentProjectIdForAmplitude","emailToken","campaignId","getReferrer","folderChain","topLevelFolder","topLevelTitle","currentFolder","BrowsePageItemsView","ShareFolderPageWithProviders","DndProvider","HTML5Backend","BrowseLoggingProvider","FoldersProvider","CopyLinkSnackbar","intl","GlobalHeader","ReplayWordmark","GlyphLogo","ReplayGlyph"],"mappings":"0yBA2CA,MAAMA,EAAqBC,EAAOC,CAAG;AAAA;AAAA;AAAA,eAGtBC,EAAQ,aAAa,CAAC;AAAA,GAG/BC,GAAiBH,EAAO;AAAA,WACnBE,EAAQ,cAAc,CAAC;AAAA,YACtBA,EAAQ,cAAc,CAAC;AAAA,IAC/BE,EAAgBC;AAAAA;AAAAA,GAEjB,CAAC;AAAA,EAGEC,GAAyB,IAAM,CAC7B,MAAAC,EAAYC,EAAWC,CAAU,EACjCC,EAAeC,IACfC,EAAWC,EAAM,QAAQ,IAAMH,IAAgB,CAACA,CAAY,CAAC,EAEnE,OAAAG,EAAM,UAAU,IAAM,CACpBN,EAAUO,EAAkB,CAAA,EAC3B,CAACP,CAAS,CAAC,EAGXQ,EAAA,IAAAC,EAAA,CAAK,MAAM,iBACV,SACEC,EAAA,KAAAC,WAAA,CAAA,SAAA,CAACH,MAAAI,GAAyB,SAAAP,EAAoB,EAC7CG,EAAAA,IAAAK,EAAkB,CAAA,QAAO,GAAC,QAC1BrB,EAAmB,CAAA,UAAU,cAC5B,SAAAgB,MAACM,IAAuB,CAAA,EAC1B,CAAA,CACF,CAAA,CACF,CAAA,CAEJ,EAEMC,EAAmC,CACvC,mBAAoB,EACtB,EAEMC,GAAkB,IAAM,CACtB,KAAA,CAAC,kBAAAC,GAAqBC,IAEtB,CAAC,WAAAC,EAAY,SAAAC,CAAQ,EAAIC,EAAU,EAEnCC,EAAYC,EAAaJ,CAAU,EACnCK,EAAgBvB,EAAWwB,CAAc,EACzCC,EAAoBzB,EAAW0B,CAAkB,EACjDC,EAAcC,EAA+B,CACjD,SAAAT,EACA,WAAAD,EACA,UAAAG,CAAA,CACD,EAOG,GALJhB,EAAM,UAAU,IAAM,CACNkB,EAAAM,EAAc,eAAe,EACzBJ,EAAAI,EAAc,mBAAmB,CAAA,EAClD,CAACN,EAAeE,CAAiB,CAAC,EAEjCE,EAAY,iBAAiBG,EAE7B,OAAAvB,EAAA,IAACwB,EAAA,CACC,GAAI,CACF,SAAU,MACV,OAAQ,QAAQ,mBACd,OAAO,SAAS,KAAK,QAAQ,OAAO,SAAS,OAAQ,EAAE,CAAA,CACxD,EACH,CAAA,CAAA,EAKN,GAAIf,eACMgB,GAAW,CAAA,CAAA,EAGjB,GAAA,CAACL,EAAY,KAAM,CACrB,GAAIA,EAAY,MACd,MAAMA,EAAY,mBAGZ7B,GAAuB,CAAA,CAAA,CACjC,CAEA,MAAMmC,EAAcN,EAAY,KAAK,OAAO,YAAY,MAAM,EAC9D,GACEM,IAAgB,SAChBA,IAAgB,SAChBA,IAAgB,eAChBA,IAAgB,WAChB,CACM,MAAAC,EACJP,EAAY,KAAK,OAAO,0BACtBA,EAAY,KAAK,OAAO,0BAA0B,OAAS,CAC7D,EAEF,OAAIM,IAAgB,WAEX1B,MAACwB,GAAS,QAAO,GAAC,GAAI,kBAAkBG,EAAiB,EAAE,EAAI,CAAA,EAG/D3B,MAACwB,GAAS,QAAO,GAAC,GAAI,WAAWG,EAAiB,EAAE,EAAI,CAAA,CAEnE,cAGGC,GAAY,CAAA,WAAYR,EAAY,KAAM,UAAAN,EAAsB,WAAAH,EAAwB,CAE7F,EAEA,SAASiB,GAAY,CACnB,WAAAC,EACA,UAAAf,EACA,WAAAH,CACF,EAIG,CACK,KAAA,CAAC,UAAAmB,GAAaC,KACdvC,EAAYC,EAAWC,CAAU,EACjCsC,EAAcC,KACdC,EAAiBpC,EAAM,YAAY,SAAY,CACvCkC,EAAA,kBACVG,GAAU,uBAAuBN,EAAW,OAAO,SAAU,CAAC,UAAAf,EAAW,WAAAH,EAAW,CAAA,CACtF,EACC,CAACqB,EAAaH,EAAW,OAAO,SAAUf,EAAWH,CAAU,CAAC,EAE7DhB,EAAeC,IACfwC,EAAYP,EAAW,OAAO,6BAC9BhC,EAAWC,EAAM,QAAQ,IAAMH,EAAa,CAAC,UAAAyC,CAAS,CAAC,EAAG,CAACzC,EAAcyC,CAAS,CAAC,EACnF,CAACC,EAAiBC,CAAW,EAAIC,GAAe,CACpD,qBAAsBhC,EAAgB,mBACtC,aAAc,GACd,SAAAV,CAAA,CACD,EAEDC,EAAM,UAAU,IAAM,CACVN,EAAA,CACR,cAAe,GACf,YAAaqC,EAAW,OAAO,YAAY,MAAM,EACjD,OAAQ,GACR,SAAUA,EAAW,OAAO,mBAC5B,QAASA,EAAW,OAAO,QAC3B,cAAe,CAAC,EAChB,SAAU,CAAC,OAAQW,GAAqB,MAAM,EAC9C,aAAc,EAAA,CACf,CAAA,EACA,CAACX,EAAYrC,CAAS,CAAC,EAIpB,MAAAiD,EAFOC,IAE2B,cAAc,CACpD,eAAgB,kBAChB,GAAI,SACJ,YACE,0HAAA,CACH,EAEKC,EAAiD7C,EAAM,YAC1D8C,GACQ,iBAAiBjC,CAAU,UAAUiC,EAAS,OAAO,GAE9D,CAACjC,CAAU,CAAA,EAGPkC,EAAqD/C,EAAM,YAC9D8C,GACQ,iBAAiBjC,CAAU,WAAWiC,EAAS,QAAQ,GAEhE,CAACjC,CAAU,CAAA,EAGPmC,EAAehD,EAAM,QAAQ,IAG1BiD,GAAMC,GAA0C,CAE/C,MAAAC,EADS,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAC/B,IAAI,KAAK,EAC/B,IAAAC,EAAaD,EAAa,OAAOA,EAAW,MAAM,gBAAgB,EAAE,CAAC,CAAC,EAAI,EACzEC,IACUA,EAAA,GAGOvD,EAAa,CACjC,UAAWqD,CAAA,CACZ,EAGa,kBAAmB,CAC/B,iBAAkB,2BAClB,YAAa,QACb,kBAAmBE,EACnB,SAAUC,MAAiB,GAC3B,gBAAiBrB,EAAU,IAAA,CAC5B,CAAA,CACF,EACA,CAACnC,EAAcmC,EAAU,IAAI,CAAC,EAEjChC,EAAM,UAAU,IAAM,CACPgD,EAAAjB,EAAW,OAAO,4BAA4B,CAAA,EAC1D,CAACA,EAAYiB,CAAY,CAAC,EAEvB,MAAAM,EAAcvB,EAAW,OAAO,0BAChCwB,EAAiBD,EAAY,CAAC,EAC9B,CAAC,KAAME,CAAiB,EAAAD,EACxBE,EAAgBH,EAAYA,EAAY,OAAS,CAAC,EAExD,cACGnD,EAAA,CAAK,MAAOqD,GAAiBb,EAC5B,SAAA,CAACzC,MAAAI,GAAyB,SAAAP,EAAoB,EAC9CG,EAAA,IAACK,EAAA,CACC,YAAawB,EAAW,OAAO,YAAY,MAAM,EACjD,SAAUwB,EAAe,SACzB,eAAgBD,EAChB,iBAAkBvB,EAAW,iBAC7B,SAAU0B,EAAc,GACxB,WAAYA,EAAc,MAAQd,EAClC,UAAW,CAAC,CAACY,EAAe,SAC5B,YAAaD,EAAY,OAAS,EAClC,qBAAsB,CAACvB,EAAW,aAClC,QAAS,GACT,eAAAgB,EACA,mBAAoBQ,EAAe,YACnC,YAAaC,GAAiBb,EAC9B,WAAA9B,CAAA,CACF,QACCzB,EAAI,CAAA,YAAY,KAAK,aAAa,KAChC,SACHmD,EAAA,QACC,MAAA,CAAI,KAAK,QACR,eAACnD,EAAA,CAAI,YAAY,KAAK,aAAa,KAAK,KAAK,WAC1C,UACH,CAAA,EACF,QACCF,EACC,CAAA,SAAAgB,EAAA,IAACwD,GAAA,CACC,eAAgBJ,EAChB,gBAAiBG,EAAc,GAC/B,wBAAyB1B,EAAW,OAAO,YAAY,MAAM,EAC7D,0BAA2BA,EAAW,OAAO,6BAC7C,gBAAAtB,EACA,UAAAO,EACA,gBAAiB,GACjB,SAAAjB,EACA,aAAA8C,EACA,eAAAE,EACA,eAAAX,EACA,UAAU,eACV,gBAAiB,CAAC,EAClB,WAAAvB,CAAA,CAAA,EAEJ,GACF,CAEJ,CAEO,MAAM8C,GAA+B,IAOvCzD,EAAAA,IAAA0D,GAAY,QAASC,EACpB,eAACC,EAAsB,CAAA,SAAS,gBAC9B,SAAC1D,EAAAA,KAAA2D,EACC,CAAA,SAAA,CAAA7D,EAAA,IAACQ,GAAgB,EAAA,QAChBsD,EAAiB,EAAA,CAAA,EACpB,EACF,EACF,EAIE1D,EAA2B,CAAC,CAAC,SAAAP,KAAqD,CACtF,MAAMkE,EAAOrB,IAEX,OAACxC,OAAA8D,EAAa,QAAb,CACC,SAAA,CAAAhE,EAAA,IAACgE,EAAa,KAAb,CACC,aAAYD,EAAK,cAAc,CAC7B,eAAgB,iBAChB,GAAI,SACJ,YACE,2GAAA,CACH,EACD,KAAK,IACL,QAAS,IAEPlE,EAAS,oBAAoB,EAE/B,IAAKoE,EAAA,CACP,EACCjE,EAAAA,IAAAZ,IACC,SAACY,EAAA,IAAAkE,GAAA,CAAU,KAAM,GAAI,IAAKC,GAAa,EACzC,GACF,CAEJ"}