@finbheara/names 0.14.0 → 0.16.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/README.md +12 -6
- package/data/bloom/MANIFEST.json +59 -13
- package/dist/chunks/{index-7vvt5hhy.js → index-0wpvbdgh.js} +2631 -1395
- package/dist/chunks/{index-7vvt5hhy.js.map → index-0wpvbdgh.js.map} +4 -4
- package/dist/chunks/{index-kw69ry3j.js → index-74fyytnh.js} +1333 -20
- package/dist/chunks/{index-kw69ry3j.js.map → index-74fyytnh.js.map} +5 -4
- package/dist/chunks/{index-pncn9y2r.js → index-a6f2y4aa.js} +2 -2
- package/dist/chunks/{index-r5fp3znj.js → index-ky754nsf.js} +7 -7
- package/dist/chunks/{index-r5fp3znj.js.map → index-ky754nsf.js.map} +3 -3
- package/dist/chunks/{index-ka8nzreg.js → index-tk01chxw.js} +2 -2
- package/dist/chunks/{index-kw6gbrnq.js → index-tqdbxd92.js} +2 -2
- package/dist/chunks/{index-a15g2gp6.js → index-ye6j60jn.js} +3 -3
- package/dist/chunks/phrase-2hj26asc.js +11 -0
- package/dist/classifier/index.js +3 -3
- package/dist/cli/census.js +4 -4
- package/dist/index.js +14 -8
- package/dist/index.js.map +1 -1
- package/dist/lexicon/index.js +4 -2
- package/dist/lexicon/index.js.map +1 -1
- package/dist/measure/index.js +4 -4
- package/dist/normalize/index.js +9 -5
- package/dist/normalize/index.js.map +1 -1
- package/dist/types/classifier/bf/filters.d.ts +8 -3
- package/dist/types/lexicon/flags.d.ts +13 -5
- package/dist/types/normalize/given-families.d.ts +48 -0
- package/dist/types/normalize/index.d.ts +1 -0
- package/dist/types/normalize/name-kinship.d.ts +12 -8
- package/docs/NAME-NORMALIZATION.md +36 -7
- package/names.txt +2624 -1389
- package/package.json +4 -2
- package/src/normalize/given-families.MANIFEST.json +46 -0
- package/dist/chunks/phrase-672g18kw.js +0 -11
- /package/dist/chunks/{index-pncn9y2r.js.map → index-a6f2y4aa.js.map} +0 -0
- /package/dist/chunks/{index-ka8nzreg.js.map → index-tk01chxw.js.map} +0 -0
- /package/dist/chunks/{index-kw6gbrnq.js.map → index-tqdbxd92.js.map} +0 -0
- /package/dist/chunks/{index-a15g2gp6.js.map → index-ye6j60jn.js.map} +0 -0
- /package/dist/chunks/{phrase-672g18kw.js.map → phrase-2hj26asc.js.map} +0 -0
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
"sources": ["../src/lexicon/index.ts", "../src/lexicon/flags.ts", "../src/lexicon/ascii-approx.ts", "../src/lexicon/apostrophes.ts", "../src/lexicon/irish.ts", "../src/lexicon/keys.ts", "../src/lexicon/display.ts", "../src/lexicon/names-text.ts", "../src/lexicon/parse.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * The lexicon: `names.txt` parsed once, with the lookups every reader needs.\n *\n * `Lexicon.default()` is the committed file, baked into the package. Loading is\n * explicit and memoized; nothing is parsed at import time.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { type DisplayLexicon, displaySpellings } from \"./display.ts\";\nimport { classesOf } from \"./flags.ts\";\nimport { lexiconKey, lookupKey } from \"./keys.ts\";\nimport { NAMES_TXT } from \"./names-text.ts\";\nimport { type NameEntry, parseEntries } from \"./parse.ts\";\n\n/** One entry as the flag lookup answers it: the spelling and its flags, verbatim. */\nexport interface NameFlagsEntry {\n\treadonly name: string;\n\treadonly flags: string;\n}\n\n/** Whether a name is ever a surname (`L`/`A`) and ever a given name (`F`/`M`/`N`). */\nexport interface NameRole {\n\treadonly surname: boolean;\n\treadonly given: boolean;\n}\n\nexport type NameRoleLookup = (token: string) => NameRole | undefined;\n\n/** What the classifier's `createClassifier` and `createSegmenter` take (`NamesData`). */\ninterface FlagSource {\n\tgetNameFlags(name: string): string | null;\n\tmatchBigramContinuations?(firstWord: string): string[][] | null;\n}\n\n/** Where a one-word entry splits: a lower-case letter followed by a capital (`Mc|Dade`). */\nconst INNER_CAPITAL = /(?<=\\p{Ll})(?=\\p{Lu})/u;\n\n/** A `lookupKey` with the spaces and hyphens between its words dropped. */\nconst joinedKey = (key: string): string => key.replace(/[\\s-]+/g, \"\");\n\n/**\n * A word of the token trie that continues a longer entry: `flags` is the entry\n * that ends at this word, if any, and `next` the words that continue it.\n */\nclass TokenNode {\n\tflags: NameFlagsEntry | null | undefined;\n\treadonly next: Level = new Map();\n\tconstructor(flags: NameFlagsEntry | null | undefined) {\n\t\tthis.flags = flags;\n\t}\n}\n\n/**\n * One level of the token trie, word → slot. A word that only ends an entry\n * holds the entry itself (`null`: two entries end there with different flags,\n * so it answers nothing); a word that continues one holds a `TokenNode`.\n */\ntype Level = Map<string, NameFlagsEntry | null | TokenNode>;\ntype Slot = NameFlagsEntry | null | TokenNode | undefined;\n\nconst isNode = (slot: Slot): slot is TokenNode => slot instanceof TokenNode;\nconst flagsOf = (slot: Slot): NameFlagsEntry | null | undefined =>\n\tisNode(slot) ? slot.flags : slot;\n\nexport class Lexicon implements FlagSource {\n\t/** Every entry, in file order. */\n\treadonly entries: readonly NameEntry[];\n\n\t/**\n\t * The token trie: one `lookupKey` word per level. `Ard Ri:BT` is the path\n\t * `ard → ri`; `McDade:LT4` is both `mcdade` and `mc → dade`. A lookup walks\n\t * the words of its key, and the tokenizer reads continuations off the node\n\t * of a word, so the two never disagree.\n\t */\n\tprivate readonly trie: Level = new Map();\n\t/**\n\t * joinedKey → entry, the fallback when a one-word query misses. A key two entries\n\t * share with different flags is ambiguous and answers nothing (`null`), as\n\t * in `./display.ts`; the same flags twice (`Ann-Marie:F`, `AnnMarie:F`) is\n\t * one answer.\n\t */\n\tprivate readonly byJoined = new Map<string, NameFlagsEntry | null>();\n\t/** first word → continuations, longest first; built on first ask per word */\n\tprivate readonly continuations = new Map<string, string[][] | null>();\n\tprivate readonly totalCount: number;\n\tprivate readonly bigramCount: number;\n\tprivate readonly splitCount: number;\n\tprivate displayTable?: Map<string, string>;\n\tprivate rolesTable?: Map<string, NameRole>;\n\n\tprivate constructor(entries: readonly NameEntry[]) {\n\t\tthis.entries = entries;\n\t\tlet bigrams = 0;\n\t\tlet total = 0;\n\t\tconst made: NameFlagsEntry[] = [];\n\t\tfor (const { name, flags } of entries) {\n\t\t\tconst key = lookupKey(name);\n\t\t\tconst entry = { name, flags };\n\t\t\tmade.push(entry);\n\t\t\t// the last line wins where two lines share a key\n\t\t\tif (this.end(key.split(/\\s+/), entry) === undefined) total++;\n\t\t\tconst joined = joinedKey(key);\n\t\t\tconst held = this.byJoined.get(joined);\n\t\t\tif (held === undefined) this.byJoined.set(joined, entry);\n\t\t\telse if (held !== null && held.flags !== flags) this.byJoined.set(joined, null);\n\t\t\tif (flags.includes(\"B\")) bigrams++;\n\t\t}\n\t\t// A one-word entry with a capital inside it is also a path of its parts:\n\t\t// `McDade` is `mc → dade`, `NiMhaolvarna` is `ni → mhaolvarna`. The file's\n\t\t// own capitals say where a name splits, so no list of prefixes is kept,\n\t\t// and `Ecole` (no inner capital) never continues `E Cole`. A path an\n\t\t// entry already ends wins; two split spellings with different flags\n\t\t// answer nothing.\n\t\tconst splits = new Map<string, NameFlagsEntry | null>();\n\t\tfor (const entry of made) {\n\t\t\tconst { name, flags } = entry;\n\t\t\tif (/\\s/.test(name)) continue;\n\t\t\tconst parts = name.split(INNER_CAPITAL);\n\t\t\tif (parts.length < 2) continue;\n\t\t\tconst key = lookupKey(parts.join(\" \"));\n\t\t\tif (!splits.has(key) && flagsOf(this.slot(key.split(/\\s+/))) != null) continue;\n\t\t\tconst held = splits.get(key);\n\t\t\tif (held === undefined)\n\t\t\t\tsplits.set(key, entry); // the same object: one entry, two paths\n\t\t\telse if (held !== null && held.flags !== flags) splits.set(key, null);\n\t\t}\n\t\tlet split = 0;\n\t\tfor (const [key, entry] of splits) {\n\t\t\tthis.end(key.split(/\\s+/), entry);\n\t\t\tif (entry !== null) split++;\n\t\t}\n\t\tthis.totalCount = total + split;\n\t\tthis.bigramCount = bigrams;\n\t\tthis.splitCount = split;\n\t}\n\n\t/** Make `entry` the answer at the end of `words`; returns what was there. */\n\tprivate end(words: readonly string[], entry: NameFlagsEntry | null): Slot {\n\t\tif (words.length === 1) {\n\t\t\tconst word = words[0] as string;\n\t\t\tconst slot = this.trie.get(word);\n\t\t\tif (!isNode(slot)) {\n\t\t\t\tthis.trie.set(word, entry);\n\t\t\t\treturn slot;\n\t\t\t}\n\t\t}\n\t\tlet level = this.trie;\n\t\tconst last = words.length - 1;\n\t\tfor (let i = 0; i < last; i++) {\n\t\t\tconst word = words[i] as string;\n\t\t\tconst slot = level.get(word);\n\t\t\tif (isNode(slot)) level = slot.next;\n\t\t\telse {\n\t\t\t\tconst node = new TokenNode(slot);\n\t\t\t\tlevel.set(word, node);\n\t\t\t\tlevel = node.next;\n\t\t\t}\n\t\t}\n\t\tconst word = words[last] as string;\n\t\tconst slot = level.get(word);\n\t\tif (isNode(slot)) {\n\t\t\tconst was = slot.flags;\n\t\t\tslot.flags = entry;\n\t\t\treturn was;\n\t\t}\n\t\tlevel.set(word, entry);\n\t\treturn slot;\n\t}\n\n\t/**\n\t * The slot for `key`: a `lookupKey`, whose words are separated by single\n\t * spaces. No regex, no array.\n\t */\n\tprivate walk(key: string): Slot {\n\t\tlet level: Level = this.trie;\n\t\tlet from = 0;\n\t\tfor (;;) {\n\t\t\tconst space = key.indexOf(\" \", from);\n\t\t\tconst slot = level.get(space < 0 ? key.slice(from) : key.slice(from, space));\n\t\t\tif (space < 0 || slot === undefined) return slot;\n\t\t\tif (!isNode(slot)) return undefined;\n\t\t\tlevel = slot.next;\n\t\t\tfrom = space + 1;\n\t\t}\n\t}\n\n\t/** The slot at the end of `words`, or undefined. */\n\tprivate slot(words: readonly string[]): Slot {\n\t\tlet level: Level | undefined = this.trie;\n\t\tlet slot: Slot;\n\t\tfor (const word of words) {\n\t\t\tslot = level?.get(word);\n\t\t\tif (slot === undefined) return undefined;\n\t\t\tlevel = isNode(slot) ? slot.next : undefined;\n\t\t}\n\t\treturn slot;\n\t}\n\n\t/** A lexicon over `names.txt`-format text. */\n\tstatic fromText(text: string): Lexicon {\n\t\treturn new Lexicon(parseEntries(text));\n\t}\n\n\tprivate static readonly byPath = new Map<string, Lexicon>();\n\tprivate static committed?: Lexicon;\n\n\t/** The file at `path`, memoized on it. For local edits and tests. */\n\tstatic load(path: string): Lexicon {\n\t\tlet hit = Lexicon.byPath.get(path);\n\t\tif (hit === undefined)\n\t\t\tLexicon.byPath.set(path, (hit = Lexicon.fromText(readFileSync(path, \"utf8\"))));\n\t\treturn hit;\n\t}\n\n\t/** The committed lexicon that ships with the package, parsed on first call. */\n\tstatic default(): Lexicon {\n\t\tif (Lexicon.committed === undefined) Lexicon.committed = Lexicon.fromText(NAMES_TXT);\n\t\treturn Lexicon.committed;\n\t}\n\n\t/** Drop every memo. For a spec that rewrites a fixture at a path it already loaded. */\n\tstatic reset(): void {\n\t\tLexicon.byPath.clear();\n\t\tLexicon.committed = undefined;\n\t}\n\n\t// ── flag lookup (lookupKey) ────────────────────────────────────────────────\n\n\t/**\n\t * The flags of a name or phrase, verbatim, or `null` if the lexicon does not know it.\n\t *\n\t * Asked by `lookupKey` first. A one-word query that misses is asked again\n\t * with its hyphens dropped, against every entry with the spaces and hyphens\n\t * between its words dropped: `ArdRi`, `Tir-na-nOg` and `Mary-Kate` find\n\t * `Ard Ri`, `Tir na nOg` and `MaryKate`. Nothing else is dropped: `(Murphy)`\n\t * and `Co.` are not `Murphy` and `CO`.\n\t *\n\t * A query of several words is never joined. Joining words glues an initial to\n\t * the next one, and `E Cole` would find `Ecole`. `Mc Donald` finds `McDonald`\n\t * because the entry's inner capital gives it the split spelling `Mc Donald`.\n\t */\n\tgetNameFlags(name: string): string | null {\n\t\treturn this.getNameEntry(name)?.flags ?? null;\n\t}\n\n\tgetNameEntry(name: string): NameFlagsEntry | null {\n\t\tconst key = lookupKey(name);\n\t\tconst spaced = key.includes(\" \");\n\t\tconst hit = flagsOf(spaced ? this.walk(key) : this.trie.get(key));\n\t\tif (hit !== undefined || spaced) return hit ?? null;\n\t\treturn this.byJoined.get(joinedKey(key)) ?? null;\n\t}\n\n\t/** Does the name's flag string contain `flag`? Verbatim: a flagless entry has no `F` here. */\n\thasFlag(name: string, flag: string): boolean {\n\t\treturn this.getNameFlags(name)?.includes(flag) ?? false;\n\t}\n\n\t/**\n\t * The continuations of every multi-word entry starting with `firstWord`, each\n\t * an array of the remaining words, longest first; `null` if none starts with it.\n\t *\n\t * matchBigramContinuations(\"new\") -> [[\"south\", \"wales\"], [\"york\"], ...]\n\t * matchBigramContinuations(\"sarah\") -> null\n\t *\n\t * Words are `lookupKey`s: compare a printed word by its `lookupKey`, not by case.\n\t */\n\tmatchBigramContinuations(firstWord: string): string[][] | null {\n\t\tconst first = lookupKey(firstWord);\n\t\tlet hit = this.continuations.get(first);\n\t\tif (hit === undefined) {\n\t\t\tconst paths: string[][] = [];\n\t\t\tconst walk = (level: Level, path: string[]) => {\n\t\t\t\tfor (const [word, slot] of level) {\n\t\t\t\t\tif (flagsOf(slot)) paths.push([...path, word]);\n\t\t\t\t\tif (isNode(slot)) walk(slot.next, [...path, word]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst start = this.trie.get(first);\n\t\t\tif (isNode(start)) walk(start.next, []);\n\t\t\tpaths.sort((a, b) => b.length - a.length);\n\t\t\thit = paths.length > 0 ? paths : null;\n\t\t\tthis.continuations.set(first, hit);\n\t\t}\n\t\treturn hit;\n\t}\n\n\t/** The `B` entry spelled by `words`, or `null`. */\n\tmatchBigram(words: readonly string[]): NameFlagsEntry | null {\n\t\tif (words.length < 2) return null;\n\t\tconst entry = this.getNameEntry(words.join(\" \"));\n\t\treturn entry?.flags.includes(\"B\") ? entry : null;\n\t}\n\n\tstats(): { totalCount: number; bigramCount: number; splitCount: number; prefixCount: number } {\n\t\tlet prefixes = 0;\n\t\tfor (const word of this.trie.keys()) if (this.matchBigramContinuations(word)) prefixes++;\n\t\treturn {\n\t\t\ttotalCount: this.totalCount,\n\t\t\tbigramCount: this.bigramCount,\n\t\t\tsplitCount: this.splitCount,\n\t\t\tprefixCount: prefixes,\n\t\t};\n\t}\n\n\t// ── spelling lookup (lexiconKey) ───────────────────────────────────────────\n\n\t/** key → canonical spelling of the person entries. See `./display.ts`. */\n\tdisplaySpellings(): ReadonlyMap<string, string> {\n\t\tif (this.displayTable === undefined) this.displayTable = displaySpellings(this.entries);\n\t\treturn this.displayTable;\n\t}\n\n\t/** The display renderer's lookup: `lexiconKey` in, canonical spelling out. */\n\tdisplayLexicon(): DisplayLexicon {\n\t\tconst table = this.displaySpellings();\n\t\treturn (key) => table.get(key);\n\t}\n\n\t/** The canonical spelling of a rendered run, or `undefined`. */\n\tdisplaySpelling(rendered: string): string | undefined {\n\t\treturn this.displaySpellings().get(lexiconKey(rendered));\n\t}\n\n\t/**\n\t * Whether a token is ever a surname and ever a given name, unioned over every\n\t * entry that keys to it under `lexiconKey`. An entry that is neither is absent.\n\t */\n\troles(): NameRoleLookup {\n\t\tif (this.rolesTable === undefined) {\n\t\t\tconst table = new Map<string, NameRole>();\n\t\t\tfor (const { name, flags } of this.entries) {\n\t\t\t\tconst classes = classesOf(flags);\n\t\t\t\tconst surname = /[LA]/.test(classes);\n\t\t\t\tconst given = /[FMN]/.test(classes);\n\t\t\t\tif (!surname && !given) continue;\n\t\t\t\tconst key = lexiconKey(name);\n\t\t\t\tif (key === \"\") continue;\n\t\t\t\tconst was = table.get(key);\n\t\t\t\ttable.set(key, {\n\t\t\t\t\tsurname: surname || (was?.surname ?? false),\n\t\t\t\t\tgiven: given || (was?.given ?? false),\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.rolesTable = table;\n\t\t}\n\t\tconst table = this.rolesTable;\n\t\treturn (token) => table.get(lexiconKey(token));\n\t}\n}\n\nexport type { DisplayLexicon } from \"./display.ts\";\nexport { displaySpellings } from \"./display.ts\";\nexport * from \"./flags.ts\";\nexport * from \"./keys.ts\";\nexport { NAMES_TXT } from \"./names-text.ts\";\nexport { type NameEntry, parseEntries } from \"./parse.ts\";\n",
|
|
6
|
-
"/**\n * The flag alphabet, typed, and the predicates over one entry's flag string.\n *\n * FLAGS ARE CASE-SENSITIVE. Upper case classifies; a digit is a tradition\n * footnote. `S` and `
|
|
6
|
+
"/**\n * The flag alphabet, typed, and the predicates over one entry's flag string.\n *\n * FLAGS ARE CASE-SENSITIVE. Upper case classifies; a digit is a tradition\n * footnote. `S`, `X` and `D` are marks that classify nothing.\n *\n * A FLAGLESS ENTRY IS A FEMALE GIVEN NAME. The header says so outright, so every\n * predicate here reads `\"\"` (or a string with no class letter) as `F`.\n */\n\n/** The classification namespace: what KIND of thing the entry is. */\nexport const CLASS_FLAGS = \"FMNLAGTCB\" as const;\n/**\n * Marks: `S` a typo kept on purpose, `X` excluded from the renderer round trip, `D` a given\n * name in a diminutive table (`given-diminutives.json` or `given-families.json`).\n */\nexport const MARK_FLAGS = \"SXD\" as const;\n/** Every letter the file issues. */\nexport const CLASSIFICATION_FLAGS = \"FMNLATGCBSXD\" as const;\n\nexport type ClassFlag = \"F\" | \"M\" | \"N\" | \"L\" | \"A\" | \"G\" | \"T\" | \"C\" | \"B\";\nexport type MarkFlag = \"S\" | \"X\" | \"D\";\nexport type Flag = ClassFlag | MarkFlag;\n\n/**\n * The tradition namespace: a FOOTNOTE INDEX naming which onomastic tradition\n * the print's own morphology puts the name in. At most one, `L` or `A` entries\n * only.\n *\n * AN INDEX IS PERMANENT ONCE ISSUED. Indices run `1`-`9` then `a`-`z`. The\n * first six were assigned alphabetically by tradition name and that fixed the\n * INITIAL assignment only: a tradition added later takes the next free index,\n * never its alphabetical slot, and no index is reused or renumbered.\n */\nexport const TRADITION_FLAGS = \"123456\" as const;\n\nexport type Tradition = \"armenian\" | \"germanic\" | \"iberian\" | \"irish\" | \"nordic\" | \"slavic\";\n\n/** The legend. */\nexport const TRADITION_NAMES: Readonly<Record<string, Tradition>> = {\n\t\"1\": \"armenian\",\n\t\"2\": \"germanic\",\n\t\"3\": \"iberian\",\n\t\"4\": \"irish\",\n\t\"5\": \"nordic\",\n\t\"6\": \"slavic\",\n};\n\n/** The classification letters an entry carries; a flagless entry carries `F`. */\nexport function classesOf(flags: string): string {\n\tconst classes = [...flags].filter((f) => CLASS_FLAGS.includes(f)).join(\"\");\n\treturn classes === \"\" ? \"F\" : classes;\n}\n\nconst has = (flags: string, f: ClassFlag): boolean => classesOf(flags).includes(f);\n\n/** `L`: a surname. `A` is tested separately. */\nexport const isSurname = (flags: string): boolean => has(flags, \"L\");\n/** `F`, `M` or `N`: a given name. */\nexport const isGiven = (flags: string): boolean => /[FMN]/.test(classesOf(flags));\nexport const isFemale = (flags: string): boolean => has(flags, \"F\");\nexport const isMale = (flags: string): boolean => has(flags, \"M\");\nexport const isNeutral = (flags: string): boolean => has(flags, \"N\");\n/** `A`: seen as both a given name and a surname. */\nexport const isAmbiguous = (flags: string): boolean => has(flags, \"A\");\n/** `G`: a place. */\nexport const isPlace = (flags: string): boolean => has(flags, \"G\");\n/** `T`: a tradename, school or teacher. */\nexport const isTradename = (flags: string): boolean => has(flags, \"T\");\n/** `C`: a concept word. */\nexport const isConcept = (flags: string): boolean => has(flags, \"C\");\n/** `B`: a multi-word entry. */\nexport const isMultiWord = (flags: string): boolean => has(flags, \"B\");\n/** `S`: a typo kept on purpose so it is recognised. */\nexport const isSuspicious = (flags: string): boolean => flags.includes(\"S\");\n/** `X`: excluded from the renderer round trip. */\nexport const isRoundTripException = (flags: string): boolean => flags.includes(\"X\");\n/**\n * `D`: a given name that a diminutive table holds, as a root, a form or a spelling. It says\n * the tables know the name; which names it relates to is the tables' answer, never the flag's.\n */\nexport const isInDiminutiveTable = (flags: string): boolean => flags.includes(\"D\");\n\n/**\n * Any person class: `F`, `M`, `N`, `L` or `A`. An entry with no class at all is\n * a female given name and so a person.\n */\nexport const isPerson = (flags: string): boolean => /[FMNLA]/.test(classesOf(flags));\n\n/** The entry's tradition footnote, or `undefined`. */\nexport function traditionOf(flags: string): Tradition | undefined {\n\tfor (const d of flags) {\n\t\tconst t = TRADITION_NAMES[d];\n\t\tif (t !== undefined) return t;\n\t}\n\treturn undefined;\n}\n",
|
|
7
7
|
"/**\n * ascii-approx.ts — the ASCII approximation of a printed string, WITH ITS CASE.\n *\n * Accents fold to their ASCII approximation because half the systems a name\n * passes through do not carry them, and `í` is not on every reader's keyboard.\n * This answers *how is this string spelt with the 95 printable ASCII\n * characters*, so it changes no letter's case and drops no separator.\n *\n * ## Two passes, and the second is why a pass is not enough\n *\n * NFKD decomposes a letter that is a BASE PLUS A MARK, so dropping the marks\n * reaches ASCII for `í`, `ü`, `ñ` and their kin. It reaches nothing for a letter\n * that is ATOMIC — `Æ`, `Ø`, `Ð`, `Þ`, `ł`, `đ`, `ß`, `œ` decompose to\n * themselves, and a mark-stripping pass leaves them exactly where they were.\n * Those need a table, and `ATOMIC_ASCII` is it.\n *\n * `ß` also shows why the table maps to a STRING rather than to a character: its\n * approximation is two letters.\n *\n * NOTHING HERE READS A FILE; the module is a pure literal.\n */\n\n/**\n * The letters NFKD cannot decompose, and their ASCII approximation.\n *\n * EVERY ENTRY IS A LETTER THAT IS ATOMIC IN UNICODE, not a base plus a mark. A\n * letter that decomposes is deliberately absent: adding `é` here would be a\n * second, silently divergent spelling of what the NFKD pass already does.\n */\nexport const ATOMIC_ASCII: ReadonlyMap<string, string> = new Map([\n\t[\"Æ\", \"AE\"],\n\t[\"æ\", \"ae\"],\n\t[\"Œ\", \"OE\"],\n\t[\"œ\", \"oe\"],\n\t[\"Ø\", \"O\"],\n\t[\"ø\", \"o\"],\n\t[\"Ð\", \"D\"],\n\t[\"ð\", \"d\"],\n\t[\"Đ\", \"D\"],\n\t[\"đ\", \"d\"],\n\t[\"Þ\", \"Th\"],\n\t[\"þ\", \"th\"],\n\t[\"Ł\", \"L\"],\n\t[\"ł\", \"l\"],\n\t[\"ẞ\", \"SS\"],\n\t[\"ß\", \"ss\"],\n\t[\"ı\", \"i\"],\n]);\n\nconst ATOMIC_PATTERN = new RegExp(`[${[...ATOMIC_ASCII.keys()].join(\"\")}]`, \"gu\");\n\n/**\n * The ASCII approximation of a printed string, case preserved.\n *\n * `Wyrkow` → `Wyrkow`, `Straße` → `Strasse`, `Æsop` → `AEsop`, `Ø` → `O`.\n *\n * IT IS AN APPROXIMATION AND NOT A GUARANTEE. A character in neither class —\n * a CJK ideograph, an emoji, a currency sign — passes through unchanged, which\n * is the honest answer: this module knows no ASCII spelling for it, and\n * inventing one or dropping the character silently would both be worse than\n * leaving it visible. A caller that owes an ASCII output asserts it with\n * `isAscii` rather than assuming it.\n */\nexport function toAscii(s: string): string {\n\treturn s\n\t\t.normalize(\"NFKD\")\n\t\t.replace(/\\p{M}+/gu, \"\")\n\t\t.replace(ATOMIC_PATTERN, (c) => ATOMIC_ASCII.get(c) ?? c);\n}\n\n/** Is every character of this string inside printable ASCII? */\nexport function isAscii(s: string): boolean {\n\treturn /^[\\x20-\\x7E]*$/u.test(s);\n}\n",
|
|
8
8
|
"/**\n * apostrophes.ts — the apostrophe-glyph inventory, in one place.\n *\n * A PDF, a scraped page and a hand-typed cell spell one apostrophe six ways.\n * Every module that has to decide whether two prints agree needs the same\n * inventory, and a second copy is a copy that can silently disagree with the\n * first.\n *\n * This is a *character* fold and nothing more. It unifies glyphs; it never\n * inserts, removes or moves an apostrophe. Eliding the apostrophe entirely is a\n * matching act, and that is `fixOPrefix` in `./irish.ts`.\n */\n\n/**\n * Apostrophe-like characters seen in this corpus' PDFs and scraped HTML.\n *\n * U+0092 is the Windows-1252 right single quote surviving a mis-decode, and\n * U+C292 is that same byte pair read as UTF-8; both are attested in the\n * captures, which is why a naive two-glyph fold misses rows. Written as\n * escapes so the list survives every editor and diff viewer intact.\n */\nexport const APOSTROPHE_CHARS: readonly string[] = [\n\t\"'\", // APOSTROPHE\n\t\"`\", // GRAVE ACCENT\n\t\"´\", // ACUTE ACCENT\n\t\"‘\", // LEFT SINGLE QUOTATION MARK\n\t\"’\", // RIGHT SINGLE QUOTATION MARK\n\t\"“\", // LEFT DOUBLE QUOTATION MARK\n\t\"”\", // RIGHT DOUBLE QUOTATION MARK\n\t\"\", // Windows-1252 right single quote, mis-decoded\n\t\"슒\", // the same bytes read as UTF-8\n];\n\nconst APOSTROPHE_PATTERN = new RegExp(`[${APOSTROPHE_CHARS.join(\"\")}]`, \"g\");\n\n/** Unify every apostrophe variant to ASCII `'`. Changes no other character. */\nexport function normalizeApostrophes(s: string): string {\n\treturn s.replace(APOSTROPHE_PATTERN, \"'\");\n}\n",
|
|
9
9
|
"/**\n * Irish name normalization: the O' fold the lookup key applies.\n *\n * - O' prefixes: O'Brien, O Brien, O`Brien -> OBrien\n *\n * Accents are folded by `toAscii` (`./ascii-approx.ts`), the one accent fold the\n * lexicon keys and every name level share.\n *\n * There is no list of prefixes to glue to the next word. A name spelt in\n * `names.txt` with spaces is found under its words; one printed without them\n * (`ArdRi`) is found by the flag lookup's one-word fallback.\n *\n * Moved verbatim from the extraction pipeline's `normalize/irish.ts`, which\n * was itself ported from the Java `Irish` and `Strs` utilities.\n */\n\nimport { APOSTROPHE_CHARS } from \"./apostrophes.ts\";\n\n// =============================================================================\n// O' Prefix Normalization (The O'Normalizer)\n// =============================================================================\n\n/**\n * Pattern to match O followed by apostrophe-like char and optional space before a letter\n * Matches: O'Brien, O Brien, O'Brien, O`Brien, 0'Brien (zero), etc.\n *\n * Lookbehind: not preceded by letter/digit (so \"Foo'Brien\" doesn't match)\n * Match: O or 0, optional backslash, apostrophe variant, optional space, capture next letter\n * Lookahead: followed by another letter\n */\nconst O_NORMALIZER = new RegExp(\n\t`(?<![A-Za-z0-9])[0Oo]\\\\\\\\?[${APOSTROPHE_CHARS.join(\"\")} ] *([A-Za-z])(?=[A-Za-z])`, // Followed by another letter\n\t\"g\",\n);\n\n/**\n * Fix O' prefix variations - joins O with following name (no apostrophe)\n *\n * Examples:\n * \"O'Brien\" -> \"OBrien\"\n * \"O Brien\" -> \"OBrien\"\n * \"O`Sullivan\" -> \"OSullivan\"\n * \"0'Connor\" -> \"OConnor\" (zero to O)\n *\n * This matches Java Irish.fixOBlank() behavior where the apostrophe\n * is removed entirely, producing a single token.\n *\n * @param s Input string\n * @returns String with O' prefixes joined (no apostrophe)\n */\nexport function fixOPrefix(s: string): string {\n\treturn s.replace(O_NORMALIZER, (_, letter) => `O${letter.toUpperCase()}`);\n}\n",
|
|
10
10
|
"/**\n * The named key functions. A reader of the lexicon keys with one of these and\n * never by hand, so two readers asked the same question cannot disagree.\n *\n * | key | keeps | drops | asks |\n * |---|---|---|---|\n * | `lexiconKey` | letters, digits | case, accents, EVERY separator incl. spaces | how is this name spelt? |\n * | `lookupKey` | spaces between words | case, accents, the O' separator, trailing `,`/`-` | what is this token or phrase? |\n *\n * They differ on purpose. `New York` keys `newyork` under `lexiconKey` and\n * `new york` under `lookupKey`: the flag lookup keeps word boundaries so a\n * multi-word entry is indexed under its first word, and the spelling lookup\n * drops them so `NiMhaolvarna` and `Ní Mhaolvarna` are one question. When its own\n * key misses a one-word query, the flag lookup asks again against every entry\n * with the spaces and hyphens between its words dropped (`Lexicon.getNameFlags`),\n * which is how `ArdRi` finds `Ard Ri` and `Mary-Kate` finds `MaryKate`.\n */\n\nimport { toAscii } from \"./ascii-approx.ts\";\nimport { fixOPrefix } from \"./irish.ts\";\n\n/**\n * The spelling key: the run's letters, ASCII, lower case.\n *\n * SEPARATORS AND CASE ARE EXACTLY WHAT THE LEXICON IS BEING ASKED ABOUT, so the\n * key drops them. `NI MHAOLVARNA`, `Ní Mhaolvarna` and `NiMhaolvarna` are one\n * question, and `MACDONALD`, `Mac Donald` and `MacDonald` are another.\n */\nexport function lexiconKey(rendered: string): string {\n\treturn toAscii(rendered)\n\t\t.replace(/[^\\p{L}\\p{N}]+/gu, \"\")\n\t\t.toLowerCase();\n}\n\n/**\n * The flag-lookup key: folded to ASCII, O' prefixes glued, lower-cased,\n * trailing `,` and `-` dropped. Spaces between words are KEPT and no other word\n * is glued to the next, so a multi-word entry `Ard Ri` keys `ard ri` and its\n * first word keys `ard`.\n *\n * - accented and atomic letters, by `toAscii` as `lexiconKey` folds them: Wyrkow -> wyrkow,\n * Varvham -> lukasz\n * - O' prefixes: O'Brien -> obrien\n * - every other word stays a word: An Cor Rud -> an cor rud, Nia Sternue -> nia sternue\n * - words are separated by one space: `Mc Dade` and `Mc\\tDade` key `mc dade`\n */\nexport function lookupKey(str: string): string {\n\tstr = str.trim();\n\tstr = toAscii(str);\n\tstr = fixOPrefix(str);\n\tstr = str.toLowerCase();\n\twhile (str && (str.endsWith(\",\") || str.endsWith(\"-\"))) str = str.slice(0, -1).trim();\n\treturn /\\s\\s|[^\\S ]/.test(str) ? str.replace(/\\s+/g, \" \") : str;\n}\n\nexport { isAscii, toAscii } from \"./ascii-approx.ts\";\nexport { APOSTROPHE_CHARS, normalizeApostrophes } from \"./apostrophes.ts\";\n",
|
|
11
|
-
"/**\n * `names.txt` as a display lexicon — the canonical-spelling fold over the file.\n *\n * A display renderer consults the lexicon before its rules: *where a name is in\n * the lexicon that spelling is the answer.* `displayLexicon` turns the file into\n * the one-argument lookup such a renderer takes, keyed by `lexiconKey`.\n *\n * ## Why not the flag lookup\n *\n * The flag lookup (`Lexicon.getNameFlags`) keys with `lookupKey`, which\n * PRESERVES SPACES — `Ni Mhaolvarna` keys `ni mhaolvarna` — while `lexiconKey`\n * drops every non-letter/digit character, spaces included, so the same entry\n * keys `nimhaolvarna`. Bridging the two would miss every multi-word entry.\n *\n * ## An ambiguous key answers nothing; one name twice is not ambiguous\n *\n * `lexiconKey` drops apostrophes, hyphens and spaces, so two entries collide on\n * one key whenever they differ only in separators or case — `D'Arcy` against\n * `Darcy`, `Ann-Marie` against `AnnMarie`. The lexicon's warrant is that it\n * holds THE canonical spelling of a name, so a key carrying two candidate\n * spellings holds none, and answering would pick one arbitrarily.\n *\n * TWO SEPARATE THINGS COLLIDE THERE and only one of them is ambiguous. The file\n * also carries, deliberately, one name under two entries — one per rendering the\n * corpus prints. `Ann-Marie:F` with `AnnMarie:F` and `Anne-Marie:F` with\n * `AnneMarie:FX` are the person-classed instances; `An Cor Rud:BT` with\n * `AnCorRud:BTX` is the same convention on the half of the file\n * `isPersonEntry` filters out. `resolveCollision` below separates that case from\n * two names that merely key alike, and drops anything it cannot separate.\n */\n\nimport { isPerson } from \"./flags.ts\";\nimport { lexiconKey, toAscii } from \"./keys.ts\";\nimport type { NameEntry } from \"./parse.ts\";\n\n/**\n * A name lexicon, as a display renderer consults it: one O(1) lookup that\n * answers *how is this name spelt* or says it does not know. The key is\n * `lexiconKey()`; `undefined` means the rules decide.\n */\nexport type DisplayLexicon = (key: string) => string | undefined;\n\n/**\n * A person's name, as `names.txt` classes it.\n *\n * The file's own taxonomy, from its header: `F`/`M`/`N`/`L`/`A` classify a\n * person's name, `T`/`G`/`B`/`C` a school, a place, a phrase or a concept word,\n * and `S`/`X` are marks that classify nothing. An entry with no class at all is\n * a female first name, which the header says outright.\n *\n * ONLY A PERSON'S NAME SPELLS A PERSON'S NAME. `lexiconKey` drops case and\n * separators, so a place code collides with a surname on sight: measured over\n * the corpus, `OH:G` (Ohio) answered for 14 rows of the Korean surname `Oh`, and\n * `and:TX` lower-cased the `And` of a mangled team print. Neither is a spelling\n * mistake in the file — both entries are right about the token they classify —\n * so the fix is to ask only the entries that claim to be people. The school\n * column has its own renderer (`school-display.ts`) and would want the other\n * half of the file, not this one.\n */\nconst isPersonEntry = isPerson;\n\n/**\n * The classifying letters of one entry's flags, deduped and ordered.\n *\n * THE MARKS AND THE TRADITION FOOTNOTE ARE NOT CLASSIFICATION. The header\n * issues `[FMNLAGTBC]` to say what kind of name an entry is, a digit to\n * footnote its tradition, `S` to say the spelling is a known typo
|
|
11
|
+
"/**\n * `names.txt` as a display lexicon — the canonical-spelling fold over the file.\n *\n * A display renderer consults the lexicon before its rules: *where a name is in\n * the lexicon that spelling is the answer.* `displayLexicon` turns the file into\n * the one-argument lookup such a renderer takes, keyed by `lexiconKey`.\n *\n * ## Why not the flag lookup\n *\n * The flag lookup (`Lexicon.getNameFlags`) keys with `lookupKey`, which\n * PRESERVES SPACES — `Ni Mhaolvarna` keys `ni mhaolvarna` — while `lexiconKey`\n * drops every non-letter/digit character, spaces included, so the same entry\n * keys `nimhaolvarna`. Bridging the two would miss every multi-word entry.\n *\n * ## An ambiguous key answers nothing; one name twice is not ambiguous\n *\n * `lexiconKey` drops apostrophes, hyphens and spaces, so two entries collide on\n * one key whenever they differ only in separators or case — `D'Arcy` against\n * `Darcy`, `Ann-Marie` against `AnnMarie`. The lexicon's warrant is that it\n * holds THE canonical spelling of a name, so a key carrying two candidate\n * spellings holds none, and answering would pick one arbitrarily.\n *\n * TWO SEPARATE THINGS COLLIDE THERE and only one of them is ambiguous. The file\n * also carries, deliberately, one name under two entries — one per rendering the\n * corpus prints. `Ann-Marie:F` with `AnnMarie:F` and `Anne-Marie:F` with\n * `AnneMarie:FX` are the person-classed instances; `An Cor Rud:BT` with\n * `AnCorRud:BTX` is the same convention on the half of the file\n * `isPersonEntry` filters out. `resolveCollision` below separates that case from\n * two names that merely key alike, and drops anything it cannot separate.\n */\n\nimport { isPerson } from \"./flags.ts\";\nimport { lexiconKey, toAscii } from \"./keys.ts\";\nimport type { NameEntry } from \"./parse.ts\";\n\n/**\n * A name lexicon, as a display renderer consults it: one O(1) lookup that\n * answers *how is this name spelt* or says it does not know. The key is\n * `lexiconKey()`; `undefined` means the rules decide.\n */\nexport type DisplayLexicon = (key: string) => string | undefined;\n\n/**\n * A person's name, as `names.txt` classes it.\n *\n * The file's own taxonomy, from its header: `F`/`M`/`N`/`L`/`A` classify a\n * person's name, `T`/`G`/`B`/`C` a school, a place, a phrase or a concept word,\n * and `S`/`X` are marks that classify nothing. An entry with no class at all is\n * a female first name, which the header says outright.\n *\n * ONLY A PERSON'S NAME SPELLS A PERSON'S NAME. `lexiconKey` drops case and\n * separators, so a place code collides with a surname on sight: measured over\n * the corpus, `OH:G` (Ohio) answered for 14 rows of the Korean surname `Oh`, and\n * `and:TX` lower-cased the `And` of a mangled team print. Neither is a spelling\n * mistake in the file — both entries are right about the token they classify —\n * so the fix is to ask only the entries that claim to be people. The school\n * column has its own renderer (`school-display.ts`) and would want the other\n * half of the file, not this one.\n */\nconst isPersonEntry = isPerson;\n\n/**\n * The classifying letters of one entry's flags, deduped and ordered.\n *\n * THE MARKS AND THE TRADITION FOOTNOTE ARE NOT CLASSIFICATION. The header\n * issues `[FMNLAGTBC]` to say what kind of name an entry is, a digit to\n * footnote its tradition, `S` to say the spelling is a known typo, `X` to\n * say `nameCase()` cannot derive it and `D` to say a diminutive table holds it.\n * Only the first group answers *is this the same kind of name*, so only it is\n * compared. `X` is dropped because it is evidence about DERIVABILITY and not\n * about the name — the fused half of a two-rendering pair carries it precisely\n * because no rule produces a medial capital, which says nothing about whether\n * the two halves are one name. `D` is dropped because it is a fact about the\n * tables, not the spelling. `S` is kept in the comparison, so a pair that\n * disagrees about being a typo is never resolved.\n */\nfunction classFlags(flags: string): string {\n\treturn [...new Set(flags.replace(/[^A-Z]/g, \"\").replace(/[XD]/g, \"\"))].sort().join(\"\");\n}\n\n/** What `lexiconKey` drops apart from case: every non-letter, non-digit, in order. */\nfunction separators(name: string): string {\n\treturn toAscii(name).replace(/[\\p{L}\\p{N}]+/gu, \"\");\n}\n\n/** Is `a` an in-order subsequence of `b`? */\nfunction isSubsequence(a: string, b: string): boolean {\n\tlet i = 0;\n\tfor (const ch of b) if (i < a.length && ch === a[i]) i++;\n\treturn i === a.length;\n}\n\n/** One entry as the collision rule reads it: its spelling and its flags. */\ninterface LexiconEntry {\n\treadonly name: string;\n\treadonly flags: string;\n}\n\n/**\n * The spelling a colliding key answers with, or `undefined` to drop the key.\n *\n * TWO TESTS, BOTH REQUIRED, AND ANYTHING ELSE DROPS.\n *\n * 1. EVERY CANDIDATE CARRIES THE SAME CLASSIFICATION. Two spellings the file\n * classed alike are one name written twice; two it classed differently are\n * two names, and merging them under one spelling is entity resolution rather\n * than formatting — the thing `fromLexicon`'s own key guard exists to refuse.\n * `D'Arcy:LT` against `Darcy:NL` is the live instance and it drops here.\n *\n * 2. EXACTLY ONE CANDIDATE IS SEPARATOR-MINIMAL — its separator run is an\n * in-order subsequence of every other candidate's. `fromLexicon` admits an\n * answer that ADDS a separator to the print and refuses one that takes a\n * separator away, so the minimal spelling answers only for prints whose\n * separator run it already matches exactly and leaves every richer print to\n * the rules, which render it from its own separators. The richer spelling\n * would answer for both and overwrite the poorer print with punctuation the\n * source never carried, which is the distinction the two entries were added\n * to record. Where two candidates share a separator run and differ only in\n * case, neither is uniquely minimal and the key drops.\n */\nfunction resolveCollision(candidates: readonly LexiconEntry[]): string | undefined {\n\tconst shape = classFlags((candidates[0] as LexiconEntry).flags);\n\tfor (const c of candidates) if (classFlags(c.flags) !== shape) return undefined;\n\tconst runs = candidates.map((c) => separators(c.name));\n\tconst minimal = candidates.filter((_, i) =>\n\t\truns.every((other) => isSubsequence(runs[i] as string, other)),\n\t);\n\treturn minimal.length === 1 ? (minimal[0] as LexiconEntry).name : undefined;\n}\n\n/**\n * Key → canonical spelling, over parsed entries.\n *\n * ONE SPELLING REPEATED IS NOT A COLLISION, whatever its lines' flags say:\n * `Darcy:L` and `Darcy:AL` name one spelling twice and the key answers with it.\n * The flags of a repeated spelling are unioned, so the collision rule reads\n * everything the file claims about it.\n */\nexport function displaySpellings(entries: Iterable<NameEntry>): Map<string, string> {\n\tconst spellings = new Map<string, Map<string, string>>();\n\tfor (const { name, flags } of entries) {\n\t\tif (!isPersonEntry(flags)) continue;\n\t\tconst key = lexiconKey(name);\n\t\tif (key === \"\") continue;\n\t\tlet seen = spellings.get(key);\n\t\tif (seen === undefined) spellings.set(key, (seen = new Map()));\n\t\tseen.set(name, (seen.get(name) ?? \"\") + flags);\n\t}\n\tconst out = new Map<string, string>();\n\tfor (const [key, seen] of spellings) {\n\t\tconst candidates = [...seen].map(([name, flags]) => ({ name, flags }));\n\t\tconst spelt =\n\t\t\tcandidates.length === 1 ? (candidates[0] as LexiconEntry).name : resolveCollision(candidates);\n\t\tif (spelt !== undefined) out.set(key, spelt);\n\t}\n\treturn out;\n}\n",
|
|
12
12
|
"/**\n * The committed `names.txt`, baked into the module graph as a string.\n *\n * A JS module rather than a file read, so the package needs no filesystem and no\n * path resolution at runtime (browsers, bundlers and Node all load it alike),\n * and so a cache keyed on the import closure sees the lexicon move. Bun reads\n * the text import from source; the build inlines it into `dist/`.\n */\nimport text from \"../../names.txt\" with { type: \"text\" };\n\nexport const NAMES_TXT: string = text;\n",
|
|
13
13
|
"/**\n * `names.txt` — its own format parsed. THE ONE PARSER: every reader of the file,\n * here and downstream, goes through `parseEntries`.\n *\n * THE FORMAT IS THE FILE'S OWN HEADER'S: `Name:FLAGS`, one per line, `#` a\n * comment, a flagless line legal (and read as `F`, see `./flags.ts`). Nothing\n * here interprets a flag; `FLAGS` is handed back as the file spells it.\n *\n * THE SPLIT IS ON THE FIRST COLON. A name never contains a colon and a flag\n * string never does either, so on a well-formed line first and last agree; on a\n * malformed one (`A:B:C`) the first-colon read keeps the name intact and puts the\n * garbage in the flags, where `./flags.ts` ignores the letters it does not issue\n * and the CLI's `set` warns. A last-colon read would instead invent a name.\n *\n * BOTH SIDES ARE TRIMMED, so trailing whitespace or a CRLF checkout cannot turn\n * `L` into `L\\r` and silently fail every flag test.\n */\n\n/** One line of the file: what it spells, what it claims, and where it is. */\nexport interface NameEntry {\n\t/** the spelling, verbatim */\n\treadonly name: string;\n\t/** the flag letters and digits after the colon, verbatim; `\"\"` where the line carries none */\n\treadonly flags: string;\n\t/** 1-based line number, so a report addresses `names.txt:<line>` */\n\treadonly line: number;\n}\n\n/**\n * Every entry in the file's text, in file order.\n *\n * A comment and a blank line are skipped and NOT counted as entries, but the\n * line number is the real one: a caller's report has to address the file a\n * person opens.\n */\nexport function parseEntries(text: string): NameEntry[] {\n\tconst out: NameEntry[] = [];\n\tfor (const [i, raw] of text.split(\"\\n\").entries()) {\n\t\tif (raw.startsWith(\"#\") || raw.trim() === \"\") continue;\n\t\tconst at = raw.indexOf(\":\");\n\t\tconst name = (at === -1 ? raw : raw.slice(0, at)).trim();\n\t\tif (name === \"\") continue;\n\t\tout.push({ name, flags: at === -1 ? \"\" : raw.slice(at + 1).trim(), line: i + 1 });\n\t}\n\treturn out;\n}\n"
|
|
14
14
|
],
|
|
15
|
-
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChJD,IAAM,aAAoB;;;ACyB1B,SAAS,aAAY,CAAC,MAA2B;AAAA,EAC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",
|
|
16
|
-
"debugId": "
|
|
15
|
+
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
|
|
16
|
+
"debugId": "5F11CDE215ABCB9664756E2164756E21",
|
|
17
17
|
"names": []
|
|
18
18
|
}
|