jbrowse-plugin-msaview 5.2.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MsaViewPanel/model.d.ts +25 -29
- package/dist/chunks/AboutDialog-447TIFAW.js +2 -0
- package/dist/chunks/{AboutDialog-IRBPUPJK.js.map → AboutDialog-447TIFAW.js.map} +4 -4
- package/dist/chunks/AnnotationFileDialog-S3N5EHHE.js +2 -0
- package/dist/chunks/AnnotationFileDialog-S3N5EHHE.js.map +7 -0
- package/dist/chunks/ExportSVGDialog-7ZHKKQ7W.js +2 -0
- package/dist/chunks/ExportSVGDialog-7ZHKKQ7W.js.map +7 -0
- package/dist/chunks/{FeatureDialog-ZBX3XQZ5.js → FeatureDialog-EEOGSLOG.js} +1 -1
- package/dist/chunks/{FeatureDialog-ZBX3XQZ5.js.map → FeatureDialog-EEOGSLOG.js.map} +1 -1
- package/dist/chunks/HelpDialog-TCWNBZOV.js +2 -0
- package/dist/chunks/HelpDialog-TCWNBZOV.js.map +7 -0
- package/dist/chunks/{LaunchMsaViewDialog-GJAUPGFC.js → LaunchMsaViewDialog-R6CNRASN.js} +2 -2
- package/dist/chunks/{LaunchMsaViewDialog-GJAUPGFC.js.map → LaunchMsaViewDialog-R6CNRASN.js.map} +1 -1
- package/dist/chunks/MetadataDialog-MNSI6NEW.js +2 -0
- package/dist/chunks/{MetadataDialog-KZWQFRF7.js.map → MetadataDialog-MNSI6NEW.js.map} +2 -2
- package/dist/chunks/MsaViewPanel-R2WAER5O.js +2 -0
- package/dist/chunks/{MsaViewPanel-RUZAKFCB.js.map → MsaViewPanel-R2WAER5O.js.map} +1 -1
- package/dist/chunks/{TrackInfoDialog-IFIG77WO.js → TrackInfoDialog-W2F77IPG.js} +2 -2
- package/dist/chunks/{TrackInfoDialog-IFIG77WO.js.map → TrackInfoDialog-W2F77IPG.js.map} +1 -1
- package/dist/chunks/TreeNodeInfoDialog-T5XMPG3R.js +2 -0
- package/dist/chunks/{TreeNodeInfoDialog-VRCVIF26.js.map → TreeNodeInfoDialog-T5XMPG3R.js.map} +2 -2
- package/dist/chunks/chunk-6EOYBBT4.js +2 -0
- package/dist/chunks/chunk-6EOYBBT4.js.map +7 -0
- package/dist/chunks/chunk-A63PUWQZ.js +6 -0
- package/dist/chunks/chunk-A63PUWQZ.js.map +7 -0
- package/dist/chunks/{chunk-NI3VGKQP.js → chunk-BAM67QHH.js} +2 -2
- package/dist/chunks/chunk-CSCUNTGJ.js +18 -0
- package/dist/chunks/chunk-CSCUNTGJ.js.map +7 -0
- package/dist/chunks/chunk-DEFUNIWW.js +8 -0
- package/dist/chunks/chunk-DEFUNIWW.js.map +7 -0
- package/dist/chunks/{chunk-YOTSFJMU.js → chunk-ERCMNTEQ.js} +1 -1
- package/dist/chunks/{chunk-YOTSFJMU.js.map → chunk-ERCMNTEQ.js.map} +1 -1
- package/dist/chunks/{chunk-GDFVLZYX.js → chunk-FEUZKN5V.js} +2 -2
- package/dist/chunks/{chunk-GDFVLZYX.js.map → chunk-FEUZKN5V.js.map} +1 -1
- package/dist/chunks/{chunk-GIHMPOCO.js → chunk-JF6CW6MO.js} +1 -1
- package/dist/chunks/{chunk-GIHMPOCO.js.map → chunk-JF6CW6MO.js.map} +1 -1
- package/dist/chunks/chunk-K55ZVN73.js +5 -0
- package/dist/chunks/chunk-K55ZVN73.js.map +7 -0
- package/dist/chunks/chunk-L6CBIH6H.js +2 -0
- package/dist/chunks/chunk-L6CBIH6H.js.map +7 -0
- package/dist/chunks/{chunk-F3EC6OCO.js → chunk-NWHZOZMG.js} +1 -1
- package/dist/chunks/{chunk-F3EC6OCO.js.map → chunk-NWHZOZMG.js.map} +1 -1
- package/dist/chunks/chunk-OVAXNTPN.js +2 -0
- package/dist/chunks/chunk-OVAXNTPN.js.map +7 -0
- package/dist/chunks/chunk-TSHN6J7U.js +2 -0
- package/dist/chunks/chunk-TSHN6J7U.js.map +7 -0
- package/dist/chunks/{chunk-H6IQBAW7.js → chunk-WAPIOD25.js} +5 -5
- package/dist/chunks/{chunk-H6IQBAW7.js.map → chunk-WAPIOD25.js.map} +1 -1
- package/dist/chunks/chunk-XVNCZQMR.js +2 -0
- package/dist/chunks/{chunk-ZCT7RD24.js.map → chunk-XVNCZQMR.js.map} +1 -1
- package/dist/chunks/{dist-CMWKVHC7.js → dist-GXYZN4ZR.js} +2 -2
- package/dist/chunks/{dist-CMWKVHC7.js.map → dist-GXYZN4ZR.js.map} +3 -3
- package/dist/chunks/dist-N4ZJK63Q.js +2 -0
- package/dist/chunks/{model-VE7IYWNU.js → model-TCPB6WNJ.js} +2 -2
- package/dist/chunks/{model-VE7IYWNU.js.map → model-TCPB6WNJ.js.map} +1 -1
- package/dist/chunks/renderToSvg-53FEV6IJ.js +2 -0
- package/dist/jbrowse-plugin-msaview.esm.js +2 -2
- package/dist/jbrowse-plugin-msaview.esm.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/src/version.ts +1 -1
- package/dist/chunks/AboutDialog-IRBPUPJK.js +0 -2
- package/dist/chunks/AnnotationFileDialog-FCYYZ4JN.js +0 -2
- package/dist/chunks/AnnotationFileDialog-FCYYZ4JN.js.map +0 -7
- package/dist/chunks/ExportSVGDialog-TYYPI6VB.js +0 -2
- package/dist/chunks/ExportSVGDialog-TYYPI6VB.js.map +0 -7
- package/dist/chunks/MetadataDialog-KZWQFRF7.js +0 -2
- package/dist/chunks/MsaViewPanel-RUZAKFCB.js +0 -2
- package/dist/chunks/TreeNodeInfoDialog-VRCVIF26.js +0 -2
- package/dist/chunks/chunk-F726IWCW.js +0 -2
- package/dist/chunks/chunk-F726IWCW.js.map +0 -7
- package/dist/chunks/chunk-NMYD2GWF.js +0 -18
- package/dist/chunks/chunk-NMYD2GWF.js.map +0 -7
- package/dist/chunks/chunk-QQ5LZUIO.js +0 -11
- package/dist/chunks/chunk-QQ5LZUIO.js.map +0 -7
- package/dist/chunks/chunk-QUWPHTZQ.js +0 -2
- package/dist/chunks/chunk-QUWPHTZQ.js.map +0 -7
- package/dist/chunks/chunk-ZCT7RD24.js +0 -2
- package/dist/chunks/dist-R73J3CC3.js +0 -2
- package/dist/chunks/renderToSvg-VDXAB7TT.js +0 -2
- /package/dist/chunks/{chunk-NI3VGKQP.js.map → chunk-BAM67QHH.js.map} +0 -0
- /package/dist/chunks/{dist-R73J3CC3.js.map → dist-N4ZJK63Q.js.map} +0 -0
- /package/dist/chunks/{renderToSvg-VDXAB7TT.js.map → renderToSvg-53FEV6IJ.js.map} +0 -0
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/MsaViewPanel/model.ts", "../../src/MsaViewPanel/afterCreateAutoruns.ts", "../../src/utils/browserAlign.ts", "../../src/utils/homologSearch.ts", "../../src/utils/msa.ts", "../../src/utils/msaRows.ts", "../../src/utils/searchCache.ts", "../../src/utils/unirefHomologs.ts", "../../src/MsaViewPanel/doLaunchBlast.ts", "../../src/utils/pantherOrthologs.ts", "../../src/MsaViewPanel/doLaunchOrthologs.ts", "../../node_modules/.pnpm/@gmod+bgzf-filehandle@6.7.0/node_modules/@gmod/bgzf-filehandle/src/long.ts", "../../node_modules/.pnpm/@gmod+bgzf-filehandle@6.7.0/node_modules/@gmod/bgzf-filehandle/src/gziIndex.ts", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/constants.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/utils/common.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/utils/strings.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/gzheader.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/adler32.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/crc32.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/inffast.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/inftrees.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/inflate.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/messages.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/zlib/zstream.js", "../../node_modules/.pnpm/pako-esm2@2.0.2/node_modules/pako-esm2/src/inflate.js", "../../node_modules/.pnpm/@gmod+bgzf-filehandle@6.7.0/node_modules/@gmod/bgzf-filehandle/src/util.ts", "../../node_modules/.pnpm/@gmod+bgzf-filehandle@6.7.0/node_modules/@gmod/bgzf-filehandle/src/wasm/bgzf-wasm-inlined.js", "../../node_modules/.pnpm/@gmod+bgzf-filehandle@6.7.0/node_modules/@gmod/bgzf-filehandle/src/unzip.ts", "../../node_modules/.pnpm/@gmod+bgzf-filehandle@6.7.0/node_modules/@gmod/bgzf-filehandle/src/bgzFilehandle.ts", "../../src/MsaViewPanel/fetchIndexedMsa.ts", "../../src/MsaViewPanel/genomeToMSA.ts", "../../src/utils/domainCache.ts", "../../src/utils/ncbiDomains.ts", "../../src/MsaViewPanel/loadProteinDomains.ts", "../../src/MsaViewPanel/msaDataStore.ts", "../../src/MsaViewPanel/runLaunch.ts", "../../src/MsaViewPanel/structureConnection.ts", "../../node_modules/.pnpm/g2p_mapper@2.1.7/node_modules/g2p_mapper/src/index.ts", "../../src/MsaViewPanel/transcriptMap.ts", "../../src/MsaViewPanel/msaCoordToGenomeCoord.ts", "../../src/MsaViewPanel/resolveConnectedTranscript.ts"],
|
|
4
4
|
"sourcesContent": ["import { BaseViewModel } from '@jbrowse/core/pluggableElementTypes'\nimport { getSession } from '@jbrowse/core/util'\nimport { addDisposer, getSnapshot, types } from '@jbrowse/mobx-state-tree'\nimport { autorun } from 'mobx'\nimport { MSAModelF } from 'react-msaview'\n\n// re-exported so the inferred (composed) state-model type can name MSAFormat\n// from msa-parsers when emitting declarations (avoids TS2883 portability error)\nexport type { MSAFormat } from 'msa-parsers'\n\nimport {\n autoLoadProteinDomains,\n launchBlastIfNeeded,\n launchOrthologsIfNeeded,\n loadStoredData,\n observeProteinHighlights,\n processInit,\n runCleanup,\n storeDataToIndexedDB,\n syncGenomeHoverToMsaColumn,\n} from './afterCreateAutoruns'\nimport {\n msaCoordToGenomeCoord,\n msaCoordToGenomeRegions,\n} from './msaCoordToGenomeCoord'\nimport { resolveConnectedTranscriptIfNeeded } from './resolveConnectedTranscript'\nimport { transcriptMap } from './transcriptMap'\n\nimport type {\n BlastDatabase,\n MsaAlgorithm,\n PhmmerDatabase,\n} from '../LaunchMsaView/components/BlastQuery/consts'\nimport type { UnirefIdentity } from '../utils/unirefHomologs'\nimport type { MsaDataPayload } from './msaDataStore'\nimport type { MafRegion, MsaViewInitState } from './types'\nimport type { TranscriptRef } from './util'\nimport type { MenuItem } from '@jbrowse/core/ui'\nimport type { Instance } from '@jbrowse/mobx-state-tree'\nimport type { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view'\n\ntype LGV = LinearGenomeViewModel\n\ntype MaybeLGV = LGV | undefined\n\nexport interface IRegion {\n refName: string\n start: number\n end: number\n}\n\n/**\n * A search to run, discriminated by the program that runs it: the two arms\n * differ in which databases they name and in whether an aligner runs at all, so\n * splitting them is what lets doLaunchBlast read the database without asserting\n * whose it is.\n *\n * The field is still `blastDatabase` rather than `database`: it is persisted in\n * session snapshots and in the IndexedDB result cache, so renaming it would\n * orphan every row already written.\n */\nexport type BlastParams = {\n /** plain JSON, not a Feature: see TranscriptRef */\n selectedTranscript?: TranscriptRef\n /**\n * The query. The dialog always supplies it, translated from the transcript\n * the user picked. A session spec may instead name a UniProt `accession`\n * and have the sequence fetched at launch, or name a `connectedTranscript`\n * on the view and have it translated from the genome (see\n * resolveConnectedTranscript).\n */\n proteinSequence?: string\n accession?: string\n /** hits to keep: phmmer's `nhits`, blastp's `alignments`; 100 when omitted */\n maxHits?: number\n} & (\n | {\n /** absent on params written before phmmer existed, which were all blastp */\n searchProgram?: 'blastp'\n blastDatabase: BlastDatabase\n msaAlgorithm: MsaAlgorithm\n }\n | {\n searchProgram: 'phmmer'\n /** phmmer names its databases its own way: `swissprot`, not `uniprotkb_swissprot` */\n blastDatabase: PhmmerDatabase\n /** phmmer aligns as it searches, so there is no aligner to choose */\n msaAlgorithm?: undefined\n }\n)\n\n/**\n * Where the homolog set comes from. NCBI's ortholog sets cover vertebrates and\n * insects; PANTHER's span its 144 reference proteomes, human to yeast to\n * Arabidopsis; a UniRef cluster is every UniProtKB entry within 50% (or 90%)\n * identity of the query, one per species, from any organism at all -- and the\n * one source of the three whose rows need no ortholog call, only UniProt's\n * REST api (see utils/unirefHomologs.ts).\n */\nexport const orthologSources = ['ncbi', 'panther', 'uniref'] as const\nexport type OrthologSource = (typeof orthologSources)[number]\n\nexport interface OrthologParams {\n /** NCBI taxon id of the assembly the query gene came from */\n taxId: number\n /** `ncbi` when omitted, so every launch written before this key keeps its meaning */\n source?: OrthologSource\n /** UniRef only: the cluster identity level, 50 when omitted */\n identity?: UnirefIdentity\n /**\n * UniRef only: keep members from reference proteomes, which is what makes a\n * cluster one good entry per species rather than every strain and isolate\n * UniProtKB holds. `true` when omitted.\n */\n referenceProteomesOnly?: boolean\n /**\n * taxon ids to include as rows. The query taxon has its own row already, so\n * it is excluded from this set whether or not it is named.\n * Omitted means every species NCBI has an ortholog for, in its report order,\n * which is what a launch that just wants \"this gene across species\" wants.\n */\n taxa?: number[]\n /**\n * how many ortholog rows to align, `defaultMaxSpecies` when omitted. The\n * aligner is what this bounds: EBI runs at roughly half a second per row for\n * a ~1400aa protein, so a gene with 865 orthologs is a 7 minute job at no\n * cap.\n */\n maxSpecies?: number\n /** candidate gene identifiers off the feature, tried in order */\n geneCandidates: string[]\n msaAlgorithm: MsaAlgorithm\n /** plain JSON, not a Feature: see TranscriptRef */\n selectedTranscript?: TranscriptRef\n /**\n * The query row, named `<species>_query`. The launch dialog always supplies\n * it, translated from the\n * transcript the user picked, which is what `connectedFeature` maps genome\n * coordinates through. Omitted \u2014 a session spec naming a gene and nothing\n * else \u2014 the query row becomes NCBI's representative protein for the resolved\n * gene, the same choice every other row makes.\n */\n proteinSequence?: string\n}\n\n/**\n * #stateModel MsaViewPlugin\n * extends\n * - MSAModel from https://github.com/GMOD/react-msaview\n */\nexport default function stateModelFactory() {\n return types\n .compose(\n BaseViewModel,\n MSAModelF(),\n types.model('MsaView', {\n /**\n * #property\n */\n connectedViewId: types.maybe(types.string),\n /**\n * #property\n */\n connectedFeature: types.frozen(),\n /**\n * #property\n * the short form of `connectedFeature`: a transcript id (NM_000546.6)\n * looked up in the connected genome view's tracks at launch, so a\n * session spec can name the transcript instead of carrying its whole\n * exon model. Resolved once into `connectedFeature` and left in place.\n */\n connectedTranscript: types.maybe(types.string),\n /**\n * #property\n */\n blastParams: types.frozen<BlastParams | undefined>(),\n /**\n * #property\n */\n orthologParams: types.frozen<OrthologParams | undefined>(),\n /**\n * #property\n */\n querySeqName: types.stripDefault(types.string, 'QUERY'),\n\n /**\n * #property\n * transcript residues before the query row's first residue, so a\n * transcript position is a row position plus this. A pasted alignment\n * often carries only the aligned region of the query -- BLAST reports\n * what it aligned -- and mapping that row's first residue to the\n * transcript's first residue put every click off by the trimmed\n * amount. Negative when the row runs past the transcript's start.\n */\n querySeqOffset: types.stripDefault(types.number, 0),\n\n /**\n * #property\n */\n uniprotId: types.maybe(types.string),\n\n /**\n * #property\n */\n zoomToBaseLevel: types.stripDefault(types.boolean, false),\n\n /**\n * #property\n */\n init: types.frozen<MsaViewInitState | undefined>(),\n\n /**\n * #property\n */\n dataStoreId: types.maybe(types.string),\n\n /**\n * #property\n * whether the request above has already produced this view's alignment.\n *\n * The params used to be cleared to mark that, which threw away the only\n * statement of what the view is: browser storage expires an alignment\n * after 7 days, and the view could then only tell the user to start\n * over from the gene. A flag says the same thing and duplicates\n * nothing, where a kept copy of the request put a second protein\n * sequence and a second exon model in every saved session.\n *\n * A snapshot property rather than a volatile, because the case it\n * exists for is by construction a later session: expiry is discovered\n * by `loadStoredData` on restore, and a volatile would be false there\n * and refire the whole search unasked.\n */\n launchCompleted: false,\n\n /**\n * #property\n */\n mafRegion: types.frozen<MafRegion | undefined>(),\n }),\n )\n\n .volatile(\n (): {\n rid: string | undefined\n progress: string\n loadingStoredData: boolean\n isStoringData: boolean\n lastStoredData: MsaDataPayload | undefined\n ownsDataStoreRow: boolean\n launchController: AbortController | undefined\n domainsRequested: boolean\n } => ({\n /**\n * #volatile\n */\n rid: undefined,\n /**\n * #volatile\n */\n progress: '',\n /**\n * #volatile\n */\n loadingStoredData: false,\n /**\n * #volatile\n */\n isStoringData: false,\n /**\n * #volatile\n * what IndexedDB was last known to hold for this view, so an edit made\n * after the first write (react-msaview replacing data.tree with a\n * neighbor-joining tree, say) is recognized as needing a new one\n */\n lastStoredData: undefined,\n /**\n * #volatile\n * whether this view wrote the row `dataStoreId` names, this session;\n * a restored row may be shared with a copied view or a duplicated\n * session, so a write to one the view did not create takes a fresh id\n */\n ownsDataStoreRow: false,\n /**\n * #volatile\n * aborts the launch currently in flight -- from the Cancel button, and\n * from the disposer afterCreate registers, so a closed view stops\n * polling EBI instead of running to completion and writing to a node\n * that is gone\n */\n launchController: undefined,\n /**\n * #volatile\n * guards the one-shot auto-fetch of protein domains so it doesn't refire\n * when NCBI returns no domains (leaving the annotation list empty)\n */\n domainsRequested: false,\n }),\n )\n\n .views(self => ({\n /**\n * #getter\n */\n get transcriptToMsaMap() {\n return self.connectedFeature\n ? transcriptMap(self.connectedFeature)\n : undefined\n },\n\n /**\n * #getter\n */\n get connectedView() {\n const { views } = getSession(self)\n return views.find(f => f.id === self.connectedViewId) as MaybeLGV\n },\n }))\n\n .views(self => ({\n /**\n * #getter\n * Genome regions under the current MSA hover column. Suppressed on the LGV\n * while it's being hovered (GenomeMouseoverHighlight shows the crisp 1bp\n * marker there instead of this wider codon band).\n */\n get connectedHoverHighlights(): IRegion[] {\n const { mouseCol } = self\n return mouseCol === undefined\n ? []\n : msaCoordToGenomeRegions({ model: self, coord: mouseCol })\n },\n /**\n * #getter\n * Genome regions under the persistent MSA click selection. Shown\n * regardless of LGV hover, so hovering the genome doesn't hide it.\n */\n get connectedClickHighlights(): IRegion[] {\n const { mouseClickCol } = self\n return mouseClickCol === undefined\n ? []\n : msaCoordToGenomeRegions({ model: self, coord: mouseClickCol })\n },\n /**\n * #getter\n * cross-plugin contract: jbrowse-plugin-mafviewer reads this off the view\n * to draw the same highlights in its own display\n */\n get connectedHighlights(): IRegion[] {\n return [\n ...this.connectedHoverHighlights,\n ...this.connectedClickHighlights,\n ]\n },\n }))\n\n .views(self => ({\n /**\n * #getter\n * overrides base\n *\n * react-msaview drops any snapshot document over 50kb and warns that a\n * link to the view opens without it. True for an alignment this browser\n * is holding in IndexedDB; wrong for an indexed view, whose kept `init`\n * names a bgzip block over HTTP that processInit refetches wherever the\n * session is opened -- so that one showed \"Not in the link\" about an\n * alignment the link does carry.\n */\n get hostRestoresData() {\n const { msaIndexedLocation, msaName } = self.init ?? {}\n // `hostCarriesData` first: it is the base answer, the volatile a simple\n // host flips, and overriding the getter without it threw that switch\n // away for every view this one does not speak for\n return self.hostCarriesData || !!(msaIndexedLocation && msaName)\n },\n /**\n * #getter\n * the documents a reload would lose: too big for react-msaview to keep\n * in the snapshot, and with no filehandle or kept init to refetch them\n * from. IndexedDB holds exactly these.\n */\n get unsavedDocuments(): MsaDataPayload {\n const { data, init } = self\n const inSnapshot = getSnapshot(data)\n const unsaved = (key: keyof MsaDataPayload, source: unknown) => {\n const text = data[key]\n return text && !source && !inSnapshot[key] ? text : undefined\n }\n return {\n msa: unsaved('msa', self.msaFilehandle ?? init?.msaIndexedLocation),\n tree: unsaved('tree', self.treeFilehandle),\n treeMetadata: unsaved('treeMetadata', self.treeMetadataFilehandle),\n gff: unsaved('gff', self.gffFilehandle),\n }\n },\n }))\n\n .actions(self => ({\n /**\n * #action\n */\n setZoomToBaseLevel(arg: boolean) {\n self.zoomToBaseLevel = arg\n },\n /**\n * #action\n */\n setProgress(arg: string) {\n self.progress = arg\n },\n /**\n * #action\n */\n setRid(arg: string) {\n self.rid = arg\n },\n /**\n * #action\n */\n setBlastParams(args?: BlastParams) {\n self.blastParams = args\n },\n /**\n * #action\n */\n setConnectedFeature(arg?: Record<string, unknown>) {\n self.connectedFeature = arg\n },\n /**\n * #action\n */\n setOrthologParams(args?: OrthologParams) {\n self.orthologParams = args\n },\n /**\n * #action\n */\n setInit(arg?: MsaViewInitState) {\n self.init = arg\n },\n /**\n * #action\n */\n setQuerySeqName(arg: string) {\n self.querySeqName = arg\n },\n /**\n * #action\n */\n setUniprotId(arg?: string) {\n self.uniprotId = arg\n },\n /**\n * #action\n */\n setDataStoreId(arg?: string) {\n self.dataStoreId = arg\n },\n /**\n * #action\n */\n setLaunchCompleted(arg: boolean) {\n self.launchCompleted = arg\n },\n /**\n * #action\n */\n setLoadingStoredData(arg: boolean) {\n self.loadingStoredData = arg\n },\n /**\n * #action\n */\n setIsStoringData(arg: boolean) {\n self.isStoringData = arg\n },\n /**\n * #action\n */\n setLastStoredData(arg?: MsaDataPayload) {\n self.lastStoredData = arg\n },\n /**\n * #action\n */\n setOwnsDataStoreRow(arg: boolean) {\n self.ownsDataStoreRow = arg\n },\n /**\n * #action\n */\n setLaunchController(arg?: AbortController) {\n self.launchController = arg\n },\n /**\n * #action\n * Abandon the launch, in flight or failed. The EBI job keeps running on\n * their side \u2014 nothing here can recall it, and its JobLink stays valid \u2014\n * so this only stops the polling and the writes it would make. Dropping\n * the request (the params, or the init) is what keeps it from refiring on\n * the next reload; the view falls back to the import form, which is where\n * react-msaview's own cancel leaves it too.\n */\n cancelLaunch() {\n self.launchController?.abort()\n self.launchController = undefined\n self.blastParams = undefined\n self.orthologParams = undefined\n self.init = undefined\n self.launchCompleted = false\n self.progress = ''\n self.rid = undefined\n self.error = undefined\n },\n /**\n * #action\n * Run the request again. The request IS the params, so re-stating them is\n * the whole retry: each is a frozen property, and a fresh object is a\n * change the launch autoruns wake on.\n *\n * A launch that already succeeded keeps its params and is marked\n * `launchCompleted`, so clearing that mark is the whole retry for a view\n * whose stored alignment expired.\n */\n retryLaunch() {\n self.launchController?.abort()\n self.launchController = undefined\n self.progress = ''\n self.rid = undefined\n self.error = undefined\n self.launchCompleted = false\n if (self.blastParams) {\n self.blastParams = { ...self.blastParams }\n }\n if (self.orthologParams) {\n self.orthologParams = { ...self.orthologParams }\n }\n if (self.init) {\n self.init = { ...self.init }\n }\n },\n /**\n * #action\n */\n setDomainsRequested(arg: boolean) {\n self.domainsRequested = arg\n },\n /**\n * #action\n */\n handleMsaClick(coord: number) {\n const { connectedView, zoomToBaseLevel } = self\n const r2 = msaCoordToGenomeCoord({ model: self, coord })\n\n if (!r2 || !connectedView) {\n return\n }\n\n // Use the genome coord's own refName for both nav paths \u2014 it matches the\n // connected view's displayed regions. Canonicalizing (e.g. \"chr17\"->\"17\")\n // can miss a view whose regions are an alias (same as the bpToPx path).\n if (zoomToBaseLevel) {\n connectedView.navTo(r2)\n } else {\n connectedView.centerAt(r2.start, r2.refName)\n }\n },\n }))\n .actions(self => {\n const superSetMouseClickPos = self.setMouseClickPos.bind(self)\n\n return {\n /**\n * #action\n */\n setMouseClickPos(col?: number, row?: number) {\n superSetMouseClickPos(col, row)\n if (col !== undefined) {\n self.handleMsaClick(col)\n }\n },\n }\n })\n\n .actions(self => {\n const superReset = self.reset.bind(self)\n return {\n /**\n * #action\n * overrides base\n *\n * react-msaview's reset applies a snapshot filtered to its own\n * `preservedOnReset` list, and a downstream property is never on it:\n * returning to the import form dropped the view's name, un-minimized\n * it, and forgot the zoom-on-click preference. The volatiles fail the\n * other way -- applySnapshot cannot reach them, so the last file's\n * state carried into the next one and the domain auto-load, which fires\n * once per view, never fired again.\n */\n reset() {\n const { displayName, minimized, zoomToBaseLevel } = self\n superReset()\n if (displayName !== undefined) {\n self.setDisplayName(displayName)\n }\n self.setMinimized(minimized)\n self.setZoomToBaseLevel(zoomToBaseLevel)\n self.setDomainsRequested(false)\n self.setLastStoredData(undefined)\n self.setOwnsDataStoreRow(false)\n },\n }\n })\n\n .views(self => {\n const superMenuItems = self.menuItems.bind(self)\n return {\n /**\n * #method\n * overrides base\n */\n menuItems(): MenuItem[] {\n return [\n ...superMenuItems(),\n {\n label: 'Zoom to base level on click?',\n type: 'checkbox',\n checked: self.zoomToBaseLevel,\n onClick: () => {\n self.setZoomToBaseLevel(!self.zoomToBaseLevel)\n },\n },\n ]\n },\n }\n })\n\n .actions(self => ({\n afterCreate() {\n runCleanup()\n // ties the launch to the view: closing one mid-BLAST used to leave the\n // poller running for the job's lifetime and then call actions on a\n // destroyed node, which surfaced as an unhandled rejection\n addDisposer(self, () => {\n self.launchController?.abort()\n })\n loadStoredData(self)\n for (const fn of [\n storeDataToIndexedDB,\n resolveConnectedTranscriptIfNeeded,\n launchBlastIfNeeded,\n launchOrthologsIfNeeded,\n processInit,\n autoLoadProteinDomains,\n ]) {\n addDisposer(\n self,\n autorun(() => {\n fn(self)\n }),\n )\n }\n // these two keep per-reaction state across runs (a \"did I set it?\" flag),\n // so they're factories returning the autorun body rather than plain fns\n addDisposer(self, autorun(syncGenomeHoverToMsaColumn(self)))\n addDisposer(self, autorun(observeProteinHighlights(self)))\n },\n }))\n}\n\nexport type JBrowsePluginMsaViewStateModel = ReturnType<\n typeof stateModelFactory\n>\nexport type JBrowsePluginMsaViewModel = Instance<JBrowsePluginMsaViewStateModel>\n\nexport { type MafRegion, type MsaViewInitState } from './types'\n", "import { getSession } from '@jbrowse/core/util'\nimport { addDisposer, isAlive } from '@jbrowse/mobx-state-tree'\nimport { transaction } from 'mobx'\n\nimport { isAbortError } from '../utils/fetch'\nimport { doLaunchBlast } from './doLaunchBlast'\nimport { doLaunchOrthologs } from './doLaunchOrthologs'\nimport { fetchIndexedMsa } from './fetchIndexedMsa'\nimport { genomeToMSA } from './genomeToMSA'\nimport { loadProteinDomains } from './loadProteinDomains'\nimport {\n cleanupOldData,\n generateDataStoreId,\n retrieveMsaData,\n storeMsaData,\n} from './msaDataStore'\nimport { runLaunch } from './runLaunch'\nimport { getProteinViews } from './structureConnection'\nimport { proteinPositionsInRange } from './transcriptMap'\nimport {\n getUniprotIdFromAlphaFoldUrl,\n hasQueryRow,\n transcriptPosToVisibleCol,\n} from './util'\n\nimport type { JBrowsePluginMsaViewModel } from './model'\nimport type { MsaDataPayload } from './msaDataStore'\nimport type { LaunchScope, LaunchedData } from './runLaunch'\n\nconst EXPIRED_MESSAGE =\n \"This view's alignment is no longer in browser storage. Stored alignments are kept for 7 days after they were last used, and are lost when site data is cleared.\"\n\nconst RELAUNCHABLE = ' Retry runs the original search again and rebuilds it.'\n\nconst START_OVER = ' Relaunch it from the gene to rebuild it.'\n\nconst UNREADABLE_MESSAGE =\n \"This view's alignment could not be read from browser storage.\"\n\nconst EXPIRED_EXTRAS_WARNING =\n 'Part of this view is no longer in browser storage: annotations, a tree or row metadata too large for the session. Stored documents are kept for 7 days after they were last used, and are lost when site data is cleared.'\n\nexport function loadStoredData(self: JBrowsePluginMsaViewModel) {\n const { dataStoreId } = self\n if (!dataStoreId) {\n return\n }\n void (async () => {\n try {\n self.setLoadingStoredData(true)\n const stored = await retrieveMsaData(dataStoreId)\n if (self.dataStoreId !== dataStoreId) {\n return\n }\n transaction(() => {\n if (stored) {\n const { data } = self\n if (stored.msa && !data.msa) {\n self.setMSA(stored.msa)\n }\n if (stored.tree && !data.tree) {\n self.setTree(stored.tree)\n }\n if (stored.treeMetadata && !data.treeMetadata) {\n self.setTreeMetadata(stored.treeMetadata)\n }\n if (stored.gff && !data.gff) {\n self.setGFF(stored.gff)\n }\n self.setLastStoredData(stored)\n } else {\n self.setDataStoreId(undefined)\n if (hasAlignmentSource(self)) {\n self.addWarning(EXPIRED_EXTRAS_WARNING)\n } else {\n self.setError(\n new Error(\n EXPIRED_MESSAGE +\n ((self.blastParams ?? self.orthologParams)\n ? RELAUNCHABLE\n : START_OVER),\n ),\n )\n }\n }\n })\n } catch (e) {\n console.error('Failed to load MSA data from IndexedDB:', e)\n // the row may still be there, so the id is kept for the next reload\n if (isAlive(self) && !hasAlignmentSource(self)) {\n self.setError(\n new Error(\n `${UNREADABLE_MESSAGE} ${e}.${(self.blastParams ?? self.orthologParams) ? RELAUNCHABLE : START_OVER}`,\n ),\n )\n }\n } finally {\n self.setLoadingStoredData(false)\n }\n })()\n}\n\nfunction hasAlignmentSource(self: JBrowsePluginMsaViewModel) {\n return !!(\n self.data.msa ||\n self.msaFilehandle ||\n self.init?.msaIndexedLocation\n )\n}\n\nfunction isEmpty(data: MsaDataPayload) {\n return !(data.msa || data.tree || data.treeMetadata || data.gff)\n}\n\nfunction sameData(a: MsaDataPayload | undefined, b: MsaDataPayload) {\n return (\n !!a &&\n a.msa === b.msa &&\n a.tree === b.tree &&\n a.treeMetadata === b.treeMetadata &&\n a.gff === b.gff\n )\n}\n\n/**\n * Keep IndexedDB holding `unsavedDocuments`. A view writes in place only to a\n * row it created (`ownsDataStoreRow`), and never deletes one, since other\n * views may name it: an emptied set drops the id and cleanupOldData ages the\n * row out. `lastStoredData` is recorded even when a write fails, so a browser\n * refusing IndexedDB fails once rather than in a loop.\n */\nexport function storeDataToIndexedDB(self: JBrowsePluginMsaViewModel) {\n const {\n dataStoreId,\n ownsDataStoreRow,\n isStoringData,\n loadingStoredData,\n lastStoredData,\n } = self\n const data = self.unsavedDocuments\n if (isStoringData || loadingStoredData || sameData(lastStoredData, data)) {\n return\n }\n if (isEmpty(data)) {\n if (lastStoredData) {\n transaction(() => {\n self.setDataStoreId(undefined)\n self.setOwnsDataStoreRow(false)\n self.setLastStoredData(data)\n })\n }\n return\n }\n\n self.setIsStoringData(true)\n void (async () => {\n try {\n const id =\n dataStoreId && ownsDataStoreRow ? dataStoreId : generateDataStoreId()\n if (await storeMsaData(id, data)) {\n transaction(() => {\n self.setDataStoreId(id)\n self.setOwnsDataStoreRow(true)\n })\n }\n } catch (e) {\n console.error('Failed to store MSA data to IndexedDB:', e)\n } finally {\n transaction(() => {\n self.setLastStoredData(data)\n self.setIsStoringData(false)\n })\n }\n })()\n}\n\n/**\n * A launch that names its transcript rather than its feature waits for the\n * lookup, since the query row is that transcript's translation. The resolver\n * setting `connectedFeature` is what refires the launchers.\n */\nfunction awaitingTranscript(self: JBrowsePluginMsaViewModel) {\n return !!self.connectedTranscript && !self.connectedFeature\n}\n\n/**\n * The params are the request and `launchCompleted` marks it done. They stay in\n * place on failure, so the error is attributable, and on success, because a\n * stored alignment that expired is rebuilt from them.\n */\nfunction launchIfNeeded(\n self: JBrowsePluginMsaViewModel,\n requested: boolean,\n message: string,\n launch: (scope: LaunchScope) => Promise<LaunchedData>,\n) {\n if (requested && !self.launchCompleted && !awaitingTranscript(self)) {\n runLaunch({\n self,\n message,\n launch,\n onLaunched: () => {\n self.setLaunchCompleted(true)\n },\n })\n }\n}\n\nexport function launchOrthologsIfNeeded(self: JBrowsePluginMsaViewModel) {\n launchIfNeeded(self, !!self.orthologParams, 'Resolving orthologs', scope =>\n doLaunchOrthologs({ self, scope }),\n )\n}\n\nexport function launchBlastIfNeeded(self: JBrowsePluginMsaViewModel) {\n launchIfNeeded(self, !!self.blastParams, 'Submitting query', scope =>\n doLaunchBlast({ self, scope }),\n )\n}\n\n/**\n * Once an alignment whose rows carry accessions is present, fetch NCBI CDD\n * domains for them and overlay them. `domainsRequested` makes this once per\n * view, so NCBI returning no domains does not refire it.\n */\nexport function autoLoadProteinDomains(self: JBrowsePluginMsaViewModel) {\n const { rows, domainsRequested, annotations, rowData } = self\n if (\n rows.length > 0 &&\n annotations.length === 0 &&\n !domainsRequested &&\n Object.values(rowData).some(row => row?.Accession)\n ) {\n const controller = new AbortController()\n const abort = () => {\n controller.abort()\n }\n addDisposer(self, abort)\n self.setDomainsRequested(true)\n self.setStatus({\n msg: 'Fetching protein domains from NCBI',\n onCancel: abort,\n })\n void (async () => {\n try {\n await loadProteinDomains(self, controller.signal)\n } catch (e) {\n if (!isAbortError(e)) {\n console.error('[msaview-domains] auto-load failed:', e)\n }\n } finally {\n if (isAlive(self)) {\n self.setStatus(undefined)\n }\n }\n })()\n }\n}\n\n// Resolve the declarative `init` launch contract. msaUrl is handed to\n// react-msaview's native filehandle loader (openLocation + progress + abort +\n// CORS-proxy) and sniffed for an AlphaFold uniprotId; the bgzip name-indexed\n// block is the one source with no native loader, so it's fetched here. Inline\n// data and tree URLs arrive as native snapshot props, not via init.\n//\n// An init that named the indexed block is KEPT rather than cleared, as\n// jbrowse-plugin-tview keeps its own: what it resolves to is one alignment\n// string, react-msaview drops a document over 50kb from the snapshot, and there\n// is no filehandle to reload it from -- so a shared session came back saying the\n// alignment had expired. The init is both smaller than what it fetches and the\n// only durable statement of what the view is.\nexport function processInit(self: JBrowsePluginMsaViewModel) {\n const { init } = self\n if (init) {\n const { msaUrl, msaIndexedLocation, msaName, querySeqName } = init\n const indexed = !!(msaIndexedLocation && msaName)\n // a kept init re-runs this on every session restore; the alignment already\n // in hand is the one it would fetch\n if (indexed && self.data.msa) {\n return\n }\n void (async () => {\n try {\n self.setError(undefined)\n\n const uniprotId = msaUrl\n ? getUniprotIdFromAlphaFoldUrl(msaUrl)\n : undefined\n if (uniprotId) {\n self.setUniprotId(uniprotId)\n }\n const rowName = querySeqName ?? (uniprotId ? 'query' : undefined)\n if (rowName) {\n self.setQuerySeqName(rowName)\n }\n\n if (msaUrl) {\n self.setMSAFilehandle({ uri: msaUrl, locationType: 'UriLocation' })\n } else if (msaIndexedLocation && msaName) {\n const fasta = await fetchIndexedMsa({\n location: msaIndexedLocation,\n name: msaName,\n })\n if (!fasta) {\n throw new Error(\n `No alignment named ${msaName} in ${msaIndexedLocation.uri}`,\n )\n }\n self.setMSA(fasta)\n }\n\n if (!indexed) {\n self.setInit(undefined)\n }\n } catch (e) {\n self.setError(e)\n console.error(e)\n }\n })()\n }\n}\n\n/**\n * Mirror the connected genome view's hover position onto the MSA's hovered\n * column. Returns the autorun body so it can keep a flag tracking whether the\n * MSA's mouseCol was set by this sync: that way an unrelated session hover\n * change clears the column only when the genome put it there, never wiping a\n * column the user is hovering directly in the MSA.\n */\nexport function syncGenomeHoverToMsaColumn(self: JBrowsePluginMsaViewModel) {\n let genomeDrivenCol = false\n return () => {\n const col = genomeToMSA({ model: self })\n if (col !== undefined) {\n self.setMousePos(col)\n genomeDrivenCol = true\n } else if (genomeDrivenCol) {\n self.setMousePos(undefined)\n genomeDrivenCol = false\n }\n }\n}\n\n/**\n * Translate genome regions published by a 3D protein view into this MSA's\n * visible columns. The genome is the only coordinate space the two plugins\n * share, so the hops are genome coord -> protein position (the transcript's g2p\n * map) -> visible column.\n */\nfunction genomeHighlightsToVisibleColumns(\n self: JBrowsePluginMsaViewModel,\n field: 'hoverGenomeHighlights' | 'clickGenomeHighlights',\n) {\n const { connectedViewId, transcriptToMsaMap } = self\n if (!transcriptToMsaMap || !hasQueryRow(self)) {\n return []\n }\n const columns = new Set<number>()\n\n for (const view of getProteinViews(getSession(self).views)) {\n for (const structure of view.structures) {\n if (structure.connectedViewId !== connectedViewId) {\n continue\n }\n for (const { start, end } of structure[field] ?? []) {\n for (const proteinPos of proteinPositionsInRange(\n transcriptToMsaMap,\n start,\n end,\n )) {\n const col = transcriptPosToVisibleCol(self, proteinPos)\n if (col !== undefined) {\n columns.add(col)\n }\n }\n }\n }\n }\n\n return [...columns]\n}\n\nfunction sameColumns(a: number[] | undefined, b: number[] | undefined) {\n if (!a || !b) {\n return a === b\n }\n return a.length === b.length && a.every((col, i) => col === b[i])\n}\n\n/**\n * Mirror a connected 3D protein view's highlights onto the MSA's highlighted\n * columns, from either of the two channels protein3d publishes:\n *\n * - `hoverGenomeHighlights` \u2014 the residue under the pointer, transient.\n * - `clickGenomeHighlights` \u2014 the domain the user clicked, persistent. Also\n * what protein3d's declarative `initialSelection` lights on load, so a session\n * spec that pre-selects a domain in the structure now lands in the alignment\n * too, instead of the caller having to author the same range a second time as\n * the MSA's own `highlightColumns`.\n *\n * Highest-priority non-empty source wins: a hover reads as a transient probe on\n * top of the standing selection, and letting it win means moving the pointer\n * over the structure previews a residue without destroying what was selected.\n * Releasing the hover falls back to the click selection, then to the declarative\n * `highlightColumns` seed.\n *\n * Resolving the seed as the last rung of that stack is what replaced a\n * `proteinDriven` flag this function used to carry. The flag existed because the\n * body could not otherwise tell \"no protein highlight, leave the seed alone\"\n * from \"the protein highlight ended, restore the seed\", and getting that wrong\n * wiped the seed on the very first run \u2014 the bug that made the BRAF/TP53\n * genome-browser links open with no V600/R248 column lit. Now every source is in\n * one expression, so the result depends only on what the sources currently say\n * and there is no ordering to get wrong.\n *\n * A closure remains, but it decides nothing: `written` only suppresses a\n * redundant redraw. Delete it and the highlight is identical, just recomputed\n * more often \u2014 where deleting the old flag changed which columns lit.\n */\nexport function observeProteinHighlights(self: JBrowsePluginMsaViewModel) {\n // The columns this reaction last wrote, kept to skip a write that would not\n // change anything: protein3d recomputes hoverGenomeHighlights on every mouse\n // move over the structure, and moving within one codon yields a fresh array of\n // the same columns, which would redraw the overlay canvas for nothing.\n //\n // Deliberately a closure rather than a read of `self.highlightedColumns` --\n // reading it would put this reaction's own output in its dependency set, so\n // every write would re-trigger it. It converges, but the dependencies should be\n // the sources the highlight derives FROM, not the highlight itself.\n let written: number[] | undefined\n return () => {\n const { connectedViewId, transcriptToMsaMap } = self\n\n if (!connectedViewId || !transcriptToMsaMap) {\n return\n }\n\n const hover = genomeHighlightsToVisibleColumns(\n self,\n 'hoverGenomeHighlights',\n )\n // Skipping the click channel while hovering is worth the subtlety it costs:\n // a hover recomputes on every mouse move, and a clicked domain can be\n // hundreds of residues, so translating a selection that cannot win would\n // walk thousands of genome coordinates per pointer move.\n //\n // The subtlety is that not reading clickGenomeHighlights leaves it out of\n // this reaction's dependencies until the hover clears. Changing the\n // selection mid-hover therefore does not re-run us -- which is harmless,\n // because the hover would have outranked it anyway, and releasing the hover\n // re-runs and picks up whatever the selection now says.\n const click = hover.length\n ? []\n : genomeHighlightsToVisibleColumns(self, 'clickGenomeHighlights')\n const seed = self.highlightColumns ?? []\n\n const winner = hover.length ? hover : click.length ? click : seed\n const next = winner.length > 0 ? winner : undefined\n\n if (!sameColumns(written, next)) {\n written = next\n self.setHighlightedColumns(next)\n }\n }\n}\n\nexport function runCleanup() {\n cleanupOldData().catch((e: unknown) => {\n console.error('Failed to cleanup old MSA data:', e)\n })\n}\n", "import { timeout } from './fetch'\n\n// A query-anchored alignment built in the browser, so a homolog panel needs no\n// alignment job at EBI at all.\n//\n// Every target is aligned to the query on its own -- BLOSUM62, affine gaps,\n// free end gaps so a domain-only homolog is not charged for the query's\n// flanks -- and the pairwise alignments are merged on the query: one column\n// per query residue, and between two query residues as many insert columns as\n// the longest insertion any target put there. That is the alignment a search\n// tool hands back anyway (phmmer's profile has one match state per query\n// residue, BLAST reports each hit against the query), and it is exact where\n// the genome connection needs it: the query row is the query, residue for\n// residue, so `connectedFeature` maps every column to its codon.\n//\n// What it is not is a progressive alignment: two targets agree with each other\n// only through the query, so a region absent from the query -- an insert --\n// is padded, not aligned. `allowedGappyness` hides those columns in the view.\n\n// prettier-ignore\nconst BLOSUM62_KEYS = 'ARNDCQEGHILKMFPSTWYVBZX*'\n// prettier-ignore\nconst BLOSUM62_DATA = [\n [ 4,-1,-2,-2, 0,-1,-1, 0,-2,-1,-1,-1,-1,-2,-1, 1, 0,-3,-2, 0,-2,-1, 0,-4],\n [-1, 5, 0,-2,-3, 1, 0,-2, 0,-3,-2, 2,-1,-3,-2,-1,-1,-3,-2,-3,-1, 0,-1,-4],\n [-2, 0, 6, 1,-3, 0, 0, 0, 1,-3,-3, 0,-2,-3,-2, 1, 0,-4,-2,-3, 3, 0,-1,-4],\n [-2,-2, 1, 6,-3, 0, 2,-1,-1,-3,-4,-1,-3,-3,-1, 0,-1,-4,-3,-3, 4, 1,-1,-4],\n [ 0,-3,-3,-3, 9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],\n [-1, 1, 0, 0,-3, 5, 2,-2, 0,-3,-2, 1, 0,-3,-1, 0,-1,-2,-1,-2, 0, 3,-1,-4],\n [-1, 0, 0, 2,-4, 2, 5,-2, 0,-3,-3, 1,-2,-3,-1, 0,-1,-3,-2,-2, 1, 4,-1,-4],\n [ 0,-2, 0,-1,-3,-2,-2, 6,-2,-4,-4,-2,-3,-3,-2, 0,-2,-2,-3,-3,-1,-2,-1,-4],\n [-2, 0, 1,-1,-3, 0, 0,-2, 8,-3,-3,-1,-2,-1,-2,-1,-2,-2, 2,-3, 0, 0,-1,-4],\n [-1,-3,-3,-3,-1,-3,-3,-4,-3, 4, 2,-3, 1, 0,-3,-2,-1,-3,-1, 3,-3,-3,-1,-4],\n [-1,-2,-3,-4,-1,-2,-3,-4,-3, 2, 4,-2, 2, 0,-3,-2,-1,-2,-1, 1,-4,-3,-1,-4],\n [-1, 2, 0,-1,-3, 1, 1,-2,-1,-3,-2, 5,-1,-3,-1, 0,-1,-3,-2,-2, 0, 1,-1,-4],\n [-1,-1,-2,-3,-1, 0,-2,-3,-2, 1, 2,-1, 5, 0,-2,-1,-1,-1,-1, 1,-3,-1,-1,-4],\n [-2,-3,-3,-3,-2,-3,-3,-3,-1, 0, 0,-3, 0, 6,-4,-2,-2, 1, 3,-1,-3,-3,-1,-4],\n [-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4, 7,-1,-1,-4,-3,-2,-2,-1,-2,-4],\n [ 1,-1, 1, 0,-1, 0, 0, 0,-1,-2,-2, 0,-1,-2,-1, 4, 1,-3,-2,-2, 0, 0, 0,-4],\n [ 0,-1, 0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1, 1, 5,-2,-2, 0,-1,-1, 0,-4],\n [-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1, 1,-4,-3,-2,11, 2,-3,-4,-3,-2,-4],\n [-2,-2,-2,-3,-2,-1,-2,-3, 2,-1,-1,-2,-1, 3,-3,-2,-2, 2, 7,-1,-3,-2,-1,-4],\n [ 0,-3,-3,-3,-1,-2,-2,-3,-3, 3, 1,-2, 1,-1,-2,-2, 0,-3,-1, 4,-3,-2,-1,-4],\n [-2,-1, 3, 4,-3, 0, 1,-1, 0,-3,-4, 0,-3,-3,-2, 0,-1,-4,-3,-3, 4, 1,-1,-4],\n [-1, 0, 0, 1,-3, 3, 4,-2, 0,-3,-3, 1,-1,-3,-1, 0,-1,-3,-2,-2, 1, 4,-1,-4],\n [ 0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2, 0, 0,-2,-1,-1,-1,-1,-1,-4],\n [-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4, 1],\n]\n\nconst NUM_SYMBOLS = BLOSUM62_KEYS.length\nconst BLOSUM62 = Int8Array.from(BLOSUM62_DATA.flat())\nconst UNKNOWN = BLOSUM62_KEYS.indexOf('X')\n\nconst symbolOfCode = new Uint8Array(128).fill(UNKNOWN)\nfor (let i = 0; i < NUM_SYMBOLS; i++) {\n const key = BLOSUM62_KEYS[i]!\n symbolOfCode[key.charCodeAt(0)] = i\n symbolOfCode[key.toLowerCase().charCodeAt(0)] = i\n}\n\nfunction encode(seq: string) {\n const out = new Uint8Array(seq.length)\n for (let i = 0; i < seq.length; i++) {\n const code = seq.charCodeAt(i)\n out[i] = code < 128 ? symbolOfCode[code]! : UNKNOWN\n }\n return out\n}\n\nconst GAP_OPEN = 11\nconst GAP_EXTEND = 1\nconst NEG = -1_000_000\n\nconst M = 0\nconst X = 1\nconst Y = 2\n\n/**\n * One target against the query, as the pieces the merge needs: the target\n * residue (or gap) under each query residue, and the target residues inserted\n * before each query residue -- `inserts[query.length]` being what follows the\n * last one.\n */\nexport interface QueryAnchored {\n matched: string[]\n inserts: string[]\n}\n\n/**\n * Gotoh's affine-gap alignment with free end gaps on both sequences. Three\n * states -- M pairs two residues, X puts a query residue against a gap, Y puts\n * a target residue against a gap -- with rolling score rows and one byte of\n * traceback per cell, two bits per state.\n */\nexport function alignToQuery(query: string, target: string): QueryAnchored {\n const q = encode(query)\n const t = encode(target)\n const n = q.length\n const m = t.length\n const w = m + 1\n\n const ptr = new Uint8Array((n + 1) * w)\n\n let prevM = new Int32Array(w)\n let prevX = new Int32Array(w)\n let prevY = new Int32Array(w)\n let curM = new Int32Array(w)\n let curX = new Int32Array(w)\n let curY = new Int32Array(w)\n\n // leading gaps are free: a target that starts inside the query, or a query\n // that starts inside the target, pays nothing for the overhang\n prevM[0] = 0\n prevX[0] = NEG\n prevY[0] = NEG\n for (let j = 1; j <= m; j++) {\n prevM[j] = NEG\n prevX[j] = NEG\n prevY[j] = 0\n }\n\n let best = NEG\n let bestI = 0\n let bestJ = 0\n let bestState = M\n\n for (let i = 1; i <= n; i++) {\n curM[0] = NEG\n curX[0] = 0\n curY[0] = NEG\n const qi = q[i - 1]! * NUM_SYMBOLS\n const row = i * w\n for (let j = 1; j <= m; j++) {\n const s = BLOSUM62[qi + t[j - 1]!]!\n\n // M: from any state at (i-1, j-1)\n let mScore = prevM[j - 1]!\n let mFrom = M\n if (prevX[j - 1]! > mScore) {\n mScore = prevX[j - 1]!\n mFrom = X\n }\n if (prevY[j - 1]! > mScore) {\n mScore = prevY[j - 1]!\n mFrom = Y\n }\n curM[j] = mScore + s\n\n // X: query residue i against a gap, from (i-1, j)\n let xScore = prevM[j]! - GAP_OPEN\n let xFrom = M\n if (prevX[j]! - GAP_EXTEND > xScore) {\n xScore = prevX[j]! - GAP_EXTEND\n xFrom = X\n }\n if (prevY[j]! - GAP_OPEN > xScore) {\n xScore = prevY[j]! - GAP_OPEN\n xFrom = Y\n }\n curX[j] = xScore\n\n // Y: target residue j against a gap, from (i, j-1)\n let yScore = curM[j - 1]! - GAP_OPEN\n let yFrom = M\n if (curY[j - 1]! - GAP_EXTEND > yScore) {\n yScore = curY[j - 1]! - GAP_EXTEND\n yFrom = Y\n }\n if (curX[j - 1]! - GAP_OPEN > yScore) {\n yScore = curX[j - 1]! - GAP_OPEN\n yFrom = X\n }\n curY[j] = yScore\n ptr[row + j] = mFrom | (xFrom << 2) | (yFrom << 4)\n }\n\n // trailing gaps are free too, so the alignment may end anywhere on the\n // last column (query exhausted) or the last row (target exhausted)\n for (const [state, arr] of [\n [M, curM],\n [X, curX],\n [Y, curY],\n ] as const) {\n if (arr[m]! > best) {\n best = arr[m]!\n bestI = i\n bestJ = m\n bestState = state\n }\n }\n if (i === n) {\n for (let j = 0; j < m; j++) {\n for (const [state, arr] of [\n [M, curM],\n [X, curX],\n [Y, curY],\n ] as const) {\n if (arr[j]! > best) {\n best = arr[j]!\n bestI = n\n bestJ = j\n bestState = state\n }\n }\n }\n }\n\n ;[prevM, curM] = [curM, prevM]\n ;[prevX, curX] = [curX, prevX]\n ;[prevY, curY] = [curY, prevY]\n }\n\n const matched = Array.from<string>({ length: n }).fill('-')\n const inserts = Array.from<string>({ length: n + 1 }).fill('')\n\n // whatever lies past the end point is an overhang: target residues after the\n // last aligned pair are an insert after the query, query residues after it\n // sit over gaps (already the default)\n inserts[n] = target.slice(bestJ)\n let i = bestI\n let j = bestJ\n let state = bestState\n let pending: string[] = []\n const flushInsert = (at: number) => {\n if (pending.length) {\n inserts[at] = pending.reverse().join('') + inserts[at]!\n pending = []\n }\n }\n while (i > 0 && j > 0) {\n const idx = i * w + j\n if (state === M) {\n flushInsert(i)\n matched[i - 1] = target[j - 1]!\n state = ptr[idx]! & 3\n i--\n j--\n } else if (state === X) {\n flushInsert(i)\n state = (ptr[idx]! >> 2) & 3\n i--\n } else {\n pending.push(target[j - 1]!)\n state = ptr[idx]! >> 4\n j--\n }\n }\n flushInsert(i)\n // a leading target overhang goes before the first query residue\n inserts[0] = target.slice(0, j) + inserts[0]!\n return { matched, inserts }\n}\n\nexport interface NamedSequence {\n name: string\n sequence: string\n}\n\n/** Merge per-target alignments on the query into one set of equal-length rows. */\nexport function mergeOnQuery(\n query: NamedSequence,\n aligned: { name: string; alignment: QueryAnchored }[],\n) {\n const n = query.sequence.length\n const insertLength = new Array<number>(n + 1).fill(0)\n for (const { alignment } of aligned) {\n for (let i = 0; i <= n; i++) {\n insertLength[i] = Math.max(insertLength[i]!, alignment.inserts[i]!.length)\n }\n }\n const rowOf = (matched: string[], inserts: string[]) => {\n const parts: string[] = []\n for (let i = 0; i <= n; i++) {\n parts.push(inserts[i]!.padEnd(insertLength[i]!, '-'))\n if (i < n) {\n parts.push(matched[i]!)\n }\n }\n return parts.join('')\n }\n return [\n {\n name: query.name,\n sequence: rowOf(\n query.sequence.split(''),\n Array.from<string>({ length: n + 1 }).fill(''),\n ),\n },\n ...aligned.map(({ name, alignment }) => ({\n name,\n sequence: rowOf(alignment.matched, alignment.inserts),\n })),\n ]\n}\n\nexport const MAX_PAIR_CELLS = 50_000_000\n\nconst CELLS_PER_YIELD = 5_000_000\n\nexport function checkPairSize(\n name: string,\n length: number,\n queryLength: number,\n) {\n if (length * queryLength > MAX_PAIR_CELLS) {\n throw new Error(\n `${name} (${length} residues) against the ${queryLength}-residue query is too large to align in the browser, which stops at ${MAX_PAIR_CELLS / 1e6}M residue pairs per sequence. Choose an EBI aligner such as Clustal Omega instead.`,\n )\n }\n}\n\n/**\n * Align `targets` to `query` in the browser and return the rows as FASTA, the\n * query first. Yields every few million cells so the UI stays responsive and a\n * cancel is honoured mid-way.\n */\nexport async function alignInBrowser({\n query,\n targets,\n onProgress,\n signal,\n}: {\n query: NamedSequence\n targets: NamedSequence[]\n onProgress?: (arg: string) => void\n signal?: AbortSignal\n}) {\n for (const target of targets) {\n checkPairSize(target.name, target.sequence.length, query.sequence.length)\n }\n const aligned: { name: string; alignment: QueryAnchored }[] = []\n let sinceYield = Infinity\n for (const target of targets) {\n if (sinceYield >= CELLS_PER_YIELD) {\n onProgress?.(\n `Aligning ${aligned.length + 1} of ${targets.length} sequences in the browser...`,\n )\n await timeout(0, signal)\n sinceYield = 0\n }\n aligned.push({\n name: target.name,\n alignment: alignToQuery(query.sequence, target.sequence),\n })\n sinceYield += query.sequence.length * target.sequence.length\n }\n return mergeOnQuery(query, aligned)\n .map(r => `>${r.name}\\n${r.sequence}`)\n .join('\\n')\n}\n\n/** The first record is the query, the rest the targets: the shape every launch submits. */\nexport function parseFastaRecords(text: string): NamedSequence[] {\n const records: NamedSequence[] = []\n for (const block of text.split('>')) {\n const [header, ...lines] = block.split('\\n')\n const name = header?.trim().split(/\\s+/)[0]\n if (name) {\n records.push({\n name,\n sequence: lines.join('').replaceAll(/[\\s*-]/g, ''),\n })\n }\n }\n return records\n}\n", "import { searchEbiBlast } from './ebiBlast'\nimport { searchEbiPhmmer } from './phmmer'\n\nimport type { SearchProgram } from '../LaunchMsaView/components/BlastQuery/consts'\n\n// The seam a similarity search sits behind. Every search program answers the\n// same question -- what in a database looks like this sequence -- and differs\n// only in whether the answer comes back aligned. A backend takes one request\n// and returns hits; the launch (doLaunchBlast) names them, fetches taxonomy,\n// and either keeps the alignment it was handed or runs an aligner. Adding a\n// program means one function here, not a new arm through every layer: a\n// self-hosted DIAMOND or MMseqs2 endpoint would be a `SearchBackend` that\n// returns unaligned hits and nothing else in the plugin would know.\n\nexport interface SearchHit {\n accession: string\n id: string\n sciname: string\n taxid?: number\n title?: string\n /**\n * the hit's residues: aligned to the query (with gaps) when the result\n * carries `queryRow`, bare otherwise\n */\n sequence: string\n /** the matched region of the target, for a target that matched more than once */\n range?: string\n}\n\nexport interface SearchResult {\n /** the job id at the service, for the link the panel shows while it runs */\n rid?: string\n hits: SearchHit[]\n /**\n * the query as the search aligned it, gaps included, when the program aligns\n * as it searches. Absent, the hits are unaligned and an aligner runs next.\n */\n queryRow?: string\n}\n\nexport interface SearchRequest {\n query: string\n database: string\n maxHits?: number\n onProgress: (arg: string) => void\n onRid: (arg: string) => void\n signal?: AbortSignal\n}\n\nexport type SearchBackend = (request: SearchRequest) => Promise<SearchResult>\n\nexport const searchBackends: Record<SearchProgram, SearchBackend> = {\n blastp: searchEbiBlast,\n phmmer: searchEbiPhmmer,\n}\n", "import { alignInBrowser, parseFastaRecords } from './browserAlign'\nimport { runEbiJob } from './ebiJobDispatcher'\n\nimport type {\n EbiMsaAlgorithm,\n MsaAlgorithm,\n} from '../LaunchMsaView/components/BlastQuery/consts'\n\nconst algorithms: Record<\n EbiMsaAlgorithm,\n {\n params: Record<string, string>\n msaResult: string\n treeResult: string\n }\n> = {\n clustalo: {\n params: {},\n msaResult: 'aln-clustal_num',\n treeResult: 'phylotree',\n },\n muscle: {\n params: { format: 'clw', tree: 'tree1' },\n msaResult: 'fa',\n treeResult: 'phylotree',\n },\n kalign: {\n params: { stype: 'protein' },\n msaResult: 'fa',\n treeResult: 'phylotree',\n },\n mafft: {\n params: { stype: 'protein' },\n msaResult: 'fa',\n treeResult: 'phylotree',\n },\n}\n\n/**\n * Align a FASTA whose first record is the query. `browser` never leaves the\n * page and returns no tree, which the launch then builds itself (see\n * runLaunch); the EBI aligners return their guide tree alongside the rows.\n */\nexport async function launchMSA({\n algorithm,\n sequence,\n onProgress,\n signal,\n}: {\n algorithm: MsaAlgorithm\n sequence: string\n onProgress: (arg: string) => void\n signal?: AbortSignal\n}) {\n if (algorithm === 'browser') {\n const [query, ...targets] = parseFastaRecords(sequence)\n if (!query) {\n throw new Error('Nothing to align')\n }\n return {\n msa: await alignInBrowser({ query, targets, onProgress, signal }),\n tree: '',\n }\n }\n const config = algorithms[algorithm]\n const job = await runEbiJob({\n tool: algorithm,\n label: `${algorithm} MSA`,\n params: { ...config.params, sequence },\n onProgress,\n signal,\n })\n const [msa, tree] = await Promise.all([\n job.result(config.msaResult),\n job.result(config.treeResult),\n ])\n return { msa, tree }\n}\n", "import type { SearchHit } from './homologSearch'\nimport type { TaxonomyInfo } from './taxonomyNames'\n\nfunction makeId(\n h: { accession: string; sciname: string; taxid?: number },\n taxonomyInfo?: Map<number, TaxonomyInfo>,\n) {\n let speciesName = h.sciname.replaceAll(' ', '_')\n if (h.taxid && taxonomyInfo?.has(h.taxid)) {\n const info = taxonomyInfo.get(h.taxid)!\n if (info.commonName) {\n speciesName = info.commonName\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join('_')\n }\n }\n return `${h.accession}-${speciesName}`\n}\n\n/**\n * Turning search results into the rows the view is given, kept free of any\n * jbrowse or network import so the whole assembly can be run and checked\n * outside a browser \u2014 see test/phmmerLive.test.ts.\n */\nexport function buildRowMetadata(\n desc: Omit<SearchHit, 'sequence' | 'range'>,\n taxonomyInfo: Map<number, TaxonomyInfo>,\n) {\n const metadata: Record<string, string> = {}\n const taxInfo = desc.taxid ? taxonomyInfo.get(desc.taxid) : undefined\n\n if (taxInfo?.sciname) {\n metadata['Scientific name'] = taxInfo.sciname\n }\n if (taxInfo?.commonName) {\n metadata['Common name'] = taxInfo.commonName\n }\n if (desc.accession) {\n metadata.Accession = desc.accession\n }\n if (desc.id) {\n metadata.ID = desc.id\n }\n if (desc.title) {\n metadata.Description = desc.title\n }\n\n return metadata\n}\n\n/**\n * One target can match the query in several places and phmmer emits a row per\n * matched envelope \u2014 four for lamprey albumin against human albumin, which has\n * three domains. Those rows share an accession and so would share a name, and\n * duplicate names silently collapse rows in both the MSA and the tree, so the\n * envelope disambiguates them.\n */\nfunction makeRowNames(\n hits: SearchHit[],\n taxonomyInfo: Map<number, TaxonomyInfo>,\n) {\n const baseNames = hits.map(hit => makeId(hit, taxonomyInfo))\n const counts = new Map<string, number>()\n for (const name of baseNames) {\n counts.set(name, (counts.get(name) ?? 0) + 1)\n }\n\n const used = new Set<string>()\n return baseNames.map((base, i) => {\n let name =\n counts.get(base)! > 1 ? `${base}_${hits[i]!.range ?? i + 1}` : base\n while (used.has(name)) {\n name = `${name}_${i + 1}`\n }\n used.add(name)\n return name\n })\n}\n\n/**\n * A search result as the view receives it: FASTA whose first row is the query,\n * plus the per-row metadata keyed by the same names, which are also what the\n * tree's leaves are labelled with. With `queryRow` the hits are already in\n * columns and this IS the alignment; without it the rows are bare and the\n * FASTA is what an aligner is handed.\n */\nexport function buildSearchMsa({\n hits,\n query,\n queryRow,\n taxonomyInfo,\n querySeqName = 'QUERY',\n}: {\n hits: SearchHit[]\n query: string\n queryRow?: string\n taxonomyInfo: Map<number, TaxonomyInfo>\n querySeqName?: string\n}) {\n const treeMetadata: Record<string, Record<string, string>> = {}\n const rowNames = makeRowNames(hits, taxonomyInfo)\n const sequences = hits.map((hit, i) => {\n const rowName = rowNames[i]!\n treeMetadata[rowName] = buildRowMetadata(hit, taxonomyInfo)\n return `>${rowName}\\n${hit.sequence}`\n })\n\n return {\n msa: [`>${querySeqName}\\n${queryRow ?? query}`, ...sequences].join('\\n'),\n treeMetadata,\n }\n}\n", "import { bestEffort, createDbOpener } from './idb'\n\nimport type { DBSchema } from 'idb'\n\nconst DB_NAME = 'jbrowse-msaview-search-cache'\nconst STORE_NAME = 'searches'\nexport const MAX_CACHED_SEARCHES = 20\nexport const MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000\n\nexport interface CachedSearch {\n id: string\n fasta: string\n treeMetadata: Record<string, Record<string, string>>\n rid?: string\n timestamp: number\n}\n\ninterface SearchCacheDB extends DBSchema {\n [STORE_NAME]: {\n key: string\n value: CachedSearch\n }\n}\n\nconst getDB = createDbOpener<SearchCacheDB>(DB_NAME, 1, db => {\n db.createObjectStore(STORE_NAME, { keyPath: 'id' })\n})\n\nexport function searchKey({\n searchProgram,\n database,\n maxHits,\n querySeqName,\n query,\n}: {\n searchProgram: string\n database: string\n maxHits?: number\n querySeqName: string\n query: string\n}) {\n return [searchProgram, database, maxHits ?? '', querySeqName, query].join(':')\n}\n\nexport function getCachedSearch(id: string) {\n return bestEffort(\n 'search cache read',\n async () => {\n const entry = await (await getDB()).get(STORE_NAME, id)\n return entry && Date.now() - entry.timestamp < MAX_AGE_MS\n ? entry\n : undefined\n },\n undefined,\n )\n}\n\nexport function saveSearch(entry: Omit<CachedSearch, 'timestamp'>) {\n return bestEffort(\n 'search cache write',\n async () => {\n const db = await getDB()\n await db.put(STORE_NAME, { ...entry, timestamp: Date.now() })\n if ((await db.count(STORE_NAME)) > MAX_CACHED_SEARCHES) {\n const all = await db.getAll(STORE_NAME)\n const doomed = all\n .toSorted((a, b) => a.timestamp - b.timestamp)\n .slice(0, all.length - MAX_CACHED_SEARCHES)\n const tx = db.transaction(STORE_NAME, 'readwrite')\n await Promise.all([...doomed.map(e => tx.store.delete(e.id)), tx.done])\n }\n },\n undefined,\n )\n}\n", "// Homologs from UniRef, with no search job and no aligner job.\n//\n// UniProt has already clustered every UniProtKB sequence by identity: a\n// UniRef50 cluster holds everything within 50% identity of its seed, UniRef90\n// everything within 90%. So \"what is like this protein, across all of\n// UniProtKB\" is one lookup -- the query's cluster -- and one listing of the\n// cluster's members, both from rest.uniprot.org, which sends\n// `Access-Control-Allow-Origin: *` and answers in a second or two. Measured\n// 2026-09-05: human TP53's UniRef50 cluster has 191 UniProtKB members, 129 of\n// them in a reference proteome, against a phmmer job at EBI that took 15\n// minutes to answer the same question that day.\n//\n// What a cluster is NOT is a sensitivity search. Identity clustering stops at\n// its threshold, so p53's cluster is mammals and no fish; the remote homologs\n// phmmer or BLAST would reach are in other clusters. The two are complements,\n// which is why both are offered.\n//\n// Rows come out as OrthologRow, the shape ncbiOrthologs.ts and\n// pantherOrthologs.ts produce, so the launch, the labels and the aligner do not\n// know which source ran. `protein` is the UniProt accession, which is what the\n// CDD overlay reads through efetch (Swiss-Prot rows only; see the PANTHER note\n// in docs/alignments-from-a-gene.md).\n\nimport { handleFetch, isAbortError, jsonfetch } from './fetch'\nimport {\n cleanGeneCandidate,\n dedupeLabels,\n defaultMaxSpecies,\n} from './ncbiOrthologs'\n\nimport type { OrthologRow } from './ncbiOrthologs'\n\nconst UNIPROT = 'https://rest.uniprot.org'\n\nconst unirefIdentities = [50, 90] as const\nexport type UnirefIdentity = (typeof unirefIdentities)[number]\n\n// the \"Reference proteome\" keyword, KW-1185: one well-annotated proteome per\n// taxonomic neighbourhood, which is what keeps a cluster from being a hundred\n// near-identical strains\nconst REFERENCE_PROTEOME = 'keyword:KW-1185'\n\n// UniProt's own accession grammar, isoform suffix allowed\nexport const UNIPROT_ACCESSION =\n /^(?:[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})(?:-\\d+)?$/\n\ninterface UniProtEntry {\n primaryAccession?: string\n uniProtkbId?: string\n entryType?: string\n organism?: {\n scientificName?: string\n commonName?: string\n taxonId?: number\n }\n proteinDescription?: {\n recommendedName?: { fullName?: { value?: string } }\n submissionNames?: { fullName?: { value?: string } }[]\n }\n sequence?: { value?: string; length?: number }\n}\n\nexport interface UnirefMember {\n accession: string\n id: string\n reviewed: boolean\n taxId: number\n scientificName: string\n commonName?: string\n title?: string\n sequence: string\n}\n\nconst ENTRY_FIELDS =\n 'accession,id,reviewed,organism_name,organism_id,protein_name,sequence'\n\nexport function parseEntry(entry: UniProtEntry): UnirefMember | undefined {\n const { primaryAccession, uniProtkbId, organism, sequence } = entry\n if (!primaryAccession || !organism?.taxonId || !sequence?.value) {\n return undefined\n }\n return {\n accession: primaryAccession,\n id: uniProtkbId ?? primaryAccession,\n reviewed: /\\breviewed\\b/i.test(entry.entryType ?? ''),\n taxId: organism.taxonId,\n scientificName: organism.scientificName ?? String(organism.taxonId),\n commonName: organism.commonName,\n title:\n entry.proteinDescription?.recommendedName?.fullName?.value ??\n entry.proteinDescription?.submissionNames?.[0]?.fullName?.value,\n sequence: sequence.value,\n }\n}\n\nfunction parseEntries(json: unknown) {\n return ((json as { results?: UniProtEntry[] }).results ?? []).flatMap(e => {\n const m = parseEntry(e)\n return m ? [m] : []\n })\n}\n\n/** A reviewed entry outranks an unreviewed one; among equals, the longest. */\nfunction rank(a: UnirefMember, b: UnirefMember) {\n return (\n Number(b.reviewed) - Number(a.reviewed) ||\n b.sequence.length - a.sequence.length\n )\n}\n\n/**\n * The query as UniProt knows it. A candidate that already is a UniProt\n * accession is fetched directly; a gene symbol is searched in the query\n * organism, reviewed entries first.\n */\nexport async function resolveUniProtEntry(\n candidates: string[],\n taxId: number,\n signal?: AbortSignal,\n): Promise<UnirefMember | undefined> {\n for (const raw of candidates) {\n const candidate = cleanGeneCandidate(raw)\n if (!candidate) {\n continue\n }\n // gene symbols fit the accession grammar too -- P2RY12, B3GAT1 -- and\n // UniProt answers those with an error, so a miss goes on to the gene search\n if (UNIPROT_ACCESSION.test(candidate)) {\n try {\n const entry = parseEntry(\n await jsonfetch<UniProtEntry>(\n `${UNIPROT}/uniprotkb/${candidate}?fields=${ENTRY_FIELDS}`,\n { signal },\n ),\n )\n if (entry) {\n return entry\n }\n } catch (e) {\n if (isAbortError(e)) {\n throw e\n }\n }\n }\n const query = `gene_exact:\"${candidate.replaceAll('\"', '')}\" AND organism_id:${taxId}`\n const json = await jsonfetch(\n `${UNIPROT}/uniprotkb/search?query=${encodeURIComponent(query)}&fields=${ENTRY_FIELDS}&size=25`,\n { signal },\n )\n const [best] = parseEntries(json).sort(rank)\n if (best) {\n return best\n }\n }\n return undefined\n}\n\n/** `uniref/search` -> the id of the cluster an accession belongs to at `identity`. */\nasync function fetchClusterId(\n accession: string,\n identity: UnirefIdentity,\n signal?: AbortSignal,\n) {\n const query = `(uniprot_id:${accession}) AND (identity:${identity / 100})`\n const json = (await jsonfetch(\n `${UNIPROT}/uniref/search?query=${encodeURIComponent(query)}&fields=id,count&size=1`,\n { signal },\n )) as { results?: { id?: string; memberCount?: number }[] }\n const cluster = json.results?.[0]\n return cluster?.id\n ? { id: cluster.id, memberCount: cluster.memberCount }\n : undefined\n}\n\n// a page per request, followed through the Link header; the scan stops once\n// enough species have been seen, so a ten-thousand-member cluster of a kinase\n// domain does not have to be read to the end\nconst PAGE = 500\nconst MAX_SCANNED = 5000\n\nfunction nextLink(response: Response) {\n const link = response.headers.get('link') ?? ''\n return /<([^>]+)>;\\s*rel=\"next\"/.exec(link)?.[1]\n}\n\n/**\n * The cluster's UniProtKB members, one per species: reviewed over unreviewed,\n * then longest. `taxa` narrows to those species, `exclude` drops one (the\n * query's own, which has its own row), `limit` caps the result.\n */\nexport async function fetchClusterMembers({\n clusterId,\n identity,\n referenceProteomesOnly = true,\n taxa,\n exclude,\n limit = defaultMaxSpecies,\n onProgress,\n signal,\n}: {\n clusterId: string\n identity: UnirefIdentity\n referenceProteomesOnly?: boolean\n taxa?: Set<number>\n exclude?: number\n limit?: number\n onProgress?: (arg: string) => void\n signal?: AbortSignal\n}) {\n const query = [\n `uniref_cluster_${identity}:${clusterId}`,\n ...(referenceProteomesOnly ? [REFERENCE_PROTEOME] : []),\n ].join(' AND ')\n let url: string | undefined =\n `${UNIPROT}/uniprotkb/search?query=${encodeURIComponent(query)}&fields=${ENTRY_FIELDS}&size=${PAGE}&format=json`\n\n const bySpecies = new Map<number, UnirefMember>()\n let scanned = 0\n let total: number | undefined\n while (url && scanned < MAX_SCANNED) {\n const response = await handleFetch(url, { signal })\n total ??= Number(response.headers.get('x-total-results')) || undefined\n const members = parseEntries(await response.json())\n scanned += members.length\n for (const member of members) {\n if (member.taxId === exclude || (taxa && !taxa.has(member.taxId))) {\n continue\n }\n const current = bySpecies.get(member.taxId)\n if (!current || rank(member, current) < 0) {\n bySpecies.set(member.taxId, member)\n }\n }\n onProgress?.(\n `Read ${scanned}${total ? ` of ${total}` : ''} cluster members, ${bySpecies.size} species...`,\n )\n // every species asked for has its reviewed entry, which nothing later in\n // the listing outranks\n if (\n taxa &&\n [...taxa].every(t => t === exclude || bySpecies.get(t)?.reviewed)\n ) {\n break\n }\n url = members.length ? nextLink(response) : undefined\n }\n return {\n total,\n /** members read, short of `total` when the scan stopped at its cap */\n scanned,\n /** whether the listing went on past what was read */\n truncated: !!url && scanned >= MAX_SCANNED,\n rows: [...bySpecies.values()].sort(rank).slice(0, limit),\n }\n}\n\nexport interface UnirefHomologs {\n query: UnirefMember\n clusterId: string\n /** how many UniProtKB entries the cluster listing held before the one-per-species pick */\n total?: number\n /** set when the cluster was too large to read whole */\n warning?: string\n rows: OrthologRow[]\n}\n\n/**\n * The whole UniRef half of the pipeline: gene or accession -> UniProt entry ->\n * cluster -> one member per species, carrying labels, accessions and\n * sequences. Three requests for a typical cluster, none of them a job.\n */\nexport async function fetchUnirefHomologs({\n candidates,\n taxId,\n identity = 50,\n referenceProteomesOnly = true,\n taxa,\n exclude,\n limit = defaultMaxSpecies,\n onProgress,\n signal,\n}: {\n candidates: string[]\n taxId: number\n identity?: UnirefIdentity\n referenceProteomesOnly?: boolean\n taxa?: Set<number>\n exclude?: number\n limit?: number\n onProgress: (arg: string) => void\n signal?: AbortSignal\n}): Promise<UnirefHomologs> {\n onProgress('Resolving the query at UniProt...')\n const query = await resolveUniProtEntry(candidates, taxId, signal)\n if (!query) {\n throw new Error(\n `UniProt has no entry for ${candidates.join(', ')} in taxon ${taxId}. Try the BLAST tab, which needs no gene identifier.`,\n )\n }\n\n onProgress(`Finding the UniRef${identity} cluster of ${query.id}...`)\n const cluster = await fetchClusterId(query.accession, identity, signal)\n if (!cluster) {\n throw new Error(`${query.accession} is in no UniRef${identity} cluster`)\n }\n\n const {\n total,\n scanned,\n truncated,\n rows: members,\n } = await fetchClusterMembers({\n clusterId: cluster.id,\n identity,\n referenceProteomesOnly,\n taxa,\n exclude,\n limit,\n onProgress,\n signal,\n })\n if (members.length < 1) {\n throw new Error(\n `${cluster.id} has no other ${referenceProteomesOnly ? 'reference-proteome ' : ''}member to align ${query.id} against`,\n )\n }\n\n const labels = dedupeLabels(\n members.map(m => m.commonName ?? m.scientificName),\n )\n return {\n query,\n clusterId: cluster.id,\n total,\n warning: truncated\n ? `${cluster.id} lists ${total ?? 'more than ' + scanned} UniProtKB entries and the first ${scanned} were read, so species whose only entries come later are missing.`\n : undefined,\n rows: members.map((m, i) => ({\n taxId: m.taxId,\n label: labels[i]!,\n scientificName: m.scientificName,\n commonName: m.commonName,\n geneId: m.id,\n protein: m.accession,\n sequence: m.sequence,\n })),\n }\n}\n", "import { defaultMaxHits } from '../LaunchMsaView/components/BlastQuery/consts'\nimport { cleanProteinSequence } from '../LaunchMsaView/util'\nimport { saveBlastResult } from '../utils/blastCache'\nimport { checkPairSize } from '../utils/browserAlign'\nimport { searchBackends } from '../utils/homologSearch'\nimport { launchMSA } from '../utils/msa'\nimport { buildSearchMsa } from '../utils/msaRows'\nimport { getCachedSearch, saveSearch, searchKey } from '../utils/searchCache'\nimport { fetchTaxonomyInfo } from '../utils/taxonomyNames'\nimport { resolveUniProtEntry } from '../utils/unirefHomologs'\nimport { str, transcriptFields, transcriptName } from './util'\n\nimport type { JBrowsePluginMsaViewModel } from './model'\nimport type { LaunchScope, LaunchedData } from './runLaunch'\n\n/**\n * The query sequence, and what its row is called. The dialog hands over the\n * translated transcript and the row stays `QUERY`; a spec naming a UniProt\n * accession has the sequence fetched and the row named after the entry\n * (`P53_HUMAN_query`), since a search of swissprot returns the entry itself\n * as a hit and two rows called the same thing collapse into one.\n */\nasync function resolveQuery(\n self: JBrowsePluginMsaViewModel,\n scope: LaunchScope,\n) {\n const params = self.blastParams!\n if (params.proteinSequence) {\n return {\n sequence: cleanProteinSequence(params.proteinSequence),\n name: self.querySeqName,\n }\n }\n if (params.accession) {\n scope.onProgress(`Fetching ${params.accession} from UniProt...`)\n const entry = await resolveUniProtEntry([params.accession], 0, scope.signal)\n if (!entry) {\n throw new Error(`UniProt has no entry ${params.accession}`)\n }\n const name = `${entry.id}_query`\n scope.act(() => {\n self.setQuerySeqName(name)\n })\n return { sequence: entry.sequence, name }\n }\n throw new Error(\n 'No query: a search needs a proteinSequence, a UniProt accession, or a connectedTranscript to translate',\n )\n}\n\ninterface SearchOutcome {\n fasta: string\n treeMetadata: Record<string, Record<string, string>>\n rid?: string\n queryRow?: string\n warnings?: string[]\n}\n\nasync function search({\n self,\n scope,\n query,\n querySeqName,\n maxHits,\n key,\n}: {\n self: JBrowsePluginMsaViewModel\n scope: LaunchScope\n query: string\n querySeqName: string\n maxHits: number\n key: string\n}): Promise<SearchOutcome> {\n const params = self.blastParams!\n const { onProgress, onRid, signal } = scope\n const { hits, queryRow, rid } = await searchBackends[\n params.searchProgram ?? 'blastp'\n ]({\n query,\n database: params.blastDatabase,\n maxHits,\n onProgress,\n onRid,\n signal,\n })\n if (hits.length === 0) {\n throw new Error('No hits found')\n }\n\n onProgress('Fetching species taxonomy info...')\n const nameFailures: unknown[] = []\n const taxonomyInfo = await fetchTaxonomyInfo(\n hits.map(h => h.taxid).filter((t): t is number => t !== undefined),\n signal,\n e => {\n nameFailures.push(e)\n },\n )\n const { msa: fasta, treeMetadata } = buildSearchMsa({\n hits,\n query,\n queryRow,\n taxonomyInfo,\n querySeqName,\n })\n // rows named without NCBI's answer are not worth reusing for a week\n const namesFailed = nameFailures.length > 0\n if (!queryRow && !namesFailed) {\n await saveSearch({ id: key, fasta, treeMetadata, rid })\n }\n return {\n fasta,\n treeMetadata,\n rid,\n queryRow,\n warnings: namesFailed\n ? [\n 'NCBI did not answer for some species names, so those rows are named by scientific name alone.',\n ]\n : [],\n }\n}\n\n/**\n * A similarity search, then an alignment of what it found. The program is a\n * backend behind one interface (utils/homologSearch.ts); what differs between\n * them is settled by whether the result came back aligned. A program that\n * aligns as it searches (phmmer) hands over the alignment and the tree is\n * built from it in the browser; one that does not (blastp) hands over bare\n * hits and the chosen aligner runs on them.\n */\nexport async function doLaunchBlast({\n self,\n scope,\n}: {\n self: JBrowsePluginMsaViewModel\n scope: LaunchScope\n}): Promise<LaunchedData> {\n const params = self.blastParams!\n const {\n selectedTranscript,\n maxHits = defaultMaxHits,\n searchProgram = 'blastp',\n } = params\n const msaAlgorithm = params.msaAlgorithm ?? 'browser'\n const { sequence: query, name: querySeqName } = await resolveQuery(\n self,\n scope,\n )\n if (searchProgram === 'blastp' && msaAlgorithm === 'browser') {\n checkPairSize(querySeqName, query.length, query.length)\n }\n const { onProgress, signal } = scope\n const key = searchKey({\n searchProgram,\n database: params.blastDatabase,\n maxHits,\n querySeqName,\n query,\n })\n const found = await getCachedSearch(key)\n if (found) {\n onProgress(\n `Reusing the ${searchProgram} search from ${new Date(found.timestamp).toLocaleString()}...`,\n )\n }\n const { fasta, treeMetadata, rid, queryRow, warnings }: SearchOutcome =\n found ?? (await search({ self, scope, query, querySeqName, maxHits, key }))\n const { msa, tree } = queryRow\n ? { msa: fasta, tree: '' }\n : await launchMSA({\n algorithm: msaAlgorithm,\n sequence: fasta,\n onProgress,\n signal,\n })\n\n const transcript = transcriptFields(selectedTranscript)\n const treeMetadataJson = JSON.stringify(treeMetadata)\n await saveBlastResult({\n proteinSequence: query,\n blastDatabase: params.blastDatabase,\n msaAlgorithm: queryRow ? undefined : msaAlgorithm,\n searchProgram: params.searchProgram,\n maxHits,\n msa,\n tree,\n treeMetadata: treeMetadataJson,\n rid: rid ?? '',\n geneId: str(transcript.parentId),\n transcriptId: str(transcript.uniqueId),\n transcriptName: transcriptName(selectedTranscript),\n geneName: str(transcript.gene_name) ?? str(transcript.parentId),\n })\n\n return { msa, tree, treeMetadata: treeMetadataJson, warnings }\n}\n", "// The second ortholog source, for the genes NCBI's ortholog sets leave out.\n//\n// NCBI Datasets computes orthologs for vertebrates and insects, so a yeast,\n// worm or plant gene comes back with orthologs only in its own clade, and a fly\n// gene gets insects and nothing else. PANTHER's ortholog sets span its 144\n// reference proteomes, human to yeast to Arabidopsis, and one `matchortho` call\n// answers \"this gene's ortholog in every genome\" with a UniProt accession per\n// target. Sequences come from one UniProt batch call. Both hosts send\n// `Access-Control-Allow-Origin: *`. The measurements that picked PANTHER over\n// OMA, OrthoDB and Ensembl are in react-msaview's\n// agent-docs/ideas/ortholog-sources-beyond-ncbi.md.\n//\n// Rows come out in the same shape as ncbiOrthologs.ts's, so the launch, the\n// labels, the aligner and the CDD overlay do not know which source ran.\n// `protein` is the UniProt accession; efetch serves UniProt accessions as\n// GenPept records with CDD Region features, so the overlay attaches as it does\n// to a RefSeq accession.\n\nimport { isAbortError, jsonfetch } from './fetch'\nimport {\n cleanGeneCandidate,\n dedupeLabels,\n defaultMaxSpecies,\n} from './ncbiOrthologs'\nimport { fetchTaxonomyInfo } from './taxonomyNames'\n\nimport type { OrthologRow } from './ncbiOrthologs'\n\nconst PANTHER = 'https://pantherdb.org/services/oai/pantherdb'\nconst UNIPROT = 'https://rest.uniprot.org/uniprotkb'\n\nexport interface PantherGenome {\n /** PANTHER's organism code, e.g. HUMAN, DROME */\n code: string\n taxId: number\n /** short common name, e.g. fruit_fly */\n name: string\n /** scientific name */\n longName: string\n}\n\ninterface GenomesResponse {\n search?: {\n output?: {\n genomes?: {\n genome?: {\n short_name?: string\n taxon_id?: number\n name?: string\n long_name?: string\n }[]\n }\n }\n }\n}\n\n/**\n * `supportedgenomes` -> the code<->taxon map every other parse needs. PANTHER\n * names organisms by code only in ortholog results.\n */\nexport function parseGenomes(json: unknown): PantherGenome[] {\n const list = (json as GenomesResponse).search?.output?.genomes?.genome ?? []\n return list.flatMap(g =>\n g.short_name && g.taxon_id\n ? [\n {\n code: g.short_name,\n taxId: g.taxon_id,\n name: g.name ?? g.short_name,\n longName: g.long_name ?? g.short_name,\n },\n ]\n : [],\n )\n}\n\nexport interface PantherGene {\n code: string\n /** UniProt accession */\n accession: string\n /** the source database's own id, e.g. HGNC=1773, FlyBase=FBgn0016131 */\n geneRef: string\n}\n\nexport interface PantherHit extends PantherGene {\n symbol?: string\n /**\n * LDO = least diverged ortholog, PANTHER's pick of the one-to-one; O = any\n * other ortholog in a one-to-many or many-to-many family\n */\n type: 'LDO' | 'O'\n}\n\ninterface Mapping {\n id?: string\n gene?: string\n target_gene?: string\n target_gene_symbol?: string | number\n ortholog?: string\n}\n\ninterface MatchResponse {\n search?: {\n mapping?: {\n /** one object for a single (or empty) match, an array otherwise */\n mapped?: Mapping | Mapping[]\n unmapped_ids?: unknown\n }\n }\n}\n\n// \"HUMAN|HGNC=1773|UniProtKB=P11802\" -> { code, geneRef, accession }\nfunction parseGeneRef(ref: string | undefined): PantherGene | undefined {\n const [code, ...xrefs] = (ref ?? '').split('|')\n const accession = xrefs\n .find(x => x.startsWith('UniProtKB='))\n ?.slice('UniProtKB='.length)\n const geneRef = xrefs.find(x => !x.startsWith('UniProtKB=')) ?? accession\n return code && accession && geneRef ? { code, accession, geneRef } : undefined\n}\n\n/**\n * `matchortho` -> the query gene (PANTHER names it in every row) and one hit\n * per target gene. An unknown gene comes back under `unmapped_ids`; a gene with\n * no ortholog in the target set comes back as a bare `{ id }`.\n */\nexport function parseMatches(json: unknown): {\n unmapped: boolean\n query?: PantherGene\n hits: PantherHit[]\n} {\n const mapping = (json as MatchResponse).search?.mapping\n const mapped = mapping?.mapped\n const rows = Array.isArray(mapped) ? mapped : mapped ? [mapped] : []\n const hits: PantherHit[] = []\n let query: PantherGene | undefined\n for (const row of rows) {\n query ??= parseGeneRef(row.gene)\n const target = parseGeneRef(row.target_gene)\n if (target && (row.ortholog === 'LDO' || row.ortholog === 'O')) {\n hits.push({\n ...target,\n symbol:\n row.target_gene_symbol === undefined\n ? undefined\n : String(row.target_gene_symbol),\n type: row.ortholog,\n })\n }\n }\n return { unmapped: !!mapping?.unmapped_ids, query, hits }\n}\n\n/**\n * One hit per organism, in first-seen order: the LDO where PANTHER named one,\n * else the first other ortholog it listed. A many-to-many family (the Hox\n * genes) has no LDO at all, so dropping to \"first O\" is what keeps those\n * species in the alignment.\n */\nexport function pickOnePerGenome(hits: PantherHit[]): PantherHit[] {\n const byCode = new Map<string, PantherHit>()\n for (const hit of hits) {\n const current = byCode.get(hit.code)\n if (!current || (current.type === 'O' && hit.type === 'LDO')) {\n byCode.set(hit.code, hit)\n }\n }\n return [...byCode.values()]\n}\n\ninterface UniProtResponse {\n results?: {\n primaryAccession?: string\n sequence?: { value?: string }\n }[]\n}\n\n/** `uniprotkb/accessions` -> accession -> sequence */\nexport function parseSequences(json: unknown): Map<string, string> {\n const map = new Map<string, string>()\n for (const r of (json as UniProtResponse).results ?? []) {\n if (r.primaryAccession && r.sequence?.value) {\n map.set(r.primaryAccession, r.sequence.value)\n }\n }\n return map\n}\n\nlet genomes: Promise<PantherGenome[]> | undefined\n\n/** The proteome list, fetched once per page and forgotten on failure. */\nfunction fetchGenomes() {\n genomes ??= jsonfetch(`${PANTHER}/supportedgenomes`)\n .then(parseGenomes)\n .catch((e: unknown) => {\n genomes = undefined\n throw e\n })\n return genomes\n}\n\n// UniProt caps one `accessions` call at 100 ids\nconst UNIPROT_CHUNK = 100\n\nasync function fetchSequences(accessions: string[], signal?: AbortSignal) {\n const map = new Map<string, string>()\n for (let i = 0; i < accessions.length; i += UNIPROT_CHUNK) {\n const chunk = accessions.slice(i, i + UNIPROT_CHUNK)\n const json = await jsonfetch(\n `${UNIPROT}/accessions?accessions=${chunk.join(',')}&fields=accession,sequence&format=json`,\n { signal },\n )\n for (const [acc, seq] of parseSequences(json)) {\n map.set(acc, seq)\n }\n }\n return map\n}\n\n/**\n * One `matchortho` per candidate until PANTHER maps one. A JBrowse feature\n * carries whatever its GFF/BigBed had \u2014 `id()`, `name`, `gene_name` \u2014 and only\n * some of those are names PANTHER knows. `targets` omitted asks for every\n * genome PANTHER has, which is one call rather than one per genome.\n */\nasync function matchOrthologs(\n candidates: string[],\n taxId: number,\n targets: PantherGenome[] | undefined,\n signal?: AbortSignal,\n) {\n let matched: string | undefined\n for (const raw of candidates) {\n const query = cleanGeneCandidate(raw)\n if (!query) {\n continue\n }\n const params = new URLSearchParams({\n geneInputList: query,\n organism: String(taxId),\n orthologType: 'all',\n })\n if (targets) {\n params.set('targetOrganism', targets.map(t => t.taxId).join(','))\n }\n const parsed = parseMatches(\n await jsonfetch(`${PANTHER}/ortholog/matchortho?${params.toString()}`, {\n signal,\n }),\n )\n if (!parsed.unmapped) {\n matched ??= query\n if (parsed.query) {\n return { ...parsed, matched: query }\n }\n }\n }\n return matched === undefined\n ? undefined\n : { matched, hits: [], query: undefined }\n}\n\nexport interface PantherOrthologs {\n /** the candidate PANTHER recognised */\n matched: string\n /** the query gene as PANTHER knows it, with its UniProt sequence */\n query?: PantherGene & { sequence: string }\n rows: OrthologRow[]\n}\n\n/**\n * The whole PANTHER half of the pipeline: gene -> ortholog rows carrying\n * labels, accessions and sequences, plus the query gene's own protein for the\n * query row. Two lookups (genomes, orthologs), one taxonomy batch for the\n * labels, one UniProt batch for the sequences.\n *\n * `taxa`, `exclude` and `limit` mean what they mean for fetchOrthologRows:\n * `taxa` narrows the targets (omitted, every genome PANTHER has, in its order),\n * `exclude` drops the query taxon, `limit` caps the rows before their\n * sequences are fetched.\n */\nexport async function fetchPantherOrthologs({\n candidates,\n taxId,\n taxa,\n exclude,\n limit = defaultMaxSpecies,\n onProgress,\n signal,\n}: {\n candidates: string[]\n taxId: number\n taxa?: Set<number>\n exclude?: number\n limit?: number\n onProgress: (arg: string) => void\n signal?: AbortSignal\n}): Promise<PantherOrthologs> {\n const all = await fetchGenomes()\n signal?.throwIfAborted()\n const byTaxId = new Map(all.map(g => [g.taxId, g]))\n const byCode = new Map(all.map(g => [g.code, g]))\n const queryGenome = byTaxId.get(taxId)\n if (!queryGenome) {\n throw new Error(\n `PANTHER has no reference proteome for taxon ${taxId}. NCBI orthologs cover vertebrates and insects; try that source.`,\n )\n }\n const targets = taxa\n ? [...taxa].flatMap(t => {\n const g = byTaxId.get(t)\n return g && t !== exclude ? [g] : []\n })\n : undefined\n\n if (targets?.length === 0) {\n throw new Error(\n 'None of the requested species has a PANTHER reference proteome. NCBI orthologs cover vertebrates and insects; try that source.',\n )\n }\n\n onProgress('Matching orthologs at PANTHER...')\n const match = await matchOrthologs(candidates, taxId, targets, signal)\n if (!match) {\n throw new Error(\n `PANTHER has no entry for ${candidates.join(', ')} in ${queryGenome.longName}. Try the NCBI BLAST tab, which needs no gene identifier.`,\n )\n }\n\n const rank = new Map(targets?.map((t, i) => [t.taxId, i]))\n const picks = pickOnePerGenome(match.hits)\n .map(hit => ({ hit, genome: byCode.get(hit.code) }))\n .filter(\n (p): p is { hit: PantherHit; genome: PantherGenome } =>\n !!p.genome &&\n p.genome.taxId !== exclude &&\n (targets ? rank.has(p.genome.taxId) : true),\n )\n .sort((a, b) =>\n targets ? rank.get(a.genome.taxId)! - rank.get(b.genome.taxId)! : 0,\n )\n .slice(0, limit)\n if (picks.length < 2) {\n throw new Error(\n `Only ${picks.length} PANTHER ortholog(s) found for ${match.matched} \u2014 not enough to align`,\n )\n }\n\n onProgress(`Fetching ${picks.length} protein sequences from UniProt...`)\n const [names, sequences] = await Promise.all([\n taxonomyNames(\n picks.map(p => p.genome.taxId),\n signal,\n ),\n fetchSequences(\n [\n ...(match.query ? [match.query.accession] : []),\n ...picks.map(p => p.hit.accession),\n ],\n signal,\n ),\n ])\n\n const described = picks.map(({ hit, genome }) => {\n const info = names.get(genome.taxId)\n return {\n hit,\n genome,\n name: info?.commonName || info?.sciname || genome.name,\n scientificName: info?.sciname || genome.longName,\n commonName: info?.commonName,\n }\n })\n const labels = dedupeLabels(described.map(d => d.name))\n const rows = described\n .map(({ hit, genome, scientificName, commonName }, i) => ({\n taxId: genome.taxId,\n label: labels[i]!,\n scientificName,\n commonName,\n geneId: hit.geneRef,\n protein: hit.accession,\n sequence: sequences.get(hit.accession) ?? '',\n }))\n .filter(r => r.sequence)\n if (rows.length < 2) {\n throw new Error('Could not fetch protein sequences for the orthologs')\n }\n\n const querySequence = match.query && sequences.get(match.query.accession)\n return {\n matched: match.matched,\n query:\n match.query && querySequence\n ? { ...match.query, sequence: querySequence }\n : undefined,\n rows,\n }\n}\n\n/**\n * NCBI's names for the taxa, so PANTHER rows are labelled exactly as NCBI rows\n * are. A failed lookup only costs the labels, which fall back to PANTHER's own\n * short names, so it is logged rather than thrown.\n */\nasync function taxonomyNames(taxIds: number[], signal?: AbortSignal) {\n try {\n return await fetchTaxonomyInfo(taxIds, signal)\n } catch (e) {\n if (isAbortError(e)) {\n throw e\n }\n console.warn('[msaview-orthologs] taxonomy name lookup failed:', e)\n return new Map<number, { sciname: string; commonName?: string }>()\n }\n}\n", "import { cleanProteinSequence } from '../LaunchMsaView/util'\nimport { isAbortError } from '../utils/fetch'\nimport { launchMSA } from '../utils/msa'\nimport {\n dedupeLabels,\n fetchOrthologRows,\n fetchProteinForGene,\n resolveGeneId,\n} from '../utils/ncbiOrthologs'\nimport { fetchPantherOrthologs } from '../utils/pantherOrthologs'\nimport { fetchTaxonomyInfo } from '../utils/taxonomyNames'\nimport { fetchUnirefHomologs } from '../utils/unirefHomologs'\nimport { transcriptName } from './util'\n\nimport type { OrthologRow } from '../utils/ncbiOrthologs'\nimport type { UnirefIdentity } from '../utils/unirefHomologs'\nimport type { JBrowsePluginMsaViewModel, OrthologSource } from './model'\nimport type { LaunchScope } from './runLaunch'\n\ninterface Representative {\n accession: string\n sequence: string\n}\n\n/** What either source hands the shared tail of the launch. */\ninterface FoundOrthologs {\n /** the query gene's id at the source: an NCBI GeneID, or PANTHER's gene xref */\n geneId: string\n representative: Representative | undefined\n rows: OrthologRow[]\n warning?: string\n}\n\n/**\n * The no-search-job alternative to doLaunchBlast.\n *\n * BLAST spends 10+ minutes answering \"what looks like this sequence\" and\n * returns a redundant, accession-labelled hit list. This asks the question the\n * alignment actually wants \u2014 \"what is this gene's ortholog in each species\" \u2014\n * which NCBI and PANTHER have already computed, so the lookup returns in\n * seconds and only the EBI alignment (~10s) costs real time. `source` picks\n * which of the two answers: NCBI for vertebrates and insects, PANTHER for\n * everything else (yeast, worm, plants, and a fly gene's vertebrate relatives).\n *\n * The query row is the user's OWN selected transcript, not the source's\n * representative protein for the query species, because `connectedFeature`\n * maps genome coordinates through that row \u2014 swapping in a different isoform\n * would silently break the genome<->MSA linkage. The query species is therefore\n * excluded from the ortholog set rather than appearing twice.\n */\nexport async function doLaunchOrthologs({\n self,\n scope,\n}: {\n self: JBrowsePluginMsaViewModel\n scope: LaunchScope\n}) {\n const {\n taxId,\n taxa,\n maxSpecies,\n geneCandidates,\n msaAlgorithm,\n proteinSequence,\n source = 'ncbi',\n identity,\n referenceProteomesOnly,\n } = self.orthologParams!\n\n const { onProgress, act, signal } = scope\n\n const request = {\n taxId,\n geneCandidates,\n taxa: taxa ? new Set(taxa) : undefined,\n // the query species is represented by the query row below\n exclude: taxId,\n limit: maxSpecies,\n onProgress,\n signal,\n }\n const { geneId, representative, rows, warning } =\n source === 'panther'\n ? await findPantherOrthologs(request)\n : source === 'uniref'\n ? await findUnirefHomologs({\n ...request,\n identity,\n referenceProteomesOnly,\n })\n : await findNcbiOrthologs(request)\n\n // The query row. The dialog always supplies it \u2014 it is the user's OWN\n // selected transcript, which is what makes `connectedFeature` map genome\n // coordinates through this row. A launch that has no transcript to translate\n // (a session spec naming only a gene) falls back to the source's\n // representative protein for the resolved gene, which is the same choice\n // made for every other row, so the alignment is the one the source would\n // build for that gene.\n const cleanedSeq = proteinSequence\n ? cleanProteinSequence(proteinSequence)\n : representative?.sequence\n if (!cleanedSeq) {\n throw new Error(\n `No query protein: none was supplied and ${sourceNames[source]} returned no representative protein for gene ${geneId}.`,\n )\n }\n\n // The query row is named for its species like every other row, with a suffix\n // marking it as the one the genome view is linked to. A bare `QUERY` among\n // ninety-nine named species reads as a row whose species failed to resolve,\n // and there is nothing else in the picture saying which row the hover\n // highlight travels through -- react-msaview has no notion of a query row, it\n // only looks one up by name.\n //\n // Deduped against the ortholog labels rather than assumed unique: the query\n // taxon is excluded from that set, but a subspecies can sanitize to the same\n // token, and a collision would silently point the coordinate mapping at\n // another animal's row.\n const queryLabel = await queryRowLabel(taxId, rows, signal)\n act(() => {\n self.setQuerySeqName(queryLabel)\n })\n\n const treeMetadata: Record<string, Record<string, string>> = {\n [queryLabel]: buildQueryMetadata(self, geneId, cleanedSeq, representative),\n }\n for (const row of rows) {\n treeMetadata[row.label] = buildRowMetadata(row)\n }\n\n const result = await launchMSA({\n algorithm: msaAlgorithm,\n sequence: [\n `>${queryLabel}\\n${cleanedSeq}`,\n ...rows.map(r => `>${r.label}\\n${r.sequence}`),\n ].join('\\n'),\n onProgress,\n signal,\n })\n\n return {\n ...result,\n treeMetadata: JSON.stringify(treeMetadata),\n warnings: warning ? [warning] : [],\n }\n}\n\ninterface OrthologRequest {\n taxId: number\n geneCandidates: string[]\n taxa: Set<number> | undefined\n exclude: number\n limit: number | undefined\n onProgress: (arg: string) => void\n signal: AbortSignal\n}\n\n/**\n * Every species NCBI has an ortholog for, when a launch names none, capped at\n * `limit`. A launch that wants specific species lists them; one that just\n * wants \"this gene across species\" gets NCBI's own order, which leads with the\n * reference organisms.\n */\nasync function findNcbiOrthologs({\n taxId,\n geneCandidates,\n onProgress,\n signal,\n ...rest\n}: OrthologRequest): Promise<FoundOrthologs> {\n onProgress('Resolving gene at NCBI...')\n const resolved = await resolveGeneId(geneCandidates, taxId, signal)\n if (!resolved) {\n throw new Error(\n `Could not resolve any of ${geneCandidates.join(', ')} to an NCBI gene in taxon ${taxId}. Try the NCBI BLAST tab, which needs no gene identifier.`,\n )\n }\n const representative = await fetchRepresentativeQueryProtein(\n resolved.geneId,\n signal,\n )\n const rows = await fetchOrthologRows({\n geneId: resolved.geneId,\n onProgress,\n signal,\n ...rest,\n })\n return { geneId: resolved.geneId, representative, rows }\n}\n\nconst sourceNames: Record<OrthologSource, string> = {\n ncbi: 'NCBI',\n panther: 'PANTHER',\n uniref: 'UniProt',\n}\n\n/**\n * The query's own UniProt entry stands in for a representative protein: the\n * entry the cluster was looked up from, whose sequence a spec-launched row\n * takes and whose accession earns the CDD overlay when the two match.\n */\nasync function findUnirefHomologs({\n geneCandidates,\n identity,\n referenceProteomesOnly,\n ...rest\n}: OrthologRequest & {\n identity?: UnirefIdentity\n referenceProteomesOnly?: boolean\n}): Promise<FoundOrthologs> {\n const found = await fetchUnirefHomologs({\n candidates: geneCandidates,\n identity,\n referenceProteomesOnly,\n ...rest,\n })\n return {\n geneId: found.query.id,\n representative: {\n accession: found.query.accession,\n sequence: found.query.sequence,\n },\n rows: found.rows,\n warning: found.warning,\n }\n}\n\n/**\n * One `matchortho` call resolves the gene, names its own UniProt entry and\n * lists an ortholog per genome, so the representative protein needs no second\n * lookup here.\n */\nasync function findPantherOrthologs({\n geneCandidates,\n ...rest\n}: OrthologRequest): Promise<FoundOrthologs> {\n const found = await fetchPantherOrthologs({\n candidates: geneCandidates,\n ...rest,\n })\n return {\n geneId: found.query?.geneRef ?? found.matched,\n representative: found.query,\n rows: found.rows,\n }\n}\n\n/**\n * `<species>_query`, unique against the ortholog labels. Falls back to the bare\n * marker when NCBI cannot name the taxon, which is a naming failure and must not\n * take down the launch.\n */\nasync function queryRowLabel(\n taxId: number,\n rows: OrthologRow[],\n signal: AbortSignal,\n) {\n let name: string | undefined\n try {\n const info = (await fetchTaxonomyInfo([taxId], signal)).get(taxId)\n name = info?.commonName ?? info?.sciname\n } catch (e) {\n if (isAbortError(e)) {\n throw e\n }\n console.warn('[msaview-orthologs] taxonomy name lookup failed:', e)\n }\n return dedupeLabels([\n ...rows.map(r => r.label),\n `${name ?? 'query'}_query`,\n ]).at(-1)!\n}\n\n/**\n * A failed lookup only costs the query row its domain overlay and, for a launch\n * that supplied no sequence of its own, the alignment \u2014 so it is reported by\n * returning nothing rather than by throwing here.\n */\nasync function fetchRepresentativeQueryProtein(\n geneId: string,\n signal: AbortSignal,\n) {\n try {\n return await fetchProteinForGene(geneId, signal)\n } catch (e) {\n if (isAbortError(e)) {\n throw e\n }\n console.warn('[msaview-orthologs] query protein lookup failed:', e)\n return undefined\n }\n}\n\n/**\n * The query row carries an Accession \u2014 which is what drives the automatic CDD\n * overlay (afterCreateAutoruns.autoLoadProteinDomains -> loadProteinDomains) \u2014\n * ONLY when its sequence is byte-identical to the protein that accession\n * names. Attaching it unconditionally would put every domain box at an offset\n * whenever the user picked a non-representative isoform, which is a silently\n * wrong figure rather than a missing one. A launch that took the representative\n * protein as its query row passes that test by construction.\n */\nfunction buildQueryMetadata(\n self: JBrowsePluginMsaViewModel,\n geneId: string,\n proteinSequence: string,\n representative: Representative | undefined,\n): Record<string, string> {\n const metadata: Record<string, string> = { 'Gene ID': geneId }\n const name = transcriptName(self.orthologParams?.selectedTranscript)\n if (name) {\n metadata.Transcript = name\n }\n if (representative?.sequence === proteinSequence) {\n metadata.Accession = representative.accession\n }\n return metadata\n}\n\nfunction buildRowMetadata(row: OrthologRow): Record<string, string> {\n const metadata: Record<string, string> = {\n 'Scientific name': row.scientificName,\n // Accession drives the automatic CDD domain overlay\n // (afterCreateAutoruns.autoLoadProteinDomains -> loadProteinDomains)\n Accession: row.protein,\n 'Gene ID': row.geneId,\n }\n if (row.commonName) {\n metadata['Common name'] = row.commonName\n }\n return metadata\n}\n", "// Reads a little-endian unsigned 64-bit integer as a JS number. Exact for\n// values up to Number.MAX_SAFE_INTEGER (2^53-1, ~9PB), matching the precision\n// of the previous BigInt->Number path without allocating a BigInt per call.\nexport function readUint64LE(view: DataView, offset = 0) {\n const lo = view.getUint32(offset, true)\n const hi = view.getUint32(offset + 4, true)\n return hi * 0x1_0000_0000 + lo\n}\n", "import { readUint64LE } from './long.ts'\n\nimport type { GenericFilehandle } from 'generic-filehandle2'\n\nconst ENTRY_SIZE = 16\n\n// Block offsets are held as two parallel Float64Arrays rather than an array of\n// [compressed, uncompressed] tuples. A gzi for a large file holds hundreds of\n// thousands of entries, and one JS array object per entry costs roughly an\n// order of magnitude more memory \u2014 plus GC pressure \u2014 than the packed form.\nexport interface GziEntries {\n compressed: Float64Array\n uncompressed: Float64Array\n}\n\nconst EMPTY: GziEntries = {\n compressed: new Float64Array(0),\n uncompressed: new Float64Array(0),\n}\n\nfunction parseEntries(buf: Uint8Array, numEntries: number): GziEntries {\n // entry 0 is the implicit [0, 0] block start, already zeroed\n const compressed = new Float64Array(numEntries + 1)\n const uncompressed = new Float64Array(numEntries + 1)\n const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n for (let i = 0; i < numEntries; i += 1) {\n const offset = i * ENTRY_SIZE\n compressed[i + 1] = readUint64LE(view, offset)\n uncompressed[i + 1] = readUint64LE(view, offset + 8)\n }\n return { compressed, uncompressed }\n}\n\n// lower-bound binary search: first index whose uncompressed start > position\nfunction findUpperBound(uncompressed: Float64Array, position: number) {\n let lo = 0\n let hi = uncompressed.length\n while (lo < hi) {\n const mid = (lo + hi) >>> 1\n if (uncompressed[mid]! <= position) {\n lo = mid + 1\n } else {\n hi = mid\n }\n }\n return lo\n}\n\nexport default class GziIndex {\n filehandle: GenericFilehandle\n\n index?: Promise<GziEntries>\n\n constructor({ filehandle }: { filehandle: GenericFilehandle }) {\n this.filehandle = filehandle\n }\n\n _getIndex() {\n if (!this.index) {\n this.index = this._readIndex().catch((error: unknown) => {\n this.index = undefined\n throw error\n })\n }\n return this.index\n }\n\n private async _readIndex(): Promise<GziEntries> {\n const header = await this.filehandle.read(8, 0)\n const numEntries = readUint64LE(\n new DataView(header.buffer, header.byteOffset, header.byteLength),\n )\n if (numEntries === 0) {\n return parseEntries(new Uint8Array(0), 0)\n }\n if (numEntries > Number.MAX_SAFE_INTEGER / ENTRY_SIZE) {\n throw new TypeError('integer overflow')\n }\n const body = await this.filehandle.read(ENTRY_SIZE * numEntries, 8)\n return parseEntries(body, numEntries)\n }\n\n /**\n * The blocks covering [position, position+length), as zero-copy views into\n * the index, plus the compressed offset just past the last one. That offset\n * is undefined when the read reaches the final recorded block, since the gzi\n * doesn't record where it ends.\n */\n async getRelevantBlocksForRead(\n length: number,\n position: number,\n ): Promise<GziEntries & { nextCompressedPosition: number | undefined }> {\n if (length === 0) {\n return { ...EMPTY, nextCompressedPosition: undefined }\n }\n const { compressed, uncompressed } = await this._getIndex()\n\n const startBlock = findUpperBound(uncompressed, position) - 1\n // first block starting at or after the end of the read\n const endBlock = findUpperBound(uncompressed, position + length - 1)\n return {\n compressed: compressed.subarray(startBlock, endBlock),\n uncompressed: uncompressed.subarray(startBlock, endBlock),\n nextCompressedPosition:\n endBlock < compressed.length ? compressed[endBlock] : undefined,\n }\n }\n}\n", "// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nexport var Z_NO_FLUSH = 0\nexport var Z_PARTIAL_FLUSH = 1\nexport var Z_SYNC_FLUSH = 2\nexport var Z_FULL_FLUSH = 3\nexport var Z_FINISH = 4\nexport var Z_BLOCK = 5\nexport var Z_TREES = 6\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nexport var Z_OK = 0\nexport var Z_STREAM_END = 1\nexport var Z_NEED_DICT = 2\nexport var Z_ERRNO = -1\nexport var Z_STREAM_ERROR = -2\nexport var Z_DATA_ERROR = -3\n//export var Z_MEM_ERROR = -4;\nexport var Z_BUF_ERROR = -5\n//export var Z_VERSION_ERROR = -6;\n\n/* compression levels */\nexport var Z_NO_COMPRESSION = 0\nexport var Z_BEST_SPEED = 1\nexport var Z_BEST_COMPRESSION = 9\nexport var Z_DEFAULT_COMPRESSION = -1\n\nexport var Z_FILTERED = 1\nexport var Z_HUFFMAN_ONLY = 2\nexport var Z_RLE = 3\nexport var Z_FIXED = 4\nexport var Z_DEFAULT_STRATEGY = 0\n\n/* Possible values of the data_type field (though see inflate()) */\nexport var Z_BINARY = 0\nexport var Z_TEXT = 1\n//export var Z_ASCII = 1; // = Z_TEXT (deprecated)\nexport var Z_UNKNOWN = 2\n\n/* The deflate compression method */\nexport var Z_DEFLATED = 8\n//export var Z_NULL = null // Use -1 or null inline; depending on var type\n", "function _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key)\n}\n\nexport function assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1)\n while (sources.length) {\n var source = sources.shift()\n if (!source) {\n continue\n }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object')\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p]\n }\n }\n }\n\n return obj\n}\n\n// reduce buffer size, avoiding mem copy\nexport function shrinkBuf(buf, size) {\n if (buf.length === size) {\n return buf\n }\n if (buf.subarray) {\n return buf.subarray(0, size)\n }\n buf.length = size\n return buf\n}\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs)\n return\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i]\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result\n\n // calculate data length\n len = 0\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length\n }\n\n // join chunks\n result = new Uint8Array(len)\n pos = 0\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i]\n result.set(chunk, pos)\n pos += chunk.length\n }\n\n return result\n },\n Buf8: function (size) {\n return new Uint8Array(size)\n },\n Buf16: function (size) {\n return new Uint16Array(size)\n },\n Buf32: function (size) {\n return new Int32Array(size)\n },\n}\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i]\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks)\n },\n Buf8: function (size) {\n return new Array(size)\n },\n Buf16: function (size) {\n return new Array(size)\n },\n Buf32: function (size) {\n return new Array(size)\n },\n}\n\nlet typedOK = () => {\n const supported =\n typeof Uint8Array !== 'undefined' &&\n typeof Uint16Array !== 'undefined' &&\n typeof Int32Array !== 'undefined'\n\n typedOK = () => supported\n return supported\n}\n\nexport let arraySet = (dest, src, src_offs, len, dest_offs) => {\n arraySet = typedOK() ? fnTyped.arraySet : fnUntyped.arraySet\n\n return arraySet(dest, src, src_offs, len, dest_offs)\n}\n\nexport let flattenChunks = chunks => {\n flattenChunks = typedOK() ? fnTyped.flattenChunks : fnUntyped.flattenChunks\n\n return flattenChunks(chunks)\n}\n\nexport let Buf8 = size => {\n Buf8 = typedOK() ? fnTyped.Buf8 : fnUntyped.Buf8\n return Buf8(size)\n}\n\nexport let Buf16 = size => {\n Buf16 = typedOK() ? fnTyped.Buf16 : fnUntyped.Buf16\n return Buf16(size)\n}\n\nexport let Buf32 = size => {\n Buf32 = typedOK() ? fnTyped.Buf32 : fnUntyped.Buf32\n return Buf32(size)\n}\n\nexport function setTyped(on) {\n arraySet = on ? fnTyped.arraySet : fnUntyped.arraySet\n flattenChunks = on ? fnTyped.flattenChunks : fnUntyped.flattenChunks\n Buf8 = on ? fnTyped.Buf8 : fnUntyped.Buf8\n Buf16 = on ? fnTyped.Buf16 : fnUntyped.Buf16\n Buf32 = on ? fnTyped.Buf32 : fnUntyped.Buf32\n}\n", "// String encode/decode helpers\n\nimport { Buf8, shrinkBuf } from './common.js'\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\nlet strApplyOK = function () {\n let result = true\n try {\n String.fromCharCode.apply(null, [0])\n } catch (_) {\n result = false\n }\n\n strApplyOK = () => result\n return result\n}\n\nlet strApplyUintOK = function () {\n let result = true\n try {\n String.fromCharCode.apply(null, new Uint8Array(1))\n } catch (_) {\n result = false\n }\n\n strApplyUintOK = () => result\n return result\n}\n\nlet utf8len = function (c) {\n // Table with utf8 lengths (calculated by first byte of sequence)\n // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n // because max possible codepoint is 0x10ffff\n var table = Buf8(256)\n for (var q = 0; q < 256; q++) {\n table[q] =\n q >= 252\n ? 6\n : q >= 248\n ? 5\n : q >= 240\n ? 4\n : q >= 224\n ? 3\n : q >= 192\n ? 2\n : 1\n }\n table[254] = table[254] = 1 // Invalid sequence start\n\n utf8len = arg => table[arg]\n return table[c]\n}\n\n// convert string to array (typed, when possible)\nexport function string2buf(str) {\n var buf,\n c,\n c2,\n m_pos,\n i,\n str_len = str.length,\n buf_len = 0\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos)\n if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {\n c2 = str.charCodeAt(m_pos + 1)\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00)\n m_pos++\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len)\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos)\n if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {\n c2 = str.charCodeAt(m_pos + 1)\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00)\n m_pos++\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xc0 | (c >>> 6)\n buf[i++] = 0x80 | (c & 0x3f)\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xe0 | (c >>> 12)\n buf[i++] = 0x80 | ((c >>> 6) & 0x3f)\n buf[i++] = 0x80 | (c & 0x3f)\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18)\n buf[i++] = 0x80 | ((c >>> 12) & 0x3f)\n buf[i++] = 0x80 | ((c >>> 6) & 0x3f)\n buf[i++] = 0x80 | (c & 0x3f)\n }\n }\n\n return buf\n}\n\n// Helper (used in 2 places)\nfunction _buf2binstring(buf, len) {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if ((buf.subarray && strApplyUintOK()) || (!buf.subarray && strApplyOK())) {\n return String.fromCharCode.apply(null, shrinkBuf(buf, len))\n }\n }\n\n var result = ''\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i])\n }\n return result\n}\n\n// Convert byte array to binary string\nexport function buf2binstring(buf) {\n return _buf2binstring(buf, buf.length)\n}\n\n// Convert binary string (typed, when possible)\nexport function binstring2buf(str) {\n var buf = new Uint8Array(str.length)\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i)\n }\n return buf\n}\n\n// convert array to string\nexport function buf2string(buf, max) {\n var i, out, c, c_len\n var len = max || buf.length\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2)\n\n for (out = 0, i = 0; i < len; ) {\n c = buf[i++]\n // quick process ascii\n if (c < 0x80) {\n utf16buf[out++] = c\n continue\n }\n\n c_len = utf8len(c)\n // skip 5 & 6 byte codes\n if (c_len > 4) {\n utf16buf[out++] = 0xfffd\n i += c_len - 1\n continue\n }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f)\n c_len--\n }\n\n // terminated by end of string?\n if (c_len > 1) {\n utf16buf[out++] = 0xfffd\n continue\n }\n\n if (c < 0x10000) {\n utf16buf[out++] = c\n } else {\n c -= 0x10000\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff)\n utf16buf[out++] = 0xdc00 | (c & 0x3ff)\n }\n }\n\n return _buf2binstring(utf16buf, out)\n}\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexport function utf8border(buf, max) {\n var pos\n\n max = max || buf.length\n if (max > buf.length) {\n max = buf.length\n }\n\n // go back from last position, until start of sequence found\n pos = max - 1\n while (pos >= 0 && (buf[pos] & 0xc0) === 0x80) {\n pos--\n }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) {\n return max\n }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) {\n return max\n }\n\n return pos + utf8len(buf[pos]) > max ? pos : max\n}\n", "// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nexport default function GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0\n /* modification time */\n this.time = 0\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0\n /* operating system */\n this.os = 0\n /* pointer to extra field or Z_NULL if none */\n this.extra = null\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0 // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = ''\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = ''\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false\n}\n", "// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nexport default function adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) | 0,\n s2 = ((adler >>> 16) & 0xffff) | 0,\n n = 0\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len\n len -= n\n\n do {\n s1 = (s1 + buf[pos++]) | 0\n s2 = (s2 + s1) | 0\n } while (--n)\n\n s1 %= 65521\n s2 %= 65521\n }\n\n return s1 | (s2 << 16) | 0\n}\n", "// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c,\n table = []\n\n for (var n = 0; n < 256; n++) {\n c = n\n for (var k = 0; k < 8; k++) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1\n }\n table[n] = c\n }\n\n return table\n}\n\nlet crcTable = function () {\n const table = makeTable()\n crcTable = () => table\n return table\n}\n\nexport default function crc32(crc, buf, len, pos) {\n var t = crcTable(),\n end = pos + len\n\n crc ^= -1\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xff]\n }\n\n return crc ^ -1 // >>> 0;\n}\n", "// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30 /* got a data error -- remain here until reset */\nvar TYPE = 12 /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nexport default function inflate_fast(strm, start) {\n var state\n var _in /* local strm.input */\n var last /* have enough input while in < last */\n var _out /* local strm.output */\n var beg /* inflate()'s initial strm.output */\n var end /* while out < end, enough space available */\n //#ifdef INFLATE_STRICT\n var dmax /* maximum distance from zlib header */\n //#endif\n var wsize /* window size or zero if not using window */\n var whave /* valid bytes in the window */\n var wnext /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window /* allocated sliding window, if wsize != 0 */\n var hold /* local strm.hold */\n var bits /* local strm.bits */\n var lcode /* local strm.lencode */\n var dcode /* local strm.distcode */\n var lmask /* mask for first level of length codes */\n var dmask /* mask for first level of distance codes */\n var here /* retrieved table entry */\n var op /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len /* match length, unused bytes */\n var dist /* match distance */\n var from /* where to copy match from */\n var from_source\n\n var input, output // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state\n //here = state.here;\n _in = strm.next_in\n input = strm.input\n last = _in + (strm.avail_in - 5)\n _out = strm.next_out\n output = strm.output\n beg = _out - (start - strm.avail_out)\n end = _out + (strm.avail_out - 257)\n //#ifdef INFLATE_STRICT\n dmax = state.dmax\n //#endif\n wsize = state.wsize\n whave = state.whave\n wnext = state.wnext\n s_window = state.window\n hold = state.hold\n bits = state.bits\n lcode = state.lencode\n dcode = state.distcode\n lmask = (1 << state.lenbits) - 1\n dmask = (1 << state.distbits) - 1\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top: do {\n if (bits < 15) {\n hold += input[_in++] << bits\n bits += 8\n hold += input[_in++] << bits\n bits += 8\n }\n\n here = lcode[hold & lmask]\n\n dolen: for (;;) {\n // Goto emulation\n op = here >>> 24 /*here.bits*/\n hold >>>= op\n bits -= op\n op = (here >>> 16) & 0xff /*here.op*/\n if (op === 0) {\n /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff /*here.val*/\n } else if (op & 16) {\n /* length base */\n len = here & 0xffff /*here.val*/\n op &= 15 /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits\n bits += 8\n }\n len += hold & ((1 << op) - 1)\n hold >>>= op\n bits -= op\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits\n bits += 8\n hold += input[_in++] << bits\n bits += 8\n }\n here = dcode[hold & dmask]\n\n dodist: for (;;) {\n // goto emulation\n op = here >>> 24 /*here.bits*/\n hold >>>= op\n bits -= op\n op = (here >>> 16) & 0xff /*here.op*/\n\n if (op & 16) {\n /* distance base */\n dist = here & 0xffff /*here.val*/\n op &= 15 /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits\n bits += 8\n if (bits < op) {\n hold += input[_in++] << bits\n bits += 8\n }\n }\n dist += hold & ((1 << op) - 1)\n //#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back'\n state.mode = BAD\n break top\n }\n //#endif\n hold >>>= op\n bits -= op\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg /* max distance in output */\n if (dist > op) {\n /* see if copy from window */\n op = dist - op /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back'\n state.mode = BAD\n break top\n }\n\n // (!) This block is disabled in zlib defaults,\n // don't enable it for binary compatibility\n //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n // if (len <= op - whave) {\n // do {\n // output[_out++] = 0;\n // } while (--len);\n // continue top;\n // }\n // len -= op - whave;\n // do {\n // output[_out++] = 0;\n // } while (--op > whave);\n // if (op === 0) {\n // from = _out - dist;\n // do {\n // output[_out++] = output[from++];\n // } while (--len);\n // continue top;\n // }\n //#endif\n }\n from = 0 // window index\n from_source = s_window\n if (wnext === 0) {\n /* very common case */\n from += wsize - op\n if (op < len) {\n /* some from window */\n len -= op\n do {\n output[_out++] = s_window[from++]\n } while (--op)\n from = _out - dist /* rest from output */\n from_source = output\n }\n } else if (wnext < op) {\n /* wrap around window */\n from += wsize + wnext - op\n op -= wnext\n if (op < len) {\n /* some from end of window */\n len -= op\n do {\n output[_out++] = s_window[from++]\n } while (--op)\n from = 0\n if (wnext < len) {\n /* some from start of window */\n op = wnext\n len -= op\n do {\n output[_out++] = s_window[from++]\n } while (--op)\n from = _out - dist /* rest from output */\n from_source = output\n }\n }\n } else {\n /* contiguous in window */\n from += wnext - op\n if (op < len) {\n /* some from window */\n len -= op\n do {\n output[_out++] = s_window[from++]\n } while (--op)\n from = _out - dist /* rest from output */\n from_source = output\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++]\n output[_out++] = from_source[from++]\n output[_out++] = from_source[from++]\n len -= 3\n }\n if (len) {\n output[_out++] = from_source[from++]\n if (len > 1) {\n output[_out++] = from_source[from++]\n }\n }\n } else {\n from = _out - dist /* copy direct from output */\n do {\n /* minimum length is three */\n output[_out++] = output[from++]\n output[_out++] = output[from++]\n output[_out++] = output[from++]\n len -= 3\n } while (len > 2)\n if (len) {\n output[_out++] = output[from++]\n if (len > 1) {\n output[_out++] = output[from++]\n }\n }\n }\n } else if ((op & 64) === 0) {\n /* 2nd level distance code */\n here =\n dcode[(here & 0xffff) /*here.val*/ + (hold & ((1 << op) - 1))]\n continue dodist\n } else {\n strm.msg = 'invalid distance code'\n state.mode = BAD\n break top\n }\n\n break // need to emulate goto via \"continue\"\n }\n } else if ((op & 64) === 0) {\n /* 2nd level length code */\n here = lcode[(here & 0xffff) /*here.val*/ + (hold & ((1 << op) - 1))]\n continue dolen\n } else if (op & 32) {\n /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE\n break top\n } else {\n strm.msg = 'invalid literal/length code'\n state.mode = BAD\n break top\n }\n\n break // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end)\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3\n _in -= len\n bits -= len << 3\n hold &= (1 << bits) - 1\n\n /* update state and return */\n strm.next_in = _in\n strm.next_out = _out\n strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last)\n strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end)\n state.hold = hold\n state.bits = bits\n return\n}\n", "// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nimport { Buf16 } from '../utils/common.js'\n\nvar MAXBITS = 15\nvar ENOUGH_LENS = 852\nvar ENOUGH_DISTS = 592\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0\nvar LENS = 1\nvar DISTS = 2\n\nvar lbase = [\n /* Length codes 257..285 base */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19,\n 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0,\n]\n\nvar lext = [\n /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17,\n 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72,\n 78,\n]\n\nvar dbase = [\n /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65,\n 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193,\n 12289, 16385, 24577, 0, 0,\n]\n\nvar dext = [\n /* Distance codes 0..29 extra */ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20,\n 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29,\n 64, 64,\n]\n\nexport default function inflate_table(\n type,\n lens,\n lens_index,\n codes,\n table,\n table_index,\n work,\n opts,\n) {\n var bits = opts.bits\n //here = opts.here; /* table entry for duplication */\n\n var len = 0 /* a code's length in bits */\n var sym = 0 /* index of code symbols */\n var min = 0,\n max = 0 /* minimum and maximum code lengths */\n var root = 0 /* number of index bits for root table */\n var curr = 0 /* number of index bits for current table */\n var drop = 0 /* code bits to drop for sub-table */\n var left = 0 /* number of prefix codes available */\n var used = 0 /* code entries in table used */\n var huff = 0 /* Huffman code */\n var incr /* for incrementing code, index */\n var fill /* index for replicating entries */\n var low /* low bits for current root entry */\n var mask /* mask for low root bits */\n var next /* next available space in table */\n var base = null /* base value table to use */\n var base_index = 0\n // var shoextra; /* extra bits table to use */\n var end /* use base and extra for symbol > end */\n var count = Buf16(MAXBITS + 1) //[MAXBITS+1]; /* number of codes of each length */\n var offs = Buf16(MAXBITS + 1) //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null\n var extra_index = 0\n\n var here_bits, here_op, here_val\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) {\n break\n }\n }\n if (root > max) {\n root = max\n }\n if (max === 0) {\n /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0\n\n opts.bits = 1\n return 0 /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) {\n break\n }\n }\n if (root < min) {\n root = min\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1\n left -= count[len]\n if (left < 0) {\n return -1\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1 /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len]\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work /* dummy value--not used */\n end = 19\n } else if (type === LENS) {\n base = lbase\n base_index -= 257\n extra = lext\n extra_index -= 257\n end = 256\n } else {\n /* DISTS */\n base = dbase\n extra = dext\n end = -1\n }\n\n /* initialize opts for loop */\n huff = 0 /* starting code */\n sym = 0 /* starting code symbol */\n len = min /* starting code length */\n next = table_index /* current table to fill in */\n curr = root /* current table index bits */\n drop = 0 /* current bits to drop from code for index */\n low = -1 /* trigger new sub-table when len > root */\n used = 1 << root /* use root table entries */\n mask = used - 1 /* mask for comparing low */\n\n /* check available table space */\n if (\n (type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)\n ) {\n return 1\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop\n if (work[sym] < end) {\n here_op = 0\n here_val = work[sym]\n } else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]]\n here_val = base[base_index + work[sym]]\n } else {\n here_op = 32 + 64 /* end of block */\n here_val = 0\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop)\n fill = 1 << curr\n min = fill /* save offset to next table */\n do {\n fill -= incr\n table[next + (huff >> drop) + fill] =\n (here_bits << 24) | (here_op << 16) | here_val | 0\n } while (fill !== 0)\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1)\n while (huff & incr) {\n incr >>= 1\n }\n if (incr !== 0) {\n huff &= incr - 1\n huff += incr\n } else {\n huff = 0\n }\n\n /* go to next symbol, update count, len */\n sym++\n if (--count[len] === 0) {\n if (len === max) {\n break\n }\n len = lens[lens_index + work[sym]]\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root\n }\n\n /* increment past last table */\n next += min /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop\n left = 1 << curr\n while (curr + drop < max) {\n left -= count[curr + drop]\n if (left <= 0) {\n break\n }\n curr++\n left <<= 1\n }\n\n /* check for enough space */\n used += 1 << curr\n if (\n (type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)\n ) {\n return 1\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) | 0\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) | 0\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root\n return 0\n}\n", "// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nimport adler32 from './adler32.js'\nimport crc32 from './crc32.js'\nimport inflate_fast from './inffast.js'\nimport inflate_table from './inftrees.js'\nimport { Buf16, Buf32, Buf8, arraySet } from '../utils/common.js'\n\nvar CODES = 0\nvar LENS = 1\nvar DISTS = 2\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4\nvar Z_BLOCK = 5\nvar Z_TREES = 6\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0\nvar Z_STREAM_END = 1\nvar Z_NEED_DICT = 2\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2\nvar Z_DATA_ERROR = -3\nvar Z_MEM_ERROR = -4\nvar Z_BUF_ERROR = -5\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\nvar HEAD = 1 /* i: waiting for magic header */\nvar FLAGS = 2 /* i: waiting for method and flags (gzip) */\nvar TIME = 3 /* i: waiting for modification time (gzip) */\nvar OS = 4 /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5 /* i: waiting for extra length (gzip) */\nvar EXTRA = 6 /* i: waiting for extra bytes (gzip) */\nvar NAME = 7 /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8 /* i: waiting for end of comment (gzip) */\nvar HCRC = 9 /* i: waiting for header crc (gzip) */\nvar DICTID = 10 /* i: waiting for dictionary check value */\nvar DICT = 11 /* waiting for inflateSetDictionary() call */\nvar TYPE = 12 /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13 /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14 /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15 /* i/o: same as COPY below, but only first time in */\nvar COPY = 16 /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17 /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18 /* i: waiting for code length code lengths */\nvar CODELENS = 19 /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20 /* i: same as LEN below, but only first time in */\nvar LEN = 21 /* i: waiting for length/lit/eob code */\nvar LENEXT = 22 /* i: waiting for length extra bits */\nvar DIST = 23 /* i: waiting for distance code */\nvar DISTEXT = 24 /* i: waiting for distance extra bits */\nvar MATCH = 25 /* o: waiting for output space to copy string */\nvar LIT = 26 /* o: waiting for output space to write literal */\nvar CHECK = 27 /* i: waiting for 32-bit check value */\nvar LENGTH = 28 /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29 /* finished check, done -- remain here until reset */\nvar BAD = 30 /* got a data error -- remain here until reset */\nvar MEM = 31 /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32 /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\nvar ENOUGH_LENS = 852\nvar ENOUGH_DISTS = 592\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS\n\nfunction zswap32(q) {\n return (\n ((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24)\n )\n}\n\nfunction InflateState() {\n this.mode = 0 /* current inflate mode */\n this.last = false /* true if processing last block */\n this.wrap = 0 /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false /* true if dictionary provided */\n this.flags = 0 /* gzip header method and flags (0 if zlib) */\n this.dmax = 0 /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0 /* protected copy of check value */\n this.total = 0 /* protected copy of output count */\n // TODO: may be {}\n this.head = null /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0 /* log base 2 of requested window size */\n this.wsize = 0 /* window size or zero if not using window */\n this.whave = 0 /* valid bytes in the window */\n this.wnext = 0 /* window write index */\n this.window = null /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0 /* input bit accumulator */\n this.bits = 0 /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0 /* literal or length of data to copy */\n this.offset = 0 /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0 /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null /* starting table for length/literal codes */\n this.distcode = null /* starting table for distance codes */\n this.lenbits = 0 /* index bits for lencode */\n this.distbits = 0 /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0 /* number of code length code lengths */\n this.nlen = 0 /* number of length code lengths */\n this.ndist = 0 /* number of distance code lengths */\n this.have = 0 /* number of code lengths in lens[] */\n this.next = null /* next available space in codes[] */\n\n this.lens = Buf16(320) /* temporary storage for code lengths */\n this.work = Buf16(288) /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null /* dynamic table for distance codes (JS specific) */\n this.sane = 0 /* if false, allow invalid distance too far */\n this.back = 0 /* bits back of last unprocessed length/lit */\n this.was = 0 /* initial length of match */\n}\n\nexport function inflateResetKeep(strm) {\n var state\n\n if (!strm || !strm.state) {\n return Z_STREAM_ERROR\n }\n state = strm.state\n strm.total_in = strm.total_out = state.total = 0\n strm.msg = '' /*Z_NULL*/\n if (state.wrap) {\n /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1\n }\n state.mode = HEAD\n state.last = 0\n state.havedict = 0\n state.dmax = 32768\n state.head = null /*Z_NULL*/\n state.hold = 0\n state.bits = 0\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = Buf32(ENOUGH_LENS)\n state.distcode = state.distdyn = Buf32(ENOUGH_DISTS)\n\n state.sane = 1\n state.back = -1\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK\n}\n\nexport function inflateReset(strm) {\n var state\n\n if (!strm || !strm.state) {\n return Z_STREAM_ERROR\n }\n state = strm.state\n state.wsize = 0\n state.whave = 0\n state.wnext = 0\n return inflateResetKeep(strm)\n}\n\nexport function inflateReset2(strm, windowBits) {\n var wrap\n var state\n\n /* get the state */\n if (!strm || !strm.state) {\n return Z_STREAM_ERROR\n }\n state = strm.state\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0\n windowBits = -windowBits\n } else {\n wrap = (windowBits >> 4) + 1\n if (windowBits < 48) {\n windowBits &= 15\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap\n state.wbits = windowBits\n return inflateReset(strm)\n}\n\nexport function inflateInit2(strm, windowBits) {\n var ret\n var state\n\n if (!strm) {\n return Z_STREAM_ERROR\n }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState()\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state\n state.window = null /*Z_NULL*/\n ret = inflateReset2(strm, windowBits)\n if (ret !== Z_OK) {\n strm.state = null /*Z_NULL*/\n }\n return ret\n}\n\nexport function inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS)\n}\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true\n\nvar lenfix, distfix // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym\n\n lenfix = Buf32(512)\n distfix = Buf32(32)\n\n /* literal/length table */\n sym = 0\n while (sym < 144) {\n state.lens[sym++] = 8\n }\n while (sym < 256) {\n state.lens[sym++] = 9\n }\n while (sym < 280) {\n state.lens[sym++] = 7\n }\n while (sym < 288) {\n state.lens[sym++] = 8\n }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 })\n\n /* distance table */\n sym = 0\n while (sym < 32) {\n state.lens[sym++] = 5\n }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {\n bits: 5,\n })\n\n /* do this just once */\n virgin = false\n }\n\n state.lencode = lenfix\n state.lenbits = 9\n state.distcode = distfix\n state.distbits = 5\n}\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist\n var state = strm.state\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits\n state.wnext = 0\n state.whave = 0\n\n state.window = Buf8(state.wsize)\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n arraySet(state.window, src, end - state.wsize, state.wsize, 0)\n state.wnext = 0\n state.whave = state.wsize\n } else {\n dist = state.wsize - state.wnext\n if (dist > copy) {\n dist = copy\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n arraySet(state.window, src, end - copy, dist, state.wnext)\n copy -= dist\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n arraySet(state.window, src, end - copy, copy, 0)\n state.wnext = copy\n state.whave = state.wsize\n } else {\n state.wnext += dist\n if (state.wnext === state.wsize) {\n state.wnext = 0\n }\n if (state.whave < state.wsize) {\n state.whave += dist\n }\n }\n }\n return 0\n}\n\nexport function inflate(strm, flush) {\n var state\n var input, output // input/output buffers\n var next /* next input INDEX */\n var put /* next output INDEX */\n var have, left /* available input and output */\n var hold /* bit buffer */\n var bits /* bits in bit buffer */\n var _in, _out /* save starting available input and output */\n var copy /* number of stored or match bytes to copy */\n var from /* where to copy match bytes from */\n var from_source\n var here = 0 /* current decoding table entry */\n var here_bits, here_op, here_val // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val // paked \"last\" denormalized (JS specific)\n var len /* length to copy for repeats, bits to drop */\n var ret /* return code */\n var hbuf = Buf8(4) /* buffer for gzip header crc calculation */\n var opts\n\n var n // temporary var for NEED_BITS\n\n var order =\n /* permutation of code lengths */\n [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]\n\n if (\n !strm ||\n !strm.state ||\n !strm.output ||\n (!strm.input && strm.avail_in !== 0)\n ) {\n return Z_STREAM_ERROR\n }\n\n state = strm.state\n if (state.mode === TYPE) {\n state.mode = TYPEDO\n } /* skip check */\n\n //--- LOAD() ---\n put = strm.next_out\n output = strm.output\n left = strm.avail_out\n next = strm.next_in\n input = strm.input\n have = strm.avail_in\n hold = state.hold\n bits = state.bits\n //---\n\n _in = have\n _out = left\n ret = Z_OK\n\n // goto emulation\n inf_leave: for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO\n break\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n if (state.wrap & 2 && hold === 0x8b1f) {\n /* gzip header */\n state.check = 0 /*crc32(0L, Z_NULL, 0)*/\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff\n hbuf[1] = (hold >>> 8) & 0xff\n state.check = crc32(state.check, hbuf, 2, 0)\n //===//\n\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n state.mode = FLAGS\n break\n }\n state.flags = 0 /* expect zlib header */\n if (state.head) {\n state.head.done = false\n }\n if (\n !(state.wrap & 1) /* check if zlib header allowed */ ||\n (((hold & 0xff) /*BITS(8)*/ << 8) + (hold >> 8)) % 31\n ) {\n strm.msg = 'incorrect header check'\n state.mode = BAD\n break\n }\n if ((hold & 0x0f) /*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method'\n state.mode = BAD\n break\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4\n bits -= 4\n //---//\n len = (hold & 0x0f) /*BITS(4)*/ + 8\n if (state.wbits === 0) {\n state.wbits = len\n } else if (len > state.wbits) {\n strm.msg = 'invalid window size'\n state.mode = BAD\n break\n }\n state.dmax = 1 << len\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/\n state.mode = hold & 0x200 ? DICTID : TYPE\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n break\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n state.flags = hold\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method'\n state.mode = BAD\n break\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set'\n state.mode = BAD\n break\n }\n if (state.head) {\n state.head.text = (hold >> 8) & 1\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff\n hbuf[1] = (hold >>> 8) & 0xff\n state.check = crc32(state.check, hbuf, 2, 0)\n //===//\n }\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n state.mode = TIME\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n if (state.head) {\n state.head.time = hold\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff\n hbuf[1] = (hold >>> 8) & 0xff\n hbuf[2] = (hold >>> 16) & 0xff\n hbuf[3] = (hold >>> 24) & 0xff\n state.check = crc32(state.check, hbuf, 4, 0)\n //===\n }\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n state.mode = OS\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n if (state.head) {\n state.head.xflags = hold & 0xff\n state.head.os = hold >> 8\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff\n hbuf[1] = (hold >>> 8) & 0xff\n state.check = crc32(state.check, hbuf, 2, 0)\n //===//\n }\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n state.mode = EXLEN\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n state.length = hold\n if (state.head) {\n state.head.extra_len = hold\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff\n hbuf[1] = (hold >>> 8) & 0xff\n state.check = crc32(state.check, hbuf, 2, 0)\n //===//\n }\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n } else if (state.head) {\n state.head.extra = null /*Z_NULL*/\n }\n state.mode = EXTRA\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length\n if (copy > have) {\n copy = have\n }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len)\n }\n arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len,\n )\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next)\n }\n have -= copy\n next += copy\n state.length -= copy\n }\n if (state.length) {\n break inf_leave\n }\n }\n state.length = 0\n state.mode = NAME\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) {\n break inf_leave\n }\n copy = 0\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++]\n /* use constant limit because in js we should not preallocate memory */\n if (\n state.head &&\n len &&\n state.length < 65536 /*state.head.name_max*/\n ) {\n state.head.name += String.fromCharCode(len)\n }\n } while (len && copy < have)\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next)\n }\n have -= copy\n next += copy\n if (len) {\n break inf_leave\n }\n } else if (state.head) {\n state.head.name = null\n }\n state.length = 0\n state.mode = COMMENT\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) {\n break inf_leave\n }\n copy = 0\n do {\n len = input[next + copy++]\n /* use constant limit because in js we should not preallocate memory */\n if (\n state.head &&\n len &&\n state.length < 65536 /*state.head.comm_max*/\n ) {\n state.head.comment += String.fromCharCode(len)\n }\n } while (len && copy < have)\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next)\n }\n have -= copy\n next += copy\n if (len) {\n break inf_leave\n }\n } else if (state.head) {\n state.head.comment = null\n }\n state.mode = HCRC\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch'\n state.mode = BAD\n break\n }\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n }\n if (state.head) {\n state.head.hcrc = (state.flags >> 9) & 1\n state.head.done = true\n }\n strm.adler = state.check = 0\n state.mode = TYPE\n break\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n strm.adler = state.check = zswap32(hold)\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n state.mode = DICT\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put\n strm.avail_out = left\n strm.next_in = next\n strm.avail_in = have\n state.hold = hold\n state.bits = bits\n //---\n return Z_NEED_DICT\n }\n strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/\n state.mode = TYPE\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) {\n break inf_leave\n }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7\n bits -= bits & 7\n //---//\n state.mode = CHECK\n break\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n state.last = hold & 0x01 /*BITS(1)*/\n //--- DROPBITS(1) ---//\n hold >>>= 1\n bits -= 1\n //---//\n\n switch (hold & 0x03 /*BITS(2)*/) {\n case 0 /* stored block */:\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED\n break\n case 1 /* fixed block */:\n fixedtables(state)\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_ /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2\n bits -= 2\n //---//\n break inf_leave\n }\n break\n case 2 /* dynamic block */:\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE\n break\n case 3:\n strm.msg = 'invalid block type'\n state.mode = BAD\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2\n bits -= 2\n //---//\n break\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7\n bits -= bits & 7\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths'\n state.mode = BAD\n break\n }\n state.length = hold & 0xffff\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n state.mode = COPY_\n if (flush === Z_TREES) {\n break inf_leave\n }\n /* falls through */\n case COPY_:\n state.mode = COPY\n /* falls through */\n case COPY:\n copy = state.length\n if (copy) {\n if (copy > have) {\n copy = have\n }\n if (copy > left) {\n copy = left\n }\n if (copy === 0) {\n break inf_leave\n }\n //--- zmemcpy(put, next, copy); ---\n arraySet(output, input, next, copy, put)\n //---//\n have -= copy\n next += copy\n left -= copy\n put += copy\n state.length -= copy\n break\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE\n break\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n state.nlen = (hold & 0x1f) /*BITS(5)*/ + 257\n //--- DROPBITS(5) ---//\n hold >>>= 5\n bits -= 5\n //---//\n state.ndist = (hold & 0x1f) /*BITS(5)*/ + 1\n //--- DROPBITS(5) ---//\n hold >>>= 5\n bits -= 5\n //---//\n state.ncode = (hold & 0x0f) /*BITS(4)*/ + 4\n //--- DROPBITS(4) ---//\n hold >>>= 4\n bits -= 4\n //---//\n //#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols'\n state.mode = BAD\n break\n }\n //#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0\n state.mode = LENLENS\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n state.lens[order[state.have++]] = hold & 0x07 //BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3\n bits -= 3\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn\n state.lenbits = 7\n\n opts = { bits: state.lenbits }\n ret = inflate_table(\n CODES,\n state.lens,\n 0,\n 19,\n state.lencode,\n 0,\n state.work,\n opts,\n )\n state.lenbits = opts.bits\n\n if (ret) {\n strm.msg = 'invalid code lengths set'\n state.mode = BAD\n break\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0\n state.mode = CODELENS\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here =\n state.lencode[\n hold & ((1 << state.lenbits) - 1)\n ] /*BITS(state.lenbits)*/\n here_bits = here >>> 24\n here_op = (here >>> 16) & 0xff\n here_val = here & 0xffff\n\n if (here_bits <= bits) {\n break\n }\n //--- PULLBYTE() ---//\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits\n bits -= here_bits\n //---//\n state.lens[state.have++] = here_val\n } else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2\n while (bits < n) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits\n bits -= here_bits\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat'\n state.mode = BAD\n break\n }\n len = state.lens[state.have - 1]\n copy = 3 + (hold & 0x03) //BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2\n bits -= 2\n //---//\n } else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3\n while (bits < n) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits\n bits -= here_bits\n //---//\n len = 0\n copy = 3 + (hold & 0x07) //BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3\n bits -= 3\n //---//\n } else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7\n while (bits < n) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits\n bits -= here_bits\n //---//\n len = 0\n copy = 11 + (hold & 0x7f) //BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7\n bits -= 7\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat'\n state.mode = BAD\n break\n }\n while (copy--) {\n state.lens[state.have++] = len\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) {\n break\n }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block'\n state.mode = BAD\n break\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9\n\n opts = { bits: state.lenbits }\n ret = inflate_table(\n LENS,\n state.lens,\n 0,\n state.nlen,\n state.lencode,\n 0,\n state.work,\n opts,\n )\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set'\n state.mode = BAD\n break\n }\n\n state.distbits = 6\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn\n opts = { bits: state.distbits }\n ret = inflate_table(\n DISTS,\n state.lens,\n state.nlen,\n state.ndist,\n state.distcode,\n 0,\n state.work,\n opts,\n )\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set'\n state.mode = BAD\n break\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_\n if (flush === Z_TREES) {\n break inf_leave\n }\n /* falls through */\n case LEN_:\n state.mode = LEN\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put\n strm.avail_out = left\n strm.next_in = next\n strm.avail_in = have\n state.hold = hold\n state.bits = bits\n //---\n inflate_fast(strm, _out)\n //--- LOAD() ---\n put = strm.next_out\n output = strm.output\n left = strm.avail_out\n next = strm.next_in\n input = strm.input\n have = strm.avail_in\n hold = state.hold\n bits = state.bits\n //---\n\n if (state.mode === TYPE) {\n state.back = -1\n }\n break\n }\n state.back = 0\n for (;;) {\n here =\n state.lencode[\n hold & ((1 << state.lenbits) - 1)\n ] /*BITS(state.lenbits)*/\n here_bits = here >>> 24\n here_op = (here >>> 16) & 0xff\n here_val = here & 0xffff\n\n if (here_bits <= bits) {\n break\n }\n //--- PULLBYTE() ---//\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits\n last_op = here_op\n last_val = here_val\n for (;;) {\n here =\n state.lencode[\n last_val +\n ((hold &\n ((1 << (last_bits + last_op)) -\n 1)) /*BITS(last.bits + last.op)*/ >>\n last_bits)\n ]\n here_bits = here >>> 24\n here_op = (here >>> 16) & 0xff\n here_val = here & 0xffff\n\n if (last_bits + here_bits <= bits) {\n break\n }\n //--- PULLBYTE() ---//\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits\n bits -= last_bits\n //---//\n state.back += last_bits\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits\n bits -= here_bits\n //---//\n state.back += here_bits\n state.length = here_val\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT\n break\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1\n state.mode = TYPE\n break\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code'\n state.mode = BAD\n break\n }\n state.extra = here_op & 15\n state.mode = LENEXT\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra\n while (bits < n) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1) /*BITS(state.extra)*/\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra\n bits -= state.extra\n //---//\n state.back += state.extra\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length\n state.mode = DIST\n /* falls through */\n case DIST:\n for (;;) {\n here =\n state.distcode[\n hold & ((1 << state.distbits) - 1)\n ] /*BITS(state.distbits)*/\n here_bits = here >>> 24\n here_op = (here >>> 16) & 0xff\n here_val = here & 0xffff\n\n if (here_bits <= bits) {\n break\n }\n //--- PULLBYTE() ---//\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits\n last_op = here_op\n last_val = here_val\n for (;;) {\n here =\n state.distcode[\n last_val +\n ((hold &\n ((1 << (last_bits + last_op)) -\n 1)) /*BITS(last.bits + last.op)*/ >>\n last_bits)\n ]\n here_bits = here >>> 24\n here_op = (here >>> 16) & 0xff\n here_val = here & 0xffff\n\n if (last_bits + here_bits <= bits) {\n break\n }\n //--- PULLBYTE() ---//\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits\n bits -= last_bits\n //---//\n state.back += last_bits\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits\n bits -= here_bits\n //---//\n state.back += here_bits\n if (here_op & 64) {\n strm.msg = 'invalid distance code'\n state.mode = BAD\n break\n }\n state.offset = here_val\n state.extra = here_op & 15\n state.mode = DISTEXT\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra\n while (bits < n) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1) /*BITS(state.extra)*/\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra\n bits -= state.extra\n //---//\n state.back += state.extra\n }\n //#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back'\n state.mode = BAD\n break\n }\n //#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH\n /* falls through */\n case MATCH:\n if (left === 0) {\n break inf_leave\n }\n copy = _out - left\n if (state.offset > copy) {\n /* copy from window */\n copy = state.offset - copy\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back'\n state.mode = BAD\n break\n }\n // (!) This block is disabled in zlib defaults,\n // don't enable it for binary compatibility\n //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n // Trace((stderr, \"inflate.c too far\\n\"));\n // copy -= state.whave;\n // if (copy > state.length) { copy = state.length; }\n // if (copy > left) { copy = left; }\n // left -= copy;\n // state.length -= copy;\n // do {\n // output[put++] = 0;\n // } while (--copy);\n // if (state.length === 0) { state.mode = LEN; }\n // break;\n //#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext\n from = state.wsize - copy\n } else {\n from = state.wnext - copy\n }\n if (copy > state.length) {\n copy = state.length\n }\n from_source = state.window\n } else {\n /* copy from output */\n from_source = output\n from = put - state.offset\n copy = state.length\n }\n if (copy > left) {\n copy = left\n }\n left -= copy\n state.length -= copy\n do {\n output[put++] = from_source[from++]\n } while (--copy)\n if (state.length === 0) {\n state.mode = LEN\n }\n break\n case LIT:\n if (left === 0) {\n break inf_leave\n }\n output[put++] = state.length\n left--\n state.mode = LEN\n break\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) {\n break inf_leave\n }\n have--\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits\n bits += 8\n }\n //===//\n _out -= left\n strm.total_out += _out\n state.total += _out\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n state.flags\n ? crc32(state.check, output, _out, put - _out)\n : adler32(state.check, output, _out, put - _out)\n }\n _out = left\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check'\n state.mode = BAD\n break\n }\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) {\n break inf_leave\n }\n have--\n hold += input[next++] << bits\n bits += 8\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check'\n state.mode = BAD\n break\n }\n //=== INITBITS();\n hold = 0\n bits = 0\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE\n /* falls through */\n case DONE:\n ret = Z_STREAM_END\n break inf_leave\n case BAD:\n ret = Z_DATA_ERROR\n break inf_leave\n case MEM:\n return Z_MEM_ERROR\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put\n strm.avail_out = left\n strm.next_in = next\n strm.avail_in = have\n state.hold = hold\n state.bits = bits\n //---\n\n if (\n state.wsize ||\n (_out !== strm.avail_out &&\n state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))\n ) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM\n return Z_MEM_ERROR\n }\n }\n _in -= strm.avail_in\n _out -= strm.avail_out\n strm.total_in += _in\n strm.total_out += _out\n state.total += _out\n if (state.wrap && _out) {\n strm.adler = state.check =\n /*UPDATE(state.check, strm.next_out - _out, _out);*/\n state.flags\n ? crc32(state.check, output, _out, strm.next_out - _out)\n : adler32(state.check, output, _out, strm.next_out - _out)\n }\n strm.data_type =\n state.bits +\n (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0)\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR\n }\n return ret\n}\n\nexport function inflateEnd(strm) {\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR\n }\n\n var state = strm.state\n if (state.window) {\n state.window = null\n }\n strm.state = null\n return Z_OK\n}\n\nexport function inflateGetHeader(strm, head) {\n var state\n\n /* check state */\n if (!strm || !strm.state) {\n return Z_STREAM_ERROR\n }\n state = strm.state\n if ((state.wrap & 2) === 0) {\n return Z_STREAM_ERROR\n }\n\n /* save header structure */\n state.head = head\n head.done = false\n return Z_OK\n}\n\nexport function inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length\n\n var state\n var dictid\n var ret\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) {\n return Z_STREAM_ERROR\n }\n state = strm.state\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1 /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0)\n if (dictid !== state.check) {\n return Z_DATA_ERROR\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength)\n if (ret) {\n state.mode = MEM\n return Z_MEM_ERROR\n }\n state.havedict = 1\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK\n}\n\nexport var inflateInfo = 'pako inflate (from Nodeca project)'\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n", "// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nexport default {\n 2: 'need dictionary' /* Z_NEED_DICT 2 */,\n 1: 'stream end' /* Z_STREAM_END 1 */,\n 0: '' /* Z_OK 0 */,\n '-1': 'file error' /* Z_ERRNO (-1) */,\n '-2': 'stream error' /* Z_STREAM_ERROR (-2) */,\n '-3': 'data error' /* Z_DATA_ERROR (-3) */,\n '-4': 'insufficient memory' /* Z_MEM_ERROR (-4) */,\n '-5': 'buffer error' /* Z_BUF_ERROR (-5) */,\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */,\n}\n", "// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nexport default function ZStream() {\n /* next input byte */\n this.input = null // JS specific, because we have no pointers\n this.next_in = 0\n /* number of bytes available at input */\n this.avail_in = 0\n /* total number of input bytes read so far */\n this.total_in = 0\n /* next output byte should be put there */\n this.output = null // JS specific, because we have no pointers\n this.next_out = 0\n /* remaining free space at output */\n this.avail_out = 0\n /* total number of bytes output so far */\n this.total_out = 0\n /* last error message, NULL if no error */\n this.msg = '' /*Z_NULL*/\n /* not visible by applications */\n this.state = null\n /* best guess about the data type: binary or text */\n this.data_type = 2 /*Z_UNKNOWN*/\n /* adler32 value of the uncompressed data */\n this.adler = 0\n}\n", "import {\n Buf8,\n arraySet,\n assign,\n flattenChunks,\n shrinkBuf,\n} from './utils/common.js'\nimport {\n binstring2buf,\n buf2string,\n string2buf,\n utf8border,\n} from './utils/strings.js'\nimport {\n Z_BUF_ERROR,\n Z_FINISH,\n Z_NEED_DICT,\n Z_NO_FLUSH,\n Z_OK,\n Z_STREAM_END,\n Z_SYNC_FLUSH,\n} from './zlib/constants.js'\nimport GZheader from './zlib/gzheader.js'\nimport {\n inflate as zlibInflate,\n inflateEnd,\n inflateGetHeader,\n inflateInit2,\n inflateSetDictionary,\n} from './zlib/inflate.js'\nimport msg from './zlib/messages.js'\nimport ZStream from './zlib/zstream.js'\n\nvar toString = Object.prototype.toString\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nexport class Inflate {\n constructor(options) {\n if (!(this instanceof Inflate)) return new Inflate(options)\n\n this.options = assign(\n {\n chunkSize: 16384,\n windowBits: 0,\n to: '',\n },\n options || {},\n )\n\n var opt = this.options\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {\n opt.windowBits = -opt.windowBits\n if (opt.windowBits === 0) {\n opt.windowBits = -15\n }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if (\n opt.windowBits >= 0 &&\n opt.windowBits < 16 &&\n !(options && options.windowBits)\n ) {\n opt.windowBits += 32\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if (opt.windowBits > 15 && opt.windowBits < 48) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15\n }\n }\n\n this.err = 0 // error code, if happens (0 = Z_OK)\n this.msg = '' // error message\n this.ended = false // used to avoid multiple onEnd() calls\n this.chunks = [] // chunks of compressed data\n\n this.strm = new ZStream()\n this.strm.avail_out = 0\n\n var status = inflateInit2(this.strm, opt.windowBits)\n\n if (status !== Z_OK) {\n throw new Error(msg[status])\n }\n\n this.header = new GZheader()\n\n inflateGetHeader(this.strm, this.header)\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = string2buf(opt.dictionary)\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary)\n }\n if (opt.raw) {\n //In raw mode we need to set the dictionary early\n status = inflateSetDictionary(this.strm, opt.dictionary)\n if (status !== Z_OK) {\n throw new Error(msg[status])\n }\n }\n }\n }\n\n /**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\n push(data, mode) {\n var strm = this.strm\n var chunkSize = this.options.chunkSize\n var dictionary = this.options.dictionary\n var status, _mode\n var next_out_utf8, tail, utf8str\n var dict\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false\n\n if (this.ended) {\n return false\n }\n _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = binstring2buf(data)\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data)\n } else {\n strm.input = data\n }\n\n strm.next_in = 0\n strm.avail_in = strm.input.length\n\n do {\n if (strm.avail_out === 0) {\n strm.output = Buf8(chunkSize)\n strm.next_out = 0\n strm.avail_out = chunkSize\n }\n\n status = zlibInflate(strm, Z_NO_FLUSH) /* no bad return value */\n\n if (status === Z_NEED_DICT && dictionary) {\n // Convert data if needed\n if (typeof dictionary === 'string') {\n dict = string2buf(dictionary)\n } else if (toString.call(dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(dictionary)\n } else {\n dict = dictionary\n }\n\n status = inflateSetDictionary(this.strm, dict)\n }\n\n if (status === Z_BUF_ERROR && allowBufError === true) {\n status = Z_OK\n allowBufError = false\n }\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status)\n this.ended = true\n return false\n }\n\n if (strm.next_out) {\n if (\n strm.avail_out === 0 ||\n status === Z_STREAM_END ||\n (strm.avail_in === 0 &&\n (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))\n ) {\n if (this.options.to === 'string') {\n next_out_utf8 = utf8border(strm.output, strm.next_out)\n\n tail = strm.next_out - next_out_utf8\n utf8str = buf2string(strm.output, next_out_utf8)\n\n // move tail\n strm.next_out = tail\n strm.avail_out = chunkSize - tail\n if (tail) {\n arraySet(strm.output, strm.output, next_out_utf8, tail, 0)\n }\n\n this.onData(utf8str)\n } else {\n this.onData(shrinkBuf(strm.output, strm.next_out))\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true\n }\n } while (\n (strm.avail_in > 0 || strm.avail_out === 0) &&\n status !== Z_STREAM_END\n )\n\n if (status === Z_STREAM_END) {\n _mode = Z_FINISH\n }\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = inflateEnd(this.strm)\n this.onEnd(status)\n this.ended = true\n return status === Z_OK\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK)\n strm.avail_out = 0\n return true\n }\n\n return true\n }\n\n /**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\n onData(chunk) {\n this.chunks.push(chunk)\n }\n\n /**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\n onEnd(status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 aligned strings to onData\n this.result = this.chunks.join('')\n } else {\n this.result = flattenChunks(this.chunks)\n }\n }\n this.chunks = []\n this.err = status\n this.msg = this.strm.msg\n }\n}\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nexport function inflate(input, options) {\n var inflator = new Inflate(options)\n\n inflator.push(input, true)\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) {\n throw inflator.msg || msg[inflator.err]\n }\n\n return inflator.result\n}\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nexport function inflateRaw(input, options) {\n options = options || {}\n options.raw = true\n return inflate(input, options)\n}\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\nexport var ungzip = inflate\n", "export function concatUint8Array(args: Uint8Array[]) {\n let total = 0\n for (const entry of args) {\n total += entry.length\n }\n const mergedArray = new Uint8Array(total)\n let offset = 0\n for (const entry of args) {\n mergedArray.set(entry, offset)\n offset += entry.length\n }\n return mergedArray\n}\n", "/******/ // The require scope\n/******/ const __webpack_require__ = {};\n/******/ \n/************************************************************************/\n/******/ /* webpack/runtime/define property getters */\n/******/ (() => {\n/******/ \t// define getter/value functions for harmony exports\n/******/ \t__webpack_require__.d = (exports, definition) => {\n/******/ \t\tif(Array.isArray(definition)) {\n/******/ \t\t\tvar i = 0;\n/******/ \t\t\twhile(i < definition.length) {\n/******/ \t\t\t\tvar key = definition[i++];\n/******/ \t\t\t\tvar binding = definition[i++];\n/******/ \t\t\t\tif(!__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tif(binding === 0) {\n/******/ \t\t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, value: definition[i++] });\n/******/ \t\t\t\t\t} else {\n/******/ \t\t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: binding });\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t} else if(binding === 0) { i++; }\n/******/ \t\t\t}\n/******/ \t\t} else {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t};\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/hasOwnProperty shorthand */\n/******/ (() => {\n/******/ \t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ })();\n/******/ \n/******/ /* webpack/runtime/make namespace object */\n/******/ (() => {\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = (exports) => {\n/******/ \t\tif(Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/ })();\n/******/ \n/************************************************************************/\n\n// NAMESPACE OBJECT (decoupled): ../src/wasm/bgzf_wasm_bg.js\nvar bgzf_wasm_bg_namespaceObject = {};\n__webpack_require__.r(bgzf_wasm_bg_namespaceObject);\n__webpack_require__.d(bgzf_wasm_bg_namespaceObject, {\n ChunkSliceResult: () => (ChunkSliceResult),\n __wbg_Error_92b29b0548f8b746: () => (__wbg_Error_92b29b0548f8b746),\n __wbg___wbindgen_throw_344f42d3211c4765: () => (__wbg___wbindgen_throw_344f42d3211c4765),\n __wbg_set_wasm: () => (__wbg_set_wasm),\n decompress_all: () => (decompress_all),\n decompress_chunk_slice: () => (decompress_chunk_slice)\n});\n\n;// ../src/wasm/bgzf_wasm_bg.wasm\nconst wasm_bgzf_wasm_bg_namespaceObject = \"data:application/wasm;base64,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AghBAUEAEBUACywCAX8BfiMAQRBrIgEkACAAKQIAIQIgASAANgIMIAEgAjcCBCABQQRqEGYACyMBAX8jAEEQayICJAAgAiABNgIMIAIgADYCCCACQQhqEGUACyAAAkAgASgCAEUNACAAQbiXwAA2AgQgACABNgIADwsACx4BAX8CQCAAKAIAIgJFDQAgASACIAAoAgQQTQ8LAAsbAQF/EGogAEEEakEEEFgiASAANgIAIAFBBGoLHgEBfwJAIAAoAgAiAUEBSA0AIAAoAgQgAUEBEFMLCx4AIAAoAgAgACgCBEEAKALomkAiAEEEIAAbEQQAAAsjAQF/AkBBhIrAABAtIgANAEG4icAAQTpB9InAABA4AAsgAAsXAAJAIABBf2pBfk8NACABIABBARBTCwscAQF/AkAgACgCACIBRQ0AIAAoAgQgAUEBEFMLCxcAAkAgAUEJSQ0AIAEgABAODwsgABACCxUAIABBfGoiACAAKAIAQQRqQQQQUwsUAAJAIABFDQAgACABEF8ACxBWAAsRACAAIAFBAXRBAXIgAhAxAAsSAAJAIAFFDQAgACABIAIQUwsLEgAgACABIAIgAyAEQQAgBRADCxUAAkAgAEUNACAAIAAoAqhaEQIACwsaACAAQQApAoSWQDcCCCAAQQApAvyVQDcCAAsaACAAQQApAvSVQDcCCCAAQQApAuyVQDcCAAsWACAAKAIAIAEgAiAAKAIEKAIMEQcACw0AIAAgASACIAMQBw8LFABBACAANgK8mkBBAEEBNgK4mkALEwAgAEG4l8AANgIEIAAgATYCAAsQACABIAAoAgAgACgCBBBNCxAAIAEgACgCACAAKAIEEAoLCwAgACABIAIQKg8LCgAgACABEGkaAAsPACAAQZyVwAAgASACEAwLEQBBkJjAAEEjQaSYwAAQMQALCwAgACMAaiQAIwALCQAgACABEEQPCwkAIAAgARAuDwsJACAAIAEQYQALDABBr4fAAEEbEFoACw0AQcqHwABBzwAQWgALCQAgASAAEDsACwwAIAAgASkCADcDAAsJACABIAAQXQALDQAgAUH8mcAAQRgQCgsIACAAIAEQAAsIACAAIAEQAQsJACAAKAIAEEoLBwAgABA5AAsHACAAEEAACwcAIAAQJgALCwBBAEEBOgDAnkALCQAgAEEANgIACwUAEGsACwMADwsDAAALAgALC74aAgBBgIDAAAuUGkF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVkFnNsaWNlIGluZGV4IHN0YXJ0cyBhdCDADSBidXQgZW5kcyBhdCDAABJyYW5nZSBzdGFydCBpbmRleCDAIiBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCDAABByYW5nZSBlbmQgaW5kZXggwCIgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggwAAvcnVzdGMvNDhhMjI5Y2VhZWZkNDk4NWM1MDk5MGIxNDExNmI2ZDg1NmFmMDk4NS9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy80OGEyMjljZWFlZmQ0OTg1YzUwOTkwYjE0MTE2YjZkODU2YWYwOTg1L2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEyNi9zcmMvZXh0ZXJucmVmLnJzAC9ydXN0Yy80OGEyMjljZWFlZmQ0OTg1YzUwOTkwYjE0MTE2YjZkODU2YWYwOTg1L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjEzL3NyYy9kbG1hbGxvYy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9saWJkZWZsYXRlci0xLjI1LjIvc3JjL2xpYi5ycwAA1gAQAF4AAABrAAAADQAAAMwCEAAKAAAAHAAAACQAAADMAhAACgAAAMIAAAApAAAAzAIQAAoAAAC2AAAAJwAAAMwCEAAKAAAAcQAAABwAAADMAhAACgAAAG0AAABBAAAAZGVjb21wcmVzc2lvbiBmYWlsZWRpbnZhbGlkIGJnemYgaGVhZGVyAMwCEAAKAAAATAAAAD0AAABhdHRlbXB0ZWQgdG8gdGFrZSBvd25lcnNoaXAgb2YgUnVzdCB2YWx1ZSB3aGlsZSBpdCB3YXMgYm9ycm93ZWRudWxsIHBvaW50ZXIgcGFzc2VkIHRvIHJ1c3RyZWN1cnNpdmUgdXNlIG9mIGFuIG9iamVjdCBkZXRlY3RlZCB3aGljaCB3b3VsZCBsZWFkIHRvIHVuc2FmZSBhbGlhc2luZyBpbiBydXN0AAAAkwEQAGcAAACEAAAAEQAAAJMBEABnAAAAkgAAABEAAABsaWJkZWZsYXRlX2RlZmxhdGVfZGVjb21wcmVzcyByZXR1cm5lZCBhbiB1bmtub3duIGVycm9yIHR5cGU6IHRoaXMgaXMgYW4gaW50ZXJuYWwgYnVnIHRoYXQgKiptdXN0KiogYmUgZml4ZWR3AhAAXwAAAA0BAAAVAAAAbGliZGVmbGF0ZV9hbGxvY19kZWNvbXByZXNzb3IgcmV0dXJuZWQgTlVMTDogb3V0IG9mIG1lbW9yeQAAdwIQAF8AAACdAAAAEQAAAAwAAAACAAAAAwAAABAREgAIBwkGCgULBAwDDQIOAQ8AAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAAAAAAAEAAAACAAAAAwAAAAQAAQAFAAEABwACAAkAAgANAAMAEQADABkABAAhAAQAMQAFAEEABQBhAAYAgQAGAMEABwABAQcAgQEIAAECCAABAwkAAQQJAAEGCgABCAoAAQwLAAEQCwABGAwAASAMAAEwDQABQA0AAWANAAFgDQABYAAAAIAAAAGAAAACgAAAA4AAAASAAAAFgAAABoAAAAeAAAAIgAAACYAAAAqAAAALgAAADIAAAA2AAAAOgAAAD4AAABCAAAARgAAAEoAAABOAAAAUgAAAFYAAABaAAAAXgAAAGIAAABmAAAAagAAAG4AAAByAAAAdgAAAHoAAAB+AAAAggAAAIYAAACKAAAAjgAAAJIAAACWAAAAmgAAAJ4AAACiAAAApgAAAKoAAACuAAAAsgAAALYAAAC6AAAAvgAAAMIAAADGAAAAygAAAM4AAADSAAAA1gAAANoAAADeAAAA4gAAAOYAAADqAAAA7gAAAPIAAAD2AAAA+gAAAP4AAAECAAABBgAAAQoAAAEOAAABEgAAARYAAAEaAAABHgAAASIAAAEmAAABKgAAAS4AAAEyAAABNgAAAToAAAE+AAABQgAAAUYAAAFKAAABTgAAAVIAAAFWAAABWgAAAV4AAAFiAAABZgAAAWoAAAFuAAABcgAAAXYAAAF6AAABfgAAAYIAAAGGAAABigAAAY4AAAGSAAABlgAAAZoAAAGeAAABogAAAaYAAAGqAAABrgAAAbIAAAG2AAABugAAAb4AAAHCAAABxgAAAcoAAAHOAAAB0gAAAdYAAAHaAAAB3gAAAeIAAAHmAAAB6gAAAe4AAAHyAAAB9gAAAfoAAAH+AAACAgAAAgYAAAIKAAACDgAAAhIAAAIWAAACGgAAAh4AAAIiAAACJgAAAioAAAIuAAACMgAAAjYAAAI6AAACPgAAAkIAAAJGAAACSgAAAk4AAAJSAAACVgAAAloAAAJeAAACYgAAAmYAAAJqAAACbgAAAnIAAAJ2AAACegAAAn4AAAKCAAAChgAAAooAAAKOAAACkgAAApYAAAKaAAACngAAAqIAAAKmAAACqgAAAq4AAAKyAAACtgAAAroAAAK+AAACwgAAAsYAAALKAAACzgAAAtIAAALWAAAC2gAAAt4AAALiAAAC5gAAAuoAAALuAAAC8gAAAvYAAAL6AAAC/gAAAwIAAAMGAAADCgAAAw4AAAMSAAADFgAAAxoAAAMeAAADIgAAAyYAAAMqAAADLgAAAzIAAAM2AAADOgAAAz4AAANCAAADRgAAA0oAAANOAAADUgAAA1YAAANaAAADXgAAA2IAAANmAAADagAAA24AAANyAAADdgAAA3oAAAN+AAADggAAA4YAAAOKAAADjgAAA5IAAAOWAAADmgAAA54AAAOiAAADpgAAA6oAAAOuAAADsgAAA7YAAAO6AAADvgAAA8IAAAPGAAADygAAA84AAAPSAAAD1gAAA9oAAAPeAAAD4gAAA+YAAAPqAAAD7gAAA/IAAAP2AAAD+gAAA/4AAoAAAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgABAAsAAQANAAEADwABABEAAgATAAIAFwACABsAAgAfAAMAIwADACsAAwAzAAMAOwAEAEMABABTAAQAYwAEAHMABQCDAAUAowAFAMMABQDjAAAAAgEAAAIBAAACAQAAAAAIAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAADAAAAAQAAAAKAAAACwAAAAwAAAAAAAAACAAAAAQAAAANAAAADgAAAA8AAAAQAAAAEQAAABAAAAAEAAAAEgAAABMAAAAUAAAACAAAAFz26V/cAva58cFwbPJhwSSLxuONScB+/2OOfffX5KQwYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZAAATAIQACoAAACxBAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplIDw9IHNpemUgKyBtYXhfb3ZlcmhlYWQAAEwCEAAqAAAAtwQAAA0AAAByd2xvY2sgb3ZlcmZsb3dlZCByZWFkIGxvY2tzNQEQAF0AAAAVAAAALAAAAAAAAAAIAAAABAAAABUAAAAJAAAADAAAAAQAAAAWAAAAcndsb2NrIGhhcyBub3QgYmVlbiBsb2NrZWQgZm9yIHJlYWRpbmcAADUBEABdAAAAPgAAAAkAAABjYXBhY2l0eSBvdmVyZmxvdwAAAPsBEABQAAAAHAAAAAUAAAAwMDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MjAyMTIyMjMyNDI1MjYyNzI4MjkzMDMxMzIzMzM0MzUzNjM3MzgzOTQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NTA1MTUyNTM1NDU1NTY1NzU4NTk2MDYxNjI2MzY0NjU2NjY3Njg2OTcwNzE3MjczNzQ3NTc2Nzc3ODc5ODA4MTgyODM4NDg1ODY4Nzg4ODk5MDkxOTI5Mzk0OTU5Njk3OTg5OVJlZkNlbGwgYWxyZWFkeSBib3Jyb3dlZABBlJrAAAsYAAAAAAAAAAABAAAAAAAAAAEAAAAEAAAAACkEbmFtZQEiAVcfX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcgBICXByb2R1Y2VycwEMcHJvY2Vzc2VkLWJ5AgZ3YWxydXMGMC4yNi40DHdhc20tYmluZGdlbhMwLjIuMTI2ICgyMWFjODA0YTkp\";\n;// ../src/wasm/bgzf_wasm_bg.js\nclass ChunkSliceResult {\n static __wrap(ptr) {\n const obj = Object.create(ChunkSliceResult.prototype);\n obj.__wbg_ptr = ptr;\n ChunkSliceResultFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n ChunkSliceResultFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_chunksliceresult_free(ptr, 0);\n }\n /**\n * @returns {Uint8Array}\n */\n take_buffer() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.chunksliceresult_take_buffer(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var v1 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export(r0, r1 * 1, 1);\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {Float64Array}\n */\n take_cpositions() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.chunksliceresult_take_cpositions(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var v1 = getArrayF64FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export(r0, r1 * 8, 8);\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {Float64Array}\n */\n take_dpositions() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.chunksliceresult_take_dpositions(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var v1 = getArrayF64FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export(r0, r1 * 8, 8);\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n}\nif (Symbol.dispose) ChunkSliceResult.prototype[Symbol.dispose] = ChunkSliceResult.prototype.free;\n\n/**\n * @param {Uint8Array} input\n * @returns {Uint8Array}\n */\nfunction decompress_all(input) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.decompress_all(retptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n if (r3) {\n throw takeObject(r2);\n }\n var v2 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export(r0, r1 * 1, 1);\n return v2;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n}\n\n/**\n * Decompress a slice of BGZF data between two virtual offsets.\n * Position parameters use f64 to map to JS number, supporting files >4GB.\n * The input buffer should be a slice starting at min_block_position in the original file.\n * Positions are tracked as f64 to preserve precision for large files.\n * @param {Uint8Array} input\n * @param {number} min_block_position\n * @param {number} min_data_position\n * @param {number} max_block_position\n * @param {number} max_data_position\n * @returns {ChunkSliceResult}\n */\nfunction decompress_chunk_slice(input, min_block_position, min_data_position, max_block_position, max_data_position) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.decompress_chunk_slice(retptr, ptr0, len0, min_block_position, min_data_position, max_block_position, max_data_position);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return ChunkSliceResult.__wrap(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n}\nfunction __wbg_Error_92b29b0548f8b746(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n}\nfunction __wbg___wbindgen_throw_344f42d3211c4765(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n}\nconst ChunkSliceResultFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_chunksliceresult_free(ptr, 1));\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction dropObject(idx) {\n if (idx < 1028) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction getArrayF64FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nlet cachedFloat64ArrayMemory0 = null;\nfunction getFloat64ArrayMemory0() {\n if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {\n cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap = new Array(1024).fill(undefined);\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len).slice());\n}\n\nlet WASM_VECTOR_LEN = 0;\n\n\nlet wasm;\nfunction __wbg_set_wasm(val) {\n wasm = val;\n}\n\n;// ./src/wrapper.js\n// Import the WASM binary as base64 data URL\n\n\n\nlet wrapper_wasm = null\nlet initPromise = null\n\nasync function init() {\n if (wrapper_wasm) return wrapper_wasm\n\n if (!initPromise) {\n initPromise = (async () => {\n // wasmData is a data URL from asset/inline\n const response = await fetch(wasm_bgzf_wasm_bg_namespaceObject)\n const bytes = await response.arrayBuffer()\n const { instance } = await WebAssembly.instantiate(bytes, {\n './bgzf_wasm_bg.js': bgzf_wasm_bg_namespaceObject,\n })\n wrapper_wasm = instance.exports\n __wbg_set_wasm(wrapper_wasm)\n return wrapper_wasm\n })()\n }\n\n return initPromise\n}\n\nasync function decompressAll(input) {\n if (!wrapper_wasm) {\n await init()\n }\n return decompress_all(input)\n}\n\nasync function decompressChunkSlice(\n input,\n minBlockPosition,\n minDataPosition,\n maxBlockPosition,\n maxDataPosition,\n) {\n if (!wrapper_wasm) {\n await init()\n }\n const result = decompress_chunk_slice(\n input,\n minBlockPosition,\n minDataPosition,\n maxBlockPosition,\n maxDataPosition,\n )\n // The take_* accessors already copy out of the wasm heap \u2014 wasm-bindgen\n // emits `getArrayF64FromWasm0(...).slice()` \u2014 so the returned typed arrays\n // own their bytes and stay valid after free() and after the heap grows.\n // Spreading them into plain arrays was therefore a second copy of every\n // block offset, for consumers (tabix-js, bam-js) that only index them.\n const buffer = result.take_buffer()\n const cpositions = result.take_cpositions()\n const dpositions = result.take_dpositions()\n result.free()\n return { buffer, cpositions, dpositions }\n}\n\n\n\n\nexport { decompressAll, decompressChunkSlice };\n", "import { ungzip } from 'pako-esm2'\n\nimport { scanBgzfBlocks } from './bgzfBlockScan.ts'\nimport { concatUint8Array } from './util.ts'\nimport {\n decompressAll,\n decompressChunkSlice,\n} from './wasm/bgzf-wasm-inlined.js'\n\nimport type { BgzfBlockInfo } from './bgzfBlockScan.ts'\nimport type { BgzfWorkerPool } from './workerPool.ts'\n\n/**\n * A position in the uncompressed data: which BGZF block (by its compressed\n * offset in the file), and how far into that block's decompressed bytes.\n */\nexport interface VirtualOffset {\n blockPosition: number\n dataPosition: number\n}\n\n/**\n * A range between two virtual offsets \u2014 what a BAI or TBI resolves a query to.\n * It covers a run of consecutive BGZF blocks and usually starts and ends\n * partway through the first and last of them.\n */\nexport interface Chunk {\n minv: VirtualOffset\n maxv: VirtualOffset\n}\n\nconst BGZF_MIN_BLOCK_SIZE = 26\n\nfunction hasGzipHeader(data: Uint8Array) {\n return data[0] === 0x1f && data[1] === 0x8b\n}\n\n// Mirrors the header check in the wasm `parse_block`: gzip magic, deflate\n// method, FEXTRA flag, XLEN=6 and the 'BC' extra-subfield id. Checked here so\n// non-bgzf input never reaches wasm \u2014 see the comment in unzip().\nfunction hasBgzfHeader(data: Uint8Array) {\n return (\n data.length >= BGZF_MIN_BLOCK_SIZE &&\n hasGzipHeader(data) &&\n data[2] === 8 &&\n data[3] === 4 &&\n data[10] === 6 &&\n data[12] === 0x42 &&\n data[13] === 0x43\n )\n}\n\nfunction errorMessage(error: unknown) {\n return error instanceof Error ? error.message : `${error}`\n}\n\nasync function decompressGzip(inputData: Uint8Array) {\n if (typeof DecompressionStream !== 'undefined') {\n const stream = new Blob([inputData as Uint8Array<ArrayBuffer>])\n .stream()\n .pipeThrough(new DecompressionStream('gzip'))\n return new Uint8Array(await new Response(stream).arrayBuffer())\n } else {\n return ungzip(inputData, undefined)\n }\n}\n\nfunction wrapGzipHeaderError(error: unknown) {\n if (errorMessage(error).includes('invalid gzip header')) {\n return new Error(\n 'problem decompressing block: incorrect gzip header check',\n { cause: error },\n )\n }\n return error\n}\n\n// The return type is annotated rather than inferred. `decompressAll` comes from\n// the inlined wasm bundle, which is untyped JS, so inference makes this\n// `Promise<any>` \u2014 and that `any` is published in the .d.ts and flows straight\n// into consumers (@gmod/bam's csi.ts reads .buffer/.byteOffset/.subarray off it\n// completely unchecked). The Rust returns `Vec<u8>`, i.e. a Uint8Array.\nexport async function unzip(inputData: Uint8Array): Promise<Uint8Array> {\n // Reading past EOF yields an empty buffer; decompressing nothing is nothing\n // rather than an error.\n if (inputData.length === 0) {\n return new Uint8Array(0)\n }\n // Sniff the header in JS before handing off to wasm. Calling into wasm\n // copies the whole input into the wasm heap, and that heap can only grow \u2014\n // so routing a plain (non-bgzf) gzip file through wasm just to have it\n // rejected would permanently reserve the file's full size.\n if (!hasBgzfHeader(inputData)) {\n if (hasGzipHeader(inputData)) {\n return decompressGzip(inputData)\n }\n throw new Error(\n 'problem decompressing block: not a valid bgzf or gzip block',\n )\n }\n try {\n return await decompressAll(inputData)\n } catch (error) {\n // A valid-looking header that wasm still rejects means the first block is\n // truncated; the generic gzip path gives a better error for that.\n if (errorMessage(error).includes('invalid bgzf header')) {\n return decompressGzip(inputData)\n }\n throw wrapGzipHeaderError(error)\n }\n}\n\n/**\n * A decompressed BGZF chunk plus, per block it spans, that block's compressed\n * offset in the file (`cpositions`) and its uncompressed offset within the\n * chunk (`dpositions`). Together they let a caller turn a byte offset in\n * `buffer` back into a virtual file offset \u2014 see @gmod/tabix and @gmod/bam.\n *\n * Annotated rather than inferred, for the same reason as {@link unzip}: it is\n * derived from the untyped inlined-wasm bundle, and whatever tsc makes of that\n * is what gets published in the .d.ts.\n */\nexport interface ChunkSlice {\n buffer: Uint8Array\n cpositions: Float64Array\n dpositions: Float64Array\n}\n\n/**\n * Reassemble a chunk slice from independently decompressed blocks.\n *\n * Mirrors what `decompress_chunk_slice` does in wasm: trim the first block to\n * `minv.dataPosition` and the last to `maxv.dataPosition`, and record each\n * block's compressed offset and its uncompressed offset within the result.\n */\nfunction assembleChunkSliceResult(\n blocks: Uint8Array[],\n infos: BgzfBlockInfo[],\n minv: VirtualOffset,\n maxv: VirtualOffset,\n): ChunkSlice {\n const cpositions: number[] = []\n const dpositions: number[] = []\n const slices: Uint8Array[] = []\n let dpos = minv.dataPosition\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]!\n const info = infos[i]!\n const isLast = info.filePosition >= maxv.blockPosition\n\n cpositions.push(info.filePosition)\n dpositions.push(dpos)\n\n const start = i === 0 ? minv.dataPosition : 0\n const end = isLast\n ? Math.min(maxv.dataPosition + 1, block.length)\n : block.length\n if (start < end) {\n slices.push(block.subarray(start, end))\n }\n dpos += block.length - start\n\n if (isLast) {\n cpositions.push(info.filePosition + info.compressedSize)\n dpositions.push(dpos)\n break\n }\n }\n\n return {\n buffer: concatUint8Array(slices),\n // Float64Array to match the wasm path's shape exactly \u2014 a caller must not\n // be able to tell which one produced its result\n cpositions: Float64Array.from(cpositions),\n dpositions: Float64Array.from(dpositions),\n }\n}\n\n/**\n * The smallest chunk, in inflated bytes, that `unzipChunkSlice` hands to a\n * pool. Below it the round trip and the input copy cost more than the\n * parallelism returns: in the chunk-size table in docs/worker-pool.md every BAM\n * fixture turned positive by eight blocks, 0.4-0.5MB out, and at two to four\n * blocks most lost. A reader that only ever asks for smaller chunks never boots\n * a shared pool's workers at all.\n */\nexport const POOL_MIN_DECOMPRESSED_BYTES = 400_000\n\nfunction decompressedBytes(blocks: BgzfBlockInfo[]) {\n let total = 0\n for (const block of blocks) {\n total += block.decompressedSize\n }\n return total\n}\n\nexport async function unzipChunkSlice(\n inputData: Uint8Array,\n chunk: Chunk,\n workerPool?: BgzfWorkerPool,\n): Promise<ChunkSlice> {\n const { minv, maxv } = chunk\n\n if (workerPool) {\n const blocks = scanBgzfBlocks(\n inputData,\n minv.blockPosition,\n maxv.blockPosition,\n )\n if (decompressedBytes(blocks) >= POOL_MIN_DECOMPRESSED_BYTES) {\n const result = await workerPool.decompressBlocks(inputData, blocks)\n return assembleChunkSliceResult(result.blocks, blocks, minv, maxv)\n }\n }\n\n try {\n const result = await decompressChunkSlice(\n inputData,\n minv.blockPosition,\n minv.dataPosition,\n maxv.blockPosition,\n maxv.dataPosition,\n )\n return {\n buffer: result.buffer,\n cpositions: result.cpositions,\n dpositions: result.dpositions,\n }\n } catch (error) {\n throw wrapGzipHeaderError(error)\n }\n}\n", "import { MAX_BGZF_BLOCK_SIZE } from './constants.ts'\nimport GziIndex from './gziIndex.ts'\nimport { unzip } from './unzip.ts'\nimport { concatUint8Array } from './util.ts'\n\nimport type { GenericFilehandle } from 'generic-filehandle2'\n\nconst DEFAULT_BLOCK_CONCURRENCY = 10\n\n// Blocks are adjacent in the file, so every block a read touches can be\n// fetched as one contiguous byte range and handed to a single decompress call.\n// Batches are capped by uncompressed size so an enormous read still streams\n// through in pieces rather than materializing at once in the wasm heap, which\n// only ever grows.\nconst MAX_BATCH_UNCOMPRESSED_SIZE = 32 * 1024 * 1024\n\n// Small fixed-concurrency limiter to replace p-limit (which is pure ESM in\n// v7+ and breaks downstream Jest/CJS consumers). Tasks beyond the limit\n// queue until a slot frees.\nfunction createLimit(concurrency: number) {\n let active = 0\n const queue: (() => void)[] = []\n const next = () => {\n active--\n queue.shift()?.()\n }\n return async <T>(task: () => Promise<T> | T): Promise<T> => {\n if (active >= concurrency) {\n await new Promise<void>(resolve => {\n queue.push(resolve)\n })\n }\n active++\n try {\n return await task()\n } finally {\n next()\n }\n }\n}\n\ninterface Batch {\n compressedStart: number\n compressedEnd: number\n uncompressedStart: number\n}\n\nfunction makeBatches(\n compressed: Float64Array,\n uncompressed: Float64Array,\n nextCompressedPosition: number | undefined,\n) {\n const batches: Batch[] = []\n const numBlocks = compressed.length\n let start = 0\n while (start < numBlocks) {\n let end = start + 1\n while (\n end < numBlocks &&\n uncompressed[end]! - uncompressed[start]! < MAX_BATCH_UNCOMPRESSED_SIZE\n ) {\n end += 1\n }\n // `end` is the first block past this batch, so its compressed offset is\n // where the batch stops. Past the last relevant block that offset comes\n // from the next gzi entry \u2014 and when there is none, from over-reading by\n // one maximum-size block, which keeps this off of stat().\n batches.push({\n compressedStart: compressed[start]!,\n compressedEnd:\n end < numBlocks\n ? compressed[end]!\n : (nextCompressedPosition ??\n compressed[numBlocks - 1]! + MAX_BGZF_BLOCK_SIZE),\n uncompressedStart: uncompressed[start]!,\n })\n start = end\n }\n return batches\n}\n\nfunction sliceBatch(\n uncompressedBuffer: Uint8Array,\n batchStart: number,\n readStart: number,\n readEnd: number,\n) {\n const sourceOffset = Math.max(0, readStart - batchStart)\n const sourceEnd =\n Math.min(readEnd, batchStart + uncompressedBuffer.length) - batchStart\n return sourceOffset < uncompressedBuffer.length\n ? uncompressedBuffer.subarray(sourceOffset, sourceEnd)\n : new Uint8Array(0)\n}\n\nexport default class BgzFilehandle {\n filehandle: GenericFilehandle\n gzi: GziIndex\n limit: ReturnType<typeof createLimit>\n\n constructor({\n filehandle,\n gziFilehandle,\n blockConcurrency = DEFAULT_BLOCK_CONCURRENCY,\n }: {\n filehandle: GenericFilehandle\n gziFilehandle: GenericFilehandle\n blockConcurrency?: number\n }) {\n this.filehandle = filehandle\n this.gzi = new GziIndex({\n filehandle: gziFilehandle,\n })\n this.limit = createLimit(blockConcurrency)\n }\n\n async read(length: number, position: number) {\n const { compressed, uncompressed, nextCompressedPosition } =\n await this.gzi.getRelevantBlocksForRead(length, position)\n if (compressed.length === 0) {\n return new Uint8Array(0)\n }\n const readEnd = position + length\n const batches = makeBatches(\n compressed,\n uncompressed,\n nextCompressedPosition,\n )\n\n const decompressed = await Promise.all(\n batches.map(batch =>\n this.limit(async () => {\n const buffer = await this.filehandle.read(\n batch.compressedEnd - batch.compressedStart,\n batch.compressedStart,\n )\n return sliceBatch(\n await unzip(buffer),\n batch.uncompressedStart,\n position,\n readEnd,\n )\n }),\n ),\n )\n\n // Always copy, even for a single batch: the pieces are subarray views of a\n // whole decompressed batch, so returning one directly would hand back a\n // buffer whose `.buffer` is larger than the requested read.\n return concatUint8Array(decompressed)\n }\n}\n", "import { BgzfFilehandle } from '@gmod/bgzf-filehandle'\nimport { openLocation } from '@jbrowse/core/util/io'\n\n// Pull one transcript's whole multiple-alignment out of a single bgzip file\n// keyed by NAME. Given the `.fa.gz` uri, the bgzip index (`.gzi`) and name index\n// (`.idx`, a TSV `name<TAB>offset<TAB>length` of each block's uncompressed byte\n// offset + length) are found by suffix. We fetch the small `.idx` once, look up\n// the name, and random-read just that block \u2014 already valid FASTA\n// (`>hg38\\nSEQ\\n>panTro4\\nSEQ\\n...`). One genome-scale alignment serves any gene\n// with no per-gene files or coordinates.\nexport async function fetchIndexedMsa({\n location,\n name,\n}: {\n location: { uri: string }\n name: string\n}) {\n const open = (uri: string) =>\n openLocation({ uri, locationType: 'UriLocation' as const })\n\n const idxText = await open(`${location.uri}.idx`).readFile('utf8')\n const entry = lookup(idxText, name)\n if (entry) {\n const fh = new BgzfFilehandle({\n filehandle: open(location.uri),\n gziFilehandle: open(`${location.uri}.gzi`),\n })\n const bytes = await fh.read(entry.length, entry.offset)\n return new TextDecoder().decode(bytes).trim()\n }\n return undefined\n}\n\n// ids are matched versionless, so version drift between the alignment build and\n// the live annotation never breaks the lookup\nconst versionless = (s: string) => s.replace(/\\.\\d+$/, '')\n\nfunction lookup(idxText: string, name: string) {\n const want = versionless(name)\n for (const line of idxText.split('\\n')) {\n const [id, offset, length] = line.split('\\t')\n if (id && versionless(id) === want) {\n return { offset: Number(offset), length: Number(length) }\n }\n }\n return undefined\n}\n", "import { getSession } from '@jbrowse/core/util'\n\nimport {\n hasHoverPosition,\n hasQueryRow,\n querySeqPosToVisibleCol,\n transcriptPosToVisibleCol,\n} from './util'\n\nimport type { JBrowsePluginMsaViewModel } from './model'\n\nexport function genomeToMSA({ model }: { model: JBrowsePluginMsaViewModel }) {\n const { assemblyManager, hovered } = getSession(model)\n const { transcriptToMsaMap, connectedView, mafRegion } = model\n\n if (\n !connectedView?.initialized ||\n !hasHoverPosition(hovered) ||\n !hasQueryRow(model)\n ) {\n return undefined\n }\n\n const { coord, refName } = hovered.hoverPosition\n\n // hoverPosition.coord is a 1-based display coordinate (core's pxToBp adds the\n // +1), while g2p and mafRegion are keyed by 0-based genome position\n const genomePos = coord - 1\n\n // The two sides name the chromosome differently. A hover carries the\n // assembly's canonical name -- `1` on jbrowse.org's hg38 -- while mafRegion\n // and the transcript's g2p map carry the feature's, straight out of the\n // annotation file, which is `chr1` in GENCODE. Compared raw they agree only\n // where a config happens to pair files that agree, and everywhere else\n // hovering a codon lit nothing at all, with no throw and no console line.\n //\n // `initialized` is the gate rather than a try/catch: getCanonicalRefName\n // throws until the assembly's aliases load, and this runs from a hover\n // autorun over an assembly nothing here waited for -- mafRegion names its own\n // on a frozen spec, which need not be one the connected view loaded. Until\n // the aliases arrive the raw name is the whole answer, and the hover lights\n // nothing for those frames rather than throwing out of the autorun.\n const assembly = assemblyManager.get(\n mafRegion?.assemblyName ?? connectedView.assemblyNames[0] ?? '',\n )\n const canonical = (name: string) =>\n (assembly?.initialized ? assembly.getCanonicalRefName(name) : undefined) ??\n name\n const hoveredRefName = canonical(refName)\n\n if (mafRegion) {\n if (\n hoveredRefName !== canonical(mafRegion.refName) ||\n !connectedView.assemblyNames.includes(mafRegion.assemblyName) ||\n genomePos < mafRegion.start ||\n genomePos >= mafRegion.end\n ) {\n return undefined\n }\n return querySeqPosToVisibleCol(model, genomePos - mafRegion.start)\n }\n\n // session.hovered is global -- set by whichever LinearGenomeView the cursor\n // was last over, on any assembly -- so the refName gate is load bearing:\n // without it the same numeric coordinate on an unrelated chromosome matches a\n // g2p key and lights up a column for a different locus\n if (\n transcriptToMsaMap &&\n hoveredRefName === canonical(transcriptToMsaMap.refName)\n ) {\n const proteinPos = transcriptToMsaMap.g2p[genomePos]\n if (proteinPos !== undefined) {\n return transcriptPosToVisibleCol(model, proteinPos)\n }\n }\n\n return undefined\n}\n", "import { bestEffort, createDbOpener } from './idb'\n\nimport type { DomainMatch } from './ncbiDomains'\nimport type { DBSchema } from 'idb'\n\nconst DB_NAME = 'jbrowse-msaview-domain-cache'\nconst STORE_NAME = 'domains'\nconst DB_VERSION = 1\n\ninterface CachedDomain {\n accession: string\n matches: DomainMatch[]\n}\n\ninterface DomainCacheDB extends DBSchema {\n [STORE_NAME]: {\n key: string\n value: CachedDomain\n }\n}\n\nconst getDB = createDbOpener<DomainCacheDB>(DB_NAME, DB_VERSION, db => {\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME, { keyPath: 'accession' })\n }\n})\n\nexport function getCachedDomains(accessions: string[]) {\n return bestEffort(\n 'domain cache read',\n async () => {\n const db = await getDB()\n const tx = db.transaction(STORE_NAME, 'readonly')\n const results = await Promise.all(\n accessions.map(accession => tx.store.get(accession)),\n )\n await tx.done\n return results\n },\n [],\n )\n}\n\nexport function saveDomains(entries: CachedDomain[]) {\n return bestEffort(\n 'domain cache write',\n async () => {\n const db = await getDB()\n const tx = db.transaction(STORE_NAME, 'readwrite')\n for (const entry of entries) {\n await tx.store.put(entry)\n }\n await tx.done\n },\n undefined,\n )\n}\n", "import { getCachedDomains, saveDomains } from './domainCache'\nimport { decodeXmlEntities, efetchUrl, eutilsText } from './eutils'\nimport { isAbortError } from './fetch'\n\nimport type { InterProScanResults } from 'react-msaview'\n\nexport type DomainMatch = InterProScanResults['matches'][number]\n\nfunction field(xml: string, tag: string) {\n const text = new RegExp(`<${tag}>(.*?)</${tag}>`, 's').exec(xml)?.[1]\n return text === undefined ? undefined : decodeXmlEntities(text)\n}\n\nfunction parseQualifiers(featureXml: string) {\n const quals: Record<string, string> = {}\n const re = /<GBQualifier>([\\s\\S]*?)<\\/GBQualifier>/g\n let m\n while ((m = re.exec(featureXml)) !== null) {\n const name = field(m[1]!, 'GBQualifier_name')\n const value = field(m[1]!, 'GBQualifier_value')\n // keep the first occurrence: NCBI lists the canonical value first\n if (name && value !== undefined && quals[name] === undefined) {\n quals[name] = value\n }\n }\n return quals\n}\n\n// A feature can span several intervals: domains are usually one contiguous\n// range, but CDD Sites (e.g. an active site) are a set of scattered residues\n// expressed as multiple GBInterval ranges and single GBInterval_point residues.\n// We collapse those to a single bounding span so a site renders as one box\n// rather than a spray of 1px specks.\nfunction parseBoundingSpan(featureXml: string) {\n const starts: number[] = []\n const ends: number[] = []\n const re = /<GBInterval>([\\s\\S]*?)<\\/GBInterval>/g\n let m\n while ((m = re.exec(featureXml)) !== null) {\n const block = m[1]!\n const from = field(block, 'GBInterval_from')\n const to = field(block, 'GBInterval_to')\n const point = field(block, 'GBInterval_point')\n if (from && to) {\n starts.push(Number(from))\n ends.push(Number(to))\n } else if (point) {\n starts.push(Number(point))\n ends.push(Number(point))\n }\n }\n return starts.length > 0\n ? { start: Math.min(...starts), end: Math.max(...ends) }\n : undefined\n}\n\n// Drop single-residue specks (acetylation/phospho points) but keep every\n// genuine domain and functional site; react-msaview draws longest-first, so\n// smaller features (binding sites, loops) layer on top of the domain they sit\n// inside.\nconst MIN_FEATURE_LENGTH = 2\n\nfunction parseFeature(featureXml: string): DomainMatch | undefined {\n const key = field(featureXml, 'GBFeature_key')\n const quals = parseQualifiers(featureXml)\n const xref = quals.db_xref\n const span = parseBoundingSpan(featureXml)\n // only CDD-backed Regions/Sites are conserved-domain annotations; Regions and\n // Sites without a CDD xref are UniProt-propagated point motifs we don't want\n if (\n (key === 'Region' || key === 'Site') &&\n xref?.startsWith('CDD:') &&\n span &&\n span.end - span.start + 1 >= MIN_FEATURE_LENGTH\n ) {\n const cddId = xref.replace('CDD:', '')\n const isDomain = key === 'Region'\n // a site's note (e.g. \"ATP binding site [chemical binding]\") is more\n // specific than its generic site_type (\"other\"), so prefer it for the name\n // \u2014 that gives each functional site its own color/legend/filter entry\n const noteName = quals.note?.split(/[[(]/)[0]?.trim()\n const name = isDomain\n ? (quals.region_name ?? cddId)\n : noteName || quals.site_type || 'site'\n const accession = isDomain ? cddId : `${cddId}:${name}`\n return {\n signature: {\n entry: { name, description: quals.note ?? name, accession },\n },\n locations: [span],\n }\n }\n return undefined\n}\n\n/**\n * Parse a GenPept (efetch db=protein&rettype=gp&retmode=xml) document into CDD\n * domain and site annotations, keyed by both the versioned and primary\n * accession so callers can look up by whichever NCBI returned.\n */\nexport function parseCddDomains(xml: string): Map<string, DomainMatch[]> {\n const byAccession = new Map<string, DomainMatch[]>()\n const seqRe = /<GBSeq>([\\s\\S]*?)<\\/GBSeq>/g\n let seqMatch\n while ((seqMatch = seqRe.exec(xml)) !== null) {\n const seqXml = seqMatch[1]!\n const matches: DomainMatch[] = []\n\n const featRe = /<GBFeature>([\\s\\S]*?)<\\/GBFeature>/g\n let featMatch\n while ((featMatch = featRe.exec(seqXml)) !== null) {\n const match = parseFeature(featMatch[1]!)\n if (match) {\n matches.push(match)\n }\n }\n\n for (const acc of [\n field(seqXml, 'GBSeq_accession-version'),\n field(seqXml, 'GBSeq_primary-accession'),\n ]) {\n if (acc) {\n byAccession.set(acc, matches)\n }\n }\n }\n return byAccession\n}\n\n/**\n * Fetch pre-computed CDD domain and site annotations for NCBI protein\n * accessions. These come baked into the GenPept records, so a single batched\n * efetch returns them with no job submission or polling. Results are cached in\n * IndexedDB so reopening a view doesn't refetch.\n */\nexport async function fetchProteinDomains(\n accessions: string[],\n signal?: AbortSignal,\n): Promise<Map<string, DomainMatch[]>> {\n const unique = [...new Set(accessions)].filter(Boolean)\n const byAccession = new Map<string, DomainMatch[]>()\n\n const cached = await getCachedDomains(unique)\n const uncached: string[] = []\n unique.forEach((acc, i) => {\n const hit = cached[i]\n if (hit) {\n byAccession.set(acc, hit.matches)\n } else {\n uncached.push(acc)\n }\n })\n\n const toCache: { accession: string; matches: DomainMatch[] }[] = []\n const batchSize = 100\n for (let i = 0; i < uncached.length; i += batchSize) {\n const batch = uncached.slice(i, i + batchSize)\n let xml: string\n try {\n xml = await eutilsText(\n efetchUrl({\n db: 'protein',\n id: batch.join(','),\n rettype: 'gp',\n retmode: 'xml',\n }),\n { signal },\n )\n } catch (e) {\n if (isAbortError(e)) {\n throw e\n }\n // the batches already answered are worth keeping and caching\n console.warn('[msaview-domains] efetch failed, keeping what loaded:', e)\n break\n }\n const parsed = parseCddDomains(xml)\n for (const acc of batch) {\n // only cache accessions actually present in the response: a genuinely\n // domain-less protein comes back as an empty array (cache it), but an\n // accession the batch omitted comes back undefined \u2014 caching [] for it\n // would permanently hide its domains on later loads (the domain cache\n // never expires), so leave it uncached to be retried\n const matches = parsed.get(acc)\n if (matches !== undefined) {\n byAccession.set(acc, matches)\n toCache.push({ accession: acc, matches })\n }\n }\n }\n if (toCache.length > 0) {\n await saveDomains(toCache)\n }\n return byAccession\n}\n", "import { fetchProteinDomains } from '../utils/ncbiDomains'\n\nimport type { Annotation } from 'react-msaview'\n\n// structural subset of the MSA model: the full model type can't be used here\n// because it references this very action, creating a self-referential cycle\ninterface DomainModel {\n rowData: Record<string, Record<string, string> | undefined>\n setAnnotations: (annotations: Annotation[]) => void\n}\n\n/**\n * Overlay protein domains on the alignment using NCBI's pre-computed CDD\n * annotations. Each launch stores a row's accession in its row data, so those\n * are looked up via efetch and keyed by MSA row name, which is what\n * react-msaview matches annotations against.\n */\nexport async function loadProteinDomains(\n self: DomainModel,\n signal?: AbortSignal,\n) {\n const rowAccessions = Object.entries(self.rowData).flatMap(\n ([rowName, row]) =>\n row?.Accession ? [{ rowName, accession: row.Accession }] : [],\n )\n if (rowAccessions.length === 0) {\n throw new Error('No NCBI accessions found in alignment rows')\n }\n\n const byAccession = await fetchProteinDomains(\n rowAccessions.map(r => r.accession),\n signal,\n )\n\n const annotations = rowAccessions.flatMap(({ rowName, accession }) =>\n (byAccession.get(accession) ?? []).flatMap(({ signature, locations }) =>\n signature.entry\n ? locations.map(({ start, end }) => ({\n id: rowName,\n accession: signature.entry!.accession,\n name: signature.entry!.name,\n description: signature.entry!.description,\n start,\n end,\n }))\n : [],\n ),\n )\n\n if (annotations.length === 0) {\n throw new Error('No CDD domain annotations found for these proteins')\n }\n\n self.setAnnotations(annotations)\n}\n", "import { createDbOpener } from '../utils/idb'\n\nimport type { DBSchema } from 'idb'\n\nconst DB_NAME = 'jbrowse-msaview-data'\nconst DB_VERSION = 1\nconst STORE_NAME = 'msa-data'\n\n/** the documents a view keeps in IndexedDB rather than in its session snapshot */\nexport interface MsaDataPayload {\n msa?: string\n tree?: string\n treeMetadata?: string\n gff?: string\n}\n\ninterface StoredMsaData extends MsaDataPayload {\n id: string\n timestamp: number\n}\n\ninterface MsaDataDB extends DBSchema {\n [STORE_NAME]: {\n key: string\n value: StoredMsaData\n indexes: { timestamp: number }\n }\n}\n\nconst getDB = createDbOpener<MsaDataDB>(DB_NAME, DB_VERSION, db => {\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n const store = db.createObjectStore(STORE_NAME, { keyPath: 'id' })\n store.createIndex('timestamp', 'timestamp', { unique: false })\n }\n})\n\nexport function generateDataStoreId() {\n return `msa-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`\n}\n\nexport async function storeMsaData(id: string, data: MsaDataPayload) {\n try {\n const db = await getDB()\n const storedData: StoredMsaData = { ...data, id, timestamp: Date.now() }\n await db.put(STORE_NAME, storedData)\n return true\n } catch (e) {\n console.warn('Failed to store MSA data:', e)\n return false\n }\n}\n\n/** undefined only when no row has the id; a failed read throws */\nexport async function retrieveMsaData(id: string) {\n const db = await getDB()\n const result = await db.get(STORE_NAME, id)\n if (!result) {\n return undefined\n }\n // reading counts as use, which is what makes cleanupOldData's policy\n // \"unused for 7 days\" rather than \"written 7 days ago\" -- a session opened\n // every day used to lose its alignment on the eighth\n try {\n await db.put(STORE_NAME, { ...result, timestamp: Date.now() })\n } catch (e) {\n console.warn('Failed to refresh MSA data timestamp:', e)\n }\n const { id: _id, timestamp: _timestamp, ...payload } = result\n return payload\n}\n\nexport async function cleanupOldData(maxAgeMs = 7 * 24 * 60 * 60 * 1000) {\n try {\n const db = await getDB()\n const cutoffTime = Date.now() - maxAgeMs\n const tx = db.transaction(STORE_NAME, 'readwrite')\n const index = tx.store.index('timestamp')\n let cursor = await index.openCursor(IDBKeyRange.upperBound(cutoffTime))\n let deletedCount = 0\n while (cursor) {\n await cursor.delete()\n deletedCount++\n cursor = await cursor.continue()\n }\n return deletedCount\n } catch (e) {\n console.warn('Failed to cleanup old MSA data:', e)\n return 0\n }\n}\n", "import { getSession } from '@jbrowse/core/util'\nimport { untracked } from 'mobx'\n\nimport { isAbortError } from '../utils/fetch'\n\nimport type { JBrowsePluginMsaViewModel } from './model'\n\n/**\n * The in-browser aligner and a search hand back rows and no tree;\n * react-msaview's neighbour joining over the finished alignment is what EBI's\n * simple_phylogeny would have computed, without the job.\n *\n * It runs after the alignment is applied, and its refusals are reported rather\n * than thrown: the library caps neighbour joining by row count and throws above\n * it, and inside the success path that throw discarded an alignment that had\n * just cost fifteen minutes of EBI queue behind \"Running EBI BLAST failed\".\n * A search asking for 1000 hits clears that cap on its own.\n */\nfunction buildTree(self: JBrowsePluginMsaViewModel) {\n if (self.rows.length < 2) {\n return\n }\n try {\n self.calculateNeighborJoiningTreeFromMSA()\n } catch (e) {\n console.error(e)\n // a notice, not the view's error: the alignment is fine and on screen\n try {\n getSession(self).notify(\n `The alignment loaded, but no tree was built. ${e instanceof Error ? e.message : String(e)}`,\n 'warning',\n )\n } catch (e2) {\n console.error(e2)\n }\n }\n}\n\n/**\n * What a launch is allowed to do to the model and to the network while it runs.\n *\n * Every write a launch makes goes through `act`, so \"nothing touches the model\n * once the launch has been abandoned\" is one rule in one place. Spreading that\n * guard across the call sites only takes one omission to undo: an abandoned\n * launch keeps running until its next network hop rejects, and an action on a\n * destroyed mobx-state-tree node throws where nothing is catching.\n */\nexport interface LaunchScope {\n /** aborts when the user cancels, and when the view is destroyed */\n signal: AbortSignal\n act: (fn: () => void) => void\n onProgress: (arg: string) => void\n /** the EBI job id, published before the first poll so the view can link out */\n onRid: (arg: string) => void\n}\n\nexport interface LaunchedData {\n msa: string\n /** empty when the aligner built no tree, and one is then built in the browser */\n tree: string\n treeMetadata: string\n /** what the launch left out, shown over the alignment it still built */\n warnings?: string[]\n}\n\n/**\n * Run one launch attempt, owning the AbortController that ties it to the view.\n *\n * The controller lives on the model because two things end a launch and neither\n * is here: the Cancel button, and the disposer `afterCreate` registers. A launch\n * already holding it is aborted first, so a re-fired autorun replaces the\n * attempt rather than orphaning one that nothing can cancel.\n *\n * Runs untracked: it is called from the launch autoruns, and whatever the\n * launch body reads before its first await would otherwise become a reason to\n * launch again.\n */\nexport function runLaunch(args: {\n self: JBrowsePluginMsaViewModel\n message: string\n launch: (scope: LaunchScope) => Promise<LaunchedData>\n onLaunched: () => void\n}) {\n untracked(() => {\n startLaunch(args)\n })\n}\n\nfunction startLaunch({\n self,\n message,\n launch,\n onLaunched,\n}: Parameters<typeof runLaunch>[0]) {\n self.launchController?.abort()\n const controller = new AbortController()\n const { signal } = controller\n self.setLaunchController(controller)\n\n const act = (fn: () => void) => {\n if (!signal.aborted) {\n fn()\n }\n }\n const scope: LaunchScope = {\n signal,\n act,\n onProgress: arg => {\n act(() => {\n self.setProgress(arg)\n })\n },\n onRid: arg => {\n act(() => {\n self.setRid(arg)\n })\n },\n }\n\n void (async () => {\n try {\n act(() => {\n self.setProgress(message)\n self.setError(undefined)\n })\n const { warnings = [], ...data } = await launch(scope)\n act(() => {\n self.setData(data)\n for (const warning of warnings) {\n self.addWarning(warning)\n }\n onLaunched()\n })\n if (!data.tree) {\n act(() => {\n buildTree(self)\n })\n }\n } catch (e) {\n // a cancel is not a failure: drawing the error panel for one would tell\n // the user their launch broke when they are the one who stopped it\n if (!isAbortError(e)) {\n act(() => {\n self.setError(e)\n })\n console.error(e)\n }\n } finally {\n act(() => {\n self.setProgress('')\n // only if a later launch has not already claimed the slot\n if (self.launchController === controller) {\n self.setLaunchController(undefined)\n }\n })\n }\n })()\n}\n", "// Structurally typed against jbrowse-plugin-protein3d rather than imported from\n// it: the two plugins ship independently, so a field the installed protein3d\n// lacks reads as undefined instead of failing to resolve. Both highlight\n// channels have been on its structure model since v0.4.0.\nexport interface ProteinViewStructure {\n url?: string\n connectedViewId?: string\n uniprotId?: string\n structureSequences?: string[]\n /** the residue under the pointer, transient */\n hoverGenomeHighlights?: { start: number; end: number }[]\n /** the clicked domain, persistent; also what `initialSelection` lights */\n clickGenomeHighlights?: { start: number; end: number }[]\n}\n\nexport interface ProteinView {\n type: 'ProteinView'\n id: string\n displayName?: string\n structures: ProteinViewStructure[]\n}\n\nexport function isProteinView(view: unknown): view is ProteinView {\n const v = view as Record<string, unknown>\n return v.type === 'ProteinView' && Array.isArray(v.structures)\n}\n\n/**\n * Extract all ProteinView instances from a session's views array.\n */\nexport function getProteinViews(views: { type: string }[]): ProteinView[] {\n return (views as unknown[]).filter(isProteinView)\n}\n", "export interface Feat {\n refName: string\n start: number\n end: number\n id?: string\n name?: string\n type?: string\n strand?: number\n phase?: number\n subfeatures?: Feat[]\n}\n\nexport function genomeToTranscriptSeqMapping(feature: Feat) {\n const strand = feature.strand\n const refName = feature.refName\n\n if (strand !== -1 && strand !== 1) {\n throw new Error(`Invalid strand value: ${strand}. Expected 1 or -1.`)\n }\n if (!refName) {\n throw new Error('refName is required')\n }\n\n // GFF3 files can repeat CDS rows; dedupe on start/end, keeping the first.\n const uniqueCds = new Map<string, Feat>()\n for (const f of feature.subfeatures ?? []) {\n if (f.type === 'CDS' && f.start < f.end) {\n const key = `${f.start}-${f.end}`\n if (!uniqueCds.has(key)) {\n uniqueCds.set(key, f)\n }\n }\n }\n const cds = [...uniqueCds.values()].sort(\n (a, b) => strand * (a.start - b.start),\n )\n\n const g2p: Record<number, number> = {}\n const p2g: Record<number, number> = {}\n const p2gCodon: Record<number, number[]> = {}\n\n if (cds.length !== 0) {\n // Phase: number of bases at the start of the first CDS that complete a\n // codon begun outside this transcript. Per-segment phase is assumed\n // consistent with running the counter through all bases.\n const firstPhase = cds[0]?.phase ?? 0\n let proteinCounter = (3 - firstPhase) % 3\n let lastProteinPos = -1\n\n for (const f of cds) {\n const length = f.end - f.start\n for (let i = 0; i < length; i++) {\n const genomePos = strand === 1 ? f.start + i : f.end - 1 - i\n const proteinPos = Math.floor(proteinCounter++ / 3)\n g2p[genomePos] = proteinPos\n if (proteinPos !== lastProteinPos) {\n p2g[proteinPos] = genomePos\n p2gCodon[proteinPos] = [genomePos]\n lastProteinPos = proteinPos\n } else {\n p2gCodon[proteinPos]!.push(genomePos)\n }\n }\n }\n }\n\n return { g2p, p2g, p2gCodon, refName, strand }\n}\n\n/**\n * Genomic range [start, end) covering the codon at `proteinPos`.\n * On the reverse strand p2g stores the highest coordinate of the codon, so\n * the range extends from genomePos-2 to genomePos+1.\n *\n * Caveat: assumes the codon's three bases are contiguous in genome\n * coordinates. Codons that span an exon boundary, or split codons at the\n * start of a CDS (phase != 0), will produce a range that includes intronic\n * or out-of-CDS positions. Use `getCodonRanges` with `p2gCodon` to handle\n * those cases correctly.\n */\nexport function getCodonRange(\n p2g: Record<number, number>,\n proteinPos: number,\n strand: number,\n) {\n const genomePos = p2g[proteinPos]\n if (genomePos !== undefined) {\n if (strand === 1) {\n return [genomePos, genomePos + 3] as const\n } else {\n return [genomePos - 2, genomePos + 1] as const\n }\n }\n return undefined\n}\n\n/**\n * One or more genomic [start, end) ranges covering the codon at `proteinPos`,\n * derived from the full set of genomic positions in `p2gCodon`. Returns\n * multiple ranges when the codon spans an exon boundary. Ranges are sorted\n * ascending and use 0-based half-open coordinates regardless of strand.\n * Returns undefined if `proteinPos` is unknown.\n */\nexport function getCodonRanges(\n p2gCodon: Record<number, number[]>,\n proteinPos: number,\n) {\n const positions = p2gCodon[proteinPos]\n if (positions === undefined) {\n return undefined\n }\n const sorted = [...positions].sort((a, b) => a - b)\n const ranges: [number, number][] = []\n for (const pos of sorted) {\n const last = ranges.at(-1)\n if (last?.[1] === pos) {\n last[1] = pos + 1\n } else {\n ranges.push([pos, pos + 1])\n }\n }\n return ranges\n}\n", "import { genomeToTranscriptSeqMapping } from 'g2p_mapper'\n\nimport type { Feat } from 'g2p_mapper'\n\nexport const MAX_CODING_BASES = 1_000_000\n\nexport type TranscriptMap = ReturnType<typeof genomeToTranscriptSeqMapping> & {\n codingPositions: number[]\n}\n\nfunction isRecord(val: unknown): val is Record<string, unknown> {\n return typeof val === 'object' && val !== null\n}\n\ninterface CdsRow {\n start: number\n end: number\n phase?: unknown\n}\n\nfunction isCoordinate(val: unknown): val is number {\n return Number.isSafeInteger(val)\n}\n\nfunction isCds(val: unknown): val is CdsRow {\n return (\n isRecord(val) &&\n typeof val.type === 'string' &&\n val.type.toLowerCase() === 'cds' &&\n isCoordinate(val.start) &&\n isCoordinate(val.end) &&\n val.start < val.end\n )\n}\n\nfunction phaseOf(val: unknown) {\n const phase = Number(val)\n return phase === 1 || phase === 2 ? phase : 0\n}\n\n// The rows core's translateTranscript reads, so the query row and the codons\n// count alike: the CDS children, or a standalone CDS (a polyprotein's) as its\n// own one segment.\nfunction cdsRows(feature: Record<string, unknown>): CdsRow[] {\n const { subfeatures } = feature\n const children = (Array.isArray(subfeatures) ? subfeatures : []).filter(isCds)\n if (children.length > 0) {\n return children\n }\n return isCds(feature) ? [feature] : []\n}\n\nfunction mappableTranscript(\n feature: unknown,\n): { transcript: Feat } | { reason: string } {\n if (!isRecord(feature)) {\n return { reason: 'it is not a feature' }\n }\n const { refName, strand } = feature\n if (typeof refName !== 'string' || !refName) {\n return { reason: 'it has no refName' }\n }\n if (strand !== 1 && strand !== -1) {\n return { reason: `its strand is ${JSON.stringify(strand)}, not 1 or -1` }\n }\n const cds = cdsRows(feature).map(f => ({\n refName,\n type: 'CDS',\n start: f.start,\n end: f.end,\n phase: phaseOf(f.phase),\n }))\n if (cds.length === 0) {\n return { reason: 'it has no CDS with numeric start < end' }\n }\n const coding = cds.reduce((sum, f) => sum + f.end - f.start, 0)\n if (coding > MAX_CODING_BASES) {\n return {\n reason: `its CDS covers ${coding} bases, more than any real transcript`,\n }\n }\n return {\n transcript: {\n refName,\n strand,\n start: Math.min(...cds.map(f => f.start)),\n end: Math.max(...cds.map(f => f.end)),\n subfeatures: cds,\n },\n }\n}\n\nconst warned = new WeakSet<object>()\n\nexport function transcriptMap(feature: unknown): TranscriptMap | undefined {\n const checked = mappableTranscript(feature)\n if ('reason' in checked) {\n if (isRecord(feature) && !warned.has(feature)) {\n warned.add(feature)\n console.warn(\n `[msaview] the linked transcript is not mapped to the genome: ${checked.reason}`,\n )\n }\n return undefined\n }\n const mapping = genomeToTranscriptSeqMapping(checked.transcript)\n return {\n ...mapping,\n codingPositions: Object.keys(mapping.g2p)\n .map(Number)\n .sort((a, b) => a - b),\n }\n}\n\nfunction lowerBound(sorted: number[], value: number) {\n let lo = 0\n let hi = sorted.length\n while (lo < hi) {\n const mid = (lo + hi) >>> 1\n if (sorted[mid]! < value) {\n lo = mid + 1\n } else {\n hi = mid\n }\n }\n return lo\n}\n\nexport function proteinPositionsInRange(\n map: Pick<TranscriptMap, 'g2p' | 'codingPositions'>,\n start: number,\n end: number,\n) {\n const positions = new Set<number>()\n const { codingPositions, g2p } = map\n for (\n let i = lowerBound(codingPositions, start);\n i < codingPositions.length && codingPositions[i]! < end;\n i++\n ) {\n positions.add(g2p[codingPositions[i]!]!)\n }\n return positions\n}\n", "import { getCodonRanges } from 'g2p_mapper'\n\nimport type { MafRegion } from './types'\n\ninterface GenomeRegion {\n refName: string\n start: number\n end: number\n}\n\ninterface CoordModel {\n querySeqName: string\n transcriptToMsaMap:\n | {\n refName: string\n p2gCodon: Record<number, number[]>\n }\n | undefined\n mafRegion?: MafRegion\n /** transcript residues before the query row's first residue */\n querySeqOffset?: number\n /**\n * react-msaview's converter, which is the only thing that knows which columns\n * are on screen. `rows` carries the whole gapped alignment, so counting\n * residues along one of them answers for a column index the user cannot\n * produce once `hideGaps` drops columns -- and it drops them as soon as a\n * clade collapses or allowedGappyness falls below 100.\n */\n visibleColToSeqPos: (\n rowName: string,\n visibleCol: number,\n ) => number | undefined\n}\n\n/**\n * The genome regions covered by MSA column `coord` of the query row, in 0-based\n * half-open coordinates (what bpToPx and navTo take).\n *\n * `coord` is a VISIBLE column -- what mouseCol and mouseClickCol carry.\n *\n * Usually one region -- one codon, or one base in a MAF alignment -- but a\n * codon split across an exon boundary yields one region per contiguous piece,\n * which is why this returns a list.\n */\nexport function msaCoordToGenomeRegions({\n model,\n coord: mouseCol,\n}: {\n model: CoordModel\n coord: number\n}): GenomeRegion[] {\n const { querySeqName, transcriptToMsaMap, mafRegion } = model\n\n const ungappedPos = model.visibleColToSeqPos(querySeqName, mouseCol)\n if (ungappedPos === undefined) {\n return []\n }\n\n if (mafRegion) {\n const genomePos = mafRegion.start + ungappedPos\n return genomePos < mafRegion.end\n ? [{ refName: mafRegion.refName, start: genomePos, end: genomePos + 1 }]\n : []\n }\n\n if (transcriptToMsaMap) {\n const { refName, p2gCodon } = transcriptToMsaMap\n // the row is often only the aligned region of the transcript's protein, so\n // its residues are the transcript's shifted by querySeqOffset\n const proteinPos = ungappedPos + (model.querySeqOffset ?? 0)\n // p2gCodon holds every genomic base of the codon, so the range is exact on\n // either strand. Deriving it from consecutive p2g entries instead\n // (p2g[pos]..p2g[pos+1]) was off by one base on the reverse strand -- where\n // p2g stores the codon's *highest* coordinate -- dropped the final residue,\n // whose successor has no p2g entry, and spanned the whole intron for a\n // codon split across an exon boundary.\n return (\n getCodonRanges(p2gCodon, proteinPos)?.map(([start, end]) => ({\n refName,\n start,\n end,\n })) ?? []\n )\n }\n\n return []\n}\n\n/**\n * A single region spanning the codon at MSA column `coord`, for navigation. For\n * a codon split across an exon boundary this spans the intervening intron.\n */\nexport function msaCoordToGenomeCoord(args: {\n model: CoordModel\n coord: number\n}): GenomeRegion | undefined {\n const regions = msaCoordToGenomeRegions(args)\n const first = regions[0]\n const last = regions.at(-1)\n // getCodonRanges returns ranges sorted ascending, so first.start..last.end\n // bounds the codon\n return first && last\n ? { refName: first.refName, start: first.start, end: last.end }\n : undefined\n}\n", "import { getConf } from '@jbrowse/core/configuration'\nimport { getSession } from '@jbrowse/core/util'\nimport { translateTranscript } from '@jbrowse/core/util/translateTranscript'\nimport { isAlive } from '@jbrowse/mobx-state-tree'\nimport { transaction, untracked } from 'mobx'\n\nimport { fetchSeq } from '../LaunchMsaView/components/fetchSeq'\nimport { getTranscriptFeatures } from '../LaunchMsaView/util'\n\nimport type {\n BlastParams,\n JBrowsePluginMsaViewModel,\n OrthologParams,\n} from './model'\nimport type { Feature } from '@jbrowse/core/util'\n\n// The short form of a connected launch. A spec that says\n//\n// {\"type\":\"MsaView\",\"connectedViewId\":\"lgv1\",\"connectedTranscript\":\"NM_000546.6\", ...}\n//\n// gets its `connectedFeature` -- the exon model every genome<->column mapping\n// runs through -- looked up here, from the gene tracks the connected genome\n// view has open, and its query row translated from that transcript.\n//\n// jbrowse-plugin-protein3d does the same for its `transcriptId` shorthand,\n// against a `connectedView` spec of its own; here the genome view already\n// exists (the spec pinned its id), so its tracks and regions are read off the\n// live model instead.\n\ninterface Region {\n assemblyName: string\n refName: string\n start: number\n end: number\n}\n\ninterface GenomeView {\n tracks: { type: string }[]\n displayedRegions: Region[]\n dynamicBlocks?: { contentBlocks?: Region[] }\n}\n\nfunction stripVersion(id: string) {\n return id.replace(/\\.\\d+$/, '')\n}\n\nfunction transcriptMatches(transcript: Feature, id: string) {\n const target = stripVersion(id)\n return [\n transcript.get('name'),\n transcript.get('id'),\n transcript.get('transcript_id'),\n transcript.id(),\n ].some(c => typeof c === 'string' && (c === id || stripVersion(c) === target))\n}\n\nfunction plainRegions(regions: Region[]) {\n return regions.map(r => ({\n assemblyName: r.assemblyName,\n refName: r.refName,\n start: Math.floor(r.start),\n end: Math.ceil(r.end),\n }))\n}\n\n/**\n * The part of the genome on screen, then everything the view can scroll to.\n * `displayedRegions` is usually whole chromosomes -- navigating to a locus\n * displays its parent region -- so it is the fallback, not the first ask.\n */\nexport function searchWindows(view: GenomeView) {\n const visible = plainRegions(view.dynamicBlocks?.contentBlocks ?? [])\n const displayed = plainRegions(view.displayedRegions)\n return visible.length > 0 ? [visible, displayed] : [displayed]\n}\n\n/**\n * Gene models live on feature tracks. Asking an alignments, variant or\n * quantitative track for a chromosome's worth of features to look for a\n * transcript among them is the slowest possible way to find nothing.\n */\nexport function transcriptTracks<T extends { type: string }>(tracks: T[]) {\n return tracks.filter(t => t.type === 'FeatureTrack')\n}\n\nasync function findTranscript(\n self: JBrowsePluginMsaViewModel,\n transcriptId: string,\n) {\n const view = self.connectedView!\n const session = getSession(self)\n const sessionId = 'msaview-connectedTranscript'\n const tracks = transcriptTracks(view.tracks)\n for (const regions of searchWindows(view)) {\n for (const track of tracks) {\n const feats = await session.rpcManager.call(\n sessionId,\n 'CoreGetFeatures',\n { adapterConfig: getConf(track, 'adapter'), regions },\n )\n for (const feat of feats) {\n const hit = getTranscriptFeatures(feat).find(t =>\n transcriptMatches(t, transcriptId),\n )\n if (hit) {\n return hit\n }\n }\n }\n }\n return undefined\n}\n\nasync function translate(self: JBrowsePluginMsaViewModel, transcript: Feature) {\n const sequence = await fetchSeq({\n start: transcript.get('start'),\n end: transcript.get('end'),\n refName: transcript.get('refName'),\n assemblyName: self.connectedView!.assemblyNames[0]!,\n session: getSession(self),\n })\n return translateTranscript({ transcript, ...sequence })?.protein\n}\n\n/** the latest lookup per view; an older one finishing late writes nothing */\nconst latestLookup = new WeakMap<object, number>()\n\nasync function lookUp({\n self,\n transcriptId,\n blastParams,\n orthologParams,\n isCurrent,\n}: {\n self: JBrowsePluginMsaViewModel\n transcriptId: string\n blastParams: BlastParams | undefined\n orthologParams: OrthologParams | undefined\n isCurrent: () => boolean\n}) {\n const trackCount = transcriptTracks(self.connectedView!.tracks).length\n try {\n self.setProgress(`Looking up ${transcriptId} in the genome view...`)\n const transcript = await findTranscript(self, transcriptId)\n if (!transcript) {\n throw new Error(\n `Transcript \"${transcriptId}\" was not found in the ${trackCount} feature track(s) open in the connected genome view. Open the gene track that carries it, and make sure the view is on its locus.`,\n )\n }\n const proteinSequence = await translate(self, transcript)\n if (!proteinSequence) {\n throw new Error(`Transcript \"${transcriptId}\" has no CDS to translate`)\n }\n if (!isCurrent()) {\n return\n }\n // toJSON, not the Feature: the params are frozen snapshot properties, so\n // an instance in one is gone the moment the session reloads\n const transcriptJson = transcript.toJSON()\n // one transaction, so the launchers wake once, on a request that already\n // carries its query\n transaction(() => {\n self.setProgress('')\n if (blastParams && !blastParams.proteinSequence) {\n self.setBlastParams({\n ...blastParams,\n selectedTranscript: transcriptJson,\n proteinSequence,\n })\n }\n if (orthologParams && !orthologParams.proteinSequence) {\n self.setOrthologParams({\n ...orthologParams,\n selectedTranscript: transcriptJson,\n proteinSequence,\n })\n }\n self.setConnectedFeature(transcriptJson)\n })\n } catch (e) {\n console.error(e)\n if (isCurrent()) {\n self.setProgress('')\n self.setError(e)\n }\n }\n}\n\n/**\n * Resolve `connectedTranscript` into `connectedFeature` once the connected\n * genome view has its assembly and tracks, then hand the translation to\n * whichever launch is waiting for a query.\n *\n * The autorun re-fires on the view's readiness (a track opened after a miss)\n * and on the request itself, which is what `retryLaunch` re-states. The lookup\n * runs untracked, so scrolling the genome view is not a reason to look again.\n */\nexport function resolveConnectedTranscriptIfNeeded(\n self: JBrowsePluginMsaViewModel,\n) {\n const {\n connectedTranscript,\n connectedFeature,\n connectedView,\n blastParams,\n orthologParams,\n } = self\n if (\n !connectedTranscript ||\n connectedFeature ||\n !connectedView?.initialized ||\n connectedView.tracks.length === 0\n ) {\n return\n }\n const lookup = (latestLookup.get(self) ?? 0) + 1\n latestLookup.set(self, lookup)\n untracked(() => {\n void lookUp({\n self,\n transcriptId: connectedTranscript,\n blastParams,\n orthologParams,\n isCurrent: () => isAlive(self) && latestLookup.get(self) === lookup,\n })\n })\n}\n"],
|
|
5
|
-
"mappings": "g5BAAA,IAAAA,GAA8B,QAC9BC,GAA2B,QAC3BC,EAAgD,QAChDC,GAAwB,QCHxB,IAAAC,GAA2B,QAC3BC,GAAqC,QACrCC,GAA4B,QCkB5B,IAAMC,GAAgB,2BAEhBC,GAAgB,CACpB,CAAE,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAI,EAAE,GAAG,GAAI,EAAE,EAAE,EACxE,CAAC,GAAI,EAAG,EAAE,GAAG,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAG,EAAE,GAAI,EAAG,EAAG,EAAG,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAE,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAG,EAAE,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAI,EAAG,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAG,EAAE,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAE,EAAE,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAE,GAAG,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAE,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAE,EAAE,GAAI,EAAG,EAAE,GAAI,EAAG,EAAG,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAI,EAAG,EAAG,EAAE,EAAE,EACxE,CAAE,EAAE,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAI,EAAE,GAAG,GAAI,EAAE,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GA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",
|
|
5
|
+
"mappings": "o+BAAA,IAAAA,GAA8B,QAC9BC,GAA2B,QAC3BC,EAAgD,QAChDC,GAAwB,QCHxB,IAAAC,GAA2B,QAC3BC,GAAqC,QACrCC,GAA4B,QCkB5B,IAAMC,GAAgB,2BAEhBC,GAAgB,CACpB,CAAE,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAI,EAAE,GAAG,GAAI,EAAE,EAAE,EACxE,CAAC,GAAI,EAAG,EAAE,GAAG,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAG,EAAE,GAAI,EAAG,EAAG,EAAG,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAE,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAG,EAAE,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAI,EAAG,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAG,EAAE,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAE,EAAE,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAE,GAAG,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAE,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAE,EAAE,GAAI,EAAG,EAAE,GAAI,EAAG,EAAG,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAI,EAAG,EAAG,EAAE,EAAE,EACxE,CAAE,EAAE,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAI,EAAE,GAAG,GAAI,EAAE,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAC,GAAI,EAAG,EAAG,EAAE,GAAI,EAAG,EAAE,GAAI,EAAE,GAAG,GAAI,EAAE,GAAG,GAAG,GAAI,EAAE,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,EAAE,EACxE,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,EAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EACxE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI,CAAC,CAC1E,EAEMC,GAAcF,GAAc,OAC5BG,GAAW,UAAU,KAAKF,GAAc,KAAK,CAAC,EAC9CG,GAAUJ,GAAc,QAAQ,GAAG,EAEnCK,GAAe,IAAI,WAAW,GAAG,EAAE,KAAKD,EAAO,EACrD,QAASE,EAAI,EAAGA,EAAIJ,GAAaI,IAAK,CACpC,IAAMC,EAAMP,GAAcM,CAAC,EAC3BD,GAAaE,EAAI,WAAW,CAAC,CAAC,EAAID,EAClCD,GAAaE,EAAI,YAAY,EAAE,WAAW,CAAC,CAAC,EAAID,CAClD,CAEA,SAASE,GAAOC,EAAa,CAC3B,IAAMC,EAAM,IAAI,WAAWD,EAAI,MAAM,EACrC,QAASH,EAAI,EAAGA,EAAIG,EAAI,OAAQH,IAAK,CACnC,IAAMK,EAAOF,EAAI,WAAWH,CAAC,EAC7BI,EAAIJ,CAAC,EAAIK,EAAO,IAAMN,GAAaM,CAAI,EAAKP,EAC9C,CACA,OAAOM,CACT,CAEA,IAAME,GAAW,GACXC,GAAa,EACbC,EAAM,KAENC,EAAI,EACJC,GAAI,EACJC,GAAI,EAmBH,SAASC,GAAaC,EAAeC,EAA+B,CACzE,IAAMC,EAAIb,GAAOW,CAAK,EAChBG,EAAId,GAAOY,CAAM,EACjBG,EAAIF,EAAE,OACNG,EAAIF,EAAE,OACNG,EAAID,EAAI,EAERE,EAAM,IAAI,YAAYH,EAAI,GAAKE,CAAC,EAElCE,EAAQ,IAAI,WAAWF,CAAC,EACxBG,EAAQ,IAAI,WAAWH,CAAC,EACxBI,EAAQ,IAAI,WAAWJ,CAAC,EACxBK,EAAO,IAAI,WAAWL,CAAC,EACvBM,EAAO,IAAI,WAAWN,CAAC,EACvBO,EAAO,IAAI,WAAWP,CAAC,EAI3BE,EAAM,CAAC,EAAI,EACXC,EAAM,CAAC,EAAId,EACXe,EAAM,CAAC,EAAIf,EACX,QAASmB,EAAI,EAAGA,GAAKT,EAAGS,IACtBN,EAAMM,CAAC,EAAInB,EACXc,EAAMK,CAAC,EAAInB,EACXe,EAAMI,CAAC,EAAI,EAGb,IAAIC,EAAOpB,EACPqB,EAAQ,EACRC,EAAQ,EACRC,EAAYtB,EAEhB,QAAST,EAAI,EAAGA,GAAKiB,EAAGjB,IAAK,CAC3BwB,EAAK,CAAC,EAAIhB,EACViB,EAAK,CAAC,EAAI,EACVC,EAAK,CAAC,EAAIlB,EACV,IAAMwB,EAAKjB,EAAEf,EAAI,CAAC,EAAKJ,GACjBqC,EAAMjC,EAAImB,EAChB,QAASQ,EAAI,EAAGA,GAAKT,EAAGS,IAAK,CAC3B,IAAMO,EAAIrC,GAASmC,EAAKhB,EAAEW,EAAI,CAAC,CAAE,EAG7BQ,EAASd,EAAMM,EAAI,CAAC,EACpBS,GAAQ3B,EACRa,EAAMK,EAAI,CAAC,EAAKQ,IAClBA,EAASb,EAAMK,EAAI,CAAC,EACpBS,GAAQ1B,IAENa,EAAMI,EAAI,CAAC,EAAKQ,IAClBA,EAASZ,EAAMI,EAAI,CAAC,EACpBS,GAAQzB,IAEVa,EAAKG,CAAC,EAAIQ,EAASD,EAGnB,IAAIG,EAAShB,EAAMM,CAAC,EAAKrB,GACrBgC,EAAQ7B,EACRa,EAAMK,CAAC,EAAKpB,GAAa8B,IAC3BA,EAASf,EAAMK,CAAC,EAAKpB,GACrB+B,EAAQ5B,IAENa,EAAMI,CAAC,EAAKrB,GAAW+B,IACzBA,EAASd,EAAMI,CAAC,EAAKrB,GACrBgC,EAAQ3B,IAEVc,EAAKE,CAAC,EAAIU,EAGV,IAAIE,GAASf,EAAKG,EAAI,CAAC,EAAKrB,GACxBkC,GAAQ/B,EACRiB,EAAKC,EAAI,CAAC,EAAKpB,GAAagC,KAC9BA,GAASb,EAAKC,EAAI,CAAC,EAAKpB,GACxBiC,GAAQ7B,IAENc,EAAKE,EAAI,CAAC,EAAKrB,GAAWiC,KAC5BA,GAASd,EAAKE,EAAI,CAAC,EAAKrB,GACxBkC,GAAQ9B,IAEVgB,EAAKC,CAAC,EAAIY,GACVnB,EAAIa,EAAMN,CAAC,EAAIS,GAASE,GAAS,EAAME,IAAS,CAClD,CAIA,OAAW,CAACC,EAAOC,CAAG,GAAK,CACzB,CAACjC,EAAGe,CAAI,EACR,CAACd,GAAGe,CAAI,EACR,CAACd,GAAGe,CAAI,CACV,EACMgB,EAAIxB,CAAC,EAAKU,IACZA,EAAOc,EAAIxB,CAAC,EACZW,EAAQ7B,EACR8B,EAAQZ,EACRa,EAAYU,GAGhB,GAAIzC,IAAMiB,EACR,QAASU,EAAI,EAAGA,EAAIT,EAAGS,IACrB,OAAW,CAACc,EAAOC,CAAG,GAAK,CACzB,CAACjC,EAAGe,CAAI,EACR,CAACd,GAAGe,CAAI,EACR,CAACd,GAAGe,CAAI,CACV,EACMgB,EAAIf,CAAC,EAAKC,IACZA,EAAOc,EAAIf,CAAC,EACZE,EAAQZ,EACRa,EAAQH,EACRI,EAAYU,GAMnB,CAACpB,EAAOG,CAAI,EAAI,CAACA,EAAMH,CAAK,EAC5B,CAACC,EAAOG,CAAI,EAAI,CAACA,EAAMH,CAAK,EAC5B,CAACC,EAAOG,CAAI,EAAI,CAACA,EAAMH,CAAK,CAC/B,CAEA,IAAMoB,EAAU,MAAM,KAAa,CAAE,OAAQ1B,CAAE,CAAC,EAAE,KAAK,GAAG,EACpD2B,EAAU,MAAM,KAAa,CAAE,OAAQ3B,EAAI,CAAE,CAAC,EAAE,KAAK,EAAE,EAK7D2B,EAAQ3B,CAAC,EAAIH,EAAO,MAAMgB,CAAK,EAC/B,IAAI9B,EAAI6B,EACJF,EAAIG,EACJW,EAAQV,EACRc,EAAoB,CAAC,EACnBC,EAAeC,GAAe,CAC9BF,EAAQ,SACVD,EAAQG,CAAE,EAAIF,EAAQ,QAAQ,EAAE,KAAK,EAAE,EAAID,EAAQG,CAAE,EACrDF,EAAU,CAAC,EAEf,EACA,KAAO7C,EAAI,GAAK2B,EAAI,GAAG,CACrB,IAAMqB,EAAMhD,EAAImB,EAAIQ,EAChBc,IAAUhC,GACZqC,EAAY9C,CAAC,EACb2C,EAAQ3C,EAAI,CAAC,EAAIc,EAAOa,EAAI,CAAC,EAC7Bc,EAAQrB,EAAI4B,CAAG,EAAK,EACpBhD,IACA2B,KACSc,IAAU/B,IACnBoC,EAAY9C,CAAC,EACbyC,EAASrB,EAAI4B,CAAG,GAAM,EAAK,EAC3BhD,MAEA6C,EAAQ,KAAK/B,EAAOa,EAAI,CAAC,CAAE,EAC3Bc,EAAQrB,EAAI4B,CAAG,GAAM,EACrBrB,IAEJ,CACA,OAAAmB,EAAY9C,CAAC,EAEb4C,EAAQ,CAAC,EAAI9B,EAAO,MAAM,EAAGa,CAAC,EAAIiB,EAAQ,CAAC,EACpC,CAAE,QAAAD,EAAS,QAAAC,CAAQ,CAC5B,CAQO,SAASK,GACdpC,EACAqC,EACA,CACA,IAAMjC,EAAIJ,EAAM,SAAS,OACnBsC,EAAe,IAAI,MAAclC,EAAI,CAAC,EAAE,KAAK,CAAC,EACpD,OAAW,CAAE,UAAAmC,CAAU,IAAKF,EAC1B,QAAS,EAAI,EAAG,GAAKjC,EAAG,IACtBkC,EAAa,CAAC,EAAI,KAAK,IAAIA,EAAa,CAAC,EAAIC,EAAU,QAAQ,CAAC,EAAG,MAAM,EAG7E,IAAMC,EAAQ,CAACV,EAAmBC,IAAsB,CACtD,IAAMU,EAAkB,CAAC,EACzB,QAAStD,EAAI,EAAGA,GAAKiB,EAAGjB,IACtBsD,EAAM,KAAKV,EAAQ5C,CAAC,EAAG,OAAOmD,EAAanD,CAAC,EAAI,GAAG,CAAC,EAChDA,EAAIiB,GACNqC,EAAM,KAAKX,EAAQ3C,CAAC,CAAE,EAG1B,OAAOsD,EAAM,KAAK,EAAE,CACtB,EACA,MAAO,CACL,CACE,KAAMzC,EAAM,KACZ,SAAUwC,EACRxC,EAAM,SAAS,MAAM,EAAE,EACvB,MAAM,KAAa,CAAE,OAAQI,EAAI,CAAE,CAAC,EAAE,KAAK,EAAE,CAC/C,CACF,EACA,GAAGiC,EAAQ,IAAI,CAAC,CAAE,KAAAK,EAAM,UAAAH,CAAU,KAAO,CACvC,KAAAG,EACA,SAAUF,EAAMD,EAAU,QAASA,EAAU,OAAO,CACtD,EAAE,CACJ,CACF,CAEO,IAAMI,GAAiB,IAExBC,GAAkB,IAEjB,SAASC,GACdH,EACAI,EACAC,EACA,CACA,GAAID,EAASC,EAAcJ,GACzB,MAAM,IAAI,MACR,GAAGD,CAAI,KAAKI,CAAM,0BAA0BC,CAAW,uEAAuEJ,GAAiB,GAAG,oFACpJ,CAEJ,CAOA,eAAsBK,GAAe,CACnC,MAAAhD,EACA,QAAAiD,EACA,WAAAC,EACA,OAAAC,CACF,EAKG,CACD,QAAWlD,KAAUgD,EACnBJ,GAAc5C,EAAO,KAAMA,EAAO,SAAS,OAAQD,EAAM,SAAS,MAAM,EAE1E,IAAMqC,EAAwD,CAAC,EAC3De,EAAa,IACjB,QAAWnD,KAAUgD,EACfG,GAAcR,KAChBM,IACE,YAAYb,EAAQ,OAAS,CAAC,OAAOY,EAAQ,MAAM,8BACrD,EACA,MAAMI,GAAQ,EAAGF,CAAM,EACvBC,EAAa,GAEff,EAAQ,KAAK,CACX,KAAMpC,EAAO,KACb,UAAWF,GAAaC,EAAM,SAAUC,EAAO,QAAQ,CACzD,CAAC,EACDmD,GAAcpD,EAAM,SAAS,OAASC,EAAO,SAAS,OAExD,OAAOmC,GAAapC,EAAOqC,CAAO,EAC/B,IAAIiB,GAAK,IAAIA,EAAE,IAAI;AAAA,EAAKA,EAAE,QAAQ,EAAE,EACpC,KAAK;AAAA,CAAI,CACd,CAGO,SAASC,GAAkBC,EAA+B,CAC/D,IAAMC,EAA2B,CAAC,EAClC,QAAWC,KAASF,EAAK,MAAM,GAAG,EAAG,CACnC,GAAM,CAACG,EAAQ,GAAGC,CAAK,EAAIF,EAAM,MAAM;AAAA,CAAI,EACrChB,EAAOiB,GAAQ,KAAK,EAAE,MAAM,KAAK,EAAE,CAAC,EACtCjB,GACFe,EAAQ,KAAK,CACX,KAAAf,EACA,SAAUkB,EAAM,KAAK,EAAE,EAAE,WAAW,UAAW,EAAE,CACnD,CAAC,CAEL,CACA,OAAOH,CACT,CC1TO,IAAMI,GAAuD,CAClE,OAAQC,GACR,OAAQC,EACV,EC9CA,IAAMC,GAOF,CACF,SAAU,CACR,OAAQ,CAAC,EACT,UAAW,kBACX,WAAY,WACd,EACA,OAAQ,CACN,OAAQ,CAAE,OAAQ,MAAO,KAAM,OAAQ,EACvC,UAAW,KACX,WAAY,WACd,EACA,OAAQ,CACN,OAAQ,CAAE,MAAO,SAAU,EAC3B,UAAW,KACX,WAAY,WACd,EACA,MAAO,CACL,OAAQ,CAAE,MAAO,SAAU,EAC3B,UAAW,KACX,WAAY,WACd,CACF,EAOA,eAAsBC,GAAU,CAC9B,UAAAC,EACA,SAAAC,EACA,WAAAC,EACA,OAAAC,CACF,EAKG,CACD,GAAIH,IAAc,UAAW,CAC3B,GAAM,CAACI,EAAO,GAAGC,CAAO,EAAIC,GAAkBL,CAAQ,EACtD,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,kBAAkB,EAEpC,MAAO,CACL,IAAK,MAAMG,GAAe,CAAE,MAAAH,EAAO,QAAAC,EAAS,WAAAH,EAAY,OAAAC,CAAO,CAAC,EAChE,KAAM,EACR,CACF,CACA,IAAMK,EAASV,GAAWE,CAAS,EAC7BS,EAAM,MAAMC,GAAU,CAC1B,KAAMV,EACN,MAAO,GAAGA,CAAS,OACnB,OAAQ,CAAE,GAAGQ,EAAO,OAAQ,SAAAP,CAAS,EACrC,WAAAC,EACA,OAAAC,CACF,CAAC,EACK,CAACQ,EAAKC,CAAI,EAAI,MAAM,QAAQ,IAAI,CACpCH,EAAI,OAAOD,EAAO,SAAS,EAC3BC,EAAI,OAAOD,EAAO,UAAU,CAC9B,CAAC,EACD,MAAO,CAAE,IAAAG,EAAK,KAAAC,CAAK,CACrB,CC1EA,SAASC,GACPC,EACAC,EACA,CACA,IAAIC,EAAcF,EAAE,QAAQ,WAAW,IAAK,GAAG,EAC/C,GAAIA,EAAE,OAASC,GAAc,IAAID,EAAE,KAAK,EAAG,CACzC,IAAMG,EAAOF,EAAa,IAAID,EAAE,KAAK,EACjCG,EAAK,aACPD,EAAcC,EAAK,WAChB,MAAM,GAAG,EACT,IAAIC,GAAQA,EAAK,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,EAAE,YAAY,CAAC,EACtE,KAAK,GAAG,EAEf,CACA,MAAO,GAAGJ,EAAE,SAAS,IAAIE,CAAW,EACtC,CAOO,SAASG,GACdC,EACAL,EACA,CACA,IAAMM,EAAmC,CAAC,EACpCC,EAAUF,EAAK,MAAQL,EAAa,IAAIK,EAAK,KAAK,EAAI,OAE5D,OAAIE,GAAS,UACXD,EAAS,iBAAiB,EAAIC,EAAQ,SAEpCA,GAAS,aACXD,EAAS,aAAa,EAAIC,EAAQ,YAEhCF,EAAK,YACPC,EAAS,UAAYD,EAAK,WAExBA,EAAK,KACPC,EAAS,GAAKD,EAAK,IAEjBA,EAAK,QACPC,EAAS,YAAcD,EAAK,OAGvBC,CACT,CASA,SAASE,GACPC,EACAT,EACA,CACA,IAAMU,EAAYD,EAAK,IAAIE,GAAOb,GAAOa,EAAKX,CAAY,CAAC,EACrDY,EAAS,IAAI,IACnB,QAAWC,KAAQH,EACjBE,EAAO,IAAIC,GAAOD,EAAO,IAAIC,CAAI,GAAK,GAAK,CAAC,EAG9C,IAAMC,EAAO,IAAI,IACjB,OAAOJ,EAAU,IAAI,CAACK,EAAM,IAAM,CAChC,IAAIF,EACFD,EAAO,IAAIG,CAAI,EAAK,EAAI,GAAGA,CAAI,IAAIN,EAAK,CAAC,EAAG,OAAS,EAAI,CAAC,GAAKM,EACjE,KAAOD,EAAK,IAAID,CAAI,GAClBA,EAAO,GAAGA,CAAI,IAAI,EAAI,CAAC,GAEzB,OAAAC,EAAK,IAAID,CAAI,EACNA,CACT,CAAC,CACH,CASO,SAASG,GAAe,CAC7B,KAAAP,EACA,MAAAQ,EACA,SAAAC,EACA,aAAAlB,EACA,aAAAmB,EAAe,OACjB,EAMG,CACD,IAAMC,EAAuD,CAAC,EACxDC,EAAWb,GAAaC,EAAMT,CAAY,EAC1CsB,EAAYb,EAAK,IAAI,CAACE,EAAKY,IAAM,CACrC,IAAMC,EAAUH,EAASE,CAAC,EAC1B,OAAAH,EAAaI,CAAO,EAAIpB,GAAiBO,EAAKX,CAAY,EACnD,IAAIwB,CAAO;AAAA,EAAKb,EAAI,QAAQ,EACrC,CAAC,EAED,MAAO,CACL,IAAK,CAAC,IAAIQ,CAAY;AAAA,EAAKD,GAAYD,CAAK,GAAI,GAAGK,CAAS,EAAE,KAAK;AAAA,CAAI,EACvE,aAAAF,CACF,CACF,CC5GA,IAAMK,GAAU,+BACVC,GAAa,WACNC,GAAsB,GACtBC,GAAa,MAAc,GAAK,IAiBvCC,GAAQC,GAA8BL,GAAS,EAAGM,GAAM,CAC5DA,EAAG,kBAAkBL,GAAY,CAAE,QAAS,IAAK,CAAC,CACpD,CAAC,EAEM,SAASM,GAAU,CACxB,cAAAC,EACA,SAAAC,EACA,QAAAC,EACA,aAAAC,EACA,MAAAC,CACF,EAMG,CACD,MAAO,CAACJ,EAAeC,EAAUC,GAAW,GAAIC,EAAcC,CAAK,EAAE,KAAK,GAAG,CAC/E,CAEO,SAASC,GAAgBC,EAAY,CAC1C,OAAOC,GACL,oBACA,SAAY,CACV,IAAMC,EAAQ,MAAO,MAAMZ,GAAM,GAAG,IAAIH,GAAYa,CAAE,EACtD,OAAOE,GAAS,KAAK,IAAI,EAAIA,EAAM,UAAYb,GAC3Ca,EACA,MACN,EACA,MACF,CACF,CAEO,SAASC,GAAWD,EAAwC,CACjE,OAAOD,GACL,qBACA,SAAY,CACV,IAAMT,EAAK,MAAMF,GAAM,EAEvB,GADA,MAAME,EAAG,IAAIL,GAAY,CAAE,GAAGe,EAAO,UAAW,KAAK,IAAI,CAAE,CAAC,EACvD,MAAMV,EAAG,MAAML,EAAU,EAAKC,GAAqB,CACtD,IAAMgB,EAAM,MAAMZ,EAAG,OAAOL,EAAU,EAChCkB,EAASD,EACZ,SAAS,CAACE,EAAGC,IAAMD,EAAE,UAAYC,EAAE,SAAS,EAC5C,MAAM,EAAGH,EAAI,OAAShB,EAAmB,EACtCoB,EAAKhB,EAAG,YAAYL,GAAY,WAAW,EACjD,MAAM,QAAQ,IAAI,CAAC,GAAGkB,EAAO,IAAII,GAAKD,EAAG,MAAM,OAAOC,EAAE,EAAE,CAAC,EAAGD,EAAG,IAAI,CAAC,CACxE,CACF,EACA,MACF,CACF,CC1CA,IAAME,GAAU,2BAQhB,IAAMC,GAAqB,kBAGdC,GACX,wFA6BIC,GACJ,wEAEK,SAASC,GAAWC,EAA+C,CACxE,GAAM,CAAE,iBAAAC,EAAkB,YAAAC,EAAa,SAAAC,EAAU,SAAAC,CAAS,EAAIJ,EAC9D,GAAI,GAACC,GAAoB,CAACE,GAAU,SAAW,CAACC,GAAU,OAG1D,MAAO,CACL,UAAWH,EACX,GAAIC,GAAeD,EACnB,SAAU,gBAAgB,KAAKD,EAAM,WAAa,EAAE,EACpD,MAAOG,EAAS,QAChB,eAAgBA,EAAS,gBAAkB,OAAOA,EAAS,OAAO,EAClE,WAAYA,EAAS,WACrB,MACEH,EAAM,oBAAoB,iBAAiB,UAAU,OACrDA,EAAM,oBAAoB,kBAAkB,CAAC,GAAG,UAAU,MAC5D,SAAUI,EAAS,KACrB,CACF,CAEA,SAASC,GAAaC,EAAe,CACnC,OAASA,EAAsC,SAAW,CAAC,GAAG,QAAQC,GAAK,CACzE,IAAMC,EAAIT,GAAWQ,CAAC,EACtB,OAAOC,EAAI,CAACA,CAAC,EAAI,CAAC,CACpB,CAAC,CACH,CAGA,SAASC,GAAKC,EAAiBC,EAAiB,CAC9C,OACE,OAAOA,EAAE,QAAQ,EAAI,OAAOD,EAAE,QAAQ,GACtCC,EAAE,SAAS,OAASD,EAAE,SAAS,MAEnC,CAOA,eAAsBE,GACpBC,EACAC,EACAC,EACmC,CACnC,QAAWC,KAAOH,EAAY,CAC5B,IAAMI,EAAYC,GAAmBF,CAAG,EACxC,GAAI,CAACC,EACH,SAIF,GAAIpB,GAAkB,KAAKoB,CAAS,EAClC,GAAI,CACF,IAAMjB,EAAQD,GACZ,MAAMoB,EACJ,GAAGC,EAAO,cAAcH,CAAS,WAAWnB,EAAY,GACxD,CAAE,OAAAiB,CAAO,CACX,CACF,EACA,GAAIf,EACF,OAAOA,CAEX,OAASO,EAAG,CACV,GAAIc,EAAad,CAAC,EAChB,MAAMA,CAEV,CAEF,IAAMe,EAAQ,eAAeL,EAAU,WAAW,IAAK,EAAE,CAAC,qBAAqBH,CAAK,GAC9ER,EAAO,MAAMa,EACjB,GAAGC,EAAO,2BAA2B,mBAAmBE,CAAK,CAAC,WAAWxB,EAAY,WACrF,CAAE,OAAAiB,CAAO,CACX,EACM,CAACQ,CAAI,EAAIlB,GAAaC,CAAI,EAAE,KAAKG,EAAI,EAC3C,GAAIc,EACF,OAAOA,CAEX,CAEF,CAGA,eAAeC,GACbC,EACAC,EACAX,EACA,CACA,IAAMO,EAAQ,eAAeG,CAAS,mBAAmBC,EAAW,GAAG,IAKjEC,GAJQ,MAAMR,EAClB,GAAGC,EAAO,wBAAwB,mBAAmBE,CAAK,CAAC,0BAC3D,CAAE,OAAAP,CAAO,CACX,GACqB,UAAU,CAAC,EAChC,OAAOY,GAAS,GACZ,CAAE,GAAIA,EAAQ,GAAI,YAAaA,EAAQ,WAAY,EACnD,MACN,CAKA,IAAMC,GAAO,IACPC,GAAc,IAEpB,SAASC,GAASC,EAAoB,CACpC,IAAMC,EAAOD,EAAS,QAAQ,IAAI,MAAM,GAAK,GAC7C,MAAO,0BAA0B,KAAKC,CAAI,IAAI,CAAC,CACjD,CAOA,eAAsBC,GAAoB,CACxC,UAAAC,EACA,SAAAR,EACA,uBAAAS,EAAyB,GACzB,KAAAC,EACA,QAAAC,EACA,MAAAC,EAAQC,GACR,WAAAC,EACA,OAAAzB,CACF,EASG,CACD,IAAMO,EAAQ,CACZ,kBAAkBI,CAAQ,IAAIQ,CAAS,GACvC,GAAIC,EAAyB,CAACvC,EAAkB,EAAI,CAAC,CACvD,EAAE,KAAK,OAAO,EACV6C,EACF,GAAGrB,EAAO,2BAA2B,mBAAmBE,CAAK,CAAC,WAAWxB,EAAY,SAAS8B,EAAI,eAE9Fc,EAAY,IAAI,IAClBC,EAAU,EACVC,EACJ,KAAOH,GAAOE,EAAUd,IAAa,CACnC,IAAME,EAAW,MAAMc,GAAYJ,EAAK,CAAE,OAAA1B,CAAO,CAAC,EAClD6B,IAAU,OAAOb,EAAS,QAAQ,IAAI,iBAAiB,CAAC,GAAK,OAC7D,IAAMe,EAAUzC,GAAa,MAAM0B,EAAS,KAAK,CAAC,EAClDY,GAAWG,EAAQ,OACnB,QAAWC,KAAUD,EAAS,CAC5B,GAAIC,EAAO,QAAUV,GAAYD,GAAQ,CAACA,EAAK,IAAIW,EAAO,KAAK,EAC7D,SAEF,IAAMC,EAAUN,EAAU,IAAIK,EAAO,KAAK,GACtC,CAACC,GAAWvC,GAAKsC,EAAQC,CAAO,EAAI,IACtCN,EAAU,IAAIK,EAAO,MAAOA,CAAM,CAEtC,CAMA,GALAP,IACE,QAAQG,CAAO,GAAGC,EAAQ,OAAOA,CAAK,GAAK,EAAE,qBAAqBF,EAAU,IAAI,aAClF,EAIEN,GACA,CAAC,GAAGA,CAAI,EAAE,MAAMa,GAAKA,IAAMZ,GAAWK,EAAU,IAAIO,CAAC,GAAG,QAAQ,EAEhE,MAEFR,EAAMK,EAAQ,OAAShB,GAASC,CAAQ,EAAI,MAC9C,CACA,MAAO,CACL,MAAAa,EAEA,QAAAD,EAEA,UAAW,CAAC,CAACF,GAAOE,GAAWd,GAC/B,KAAM,CAAC,GAAGa,EAAU,OAAO,CAAC,EAAE,KAAKjC,EAAI,EAAE,MAAM,EAAG6B,CAAK,CACzD,CACF,CAiBA,eAAsBY,GAAoB,CACxC,WAAArC,EACA,MAAAC,EACA,SAAAY,EAAW,GACX,uBAAAS,EAAyB,GACzB,KAAAC,EACA,QAAAC,EACA,MAAAC,EAAQC,GACR,WAAAC,EACA,OAAAzB,CACF,EAU4B,CAC1ByB,EAAW,mCAAmC,EAC9C,IAAMlB,EAAQ,MAAMV,GAAoBC,EAAYC,EAAOC,CAAM,EACjE,GAAI,CAACO,EACH,MAAM,IAAI,MACR,4BAA4BT,EAAW,KAAK,IAAI,CAAC,aAAaC,CAAK,sDACrE,EAGF0B,EAAW,qBAAqBd,CAAQ,eAAeJ,EAAM,EAAE,KAAK,EACpE,IAAMK,EAAU,MAAMH,GAAeF,EAAM,UAAWI,EAAUX,CAAM,EACtE,GAAI,CAACY,EACH,MAAM,IAAI,MAAM,GAAGL,EAAM,SAAS,mBAAmBI,CAAQ,UAAU,EAGzE,GAAM,CACJ,MAAAkB,EACA,QAAAD,EACA,UAAAQ,EACA,KAAML,CACR,EAAI,MAAMb,GAAoB,CAC5B,UAAWN,EAAQ,GACnB,SAAAD,EACA,uBAAAS,EACA,KAAAC,EACA,QAAAC,EACA,MAAAC,EACA,WAAAE,EACA,OAAAzB,CACF,CAAC,EACD,GAAI+B,EAAQ,OAAS,EACnB,MAAM,IAAI,MACR,GAAGnB,EAAQ,EAAE,iBAAiBQ,EAAyB,sBAAwB,EAAE,mBAAmBb,EAAM,EAAE,UAC9G,EAGF,IAAM8B,EAASC,GACbP,EAAQ,IAAItC,GAAKA,EAAE,YAAcA,EAAE,cAAc,CACnD,EACA,MAAO,CACL,MAAAc,EACA,UAAWK,EAAQ,GACnB,MAAAiB,EACA,QAASO,EACL,GAAGxB,EAAQ,EAAE,UAAUiB,GAAS,aAAeD,CAAO,oCAAoCA,CAAO,oEACjG,OACJ,KAAMG,EAAQ,IAAI,CAACtC,EAAG8C,KAAO,CAC3B,MAAO9C,EAAE,MACT,MAAO4C,EAAOE,CAAC,EACf,eAAgB9C,EAAE,eAClB,WAAYA,EAAE,WACd,OAAQA,EAAE,GACV,QAASA,EAAE,UACX,SAAUA,EAAE,QACd,EAAE,CACJ,CACF,CCrUA,eAAe+C,GACbC,EACAC,EACA,CACA,IAAMC,EAASF,EAAK,YACpB,GAAIE,EAAO,gBACT,MAAO,CACL,SAAUC,GAAqBD,EAAO,eAAe,EACrD,KAAMF,EAAK,YACb,EAEF,GAAIE,EAAO,UAAW,CACpBD,EAAM,WAAW,YAAYC,EAAO,SAAS,kBAAkB,EAC/D,IAAME,EAAQ,MAAMC,GAAoB,CAACH,EAAO,SAAS,EAAG,EAAGD,EAAM,MAAM,EAC3E,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,wBAAwBF,EAAO,SAAS,EAAE,EAE5D,IAAMI,EAAO,GAAGF,EAAM,EAAE,SACxB,OAAAH,EAAM,IAAI,IAAM,CACdD,EAAK,gBAAgBM,CAAI,CAC3B,CAAC,EACM,CAAE,SAAUF,EAAM,SAAU,KAAAE,CAAK,CAC1C,CACA,MAAM,IAAI,MACR,wGACF,CACF,CAUA,eAAeC,GAAO,CACpB,KAAAP,EACA,MAAAC,EACA,MAAAO,EACA,aAAAC,EACA,QAAAC,EACA,IAAAC,CACF,EAO2B,CACzB,IAAMT,EAASF,EAAK,YACd,CAAE,WAAAY,EAAY,MAAAC,EAAO,OAAAC,CAAO,EAAIb,EAChC,CAAE,KAAAc,EAAM,SAAAC,EAAU,IAAAC,CAAI,EAAI,MAAMC,GACpChB,EAAO,eAAiB,QAC1B,EAAE,CACA,MAAAM,EACA,SAAUN,EAAO,cACjB,QAAAQ,EACA,WAAAE,EACA,MAAAC,EACA,OAAAC,CACF,CAAC,EACD,GAAIC,EAAK,SAAW,EAClB,MAAM,IAAI,MAAM,eAAe,EAGjCH,EAAW,mCAAmC,EAC9C,IAAMO,EAA0B,CAAC,EAC3BC,EAAe,MAAMC,GACzBN,EAAK,IAAIO,GAAKA,EAAE,KAAK,EAAE,OAAQC,GAAmBA,IAAM,MAAS,EACjET,EACAU,GAAK,CACHL,EAAa,KAAKK,CAAC,CACrB,CACF,EACM,CAAE,IAAKC,EAAO,aAAAC,CAAa,EAAIC,GAAe,CAClD,KAAAZ,EACA,MAAAP,EACA,SAAAQ,EACA,aAAAI,EACA,aAAAX,CACF,CAAC,EAEKmB,EAAcT,EAAa,OAAS,EAC1C,MAAI,CAACH,GAAY,CAACY,GAChB,MAAMC,GAAW,CAAE,GAAIlB,EAAK,MAAAc,EAAO,aAAAC,EAAc,IAAAT,CAAI,CAAC,EAEjD,CACL,MAAAQ,EACA,aAAAC,EACA,IAAAT,EACA,SAAAD,EACA,SAAUY,EACN,CACE,+FACF,EACA,CAAC,CACP,CACF,CAUA,eAAsBE,GAAc,CAClC,KAAA9B,EACA,MAAAC,CACF,EAG0B,CACxB,IAAMC,EAASF,EAAK,YACd,CACJ,mBAAA+B,EACA,QAAArB,EAAUsB,GACV,cAAAC,EAAgB,QAClB,EAAI/B,EACEgC,EAAehC,EAAO,cAAgB,UACtC,CAAE,SAAUM,EAAO,KAAMC,CAAa,EAAI,MAAMV,GACpDC,EACAC,CACF,EACIgC,IAAkB,UAAYC,IAAiB,WACjDC,GAAc1B,EAAcD,EAAM,OAAQA,EAAM,MAAM,EAExD,GAAM,CAAE,WAAAI,EAAY,OAAAE,CAAO,EAAIb,EACzBU,EAAMyB,GAAU,CACpB,cAAAH,EACA,SAAU/B,EAAO,cACjB,QAAAQ,EACA,aAAAD,EACA,MAAAD,CACF,CAAC,EACK6B,EAAQ,MAAMC,GAAgB3B,CAAG,EACnC0B,GACFzB,EACE,eAAeqB,CAAa,gBAAgB,IAAI,KAAKI,EAAM,SAAS,EAAE,eAAe,CAAC,KACxF,EAEF,GAAM,CAAE,MAAAZ,EAAO,aAAAC,EAAc,IAAAT,EAAK,SAAAD,EAAU,SAAAuB,CAAS,EACnDF,GAAU,MAAM9B,GAAO,CAAE,KAAAP,EAAM,MAAAC,EAAO,MAAAO,EAAO,aAAAC,EAAc,QAAAC,EAAS,IAAAC,CAAI,CAAC,EACrE,CAAE,IAAA6B,EAAK,KAAAC,CAAK,EAAIzB,EAClB,CAAE,IAAKS,EAAO,KAAM,EAAG,EACvB,MAAMiB,GAAU,CACd,UAAWR,EACX,SAAUT,EACV,WAAAb,EACA,OAAAE,CACF,CAAC,EAEC6B,EAAaC,GAAiBb,CAAkB,EAChDc,EAAmB,KAAK,UAAUnB,CAAY,EACpD,aAAMoB,GAAgB,CACpB,gBAAiBtC,EACjB,cAAeN,EAAO,cACtB,aAAcc,EAAW,OAAYkB,EACrC,cAAehC,EAAO,cACtB,QAAAQ,EACA,IAAA8B,EACA,KAAAC,EACA,aAAcI,EACd,IAAK5B,GAAO,GACZ,OAAQ8B,GAAIJ,EAAW,QAAQ,EAC/B,aAAcI,GAAIJ,EAAW,QAAQ,EACrC,eAAgBK,GAAejB,CAAkB,EACjD,SAAUgB,GAAIJ,EAAW,SAAS,GAAKI,GAAIJ,EAAW,QAAQ,CAChE,CAAC,EAEM,CAAE,IAAAH,EAAK,KAAAC,EAAM,aAAcI,EAAkB,SAAAN,CAAS,CAC/D,CCxKA,IAAMU,GAAU,+CACVC,GAAU,qCA+BT,SAASC,GAAaC,EAAgC,CAE3D,OADcA,EAAyB,QAAQ,QAAQ,SAAS,QAAU,CAAC,GAC/D,QAAQC,GAClBA,EAAE,YAAcA,EAAE,SACd,CACE,CACE,KAAMA,EAAE,WACR,MAAOA,EAAE,SACT,KAAMA,EAAE,MAAQA,EAAE,WAClB,SAAUA,EAAE,WAAaA,EAAE,UAC7B,CACF,EACA,CAAC,CACP,CACF,CAsCA,SAASC,GAAaC,EAAkD,CACtE,GAAM,CAACC,EAAM,GAAGC,CAAK,GAAKF,GAAO,IAAI,MAAM,GAAG,EACxCG,EAAYD,EACf,KAAKE,GAAKA,EAAE,WAAW,YAAY,CAAC,GACnC,MAAM,EAAmB,EACvBC,EAAUH,EAAM,KAAKE,GAAK,CAACA,EAAE,WAAW,YAAY,CAAC,GAAKD,EAChE,OAAOF,GAAQE,GAAaE,EAAU,CAAE,KAAAJ,EAAM,UAAAE,EAAW,QAAAE,CAAQ,EAAI,MACvE,CAOO,SAASC,GAAaT,EAI3B,CACA,IAAMU,EAAWV,EAAuB,QAAQ,QAC1CW,EAASD,GAAS,OAClBE,EAAO,MAAM,QAAQD,CAAM,EAAIA,EAASA,EAAS,CAACA,CAAM,EAAI,CAAC,EAC7DE,EAAqB,CAAC,EACxBC,EACJ,QAAWC,KAAOH,EAAM,CACtBE,IAAUZ,GAAaa,EAAI,IAAI,EAC/B,IAAMC,EAASd,GAAaa,EAAI,WAAW,EACvCC,IAAWD,EAAI,WAAa,OAASA,EAAI,WAAa,MACxDF,EAAK,KAAK,CACR,GAAGG,EACH,OACED,EAAI,qBAAuB,OACvB,OACA,OAAOA,EAAI,kBAAkB,EACnC,KAAMA,EAAI,QACZ,CAAC,CAEL,CACA,MAAO,CAAE,SAAU,CAAC,CAACL,GAAS,aAAc,MAAAI,EAAO,KAAAD,CAAK,CAC1D,CAQO,SAASI,GAAiBJ,EAAkC,CACjE,IAAMK,EAAS,IAAI,IACnB,QAAWC,KAAON,EAAM,CACtB,IAAMO,EAAUF,EAAO,IAAIC,EAAI,IAAI,GAC/B,CAACC,GAAYA,EAAQ,OAAS,KAAOD,EAAI,OAAS,QACpDD,EAAO,IAAIC,EAAI,KAAMA,CAAG,CAE5B,CACA,MAAO,CAAC,GAAGD,EAAO,OAAO,CAAC,CAC5B,CAUO,SAASG,GAAerB,EAAoC,CACjE,IAAMsB,EAAM,IAAI,IAChB,QAAWC,KAAMvB,EAAyB,SAAW,CAAC,EAChDuB,EAAE,kBAAoBA,EAAE,UAAU,OACpCD,EAAI,IAAIC,EAAE,iBAAkBA,EAAE,SAAS,KAAK,EAGhD,OAAOD,CACT,CAEA,IAAIE,GAGJ,SAASC,IAAe,CACtB,OAAAD,KAAYE,EAAU,GAAG7B,EAAO,mBAAmB,EAChD,KAAKE,EAAY,EACjB,MAAO4B,GAAe,CACrB,MAAAH,GAAU,OACJG,CACR,CAAC,EACIH,EACT,CAGA,IAAMI,GAAgB,IAEtB,eAAeC,GAAeC,EAAsBC,EAAsB,CACxE,IAAMT,EAAM,IAAI,IAChB,QAASU,EAAI,EAAGA,EAAIF,EAAW,OAAQE,GAAKJ,GAAe,CACzD,IAAMK,EAAQH,EAAW,MAAME,EAAGA,EAAIJ,EAAa,EAC7C5B,EAAO,MAAM0B,EACjB,GAAG5B,EAAO,0BAA0BmC,EAAM,KAAK,GAAG,CAAC,yCACnD,CAAE,OAAAF,CAAO,CACX,EACA,OAAW,CAACG,EAAKC,CAAG,IAAKd,GAAerB,CAAI,EAC1CsB,EAAI,IAAIY,EAAKC,CAAG,CAEpB,CACA,OAAOb,CACT,CAQA,eAAec,GACbC,EACAC,EACAC,EACAR,EACA,CACA,IAAIS,EACJ,QAAWC,KAAOJ,EAAY,CAC5B,IAAMvB,EAAQ4B,GAAmBD,CAAG,EACpC,GAAI,CAAC3B,EACH,SAEF,IAAM6B,EAAS,IAAI,gBAAgB,CACjC,cAAe7B,EACf,SAAU,OAAOwB,CAAK,EACtB,aAAc,KAChB,CAAC,EACGC,GACFI,EAAO,IAAI,iBAAkBJ,EAAQ,IAAIK,GAAKA,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAElE,IAAMC,EAASpC,GACb,MAAMiB,EAAU,GAAG7B,EAAO,wBAAwB8C,EAAO,SAAS,CAAC,GAAI,CACrE,OAAAZ,CACF,CAAC,CACH,EACA,GAAI,CAACc,EAAO,WACVL,IAAY1B,EACR+B,EAAO,OACT,MAAO,CAAE,GAAGA,EAAQ,QAAS/B,CAAM,CAGzC,CACA,OAAO0B,IAAY,OACf,OACA,CAAE,QAAAA,EAAS,KAAM,CAAC,EAAG,MAAO,MAAU,CAC5C,CAqBA,eAAsBM,GAAsB,CAC1C,WAAAT,EACA,MAAAC,EACA,KAAAS,EACA,QAAAC,EACA,MAAAC,EAAQC,GACR,WAAAC,EACA,OAAApB,CACF,EAQ8B,CAC5B,IAAMqB,EAAM,MAAM3B,GAAa,EAC/BM,GAAQ,eAAe,EACvB,IAAMsB,EAAU,IAAI,IAAID,EAAI,IAAInD,GAAK,CAACA,EAAE,MAAOA,CAAC,CAAC,CAAC,EAC5CiB,EAAS,IAAI,IAAIkC,EAAI,IAAInD,GAAK,CAACA,EAAE,KAAMA,CAAC,CAAC,CAAC,EAC1CqD,EAAcD,EAAQ,IAAIf,CAAK,EACrC,GAAI,CAACgB,EACH,MAAM,IAAI,MACR,+CAA+ChB,CAAK,kEACtD,EAEF,IAAMC,EAAUQ,EACZ,CAAC,GAAGA,CAAI,EAAE,QAAQH,GAAK,CACrB,IAAM3C,EAAIoD,EAAQ,IAAIT,CAAC,EACvB,OAAO3C,GAAK2C,IAAMI,EAAU,CAAC/C,CAAC,EAAI,CAAC,CACrC,CAAC,EACD,OAEJ,GAAIsC,GAAS,SAAW,EACtB,MAAM,IAAI,MACR,gIACF,EAGFY,EAAW,kCAAkC,EAC7C,IAAMI,EAAQ,MAAMnB,GAAeC,EAAYC,EAAOC,EAASR,CAAM,EACrE,GAAI,CAACwB,EACH,MAAM,IAAI,MACR,4BAA4BlB,EAAW,KAAK,IAAI,CAAC,OAAOiB,EAAY,QAAQ,2DAC9E,EAGF,IAAME,EAAO,IAAI,IAAIjB,GAAS,IAAI,CAACK,EAAGZ,IAAM,CAACY,EAAE,MAAOZ,CAAC,CAAC,CAAC,EACnDyB,EAAQxC,GAAiBsC,EAAM,IAAI,EACtC,IAAIpC,IAAQ,CAAE,IAAAA,EAAK,OAAQD,EAAO,IAAIC,EAAI,IAAI,CAAE,EAAE,EAClD,OACEuC,GACC,CAAC,CAACA,EAAE,QACJA,EAAE,OAAO,QAAUV,IAClBT,EAAUiB,EAAK,IAAIE,EAAE,OAAO,KAAK,EAAI,GAC1C,EACC,KAAK,CAACC,EAAGC,IACRrB,EAAUiB,EAAK,IAAIG,EAAE,OAAO,KAAK,EAAKH,EAAK,IAAII,EAAE,OAAO,KAAK,EAAK,CACpE,EACC,MAAM,EAAGX,CAAK,EACjB,GAAIQ,EAAM,OAAS,EACjB,MAAM,IAAI,MACR,QAAQA,EAAM,MAAM,kCAAkCF,EAAM,OAAO,6BACrE,EAGFJ,EAAW,YAAYM,EAAM,MAAM,oCAAoC,EACvE,GAAM,CAACI,EAAOC,CAAS,EAAI,MAAM,QAAQ,IAAI,CAC3CC,GACEN,EAAM,IAAIC,GAAKA,EAAE,OAAO,KAAK,EAC7B3B,CACF,EACAF,GACE,CACE,GAAI0B,EAAM,MAAQ,CAACA,EAAM,MAAM,SAAS,EAAI,CAAC,EAC7C,GAAGE,EAAM,IAAIC,GAAKA,EAAE,IAAI,SAAS,CACnC,EACA3B,CACF,CACF,CAAC,EAEKiC,EAAYP,EAAM,IAAI,CAAC,CAAE,IAAAtC,EAAK,OAAA8C,CAAO,IAAM,CAC/C,IAAMC,EAAOL,EAAM,IAAII,EAAO,KAAK,EACnC,MAAO,CACL,IAAA9C,EACA,OAAA8C,EACA,KAAMC,GAAM,YAAcA,GAAM,SAAWD,EAAO,KAClD,eAAgBC,GAAM,SAAWD,EAAO,SACxC,WAAYC,GAAM,UACpB,CACF,CAAC,EACKC,EAASC,GAAaJ,EAAU,IAAIK,GAAKA,EAAE,IAAI,CAAC,EAChDzD,EAAOoD,EACV,IAAI,CAAC,CAAE,IAAA7C,EAAK,OAAA8C,EAAQ,eAAAK,EAAgB,WAAAC,CAAW,EAAGvC,KAAO,CACxD,MAAOiC,EAAO,MACd,MAAOE,EAAOnC,CAAC,EACf,eAAAsC,EACA,WAAAC,EACA,OAAQpD,EAAI,QACZ,QAASA,EAAI,UACb,SAAU2C,EAAU,IAAI3C,EAAI,SAAS,GAAK,EAC5C,EAAE,EACD,OAAOI,GAAKA,EAAE,QAAQ,EACzB,GAAIX,EAAK,OAAS,EAChB,MAAM,IAAI,MAAM,qDAAqD,EAGvE,IAAM4D,EAAgBjB,EAAM,OAASO,EAAU,IAAIP,EAAM,MAAM,SAAS,EACxE,MAAO,CACL,QAASA,EAAM,QACf,MACEA,EAAM,OAASiB,EACX,CAAE,GAAGjB,EAAM,MAAO,SAAUiB,CAAc,EAC1C,OACN,KAAA5D,CACF,CACF,CAOA,eAAemD,GAAcU,EAAkB1C,EAAsB,CACnE,GAAI,CACF,OAAO,MAAM2C,GAAkBD,EAAQ1C,CAAM,CAC/C,OAAS,EAAG,CACV,GAAI4C,EAAa,CAAC,EAChB,MAAM,EAER,eAAQ,KAAK,mDAAoD,CAAC,EAC3D,IAAI,GACb,CACF,CC7WA,eAAsBC,GAAkB,CACtC,KAAAC,EACA,MAAAC,CACF,EAGG,CACD,GAAM,CACJ,MAAAC,EACA,KAAAC,EACA,WAAAC,EACA,eAAAC,EACA,aAAAC,EACA,gBAAAC,EACA,OAAAC,EAAS,OACT,SAAAC,EACA,uBAAAC,CACF,EAAIV,EAAK,eAEH,CAAE,WAAAW,EAAY,IAAAC,EAAK,OAAAC,CAAO,EAAIZ,EAE9Ba,EAAU,CACd,MAAAZ,EACA,eAAAG,EACA,KAAMF,EAAO,IAAI,IAAIA,CAAI,EAAI,OAE7B,QAASD,EACT,MAAOE,EACP,WAAAO,EACA,OAAAE,CACF,EACM,CAAE,OAAAE,EAAQ,eAAAC,EAAgB,KAAAC,EAAM,QAAAC,CAAQ,EAC5CV,IAAW,UACP,MAAMW,GAAqBL,CAAO,EAClCN,IAAW,SACT,MAAMY,GAAmB,CACvB,GAAGN,EACH,SAAAL,EACA,uBAAAC,CACF,CAAC,EACD,MAAMW,GAAkBP,CAAO,EASjCQ,EAAaf,EACfgB,GAAqBhB,CAAe,EACpCS,GAAgB,SACpB,GAAI,CAACM,EACH,MAAM,IAAI,MACR,2CAA2CE,GAAYhB,CAAM,CAAC,gDAAgDO,CAAM,GACtH,EAcF,IAAMU,EAAa,MAAMC,GAAcxB,EAAOe,EAAMJ,CAAM,EAC1DD,EAAI,IAAM,CACRZ,EAAK,gBAAgByB,CAAU,CACjC,CAAC,EAED,IAAME,EAAuD,CAC3D,CAACF,CAAU,EAAGG,GAAmB5B,EAAMe,EAAQO,EAAYN,CAAc,CAC3E,EACA,QAAWa,KAAOZ,EAChBU,EAAaE,EAAI,KAAK,EAAIC,GAAiBD,CAAG,EAahD,MAAO,CACL,GAXa,MAAME,GAAU,CAC7B,UAAWzB,EACX,SAAU,CACR,IAAImB,CAAU;AAAA,EAAKH,CAAU,GAC7B,GAAGL,EAAK,IAAIe,GAAK,IAAIA,EAAE,KAAK;AAAA,EAAKA,EAAE,QAAQ,EAAE,CAC/C,EAAE,KAAK;AAAA,CAAI,EACX,WAAArB,EACA,OAAAE,CACF,CAAC,EAIC,aAAc,KAAK,UAAUc,CAAY,EACzC,SAAUT,EAAU,CAACA,CAAO,EAAI,CAAC,CACnC,CACF,CAkBA,eAAeG,GAAkB,CAC/B,MAAAnB,EACA,eAAAG,EACA,WAAAM,EACA,OAAAE,EACA,GAAGoB,CACL,EAA6C,CAC3CtB,EAAW,2BAA2B,EACtC,IAAMuB,EAAW,MAAMC,GAAc9B,EAAgBH,EAAOW,CAAM,EAClE,GAAI,CAACqB,EACH,MAAM,IAAI,MACR,4BAA4B7B,EAAe,KAAK,IAAI,CAAC,6BAA6BH,CAAK,2DACzF,EAEF,IAAMc,EAAiB,MAAMoB,GAC3BF,EAAS,OACTrB,CACF,EACMI,EAAO,MAAMoB,GAAkB,CACnC,OAAQH,EAAS,OACjB,WAAAvB,EACA,OAAAE,EACA,GAAGoB,CACL,CAAC,EACD,MAAO,CAAE,OAAQC,EAAS,OAAQ,eAAAlB,EAAgB,KAAAC,CAAK,CACzD,CAEA,IAAMO,GAA8C,CAClD,KAAM,OACN,QAAS,UACT,OAAQ,SACV,EAOA,eAAeJ,GAAmB,CAChC,eAAAf,EACA,SAAAI,EACA,uBAAAC,EACA,GAAGuB,CACL,EAG4B,CAC1B,IAAMK,EAAQ,MAAMC,GAAoB,CACtC,WAAYlC,EACZ,SAAAI,EACA,uBAAAC,EACA,GAAGuB,CACL,CAAC,EACD,MAAO,CACL,OAAQK,EAAM,MAAM,GACpB,eAAgB,CACd,UAAWA,EAAM,MAAM,UACvB,SAAUA,EAAM,MAAM,QACxB,EACA,KAAMA,EAAM,KACZ,QAASA,EAAM,OACjB,CACF,CAOA,eAAenB,GAAqB,CAClC,eAAAd,EACA,GAAG4B,CACL,EAA6C,CAC3C,IAAMK,EAAQ,MAAME,GAAsB,CACxC,WAAYnC,EACZ,GAAG4B,CACL,CAAC,EACD,MAAO,CACL,OAAQK,EAAM,OAAO,SAAWA,EAAM,QACtC,eAAgBA,EAAM,MACtB,KAAMA,EAAM,IACd,CACF,CAOA,eAAeZ,GACbxB,EACAe,EACAJ,EACA,CACA,IAAI4B,EACJ,GAAI,CACF,IAAMC,GAAQ,MAAMC,GAAkB,CAACzC,CAAK,EAAGW,CAAM,GAAG,IAAIX,CAAK,EACjEuC,EAAOC,GAAM,YAAcA,GAAM,OACnC,OAASE,EAAG,CACV,GAAIC,EAAaD,CAAC,EAChB,MAAMA,EAER,QAAQ,KAAK,mDAAoDA,CAAC,CACpE,CACA,OAAOE,GAAa,CAClB,GAAG7B,EAAK,IAAI,GAAK,EAAE,KAAK,EACxB,GAAGwB,GAAQ,OAAO,QACpB,CAAC,EAAE,GAAG,EAAE,CACV,CAOA,eAAeL,GACbrB,EACAF,EACA,CACA,GAAI,CACF,OAAO,MAAMkC,GAAoBhC,EAAQF,CAAM,CACjD,OAAS,EAAG,CACV,GAAIgC,EAAa,CAAC,EAChB,MAAM,EAER,QAAQ,KAAK,mDAAoD,CAAC,EAClE,MACF,CACF,CAWA,SAASjB,GACP5B,EACAe,EACAR,EACAS,EACwB,CACxB,IAAMgC,EAAmC,CAAE,UAAWjC,CAAO,EACvD0B,EAAOQ,GAAejD,EAAK,gBAAgB,kBAAkB,EACnE,OAAIyC,IACFO,EAAS,WAAaP,GAEpBzB,GAAgB,WAAaT,IAC/ByC,EAAS,UAAYhC,EAAe,WAE/BgC,CACT,CAEA,SAASlB,GAAiBD,EAA0C,CAClE,IAAMmB,EAAmC,CACvC,kBAAmBnB,EAAI,eAGvB,UAAWA,EAAI,QACf,UAAWA,EAAI,MACjB,EACA,OAAIA,EAAI,aACNmB,EAAS,aAAa,EAAInB,EAAI,YAEzBmB,CACT,CCzUM,SAAUE,GAAaC,EAAgBC,EAAS,EAAC,CACrD,IAAMC,EAAKF,EAAK,UAAUC,EAAQ,EAAI,EAEtC,OADWD,EAAK,UAAUC,EAAS,EAAG,EAAI,EAC9B,WAAgBC,CAC9B,CCHA,IAAMC,GAAa,GAWbC,GAAoB,CACxB,WAAY,IAAI,aAAa,CAAC,EAC9B,aAAc,IAAI,aAAa,CAAC,GAGlC,SAASC,GAAaC,EAAiBC,EAAkB,CAEvD,IAAMC,EAAa,IAAI,aAAaD,EAAa,CAAC,EAC5CE,EAAe,IAAI,aAAaF,EAAa,CAAC,EAC9CG,EAAO,IAAI,SAASJ,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EACpE,QAASK,EAAI,EAAGA,EAAIJ,EAAYI,GAAK,EAAG,CACtC,IAAMC,EAASD,EAAIR,GACnBK,EAAWG,EAAI,CAAC,EAAIE,GAAaH,EAAME,CAAM,EAC7CH,EAAaE,EAAI,CAAC,EAAIE,GAAaH,EAAME,EAAS,CAAC,CACrD,CACA,MAAO,CAAE,WAAAJ,EAAY,aAAAC,CAAY,CACnC,CAGA,SAASK,GAAeL,EAA4BM,EAAgB,CAClE,IAAIC,EAAK,EACLC,EAAKR,EAAa,OACtB,KAAOO,EAAKC,GAAI,CACd,IAAMC,EAAOF,EAAKC,IAAQ,EACtBR,EAAaS,CAAG,GAAMH,EACxBC,EAAKE,EAAM,EAEXD,EAAKC,CAET,CACA,OAAOF,CACT,CAEA,IAAqBG,GAArB,KAA6B,CAC3B,WAEA,MAEA,YAAY,CAAE,WAAAC,CAAU,EAAqC,CAC3D,KAAK,WAAaA,CACpB,CAEA,WAAS,CACP,OAAK,KAAK,QACR,KAAK,MAAQ,KAAK,WAAU,EAAG,MAAOC,GAAkB,CACtD,WAAK,MAAQ,OACPA,CACR,CAAC,GAEI,KAAK,KACd,CAEQ,MAAM,YAAU,CACtB,IAAMC,EAAS,MAAM,KAAK,WAAW,KAAK,EAAG,CAAC,EACxCf,EAAaM,GACjB,IAAI,SAASS,EAAO,OAAQA,EAAO,WAAYA,EAAO,UAAU,CAAC,EAEnE,GAAIf,IAAe,EACjB,OAAOF,GAAa,IAAI,WAAW,CAAC,EAAG,CAAC,EAE1C,GAAIE,EAAa,OAAO,iBAAmBJ,GACzC,MAAM,IAAI,UAAU,kBAAkB,EAExC,IAAMoB,EAAO,MAAM,KAAK,WAAW,KAAKpB,GAAaI,EAAY,CAAC,EAClE,OAAOF,GAAakB,EAAMhB,CAAU,CACtC,CAQA,MAAM,yBACJiB,EACAT,EAAgB,CAEhB,GAAIS,IAAW,EACb,MAAO,CAAE,GAAGpB,GAAO,uBAAwB,MAAS,EAEtD,GAAM,CAAE,WAAAI,EAAY,aAAAC,CAAY,EAAK,MAAM,KAAK,UAAS,EAEnDgB,EAAaX,GAAeL,EAAcM,CAAQ,EAAI,EAEtDW,EAAWZ,GAAeL,EAAcM,EAAWS,EAAS,CAAC,EACnE,MAAO,CACL,WAAYhB,EAAW,SAASiB,EAAYC,CAAQ,EACpD,aAAcjB,EAAa,SAASgB,EAAYC,CAAQ,EACxD,uBACEA,EAAWlB,EAAW,OAASA,EAAWkB,CAAQ,EAAI,OAE5D,GCtFK,IAAIC,GAAa,EAEjB,IAAIC,GAAe,EAEnB,IAAIC,GAAW,EAOf,IAAIC,EAAO,EACPC,GAAe,EACfC,GAAc,EAKlB,IAAIC,GAAc,GCtCzB,SAASC,GAAKC,EAAKC,EAAG,CACpB,OAAO,OAAO,UAAU,eAAe,KAAKD,EAAKC,CAAG,CACtD,CAEM,SAAUC,GAAOF,EAAgC,CAErD,QADIG,EAAU,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,EAC9CA,EAAQ,QAAQ,CACrB,IAAIC,EAASD,EAAQ,MAAK,EAC1B,GAAKC,EAIL,IAAI,OAAOA,GAAW,SACpB,MAAM,IAAI,UAAUA,EAAS,oBAAoB,EAGnD,QAASC,KAAKD,EACRL,GAAKK,EAAQC,CAAC,IAChBL,EAAIK,CAAC,EAAID,EAAOC,CAAC,GAGvB,CAEA,OAAOL,CACT,CAGM,SAAUM,GAAUC,EAAKC,EAAI,CACjC,OAAID,EAAI,SAAWC,EACVD,EAELA,EAAI,SACCA,EAAI,SAAS,EAAGC,CAAI,GAE7BD,EAAI,OAASC,EACND,EACT,CAEA,IAAIE,GAAU,CACZ,SAAU,SAAUC,EAAMC,EAAKC,EAAUC,EAAKC,EAAS,CACrD,GAAIH,EAAI,UAAYD,EAAK,SAAU,CACjCA,EAAK,IAAIC,EAAI,SAASC,EAAUA,EAAWC,CAAG,EAAGC,CAAS,EAC1D,MACF,CAEA,QAASC,EAAI,EAAGA,EAAIF,EAAKE,IACvBL,EAAKI,EAAYC,CAAC,EAAIJ,EAAIC,EAAWG,CAAC,CAE1C,EAEA,cAAe,SAAUC,EAAM,CAC7B,IAAID,EAAGE,EAAGJ,EAAKK,EAAKC,EAAOC,EAI3B,IADAP,EAAM,EACDE,EAAI,EAAGE,EAAID,EAAO,OAAQD,EAAIE,EAAGF,IACpCF,GAAOG,EAAOD,CAAC,EAAE,OAMnB,IAFAK,EAAS,IAAI,WAAWP,CAAG,EAC3BK,EAAM,EACDH,EAAI,EAAGE,EAAID,EAAO,OAAQD,EAAIE,EAAGF,IACpCI,EAAQH,EAAOD,CAAC,EAChBK,EAAO,IAAID,EAAOD,CAAG,EACrBA,GAAOC,EAAM,OAGf,OAAOC,CACT,EACA,KAAM,SAAUZ,EAAI,CAClB,OAAO,IAAI,WAAWA,CAAI,CAC5B,EACA,MAAO,SAAUA,EAAI,CACnB,OAAO,IAAI,YAAYA,CAAI,CAC7B,EACA,MAAO,SAAUA,EAAI,CACnB,OAAO,IAAI,WAAWA,CAAI,CAC5B,GAGEa,GAAY,CACd,SAAU,SAAUX,EAAMC,EAAKC,EAAUC,EAAKC,EAAS,CACrD,QAASC,EAAI,EAAGA,EAAIF,EAAKE,IACvBL,EAAKI,EAAYC,CAAC,EAAIJ,EAAIC,EAAWG,CAAC,CAE1C,EAEA,cAAe,SAAUC,EAAM,CAC7B,MAAO,CAAA,EAAG,OAAO,MAAM,CAAA,EAAIA,CAAM,CACnC,EACA,KAAM,SAAUR,EAAI,CAClB,OAAO,IAAI,MAAMA,CAAI,CACvB,EACA,MAAO,SAAUA,EAAI,CACnB,OAAO,IAAI,MAAMA,CAAI,CACvB,EACA,MAAO,SAAUA,EAAI,CACnB,OAAO,IAAI,MAAMA,CAAI,CACvB,GAGEc,GAAU,IAAK,CACjB,IAAMC,EACJ,OAAO,WAAe,KACtB,OAAO,YAAgB,KACvB,OAAO,WAAe,IAExB,OAAAD,GAAU,IAAMC,EACTA,CACT,EAEWC,EAAW,CAACd,EAAMC,EAAKC,EAAUC,EAAKC,KAC/CU,EAAWF,GAAO,EAAKb,GAAQ,SAAWY,GAAU,SAE7CG,EAASd,EAAMC,EAAKC,EAAUC,EAAKC,CAAS,GAG1CW,GAAgBT,IACzBS,GAAgBH,GAAO,EAAKb,GAAQ,cAAgBY,GAAU,cAEvDI,GAAcT,CAAM,GAGlBU,EAAOlB,IAChBkB,EAAOJ,GAAO,EAAKb,GAAQ,KAAOY,GAAU,KACrCK,EAAKlB,CAAI,GAGPmB,EAAQnB,IACjBmB,EAAQL,GAAO,EAAKb,GAAQ,MAAQY,GAAU,MACvCM,EAAMnB,CAAI,GAGRoB,EAAQpB,IACjBoB,EAAQN,GAAO,EAAKb,GAAQ,MAAQY,GAAU,MACvCO,EAAMpB,CAAI,GChInB,IAAIqB,GAAa,UAAA,CACf,IAAIC,EAAS,GACb,GAAI,CACF,OAAO,aAAa,MAAM,KAAM,CAAC,CAAC,CAAC,CACrC,MAAY,CACVA,EAAS,EACX,CAEA,OAAAD,GAAa,IAAMC,EACZA,CACT,EAEIC,GAAiB,UAAA,CACnB,IAAID,EAAS,GACb,GAAI,CACF,OAAO,aAAa,MAAM,KAAM,IAAI,WAAW,CAAC,CAAC,CACnD,MAAY,CACVA,EAAS,EACX,CAEA,OAAAC,GAAiB,IAAMD,EAChBA,CACT,EAEIE,GAAU,SAAUC,EAAC,CAKvB,QADIC,EAAQC,EAAK,GAAG,EACXC,EAAI,EAAGA,EAAI,IAAKA,IACvBF,EAAME,CAAC,EACLA,GAAK,IACD,EACAA,GAAK,IACH,EACAA,GAAK,IACH,EACAA,GAAK,IACH,EACAA,GAAK,IACH,EACA,EAEhB,OAAAF,EAAM,GAAG,EAAIA,EAAM,GAAG,EAAI,EAE1BF,GAAUK,GAAOH,EAAMG,CAAG,EACnBH,EAAMD,CAAC,CAChB,EAGM,SAAUK,GAAWC,EAAG,CAC5B,IAAIC,EACFP,EACAQ,EACAC,EACAC,EACAC,EAAUL,EAAI,OACdM,EAAU,EAGZ,IAAKH,EAAQ,EAAGA,EAAQE,EAASF,IAC/BT,EAAIM,EAAI,WAAWG,CAAK,GACnBT,EAAI,SAAY,OAAUS,EAAQ,EAAIE,IACzCH,EAAKF,EAAI,WAAWG,EAAQ,CAAC,GACxBD,EAAK,SAAY,QACpBR,EAAI,OAAYA,EAAI,OAAW,KAAOQ,EAAK,OAC3CC,MAGJG,GAAWZ,EAAI,IAAO,EAAIA,EAAI,KAAQ,EAAIA,EAAI,MAAU,EAAI,EAO9D,IAHAO,EAAM,IAAI,WAAWK,CAAO,EAGvBF,EAAI,EAAGD,EAAQ,EAAGC,EAAIE,EAASH,IAClCT,EAAIM,EAAI,WAAWG,CAAK,GACnBT,EAAI,SAAY,OAAUS,EAAQ,EAAIE,IACzCH,EAAKF,EAAI,WAAWG,EAAQ,CAAC,GACxBD,EAAK,SAAY,QACpBR,EAAI,OAAYA,EAAI,OAAW,KAAOQ,EAAK,OAC3CC,MAGAT,EAAI,IAENO,EAAIG,GAAG,EAAIV,EACFA,EAAI,MAEbO,EAAIG,GAAG,EAAI,IAAQV,IAAM,EACzBO,EAAIG,GAAG,EAAI,IAAQV,EAAI,IACdA,EAAI,OAEbO,EAAIG,GAAG,EAAI,IAAQV,IAAM,GACzBO,EAAIG,GAAG,EAAI,IAASV,IAAM,EAAK,GAC/BO,EAAIG,GAAG,EAAI,IAAQV,EAAI,KAGvBO,EAAIG,GAAG,EAAI,IAAQV,IAAM,GACzBO,EAAIG,GAAG,EAAI,IAASV,IAAM,GAAM,GAChCO,EAAIG,GAAG,EAAI,IAASV,IAAM,EAAK,GAC/BO,EAAIG,GAAG,EAAI,IAAQV,EAAI,IAI3B,OAAOO,CACT,CAGA,SAASM,GAAeN,EAAKO,EAAG,CAI9B,GAAIA,EAAM,QACHP,EAAI,UAAYT,GAAc,GAAQ,CAACS,EAAI,UAAYX,GAAU,GACpE,OAAO,OAAO,aAAa,MAAM,KAAMmB,GAAUR,EAAKO,CAAG,CAAC,EAK9D,QADIjB,EAAS,GACJa,EAAI,EAAGA,EAAII,EAAKJ,IACvBb,GAAU,OAAO,aAAaU,EAAIG,CAAC,CAAC,EAEtC,OAAOb,CACT,CAQM,SAAUmB,GAAcC,EAAG,CAE/B,QADIC,EAAM,IAAI,WAAWD,EAAI,MAAM,EAC1BE,EAAI,EAAGC,EAAMF,EAAI,OAAQC,EAAIC,EAAKD,IACzCD,EAAIC,CAAC,EAAIF,EAAI,WAAWE,CAAC,EAE3B,OAAOD,CACT,CAGM,SAAUG,GAAWH,EAAKI,EAAG,CACjC,IAAIH,EAAGI,EAAKC,EAAGC,EACXL,EAAME,GAAOJ,EAAI,OAKjBQ,EAAW,IAAI,MAAMN,EAAM,CAAC,EAEhC,IAAKG,EAAM,EAAGJ,EAAI,EAAGA,EAAIC,GAAO,CAG9B,GAFAI,EAAIN,EAAIC,GAAG,EAEPK,EAAI,IAAM,CACZE,EAASH,GAAK,EAAIC,EAClB,QACF,CAIA,GAFAC,EAAQE,GAAQH,CAAC,EAEbC,EAAQ,EAAG,CACbC,EAASH,GAAK,EAAI,MAClBJ,GAAKM,EAAQ,EACb,QACF,CAKA,IAFAD,GAAKC,IAAU,EAAI,GAAOA,IAAU,EAAI,GAAO,EAExCA,EAAQ,GAAKN,EAAIC,GACtBI,EAAKA,GAAK,EAAMN,EAAIC,GAAG,EAAI,GAC3BM,IAIF,GAAIA,EAAQ,EAAG,CACbC,EAASH,GAAK,EAAI,MAClB,QACF,CAEIC,EAAI,MACNE,EAASH,GAAK,EAAIC,GAElBA,GAAK,MACLE,EAASH,GAAK,EAAI,MAAWC,GAAK,GAAM,KACxCE,EAASH,GAAK,EAAI,MAAUC,EAAI,KAEpC,CAEA,OAAOI,GAAeF,EAAUH,CAAG,CACrC,CAQM,SAAUM,GAAWX,EAAKI,EAAG,CACjC,IAAIQ,EASJ,IAPAR,EAAMA,GAAOJ,EAAI,OACbI,EAAMJ,EAAI,SACZI,EAAMJ,EAAI,QAIZY,EAAMR,EAAM,EACLQ,GAAO,IAAMZ,EAAIY,CAAG,EAAI,OAAU,KACvCA,IAWF,OANIA,EAAM,GAMNA,IAAQ,EACHR,EAGFQ,EAAMH,GAAQT,EAAIY,CAAG,CAAC,EAAIR,EAAMQ,EAAMR,CAC/C,CCvNc,SAAPS,IAAyB,CAE9B,KAAK,KAAO,EAEZ,KAAK,KAAO,EAEZ,KAAK,OAAS,EAEd,KAAK,GAAK,EAEV,KAAK,MAAQ,KAEb,KAAK,UAAY,EAWjB,KAAK,KAAO,GAIZ,KAAK,QAAU,GAIf,KAAK,KAAO,EAEZ,KAAK,KAAO,EACd,CC9Bc,SAAPC,GAAyBC,EAAOC,EAAKC,EAAKC,EAAG,CAKlD,QAJIC,EAAMJ,EAAQ,MAAU,EAC1BK,EAAOL,IAAU,GAAM,MAAU,EACjCM,EAAI,EAECJ,IAAQ,GAAG,CAIhBI,EAAIJ,EAAM,IAAO,IAAOA,EACxBA,GAAOI,EAEP,GACEF,EAAMA,EAAKH,EAAIE,GAAK,EAAK,EACzBE,EAAMA,EAAKD,EAAM,QACV,EAAEE,GAEXF,GAAM,MACNC,GAAM,KACR,CAEA,OAAOD,EAAMC,GAAM,GAAM,CAC3B,CCrBA,SAASE,IAAS,CAIhB,QAHIC,EACFC,EAAQ,CAAA,EAEDC,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC5BF,EAAIE,EACJ,QAASC,EAAI,EAAGA,EAAI,EAAGA,IACrBH,EAAIA,EAAI,EAAI,WAAcA,IAAM,EAAKA,IAAM,EAE7CC,EAAMC,CAAC,EAAIF,CACb,CAEA,OAAOC,CACT,CAEA,IAAIG,GAAW,UAAA,CACb,IAAMH,EAAQF,GAAS,EACvB,OAAAK,GAAW,IAAMH,EACVA,CACT,EAEc,SAAPI,EAAuBC,EAAKC,EAAKC,EAAKC,EAAG,CAC9C,IAAIC,EAAIN,GAAQ,EACdO,EAAMF,EAAMD,EAEdF,GAAO,GAEP,QAAS,EAAIG,EAAK,EAAIE,EAAK,IACzBL,EAAOA,IAAQ,EAAKI,GAAGJ,EAAMC,EAAI,CAAC,GAAK,GAAI,EAG7C,OAAOD,EAAM,EACf,CCpCA,IAAIM,GAAM,GACNC,GAAO,GAqCG,SAAPC,GAA8BC,EAAMC,EAAK,CAC9C,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAC,EAEAC,EACAC,EACAC,EAEAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAC,EACAC,EACAC,EACAC,EAEAC,EAAOC,EAGXxB,EAAQF,EAAK,MAEbG,EAAMH,EAAK,QACXyB,EAAQzB,EAAK,MACbI,EAAOD,GAAOH,EAAK,SAAW,GAC9BK,EAAOL,EAAK,SACZ0B,EAAS1B,EAAK,OACdM,EAAMD,GAAQJ,EAAQD,EAAK,WAC3BO,EAAMF,GAAQL,EAAK,UAAY,KAE/BQ,EAAON,EAAM,KAEbO,EAAQP,EAAM,MACdQ,EAAQR,EAAM,MACdS,EAAQT,EAAM,MACdU,EAAWV,EAAM,OACjBW,EAAOX,EAAM,KACbY,EAAOZ,EAAM,KACba,EAAQb,EAAM,QACdc,EAAQd,EAAM,SACde,GAAS,GAAKf,EAAM,SAAW,EAC/BgB,GAAS,GAAKhB,EAAM,UAAY,EAKhCyB,EAAK,EAAG,CACFb,EAAO,KACTD,GAAQY,EAAMtB,GAAK,GAAKW,EACxBA,GAAQ,EACRD,GAAQY,EAAMtB,GAAK,GAAKW,EACxBA,GAAQ,GAGVK,EAAOJ,EAAMF,EAAOI,CAAK,EAEzBW,EAAO,OAAS,CAMd,GAJAR,EAAKD,IAAS,GACdN,KAAUO,EACVN,GAAQM,EACRA,EAAMD,IAAS,GAAM,IACjBC,IAAO,EAKTM,EAAOrB,GAAM,EAAIc,EAAO,cACfC,EAAK,GAAI,CAElBC,EAAMF,EAAO,MACbC,GAAM,GACFA,IACEN,EAAOM,IACTP,GAAQY,EAAMtB,GAAK,GAAKW,EACxBA,GAAQ,GAEVO,GAAOR,GAAS,GAAKO,GAAM,EAC3BP,KAAUO,EACVN,GAAQM,GAGNN,EAAO,KACTD,GAAQY,EAAMtB,GAAK,GAAKW,EACxBA,GAAQ,EACRD,GAAQY,EAAMtB,GAAK,GAAKW,EACxBA,GAAQ,GAEVK,EAAOH,EAAMH,EAAOK,CAAK,EAEzBW,EAAQ,OAAS,CAOf,GALAT,EAAKD,IAAS,GACdN,KAAUO,EACVN,GAAQM,EACRA,EAAMD,IAAS,GAAM,IAEjBC,EAAK,GAAI,CAcX,GAZAE,EAAOH,EAAO,MACdC,GAAM,GACFN,EAAOM,IACTP,GAAQY,EAAMtB,GAAK,GAAKW,EACxBA,GAAQ,EACJA,EAAOM,IACTP,GAAQY,EAAMtB,GAAK,GAAKW,EACxBA,GAAQ,IAGZQ,GAAQT,GAAS,GAAKO,GAAM,EAExBE,EAAOd,EAAM,CACfR,EAAK,IAAM,gCACXE,EAAM,KAAOL,GACb,MAAM8B,CACR,CAMA,GAJAd,KAAUO,EACVN,GAAQM,EAERA,EAAKf,EAAOC,EACRgB,EAAOF,EAAI,CAGb,GADAA,EAAKE,EAAOF,EACRA,EAAKV,GACHR,EAAM,KAAM,CACdF,EAAK,IAAM,gCACXE,EAAM,KAAOL,GACb,MAAM8B,CACR,CA0BF,GAFAJ,EAAO,EACPC,EAAcZ,EACVD,IAAU,GAGZ,GADAY,GAAQd,EAAQW,EACZA,EAAKC,EAAK,CAEZA,GAAOD,EACP,GACEM,EAAOrB,GAAM,EAAIO,EAASW,GAAM,QACzB,EAAEH,GACXG,EAAOlB,EAAOiB,EACdE,EAAcE,CAChB,UACSf,EAAQS,GAIjB,GAFAG,GAAQd,EAAQE,EAAQS,EACxBA,GAAMT,EACFS,EAAKC,EAAK,CAEZA,GAAOD,EACP,GACEM,EAAOrB,GAAM,EAAIO,EAASW,GAAM,QACzB,EAAEH,GAEX,GADAG,EAAO,EACHZ,EAAQU,EAAK,CAEfD,EAAKT,EACLU,GAAOD,EACP,GACEM,EAAOrB,GAAM,EAAIO,EAASW,GAAM,QACzB,EAAEH,GACXG,EAAOlB,EAAOiB,EACdE,EAAcE,CAChB,CACF,UAGAH,GAAQZ,EAAQS,EACZA,EAAKC,EAAK,CAEZA,GAAOD,EACP,GACEM,EAAOrB,GAAM,EAAIO,EAASW,GAAM,QACzB,EAAEH,GACXG,EAAOlB,EAAOiB,EACdE,EAAcE,CAChB,CAEF,KAAOL,EAAM,GACXK,EAAOrB,GAAM,EAAImB,EAAYD,GAAM,EACnCG,EAAOrB,GAAM,EAAImB,EAAYD,GAAM,EACnCG,EAAOrB,GAAM,EAAImB,EAAYD,GAAM,EACnCF,GAAO,EAELA,IACFK,EAAOrB,GAAM,EAAImB,EAAYD,GAAM,EAC/BF,EAAM,IACRK,EAAOrB,GAAM,EAAImB,EAAYD,GAAM,GAGzC,KAAO,CACLA,EAAOlB,EAAOiB,EACd,GAEEI,EAAOrB,GAAM,EAAIqB,EAAOH,GAAM,EAC9BG,EAAOrB,GAAM,EAAIqB,EAAOH,GAAM,EAC9BG,EAAOrB,GAAM,EAAIqB,EAAOH,GAAM,EAC9BF,GAAO,QACAA,EAAM,GACXA,IACFK,EAAOrB,GAAM,EAAIqB,EAAOH,GAAM,EAC1BF,EAAM,IACRK,EAAOrB,GAAM,EAAIqB,EAAOH,GAAM,GAGpC,CACF,UAAYH,EAAK,MAAQ,EAAG,CAE1BD,EACEH,GAAOG,EAAO,QAAwBN,GAAS,GAAKO,GAAM,EAAG,EAC/D,SAASS,CACX,KAAO,CACL7B,EAAK,IAAM,wBACXE,EAAM,KAAOL,GACb,MAAM8B,CACR,CAEA,KACF,CACF,UAAYP,EAAK,MAAQ,EAAG,CAE1BD,EAAOJ,GAAOI,EAAO,QAAwBN,GAAS,GAAKO,GAAM,EAAG,EACpE,SAASQ,CACX,SAAWR,EAAK,GAAI,CAGlBlB,EAAM,KAAOJ,GACb,MAAM6B,CACR,KAAO,CACL3B,EAAK,IAAM,8BACXE,EAAM,KAAOL,GACb,MAAM8B,CACR,CAEA,KACF,CACF,OAASxB,EAAMC,GAAQC,EAAOE,GAG9Bc,EAAMP,GAAQ,EACdX,GAAOkB,EACPP,GAAQO,GAAO,EACfR,IAAS,GAAKC,GAAQ,EAGtBd,EAAK,QAAUG,EACfH,EAAK,SAAWK,EAChBL,EAAK,SAAWG,EAAMC,EAAO,GAAKA,EAAOD,GAAO,GAAKA,EAAMC,GAC3DJ,EAAK,UAAYK,EAAOE,EAAM,KAAOA,EAAMF,GAAQ,KAAOA,EAAOE,GACjEL,EAAM,KAAOW,EACbX,EAAM,KAAOY,CAEf,CCrUA,IAAIgB,GAAU,GACVC,GAAc,IACdC,GAAe,IAGfC,GAAQ,EACRC,GAAO,EACPC,GAAQ,EAERC,GAAQ,CACuB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAC1E,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,GAGvEC,GAAO,CACyB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC1E,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxE,IAGEC,GAAQ,CACsB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GACzE,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACtE,MAAO,MAAO,MAAO,EAAG,GAGtBC,GAAO,CACwB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACzE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACxE,GAAI,IAGQ,SAAPC,EACLC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAI,CAEJ,IAAIC,EAAOD,EAAK,KAGZE,EAAM,EACNC,EAAM,EACNC,EAAM,EACRC,EAAM,EACJC,EAAO,EACPC,EAAO,EACPC,EAAO,EACPC,EAAO,EACPC,EAAO,EACPC,EAAO,EACPC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAO,KACPC,EAAa,EAEbC,EACAC,EAAQC,EAAMvC,GAAU,CAAC,EACzBwC,EAAOD,EAAMvC,GAAU,CAAC,EACxByC,EAAQ,KACRC,EAAc,EAEdC,GAAWC,EAASC,EAkCxB,IAAKzB,EAAM,EAAGA,GAAOpB,GAASoB,IAC5BkB,EAAMlB,CAAG,EAAI,EAEf,IAAKC,EAAM,EAAGA,EAAMP,EAAOO,IACzBiB,EAAM1B,EAAKC,EAAaQ,CAAG,CAAC,IAK9B,IADAG,EAAOL,EACFI,EAAMvB,GAASuB,GAAO,GACrBe,EAAMf,CAAG,IAAM,EADSA,IAC5B,CAOF,GAHIC,EAAOD,IACTC,EAAOD,GAELA,IAAQ,EAKV,OAAAR,EAAMC,GAAa,EAAK,GAAK,GAAO,IAAM,GAAM,EAKhDD,EAAMC,GAAa,EAAK,GAAK,GAAO,IAAM,GAAM,EAEhDE,EAAK,KAAO,EACL,EAET,IAAKI,EAAM,EAAGA,EAAMC,GACde,EAAMhB,CAAG,IAAM,EADIA,IACvB,CAUF,IANIE,EAAOF,IACTE,EAAOF,GAITK,EAAO,EACFP,EAAM,EAAGA,GAAOpB,GAASoB,IAG5B,GAFAO,IAAS,EACTA,GAAQW,EAAMlB,CAAG,EACbO,EAAO,EACT,MAAO,GAGX,GAAIA,EAAO,IAAMhB,IAASR,IAASoB,IAAQ,GACzC,MAAO,GAKT,IADAiB,EAAK,CAAC,EAAI,EACLpB,EAAM,EAAGA,EAAMpB,GAASoB,IAC3BoB,EAAKpB,EAAM,CAAC,EAAIoB,EAAKpB,CAAG,EAAIkB,EAAMlB,CAAG,EAIvC,IAAKC,EAAM,EAAGA,EAAMP,EAAOO,IACrBT,EAAKC,EAAaQ,CAAG,IAAM,IAC7BJ,EAAKuB,EAAK5B,EAAKC,EAAaQ,CAAG,CAAC,GAAG,EAAIA,GAkE3C,GA5BIV,IAASR,IACXgC,EAAOM,EAAQxB,EACfoB,EAAM,IACG1B,IAASP,IAClB+B,EAAO7B,GACP8B,GAAc,IACdK,EAAQlC,GACRmC,GAAe,IACfL,EAAM,MAGNF,EAAO3B,GACPiC,EAAQhC,GACR4B,EAAM,IAIRR,EAAO,EACPR,EAAM,EACND,EAAME,EACNY,EAAOlB,EACPS,EAAOD,EACPE,EAAO,EACPM,EAAM,GACNJ,EAAO,GAAKJ,EACZS,EAAOL,EAAO,EAIXjB,IAASP,IAAQwB,EAAO3B,IACxBU,IAASN,IAASuB,EAAO1B,GAE1B,MAAO,GAIT,OAAS,CAEPyC,GAAYvB,EAAMM,EACdT,EAAKI,CAAG,EAAIgB,GACdO,EAAU,EACVC,EAAW5B,EAAKI,CAAG,GACVJ,EAAKI,CAAG,EAAIgB,GACrBO,EAAUH,EAAMC,EAAczB,EAAKI,CAAG,CAAC,EACvCwB,EAAWV,EAAKC,EAAanB,EAAKI,CAAG,CAAC,IAEtCuB,EAAU,GACVC,EAAW,GAIbf,EAAO,GAAMV,EAAMM,EACnBK,EAAO,GAAKN,EACZH,EAAMS,EACN,GACEA,GAAQD,EACRf,EAAMmB,GAAQL,GAAQH,GAAQK,CAAI,EAC/BY,IAAa,GAAOC,GAAW,GAAMC,EAAW,QAC5Cd,IAAS,GAIlB,IADAD,EAAO,GAAMV,EAAM,EACZS,EAAOC,GACZA,IAAS,EAWX,GATIA,IAAS,GACXD,GAAQC,EAAO,EACfD,GAAQC,GAERD,EAAO,EAITR,IACI,EAAEiB,EAAMlB,CAAG,IAAM,EAAG,CACtB,GAAIA,IAAQG,EACV,MAEFH,EAAMR,EAAKC,EAAaI,EAAKI,CAAG,CAAC,CACnC,CAGA,GAAID,EAAMI,IAASK,EAAOI,KAAUD,EAAK,CAYvC,IAVIN,IAAS,IACXA,EAAOF,GAITU,GAAQZ,EAGRG,EAAOL,EAAMM,EACbC,EAAO,GAAKF,EACLA,EAAOC,EAAOH,IACnBI,GAAQW,EAAMb,EAAOC,CAAI,EACrB,EAAAC,GAAQ,KAGZF,IACAE,IAAS,EAKX,GADAC,GAAQ,GAAKH,EAEVd,IAASP,IAAQwB,EAAO3B,IACxBU,IAASN,IAASuB,EAAO1B,GAE1B,MAAO,GAIT8B,EAAMH,EAAOI,EAIblB,EAAMiB,CAAG,EAAKR,GAAQ,GAAOC,GAAQ,GAAOS,EAAOlB,EAAe,CACpE,CACF,CAKA,OAAIa,IAAS,IAIXd,EAAMmB,EAAOL,CAAI,EAAMT,EAAMM,GAAS,GAAO,IAAM,GAAM,GAK3DR,EAAK,KAAOM,EACL,CACT,CC/UA,IAAIsB,GAAQ,EACRC,GAAO,EACPC,GAAQ,EAURC,GAAW,EACXC,GAAU,EACVC,GAAU,EAKVC,GAAO,EACPC,GAAe,EACfC,GAAc,EAEdC,EAAiB,GACjBC,GAAe,GACfC,GAAc,GACdC,GAAc,GAIdC,GAAa,EAKbC,GAAO,EACPC,GAAQ,EACRC,GAAO,EACPC,GAAK,EACLC,GAAQ,EACRC,GAAQ,EACRC,GAAO,EACPC,GAAU,EACVC,GAAO,EACPC,GAAS,GACTC,GAAO,GACPC,EAAO,GACPC,GAAS,GACTC,GAAS,GACTC,GAAQ,GACRC,GAAO,GACPC,GAAQ,GACRC,GAAU,GACVC,GAAW,GACXC,GAAO,GACPC,GAAM,GACNC,GAAS,GACTC,GAAO,GACPC,GAAU,GACVC,GAAQ,GACRC,GAAM,GACNC,GAAQ,GACRC,GAAS,GACTC,GAAO,GACPC,EAAM,GACNC,GAAM,GACNC,GAAO,GAIPC,GAAc,IACdC,GAAe,IAOnB,SAASC,GAAQC,EAAC,CAChB,OACIA,IAAM,GAAM,MACZA,IAAM,EAAK,SACXA,EAAI,QAAW,KACfA,EAAI,MAAS,GAEnB,CAEA,SAASC,IAAY,CACnB,KAAK,KAAO,EACZ,KAAK,KAAO,GACZ,KAAK,KAAO,EACZ,KAAK,SAAW,GAChB,KAAK,MAAQ,EACb,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,MAAQ,EAEb,KAAK,KAAO,KAGZ,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,OAAS,KAGd,KAAK,KAAO,EACZ,KAAK,KAAO,EAGZ,KAAK,OAAS,EACd,KAAK,OAAS,EAGd,KAAK,MAAQ,EAGb,KAAK,QAAU,KACf,KAAK,SAAW,KAChB,KAAK,QAAU,EACf,KAAK,SAAW,EAGhB,KAAK,MAAQ,EACb,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,KAAO,EACZ,KAAK,KAAO,KAEZ,KAAK,KAAOC,EAAM,GAAG,EACrB,KAAK,KAAOA,EAAM,GAAG,EAOrB,KAAK,OAAS,KACd,KAAK,QAAU,KACf,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,IAAM,CACb,CAEM,SAAUC,GAAiBC,EAAI,CACnC,IAAIC,EAEJ,MAAI,CAACD,GAAQ,CAACA,EAAK,MACVE,GAETD,EAAQD,EAAK,MACbA,EAAK,SAAWA,EAAK,UAAYC,EAAM,MAAQ,EAC/CD,EAAK,IAAM,GACPC,EAAM,OAERD,EAAK,MAAQC,EAAM,KAAO,GAE5BA,EAAM,KAAOE,GACbF,EAAM,KAAO,EACbA,EAAM,SAAW,EACjBA,EAAM,KAAO,MACbA,EAAM,KAAO,KACbA,EAAM,KAAO,EACbA,EAAM,KAAO,EAEbA,EAAM,QAAUA,EAAM,OAASG,EAAMC,EAAW,EAChDJ,EAAM,SAAWA,EAAM,QAAUG,EAAME,EAAY,EAEnDL,EAAM,KAAO,EACbA,EAAM,KAAO,GAENM,GACT,CAEM,SAAUC,GAAaR,EAAI,CAC/B,IAAIC,EAEJ,MAAI,CAACD,GAAQ,CAACA,EAAK,MACVE,GAETD,EAAQD,EAAK,MACbC,EAAM,MAAQ,EACdA,EAAM,MAAQ,EACdA,EAAM,MAAQ,EACPF,GAAiBC,CAAI,EAC9B,CAEM,SAAUS,GAAcT,EAAMU,EAAU,CAC5C,IAAIC,EACAV,EAoBJ,MAjBI,CAACD,GAAQ,CAACA,EAAK,QAGnBC,EAAQD,EAAK,MAGTU,EAAa,GACfC,EAAO,EACPD,EAAa,CAACA,IAEdC,GAAQD,GAAc,GAAK,EACvBA,EAAa,KACfA,GAAc,KAKdA,IAAeA,EAAa,GAAKA,EAAa,KACzCR,GAELD,EAAM,SAAW,MAAQA,EAAM,QAAUS,IAC3CT,EAAM,OAAS,MAIjBA,EAAM,KAAOU,EACbV,EAAM,MAAQS,EACPF,GAAaR,CAAI,EAC1B,CAEM,SAAUY,GAAaZ,EAAMU,EAAU,CAC3C,IAAIG,EACAZ,EAEJ,OAAKD,GAKLC,EAAQ,IAAIJ,GAIZG,EAAK,MAAQC,EACbA,EAAM,OAAS,KACfY,EAAMJ,GAAcT,EAAMU,CAAU,EAChCG,IAAQN,KACVP,EAAK,MAAQ,MAERa,GAdEX,CAeX,CAgBA,IAAIY,GAAS,GAETC,GAAQC,GAEZ,SAASC,GAAYC,EAAK,CAExB,GAAIJ,GAAQ,CACV,IAAIK,EAOJ,IALAJ,GAASK,EAAM,GAAG,EAClBJ,GAAUI,EAAM,EAAE,EAGlBD,EAAM,EACCA,EAAM,KACXD,EAAM,KAAKC,GAAK,EAAI,EAEtB,KAAOA,EAAM,KACXD,EAAM,KAAKC,GAAK,EAAI,EAEtB,KAAOA,EAAM,KACXD,EAAM,KAAKC,GAAK,EAAI,EAEtB,KAAOA,EAAM,KACXD,EAAM,KAAKC,GAAK,EAAI,EAOtB,IAJAE,EAAcC,GAAMJ,EAAM,KAAM,EAAG,IAAKH,GAAQ,EAAGG,EAAM,KAAM,CAAE,KAAM,CAAC,CAAE,EAG1EC,EAAM,EACCA,EAAM,IACXD,EAAM,KAAKC,GAAK,EAAI,EAGtBE,EAAcE,GAAOL,EAAM,KAAM,EAAG,GAAIF,GAAS,EAAGE,EAAM,KAAM,CAC9D,KAAM,EACP,EAGDJ,GAAS,EACX,CAEAI,EAAM,QAAUH,GAChBG,EAAM,QAAU,EAChBA,EAAM,SAAWF,GACjBE,EAAM,SAAW,CACnB,CAgBA,SAASM,GAAaC,EAAMC,EAAKC,EAAKC,EAAI,CACxC,IAAIC,EACAX,EAAQO,EAAK,MAGjB,OAAIP,EAAM,SAAW,OACnBA,EAAM,MAAQ,GAAKA,EAAM,MACzBA,EAAM,MAAQ,EACdA,EAAM,MAAQ,EAEdA,EAAM,OAASY,EAAKZ,EAAM,KAAK,GAI7BU,GAAQV,EAAM,OAChBa,EAASb,EAAM,OAAQQ,EAAKC,EAAMT,EAAM,MAAOA,EAAM,MAAO,CAAC,EAC7DA,EAAM,MAAQ,EACdA,EAAM,MAAQA,EAAM,QAEpBW,EAAOX,EAAM,MAAQA,EAAM,MACvBW,EAAOD,IACTC,EAAOD,GAGTG,EAASb,EAAM,OAAQQ,EAAKC,EAAMC,EAAMC,EAAMX,EAAM,KAAK,EACzDU,GAAQC,EACJD,GAEFG,EAASb,EAAM,OAAQQ,EAAKC,EAAMC,EAAMA,EAAM,CAAC,EAC/CV,EAAM,MAAQU,EACdV,EAAM,MAAQA,EAAM,QAEpBA,EAAM,OAASW,EACXX,EAAM,QAAUA,EAAM,QACxBA,EAAM,MAAQ,GAEZA,EAAM,MAAQA,EAAM,QACtBA,EAAM,OAASW,KAId,CACT,CAEM,SAAUG,GAAQP,EAAMQ,EAAK,CACjC,IAAIf,EACAgB,EAAOC,EACPC,EACAC,EACAC,EAAMC,EACNC,EACAC,EACAC,EAAKC,EACLf,EACAgB,EACAC,EACAC,EAAO,EACPC,EAAWC,EAASC,EAEpBC,EAAWC,EAASC,EACpBC,EACAC,EACAC,EAAOzB,EAAK,CAAC,EACb0B,EAEAC,EAEAC,EAEF,CAAC,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAE,EAEnE,GACE,CAACjC,GACD,CAACA,EAAK,OACN,CAACA,EAAK,QACL,CAACA,EAAK,OAASA,EAAK,WAAa,EAElC,OAAOkC,EAGTzC,EAAQO,EAAK,MACTP,EAAM,OAAS0C,IACjB1C,EAAM,KAAO2C,IAIfxB,EAAMZ,EAAK,SACXU,EAASV,EAAK,OACdc,EAAOd,EAAK,UACZW,EAAOX,EAAK,QACZS,EAAQT,EAAK,MACba,EAAOb,EAAK,SACZe,EAAOtB,EAAM,KACbuB,EAAOvB,EAAM,KAGbwB,EAAMJ,EACNK,EAAOJ,EACPe,EAAMQ,GAGNC,EAAW,OACT,OAAQ7C,EAAM,KAAM,CAClB,KAAK8C,GACH,GAAI9C,EAAM,OAAS,EAAG,CACpBA,EAAM,KAAO2C,GACb,KACF,CAEA,KAAOpB,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEA,GAAIvB,EAAM,KAAO,GAAKsB,IAAS,MAAQ,CAErCtB,EAAM,MAAQ,EAEdqC,EAAK,CAAC,EAAIf,EAAO,IACjBe,EAAK,CAAC,EAAKf,IAAS,EAAK,IACzBtB,EAAM,MAAQ+C,EAAM/C,EAAM,MAAOqC,EAAM,EAAG,CAAC,EAI3Cf,EAAO,EACPC,EAAO,EAEPvB,EAAM,KAAOgD,GACb,KACF,CAKA,GAJAhD,EAAM,MAAQ,EACVA,EAAM,OACRA,EAAM,KAAK,KAAO,IAGlB,EAAEA,EAAM,KAAO,OACZsB,EAAO,MAAqB,IAAMA,GAAQ,IAAM,GACnD,CACAf,EAAK,IAAM,yBACXP,EAAM,KAAOiD,EACb,KACF,CACA,IAAK3B,EAAO,MAAsB4B,GAAY,CAC5C3C,EAAK,IAAM,6BACXP,EAAM,KAAOiD,EACb,KACF,CAMA,GAJA3B,KAAU,EACVC,GAAQ,EAERY,GAAOb,EAAO,IAAoB,EAC9BtB,EAAM,QAAU,EAClBA,EAAM,MAAQmC,UACLA,EAAMnC,EAAM,MAAO,CAC5BO,EAAK,IAAM,sBACXP,EAAM,KAAOiD,EACb,KACF,CACAjD,EAAM,KAAO,GAAKmC,EAElB5B,EAAK,MAAQP,EAAM,MAAQ,EAC3BA,EAAM,KAAOsB,EAAO,IAAQ6B,GAAST,EAErCpB,EAAO,EACPC,EAAO,EAEP,MACF,KAAKyB,GAEH,KAAOzB,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAGA,GADAvB,EAAM,MAAQsB,GACTtB,EAAM,MAAQ,OAAUkD,GAAY,CACvC3C,EAAK,IAAM,6BACXP,EAAM,KAAOiD,EACb,KACF,CACA,GAAIjD,EAAM,MAAQ,MAAQ,CACxBO,EAAK,IAAM,2BACXP,EAAM,KAAOiD,EACb,KACF,CACIjD,EAAM,OACRA,EAAM,KAAK,KAAQsB,GAAQ,EAAK,GAE9BtB,EAAM,MAAQ,MAEhBqC,EAAK,CAAC,EAAIf,EAAO,IACjBe,EAAK,CAAC,EAAKf,IAAS,EAAK,IACzBtB,EAAM,MAAQ+C,EAAM/C,EAAM,MAAOqC,EAAM,EAAG,CAAC,GAI7Cf,EAAO,EACPC,EAAO,EAEPvB,EAAM,KAAOoD,GAEf,KAAKA,GAEH,KAAO7B,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEIvB,EAAM,OACRA,EAAM,KAAK,KAAOsB,GAEhBtB,EAAM,MAAQ,MAEhBqC,EAAK,CAAC,EAAIf,EAAO,IACjBe,EAAK,CAAC,EAAKf,IAAS,EAAK,IACzBe,EAAK,CAAC,EAAKf,IAAS,GAAM,IAC1Be,EAAK,CAAC,EAAKf,IAAS,GAAM,IAC1BtB,EAAM,MAAQ+C,EAAM/C,EAAM,MAAOqC,EAAM,EAAG,CAAC,GAI7Cf,EAAO,EACPC,EAAO,EAEPvB,EAAM,KAAOqD,GAEf,KAAKA,GAEH,KAAO9B,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEIvB,EAAM,OACRA,EAAM,KAAK,OAASsB,EAAO,IAC3BtB,EAAM,KAAK,GAAKsB,GAAQ,GAEtBtB,EAAM,MAAQ,MAEhBqC,EAAK,CAAC,EAAIf,EAAO,IACjBe,EAAK,CAAC,EAAKf,IAAS,EAAK,IACzBtB,EAAM,MAAQ+C,EAAM/C,EAAM,MAAOqC,EAAM,EAAG,CAAC,GAI7Cf,EAAO,EACPC,EAAO,EAEPvB,EAAM,KAAOsD,GAEf,KAAKA,GACH,GAAItD,EAAM,MAAQ,KAAQ,CAExB,KAAOuB,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEAvB,EAAM,OAASsB,EACXtB,EAAM,OACRA,EAAM,KAAK,UAAYsB,GAErBtB,EAAM,MAAQ,MAEhBqC,EAAK,CAAC,EAAIf,EAAO,IACjBe,EAAK,CAAC,EAAKf,IAAS,EAAK,IACzBtB,EAAM,MAAQ+C,EAAM/C,EAAM,MAAOqC,EAAM,EAAG,CAAC,GAI7Cf,EAAO,EACPC,EAAO,CAET,MAAWvB,EAAM,OACfA,EAAM,KAAK,MAAQ,MAErBA,EAAM,KAAOuD,GAEf,KAAKA,GACH,GAAIvD,EAAM,MAAQ,OAChBU,EAAOV,EAAM,OACTU,EAAOU,IACTV,EAAOU,GAELV,IACEV,EAAM,OACRmC,EAAMnC,EAAM,KAAK,UAAYA,EAAM,OAC9BA,EAAM,KAAK,QAEdA,EAAM,KAAK,MAAQ,IAAI,MAAMA,EAAM,KAAK,SAAS,GAEnDa,EACEb,EAAM,KAAK,MACXgB,EACAE,EAGAR,EAEAyB,CAAG,GAMHnC,EAAM,MAAQ,MAChBA,EAAM,MAAQ+C,EAAM/C,EAAM,MAAOgB,EAAON,EAAMQ,CAAI,GAEpDE,GAAQV,EACRQ,GAAQR,EACRV,EAAM,QAAUU,GAEdV,EAAM,QACR,MAAM6C,EAGV7C,EAAM,OAAS,EACfA,EAAM,KAAOwD,GAEf,KAAKA,GACH,GAAIxD,EAAM,MAAQ,KAAQ,CACxB,GAAIoB,IAAS,EACX,MAAMyB,EAERnC,EAAO,EACP,GAEEyB,EAAMnB,EAAME,EAAOR,GAAM,EAGvBV,EAAM,MACNmC,GACAnC,EAAM,OAAS,QAEfA,EAAM,KAAK,MAAQ,OAAO,aAAamC,CAAG,SAErCA,GAAOzB,EAAOU,GAOvB,GALIpB,EAAM,MAAQ,MAChBA,EAAM,MAAQ+C,EAAM/C,EAAM,MAAOgB,EAAON,EAAMQ,CAAI,GAEpDE,GAAQV,EACRQ,GAAQR,EACJyB,EACF,MAAMU,CAEV,MAAW7C,EAAM,OACfA,EAAM,KAAK,KAAO,MAEpBA,EAAM,OAAS,EACfA,EAAM,KAAOyD,GAEf,KAAKA,GACH,GAAIzD,EAAM,MAAQ,KAAQ,CACxB,GAAIoB,IAAS,EACX,MAAMyB,EAERnC,EAAO,EACP,GACEyB,EAAMnB,EAAME,EAAOR,GAAM,EAGvBV,EAAM,MACNmC,GACAnC,EAAM,OAAS,QAEfA,EAAM,KAAK,SAAW,OAAO,aAAamC,CAAG,SAExCA,GAAOzB,EAAOU,GAMvB,GALIpB,EAAM,MAAQ,MAChBA,EAAM,MAAQ+C,EAAM/C,EAAM,MAAOgB,EAAON,EAAMQ,CAAI,GAEpDE,GAAQV,EACRQ,GAAQR,EACJyB,EACF,MAAMU,CAEV,MAAW7C,EAAM,OACfA,EAAM,KAAK,QAAU,MAEvBA,EAAM,KAAO0D,GAEf,KAAKA,GACH,GAAI1D,EAAM,MAAQ,IAAQ,CAExB,KAAOuB,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEA,GAAID,KAAUtB,EAAM,MAAQ,OAAS,CACnCO,EAAK,IAAM,sBACXP,EAAM,KAAOiD,EACb,KACF,CAEA3B,EAAO,EACPC,EAAO,CAET,CACIvB,EAAM,OACRA,EAAM,KAAK,KAAQA,EAAM,OAAS,EAAK,EACvCA,EAAM,KAAK,KAAO,IAEpBO,EAAK,MAAQP,EAAM,MAAQ,EAC3BA,EAAM,KAAO0C,EACb,MACF,KAAKS,GAEH,KAAO5B,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEAhB,EAAK,MAAQP,EAAM,MAAQ2D,GAAQrC,CAAI,EAEvCA,EAAO,EACPC,EAAO,EAEPvB,EAAM,KAAO4D,GAEf,KAAKA,GACH,GAAI5D,EAAM,WAAa,EAErB,OAAAO,EAAK,SAAWY,EAChBZ,EAAK,UAAYc,EACjBd,EAAK,QAAUW,EACfX,EAAK,SAAWa,EAChBpB,EAAM,KAAOsB,EACbtB,EAAM,KAAOuB,EAENsC,GAETtD,EAAK,MAAQP,EAAM,MAAQ,EAC3BA,EAAM,KAAO0C,EAEf,KAAKA,EACH,GAAI3B,IAAU+C,IAAW/C,IAAUgD,GACjC,MAAMlB,EAGV,KAAKF,GACH,GAAI3C,EAAM,KAAM,CAEdsB,KAAUC,EAAO,EACjBA,GAAQA,EAAO,EAEfvB,EAAM,KAAOgE,GACb,KACF,CAEA,KAAOzC,EAAO,GAAG,CACf,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAQA,OANAvB,EAAM,KAAOsB,EAAO,EAEpBA,KAAU,EACVC,GAAQ,EAGAD,EAAO,EAAkB,CAC/B,IAAK,GAGHtB,EAAM,KAAOiE,GACb,MACF,IAAK,GAKH,GAJAlE,GAAYC,CAAK,EAGjBA,EAAM,KAAOkE,GACTnD,IAAUgD,GAAS,CAErBzC,KAAU,EACVC,GAAQ,EAER,MAAMsB,CACR,CACA,MACF,IAAK,GAGH7C,EAAM,KAAOmE,GACb,MACF,IAAK,GACH5D,EAAK,IAAM,qBACXP,EAAM,KAAOiD,CACjB,CAEA3B,KAAU,EACVC,GAAQ,EAER,MACF,KAAK0C,GAMH,IAJA3C,KAAUC,EAAO,EACjBA,GAAQA,EAAO,EAGRA,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEA,IAAKD,EAAO,UAAcA,IAAS,GAAM,OAAS,CAChDf,EAAK,IAAM,+BACXP,EAAM,KAAOiD,EACb,KACF,CASA,GARAjD,EAAM,OAASsB,EAAO,MAItBA,EAAO,EACPC,EAAO,EAEPvB,EAAM,KAAOoE,GACTrD,IAAUgD,GACZ,MAAMlB,EAGV,KAAKuB,GACHpE,EAAM,KAAOqE,GAEf,KAAKA,GAEH,GADA3D,EAAOV,EAAM,OACTU,EAAM,CAOR,GANIA,EAAOU,IACTV,EAAOU,GAELV,EAAOW,IACTX,EAAOW,GAELX,IAAS,EACX,MAAMmC,EAGRhC,EAASI,EAAQD,EAAOE,EAAMR,EAAMS,CAAG,EAEvCC,GAAQV,EACRQ,GAAQR,EACRW,GAAQX,EACRS,GAAOT,EACPV,EAAM,QAAUU,EAChB,KACF,CAEAV,EAAM,KAAO0C,EACb,MACF,KAAKyB,GAEH,KAAO5C,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAkBA,GAhBAvB,EAAM,MAAQsB,EAAO,IAAoB,IAEzCA,KAAU,EACVC,GAAQ,EAERvB,EAAM,OAASsB,EAAO,IAAoB,EAE1CA,KAAU,EACVC,GAAQ,EAERvB,EAAM,OAASsB,EAAO,IAAoB,EAE1CA,KAAU,EACVC,GAAQ,EAGJvB,EAAM,KAAO,KAAOA,EAAM,MAAQ,GAAI,CACxCO,EAAK,IAAM,sCACXP,EAAM,KAAOiD,EACb,KACF,CAGAjD,EAAM,KAAO,EACbA,EAAM,KAAOsE,GAEf,KAAKA,GACH,KAAOtE,EAAM,KAAOA,EAAM,OAAO,CAE/B,KAAOuB,EAAO,GAAG,CACf,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEAvB,EAAM,KAAKwC,EAAMxC,EAAM,MAAM,CAAC,EAAIsB,EAAO,EAEzCA,KAAU,EACVC,GAAQ,CAEV,CACA,KAAOvB,EAAM,KAAO,IAClBA,EAAM,KAAKwC,EAAMxC,EAAM,MAAM,CAAC,EAAI,EAsBpC,GAhBAA,EAAM,QAAUA,EAAM,OACtBA,EAAM,QAAU,EAEhBsC,EAAO,CAAE,KAAMtC,EAAM,OAAO,EAC5BoC,EAAMjC,EACJoE,GACAvE,EAAM,KACN,EACA,GACAA,EAAM,QACN,EACAA,EAAM,KACNsC,CAAI,EAENtC,EAAM,QAAUsC,EAAK,KAEjBF,EAAK,CACP7B,EAAK,IAAM,2BACXP,EAAM,KAAOiD,EACb,KACF,CAEAjD,EAAM,KAAO,EACbA,EAAM,KAAOwE,GAEf,KAAKA,GACH,KAAOxE,EAAM,KAAOA,EAAM,KAAOA,EAAM,OAAO,CAC5C,KACE4B,EACE5B,EAAM,QACJsB,GAAS,GAAKtB,EAAM,SAAW,CAAE,EAErC6B,EAAYD,IAAS,GACrBE,EAAWF,IAAS,GAAM,IAC1BG,EAAWH,EAAO,MAEd,EAAAC,GAAaN,IATV,CAaP,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CAEV,CACA,GAAIQ,EAAW,GAEbT,KAAUO,EACVN,GAAQM,EAER7B,EAAM,KAAKA,EAAM,MAAM,EAAI+B,MACtB,CACL,GAAIA,IAAa,GAAI,CAGnB,IADAQ,EAAIV,EAAY,EACTN,EAAOgB,GAAG,CACf,GAAInB,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAMA,GAHAD,KAAUO,EACVN,GAAQM,EAEJ7B,EAAM,OAAS,EAAG,CACpBO,EAAK,IAAM,4BACXP,EAAM,KAAOiD,EACb,KACF,CACAd,EAAMnC,EAAM,KAAKA,EAAM,KAAO,CAAC,EAC/BU,EAAO,GAAKY,EAAO,GAEnBA,KAAU,EACVC,GAAQ,CAEV,SAAWQ,IAAa,GAAI,CAG1B,IADAQ,EAAIV,EAAY,EACTN,EAAOgB,GAAG,CACf,GAAInB,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAGAD,KAAUO,EACVN,GAAQM,EAERM,EAAM,EACNzB,EAAO,GAAKY,EAAO,GAEnBA,KAAU,EACVC,GAAQ,CAEV,KAAO,CAGL,IADAgB,EAAIV,EAAY,EACTN,EAAOgB,GAAG,CACf,GAAInB,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAGAD,KAAUO,EACVN,GAAQM,EAERM,EAAM,EACNzB,EAAO,IAAMY,EAAO,KAEpBA,KAAU,EACVC,GAAQ,CAEV,CACA,GAAIvB,EAAM,KAAOU,EAAOV,EAAM,KAAOA,EAAM,MAAO,CAChDO,EAAK,IAAM,4BACXP,EAAM,KAAOiD,EACb,KACF,CACA,KAAOvC,KACLV,EAAM,KAAKA,EAAM,MAAM,EAAImC,CAE/B,CACF,CAGA,GAAInC,EAAM,OAASiD,EACjB,MAIF,GAAIjD,EAAM,KAAK,GAAG,IAAM,EAAG,CACzBO,EAAK,IAAM,uCACXP,EAAM,KAAOiD,EACb,KACF,CAuBA,GAlBAjD,EAAM,QAAU,EAEhBsC,EAAO,CAAE,KAAMtC,EAAM,OAAO,EAC5BoC,EAAMjC,EACJC,GACAJ,EAAM,KACN,EACAA,EAAM,KACNA,EAAM,QACN,EACAA,EAAM,KACNsC,CAAI,EAINtC,EAAM,QAAUsC,EAAK,KAGjBF,EAAK,CACP7B,EAAK,IAAM,8BACXP,EAAM,KAAOiD,EACb,KACF,CAsBA,GApBAjD,EAAM,SAAW,EAGjBA,EAAM,SAAWA,EAAM,QACvBsC,EAAO,CAAE,KAAMtC,EAAM,QAAQ,EAC7BoC,EAAMjC,EACJE,GACAL,EAAM,KACNA,EAAM,KACNA,EAAM,MACNA,EAAM,SACN,EACAA,EAAM,KACNsC,CAAI,EAINtC,EAAM,SAAWsC,EAAK,KAGlBF,EAAK,CACP7B,EAAK,IAAM,wBACXP,EAAM,KAAOiD,EACb,KACF,CAGA,GADAjD,EAAM,KAAOkE,GACTnD,IAAUgD,GACZ,MAAMlB,EAGV,KAAKqB,GACHlE,EAAM,KAAOyE,GAEf,KAAKA,GACH,GAAIrD,GAAQ,GAAKC,GAAQ,IAAK,CAE5Bd,EAAK,SAAWY,EAChBZ,EAAK,UAAYc,EACjBd,EAAK,QAAUW,EACfX,EAAK,SAAWa,EAChBpB,EAAM,KAAOsB,EACbtB,EAAM,KAAOuB,EAEbmD,GAAanE,EAAMkB,CAAI,EAEvBN,EAAMZ,EAAK,SACXU,EAASV,EAAK,OACdc,EAAOd,EAAK,UACZW,EAAOX,EAAK,QACZS,EAAQT,EAAK,MACba,EAAOb,EAAK,SACZe,EAAOtB,EAAM,KACbuB,EAAOvB,EAAM,KAGTA,EAAM,OAAS0C,IACjB1C,EAAM,KAAO,IAEf,KACF,CAEA,IADAA,EAAM,KAAO,EAEX4B,EACE5B,EAAM,QACJsB,GAAS,GAAKtB,EAAM,SAAW,CAAE,EAErC6B,EAAYD,IAAS,GACrBE,EAAWF,IAAS,GAAM,IAC1BG,EAAWH,EAAO,MAEd,EAAAC,GAAaN,IATV,CAaP,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CAEV,CACA,GAAIO,IAAYA,EAAU,OAAU,EAAG,CAIrC,IAHAE,EAAYH,EACZI,EAAUH,EACVI,EAAWH,EAETH,EACE5B,EAAM,QACJkC,IACIZ,GACE,GAAMU,EAAYC,GAClB,IACFD,EAAU,EAElBH,EAAYD,IAAS,GACrBE,EAAWF,IAAS,GAAM,IAC1BG,EAAWH,EAAO,MAEd,EAAAI,EAAYH,GAAaN,IAbtB,CAiBP,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CAEV,CAEAD,KAAUU,EACVT,GAAQS,EAERhC,EAAM,MAAQgC,CAChB,CAOA,GALAV,KAAUO,EACVN,GAAQM,EAER7B,EAAM,MAAQ6B,EACd7B,EAAM,OAAS+B,EACXD,IAAY,EAAG,CAIjB9B,EAAM,KAAO2E,GACb,KACF,CACA,GAAI7C,EAAU,GAAI,CAEhB9B,EAAM,KAAO,GACbA,EAAM,KAAO0C,EACb,KACF,CACA,GAAIZ,EAAU,GAAI,CAChBvB,EAAK,IAAM,8BACXP,EAAM,KAAOiD,EACb,KACF,CACAjD,EAAM,MAAQ8B,EAAU,GACxB9B,EAAM,KAAO4E,GAEf,KAAKA,GACH,GAAI5E,EAAM,MAAO,CAGf,IADAuC,EAAIvC,EAAM,MACHuB,EAAOgB,GAAG,CACf,GAAInB,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEAvB,EAAM,QAAUsB,GAAS,GAAKtB,EAAM,OAAS,EAE7CsB,KAAUtB,EAAM,MAChBuB,GAAQvB,EAAM,MAEdA,EAAM,MAAQA,EAAM,KACtB,CAEAA,EAAM,IAAMA,EAAM,OAClBA,EAAM,KAAO6E,GAEf,KAAKA,GACH,KACEjD,EACE5B,EAAM,SACJsB,GAAS,GAAKtB,EAAM,UAAY,CAAE,EAEtC6B,EAAYD,IAAS,GACrBE,EAAWF,IAAS,GAAM,IAC1BG,EAAWH,EAAO,MAEd,EAAAC,GAAaN,IATV,CAaP,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CAEV,CACA,IAAKO,EAAU,OAAU,EAAG,CAI1B,IAHAE,EAAYH,EACZI,EAAUH,EACVI,EAAWH,EAETH,EACE5B,EAAM,SACJkC,IACIZ,GACE,GAAMU,EAAYC,GAClB,IACFD,EAAU,EAElBH,EAAYD,IAAS,GACrBE,EAAWF,IAAS,GAAM,IAC1BG,EAAWH,EAAO,MAEd,EAAAI,EAAYH,GAAaN,IAbtB,CAiBP,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CAEV,CAEAD,KAAUU,EACVT,GAAQS,EAERhC,EAAM,MAAQgC,CAChB,CAMA,GAJAV,KAAUO,EACVN,GAAQM,EAER7B,EAAM,MAAQ6B,EACVC,EAAU,GAAI,CAChBvB,EAAK,IAAM,wBACXP,EAAM,KAAOiD,EACb,KACF,CACAjD,EAAM,OAAS+B,EACf/B,EAAM,MAAQ8B,EAAU,GACxB9B,EAAM,KAAO8E,GAEf,KAAKA,GACH,GAAI9E,EAAM,MAAO,CAGf,IADAuC,EAAIvC,EAAM,MACHuB,EAAOgB,GAAG,CACf,GAAInB,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEAvB,EAAM,QAAUsB,GAAS,GAAKtB,EAAM,OAAS,EAE7CsB,KAAUtB,EAAM,MAChBuB,GAAQvB,EAAM,MAEdA,EAAM,MAAQA,EAAM,KACtB,CAEA,GAAIA,EAAM,OAASA,EAAM,KAAM,CAC7BO,EAAK,IAAM,gCACXP,EAAM,KAAOiD,EACb,KACF,CAGAjD,EAAM,KAAO+E,GAEf,KAAKA,GACH,GAAI1D,IAAS,EACX,MAAMwB,EAGR,GADAnC,EAAOe,EAAOJ,EACVrB,EAAM,OAASU,EAAM,CAGvB,GADAA,EAAOV,EAAM,OAASU,EAClBA,EAAOV,EAAM,OACXA,EAAM,KAAM,CACdO,EAAK,IAAM,gCACXP,EAAM,KAAOiD,EACb,KACF,CAiBEvC,EAAOV,EAAM,OACfU,GAAQV,EAAM,MACd0B,EAAO1B,EAAM,MAAQU,GAErBgB,EAAO1B,EAAM,MAAQU,EAEnBA,EAAOV,EAAM,SACfU,EAAOV,EAAM,QAEf2B,EAAc3B,EAAM,MACtB,MAEE2B,EAAcV,EACdS,EAAOP,EAAMnB,EAAM,OACnBU,EAAOV,EAAM,OAEXU,EAAOW,IACTX,EAAOW,GAETA,GAAQX,EACRV,EAAM,QAAUU,EAChB,GACEO,EAAOE,GAAK,EAAIQ,EAAYD,GAAM,QAC3B,EAAEhB,GACPV,EAAM,SAAW,IACnBA,EAAM,KAAOyE,IAEf,MACF,KAAKE,GACH,GAAItD,IAAS,EACX,MAAMwB,EAER5B,EAAOE,GAAK,EAAInB,EAAM,OACtBqB,IACArB,EAAM,KAAOyE,GACb,MACF,KAAKT,GACH,GAAIhE,EAAM,KAAM,CAEd,KAAOuB,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IAEAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAcA,GAZAE,GAAQJ,EACRd,EAAK,WAAakB,EAClBzB,EAAM,OAASyB,EACXA,IACFlB,EAAK,MAAQP,EAAM,MAEjBA,EAAM,MACF+C,EAAM/C,EAAM,MAAOiB,EAAQQ,EAAMN,EAAMM,CAAI,EAC3CuD,GAAQhF,EAAM,MAAOiB,EAAQQ,EAAMN,EAAMM,CAAI,GAErDA,EAAOJ,GAEFrB,EAAM,MAAQsB,EAAOqC,GAAQrC,CAAI,KAAOtB,EAAM,MAAO,CACxDO,EAAK,IAAM,uBACXP,EAAM,KAAOiD,EACb,KACF,CAEA3B,EAAO,EACPC,EAAO,CAGT,CACAvB,EAAM,KAAOiF,GAEf,KAAKA,GACH,GAAIjF,EAAM,MAAQA,EAAM,MAAO,CAE7B,KAAOuB,EAAO,IAAI,CAChB,GAAIH,IAAS,EACX,MAAMyB,EAERzB,IACAE,GAAQN,EAAME,GAAM,GAAKK,EACzBA,GAAQ,CACV,CAEA,GAAID,KAAUtB,EAAM,MAAQ,YAAa,CACvCO,EAAK,IAAM,yBACXP,EAAM,KAAOiD,EACb,KACF,CAEA3B,EAAO,EACPC,EAAO,CAGT,CACAvB,EAAM,KAAOkF,GAEf,KAAKA,GACH9C,EAAM+C,GACN,MAAMtC,EACR,KAAKI,EACHb,EAAMgD,GACN,MAAMvC,EACR,KAAKwC,GACH,OAAOC,GACT,KAAKC,GAEL,QACE,OAAO9C,CACX,CAqBF,OARAlC,EAAK,SAAWY,EAChBZ,EAAK,UAAYc,EACjBd,EAAK,QAAUW,EACfX,EAAK,SAAWa,EAChBpB,EAAM,KAAOsB,EACbtB,EAAM,KAAOuB,GAIXvB,EAAM,OACLyB,IAASlB,EAAK,WACbP,EAAM,KAAOiD,IACZjD,EAAM,KAAOgE,IAASjD,IAAUyE,MAE/BlF,GAAaC,EAAMA,EAAK,OAAQA,EAAK,SAAUkB,EAAOlB,EAAK,SAAS,GACtEP,EAAM,KAAOqF,GACNC,KAGX9D,GAAOjB,EAAK,SACZkB,GAAQlB,EAAK,UACbA,EAAK,UAAYiB,EACjBjB,EAAK,WAAakB,EAClBzB,EAAM,OAASyB,EACXzB,EAAM,MAAQyB,IAChBlB,EAAK,MAAQP,EAAM,MAEjBA,EAAM,MACF+C,EAAM/C,EAAM,MAAOiB,EAAQQ,EAAMlB,EAAK,SAAWkB,CAAI,EACrDuD,GAAQhF,EAAM,MAAOiB,EAAQQ,EAAMlB,EAAK,SAAWkB,CAAI,GAE/DlB,EAAK,UACHP,EAAM,MACLA,EAAM,KAAO,GAAK,IAClBA,EAAM,OAAS0C,EAAO,IAAM,IAC5B1C,EAAM,OAASkE,IAAQlE,EAAM,OAASoE,GAAQ,IAAM,IACjD5C,IAAQ,GAAKC,IAAS,GAAMV,IAAUyE,KAAapD,IAAQQ,KAC/DR,EAAMqD,IAEDrD,EACT,CAEM,SAAUsD,GAAWnF,EAAI,CAC7B,GAAI,CAACA,GAAQ,CAACA,EAAK,MACjB,OAAOkC,EAGT,IAAIzC,EAAQO,EAAK,MACjB,OAAIP,EAAM,SACRA,EAAM,OAAS,MAEjBO,EAAK,MAAQ,KACNqC,EACT,CAEM,SAAU+C,GAAiBpF,EAAMqF,EAAI,CACzC,IAAI5F,EAOJ,MAJI,CAACO,GAAQ,CAACA,EAAK,QAGnBP,EAAQO,EAAK,OACRP,EAAM,KAAO,KAAO,GAChByC,GAITzC,EAAM,KAAO4F,EACbA,EAAK,KAAO,GACLhD,GACT,CAEM,SAAUiD,GAAqBtF,EAAMuF,EAAU,CACnD,IAAIC,EAAaD,EAAW,OAExB9F,EACAgG,EACA5D,EAQJ,MALI,CAAC7B,GAAwB,CAACA,EAAK,QAGnCP,EAAQO,EAAK,MAETP,EAAM,OAAS,GAAKA,EAAM,OAAS4D,IAC9BnB,EAILzC,EAAM,OAAS4D,KACjBoC,EAAS,EAETA,EAAShB,GAAQgB,EAAQF,EAAYC,EAAY,CAAC,EAC9CC,IAAWhG,EAAM,OACZoF,IAKXhD,EAAM9B,GAAaC,EAAMuF,EAAYC,EAAYA,CAAU,EACvD3D,GACFpC,EAAM,KAAOqF,GACNC,KAETtF,EAAM,SAAW,EAEV4C,IACT,CCxpDA,IAAAqD,GAAe,CACb,EAAG,kBACH,EAAG,aACH,EAAG,GACH,KAAM,aACN,KAAM,eACN,KAAM,aACN,KAAM,sBACN,KAAM,eACN,KAAM,wBCTM,SAAPC,IAAwB,CAE7B,KAAK,MAAQ,KACb,KAAK,QAAU,EAEf,KAAK,SAAW,EAEhB,KAAK,SAAW,EAEhB,KAAK,OAAS,KACd,KAAK,SAAW,EAEhB,KAAK,UAAY,EAEjB,KAAK,UAAY,EAEjB,KAAK,IAAM,GAEX,KAAK,MAAQ,KAEb,KAAK,UAAY,EAEjB,KAAK,MAAQ,CACf,CCTA,IAAIC,GAAW,OAAO,UAAU,SAgFnBC,GAAP,MAAOC,CAAO,CAClB,YAAYC,EAAO,CACjB,GAAI,EAAE,gBAAgBD,GAAU,OAAO,IAAIA,EAAQC,CAAO,EAE1D,KAAK,QAAUC,GACb,CACE,UAAW,MACX,WAAY,EACZ,GAAI,IAEND,GAAW,CAAA,CAAE,EAGf,IAAIE,EAAM,KAAK,QAIXA,EAAI,KAAOA,EAAI,YAAc,GAAKA,EAAI,WAAa,KACrDA,EAAI,WAAa,CAACA,EAAI,WAClBA,EAAI,aAAe,IACrBA,EAAI,WAAa,MAMnBA,EAAI,YAAc,GAClBA,EAAI,WAAa,IACjB,EAAEF,GAAWA,EAAQ,cAErBE,EAAI,YAAc,IAKhBA,EAAI,WAAa,IAAMA,EAAI,WAAa,KAGrCA,EAAI,WAAa,MAAQ,IAC5BA,EAAI,YAAc,IAItB,KAAK,IAAM,EACX,KAAK,IAAM,GACX,KAAK,MAAQ,GACb,KAAK,OAAS,CAAA,EAEd,KAAK,KAAO,IAAIC,GAChB,KAAK,KAAK,UAAY,EAEtB,IAAIC,EAASC,GAAa,KAAK,KAAMH,EAAI,UAAU,EAEnD,GAAIE,IAAWE,EACb,MAAM,IAAI,MAAMC,GAAIH,CAAM,CAAC,EAQ7B,GALA,KAAK,OAAS,IAAII,GAElBC,GAAiB,KAAK,KAAM,KAAK,MAAM,EAGnCP,EAAI,aAEF,OAAOA,EAAI,YAAe,SAC5BA,EAAI,WAAaQ,GAAWR,EAAI,UAAU,EACjCL,GAAS,KAAKK,EAAI,UAAU,IAAM,yBAC3CA,EAAI,WAAa,IAAI,WAAWA,EAAI,UAAU,GAE5CA,EAAI,MAENE,EAASO,GAAqB,KAAK,KAAMT,EAAI,UAAU,EACnDE,IAAWE,IACb,MAAM,IAAI,MAAMC,GAAIH,CAAM,CAAC,CAInC,CA8BA,KAAKQ,EAAMC,EAAI,CACb,IAAIC,EAAO,KAAK,KACZC,EAAY,KAAK,QAAQ,UACzBC,EAAa,KAAK,QAAQ,WAC1BZ,EAAQa,EACRC,EAAeC,EAAMC,EACrBC,EAIAC,EAAgB,GAEpB,GAAI,KAAK,MACP,MAAO,GAETL,EAAQJ,IAAS,CAAC,CAACA,EAAOA,EAAOA,IAAS,GAAOU,GAAWC,GAGxD,OAAOZ,GAAS,SAElBE,EAAK,MAAQW,GAAcb,CAAI,EACtBf,GAAS,KAAKe,CAAI,IAAM,uBACjCE,EAAK,MAAQ,IAAI,WAAWF,CAAI,EAEhCE,EAAK,MAAQF,EAGfE,EAAK,QAAU,EACfA,EAAK,SAAWA,EAAK,MAAM,OAE3B,EAAG,CA2BD,GA1BIA,EAAK,YAAc,IACrBA,EAAK,OAASY,EAAKX,CAAS,EAC5BD,EAAK,SAAW,EAChBA,EAAK,UAAYC,GAGnBX,EAASuB,GAAYb,EAAMU,EAAU,EAEjCpB,IAAWwB,IAAeZ,IAExB,OAAOA,GAAe,SACxBK,EAAOX,GAAWM,CAAU,EACnBnB,GAAS,KAAKmB,CAAU,IAAM,uBACvCK,EAAO,IAAI,WAAWL,CAAU,EAEhCK,EAAOL,EAGTZ,EAASO,GAAqB,KAAK,KAAMU,CAAI,GAG3CjB,IAAWyB,IAAeP,IAAkB,KAC9ClB,EAASE,EACTgB,EAAgB,IAGdlB,IAAW0B,IAAgB1B,IAAWE,EACxC,YAAK,MAAMF,CAAM,EACjB,KAAK,MAAQ,GACN,GAGLU,EAAK,WAELA,EAAK,YAAc,GACnBV,IAAW0B,IACVhB,EAAK,WAAa,IAChBG,IAAUM,IAAYN,IAAUc,OAE/B,KAAK,QAAQ,KAAO,UACtBb,EAAgBc,GAAWlB,EAAK,OAAQA,EAAK,QAAQ,EAErDK,EAAOL,EAAK,SAAWI,EACvBE,EAAUa,GAAWnB,EAAK,OAAQI,CAAa,EAG/CJ,EAAK,SAAWK,EAChBL,EAAK,UAAYC,EAAYI,EACzBA,GACFe,EAASpB,EAAK,OAAQA,EAAK,OAAQI,EAAeC,EAAM,CAAC,EAG3D,KAAK,OAAOC,CAAO,GAEnB,KAAK,OAAOe,GAAUrB,EAAK,OAAQA,EAAK,QAAQ,CAAC,GAYnDA,EAAK,WAAa,GAAKA,EAAK,YAAc,IAC5CQ,EAAgB,GAEpB,QACGR,EAAK,SAAW,GAAKA,EAAK,YAAc,IACzCV,IAAW0B,IAQb,OALI1B,IAAW0B,KACbb,EAAQM,IAINN,IAAUM,IACZnB,EAASgC,GAAW,KAAK,IAAI,EAC7B,KAAK,MAAMhC,CAAM,EACjB,KAAK,MAAQ,GACNA,IAAWE,IAIhBW,IAAUc,KACZ,KAAK,MAAMzB,CAAI,EACfQ,EAAK,UAAY,GACV,GAIX,CAWA,OAAOuB,EAAK,CACV,KAAK,OAAO,KAAKA,CAAK,CACxB,CAYA,MAAMjC,EAAM,CAENA,IAAWE,IACT,KAAK,QAAQ,KAAO,SAGtB,KAAK,OAAS,KAAK,OAAO,KAAK,EAAE,EAEjC,KAAK,OAASgC,GAAc,KAAK,MAAM,GAG3C,KAAK,OAAS,CAAA,EACd,KAAK,IAAMlC,EACX,KAAK,IAAM,KAAK,KAAK,GACvB,GA0CI,SAAUuB,GAAQY,EAAOvC,EAAO,CACpC,IAAIwC,EAAW,IAAI1C,GAAQE,CAAO,EAKlC,GAHAwC,EAAS,KAAKD,EAAO,EAAI,EAGrBC,EAAS,IACX,MAAMA,EAAS,KAAOjC,GAAIiC,EAAS,GAAG,EAGxC,OAAOA,EAAS,MAClB,CAwBO,IAAIC,GAASC,GC7cd,SAAUC,GAAiBC,EAAkB,CACjD,IAAIC,EAAQ,EACZ,QAAWC,KAASF,EAClBC,GAASC,EAAM,OAEjB,IAAMC,EAAc,IAAI,WAAWF,CAAK,EACpCG,EAAS,EACb,QAAWF,KAASF,EAClBG,EAAY,IAAID,EAAOE,CAAM,EAC7BA,GAAUF,EAAM,OAElB,OAAOC,CACT,CCXS,IAAME,EAAsB,CAAA,EAM3BA,EAAoB,EAAI,CAACC,EAASC,IAAc,CAC/C,GAAG,MAAM,QAAQA,CAAU,EAE1B,QADIC,EAAI,EACFA,EAAID,EAAW,QAAQ,CAC5B,IAAIE,EAAMF,EAAWC,GAAG,EACpBE,EAAUH,EAAWC,GAAG,EACxBH,EAAoB,EAAEC,EAASG,CAAG,EAM5BC,IAAY,GAAKF,IALvBE,IAAY,EACd,OAAO,eAAeJ,EAASG,EAAK,CAAE,WAAY,GAAM,MAAOF,EAAWC,GAAG,CAAC,CAAE,EAEhF,OAAO,eAAeF,EAASG,EAAK,CAAE,WAAY,GAAM,IAAKC,CAAO,CAAE,CAGzE,KAEA,SAAQD,KAAOF,EACXF,EAAoB,EAAEE,EAAYE,CAAG,GAAK,CAACJ,EAAoB,EAAEC,EAASG,CAAG,GAC/E,OAAO,eAAeH,EAASG,EAAK,CAAE,WAAY,GAAM,IAAKF,EAAWE,CAAG,CAAC,CAAE,CAIlF,EAKAJ,EAAoB,EAAI,CAACM,EAAKC,IAAU,OAAO,UAAU,eAAe,KAAKD,EAAKC,CAAI,EAMtFP,EAAoB,EAAKC,GAAW,CAChC,OAAO,aACT,OAAO,eAAeA,EAAS,OAAO,YAAa,CAAE,MAAO,QAAQ,CAAE,EAEvE,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,EAAI,CAAE,CAC7D,EAMV,IAAIO,GAA+B,CAAA,EACnCR,EAAoB,EAAEQ,EAA4B,EAClDR,EAAoB,EAAEQ,GAA8B,CAClD,iBAAkB,IAAOC,GACzB,6BAA8B,IAAOC,GACrC,wCAAyC,IAAOC,GAChD,eAAgB,IAAOC,GACvB,eAAgB,IAAOC,GACvB,uBAAwB,IAAOC,GAChC,EAGD,IAAMC,GAAoC,omtCAEpCN,GAAN,MAAMO,CAAgB,CAClB,OAAO,OAAOC,EAAG,CACb,IAAMX,EAAM,OAAO,OAAOU,EAAiB,SAAS,EACpD,OAAAV,EAAI,UAAYW,EAChBC,GAA6B,SAASZ,EAAKA,EAAI,UAAWA,CAAG,EACtDA,CACX,CACA,oBAAkB,CACd,IAAMW,EAAM,KAAK,UACjB,YAAK,UAAY,EACjBC,GAA6B,WAAW,IAAI,EACrCD,CACX,CACA,MAAI,CACA,IAAMA,EAAM,KAAK,mBAAkB,EACnCE,EAAK,4BAA4BF,EAAK,CAAC,CAC3C,CAIA,aAAW,CACP,GAAI,CACA,IAAMG,EAASD,EAAK,gCAAgC,GAAG,EACvDA,EAAK,6BAA6BC,EAAQ,KAAK,SAAS,EACxD,IAAIC,EAAKC,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDG,EAAKD,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDI,EAAKC,GAAoBJ,EAAIE,CAAE,EAAE,MAAK,EAC1C,OAAAJ,EAAK,kBAAkBE,EAAIE,EAAK,EAAG,CAAC,EAC7BC,CACX,SACIL,EAAK,gCAAgC,EAAE,CAC3C,CACJ,CAIA,iBAAe,CACX,GAAI,CACA,IAAMC,EAASD,EAAK,gCAAgC,GAAG,EACvDA,EAAK,iCAAiCC,EAAQ,KAAK,SAAS,EAC5D,IAAIC,EAAKC,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDG,EAAKD,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDI,EAAKE,GAAqBL,EAAIE,CAAE,EAAE,MAAK,EAC3C,OAAAJ,EAAK,kBAAkBE,EAAIE,EAAK,EAAG,CAAC,EAC7BC,CACX,SACIL,EAAK,gCAAgC,EAAE,CAC3C,CACJ,CAIA,iBAAe,CACX,GAAI,CACA,IAAMC,EAASD,EAAK,gCAAgC,GAAG,EACvDA,EAAK,iCAAiCC,EAAQ,KAAK,SAAS,EAC5D,IAAIC,EAAKC,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDG,EAAKD,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDI,EAAKE,GAAqBL,EAAIE,CAAE,EAAE,MAAK,EAC3C,OAAAJ,EAAK,kBAAkBE,EAAIE,EAAK,EAAG,CAAC,EAC7BC,CACX,SACIL,EAAK,gCAAgC,EAAE,CAC3C,CACJ,GAEA,OAAO,UAASV,GAAiB,UAAU,OAAO,OAAO,EAAIA,GAAiB,UAAU,MAM5F,SAASI,GAAec,EAAK,CACzB,GAAI,CACA,IAAMP,EAASD,EAAK,gCAAgC,GAAG,EACjDS,EAAOC,GAAkBF,EAAOR,EAAK,kBAAkB,EACvDW,EAAOC,GACbZ,EAAK,eAAeC,EAAQQ,EAAME,CAAI,EACtC,IAAIT,EAAKC,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDG,EAAKD,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDY,EAAKV,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDa,EAAKX,EAAkB,EAAG,SAASF,EAAS,GAAO,EAAI,EAC3D,GAAIa,EACA,MAAMC,GAAWF,CAAE,EAEvB,IAAIG,EAAKV,GAAoBJ,EAAIE,CAAE,EAAE,MAAK,EAC1C,OAAAJ,EAAK,kBAAkBE,EAAIE,EAAK,EAAG,CAAC,EAC7BY,CACX,SACIhB,EAAK,gCAAgC,EAAE,CAC3C,CACJ,CAcA,SAASL,GAAuBa,EAAOS,EAAoBC,EAAmBC,EAAoBC,EAAiB,CAC/G,GAAI,CACA,IAAMnB,EAASD,EAAK,gCAAgC,GAAG,EACjDS,EAAOC,GAAkBF,EAAOR,EAAK,kBAAkB,EACvDW,EAAOC,GACbZ,EAAK,uBAAuBC,EAAQQ,EAAME,EAAMM,EAAoBC,EAAmBC,EAAoBC,CAAiB,EAC5H,IAAIlB,EAAKC,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDG,EAAKD,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EACvDY,EAAKV,EAAkB,EAAG,SAASF,EAAS,EAAO,EAAI,EAC3D,GAAIY,EACA,MAAME,GAAWX,CAAE,EAEvB,OAAOd,GAAiB,OAAOY,CAAE,CACrC,SACIF,EAAK,gCAAgC,EAAE,CAC3C,CACJ,CACA,SAAST,GAA6B8B,EAAMC,EAAI,CAC5C,IAAMC,EAAM,MAAMC,GAAmBH,EAAMC,CAAI,CAAC,EAChD,OAAOG,GAAcF,CAAG,CAC5B,CACA,SAAS/B,GAAwC6B,EAAMC,EAAI,CACvD,MAAM,IAAI,MAAME,GAAmBH,EAAMC,CAAI,CAAC,CAClD,CACA,IAAMvB,GAAgC,OAAO,qBAAyB,IAChE,CAAE,SAAU,IAAK,CAAE,EAAG,WAAY,IAAK,CAAE,CAAC,EAC1C,IAAI,qBAAqBD,GAAOE,EAAK,4BAA4BF,EAAK,CAAC,CAAC,EAE9E,SAAS2B,GAActC,EAAG,CAClBuC,KAAcC,EAAK,QAAQA,EAAK,KAAKA,EAAK,OAAS,CAAC,EACxD,IAAMC,EAAMF,GACZ,OAAAA,GAAYC,EAAKC,CAAG,EAEpBD,EAAKC,CAAG,EAAIzC,EACLyC,CACX,CAEA,SAASC,GAAWD,EAAG,CACfA,EAAM,OACVD,EAAKC,CAAG,EAAIF,GACZA,GAAYE,EAChB,CAEA,SAASrB,GAAqBT,EAAKgC,EAAG,CAClC,OAAAhC,EAAMA,IAAQ,EACPiC,GAAsB,EAAG,SAASjC,EAAM,EAAGA,EAAM,EAAIgC,CAAG,CACnE,CAEA,SAASxB,GAAoBR,EAAKgC,EAAG,CACjC,OAAAhC,EAAMA,IAAQ,EACPkC,GAAoB,EAAG,SAASlC,EAAM,EAAGA,EAAM,EAAIgC,CAAG,CACjE,CAEA,IAAIG,GAAwB,KAC5B,SAAS9B,GAAkB,CACvB,OAAI8B,KAA0B,MAAQA,GAAsB,OAAO,WAAa,IAASA,GAAsB,OAAO,WAAa,QAAaA,GAAsB,SAAWjC,EAAK,OAAO,UACzLiC,GAAwB,IAAI,SAASjC,EAAK,OAAO,MAAM,GAEpDiC,EACX,CAEA,IAAIC,GAA4B,KAChC,SAASH,IAAsB,CAC3B,OAAIG,KAA8B,MAAQA,GAA0B,aAAe,KAC/EA,GAA4B,IAAI,aAAalC,EAAK,OAAO,MAAM,GAE5DkC,EACX,CAEA,SAASV,GAAmB1B,EAAKgC,EAAG,CAChC,OAAOK,GAAWrC,IAAQ,EAAGgC,CAAG,CACpC,CAEA,IAAIM,GAA0B,KAC9B,SAASJ,IAAoB,CACzB,OAAII,KAA4B,MAAQA,GAAwB,aAAe,KAC3EA,GAA0B,IAAI,WAAWpC,EAAK,OAAO,MAAM,GAExDoC,EACX,CAEA,SAASC,GAAUT,EAAG,CAAI,OAAOD,EAAKC,CAAG,CAAG,CAE5C,IAAID,EAAO,IAAI,MAAM,IAAI,EAAE,KAAK,MAAS,EACzCA,EAAK,KAAK,OAAW,KAAM,GAAM,EAAK,EAEtC,IAAID,GAAYC,EAAK,OAErB,SAASjB,GAAkB4B,EAAKC,EAAM,CAClC,IAAMzC,EAAMyC,EAAOD,EAAI,OAAS,EAAG,CAAC,IAAM,EAC1C,OAAAN,GAAoB,EAAG,IAAIM,EAAKxC,EAAM,CAAC,EACvCc,GAAkB0B,EAAI,OACfxC,CACX,CAEA,SAASiB,GAAWa,EAAG,CACnB,IAAML,EAAMc,GAAUT,CAAG,EACzB,OAAAC,GAAWD,CAAG,EACPL,CACX,CAEA,IAAIiB,GAAoB,IAAI,YAAY,QAAS,CAAE,UAAW,GAAM,MAAO,EAAI,CAAE,EACjFA,GAAkB,OAAM,EACxB,IAAMC,GAA0B,WAC5BC,GAAkB,EACtB,SAASP,GAAWrC,EAAKgC,EAAG,CACxB,OAAAY,IAAmBZ,EACfY,IAAmBD,KACnBD,GAAoB,IAAI,YAAY,QAAS,CAAE,UAAW,GAAM,MAAO,EAAI,CAAE,EAC7EA,GAAkB,OAAM,EACxBE,GAAkBZ,GAEfU,GAAkB,OAAOR,GAAoB,EAAG,SAASlC,EAAKA,EAAMgC,CAAG,EAAE,MAAK,CAAE,CAC3F,CAEA,IAAIlB,GAAkB,EAGlBZ,EACJ,SAASP,GAAekD,EAAG,CACvB3C,EAAO2C,CACX,CAOA,IAAIC,GAAe,KACfC,GAAc,KAElB,eAAeC,IAAI,CACjB,OAAIF,KAECC,KACHA,IAAe,SAAW,CAGxB,IAAME,EAAQ,MADG,MAAM,MAAMnD,EAAiC,GACjC,YAAW,EAClC,CAAE,SAAAoD,CAAQ,EAAK,MAAM,YAAY,YAAYD,EAAO,CACxD,oBAAqB1D,GACtB,EACD,OAAAuD,GAAeI,EAAS,QACxBvD,GAAemD,EAAY,EACpBA,EACT,GAAE,GAGGC,GACT,CAEA,eAAeI,GAAczC,EAAK,CAChC,OAAKoC,IACH,MAAME,GAAI,EAELpD,GAAec,CAAK,CAC7B,CCtSA,IAAM0C,GAAsB,GAE5B,SAASC,GAAcC,EAAgB,CACrC,OAAOA,EAAK,CAAC,IAAM,IAAQA,EAAK,CAAC,IAAM,GACzC,CAKA,SAASC,GAAcD,EAAgB,CACrC,OACEA,EAAK,QAAUF,IACfC,GAAcC,CAAI,GAClBA,EAAK,CAAC,IAAM,GACZA,EAAK,CAAC,IAAM,GACZA,EAAK,EAAE,IAAM,GACbA,EAAK,EAAE,IAAM,IACbA,EAAK,EAAE,IAAM,EAEjB,CAEA,SAASE,GAAaC,EAAc,CAClC,OAAOA,aAAiB,MAAQA,EAAM,QAAU,GAAGA,CAAK,EAC1D,CAEA,eAAeC,GAAeC,EAAqB,CACjD,GAAI,OAAO,oBAAwB,IAAa,CAC9C,IAAMC,EAAS,IAAI,KAAK,CAACD,CAAoC,CAAC,EAC3D,OAAM,EACN,YAAY,IAAI,oBAAoB,MAAM,CAAC,EAC9C,OAAO,IAAI,WAAW,MAAM,IAAI,SAASC,CAAM,EAAE,YAAW,CAAE,CAChE,KACE,QAAOC,GAAOF,EAAW,MAAS,CAEtC,CAEA,SAASG,GAAoBL,EAAc,CACzC,OAAID,GAAaC,CAAK,EAAE,SAAS,qBAAqB,EAC7C,IAAI,MACT,2DACA,CAAE,MAAOA,CAAK,CAAE,EAGbA,CACT,CAOA,eAAsBM,GAAMJ,EAAqB,CAG/C,GAAIA,EAAU,SAAW,EACvB,OAAO,IAAI,WAAW,CAAC,EAMzB,GAAI,CAACJ,GAAcI,CAAS,EAAG,CAC7B,GAAIN,GAAcM,CAAS,EACzB,OAAOD,GAAeC,CAAS,EAEjC,MAAM,IAAI,MACR,6DAA6D,CAEjE,CACA,GAAI,CACF,OAAO,MAAMK,GAAcL,CAAS,CACtC,OAASF,EAAO,CAGd,GAAID,GAAaC,CAAK,EAAE,SAAS,qBAAqB,EACpD,OAAOC,GAAeC,CAAS,EAEjC,MAAMG,GAAoBL,CAAK,CACjC,CACF,CCvGA,IAAMQ,GAA4B,GAO5BC,GAA8B,GAAK,KAAO,KAKhD,SAASC,GAAYC,EAAmB,CACtC,IAAIC,EAAS,EACPC,EAAwB,CAAA,EACxBC,EAAO,IAAK,CAChBF,IACAC,EAAM,MAAK,IAAI,CACjB,EACA,MAAO,OAAUE,GAA0C,CACrDH,GAAUD,GACZ,MAAM,IAAI,QAAcK,GAAU,CAChCH,EAAM,KAAKG,CAAO,CACpB,CAAC,EAEHJ,IACA,GAAI,CACF,OAAO,MAAMG,EAAI,CACnB,SACED,EAAI,CACN,CACF,CACF,CAQA,SAASG,GACPC,EACAC,EACAC,EAA0C,CAE1C,IAAMC,EAAmB,CAAA,EACnBC,EAAYJ,EAAW,OACzBK,EAAQ,EACZ,KAAOA,EAAQD,GAAW,CACxB,IAAIE,EAAMD,EAAQ,EAClB,KACEC,EAAMF,GACNH,EAAaK,CAAG,EAAKL,EAAaI,CAAK,EAAKd,IAE5Ce,GAAO,EAMTH,EAAQ,KAAK,CACX,gBAAiBH,EAAWK,CAAK,EACjC,cACEC,EAAMF,EACFJ,EAAWM,CAAG,EACbJ,GACDF,EAAWI,EAAY,CAAC,EAAK,MACnC,kBAAmBH,EAAaI,CAAK,EACtC,EACDA,EAAQC,CACV,CACA,OAAOH,CACT,CAEA,SAASI,GACPC,EACAC,EACAC,EACAC,EAAe,CAEf,IAAMC,EAAe,KAAK,IAAI,EAAGF,EAAYD,CAAU,EACjDI,EACJ,KAAK,IAAIF,EAASF,EAAaD,EAAmB,MAAM,EAAIC,EAC9D,OAAOG,EAAeJ,EAAmB,OACrCA,EAAmB,SAASI,EAAcC,CAAS,EACnD,IAAI,WAAW,CAAC,CACtB,CAEA,IAAqBC,GAArB,KAAkC,CAChC,WACA,IACA,MAEA,YAAY,CACV,WAAAC,EACA,cAAAC,EACA,iBAAAC,EAAmB3B,EAAyB,EAK7C,CACC,KAAK,WAAayB,EAClB,KAAK,IAAM,IAAIG,GAAS,CACtB,WAAYF,EACb,EACD,KAAK,MAAQxB,GAAYyB,CAAgB,CAC3C,CAEA,MAAM,KAAKE,EAAgBC,EAAgB,CACzC,GAAM,CAAE,WAAApB,EAAY,aAAAC,EAAc,uBAAAC,CAAsB,EACtD,MAAM,KAAK,IAAI,yBAAyBiB,EAAQC,CAAQ,EAC1D,GAAIpB,EAAW,SAAW,EACxB,OAAO,IAAI,WAAW,CAAC,EAEzB,IAAMW,EAAUS,EAAWD,EACrBhB,EAAUJ,GACdC,EACAC,EACAC,CAAsB,EAGlBmB,EAAe,MAAM,QAAQ,IACjClB,EAAQ,IAAImB,GACV,KAAK,MAAM,SAAW,CACpB,IAAMC,EAAS,MAAM,KAAK,WAAW,KACnCD,EAAM,cAAgBA,EAAM,gBAC5BA,EAAM,eAAe,EAEvB,OAAOf,GACL,MAAMiB,GAAMD,CAAM,EAClBD,EAAM,kBACNF,EACAT,CAAO,CAEX,CAAC,CAAC,CACH,EAMH,OAAOc,GAAiBJ,CAAY,CACtC,GCrJF,IAAAK,GAA6B,QAS7B,eAAsBC,GAAgB,CACpC,SAAAC,EACA,KAAAC,CACF,EAGG,CACD,IAAMC,EAAQC,MACZ,iBAAa,CAAE,IAAAA,EAAK,aAAc,aAAuB,CAAC,EAEtDC,EAAU,MAAMF,EAAK,GAAGF,EAAS,GAAG,MAAM,EAAE,SAAS,MAAM,EAC3DK,EAAQC,GAAOF,EAASH,CAAI,EAClC,GAAII,EAAO,CAKT,IAAME,EAAQ,MAJH,IAAIC,GAAe,CAC5B,WAAYN,EAAKF,EAAS,GAAG,EAC7B,cAAeE,EAAK,GAAGF,EAAS,GAAG,MAAM,CAC3C,CAAC,EACsB,KAAKK,EAAM,OAAQA,EAAM,MAAM,EACtD,OAAO,IAAI,YAAY,EAAE,OAAOE,CAAK,EAAE,KAAK,CAC9C,CAEF,CAIA,IAAME,GAAeC,GAAcA,EAAE,QAAQ,SAAU,EAAE,EAEzD,SAASJ,GAAOF,EAAiBH,EAAc,CAC7C,IAAMU,EAAOF,GAAYR,CAAI,EAC7B,QAAWW,KAAQR,EAAQ,MAAM;AAAA,CAAI,EAAG,CACtC,GAAM,CAACS,EAAIC,EAAQC,CAAM,EAAIH,EAAK,MAAM,GAAI,EAC5C,GAAIC,GAAMJ,GAAYI,CAAE,IAAMF,EAC5B,MAAO,CAAE,OAAQ,OAAOG,CAAM,EAAG,OAAQ,OAAOC,CAAM,CAAE,CAE5D,CAEF,CC9CA,IAAAC,GAA2B,QAWpB,SAASC,GAAY,CAAE,MAAAC,CAAM,EAAyC,CAC3E,GAAM,CAAE,gBAAAC,EAAiB,QAAAC,CAAQ,KAAI,eAAWF,CAAK,EAC/C,CAAE,mBAAAG,EAAoB,cAAAC,EAAe,UAAAC,CAAU,EAAIL,EAEzD,GACE,CAACI,GAAe,aAChB,CAACE,GAAiBJ,CAAO,GACzB,CAACK,GAAYP,CAAK,EAElB,OAGF,GAAM,CAAE,MAAAQ,EAAO,QAAAC,CAAQ,EAAIP,EAAQ,cAI7BQ,EAAYF,EAAQ,EAepBG,EAAWV,EAAgB,IAC/BI,GAAW,cAAgBD,EAAc,cAAc,CAAC,GAAK,EAC/D,EACMQ,EAAaC,IAChBF,GAAU,YAAcA,EAAS,oBAAoBE,CAAI,EAAI,SAC9DA,EACIC,EAAiBF,EAAUH,CAAO,EAExC,GAAIJ,EACF,OACES,IAAmBF,EAAUP,EAAU,OAAO,GAC9C,CAACD,EAAc,cAAc,SAASC,EAAU,YAAY,GAC5DK,EAAYL,EAAU,OACtBK,GAAaL,EAAU,IAEvB,OAEKU,GAAwBf,EAAOU,EAAYL,EAAU,KAAK,EAOnE,GACEF,GACAW,IAAmBF,EAAUT,EAAmB,OAAO,EACvD,CACA,IAAMa,EAAab,EAAmB,IAAIO,CAAS,EACnD,GAAIM,IAAe,OACjB,OAAOC,GAA0BjB,EAAOgB,CAAU,CAEtD,CAGF,CCxEA,IAAME,GAAU,+BACVC,GAAa,UACbC,GAAa,EAcbC,GAAQC,GAA8BJ,GAASE,GAAYG,GAAM,CAChEA,EAAG,iBAAiB,SAASJ,EAAU,GAC1CI,EAAG,kBAAkBJ,GAAY,CAAE,QAAS,WAAY,CAAC,CAE7D,CAAC,EAEM,SAASK,GAAiBC,EAAsB,CACrD,OAAOC,GACL,oBACA,SAAY,CAEV,IAAMC,GADK,MAAMN,GAAM,GACT,YAAYF,GAAY,UAAU,EAC1CS,EAAU,MAAM,QAAQ,IAC5BH,EAAW,IAAII,GAAaF,EAAG,MAAM,IAAIE,CAAS,CAAC,CACrD,EACA,aAAMF,EAAG,KACFC,CACT,EACA,CAAC,CACH,CACF,CAEO,SAASE,GAAYC,EAAyB,CACnD,OAAOL,GACL,qBACA,SAAY,CAEV,IAAMC,GADK,MAAMN,GAAM,GACT,YAAYF,GAAY,WAAW,EACjD,QAAWa,KAASD,EAClB,MAAMJ,EAAG,MAAM,IAAIK,CAAK,EAE1B,MAAML,EAAG,IACX,EACA,MACF,CACF,CChDA,SAASM,EAAMC,EAAaC,EAAa,CACvC,IAAMC,EAAO,IAAI,OAAO,IAAID,CAAG,WAAWA,CAAG,IAAK,GAAG,EAAE,KAAKD,CAAG,IAAI,CAAC,EACpE,OAAOE,IAAS,OAAY,OAAYC,GAAkBD,CAAI,CAChE,CAEA,SAASE,GAAgBC,EAAoB,CAC3C,IAAMC,EAAgC,CAAC,EACjCC,EAAK,0CACPC,EACJ,MAAQA,EAAID,EAAG,KAAKF,CAAU,KAAO,MAAM,CACzC,IAAMI,EAAOV,EAAMS,EAAE,CAAC,EAAI,kBAAkB,EACtCE,EAAQX,EAAMS,EAAE,CAAC,EAAI,mBAAmB,EAE1CC,GAAQC,IAAU,QAAaJ,EAAMG,CAAI,IAAM,SACjDH,EAAMG,CAAI,EAAIC,EAElB,CACA,OAAOJ,CACT,CAOA,SAASK,GAAkBN,EAAoB,CAC7C,IAAMO,EAAmB,CAAC,EACpBC,EAAiB,CAAC,EAClBN,EAAK,wCACPC,EACJ,MAAQA,EAAID,EAAG,KAAKF,CAAU,KAAO,MAAM,CACzC,IAAMS,EAAQN,EAAE,CAAC,EACXO,EAAOhB,EAAMe,EAAO,iBAAiB,EACrCE,EAAKjB,EAAMe,EAAO,eAAe,EACjCG,EAAQlB,EAAMe,EAAO,kBAAkB,EACzCC,GAAQC,GACVJ,EAAO,KAAK,OAAOG,CAAI,CAAC,EACxBF,EAAK,KAAK,OAAOG,CAAE,CAAC,GACXC,IACTL,EAAO,KAAK,OAAOK,CAAK,CAAC,EACzBJ,EAAK,KAAK,OAAOI,CAAK,CAAC,EAE3B,CACA,OAAOL,EAAO,OAAS,EACnB,CAAE,MAAO,KAAK,IAAI,GAAGA,CAAM,EAAG,IAAK,KAAK,IAAI,GAAGC,CAAI,CAAE,EACrD,MACN,CAMA,IAAMK,GAAqB,EAE3B,SAASC,GAAad,EAA6C,CACjE,IAAMe,EAAMrB,EAAMM,EAAY,eAAe,EACvCC,EAAQF,GAAgBC,CAAU,EAClCgB,EAAOf,EAAM,QACbgB,EAAOX,GAAkBN,CAAU,EAGzC,IACGe,IAAQ,UAAYA,IAAQ,SAC7BC,GAAM,WAAW,MAAM,GACvBC,GACAA,EAAK,IAAMA,EAAK,MAAQ,GAAKJ,GAC7B,CACA,IAAMK,EAAQF,EAAK,QAAQ,OAAQ,EAAE,EAC/BG,EAAWJ,IAAQ,SAInBK,EAAWnB,EAAM,MAAM,MAAM,MAAM,EAAE,CAAC,GAAG,KAAK,EAC9CG,EAAOe,EACRlB,EAAM,aAAeiB,EACtBE,GAAYnB,EAAM,WAAa,OAC7BoB,EAAYF,EAAWD,EAAQ,GAAGA,CAAK,IAAId,CAAI,GACrD,MAAO,CACL,UAAW,CACT,MAAO,CAAE,KAAAA,EAAM,YAAaH,EAAM,MAAQG,EAAM,UAAAiB,CAAU,CAC5D,EACA,UAAW,CAACJ,CAAI,CAClB,CACF,CAEF,CAOO,SAASK,GAAgB3B,EAAyC,CACvE,IAAM4B,EAAc,IAAI,IAClBC,EAAQ,8BACVC,EACJ,MAAQA,EAAWD,EAAM,KAAK7B,CAAG,KAAO,MAAM,CAC5C,IAAM+B,EAASD,EAAS,CAAC,EACnBE,EAAyB,CAAC,EAE1BC,EAAS,sCACXC,EACJ,MAAQA,EAAYD,EAAO,KAAKF,CAAM,KAAO,MAAM,CACjD,IAAMI,EAAQhB,GAAae,EAAU,CAAC,CAAE,EACpCC,GACFH,EAAQ,KAAKG,CAAK,CAEtB,CAEA,QAAWC,IAAO,CAChBrC,EAAMgC,EAAQ,yBAAyB,EACvChC,EAAMgC,EAAQ,yBAAyB,CACzC,EACMK,GACFR,EAAY,IAAIQ,EAAKJ,CAAO,CAGlC,CACA,OAAOJ,CACT,CAQA,eAAsBS,GACpBC,EACAC,EACqC,CACrC,IAAMC,EAAS,CAAC,GAAG,IAAI,IAAIF,CAAU,CAAC,EAAE,OAAO,OAAO,EAChDV,EAAc,IAAI,IAElBa,EAAS,MAAMC,GAAiBF,CAAM,EACtCG,EAAqB,CAAC,EAC5BH,EAAO,QAAQ,CAACJ,EAAKQ,IAAM,CACzB,IAAMC,EAAMJ,EAAOG,CAAC,EAChBC,EACFjB,EAAY,IAAIQ,EAAKS,EAAI,OAAO,EAEhCF,EAAS,KAAKP,CAAG,CAErB,CAAC,EAED,IAAMU,EAA2D,CAAC,EAC5DC,EAAY,IAClB,QAASH,EAAI,EAAGA,EAAID,EAAS,OAAQC,GAAKG,EAAW,CACnD,IAAMC,EAAQL,EAAS,MAAMC,EAAGA,EAAIG,CAAS,EACzC/C,EACJ,GAAI,CACFA,EAAM,MAAMiD,GACVC,GAAU,CACR,GAAI,UACJ,GAAIF,EAAM,KAAK,GAAG,EAClB,QAAS,KACT,QAAS,KACX,CAAC,EACD,CAAE,OAAAT,CAAO,CACX,CACF,OAASY,EAAG,CACV,GAAIC,EAAaD,CAAC,EAChB,MAAMA,EAGR,QAAQ,KAAK,wDAAyDA,CAAC,EACvE,KACF,CACA,IAAME,EAAS1B,GAAgB3B,CAAG,EAClC,QAAWoC,KAAOY,EAAO,CAMvB,IAAMhB,EAAUqB,EAAO,IAAIjB,CAAG,EAC1BJ,IAAY,SACdJ,EAAY,IAAIQ,EAAKJ,CAAO,EAC5Bc,EAAQ,KAAK,CAAE,UAAWV,EAAK,QAAAJ,CAAQ,CAAC,EAE5C,CACF,CACA,OAAIc,EAAQ,OAAS,GACnB,MAAMQ,GAAYR,CAAO,EAEpBlB,CACT,CCjLA,eAAsB2B,GACpBC,EACAC,EACA,CACA,IAAMC,EAAgB,OAAO,QAAQF,EAAK,OAAO,EAAE,QACjD,CAAC,CAACG,EAASC,CAAG,IACZA,GAAK,UAAY,CAAC,CAAE,QAAAD,EAAS,UAAWC,EAAI,SAAU,CAAC,EAAI,CAAC,CAChE,EACA,GAAIF,EAAc,SAAW,EAC3B,MAAM,IAAI,MAAM,4CAA4C,EAG9D,IAAMG,EAAc,MAAMC,GACxBJ,EAAc,IAAIK,GAAKA,EAAE,SAAS,EAClCN,CACF,EAEMO,EAAcN,EAAc,QAAQ,CAAC,CAAE,QAAAC,EAAS,UAAAM,CAAU,KAC7DJ,EAAY,IAAII,CAAS,GAAK,CAAC,GAAG,QAAQ,CAAC,CAAE,UAAAC,EAAW,UAAAC,CAAU,IACjED,EAAU,MACNC,EAAU,IAAI,CAAC,CAAE,MAAAC,EAAO,IAAAC,CAAI,KAAO,CACjC,GAAIV,EACJ,UAAWO,EAAU,MAAO,UAC5B,KAAMA,EAAU,MAAO,KACvB,YAAaA,EAAU,MAAO,YAC9B,MAAAE,EACA,IAAAC,CACF,EAAE,EACF,CAAC,CACP,CACF,EAEA,GAAIL,EAAY,SAAW,EACzB,MAAM,IAAI,MAAM,oDAAoD,EAGtER,EAAK,eAAeQ,CAAW,CACjC,CClDA,IAAMM,GAAU,uBACVC,GAAa,EACbC,GAAa,WAuBbC,GAAQC,GAA0BJ,GAASC,GAAYI,GAAM,CAC5DA,EAAG,iBAAiB,SAASH,EAAU,GAC5BG,EAAG,kBAAkBH,GAAY,CAAE,QAAS,IAAK,CAAC,EAC1D,YAAY,YAAa,YAAa,CAAE,OAAQ,EAAM,CAAC,CAEjE,CAAC,EAEM,SAASI,IAAsB,CACpC,MAAO,OAAO,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAG,EAAE,CAAC,EACrE,CAEA,eAAsBC,GAAaC,EAAYC,EAAsB,CACnE,GAAI,CACF,IAAMJ,EAAK,MAAMF,GAAM,EACjBO,EAA4B,CAAE,GAAGD,EAAM,GAAAD,EAAI,UAAW,KAAK,IAAI,CAAE,EACvE,aAAMH,EAAG,IAAIH,GAAYQ,CAAU,EAC5B,EACT,OAAS,EAAG,CACV,eAAQ,KAAK,4BAA6B,CAAC,EACpC,EACT,CACF,CAGA,eAAsBC,GAAgBH,EAAY,CAChD,IAAMH,EAAK,MAAMF,GAAM,EACjBS,EAAS,MAAMP,EAAG,IAAIH,GAAYM,CAAE,EAC1C,GAAI,CAACI,EACH,OAKF,GAAI,CACF,MAAMP,EAAG,IAAIH,GAAY,CAAE,GAAGU,EAAQ,UAAW,KAAK,IAAI,CAAE,CAAC,CAC/D,OAASC,EAAG,CACV,QAAQ,KAAK,wCAAyCA,CAAC,CACzD,CACA,GAAM,CAAE,GAAIC,EAAK,UAAWC,EAAY,GAAGC,CAAQ,EAAIJ,EACvD,OAAOI,CACT,CAEA,eAAsBC,GAAeC,EAAW,MAAc,GAAK,IAAM,CACvE,GAAI,CACF,IAAMb,EAAK,MAAMF,GAAM,EACjBgB,EAAa,KAAK,IAAI,EAAID,EAG5BE,EAAS,MAFFf,EAAG,YAAYH,GAAY,WAAW,EAChC,MAAM,MAAM,WAAW,EACf,WAAW,YAAY,WAAWiB,CAAU,CAAC,EAClEE,EAAe,EACnB,KAAOD,GACL,MAAMA,EAAO,OAAO,EACpBC,IACAD,EAAS,MAAMA,EAAO,SAAS,EAEjC,OAAOC,CACT,OAASR,EAAG,CACV,eAAQ,KAAK,kCAAmCA,CAAC,EAC1C,CACT,CACF,CCzFA,IAAAS,GAA2B,QAC3BC,GAA0B,QAiB1B,SAASC,GAAUC,EAAiC,CAClD,GAAI,EAAAA,EAAK,KAAK,OAAS,GAGvB,GAAI,CACFA,EAAK,oCAAoC,CAC3C,OAASC,EAAG,CACV,QAAQ,MAAMA,CAAC,EAEf,GAAI,IACF,eAAWD,CAAI,EAAE,OACf,gDAAgDC,aAAa,MAAQA,EAAE,QAAU,OAAOA,CAAC,CAAC,GAC1F,SACF,CACF,OAASC,EAAI,CACX,QAAQ,MAAMA,CAAE,CAClB,CACF,CACF,CAyCO,SAASC,GAAUC,EAKvB,IACD,cAAU,IAAM,CACdC,GAAYD,CAAI,CAClB,CAAC,CACH,CAEA,SAASC,GAAY,CACnB,KAAAL,EACA,QAAAM,EACA,OAAAC,EACA,WAAAC,CACF,EAAoC,CAClCR,EAAK,kBAAkB,MAAM,EAC7B,IAAMS,EAAa,IAAI,gBACjB,CAAE,OAAAC,CAAO,EAAID,EACnBT,EAAK,oBAAoBS,CAAU,EAEnC,IAAME,EAAOC,GAAmB,CACzBF,EAAO,SACVE,EAAG,CAEP,EACMC,EAAqB,CACzB,OAAAH,EACA,IAAAC,EACA,WAAYG,GAAO,CACjBH,EAAI,IAAM,CACRX,EAAK,YAAYc,CAAG,CACtB,CAAC,CACH,EACA,MAAOA,GAAO,CACZH,EAAI,IAAM,CACRX,EAAK,OAAOc,CAAG,CACjB,CAAC,CACH,CACF,GAEM,SAAY,CAChB,GAAI,CACFH,EAAI,IAAM,CACRX,EAAK,YAAYM,CAAO,EACxBN,EAAK,SAAS,MAAS,CACzB,CAAC,EACD,GAAM,CAAE,SAAAe,EAAW,CAAC,EAAG,GAAGC,CAAK,EAAI,MAAMT,EAAOM,CAAK,EACrDF,EAAI,IAAM,CACRX,EAAK,QAAQgB,CAAI,EACjB,QAAWC,KAAWF,EACpBf,EAAK,WAAWiB,CAAO,EAEzBT,EAAW,CACb,CAAC,EACIQ,EAAK,MACRL,EAAI,IAAM,CACRZ,GAAUC,CAAI,CAChB,CAAC,CAEL,OAASC,EAAG,CAGLiB,EAAajB,CAAC,IACjBU,EAAI,IAAM,CACRX,EAAK,SAASC,CAAC,CACjB,CAAC,EACD,QAAQ,MAAMA,CAAC,EAEnB,QAAE,CACAU,EAAI,IAAM,CACRX,EAAK,YAAY,EAAE,EAEfA,EAAK,mBAAqBS,GAC5BT,EAAK,oBAAoB,MAAS,CAEtC,CAAC,CACH,CACF,GAAG,CACL,CCvIO,SAASmB,GAAcC,EAAoC,CAChE,IAAMC,EAAID,EACV,OAAOC,EAAE,OAAS,eAAiB,MAAM,QAAQA,EAAE,UAAU,CAC/D,CAKO,SAASC,GAAgBC,EAA0C,CACxE,OAAQA,EAAoB,OAAOJ,EAAa,CAClD,CCpBM,SAAUK,GAA6BC,EAAa,CACxD,IAAMC,EAASD,EAAQ,OACjBE,EAAUF,EAAQ,QAExB,GAAIC,IAAW,IAAMA,IAAW,EAC9B,MAAM,IAAI,MAAM,yBAAyBA,CAAM,qBAAqB,EAEtE,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,qBAAqB,EAIvC,IAAMC,EAAY,IAAI,IACtB,QAAWC,KAAKJ,EAAQ,aAAe,CAAA,EACrC,GAAII,EAAE,OAAS,OAASA,EAAE,MAAQA,EAAE,IAAK,CACvC,IAAMC,EAAM,GAAGD,EAAE,KAAK,IAAIA,EAAE,GAAG,GAC1BD,EAAU,IAAIE,CAAG,GACpBF,EAAU,IAAIE,EAAKD,CAAC,CAExB,CAEF,IAAME,EAAM,CAAC,GAAGH,EAAU,OAAM,CAAE,EAAE,KAClC,CAACI,EAAGC,IAAMP,GAAUM,EAAE,MAAQC,EAAE,MAAM,EAGlCC,EAA8B,CAAA,EAC9BC,EAA8B,CAAA,EAC9BC,EAAqC,CAAA,EAE3C,GAAIL,EAAI,SAAW,EAAG,CAKpB,IAAIM,GAAkB,GADHN,EAAI,CAAC,GAAG,OAAS,IACI,EACpCO,EAAiB,GAErB,QAAWT,KAAKE,EAAK,CACnB,IAAMQ,EAASV,EAAE,IAAMA,EAAE,MACzB,QAASW,EAAI,EAAGA,EAAID,EAAQC,IAAK,CAC/B,IAAMC,EAAYf,IAAW,EAAIG,EAAE,MAAQW,EAAIX,EAAE,IAAM,EAAIW,EACrDE,EAAa,KAAK,MAAML,IAAmB,CAAC,EAClDH,EAAIO,CAAS,EAAIC,EACbA,IAAeJ,GACjBH,EAAIO,CAAU,EAAID,EAClBL,EAASM,CAAU,EAAI,CAACD,CAAS,EACjCH,EAAiBI,GAEjBN,EAASM,CAAU,EAAG,KAAKD,CAAS,CAExC,CACF,CACF,CAEA,MAAO,CAAE,IAAAP,EAAK,IAAAC,EAAK,SAAAC,EAAU,QAAAT,EAAS,OAAAD,CAAM,CAC9C,CAoCM,SAAUiB,GACdC,EACAC,EAAkB,CAElB,IAAMC,EAAYF,EAASC,CAAU,EACrC,GAAIC,IAAc,OAChB,OAEF,IAAMC,EAAS,CAAC,GAAGD,CAAS,EAAE,KAAK,CAACE,EAAGC,IAAMD,EAAIC,CAAC,EAC5CC,EAA6B,CAAA,EACnC,QAAWC,KAAOJ,EAAQ,CACxB,IAAMK,EAAOF,EAAO,GAAG,EAAE,EACrBE,IAAO,CAAC,IAAMD,EAChBC,EAAK,CAAC,EAAID,EAAM,EAEhBD,EAAO,KAAK,CAACC,EAAKA,EAAM,CAAC,CAAC,CAE9B,CACA,OAAOD,CACT,CCtHO,IAAMG,GAAmB,IAMhC,SAASC,GAASC,EAA8C,CAC9D,OAAO,OAAOA,GAAQ,UAAYA,IAAQ,IAC5C,CAQA,SAASC,GAAaD,EAA6B,CACjD,OAAO,OAAO,cAAcA,CAAG,CACjC,CAEA,SAASE,GAAMF,EAA6B,CAC1C,OACED,GAASC,CAAG,GACZ,OAAOA,EAAI,MAAS,UACpBA,EAAI,KAAK,YAAY,IAAM,OAC3BC,GAAaD,EAAI,KAAK,GACtBC,GAAaD,EAAI,GAAG,GACpBA,EAAI,MAAQA,EAAI,GAEpB,CAEA,SAASG,GAAQH,EAAc,CAC7B,IAAMI,EAAQ,OAAOJ,CAAG,EACxB,OAAOI,IAAU,GAAKA,IAAU,EAAIA,EAAQ,CAC9C,CAKA,SAASC,GAAQC,EAA4C,CAC3D,GAAM,CAAE,YAAAC,CAAY,EAAID,EAClBE,GAAY,MAAM,QAAQD,CAAW,EAAIA,EAAc,CAAC,GAAG,OAAOL,EAAK,EAC7E,OAAIM,EAAS,OAAS,EACbA,EAEFN,GAAMI,CAAO,EAAI,CAACA,CAAO,EAAI,CAAC,CACvC,CAEA,SAASG,GACPH,EAC2C,CAC3C,GAAI,CAACP,GAASO,CAAO,EACnB,MAAO,CAAE,OAAQ,qBAAsB,EAEzC,GAAM,CAAE,QAAAI,EAAS,OAAAC,CAAO,EAAIL,EAC5B,GAAI,OAAOI,GAAY,UAAY,CAACA,EAClC,MAAO,CAAE,OAAQ,mBAAoB,EAEvC,GAAIC,IAAW,GAAKA,IAAW,GAC7B,MAAO,CAAE,OAAQ,iBAAiB,KAAK,UAAUA,CAAM,CAAC,eAAgB,EAE1E,IAAMC,EAAMP,GAAQC,CAAO,EAAE,IAAIO,IAAM,CACrC,QAAAH,EACA,KAAM,MACN,MAAOG,EAAE,MACT,IAAKA,EAAE,IACP,MAAOV,GAAQU,EAAE,KAAK,CACxB,EAAE,EACF,GAAID,EAAI,SAAW,EACjB,MAAO,CAAE,OAAQ,wCAAyC,EAE5D,IAAME,EAASF,EAAI,OAAO,CAACG,EAAKF,IAAME,EAAMF,EAAE,IAAMA,EAAE,MAAO,CAAC,EAC9D,OAAIC,EAAShB,GACJ,CACL,OAAQ,kBAAkBgB,CAAM,uCAClC,EAEK,CACL,WAAY,CACV,QAAAJ,EACA,OAAAC,EACA,MAAO,KAAK,IAAI,GAAGC,EAAI,IAAIC,GAAKA,EAAE,KAAK,CAAC,EACxC,IAAK,KAAK,IAAI,GAAGD,EAAI,IAAIC,GAAKA,EAAE,GAAG,CAAC,EACpC,YAAaD,CACf,CACF,CACF,CAEA,IAAMI,GAAS,IAAI,QAEZ,SAASC,GAAcX,EAA6C,CACzE,IAAMY,EAAUT,GAAmBH,CAAO,EAC1C,GAAI,WAAYY,EAAS,CACnBnB,GAASO,CAAO,GAAK,CAACU,GAAO,IAAIV,CAAO,IAC1CU,GAAO,IAAIV,CAAO,EAClB,QAAQ,KACN,gEAAgEY,EAAQ,MAAM,EAChF,GAEF,MACF,CACA,IAAMC,EAAUC,GAA6BF,EAAQ,UAAU,EAC/D,MAAO,CACL,GAAGC,EACH,gBAAiB,OAAO,KAAKA,EAAQ,GAAG,EACrC,IAAI,MAAM,EACV,KAAK,CAACE,EAAGC,IAAMD,EAAIC,CAAC,CACzB,CACF,CAEA,SAASC,GAAWC,EAAkBC,EAAe,CACnD,IAAIC,EAAK,EACLC,EAAKH,EAAO,OAChB,KAAOE,EAAKC,GAAI,CACd,IAAMC,EAAOF,EAAKC,IAAQ,EACtBH,EAAOI,CAAG,EAAKH,EACjBC,EAAKE,EAAM,EAEXD,EAAKC,CAET,CACA,OAAOF,CACT,CAEO,SAASG,GACdC,EACAC,EACAC,EACA,CACA,IAAMC,EAAY,IAAI,IAChB,CAAE,gBAAAC,EAAiB,IAAAC,CAAI,EAAIL,EACjC,QACM,EAAIP,GAAWW,EAAiBH,CAAK,EACzC,EAAIG,EAAgB,QAAUA,EAAgB,CAAC,EAAKF,EACpD,IAEAC,EAAU,IAAIE,EAAID,EAAgB,CAAC,CAAE,CAAE,EAEzC,OAAOD,CACT,CrClHA,IAAMG,GACJ,kKAEIC,GAAe,yDAEfC,GAAa,4CAEbC,GACJ,gEAEIC,GACJ,4NAEK,SAASC,GAAeC,EAAiC,CAC9D,GAAM,CAAE,YAAAC,CAAY,EAAID,EACnBC,IAGC,SAAY,CAChB,GAAI,CACFD,EAAK,qBAAqB,EAAI,EAC9B,IAAME,EAAS,MAAMC,GAAgBF,CAAW,EAChD,GAAID,EAAK,cAAgBC,EACvB,UAEF,gBAAY,IAAM,CAChB,GAAIC,EAAQ,CACV,GAAM,CAAE,KAAAE,CAAK,EAAIJ,EACbE,EAAO,KAAO,CAACE,EAAK,KACtBJ,EAAK,OAAOE,EAAO,GAAG,EAEpBA,EAAO,MAAQ,CAACE,EAAK,MACvBJ,EAAK,QAAQE,EAAO,IAAI,EAEtBA,EAAO,cAAgB,CAACE,EAAK,cAC/BJ,EAAK,gBAAgBE,EAAO,YAAY,EAEtCA,EAAO,KAAO,CAACE,EAAK,KACtBJ,EAAK,OAAOE,EAAO,GAAG,EAExBF,EAAK,kBAAkBE,CAAM,CAC/B,MACEF,EAAK,eAAe,MAAS,EACzBK,GAAmBL,CAAI,EACzBA,EAAK,WAAWF,EAAsB,EAEtCE,EAAK,SACH,IAAI,MACFN,IACIM,EAAK,aAAeA,EAAK,eACvBL,GACAC,GACR,CACF,CAGN,CAAC,CACH,OAAS,EAAG,CACV,QAAQ,MAAM,0CAA2C,CAAC,KAEtD,YAAQI,CAAI,GAAK,CAACK,GAAmBL,CAAI,GAC3CA,EAAK,SACH,IAAI,MACF,GAAGH,EAAkB,IAAI,CAAC,IAAKG,EAAK,aAAeA,EAAK,eAAkBL,GAAeC,EAAU,EACrG,CACF,CAEJ,QAAE,CACAI,EAAK,qBAAqB,EAAK,CACjC,CACF,GAAG,CACL,CAEA,SAASK,GAAmBL,EAAiC,CAC3D,MAAO,CAAC,EACNA,EAAK,KAAK,KACVA,EAAK,eACLA,EAAK,MAAM,mBAEf,CAEA,SAASM,GAAQF,EAAsB,CACrC,MAAO,EAAEA,EAAK,KAAOA,EAAK,MAAQA,EAAK,cAAgBA,EAAK,IAC9D,CAEA,SAASG,GAASC,EAA+BC,EAAmB,CAClE,MACE,CAAC,CAACD,GACFA,EAAE,MAAQC,EAAE,KACZD,EAAE,OAASC,EAAE,MACbD,EAAE,eAAiBC,EAAE,cACrBD,EAAE,MAAQC,EAAE,GAEhB,CASO,SAASC,GAAqBV,EAAiC,CACpE,GAAM,CACJ,YAAAC,EACA,iBAAAU,EACA,cAAAC,EACA,kBAAAC,EACA,eAAAC,CACF,EAAId,EACEI,EAAOJ,EAAK,iBAClB,GAAI,EAAAY,GAAiBC,GAAqBN,GAASO,EAAgBV,CAAI,GAGvE,IAAIE,GAAQF,CAAI,EAAG,CACbU,MACF,gBAAY,IAAM,CAChBd,EAAK,eAAe,MAAS,EAC7BA,EAAK,oBAAoB,EAAK,EAC9BA,EAAK,kBAAkBI,CAAI,CAC7B,CAAC,EAEH,MACF,CAEAJ,EAAK,iBAAiB,EAAI,GACpB,SAAY,CAChB,GAAI,CACF,IAAMe,EACJd,GAAeU,EAAmBV,EAAce,GAAoB,EAClE,MAAMC,GAAaF,EAAIX,CAAI,MAC7B,gBAAY,IAAM,CAChBJ,EAAK,eAAee,CAAE,EACtBf,EAAK,oBAAoB,EAAI,CAC/B,CAAC,CAEL,OAASkB,EAAG,CACV,QAAQ,MAAM,yCAA0CA,CAAC,CAC3D,QAAE,IACA,gBAAY,IAAM,CAChBlB,EAAK,kBAAkBI,CAAI,EAC3BJ,EAAK,iBAAiB,EAAK,CAC7B,CAAC,CACH,CACF,GAAG,EACL,CAOA,SAASmB,GAAmBnB,EAAiC,CAC3D,MAAO,CAAC,CAACA,EAAK,qBAAuB,CAACA,EAAK,gBAC7C,CAOA,SAASoB,GACPpB,EACAqB,EACAC,EACAC,EACA,CACIF,GAAa,CAACrB,EAAK,iBAAmB,CAACmB,GAAmBnB,CAAI,GAChEwB,GAAU,CACR,KAAAxB,EACA,QAAAsB,EACA,OAAAC,EACA,WAAY,IAAM,CAChBvB,EAAK,mBAAmB,EAAI,CAC9B,CACF,CAAC,CAEL,CAEO,SAASyB,GAAwBzB,EAAiC,CACvEoB,GAAepB,EAAM,CAAC,CAACA,EAAK,eAAgB,sBAAuB0B,GACjEC,GAAkB,CAAE,KAAA3B,EAAM,MAAA0B,CAAM,CAAC,CACnC,CACF,CAEO,SAASE,GAAoB5B,EAAiC,CACnEoB,GAAepB,EAAM,CAAC,CAACA,EAAK,YAAa,mBAAoB0B,GAC3DG,GAAc,CAAE,KAAA7B,EAAM,MAAA0B,CAAM,CAAC,CAC/B,CACF,CAOO,SAASI,GAAuB9B,EAAiC,CACtE,GAAM,CAAE,KAAA+B,EAAM,iBAAAC,EAAkB,YAAAC,EAAa,QAAAC,CAAQ,EAAIlC,EACzD,GACE+B,EAAK,OAAS,GACdE,EAAY,SAAW,GACvB,CAACD,GACD,OAAO,OAAOE,CAAO,EAAE,KAAKC,GAAOA,GAAK,SAAS,EACjD,CACA,IAAMC,EAAa,IAAI,gBACjBC,EAAQ,IAAM,CAClBD,EAAW,MAAM,CACnB,KACA,gBAAYpC,EAAMqC,CAAK,EACvBrC,EAAK,oBAAoB,EAAI,EAC7BA,EAAK,UAAU,CACb,IAAK,qCACL,SAAUqC,CACZ,CAAC,GACK,SAAY,CAChB,GAAI,CACF,MAAMC,GAAmBtC,EAAMoC,EAAW,MAAM,CAClD,OAASlB,EAAG,CACLqB,EAAarB,CAAC,GACjB,QAAQ,MAAM,sCAAuCA,CAAC,CAE1D,QAAE,IACI,YAAQlB,CAAI,GACdA,EAAK,UAAU,MAAS,CAE5B,CACF,GAAG,CACL,CACF,CAcO,SAASwC,GAAYxC,EAAiC,CAC3D,GAAM,CAAE,KAAAyC,CAAK,EAAIzC,EACjB,GAAIyC,EAAM,CACR,GAAM,CAAE,OAAAC,EAAQ,mBAAAC,EAAoB,QAAAC,EAAS,aAAAC,CAAa,EAAIJ,EACxDK,EAAU,CAAC,EAAEH,GAAsBC,GAGzC,GAAIE,GAAW9C,EAAK,KAAK,IACvB,QAEI,SAAY,CAChB,GAAI,CACFA,EAAK,SAAS,MAAS,EAEvB,IAAM+C,EAAYL,EACdM,GAA6BN,CAAM,EACnC,OACAK,GACF/C,EAAK,aAAa+C,CAAS,EAE7B,IAAME,EAAUJ,IAAiBE,EAAY,QAAU,QAKvD,GAJIE,GACFjD,EAAK,gBAAgBiD,CAAO,EAG1BP,EACF1C,EAAK,iBAAiB,CAAE,IAAK0C,EAAQ,aAAc,aAAc,CAAC,UACzDC,GAAsBC,EAAS,CACxC,IAAMM,EAAQ,MAAMC,GAAgB,CAClC,SAAUR,EACV,KAAMC,CACR,CAAC,EACD,GAAI,CAACM,EACH,MAAM,IAAI,MACR,sBAAsBN,CAAO,OAAOD,EAAmB,GAAG,EAC5D,EAEF3C,EAAK,OAAOkD,CAAK,CACnB,CAEKJ,GACH9C,EAAK,QAAQ,MAAS,CAE1B,OAASkB,EAAG,CACVlB,EAAK,SAASkB,CAAC,EACf,QAAQ,MAAMA,CAAC,CACjB,CACF,GAAG,CACL,CACF,CASO,SAASkC,GAA2BpD,EAAiC,CAC1E,IAAIqD,EAAkB,GACtB,MAAO,IAAM,CACX,IAAMC,EAAMC,GAAY,CAAE,MAAOvD,CAAK,CAAC,EACnCsD,IAAQ,QACVtD,EAAK,YAAYsD,CAAG,EACpBD,EAAkB,IACTA,IACTrD,EAAK,YAAY,MAAS,EAC1BqD,EAAkB,GAEtB,CACF,CAQA,SAASG,GACPxD,EACAyD,EACA,CACA,GAAM,CAAE,gBAAAC,EAAiB,mBAAAC,CAAmB,EAAI3D,EAChD,GAAI,CAAC2D,GAAsB,CAACC,GAAY5D,CAAI,EAC1C,MAAO,CAAC,EAEV,IAAM6D,EAAU,IAAI,IAEpB,QAAWC,KAAQC,MAAgB,eAAW/D,CAAI,EAAE,KAAK,EACvD,QAAWgE,KAAaF,EAAK,WAC3B,GAAIE,EAAU,kBAAoBN,EAGlC,OAAW,CAAE,MAAAO,EAAO,IAAAC,CAAI,IAAKF,EAAUP,CAAK,GAAK,CAAC,EAChD,QAAWU,KAAcC,GACvBT,EACAM,EACAC,CACF,EAAG,CACD,IAAMZ,EAAMe,GAA0BrE,EAAMmE,CAAU,EAClDb,IAAQ,QACVO,EAAQ,IAAIP,CAAG,CAEnB,CAKN,MAAO,CAAC,GAAGO,CAAO,CACpB,CAEA,SAASS,GAAY9D,EAAyBC,EAAyB,CACrE,MAAI,CAACD,GAAK,CAACC,EACFD,IAAMC,EAERD,EAAE,SAAWC,EAAE,QAAUD,EAAE,MAAM,CAAC8C,EAAKiB,IAAMjB,IAAQ7C,EAAE8D,CAAC,CAAC,CAClE,CAgCO,SAASC,GAAyBxE,EAAiC,CAUxE,IAAIyE,EACJ,MAAO,IAAM,CACX,GAAM,CAAE,gBAAAf,EAAiB,mBAAAC,CAAmB,EAAI3D,EAEhD,GAAI,CAAC0D,GAAmB,CAACC,EACvB,OAGF,IAAMe,EAAQlB,GACZxD,EACA,uBACF,EAWM2E,EAAQD,EAAM,OAChB,CAAC,EACDlB,GAAiCxD,EAAM,uBAAuB,EAC5D4E,EAAO5E,EAAK,kBAAoB,CAAC,EAEjC6E,EAASH,EAAM,OAASA,EAAQC,EAAM,OAASA,EAAQC,EACvDE,EAAOD,EAAO,OAAS,EAAIA,EAAS,OAErCP,GAAYG,EAASK,CAAI,IAC5BL,EAAUK,EACV9E,EAAK,sBAAsB8E,CAAI,EAEnC,CACF,CAEO,SAASC,IAAa,CAC3BC,GAAe,EAAE,MAAO9D,GAAe,CACrC,QAAQ,MAAM,kCAAmCA,CAAC,CACpD,CAAC,CACH,CsC1aO,SAAS+D,GAAwB,CACtC,MAAAC,EACA,MAAOC,CACT,EAGmB,CACjB,GAAM,CAAE,aAAAC,EAAc,mBAAAC,EAAoB,UAAAC,CAAU,EAAIJ,EAElDK,EAAcL,EAAM,mBAAmBE,EAAcD,CAAQ,EACnE,GAAII,IAAgB,OAClB,MAAO,CAAC,EAGV,GAAID,EAAW,CACb,IAAME,EAAYF,EAAU,MAAQC,EACpC,OAAOC,EAAYF,EAAU,IACzB,CAAC,CAAE,QAASA,EAAU,QAAS,MAAOE,EAAW,IAAKA,EAAY,CAAE,CAAC,EACrE,CAAC,CACP,CAEA,GAAIH,EAAoB,CACtB,GAAM,CAAE,QAAAI,EAAS,SAAAC,CAAS,EAAIL,EAGxBM,EAAaJ,GAAeL,EAAM,gBAAkB,GAO1D,OACEU,GAAeF,EAAUC,CAAU,GAAG,IAAI,CAAC,CAACE,EAAOC,CAAG,KAAO,CAC3D,QAAAL,EACA,MAAAI,EACA,IAAAC,CACF,EAAE,GAAK,CAAC,CAEZ,CAEA,MAAO,CAAC,CACV,CAMO,SAASC,GAAsBC,EAGT,CAC3B,IAAMC,EAAUhB,GAAwBe,CAAI,EACtCE,EAAQD,EAAQ,CAAC,EACjBE,EAAOF,EAAQ,GAAG,EAAE,EAG1B,OAAOC,GAASC,EACZ,CAAE,QAASD,EAAM,QAAS,MAAOA,EAAM,MAAO,IAAKC,EAAK,GAAI,EAC5D,MACN,CCxGA,IAAAC,GAAwB,QACxBC,GAA2B,QAC3BC,GAAoC,QACpCC,GAAwB,QACxBC,GAAuC,QAsCvC,SAASC,GAAaC,EAAY,CAChC,OAAOA,EAAG,QAAQ,SAAU,EAAE,CAChC,CAEA,SAASC,GAAkBC,EAAqBF,EAAY,CAC1D,IAAMG,EAASJ,GAAaC,CAAE,EAC9B,MAAO,CACLE,EAAW,IAAI,MAAM,EACrBA,EAAW,IAAI,IAAI,EACnBA,EAAW,IAAI,eAAe,EAC9BA,EAAW,GAAG,CAChB,EAAE,KAAKE,GAAK,OAAOA,GAAM,WAAaA,IAAMJ,GAAMD,GAAaK,CAAC,IAAMD,EAAO,CAC/E,CAEA,SAASE,GAAaC,EAAmB,CACvC,OAAOA,EAAQ,IAAIC,IAAM,CACvB,aAAcA,EAAE,aAChB,QAASA,EAAE,QACX,MAAO,KAAK,MAAMA,EAAE,KAAK,EACzB,IAAK,KAAK,KAAKA,EAAE,GAAG,CACtB,EAAE,CACJ,CAOO,SAASC,GAAcC,EAAkB,CAC9C,IAAMC,EAAUL,GAAaI,EAAK,eAAe,eAAiB,CAAC,CAAC,EAC9DE,EAAYN,GAAaI,EAAK,gBAAgB,EACpD,OAAOC,EAAQ,OAAS,EAAI,CAACA,EAASC,CAAS,EAAI,CAACA,CAAS,CAC/D,CAOO,SAASC,GAA6CC,EAAa,CACxE,OAAOA,EAAO,OAAO,GAAK,EAAE,OAAS,cAAc,CACrD,CAEA,eAAeC,GACbC,EACAC,EACA,CACA,IAAMP,EAAOM,EAAK,cACZE,KAAU,eAAWF,CAAI,EACzBG,EAAY,8BACZL,EAASD,GAAiBH,EAAK,MAAM,EAC3C,QAAWH,KAAWE,GAAcC,CAAI,EACtC,QAAWU,KAASN,EAAQ,CAC1B,IAAMO,EAAQ,MAAMH,EAAQ,WAAW,KACrCC,EACA,kBACA,CAAE,iBAAe,YAAQC,EAAO,SAAS,EAAG,QAAAb,CAAQ,CACtD,EACA,QAAWe,KAAQD,EAAO,CACxB,IAAME,EAAMC,GAAsBF,CAAI,EAAE,KAAKG,GAC3CvB,GAAkBuB,EAAGR,CAAY,CACnC,EACA,GAAIM,EACF,OAAOA,CAEX,CACF,CAGJ,CAEA,eAAeG,GAAUV,EAAiCb,EAAqB,CAC7E,IAAMwB,EAAW,MAAMC,GAAS,CAC9B,MAAOzB,EAAW,IAAI,OAAO,EAC7B,IAAKA,EAAW,IAAI,KAAK,EACzB,QAASA,EAAW,IAAI,SAAS,EACjC,aAAca,EAAK,cAAe,cAAc,CAAC,EACjD,WAAS,eAAWA,CAAI,CAC1B,CAAC,EACD,SAAO,wBAAoB,CAAE,WAAAb,EAAY,GAAGwB,CAAS,CAAC,GAAG,OAC3D,CAGA,IAAME,GAAe,IAAI,QAEzB,eAAeC,GAAO,CACpB,KAAAd,EACA,aAAAC,EACA,YAAAc,EACA,eAAAC,EACA,UAAAC,CACF,EAMG,CACD,IAAMC,EAAarB,GAAiBG,EAAK,cAAe,MAAM,EAAE,OAChE,GAAI,CACFA,EAAK,YAAY,cAAcC,CAAY,wBAAwB,EACnE,IAAMd,EAAa,MAAMY,GAAeC,EAAMC,CAAY,EAC1D,GAAI,CAACd,EACH,MAAM,IAAI,MACR,eAAec,CAAY,0BAA0BiB,CAAU,mIACjE,EAEF,IAAMC,EAAkB,MAAMT,GAAUV,EAAMb,CAAU,EACxD,GAAI,CAACgC,EACH,MAAM,IAAI,MAAM,eAAelB,CAAY,2BAA2B,EAExE,GAAI,CAACgB,EAAU,EACb,OAIF,IAAMG,EAAiBjC,EAAW,OAAO,KAGzC,gBAAY,IAAM,CAChBa,EAAK,YAAY,EAAE,EACfe,GAAe,CAACA,EAAY,iBAC9Bf,EAAK,eAAe,CAClB,GAAGe,EACH,mBAAoBK,EACpB,gBAAAD,CACF,CAAC,EAECH,GAAkB,CAACA,EAAe,iBACpChB,EAAK,kBAAkB,CACrB,GAAGgB,EACH,mBAAoBI,EACpB,gBAAAD,CACF,CAAC,EAEHnB,EAAK,oBAAoBoB,CAAc,CACzC,CAAC,CACH,OAASC,EAAG,CACV,QAAQ,MAAMA,CAAC,EACXJ,EAAU,IACZjB,EAAK,YAAY,EAAE,EACnBA,EAAK,SAASqB,CAAC,EAEnB,CACF,CAWO,SAASC,GACdtB,EACA,CACA,GAAM,CACJ,oBAAAuB,EACA,iBAAAC,EACA,cAAAC,EACA,YAAAV,EACA,eAAAC,CACF,EAAIhB,EACJ,GACE,CAACuB,GACDC,GACA,CAACC,GAAe,aAChBA,EAAc,OAAO,SAAW,EAEhC,OAEF,IAAMC,GAAUb,GAAa,IAAIb,CAAI,GAAK,GAAK,EAC/Ca,GAAa,IAAIb,EAAM0B,CAAM,KAC7B,cAAU,IAAM,CACTZ,GAAO,CACV,KAAAd,EACA,aAAcuB,EACd,YAAAR,EACA,eAAAC,EACA,UAAW,OAAM,YAAQhB,CAAI,GAAKa,GAAa,IAAIb,CAAI,IAAM0B,CAC/D,CAAC,CACH,CAAC,CACH,CxC/HO,IAAMC,GAAkB,CAAC,OAAQ,UAAW,QAAQ,EAmD5C,SAARC,IAAqC,CAC1C,OAAO,QACJ,QACC,iBACAC,GAAU,EACV,QAAM,MAAM,UAAW,CAIrB,gBAAiB,QAAM,MAAM,QAAM,MAAM,EAIzC,iBAAkB,QAAM,OAAO,EAQ/B,oBAAqB,QAAM,MAAM,QAAM,MAAM,EAI7C,YAAa,QAAM,OAAgC,EAInD,eAAgB,QAAM,OAAmC,EAIzD,aAAc,QAAM,aAAa,QAAM,OAAQ,OAAO,EAWtD,eAAgB,QAAM,aAAa,QAAM,OAAQ,CAAC,EAKlD,UAAW,QAAM,MAAM,QAAM,MAAM,EAKnC,gBAAiB,QAAM,aAAa,QAAM,QAAS,EAAK,EAKxD,KAAM,QAAM,OAAqC,EAKjD,YAAa,QAAM,MAAM,QAAM,MAAM,EAkBrC,gBAAiB,GAKjB,UAAW,QAAM,OAA8B,CACjD,CAAC,CACH,EAEC,SACC,KASM,CAIJ,IAAK,OAIL,SAAU,GAIV,kBAAmB,GAInB,cAAe,GAOf,eAAgB,OAOhB,iBAAkB,GAQlB,iBAAkB,OAMlB,iBAAkB,EACpB,EACF,EAEC,MAAMC,IAAS,CAId,IAAI,oBAAqB,CACvB,OAAOA,EAAK,iBACRC,GAAcD,EAAK,gBAAgB,EACnC,MACN,EAKA,IAAI,eAAgB,CAClB,GAAM,CAAE,MAAAE,CAAM,KAAI,eAAWF,CAAI,EACjC,OAAOE,EAAM,KAAKC,GAAKA,EAAE,KAAOH,EAAK,eAAe,CACtD,CACF,EAAE,EAED,MAAMA,IAAS,CAOd,IAAI,0BAAsC,CACxC,GAAM,CAAE,SAAAI,CAAS,EAAIJ,EACrB,OAAOI,IAAa,OAChB,CAAC,EACDC,GAAwB,CAAE,MAAOL,EAAM,MAAOI,CAAS,CAAC,CAC9D,EAMA,IAAI,0BAAsC,CACxC,GAAM,CAAE,cAAAE,CAAc,EAAIN,EAC1B,OAAOM,IAAkB,OACrB,CAAC,EACDD,GAAwB,CAAE,MAAOL,EAAM,MAAOM,CAAc,CAAC,CACnE,EAMA,IAAI,qBAAiC,CACnC,MAAO,CACL,GAAG,KAAK,yBACR,GAAG,KAAK,wBACV,CACF,CACF,EAAE,EAED,MAAMN,IAAS,CAYd,IAAI,kBAAmB,CACrB,GAAM,CAAE,mBAAAO,EAAoB,QAAAC,CAAQ,EAAIR,EAAK,MAAQ,CAAC,EAItD,OAAOA,EAAK,iBAAmB,CAAC,EAAEO,GAAsBC,EAC1D,EAOA,IAAI,kBAAmC,CACrC,GAAM,CAAE,KAAAC,EAAM,KAAAC,CAAK,EAAIV,EACjBW,KAAa,eAAYF,CAAI,EAC7BG,EAAU,CAACC,EAA2BC,IAAoB,CAC9D,IAAMC,EAAON,EAAKI,CAAG,EACrB,OAAOE,GAAQ,CAACD,GAAU,CAACH,EAAWE,CAAG,EAAIE,EAAO,MACtD,EACA,MAAO,CACL,IAAKH,EAAQ,MAAOZ,EAAK,eAAiBU,GAAM,kBAAkB,EAClE,KAAME,EAAQ,OAAQZ,EAAK,cAAc,EACzC,aAAcY,EAAQ,eAAgBZ,EAAK,sBAAsB,EACjE,IAAKY,EAAQ,MAAOZ,EAAK,aAAa,CACxC,CACF,CACF,EAAE,EAED,QAAQA,IAAS,CAIhB,mBAAmBgB,EAAc,CAC/BhB,EAAK,gBAAkBgB,CACzB,EAIA,YAAYA,EAAa,CACvBhB,EAAK,SAAWgB,CAClB,EAIA,OAAOA,EAAa,CAClBhB,EAAK,IAAMgB,CACb,EAIA,eAAeC,EAAoB,CACjCjB,EAAK,YAAciB,CACrB,EAIA,oBAAoBD,EAA+B,CACjDhB,EAAK,iBAAmBgB,CAC1B,EAIA,kBAAkBC,EAAuB,CACvCjB,EAAK,eAAiBiB,CACxB,EAIA,QAAQD,EAAwB,CAC9BhB,EAAK,KAAOgB,CACd,EAIA,gBAAgBA,EAAa,CAC3BhB,EAAK,aAAegB,CACtB,EAIA,aAAaA,EAAc,CACzBhB,EAAK,UAAYgB,CACnB,EAIA,eAAeA,EAAc,CAC3BhB,EAAK,YAAcgB,CACrB,EAIA,mBAAmBA,EAAc,CAC/BhB,EAAK,gBAAkBgB,CACzB,EAIA,qBAAqBA,EAAc,CACjChB,EAAK,kBAAoBgB,CAC3B,EAIA,iBAAiBA,EAAc,CAC7BhB,EAAK,cAAgBgB,CACvB,EAIA,kBAAkBA,EAAsB,CACtChB,EAAK,eAAiBgB,CACxB,EAIA,oBAAoBA,EAAc,CAChChB,EAAK,iBAAmBgB,CAC1B,EAIA,oBAAoBA,EAAuB,CACzChB,EAAK,iBAAmBgB,CAC1B,EAUA,cAAe,CACbhB,EAAK,kBAAkB,MAAM,EAC7BA,EAAK,iBAAmB,OACxBA,EAAK,YAAc,OACnBA,EAAK,eAAiB,OACtBA,EAAK,KAAO,OACZA,EAAK,gBAAkB,GACvBA,EAAK,SAAW,GAChBA,EAAK,IAAM,OACXA,EAAK,MAAQ,MACf,EAWA,aAAc,CACZA,EAAK,kBAAkB,MAAM,EAC7BA,EAAK,iBAAmB,OACxBA,EAAK,SAAW,GAChBA,EAAK,IAAM,OACXA,EAAK,MAAQ,OACbA,EAAK,gBAAkB,GACnBA,EAAK,cACPA,EAAK,YAAc,CAAE,GAAGA,EAAK,WAAY,GAEvCA,EAAK,iBACPA,EAAK,eAAiB,CAAE,GAAGA,EAAK,cAAe,GAE7CA,EAAK,OACPA,EAAK,KAAO,CAAE,GAAGA,EAAK,IAAK,EAE/B,EAIA,oBAAoBgB,EAAc,CAChChB,EAAK,iBAAmBgB,CAC1B,EAIA,eAAeE,EAAe,CAC5B,GAAM,CAAE,cAAAC,EAAe,gBAAAC,CAAgB,EAAIpB,EACrCqB,EAAKC,GAAsB,CAAE,MAAOtB,EAAM,MAAAkB,CAAM,CAAC,EAEnD,CAACG,GAAM,CAACF,IAORC,EACFD,EAAc,MAAME,CAAE,EAEtBF,EAAc,SAASE,EAAG,MAAOA,EAAG,OAAO,EAE/C,CACF,EAAE,EACD,QAAQrB,GAAQ,CACf,IAAMuB,EAAwBvB,EAAK,iBAAiB,KAAKA,CAAI,EAE7D,MAAO,CAIL,iBAAiBwB,EAAcC,EAAc,CAC3CF,EAAsBC,EAAKC,CAAG,EAC1BD,IAAQ,QACVxB,EAAK,eAAewB,CAAG,CAE3B,CACF,CACF,CAAC,EAEA,QAAQxB,GAAQ,CACf,IAAM0B,EAAa1B,EAAK,MAAM,KAAKA,CAAI,EACvC,MAAO,CAaL,OAAQ,CACN,GAAM,CAAE,YAAA2B,EAAa,UAAAC,EAAW,gBAAAR,CAAgB,EAAIpB,EACpD0B,EAAW,EACPC,IAAgB,QAClB3B,EAAK,eAAe2B,CAAW,EAEjC3B,EAAK,aAAa4B,CAAS,EAC3B5B,EAAK,mBAAmBoB,CAAe,EACvCpB,EAAK,oBAAoB,EAAK,EAC9BA,EAAK,kBAAkB,MAAS,EAChCA,EAAK,oBAAoB,EAAK,CAChC,CACF,CACF,CAAC,EAEA,MAAMA,GAAQ,CACb,IAAM6B,EAAiB7B,EAAK,UAAU,KAAKA,CAAI,EAC/C,MAAO,CAKL,WAAwB,CACtB,MAAO,CACL,GAAG6B,EAAe,EAClB,CACE,MAAO,+BACP,KAAM,WACN,QAAS7B,EAAK,gBACd,QAAS,IAAM,CACbA,EAAK,mBAAmB,CAACA,EAAK,eAAe,CAC/C,CACF,CACF,CACF,CACF,CACF,CAAC,EAEA,QAAQA,IAAS,CAChB,aAAc,CACZ8B,GAAW,KAIX,eAAY9B,EAAM,IAAM,CACtBA,EAAK,kBAAkB,MAAM,CAC/B,CAAC,EACD+B,GAAe/B,CAAI,EACnB,QAAWgC,IAAM,CACfC,GACAC,GACAC,GACAC,GACAC,GACAC,EACF,KACE,eACEtC,KACA,YAAQ,IAAM,CACZgC,EAAGhC,CAAI,CACT,CAAC,CACH,KAIF,eAAYA,KAAM,YAAQuC,GAA2BvC,CAAI,CAAC,CAAC,KAC3D,eAAYA,KAAM,YAAQwC,GAAyBxC,CAAI,CAAC,CAAC,CAC3D,CACF,EAAE,CACN",
|
|
6
6
|
"names": ["import_pluggableElementTypes", "import_util", "import_mobx_state_tree", "import_mobx", "import_util", "import_mobx_state_tree", "import_mobx", "BLOSUM62_KEYS", "BLOSUM62_DATA", "NUM_SYMBOLS", "BLOSUM62", "UNKNOWN", "symbolOfCode", "i", "key", "encode", "seq", "out", "code", "GAP_OPEN", "GAP_EXTEND", "NEG", "M", "X", "Y", "alignToQuery", "query", "target", "q", "t", "n", "m", "w", "ptr", "prevM", "prevX", "prevY", "curM", "curX", "curY", "j", "best", "bestI", "bestJ", "bestState", "qi", "row", "s", "mScore", "mFrom", "xScore", "xFrom", "yScore", "yFrom", "state", "arr", "matched", "inserts", "pending", "flushInsert", "at", "idx", "mergeOnQuery", "aligned", "insertLength", "alignment", "rowOf", "parts", "name", "MAX_PAIR_CELLS", "CELLS_PER_YIELD", "checkPairSize", "length", "queryLength", "alignInBrowser", "targets", "onProgress", "signal", "sinceYield", "timeout", "r", "parseFastaRecords", "text", "records", "block", "header", "lines", "searchBackends", "searchEbiBlast", "searchEbiPhmmer", "algorithms", "launchMSA", "algorithm", "sequence", "onProgress", "signal", "query", "targets", "parseFastaRecords", "alignInBrowser", "config", "job", "runEbiJob", "msa", "tree", "makeId", "h", "taxonomyInfo", "speciesName", "info", "word", "buildRowMetadata", "desc", "metadata", "taxInfo", "makeRowNames", "hits", "baseNames", "hit", "counts", "name", "used", "base", "buildSearchMsa", "query", "queryRow", "querySeqName", "treeMetadata", "rowNames", "sequences", "i", "rowName", "DB_NAME", "STORE_NAME", "MAX_CACHED_SEARCHES", "MAX_AGE_MS", "getDB", "createDbOpener", "db", "searchKey", "searchProgram", "database", "maxHits", "querySeqName", "query", "getCachedSearch", "id", "bestEffort", "entry", "saveSearch", "all", "doomed", "a", "b", "tx", "e", "UNIPROT", "REFERENCE_PROTEOME", "UNIPROT_ACCESSION", "ENTRY_FIELDS", "parseEntry", "entry", "primaryAccession", "uniProtkbId", "organism", "sequence", "parseEntries", "json", "e", "m", "rank", "a", "b", "resolveUniProtEntry", "candidates", "taxId", "signal", "raw", "candidate", "cleanGeneCandidate", "jsonfetch", "UNIPROT", "isAbortError", "query", "best", "fetchClusterId", "accession", "identity", "cluster", "PAGE", "MAX_SCANNED", "nextLink", "response", "link", "fetchClusterMembers", "clusterId", "referenceProteomesOnly", "taxa", "exclude", "limit", "defaultMaxSpecies", "onProgress", "url", "bySpecies", "scanned", "total", "handleFetch", "members", "member", "current", "t", "fetchUnirefHomologs", "truncated", "labels", "dedupeLabels", "i", "resolveQuery", "self", "scope", "params", "cleanProteinSequence", "entry", "resolveUniProtEntry", "name", "search", "query", "querySeqName", "maxHits", "key", "onProgress", "onRid", "signal", "hits", "queryRow", "rid", "searchBackends", "nameFailures", "taxonomyInfo", "fetchTaxonomyInfo", "h", "t", "e", "fasta", "treeMetadata", "buildSearchMsa", "namesFailed", "saveSearch", "doLaunchBlast", "selectedTranscript", "defaultMaxHits", "searchProgram", "msaAlgorithm", "checkPairSize", "searchKey", "found", "getCachedSearch", "warnings", "msa", "tree", "launchMSA", "transcript", "transcriptFields", "treeMetadataJson", "saveBlastResult", "str", "transcriptName", "PANTHER", "UNIPROT", "parseGenomes", "json", "g", "parseGeneRef", "ref", "code", "xrefs", "accession", "x", "geneRef", "parseMatches", "mapping", "mapped", "rows", "hits", "query", "row", "target", "pickOnePerGenome", "byCode", "hit", "current", "parseSequences", "map", "r", "genomes", "fetchGenomes", "jsonfetch", "e", "UNIPROT_CHUNK", "fetchSequences", "accessions", "signal", "i", "chunk", "acc", "seq", "matchOrthologs", "candidates", "taxId", "targets", "matched", "raw", "cleanGeneCandidate", "params", "t", "parsed", "fetchPantherOrthologs", "taxa", "exclude", "limit", "defaultMaxSpecies", "onProgress", "all", "byTaxId", "queryGenome", "match", "rank", "picks", "p", "a", "b", "names", "sequences", "taxonomyNames", "described", "genome", "info", "labels", "dedupeLabels", "d", "scientificName", "commonName", "querySequence", "taxIds", "fetchTaxonomyInfo", "isAbortError", "doLaunchOrthologs", "self", "scope", "taxId", "taxa", "maxSpecies", "geneCandidates", "msaAlgorithm", "proteinSequence", "source", "identity", "referenceProteomesOnly", "onProgress", "act", "signal", "request", "geneId", "representative", "rows", "warning", "findPantherOrthologs", "findUnirefHomologs", "findNcbiOrthologs", "cleanedSeq", "cleanProteinSequence", "sourceNames", "queryLabel", "queryRowLabel", "treeMetadata", "buildQueryMetadata", "row", "buildRowMetadata", "launchMSA", "r", "rest", "resolved", "resolveGeneId", "fetchRepresentativeQueryProtein", "fetchOrthologRows", "found", "fetchUnirefHomologs", "fetchPantherOrthologs", "name", "info", "fetchTaxonomyInfo", "e", "isAbortError", "dedupeLabels", "fetchProteinForGene", "metadata", "transcriptName", "readUint64LE", "view", "offset", "lo", "ENTRY_SIZE", "EMPTY", "parseEntries", "buf", "numEntries", "compressed", "uncompressed", "view", "i", "offset", "readUint64LE", "findUpperBound", "position", "lo", "hi", "mid", "GziIndex", "filehandle", "error", "header", "body", "length", "startBlock", "endBlock", "Z_NO_FLUSH", "Z_SYNC_FLUSH", "Z_FINISH", "Z_OK", "Z_STREAM_END", "Z_NEED_DICT", "Z_BUF_ERROR", "_has", "obj", "key", "assign", "sources", "source", "p", "shrinkBuf", "buf", "size", "fnTyped", "dest", "src", "src_offs", "len", "dest_offs", "i", "chunks", "l", "pos", "chunk", "result", "fnUntyped", "typedOK", "supported", "arraySet", "flattenChunks", "Buf8", "Buf16", "Buf32", "strApplyOK", "result", "strApplyUintOK", "utf8len", "c", "table", "Buf8", "q", "arg", "string2buf", "str", "buf", "c2", "m_pos", "i", "str_len", "buf_len", "_buf2binstring", "len", "shrinkBuf", "binstring2buf", "str", "buf", "i", "len", "buf2string", "max", "out", "c", "c_len", "utf16buf", "utf8len", "_buf2binstring", "utf8border", "pos", "GZheader", "adler32", "adler", "buf", "len", "pos", "s1", "s2", "n", "makeTable", "c", "table", "n", "k", "crcTable", "crc32", "crc", "buf", "len", "pos", "t", "end", "BAD", "TYPE", "inflate_fast", "strm", "start", "state", "_in", "last", "_out", "beg", "end", "dmax", "wsize", "whave", "wnext", "s_window", "hold", "bits", "lcode", "dcode", "lmask", "dmask", "here", "op", "len", "dist", "from", "from_source", "input", "output", "top", "dolen", "dodist", "MAXBITS", "ENOUGH_LENS", "ENOUGH_DISTS", "CODES", "LENS", "DISTS", "lbase", "lext", "dbase", "dext", "inflate_table", "type", "lens", "lens_index", "codes", "table", "table_index", "work", "opts", "bits", "len", "sym", "min", "max", "root", "curr", "drop", "left", "used", "huff", "incr", "fill", "low", "mask", "next", "base", "base_index", "end", "count", "Buf16", "offs", "extra", "extra_index", "here_bits", "here_op", "here_val", "CODES", "LENS", "DISTS", "Z_FINISH", "Z_BLOCK", "Z_TREES", "Z_OK", "Z_STREAM_END", "Z_NEED_DICT", "Z_STREAM_ERROR", "Z_DATA_ERROR", "Z_MEM_ERROR", "Z_BUF_ERROR", "Z_DEFLATED", "HEAD", "FLAGS", "TIME", "OS", "EXLEN", "EXTRA", "NAME", "COMMENT", "HCRC", "DICTID", "DICT", "TYPE", "TYPEDO", "STORED", "COPY_", "COPY", "TABLE", "LENLENS", "CODELENS", "LEN_", "LEN", "LENEXT", "DIST", "DISTEXT", "MATCH", "LIT", "CHECK", "LENGTH", "DONE", "BAD", "MEM", "SYNC", "ENOUGH_LENS", "ENOUGH_DISTS", "zswap32", "q", "InflateState", "Buf16", "inflateResetKeep", "strm", "state", "Z_STREAM_ERROR", "HEAD", "Buf32", "ENOUGH_LENS", "ENOUGH_DISTS", "Z_OK", "inflateReset", "inflateReset2", "windowBits", "wrap", "inflateInit2", "ret", "virgin", "lenfix", "distfix", "fixedtables", "state", "sym", "Buf32", "inflate_table", "LENS", "DISTS", "updatewindow", "strm", "src", "end", "copy", "dist", "Buf8", "arraySet", "inflate", "flush", "input", "output", "next", "put", "have", "left", "hold", "bits", "_in", "_out", "from", "from_source", "here", "here_bits", "here_op", "here_val", "last_bits", "last_op", "last_val", "len", "ret", "hbuf", "opts", "n", "order", "Z_STREAM_ERROR", "TYPE", "TYPEDO", "Z_OK", "inf_leave", "HEAD", "crc32", "FLAGS", "BAD", "Z_DEFLATED", "DICTID", "TIME", "OS", "EXLEN", "EXTRA", "NAME", "COMMENT", "HCRC", "zswap32", "DICT", "Z_NEED_DICT", "Z_BLOCK", "Z_TREES", "CHECK", "STORED", "LEN_", "TABLE", "COPY_", "COPY", "LENLENS", "CODES", "CODELENS", "LEN", "inflate_fast", "LIT", "LENEXT", "DIST", "DISTEXT", "MATCH", "adler32", "LENGTH", "DONE", "Z_STREAM_END", "Z_DATA_ERROR", "MEM", "Z_MEM_ERROR", "SYNC", "Z_FINISH", "Z_BUF_ERROR", "inflateEnd", "inflateGetHeader", "head", "inflateSetDictionary", "dictionary", "dictLength", "dictid", "messages_default", "ZStream", "toString", "Inflate", "_Inflate", "options", "assign", "opt", "ZStream", "status", "inflateInit2", "Z_OK", "messages_default", "GZheader", "inflateGetHeader", "string2buf", "inflateSetDictionary", "data", "mode", "strm", "chunkSize", "dictionary", "_mode", "next_out_utf8", "tail", "utf8str", "dict", "allowBufError", "Z_FINISH", "Z_NO_FLUSH", "binstring2buf", "Buf8", "inflate", "Z_NEED_DICT", "Z_BUF_ERROR", "Z_STREAM_END", "Z_SYNC_FLUSH", "utf8border", "buf2string", "arraySet", "shrinkBuf", "inflateEnd", "chunk", "flattenChunks", "input", "inflator", "ungzip", "inflate", "concatUint8Array", "args", "total", "entry", "mergedArray", "offset", "__webpack_require__", "exports", "definition", "i", "key", "binding", "obj", "prop", "bgzf_wasm_bg_namespaceObject", "ChunkSliceResult", "__wbg_Error_92b29b0548f8b746", "__wbg___wbindgen_throw_344f42d3211c4765", "__wbg_set_wasm", "decompress_all", "decompress_chunk_slice", "wasm_bgzf_wasm_bg_namespaceObject", "_ChunkSliceResult", "ptr", "ChunkSliceResultFinalization", "wasm", "retptr", "r0", "getDataViewMemory0", "r1", "v1", "getArrayU8FromWasm0", "getArrayF64FromWasm0", "input", "ptr0", "passArray8ToWasm0", "len0", "WASM_VECTOR_LEN", "r2", "r3", "takeObject", "v2", "min_block_position", "min_data_position", "max_block_position", "max_data_position", "arg0", "arg1", "ret", "getStringFromWasm0", "addHeapObject", "heap_next", "heap", "idx", "dropObject", "len", "getFloat64ArrayMemory0", "getUint8ArrayMemory0", "cachedDataViewMemory0", "cachedFloat64ArrayMemory0", "decodeText", "cachedUint8ArrayMemory0", "getObject", "arg", "malloc", "cachedTextDecoder", "MAX_SAFARI_DECODE_BYTES", "numBytesDecoded", "val", "wrapper_wasm", "initPromise", "init", "bytes", "instance", "decompressAll", "BGZF_MIN_BLOCK_SIZE", "hasGzipHeader", "data", "hasBgzfHeader", "errorMessage", "error", "decompressGzip", "inputData", "stream", "ungzip", "wrapGzipHeaderError", "unzip", "decompressAll", "DEFAULT_BLOCK_CONCURRENCY", "MAX_BATCH_UNCOMPRESSED_SIZE", "createLimit", "concurrency", "active", "queue", "next", "task", "resolve", "makeBatches", "compressed", "uncompressed", "nextCompressedPosition", "batches", "numBlocks", "start", "end", "sliceBatch", "uncompressedBuffer", "batchStart", "readStart", "readEnd", "sourceOffset", "sourceEnd", "BgzFilehandle", "filehandle", "gziFilehandle", "blockConcurrency", "GziIndex", "length", "position", "decompressed", "batch", "buffer", "unzip", "concatUint8Array", "import_io", "fetchIndexedMsa", "location", "name", "open", "uri", "idxText", "entry", "lookup", "bytes", "BgzFilehandle", "versionless", "s", "want", "line", "id", "offset", "length", "import_util", "genomeToMSA", "model", "assemblyManager", "hovered", "transcriptToMsaMap", "connectedView", "mafRegion", "hasHoverPosition", "hasQueryRow", "coord", "refName", "genomePos", "assembly", "canonical", "name", "hoveredRefName", "querySeqPosToVisibleCol", "proteinPos", "transcriptPosToVisibleCol", "DB_NAME", "STORE_NAME", "DB_VERSION", "getDB", "createDbOpener", "db", "getCachedDomains", "accessions", "bestEffort", "tx", "results", "accession", "saveDomains", "entries", "entry", "field", "xml", "tag", "text", "decodeXmlEntities", "parseQualifiers", "featureXml", "quals", "re", "m", "name", "value", "parseBoundingSpan", "starts", "ends", "block", "from", "to", "point", "MIN_FEATURE_LENGTH", "parseFeature", "key", "xref", "span", "cddId", "isDomain", "noteName", "accession", "parseCddDomains", "byAccession", "seqRe", "seqMatch", "seqXml", "matches", "featRe", "featMatch", "match", "acc", "fetchProteinDomains", "accessions", "signal", "unique", "cached", "getCachedDomains", "uncached", "i", "hit", "toCache", "batchSize", "batch", "eutilsText", "efetchUrl", "e", "isAbortError", "parsed", "saveDomains", "loadProteinDomains", "self", "signal", "rowAccessions", "rowName", "row", "byAccession", "fetchProteinDomains", "r", "annotations", "accession", "signature", "locations", "start", "end", "DB_NAME", "DB_VERSION", "STORE_NAME", "getDB", "createDbOpener", "db", "generateDataStoreId", "storeMsaData", "id", "data", "storedData", "retrieveMsaData", "result", "e", "_id", "_timestamp", "payload", "cleanupOldData", "maxAgeMs", "cutoffTime", "cursor", "deletedCount", "import_util", "import_mobx", "buildTree", "self", "e", "e2", "runLaunch", "args", "startLaunch", "message", "launch", "onLaunched", "controller", "signal", "act", "fn", "scope", "arg", "warnings", "data", "warning", "isAbortError", "isProteinView", "view", "v", "getProteinViews", "views", "genomeToTranscriptSeqMapping", "feature", "strand", "refName", "uniqueCds", "f", "key", "cds", "a", "b", "g2p", "p2g", "p2gCodon", "proteinCounter", "lastProteinPos", "length", "i", "genomePos", "proteinPos", "getCodonRanges", "p2gCodon", "proteinPos", "positions", "sorted", "a", "b", "ranges", "pos", "last", "MAX_CODING_BASES", "isRecord", "val", "isCoordinate", "isCds", "phaseOf", "phase", "cdsRows", "feature", "subfeatures", "children", "mappableTranscript", "refName", "strand", "cds", "f", "coding", "sum", "warned", "transcriptMap", "checked", "mapping", "genomeToTranscriptSeqMapping", "a", "b", "lowerBound", "sorted", "value", "lo", "hi", "mid", "proteinPositionsInRange", "map", "start", "end", "positions", "codingPositions", "g2p", "EXPIRED_MESSAGE", "RELAUNCHABLE", "START_OVER", "UNREADABLE_MESSAGE", "EXPIRED_EXTRAS_WARNING", "loadStoredData", "self", "dataStoreId", "stored", "retrieveMsaData", "data", "hasAlignmentSource", "isEmpty", "sameData", "a", "b", "storeDataToIndexedDB", "ownsDataStoreRow", "isStoringData", "loadingStoredData", "lastStoredData", "id", "generateDataStoreId", "storeMsaData", "e", "awaitingTranscript", "launchIfNeeded", "requested", "message", "launch", "runLaunch", "launchOrthologsIfNeeded", "scope", "doLaunchOrthologs", "launchBlastIfNeeded", "doLaunchBlast", "autoLoadProteinDomains", "rows", "domainsRequested", "annotations", "rowData", "row", "controller", "abort", "loadProteinDomains", "isAbortError", "processInit", "init", "msaUrl", "msaIndexedLocation", "msaName", "querySeqName", "indexed", "uniprotId", "getUniprotIdFromAlphaFoldUrl", "rowName", "fasta", "fetchIndexedMsa", "syncGenomeHoverToMsaColumn", "genomeDrivenCol", "col", "genomeToMSA", "genomeHighlightsToVisibleColumns", "field", "connectedViewId", "transcriptToMsaMap", "hasQueryRow", "columns", "view", "getProteinViews", "structure", "start", "end", "proteinPos", "proteinPositionsInRange", "transcriptPosToVisibleCol", "sameColumns", "i", "observeProteinHighlights", "written", "hover", "click", "seed", "winner", "next", "runCleanup", "cleanupOldData", "msaCoordToGenomeRegions", "model", "mouseCol", "querySeqName", "transcriptToMsaMap", "mafRegion", "ungappedPos", "genomePos", "refName", "p2gCodon", "proteinPos", "getCodonRanges", "start", "end", "msaCoordToGenomeCoord", "args", "regions", "first", "last", "import_configuration", "import_util", "import_translateTranscript", "import_mobx_state_tree", "import_mobx", "stripVersion", "id", "transcriptMatches", "transcript", "target", "c", "plainRegions", "regions", "r", "searchWindows", "view", "visible", "displayed", "transcriptTracks", "tracks", "findTranscript", "self", "transcriptId", "session", "sessionId", "track", "feats", "feat", "hit", "getTranscriptFeatures", "t", "translate", "sequence", "fetchSeq", "latestLookup", "lookUp", "blastParams", "orthologParams", "isCurrent", "trackCount", "proteinSequence", "transcriptJson", "e", "resolveConnectedTranscriptIfNeeded", "connectedTranscript", "connectedFeature", "connectedView", "lookup", "orthologSources", "stateModelFactory", "model_default", "self", "transcriptMap", "views", "f", "mouseCol", "msaCoordToGenomeRegions", "mouseClickCol", "msaIndexedLocation", "msaName", "data", "init", "inSnapshot", "unsaved", "key", "source", "text", "arg", "args", "coord", "connectedView", "zoomToBaseLevel", "r2", "msaCoordToGenomeCoord", "superSetMouseClickPos", "col", "row", "superReset", "displayName", "minimized", "superMenuItems", "runCleanup", "loadStoredData", "fn", "storeDataToIndexedDB", "resolveConnectedTranscriptIfNeeded", "launchBlastIfNeeded", "launchOrthologsIfNeeded", "processInit", "autoLoadProteinDomains", "syncGenomeHoverToMsaColumn", "observeProteinHighlights"]
|
|
7
7
|
}
|