diff --git a/package.json b/package.json index 5b71c3e..7e7bf58 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "verify:renderer": "npx tsx scripts/verify-renderer-lifecycle.ts", "verify:all": "node scripts/verify-combat.ts && node scripts/verify-items.ts && node scripts/verify-m4.ts && node scripts/verify-m5.ts && node scripts/verify-net.ts && node scripts/verify-collision-orientation.ts", "verify:acts": "node scripts/verify-acts.ts", + "verify:generators": "tsx scripts/verify-generators.ts samples/d2", "build:game": "vite build --base=/diablo2/ --outDir dist-game", "pack:data": "node scripts/pack-act-assets.ts", "verify:packs": "node scripts/verify-packs.ts", diff --git a/scripts/pack-act-assets.ts b/scripts/pack-act-assets.ts index 3fdfc2e..fcb52df 100644 --- a/scripts/pack-act-assets.ts +++ b/scripts/pack-act-assets.ts @@ -39,6 +39,9 @@ import { decodePl2 } from '../src/formats/pl2.ts' import { levelSeed, buildIsoMapScene, cellAt, findIsoSpawn, ORTHO_SUB_TILE_HEIGHT, ORTHO_SUB_TILE_WIDTH } from '../src/game/d2map.ts' import type { IsoMapScene } from '../src/game/d2map.ts' import { loadObjectsTable, resolveDs1Object } from '../src/game/objects.ts' +import { decodeDcc } from '../src/formats/dcc.ts' +import { decodeDc6 } from '../src/formats/dc6.ts' +import type { SpriteFrame } from '../src/formats/sprite.ts' import { encodeIndexedPng } from './png.ts' /** @@ -348,16 +351,23 @@ for (const name of allNames) { modes.get(mode)!.push(name) } +const COMPONENT_PREFERENCE = ['tr', 'hd', 's1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 'lg', 'ra', 'la', 'rh', 'lh', 'sh'] as const + +function compRank(path: string): number { + const parts = path.toLowerCase().split('\\') + const comp = parts[4] ?? '' + const idx = COMPONENT_PREFERENCE.indexOf(comp as (typeof COMPONENT_PREFERENCE)[number]) + return idx >= 0 ? idx : 99 +} + /** * Pick the member that stands in for an object's art. * * A token ships many variants (lit/unlit, per-mode, per-weapon-class); the pack * is static art, so one deterministic pick is recorded — mode order first, then - * file name — and the number of alternatives goes in the manifest so the choice - * is visible rather than implied. - * - * The mode token lives in the *file name* (`lithth.dcc`), not in - * the directory, so the mode the lookup table gives is matched against file names. + * component preference (body layer 'tr' first), then file format (DCC before DC6) + * — and COF definition files are filtered out since they are compositing metadata, + * not sprites. * * @param token - object token from the lookup table. * @param modeToken - animation mode token the engine places the object in (`NU`/`OP`/…). @@ -366,8 +376,12 @@ for (const name of allNames) { function pickObjectMember(token: string, modeToken: string): { member: string; candidates: number } | null { const dirs = objectMembers.get(token) if (dirs === undefined) return null - const all = [...dirs.values()].flat() + const all = [...dirs.values()].flat().filter(name => { + const lower = name.toLowerCase() + return lower.endsWith('.dcc') || lower.endsWith('.dc6') + }) const candidates = all.length + if (candidates === 0) return null const wanted = modeToken.trim().toLowerCase() === '' ? 'nu' : modeToken.trim().toLowerCase() const order = [wanted, ...OBJECT_MODES.map(mode => mode.toLowerCase()).filter(mode => mode !== wanted)] for (const mode of order) { @@ -376,14 +390,33 @@ function pickObjectMember(token: string, modeToken: string): { member: string; c const base = (name.split('\\').pop() ?? '').toLowerCase() return base.includes(mode) || (mode !== 'nu' && base.includes(`lit${mode}`)) }) - .sort((a, b) => (a.toLowerCase().endsWith('.dcc') ? 0 : 1) - (b.toLowerCase().endsWith('.dcc') ? 0 : 1) || a.localeCompare(b)) + .sort((a, b) => { + const aDcc = a.toLowerCase().endsWith('.dcc') ? 0 : 1 + const bDcc = b.toLowerCase().endsWith('.dcc') ? 0 : 1 + if (aDcc !== bDcc) return aDcc - bDcc + const aRank = compRank(a) + const bRank = compRank(b) + if (aRank !== bRank) return aRank - bRank + return a.localeCompare(b) + }) if (files.length > 0) return { member: files[0]!, candidates } } // No file carries the mode token: fall back to any member, deterministically. - const fallback = [...all].sort()[0] + const fallback = [...all].sort((a, b) => { + const aDcc = a.toLowerCase().endsWith('.dcc') ? 0 : 1 + const bDcc = b.toLowerCase().endsWith('.dcc') ? 0 : 1 + if (aDcc !== bDcc) return aDcc - bDcc + const aRank = compRank(a) + const bRank = compRank(b) + if (aRank !== bRank) return aRank - bRank + return a.localeCompare(b) + })[0] return fallback === undefined ? null : { member: fallback, candidates } } +/** Cache decoded member frames across levels so each unique member is decoded once. */ +const decodedMemberCache = new Map() + const index: Record = { version: 1, generated: new Date().toISOString(), @@ -473,13 +506,14 @@ for (const entry of LEVELS) { totalPngBytes += page.png.byteLength } - // Object placements and their art members. The art itself is COF+DCC (see - // OBJECT_MODES), so this records what each object *is* and exactly which - // members would draw it, and reports how many are waiting on that decoder. + // Object placements and their art members. The art itself is decoded from DCC/DC6 + // and shelf-packed into objectPages so the client can draw objects at depth. const objectPages = new PageBuilder(palette) const objects: unknown[] = [] const missingObjects: string[] = [] let objectsWithArt = 0 + const placementByMember = new Map() + for (const object of level.objects) { // The DS1 `id` is an index into the hardcoded per-act object table, not an // `Objects.txt` row: act 1 id 0 is the rogue fountain (`Objects.txt` 12), not @@ -497,6 +531,71 @@ for (const entry of LEVELS) { const pick = resolved.token === '' ? null : pickObjectMember(resolved.token, resolved.mode) const orthoX = (object.x - object.y) * ORTHO_SUB_TILE_WIDTH + scene.originX const orthoY = (object.x + object.y) * ORTHO_SUB_TILE_HEIGHT + scene.originY + + let objectFrame: { + page: number + x: number + y: number + width: number + height: number + offsetX: number + offsetY: number + } | null = null + + if (pick !== null) { + let placed = placementByMember.get(pick.member) + if (placed === undefined) { + let art = decodedMemberCache.get(pick.member) + if (art === undefined) { + try { + const bytes = await archives.read(pick.member) + if (pick.member.toLowerCase().endsWith('.dc6')) { + const sheet = decodeDc6(bytes) + const group = sheet.groups[0] + const f = group?.frames[0] + if (f) { + art = { + frame: f, + offsetX: -16 + f.offsetX, + offsetY: 16 + (f.offsetY - f.height + 1), + } + } + } else { + const dcc = decodeDcc(bytes) + const dir = dcc.directions[0] + const f = dir?.frames[0] + if (f && dir) { + art = { + frame: f.frame, + offsetX: -16 + dir.box.left, + offsetY: 16 + dir.box.top, + } + } + } + if (art) decodedMemberCache.set(pick.member, art) + } catch (err) { + console.warn(`failed to decode object member ${pick.member}: ${(err as Error).message}`) + } + } + if (art) { + const placement = objectPages.add(art.frame) + placed = { placement, offsetX: art.offsetX, offsetY: art.offsetY } + placementByMember.set(pick.member, placed) + } + } + if (placed) { + objectFrame = { + page: placed.placement.page, + x: placed.placement.x, + y: placed.placement.y, + width: placed.placement.width, + height: placed.placement.height, + offsetX: placed.offsetX, + offsetY: placed.offsetY, + } + } + } + objects.push({ id: object.id, type: object.type, @@ -514,7 +613,7 @@ for (const entry of LEVELS) { x: Math.round(orthoX), y: Math.round(orthoY), depth: (object.x + object.y) / 5, - frame: null, + frame: objectFrame, }) if (pick !== null) objectsWithArt += 1 else missingObjects.push(`${resolved.token === '' ? `id ${String(object.id)}` : resolved.token} (act ${String(entry.act)}) has no art members`) @@ -579,7 +678,7 @@ for (const entry of LEVELS) { objects: objects.length, objectsWithArt, objectsUnresolved: missingObjects, - objectsArtPending: objects.length, + objectsArtPending: objects.filter((o: any) => o.member !== null && o.frame === null).length, dt1Libraries: info.dt1Names.length, }, } @@ -619,11 +718,13 @@ for (const entry of LEVELS) { bytes: manifest.pngBytes + sceneBytes.byteLength, }) totalLevels += 1 + const bakedFramesCount = objects.filter((o: any) => o.frame !== null).length + const pendingCount = objects.filter((o: any) => o.member !== null && o.frame === null).length console.log( `act${String(entry.act)}/${label.padEnd(22)} ${String(scene.cellsX)}x${String(scene.cellsY)} ` + `${String(scene.frames.length).padStart(3)} 图块 → ${String(pageFiles.length)} 页 PNG ` + `(${(manifest.pngBytes / 1024).toFixed(0)} KB) + scene.json ${(sceneBytes.byteLength / 1024).toFixed(0)} KB ` - + `· 对象 ${String(objects.length)}/${String(level.objects.length)}(美术待 DCC/COF:${String(objectsWithArt)})` + + `· 对象 ${String(objects.length)}/${String(level.objects.length)}(已接帧:${String(bakedFramesCount)},待解:${String(pendingCount)})` + ` · 缺失瓦片 ${String(scene.missingTiles)}`, ) } diff --git a/scripts/verify-object-lookup.ts b/scripts/verify-object-lookup.ts index a600952..9a9cc5b 100644 --- a/scripts/verify-object-lookup.ts +++ b/scripts/verify-object-lookup.ts @@ -86,7 +86,7 @@ async function main(): Promise { `${String(stats.rows)} = ${String(OBJECT_LOOKUP_WITH_ART)} + ${String(OBJECT_LOOKUP_WITHOUT_ART)}`) check('有 token 的记录数稳定', stats.withArt === OBJECT_LOOKUP_WITH_ART && stats.withRow === OBJECT_LOOKUP_WITH_ROW, `withArt=${String(stats.withArt)} withRow=${String(stats.withRow)}`) - check('记录数 = 3,614(3,615 条物体行里有 1 条重复 id 被覆盖)', stats.rows === 3614, `${String(stats.rows)} 条`) + check('记录数 = 3,615(每个 DS1 id 唯一)', stats.rows === 3615, `${String(stats.rows)} 条`) check('无 token 的记录数 = 193(不可见/占位对象)', stats.withoutArt === 193, `${String(stats.withoutArt)} 条`) // 具体点位:这些名字是从社区表里读出来的,写成断言是为了让"表换了版本"立刻暴露。 @@ -96,6 +96,7 @@ async function main(): Promise { [1, 2, 'RB', 'ON', 'Fire, rogue camp'], [1, 5, 'L1', 'NU', 'Chest, R Large'], [2, 17, 'JE', 'NU', 'jerhyn'], + [3, 104, '1Y', 'ON', 'mephisto red portal'], [5, 0, 'AO', 'NU', 'act 5 first object'], ] for (const [act, id, token, mode, label] of spots) { @@ -152,7 +153,7 @@ async function main(): Promise { check('覆盖条数 = 26', diffToken === TOKEN_OVERRIDES.length, `${String(diffToken)} 条`) check('白名单没有过期条目', missingOverrides.length === 0, missingOverrides.length === 0 ? '全部仍然有效' : missingOverrides.slice(0, 5).join(' | ')) - check('与 Objects.txt 完全一致的记录数 = 527', same === 527, `${String(same)} 条`) + check('与 Objects.txt 完全一致的记录数 = 528', same === 528, `${String(same)} 条`) check('表说无 token 的记录数 = 193', emptyToken === 193, `${String(emptyToken)} 条`) check('行号缺失的 3 条仍然带真 token', missingRow === 3 && missingRowTokens.sort().join(',') === '7C,PX,PY', `缺失行号的 token:${missingRowTokens.join(',')}`) diff --git a/scripts/verify-packs.ts b/scripts/verify-packs.ts index 9f1d799..084364e 100644 --- a/scripts/verify-packs.ts +++ b/scripts/verify-packs.ts @@ -50,6 +50,7 @@ interface PackedScene { readonly walls: readonly (readonly number[])[] /** Roof draws, painted last; absent in packs baked before roofs were split out. */ readonly roofs?: readonly (readonly number[])[] + readonly objectPages?: readonly { readonly file: string; readonly width: number; readonly height: number }[] readonly objects: readonly { readonly id: number readonly type: number @@ -60,6 +61,16 @@ interface PackedScene { readonly mode: string /** `Objects.txt` row the table points at, or -1 when it points at none. */ readonly objectsTxtId: number + readonly member?: string | null + readonly frame?: { + readonly page: number + readonly x: number + readonly y: number + readonly width: number + readonly height: number + readonly offsetX: number + readonly offsetY: number + } | null }[] readonly collision: { readonly width: number; readonly height: number; readonly runs: readonly (readonly number[])[] } readonly spawn: readonly number[] | null @@ -229,6 +240,23 @@ for (const entry of index.levels) { check(tokenMismatch === 0, `${entry.path}: object tokens/modes match the lookup (${String(tokenMismatch)} mismatches)`) unknownObjectIds += unknownIds + // Object frames: every object with a frame references a valid page and rect, + // and no object with an art member is left pending a frame. + const objectPages = packed.objectPages ?? [] + let invalidFrames = 0 + let pendingArt = 0 + for (const obj of packed.objects) { + if (obj.frame) { + if (obj.frame.page < 0 || obj.frame.page >= objectPages.length || obj.frame.width <= 0 || obj.frame.height <= 0) { + invalidFrames += 1 + } + } else if (obj.member !== null && obj.member !== undefined) { + pendingArt += 1 + } + } + check(invalidFrames === 0, `${entry.path}: object frame placement within bounds (${String(invalidFrames)} invalid)`) + check(pendingArt === 0, `${entry.path}: zero objects with art pending frame (${String(pendingArt)} pending)`) + console.log( `${entry.path.padEnd(26)} ${String(live.floors.length).padStart(5)} 地面 ${String(live.walls.length).padStart(4)} 墙 ${String(live.roofs.length).padStart(4)} 顶 ` + `${String(live.frames.length).padStart(3)} 帧 ${String(packed.collision.width)}x${String(packed.collision.height)} 碰撞 ` diff --git a/src/game/object-lookup-data.ts b/src/game/object-lookup-data.ts index ef56828..2389b3c 100644 --- a/src/game/object-lookup-data.ts +++ b/src/game/object-lookup-data.ts @@ -16,16 +16,16 @@ export const OBJECT_LOOKUP_ROWS: Readonly> = { 1: '0:12:FN:NU;1:37:TO:ON;2:39:RB:ON;3:35:N1:NU;4:36:N2:NU;5:5:L1:NU;6:17:S1:NU;7:18:S2:NU;8:19:S3:NU;9:20:S4:NU;10:21:S5:NU;11:22:S6:NU;12:30:IT:NU;13:70:4R:NU;14:70:4R:NU;15:69:3R:NU;16:69:3R:NU;17:29:BR:OP;18:31:BF:NU;19:33:A1:NU;20:34:A2:NU;21:37:TO:ON;22:61:SS:NU;23:65:X1:NU;24:66:X2:NU;25:8:TT:NU;26:26:GI:NU;27:28:HI:NU;28:82:B2:NU;29:2:SF:NU;30:81:AF:NU;31:84:HW:NU;32:83:HS:NU;33:78::;34:61:SS:NU;35:103:FL:NU;36:108:HM:NU;37:119:WP:ON;38:580::;39:130:ZW:NU;40:159:CQ:OP;41:163:CF:NU;42:169:CZ:NU;43:160:FX:OP;44:161:FY:OP;45:162:FZ:OP;46:104:A3:NU;47:105:A4:NU;48:106:W1:NU;49:107:W2:NU;50:179:B4:NU;51:180:B5:NU;52:119:WP:ON;53:157:WN:ON;54:247:QA:OP;55:248:QB:OP;56:155:C7:OP;57:174:RY:OP;58:175:RZ:OP;59:139:Q1:OP;60:140:Q2:OP;61:141:Q3:OP;62:144:Q6:OP;63:6:L2:OP;64:240:CY:OP;65:241:CX:OP;66:242:CU:OP;67:54:Z1:NU;68:55:Z2:NU;69:56:Z5:OP;70:57:Z3:OP;71:58:Z4:OP;72:171:SX:OP;73:178:GS:OP;74:239:BZ:NU;75:245:BY:NU;76:250:EW:OP;77:111:F3:NU;78:138:ZY:NU;79:132:ZC:NU;80:164:MB:OP;81:165:MD:OP;82:77:SH:OP;83:85:BC:OP;84:86:SG:OP;85:262:S0:OP;86:263:JB:OP;87:264:JD:OP;88:265:JF:OP;89:50:C1:OP;90:51:C2:OP;91:79:C3:OP;92:53:C4:OP;93:1:C5:OP;94:3:C6:OP;95:7:B1:OP;96:46:CT:OP;97:38:WT:ON;98:256:S9:NU;99:257:WG:NU;100:258:WH:NU;101:129:H2:OP;102:267:B6:NU;103:268:BP:NU;104:269:1G:;105:581::;106:351:SS:;107:352:SS:;108:353:SS:;109:374:UD:NU;110:385:DC:NU:d1:m;111:397:YF:OP;112:321:PP:NU;113:0:29:NU;114:8:TT:NU;115:0::;116:0::;117:0::;118:0::;119:0::;120:0::;121:0::;122:0::;123:0::;124:0::;125:0::;126:0::;127:0::;128:0::;129:0::;130:0::;131:0::;132:0::;133:0::;134:0::;135:0::;136:0::;137:0::;138:0::;139:0::;140:0::;141:0::;142:0::;143:0::;144:0::;145:0::;146:0::;147:0::;148:0::;149:0::;150:-1:NU0:;151:-1:C5:OP;152:-1:SF:OP;153:-1:C6:OP;154:-1:U1:OP;155:-1:L1:OP;156:-1:L2:OP;157:-1:B1:OP;158:-1:TT:OP;159:-1:U2:OP;160:-1:BE:NU;161:-1:BX:OP;162:-1:FN:NU;163:-1:D1:OP;164:-1:D2:OP;165:-1:D3:OP;166:-1:D4:OP;167:-1:S1:OP;168:-1:S2:OP;169:-1:S3:OP;170:-1:S4:OP;171:-1:S5:OP;172:-1:S6:OP;173:-1:D5:OP;174:-1:D6:OP;175:-1:D7:OP;176:-1:GI:OP;177:-1:D8:OP;178:-1:HI:OP;179:-1:BR:ON;180:-1:IT:NU;181:-1:BF:NU;182:-1:CL:NU;183:-1:A1:NU;184:-1:A2:NU;185:-1:N1:NU;186:-1:N2:NU;187:-1:TO:ON;188:-1:WT:ON;189:-1:RB:ON;190:-1:R1:NU;191:-1:R2:NU;192:-1:R3:NU;193:-1:R4:NU;194:-1:R5:NU;195:-1:S1:OP;196:-1:CT:OP;197:-1:AD:NU;198:-1:T1:NU;199:-1:T2:NU;200:-1:C1:OP;201:-1:C2:OP;202:-1:U3:OP;203:-1:C4:OP;204:-1:Z1:NU;205:-1:Z2:NU;206:-1:Z5:OP;207:-1:Z3:OP;208:-1:Z4:OP;209:-1:TP:ON;210:-1:PP:ON;211:-1:SS:;212:-1:D9:OP;213:-1:DA:OP;214:-1:DB:OP;215:-1:X1:;216:-1:X2:;217:-1:1R:NU;218:-1:2R:NU;219:-1:3R:NU;220:-1:4R:NU;221:-1:F1:;222:-1:F2:;223:-1:YD:NU;224:-1:TD:ON;225:-1:DD:ON;226:-1:SZ:;227:-1:SH:OP;228:-1:TA:;229:-1:C3:OP;230:-1:OB:OP;231:-1:AF:OP;232:-1:B2:NU;233:-1:HS:OP;234:-1:HW:OP;235:-1:BC:OP;236:-1:SG:OP;237:-1:CA:OP;238:-1:CB:OP;239:-1:MC:OP;240:-1:DO:OP;241:-1:TL:OP;242:-1:TR:OP;243:-1:iz:OP;244:-1:U4:OP;245:-1:U5:OP;246:-1:iy:OP;247:-1:ix:OP;248:-1:TS:OP;249:-1:TU:OP;250:-1:SJ:OP;251:-1:B3:OP;252:-1:FB:ON;253:-1:FL:NU;254:-1:A3:NU;255:-1:A4:NU;256:-1:W1:NU;257:-1:W2:NU;258:-1:HM:NU;259:-1:P2:OP;260:-1:n5:S1;261:-1:F3:OP;262:-1:n6:S1;263:-1:F4:OP;264:-1:n7:S1;265:-1:F5:OP;266:-1:SN:OP;267:-1:JT:ON;268:-1:F6:OP;269:-1:wp:ON;270:-1:dj:OP;271:-1:ss:;272:-1:ss:;273:-1:iw:OP;274:-1:iv:OP;275:-1:iu:OP;276:-1:is:OP;277:-1:ir:OP;278:-1:hg:OP;279:-1:h2:OP;280:-1:zw:NU;281:-1:9b:OP;282:-1:zc:NU;283:-1:xx:;284:-1:zs:OP;285:-1:zr:OP;286:-1:zd:OP;287:-1:zl:NU;288:-1:zy:NU;289:-1:q1:OP;290:-1:q2:OP;291:-1:q3:OP;292:-1:q4:OP;293:-1:q5:OP;294:-1:q6:OP;295:-1:wi:ON;296:-1:q9:OP;297:-1:q7:OP;298:-1:q8:OP;299:-1:za:OP;300:-1:zv:NU;301:-1:ze:OP;302:-1:HA:NU;303:-1:DX:OP;304:-1:GC:OP;305:-1:c7:OP;306:-1:wm:ON;307:-1:wn:ON;308:-1:cp:OP;309:-1:cq:OP;310:-1:FX:NU;311:-1:FY:NU;312:-1:FZ:NU;313:-1:cf:NU;314:-1:MB:OP;315:-1:MD:OP;316:-1:MF:OP;317:-1:MH:OP;318:-1:MJ:OP;319:-1:cz:NU;320:-1:JH:OP;321:-1:sx:OP;322:-1:Mk:OP;323:-1:Mi:OP;324:-1:RY:OP;325:-1:RZ:OP;326:-1:c8:OP;327:-1:c9:OP;328:-1:GS:OP;329:-1:b4:OP;330:-1:b5:OP;331:-1:JC:OP;332:-1:tm:OP;333:-1:jz:OP;334:-1:jy:OP;335:-1:jx:OP;336:-1:jw:OP;337:-1:jv:OP;338:-1:ju:OP;339:-1:tP:OP;340:-1:js:OP;341:-1:jr:OP;342:-1:7h:NU;343:-1:ab:OP;344:-1:sl:;345:-1:sv:;346:-1:a5:OP;347:-1:jq:OP;348:-1:c0:OP;349:-1:mz:OP;350:-1:my:OP;351:-1:mx:NU;352:-1:mw:OP;353:-1:mv:OP;354:-1:mu:OP;355:-1:mt:OP;356:-1:mr:OP;357:-1:rw:NU;358:-1:bd:OP;359:-1:bj:OP;360:-1:lw:NU;361:-1:wb:NU;362:-1:yb:NU;363:-1:wd:NU;364:-1:wc:NU;365:-1:we:NU;366:-1:wy:NU;367:-1:lx:NU;368:-1:w3:NU;369:-1:w4:NU;370:-1:w5:NU;371:-1:w6:NU;372:-1:70:OP;373:-1:CN:OP;374:-1:CC:OP;375:-1:ib:OP;376:-1:ia:OP;377:-1:QX:NU;378:-1:qw:NU;379:-1:SQ:OP;380:-1:SY:OP;381:-1:ht:OP;382:-1:hq:OP;383:-1:hv:OP;384:-1:Qy:NU;385:-1:Qz:NU;386:-1:ho:OP;387:-1:wz:ON;388:-1:wv:ON;389:-1:bz:ON;390:-1:cy:OP;391:-1:cx:OP;392:-1:cu:OP;393:-1:cd:OP;394:-1:rn:OP;395:-1:by:NU;396:-1:ra:OP;397:-1:qa:OP;398:-1:qb:OP;399:-1:hn:OP;400:-1:ew:OP;401:-1:ga:ON;402:-1:gd:ON;403:-1:11:NU;404:-1:12:NU;405:-1:ss:;406:-1:s9:NU;407:-1:wg:NU;408:-1:wh:NU;409:-1:QS:OP;410:-1:HL:OP;411:-1:A7:OP;412:-1:s0:OP;413:-1:jb:NU;414:-1:jd:OP;415:-1:jf:OP;416:-1:GP:OP;417:-1:b6:NU;418:-1:BP:NU;419:-1:1g:;420:-1:GF:OP;421:-1:dg:OP;422:-1:df:OP;423:-1:f8:NU;424:-1:f9:;425:-1:ce:OP;426:-1:cg:OP;427:-1:cg:OP;428:-1:de:OP;429:-1:wj:NU;430:-1:wk:OP;431:-1:wl:OP;432:-1:ws:NU;433:-1:bi:NU;434:-1:qc:OP;435:-1:bm:NU;436:-1:bo:NU;437:-1:bq:NU;438:-1:w7:ON;439:-1:ub:OP;440:-1:dv:NU;441:-1:dn:NU;442:-1:dp:NU;443:-1:dt:NU;444:-1:dk:NU;445:-1:dl:NU;446:-1:qd:NU;447:-1:qe:NU;448:-1:ay:ON;449:-1:hb:OP;450:-1:hc:OP;451:-1:qf:OP;452:-1:qg:OP;453:-1:hd:OP;454:-1:7h:NU;455:-1:aa:NU;456:-1:aa:NU;457:-1:7a:NU;458:-1:7b:NU;459:-1:7c:NU;460:-1:7d:NU;461:-1:7e:NU;462:-1:7f:NU;463:-1:7g:NU;464:-1:qh:NU;465:-1:qi:NU;466:-1:qj:NU;467:-1:qk:NU;468:-1:ss:;469:-1:ax:OP;470:-1:au:OP;471:-1:pp:S1;472:-1:hu:NU;473:-1:qm:ON;474:-1:ql:ON;475:-1:qn:NU;476:-1:qo:OP;477:-1:V1:NU;478:-1:V2:NU;479:-1:xb:OP;480:-1:xc:OP;481:-1:xd:OP;482:-1:xe:OP;483:-1:xf:OP;484:-1:xg:OP;485:-1:xh:OP;486:-1:xi:OP;487:-1:y6:NU;488:-1:y4:NU;489:-1:y2:NU;490:-1:y3:NU;491:-1:xj:OP;492:-1:1y:ON;493:-1:xl:OP;494:-1:xm:OP;495:-1:e3:NU;496:-1:e4:NU;497:-1:e5:NU;498:-1:e6:NU;499:-1:e7:NU;500:-1:e8:NU;501:-1:ss:;502:-1:ss:;503:-1:ss:;504:-1:xk:OP;505:-1:xk:OP;506:-1:xk:OP;507:-1:TT:NU;508:-1:E1:NU;509:-1:E2:NU;510:-1:xn:OP;511:-1:qo:OP;512:-1:xp:OP;513:-1:jw:OP;514:-1:ea:OP;515:-1:vb:OP;516:-1:ve:OP;517:-1:vf:OP;518:-1:ss:;519:-1:ss:;520:-1:VG:NU;521:-1:L1:OP;522:-1:y1:OP;523:-1:Qt:OP;524:-1:ud:NU;525:-1:xx:;526:-1:ux:ON;527:-1:PP:NU;528:-1:ss:;529:-1:ss:;530:-1:uy:OP;531:-1:15:OP;532:-1:ss:;533:-1:18:OP;534:-1:19:OP;535:-1:ss:;536:-1:sv:OP;537:-1:y7:OP;538:-1:y8:OP;539:-1:y9:OP;540:-1:ya:OP;541:-1:yc:OP;542:-1:30:ON;543:-1:31:ON;544:-1:32:ON;545:-1:33:ON;546:-1:34:ON;547:-1:yf:OP;548:-1:yg:ON;549:-1:fh:OP;550:-1:he:NU;551:-1:35:NU;552:-1:yi:ON;553:-1:9f:NU;554:-1:55:NU;555:-1:xk:OP;556:-1:xk:OP;557:-1:xk:OP;558:-1:98:NU;559:-1:99:NU;560:-1:zq:OP;561:-1:px:NU;562:-1:py:NU;563:-1:6q:OP;564:-1:6r:OP;565:-1:6s:NU;566:-1:3w:OP;567:-1:ym:NU;568:-1:yn:OP;569:-1:6t:OP;570:-1:yp:OP;571:-1:yq:NU;572:-1:yr:OP;573:-1:ys:OP;574:-1:yt:OP;575:-1:ys:OP;576:-1:yv:NU;577:-1:yw:OP;578:-1:yx:OP;579:-1:yy:ON;580:-1:yz:OP;581:-1:6a:OP;582:-1:6b:OP;583:-1:6c:OP;584:-1:6d:NU;585:-1:2w:NU;586:-1:2x:NU;587:-1:6e:NU;588:-1:6f:NU;589:-1:6g:NU;590:-1:6h:NU;591:-1:2y:NU;592:-1:2z:NU;593:-1:6i:OP;594:-1:6j:OP;595:-1:6k:OP;596:-1:6L:NU;597:-1:6m:NU;598:-1:6n:OP;599:-1:2v:OP;600:-1:6o:NU;601:-1:6p:NU;602:-1:ao:NU;603:-1:ap:NU;604:-1:6t:OP;605:-1:6u:OP;606:-1:6v:NU;607:-1:6w:NU;608:-1:6x:NU;609:-1:ss:;610:-1:ss:;611:-1:ss:;612:-1:ss:;613:-1:6y:OP;614:-1:8a:OP;615:-1:8b:OP;616:-1:8c:OP;617:-1:8d:OP;618:-1:8e:OP;619:-1:8f:OP;620:-1:8g:OP;621:-1:8h:OP;622:-1:8i:NU;623:-1:60:NU;624:-1:60:NU;625:-1:61:NU;626:-1:62:NU;627:-1:8j:OP;628:-1:oz:NU;629:-1:8k:NU;630:-1:8L:NU;631:-1:8m:NU;632:-1:2p:NU;633:-1:8n:OP;634:-1:8o:OP;635:-1:8p:OP;636:-1:8q:OP;637:-1:8r:OP;638:-1:8s:NU;639:-1:8t:NU;640:-1:8u:NU;641:-1:8v:OP;642:-1:8w:OP;643:-1:8x:NU;644:-1:8y:ON;645:-1:8z:NU;646:-1:5a:ON;647:-1:5b:OP;648:-1:5c:NU;649:-1:5d:NU;650:-1:5e:OP;651:-1:5f:OP;652:-1:5g:OP;653:-1:5h:NU;654:-1:5f:OP;655:-1:5f:OP;656:-1:5k:NU;657:-1:5l:NU;658:-1:2q:NU;659:-1:5h:NU;660:-1:5k:NU;661:-1:5a:ON;662:-1:5t:NU;663:-1:5q:NU;664:-1:5r:NU;665:-1:5s:NU;666:-1:5u:OP;667:-1:5v:OP;668:-1:5w:OP;669:-1:5x:NU;670:-1:5y:NU;671:-1:5z:OP;672:-1:3a:OP;673:-1:ss:;674:-1:3b:OP;675:-1:3c:OP;676:-1:3d:OP;677:-1:2u:NU;678:-1:2s:NU;679:-1:3f:OP;680:-1:3g:OP;681:-1:3h:OP;682:-1:3i:OP;683:-1:3j:OP;684:-1:3k:OP;685:-1:3L:OP;686:-1:3m:NU;687:-1:3n:NU;688:-1:3o:NU;689:-1:3p:ON;690:-1:3q:NU;691:-1:3s:OP;692:-1:ss:;693:-1:ss:;694:-1:3t:OP;695:-1:3u:OP;696:-1:4a:OP;697:-1:4b:OP;698:-1:3x:NU;699:-1:3y:NU;700:-1:3z:NU;701:-1:4c:NU;702:-1:9g:NU;703:-1:9h:NU;704:-1:9i:NU;705:-1:2o:NU;706:-1:3v:OP;707:-1:ss:;708:-1:2n:NU;709:-1:29:NU;710:-1:25:NU;711:-1:ss:;712:-1:ss:;713:-1:4x:ON;714:-1:4u:OP;715:-1:pp:NU;716:-1:pp:NU;717:-1:ss:;718:-1:7z:NU;719:-1:4x:ON;720:-1:7y:NU;721:-1:ss:;722:-1:ss:', 2: '0:74:TD:NU;1:37:TO:ON;2:192:7H:NU;3:304:7H:NU;4:305:AA:NU;5:306:AA:NU;6:101:B3:OP;7:102:FB:ON;8:78:TA:;9:103:FL:NU;10:156:WM:ON;11:580::;12:132:ZC:NU;13:129:H2:OP;14:357:TT:NU;15:153:DX:OP;16:121:JE:NU:d1:m;17:122:JE:NU:d7:m;18:229:SQ:OP;19:230:SY:OP;20:196:A5:OP;21:267:B6:NU;22:261:A7:OP;23:149:ZA:OP;24:269:1G:;25:4:U1:OP;26:9:U2:OP;27:52:U3:OP;28:94:U4:OP;29:95:U5:OP;30:142:Q4:OP;31:143:Q5:OP;32:5:L1:OP;33:6:L2:OP;34:87:CA:OP;35:88:CB:OP;36:146:Q9:OP;37:146:Q9:OP;38:147:Q7:OP;39:148:Q8:OP;40:240:CY:OP;41:241:CX:OP;42:242:CU:OP;43:243:CD:OP;44:176:C8:OP;45:177:C9:OP;46:198:C0:OP;47:246:RA:OP;48:29:BR:OP;49:160:FX:OP;50:161:FY:OP;51:162:FZ:OP;52:273:F8:NU;53:283:BI:OP;54:85:BC:OP;55:86:SG:OP;56:109:P2:OP;57:116:SN:OP;58:134:ZS:OP;59:135:ZR:OP;60:136:ZD:OP;61:150:ZV:OP;62:151:ZE:OP;63:172:MK:OP;64:173:MI:OP;65:279:WJ:OP;66:280:WK:OP;67:281:WL:OP;68:282:WS:OP;69:166:MF:OP;70:167:MH:OP;71:113:F4:NU;72:137:ZL:NU;73:89:MC:OP;74:104:A3:NU;75:105:A4:NU;76:106:W1:NU;77:107:W2:NU;78:154:GC:OP;79:171:SX:OP;80:178:GS:OP;81:270:GF:OP;82:271:DG:OP;83:272:DF:OP;84:266:GP:OP;85:274:F9:NU;86:244:RN:OP;87:284:QC:OP;88:288:W7:ON;89:298:AY:ON;90:289:UB:OP;91:296:QD:NU;92:297:QE:NU;93:287:BQ:NU;94:286:BO:NU;95:285:BM:NU;96:290:DV:OP;97:291:DN:OP;98:292:DP:OP;99:293:DT:OP;100:294:DK:OP;101:295:DL:OP;102:133:AZ:NU;103:303:HD:OP;104:299:HB:OP;105:300:HC:OP;106:301:QF:OP;107:302:QG:OP;108:581::;109:354:XK:OP;110:582:7C:NU;111:314:QH:NU;112:315:QI:NU;113:316:QJ:NU;114:317:QK:NU;115:323:QM:ON;116:322:HU:NU;117:110:N5:S1;118:112:N6:S2;119:114:N7:S1;120:355:XK:OP;121:356:XK:OP;122:357:TT:OP;123:351:SS:;124:352:SS:;125:353:SS:;126:152:HA:NU;127:374:UD:NU;128:387:Y7:OP;129:389:Y9:OP;130:390:YA:OP;131:391:YC:OP;132:388:Y8:OP;133:397:YF:OP;134:402:YI:ON;135:0::;136:0::;137:0::;138:0::;139:0::;140:0::;141:0::;142:0::;143:0::;144:0::;145:0::;146:0::;147:0::;148:0::;149:0::;150:-1:NU0:;151:-1:C5:OP;152:-1:SF:OP;153:-1:C6:OP;154:-1:U1:OP;155:-1:L1:OP;156:-1:L2:OP;157:-1:B1:OP;158:-1:TT:OP;159:-1:U2:OP;160:-1:BE:NU;161:-1:BX:OP;162:-1:FN:NU;163:-1:D1:OP;164:-1:D2:OP;165:-1:D3:OP;166:-1:D4:OP;167:-1:S1:OP;168:-1:S2:OP;169:-1:S3:OP;170:-1:S4:OP;171:-1:S5:OP;172:-1:S6:OP;173:-1:D5:OP;174:-1:D6:OP;175:-1:D7:OP;176:-1:GI:OP;177:-1:D8:OP;178:-1:HI:OP;179:-1:BR:ON;180:-1:IT:NU;181:-1:BF:NU;182:-1:CL:NU;183:-1:A1:NU;184:-1:A2:NU;185:-1:N1:NU;186:-1:N2:NU;187:-1:TO:ON;188:-1:WT:ON;189:-1:RB:ON;190:-1:R1:NU;191:-1:R2:NU;192:-1:R3:NU;193:-1:R4:NU;194:-1:R5:NU;195:-1:S1:OP;196:-1:CT:OP;197:-1:AD:NU;198:-1:T1:NU;199:-1:T2:NU;200:-1:C1:OP;201:-1:C2:OP;202:-1:U3:OP;203:-1:C4:OP;204:-1:Z1:NU;205:-1:Z2:NU;206:-1:Z5:OP;207:-1:Z3:OP;208:-1:Z4:OP;209:-1:TP:ON;210:-1:PP:ON;211:-1:SS:;212:-1:D9:OP;213:-1:DA:OP;214:-1:DB:OP;215:-1:X1:;216:-1:X2:;217:-1:1R:NU;218:-1:2R:NU;219:-1:3R:NU;220:-1:4R:NU;221:-1:F1:;222:-1:F2:;223:-1:YD:NU;224:-1:TD:ON;225:-1:DD:ON;226:-1:SZ:;227:-1:SH:OP;228:-1:TA:;229:-1:C3:OP;230:-1:OB:OP;231:-1:AF:OP;232:-1:B2:NU;233:-1:HS:OP;234:-1:HW:OP;235:-1:BC:OP;236:-1:SG:OP;237:-1:CA:OP;238:-1:CB:OP;239:-1:MC:OP;240:-1:DO:OP;241:-1:TL:OP;242:-1:TR:OP;243:-1:iz:OP;244:-1:U4:OP;245:-1:U5:OP;246:-1:iy:OP;247:-1:ix:OP;248:-1:TS:OP;249:-1:TU:OP;250:-1:SJ:OP;251:-1:B3:OP;252:-1:FB:ON;253:-1:FL:NU;254:-1:A3:NU;255:-1:A4:NU;256:-1:W1:NU;257:-1:W2:NU;258:-1:HM:NU;259:-1:P2:OP;260:-1:n5:S1;261:-1:F3:OP;262:-1:n6:S1;263:-1:F4:OP;264:-1:n7:S1;265:-1:F5:OP;266:-1:SN:OP;267:-1:JT:ON;268:-1:F6:OP;269:-1:wp:ON;270:-1:dj:OP;271:-1:ss:;272:-1:ss:;273:-1:iw:OP;274:-1:iv:OP;275:-1:iu:OP;276:-1:is:OP;277:-1:ir:OP;278:-1:hg:OP;279:-1:h2:OP;280:-1:zw:NU;281:-1:9b:OP;282:-1:zc:NU;283:-1:xx:;284:-1:zs:OP;285:-1:zr:OP;286:-1:zd:OP;287:-1:zl:NU;288:-1:zy:NU;289:-1:q1:OP;290:-1:q2:OP;291:-1:q3:OP;292:-1:q4:OP;293:-1:q5:OP;294:-1:q6:OP;295:-1:wi:ON;296:-1:q9:OP;297:-1:q7:OP;298:-1:q8:OP;299:-1:za:OP;300:-1:zv:NU;301:-1:ze:OP;302:-1:HA:NU;303:-1:DX:OP;304:-1:GC:OP;305:-1:c7:OP;306:-1:wm:ON;307:-1:wn:ON;308:-1:cp:OP;309:-1:cq:OP;310:-1:FX:NU;311:-1:FY:NU;312:-1:FZ:NU;313:-1:cf:NU;314:-1:MB:OP;315:-1:MD:OP;316:-1:MF:OP;317:-1:MH:OP;318:-1:MJ:OP;319:-1:cz:NU;320:-1:JH:OP;321:-1:sx:OP;322:-1:Mk:OP;323:-1:Mi:OP;324:-1:RY:OP;325:-1:RZ:OP;326:-1:c8:OP;327:-1:c9:OP;328:-1:GS:OP;329:-1:b4:OP;330:-1:b5:OP;331:-1:JC:OP;332:-1:tm:OP;333:-1:jz:OP;334:-1:jy:OP;335:-1:jx:OP;336:-1:jw:OP;337:-1:jv:OP;338:-1:ju:OP;339:-1:tP:OP;340:-1:js:OP;341:-1:jr:OP;342:-1:7h:NU;343:-1:ab:OP;344:-1:sl:;345:-1:sv:;346:-1:a5:OP;347:-1:jq:OP;348:-1:c0:OP;349:-1:mz:OP;350:-1:my:OP;351:-1:mx:NU;352:-1:mw:OP;353:-1:mv:OP;354:-1:mu:OP;355:-1:mt:OP;356:-1:mr:OP;357:-1:rw:NU;358:-1:bd:OP;359:-1:bj:OP;360:-1:lw:NU;361:-1:wb:NU;362:-1:yb:NU;363:-1:wd:NU;364:-1:wc:NU;365:-1:we:NU;366:-1:wy:NU;367:-1:lx:NU;368:-1:w3:NU;369:-1:w4:NU;370:-1:w5:NU;371:-1:w6:NU;372:-1:70:OP;373:-1:CN:OP;374:-1:CC:OP;375:-1:ib:OP;376:-1:ia:OP;377:-1:QX:NU;378:-1:qw:NU;379:-1:SQ:OP;380:-1:SY:OP;381:-1:ht:OP;382:-1:hq:OP;383:-1:hv:OP;384:-1:Qy:NU;385:-1:Qz:NU;386:-1:ho:OP;387:-1:wz:ON;388:-1:wv:ON;389:-1:bz:ON;390:-1:cy:OP;391:-1:cx:OP;392:-1:cu:OP;393:-1:cd:OP;394:-1:rn:OP;395:-1:by:NU;396:-1:ra:OP;397:-1:qa:OP;398:-1:qb:OP;399:-1:hn:OP;400:-1:ew:OP;401:-1:ga:ON;402:-1:gd:ON;403:-1:11:NU;404:-1:12:NU;405:-1:ss:;406:-1:s9:NU;407:-1:wg:NU;408:-1:wh:NU;409:-1:QS:OP;410:-1:HL:OP;411:-1:A7:OP;412:-1:s0:OP;413:-1:jb:NU;414:-1:jd:OP;415:-1:jf:OP;416:-1:GP:OP;417:-1:b6:NU;418:-1:BP:NU;419:-1:1g:;420:-1:GF:OP;421:-1:dg:OP;422:-1:df:OP;423:-1:f8:NU;424:-1:f9:;425:-1:ce:OP;426:-1:cg:OP;427:-1:cg:OP;428:-1:de:OP;429:-1:wj:NU;430:-1:wk:OP;431:-1:wl:OP;432:-1:ws:NU;433:-1:bi:NU;434:-1:qc:OP;435:-1:bm:NU;436:-1:bo:NU;437:-1:bq:NU;438:-1:w7:ON;439:-1:ub:OP;440:-1:dv:NU;441:-1:dn:NU;442:-1:dp:NU;443:-1:dt:NU;444:-1:dk:NU;445:-1:dl:NU;446:-1:qd:NU;447:-1:qe:NU;448:-1:ay:ON;449:-1:hb:OP;450:-1:hc:OP;451:-1:qf:OP;452:-1:qg:OP;453:-1:hd:OP;454:-1:7h:NU;455:-1:aa:NU;456:-1:aa:NU;457:-1:7a:NU;458:-1:7b:NU;459:-1:7c:NU;460:-1:7d:NU;461:-1:7e:NU;462:-1:7f:NU;463:-1:7g:NU;464:-1:qh:NU;465:-1:qi:NU;466:-1:qj:NU;467:-1:qk:NU;468:-1:ss:;469:-1:ax:OP;470:-1:au:OP;471:-1:pp:S1;472:-1:hu:NU;473:-1:qm:ON;474:-1:ql:ON;475:-1:qn:NU;476:-1:qo:OP;477:-1:V1:NU;478:-1:V2:NU;479:-1:xb:OP;480:-1:xc:OP;481:-1:xd:OP;482:-1:xe:OP;483:-1:xf:OP;484:-1:xg:OP;485:-1:xh:OP;486:-1:xi:OP;487:-1:y6:NU;488:-1:y4:NU;489:-1:y2:NU;490:-1:y3:NU;491:-1:xj:OP;492:-1:1y:ON;493:-1:xl:OP;494:-1:xm:OP;495:-1:e3:NU;496:-1:e4:NU;497:-1:e5:NU;498:-1:e6:NU;499:-1:e7:NU;500:-1:e8:NU;501:-1:ss:;502:-1:ss:;503:-1:ss:;504:-1:xk:OP;505:-1:xk:OP;506:-1:xk:OP;507:-1:TT:NU;508:-1:E1:NU;509:-1:E2:NU;510:-1:xn:OP;511:-1:qo:OP;512:-1:xp:OP;513:-1:jw:OP;514:-1:ea:OP;515:-1:vb:OP;516:-1:ve:OP;517:-1:vf:OP;518:-1:ss:;519:-1:ss:;520:-1:VG:NU;521:-1:L1:OP;522:-1:y1:OP;523:-1:Qt:OP;524:-1:ud:NU;525:-1:xx:;526:-1:ux:ON;527:-1:PP:NU;528:-1:ss:;529:-1:ss:;530:-1:uy:OP;531:-1:15:OP;532:-1:ss:;533:-1:18:OP;534:-1:19:OP;535:-1:ss:;536:-1:sv:OP;537:-1:y7:OP;538:-1:y8:OP;539:-1:y9:OP;540:-1:ya:OP;541:-1:yc:OP;542:-1:30:ON;543:-1:31:ON;544:-1:32:ON;545:-1:33:ON;546:-1:34:ON;547:-1:yf:OP;548:-1:yg:ON;549:-1:fh:OP;550:-1:he:NU;551:-1:35:NU;552:-1:yi:ON;553:-1:9f:NU;554:-1:55:NU;555:-1:xk:OP;556:-1:xk:OP;557:-1:xk:OP;558:-1:98:NU;559:-1:99:NU;560:-1:zq:OP;561:-1:px:NU;562:-1:py:NU;563:-1:6q:OP;564:-1:6r:OP;565:-1:6s:NU;566:-1:3w:OP;567:-1:ym:NU;568:-1:yn:OP;569:-1:6t:OP;570:-1:yp:OP;571:-1:yq:NU;572:-1:yr:OP;573:-1:ys:OP;574:-1:yt:OP;575:-1:ys:OP;576:-1:yv:NU;577:-1:yw:OP;578:-1:yx:OP;579:-1:yy:ON;580:-1:yz:OP;581:-1:6a:OP;582:-1:6b:OP;583:-1:6c:OP;584:-1:6d:NU;585:-1:2w:NU;586:-1:2x:NU;587:-1:6e:NU;588:-1:6f:NU;589:-1:6g:NU;590:-1:6h:NU;591:-1:2y:NU;592:-1:2z:NU;593:-1:6i:OP;594:-1:6j:OP;595:-1:6k:OP;596:-1:6L:NU;597:-1:6m:NU;598:-1:6n:OP;599:-1:2v:OP;600:-1:6o:NU;601:-1:6p:NU;602:-1:ao:NU;603:-1:ap:NU;604:-1:6t:OP;605:-1:6u:OP;606:-1:6v:NU;607:-1:6w:NU;608:-1:6x:NU;609:-1:ss:;610:-1:ss:;611:-1:ss:;612:-1:ss:;613:-1:6y:OP;614:-1:8a:OP;615:-1:8b:OP;616:-1:8c:OP;617:-1:8d:OP;618:-1:8e:OP;619:-1:8f:OP;620:-1:8g:OP;621:-1:8h:OP;622:-1:8i:NU;623:-1:60:NU;624:-1:60:NU;625:-1:61:NU;626:-1:62:NU;627:-1:8j:OP;628:-1:oz:NU;629:-1:8k:NU;630:-1:8L:NU;631:-1:8m:NU;632:-1:2p:NU;633:-1:8n:OP;634:-1:8o:OP;635:-1:8p:OP;636:-1:8q:OP;637:-1:8r:OP;638:-1:8s:NU;639:-1:8t:NU;640:-1:8u:NU;641:-1:8v:OP;642:-1:8w:OP;643:-1:8x:NU;644:-1:8y:ON;645:-1:8z:NU;646:-1:5a:ON;647:-1:5b:OP;648:-1:5c:NU;649:-1:5d:NU;650:-1:5e:OP;651:-1:5f:OP;652:-1:5g:OP;653:-1:5h:NU;654:-1:5f:OP;655:-1:5f:OP;656:-1:5k:NU;657:-1:5l:NU;658:-1:2q:NU;659:-1:5h:NU;660:-1:5k:NU;661:-1:5a:ON;662:-1:5t:NU;663:-1:5q:NU;664:-1:5r:NU;665:-1:5s:NU;666:-1:5u:OP;667:-1:5v:OP;668:-1:5w:OP;669:-1:5x:NU;670:-1:5y:NU;671:-1:5z:OP;672:-1:3a:OP;673:-1:ss:;674:-1:3b:OP;675:-1:3c:OP;676:-1:3d:OP;677:-1:2u:NU;678:-1:2s:NU;679:-1:3f:OP;680:-1:3g:OP;681:-1:3h:OP;682:-1:3i:OP;683:-1:3j:OP;684:-1:3k:OP;685:-1:3L:OP;686:-1:3m:NU;687:-1:3n:NU;688:-1:3o:NU;689:-1:3p:ON;690:-1:3q:NU;691:-1:3s:OP;692:-1:ss:;693:-1:ss:;694:-1:3t:OP;695:-1:3u:OP;696:-1:4a:OP;697:-1:4b:OP;698:-1:3x:NU;699:-1:3y:NU;700:-1:3z:NU;701:-1:4c:NU;702:-1:9g:NU;703:-1:9h:NU;704:-1:9i:NU;705:-1:2o:NU;706:-1:3v:OP;707:-1:ss:;708:-1:2n:NU;709:-1:29:NU;710:-1:25:NU;711:-1:ss:;712:-1:ss:;713:-1:4x:ON;714:-1:4u:OP;715:-1:pp:NU;716:-1:pp:NU;717:-1:ss:;718:-1:7z:NU;719:-1:4x:ON;720:-1:7y:NU;721:-1:ss:;722:-1:ss:', - 3: '0:117:JT:ON;1:237:WZ:ON;2:580::;3:130:ZW:NU;4:102:FB:ON;5:37:TO:ON;6:160:FX:NU;7:161:FY:NU;8:162:FZ:ON;9:104:A3:NU;10:105:A4:NU;11:106:W1:NU;12:107:W2:NU;13:194:9C:OP;14:195:SV:OP;15:193:AB:NU;16:207:RW:NU;17:211:WB:NU;18:210:LW:NU;19:234:QY:NU;20:214:WC:NU;21:215:WE:NU;22:213:WD:NU;23:228:QW:NU;24:216:WY:NU;25:227:QX:NU;26:217:LX:NU;27:235:QZ:NU;28:218:W3:NU;29:219:W4:NU;30:220:W5:NU;31:221:W6:NU;32:223:CN:NU;33:224:CC:NU;34:267:B6:NU;35:269:1G:NU;36:581::;37:170:JH:OP;38:325:QN:NU;39:184:JY:NU;40:190:JS:NU;41:191:JR:NU;42:197:JQ:NU;43:199:MZ:NU;44:200:MY:NU;45:201:MX:NU;46:202:MW:OP;47:206:MR:OP;48:278:DE:OP;49:120:DJ:OP;50:130:ZW:NU;51:326:QO:OP;52:158:CP:OP;53:271:DG:OP;54:272:DF:OP;55:327:V1:NU;56:328:V2:NU;57:329:XB:OP;58:330:XC:OP;59:331:XD:OP;60:332:XE:OP;61:333:XF:OP;62:334:XG:OP;63:335:XH:OP;64:336:XI:OP;65:5:L1:OP;66:6:L2:OP;67:176:C8:OP;68:240:CY:OP;69:241:CX:OP;70:181:JC:OP;71:183:JZ:OP;72:246:RA:OP;73:185:JX:OP;74:186:JW:OP;75:187:JV:OP;76:188:JU:OP;77:203:MV:OP;78:204:MU:OP;79:205:MT:OP;80:208:BD:OP;81:209:BJ:OP;82:169:CZ:NU;83:323:QM:ON;84:324:QL:ON;85:196:A5:OP;86:212:YB:NU;87:225:IB:OP;88:244:RN:OP;89:351::;90:352::;91:353::;92:360:XN:OP;93:361:XO:OP;94:362:XP:OP;95:365:VB:OP;96:251:GA:ON;97:252:GD:ON;98:208:BD:OP;99:283:BI:NU;100:367:VF:OP;101:366:VE:OP;102:368::;103:341:XJ:ON;342:-1:7h:NU;105:343:XL:OP;106:344:XM:OP;107:374:UD:NU;108:370:VG:NU;109:378:HR:NU:d1:m;110:379:HR:NU:d7:m;111:386:SV:OP;112:397:YF:OP;113:405:XK:OP;114:407:XK:OP;115:406:XK:OP;116:0::;117:0::;118:0::;119:0::;120:0::;121:0::;122:0::;123:0::;124:0::;125:0::;126:0::;127:0::;128:0::;129:0::;130:0::;131:0::;132:0::;133:0::;134:0::;135:0::;136:0::;137:0::;138:0::;139:0::;140:0::;141:0::;142:0::;143:0::;144:0::;145:0::;146:0::;147:0::;148:0::;149:0::;150:-1:NU0:;151:-1:C5:OP;152:-1:SF:OP;153:-1:C6:OP;154:-1:U1:OP;155:-1:L1:OP;156:-1:L2:OP;157:-1:B1:OP;158:-1:TT:OP;159:-1:U2:OP;160:-1:BE:NU;161:-1:BX:OP;162:-1:FN:NU;163:-1:D1:OP;164:-1:D2:OP;165:-1:D3:OP;166:-1:D4:OP;167:-1:S1:OP;168:-1:S2:OP;169:-1:S3:OP;170:-1:S4:OP;171:-1:S5:OP;172:-1:S6:OP;173:-1:D5:OP;174:-1:D6:OP;175:-1:D7:OP;176:-1:GI:OP;177:-1:D8:OP;178:-1:HI:OP;179:-1:BR:ON;180:-1:IT:NU;181:-1:BF:NU;182:-1:CL:NU;183:-1:A1:NU;184:-1:A2:NU;185:-1:N1:NU;186:-1:N2:NU;187:-1:TO:ON;188:-1:WT:ON;189:-1:RB:ON;190:-1:R1:NU;191:-1:R2:NU;192:-1:R3:NU;193:-1:R4:NU;194:-1:R5:NU;195:-1:S1:OP;196:-1:CT:OP;197:-1:AD:NU;198:-1:T1:NU;199:-1:T2:NU;200:-1:C1:OP;201:-1:C2:OP;202:-1:U3:OP;203:-1:C4:OP;204:-1:Z1:NU;205:-1:Z2:NU;206:-1:Z5:OP;207:-1:Z3:OP;208:-1:Z4:OP;209:-1:TP:ON;210:-1:PP:ON;211:-1:SS:;212:-1:D9:OP;213:-1:DA:OP;214:-1:DB:OP;215:-1:X1:;216:-1:X2:;217:-1:1R:NU;218:-1:2R:NU;219:-1:3R:NU;220:-1:4R:NU;221:-1:F1:;222:-1:F2:;223:-1:YD:NU;224:-1:TD:ON;225:-1:DD:ON;226:-1:SZ:;227:-1:SH:OP;228:-1:TA:;229:-1:C3:OP;230:-1:OB:OP;231:-1:AF:OP;232:-1:B2:NU;233:-1:HS:OP;234:-1:HW:OP;235:-1:BC:OP;236:-1:SG:OP;237:-1:CA:OP;238:-1:CB:OP;239:-1:MC:OP;240:-1:DO:OP;241:-1:TL:OP;242:-1:TR:OP;243:-1:iz:OP;244:-1:U4:OP;245:-1:U5:OP;246:-1:iy:OP;247:-1:ix:OP;248:-1:TS:OP;249:-1:TU:OP;250:-1:SJ:OP;251:-1:B3:OP;252:-1:FB:ON;253:-1:FL:NU;254:-1:A3:NU;255:-1:A4:NU;256:-1:W1:NU;257:-1:W2:NU;258:-1:HM:NU;259:-1:P2:OP;260:-1:n5:S1;261:-1:F3:OP;262:-1:n6:S1;263:-1:F4:OP;264:-1:n7:S1;265:-1:F5:OP;266:-1:SN:OP;267:-1:JT:ON;268:-1:F6:OP;269:-1:wp:ON;270:-1:dj:OP;271:-1:ss:;272:-1:ss:;273:-1:iw:OP;274:-1:iv:OP;275:-1:iu:OP;276:-1:is:OP;277:-1:ir:OP;278:-1:hg:OP;279:-1:h2:OP;280:-1:zw:NU;281:-1:9b:OP;282:-1:zc:NU;283:-1:xx:;284:-1:zs:OP;285:-1:zr:OP;286:-1:zd:OP;287:-1:zl:NU;288:-1:zy:NU;289:-1:q1:OP;290:-1:q2:OP;291:-1:q3:OP;292:-1:q4:OP;293:-1:q5:OP;294:-1:q6:OP;295:-1:wi:ON;296:-1:q9:OP;297:-1:q7:OP;298:-1:q8:OP;299:-1:za:OP;300:-1:zv:NU;301:-1:ze:OP;302:-1:HA:NU;303:-1:DX:OP;304:-1:GC:OP;305:-1:c7:OP;306:-1:wm:ON;307:-1:wn:ON;308:-1:cp:OP;309:-1:cq:OP;310:-1:FX:NU;311:-1:FY:NU;312:-1:FZ:NU;313:-1:cf:NU;314:-1:MB:OP;315:-1:MD:OP;316:-1:MF:OP;317:-1:MH:OP;318:-1:MJ:OP;319:-1:cz:NU;320:-1:JH:OP;321:-1:sx:OP;322:-1:Mk:OP;323:-1:Mi:OP;324:-1:RY:OP;325:-1:RZ:OP;326:-1:c8:OP;327:-1:c9:OP;328:-1:GS:OP;329:-1:b4:OP;330:-1:b5:OP;331:-1:JC:OP;332:-1:tm:OP;333:-1:jz:OP;334:-1:jy:OP;335:-1:jx:OP;336:-1:jw:OP;337:-1:jv:OP;338:-1:ju:OP;339:-1:tP:OP;340:-1:js:OP;341:-1:jr:OP;343:-1:ab:OP;344:-1:sl:;345:-1:sv:;346:-1:a5:OP;347:-1:jq:OP;348:-1:c0:OP;349:-1:mz:OP;350:-1:my:OP;351:-1:mx:NU;352:-1:mw:OP;353:-1:mv:OP;354:-1:mu:OP;355:-1:mt:OP;356:-1:mr:OP;357:-1:rw:NU;358:-1:bd:OP;359:-1:bj:OP;360:-1:lw:NU;361:-1:wb:NU;362:-1:yb:NU;363:-1:wd:NU;364:-1:wc:NU;365:-1:we:NU;366:-1:wy:NU;367:-1:lx:NU;368:-1:w3:NU;369:-1:w4:NU;370:-1:w5:NU;371:-1:w6:NU;372:-1:70:OP;373:-1:CN:OP;374:-1:CC:OP;375:-1:ib:OP;376:-1:ia:OP;377:-1:QX:NU;378:-1:qw:NU;379:-1:SQ:OP;380:-1:SY:OP;381:-1:ht:OP;382:-1:hq:OP;383:-1:hv:OP;384:-1:Qy:NU;385:-1:Qz:NU;386:-1:ho:OP;387:-1:wz:ON;388:-1:wv:ON;389:-1:bz:ON;390:-1:cy:OP;391:-1:cx:OP;392:-1:cu:OP;393:-1:cd:OP;394:-1:rn:OP;395:-1:by:NU;396:-1:ra:OP;397:-1:qa:OP;398:-1:qb:OP;399:-1:hn:OP;400:-1:ew:OP;401:-1:ga:ON;402:-1:gd:ON;403:-1:11:NU;404:-1:12:NU;405:-1:ss:;406:-1:s9:NU;407:-1:wg:NU;408:-1:wh:NU;409:-1:QS:OP;410:-1:HL:OP;411:-1:A7:OP;412:-1:s0:OP;413:-1:jb:NU;414:-1:jd:OP;415:-1:jf:OP;416:-1:GP:OP;417:-1:b6:NU;418:-1:BP:NU;419:-1:1g:;420:-1:GF:OP;421:-1:dg:OP;422:-1:df:OP;423:-1:f8:NU;424:-1:f9:;425:-1:ce:OP;426:-1:cg:OP;427:-1:cg:OP;428:-1:de:OP;429:-1:wj:NU;430:-1:wk:OP;431:-1:wl:OP;432:-1:ws:NU;433:-1:bi:NU;434:-1:qc:OP;435:-1:bm:NU;436:-1:bo:NU;437:-1:bq:NU;438:-1:w7:ON;439:-1:ub:OP;440:-1:dv:NU;441:-1:dn:NU;442:-1:dp:NU;443:-1:dt:NU;444:-1:dk:NU;445:-1:dl:NU;446:-1:qd:NU;447:-1:qe:NU;448:-1:ay:ON;449:-1:hb:OP;450:-1:hc:OP;451:-1:qf:OP;452:-1:qg:OP;453:-1:hd:OP;454:-1:7h:NU;455:-1:aa:NU;456:-1:aa:NU;457:-1:7a:NU;458:-1:7b:NU;459:-1:7c:NU;460:-1:7d:NU;461:-1:7e:NU;462:-1:7f:NU;463:-1:7g:NU;464:-1:qh:NU;465:-1:qi:NU;466:-1:qj:NU;467:-1:qk:NU;468:-1:ss:;469:-1:ax:OP;470:-1:au:OP;471:-1:pp:S1;472:-1:hu:NU;473:-1:qm:ON;474:-1:ql:ON;475:-1:qn:NU;476:-1:qo:OP;477:-1:V1:NU;478:-1:V2:NU;479:-1:xb:OP;480:-1:xc:OP;481:-1:xd:OP;482:-1:xe:OP;483:-1:xf:OP;484:-1:xg:OP;485:-1:xh:OP;486:-1:xi:OP;487:-1:y6:NU;488:-1:y4:NU;489:-1:y2:NU;490:-1:y3:NU;491:-1:xj:OP;492:-1:1y:ON;493:-1:xl:OP;494:-1:xm:OP;495:-1:e3:NU;496:-1:e4:NU;497:-1:e5:NU;498:-1:e6:NU;499:-1:e7:NU;500:-1:e8:NU;501:-1:ss:;502:-1:ss:;503:-1:ss:;504:-1:xk:OP;505:-1:xk:OP;506:-1:xk:OP;507:-1:TT:NU;508:-1:E1:NU;509:-1:E2:NU;510:-1:xn:OP;511:-1:qo:OP;512:-1:xp:OP;513:-1:jw:OP;514:-1:ea:OP;515:-1:vb:OP;516:-1:ve:OP;517:-1:vf:OP;518:-1:ss:;519:-1:ss:;520:-1:VG:NU;521:-1:L1:OP;522:-1:y1:OP;523:-1:Qt:OP;524:-1:ud:NU;525:-1:xx:;526:-1:ux:ON;527:-1:PP:NU;528:-1:ss:;529:-1:ss:;530:-1:uy:OP;531:-1:15:OP;532:-1:ss:;533:-1:18:OP;534:-1:19:OP;535:-1:ss:;536:-1:sv:OP;537:-1:y7:OP;538:-1:y8:OP;539:-1:y9:OP;540:-1:ya:OP;541:-1:yc:OP;542:-1:30:ON;543:-1:31:ON;544:-1:32:ON;545:-1:33:ON;546:-1:34:ON;547:-1:yf:OP;548:-1:yg:ON;549:-1:fh:OP;550:-1:he:NU;551:-1:35:NU;552:-1:yi:ON;553:-1:9f:NU;554:-1:55:NU;555:-1:xk:OP;556:-1:xk:OP;557:-1:xk:OP;558:-1:98:NU;559:-1:99:NU;560:-1:zq:OP;561:-1:px:NU;562:-1:py:NU;563:-1:6q:OP;564:-1:6r:OP;565:-1:6s:NU;566:-1:3w:OP;567:-1:ym:NU;568:-1:yn:OP;569:-1:6t:OP;570:-1:yp:OP;571:-1:yq:NU;572:-1:yr:OP;573:-1:ys:OP;574:-1:yt:OP;575:-1:ys:OP;576:-1:yv:NU;577:-1:yw:OP;578:-1:yx:OP;579:-1:yy:ON;580:-1:yz:OP;581:-1:6a:OP;582:-1:6b:OP;583:-1:6c:OP;584:-1:6d:NU;585:-1:2w:NU;586:-1:2x:NU;587:-1:6e:NU;588:-1:6f:NU;589:-1:6g:NU;590:-1:6h:NU;591:-1:2y:NU;592:-1:2z:NU;593:-1:6i:OP;594:-1:6j:OP;595:-1:6k:OP;596:-1:6L:NU;597:-1:6m:NU;598:-1:6n:OP;599:-1:2v:OP;600:-1:6o:NU;601:-1:6p:NU;602:-1:ao:NU;603:-1:ap:NU;604:-1:6t:OP;605:-1:6u:OP;606:-1:6v:NU;607:-1:6w:NU;608:-1:6x:NU;609:-1:ss:;610:-1:ss:;611:-1:ss:;612:-1:ss:;613:-1:6y:OP;614:-1:8a:OP;615:-1:8b:OP;616:-1:8c:OP;617:-1:8d:OP;618:-1:8e:OP;619:-1:8f:OP;620:-1:8g:OP;621:-1:8h:OP;622:-1:8i:NU;623:-1:60:NU;624:-1:60:NU;625:-1:61:NU;626:-1:62:NU;627:-1:8j:OP;628:-1:oz:NU;629:-1:8k:NU;630:-1:8L:NU;631:-1:8m:NU;632:-1:2p:NU;633:-1:8n:OP;634:-1:8o:OP;635:-1:8p:OP;636:-1:8q:OP;637:-1:8r:OP;638:-1:8s:NU;639:-1:8t:NU;640:-1:8u:NU;641:-1:8v:OP;642:-1:8w:OP;643:-1:8x:NU;644:-1:8y:ON;645:-1:8z:NU;646:-1:5a:ON;647:-1:5b:OP;648:-1:5c:NU;649:-1:5d:NU;650:-1:5e:OP;651:-1:5f:OP;652:-1:5g:OP;653:-1:5h:NU;654:-1:5f:OP;655:-1:5f:OP;656:-1:5k:NU;657:-1:5l:NU;658:-1:2q:NU;659:-1:5h:NU;660:-1:5k:NU;661:-1:5a:ON;662:-1:5t:NU;663:-1:5q:NU;664:-1:5r:NU;665:-1:5s:NU;666:-1:5u:OP;667:-1:5v:OP;668:-1:5w:OP;669:-1:5x:NU;670:-1:5y:NU;671:-1:5z:OP;672:-1:3a:OP;673:-1:ss:;674:-1:3b:OP;675:-1:3c:OP;676:-1:3d:OP;677:-1:2u:NU;678:-1:2s:NU;679:-1:3f:OP;680:-1:3g:OP;681:-1:3h:OP;682:-1:3i:OP;683:-1:3j:OP;684:-1:3k:OP;685:-1:3L:OP;686:-1:3m:NU;687:-1:3n:NU;688:-1:3o:NU;689:-1:3p:ON;690:-1:3q:NU;691:-1:3s:OP;692:-1:ss:;693:-1:ss:;694:-1:3t:OP;695:-1:3u:OP;696:-1:4a:OP;697:-1:4b:OP;698:-1:3x:NU;699:-1:3y:NU;700:-1:3z:NU;701:-1:4c:NU;702:-1:9g:NU;703:-1:9h:NU;704:-1:9i:NU;705:-1:2o:NU;706:-1:3v:OP;707:-1:ss:;708:-1:2n:NU;709:-1:29:NU;710:-1:25:NU;711:-1:ss:;712:-1:ss:;713:-1:4x:ON;714:-1:4u:OP;715:-1:pp:NU;716:-1:pp:NU;717:-1:ss:;718:-1:7z:NU;719:-1:4x:ON;720:-1:7y:NU;721:-1:ss:;722:-1:ss:', + 3: '0:117:JT:ON;1:237:WZ:ON;2:580::;3:130:ZW:NU;4:102:FB:ON;5:37:TO:ON;6:160:FX:NU;7:161:FY:NU;8:162:FZ:ON;9:104:A3:NU;10:105:A4:NU;11:106:W1:NU;12:107:W2:NU;13:194:9C:OP;14:195:SV:OP;15:193:AB:NU;16:207:RW:NU;17:211:WB:NU;18:210:LW:NU;19:234:QY:NU;20:214:WC:NU;21:215:WE:NU;22:213:WD:NU;23:228:QW:NU;24:216:WY:NU;25:227:QX:NU;26:217:LX:NU;27:235:QZ:NU;28:218:W3:NU;29:219:W4:NU;30:220:W5:NU;31:221:W6:NU;32:223:CN:NU;33:224:CC:NU;34:267:B6:NU;35:269:1G:NU;36:581::;37:170:JH:OP;38:325:QN:NU;39:184:JY:NU;40:190:JS:NU;41:191:JR:NU;42:197:JQ:NU;43:199:MZ:NU;44:200:MY:NU;45:201:MX:NU;46:202:MW:OP;47:206:MR:OP;48:278:DE:OP;49:120:DJ:OP;50:130:ZW:NU;51:326:QO:OP;52:158:CP:OP;53:271:DG:OP;54:272:DF:OP;55:327:V1:NU;56:328:V2:NU;57:329:XB:OP;58:330:XC:OP;59:331:XD:OP;60:332:XE:OP;61:333:XF:OP;62:334:XG:OP;63:335:XH:OP;64:336:XI:OP;65:5:L1:OP;66:6:L2:OP;67:176:C8:OP;68:240:CY:OP;69:241:CX:OP;70:181:JC:OP;71:183:JZ:OP;72:246:RA:OP;73:185:JX:OP;74:186:JW:OP;75:187:JV:OP;76:188:JU:OP;77:203:MV:OP;78:204:MU:OP;79:205:MT:OP;80:208:BD:OP;81:209:BJ:OP;82:169:CZ:NU;83:323:QM:ON;84:324:QL:ON;85:196:A5:OP;86:212:YB:NU;87:225:IB:OP;88:244:RN:OP;89:351::;90:352::;91:353::;92:360:XN:OP;93:361:XO:OP;94:362:XP:OP;95:365:VB:OP;96:251:GA:ON;97:252:GD:ON;98:208:BD:OP;99:283:BI:NU;100:367:VF:OP;101:366:VE:OP;102:368::;103:341:XJ:ON;104:342:1Y:ON;105:343:XL:OP;106:344:XM:OP;107:374:UD:NU;108:370:VG:NU;109:378:HR:NU:d1:m;110:379:HR:NU:d7:m;111:386:SV:OP;112:397:YF:OP;113:405:XK:OP;114:407:XK:OP;115:406:XK:OP;116:0::;117:0::;118:0::;119:0::;120:0::;121:0::;122:0::;123:0::;124:0::;125:0::;126:0::;127:0::;128:0::;129:0::;130:0::;131:0::;132:0::;133:0::;134:0::;135:0::;136:0::;137:0::;138:0::;139:0::;140:0::;141:0::;142:0::;143:0::;144:0::;145:0::;146:0::;147:0::;148:0::;149:0::;150:-1:NU0:;151:-1:C5:OP;152:-1:SF:OP;153:-1:C6:OP;154:-1:U1:OP;155:-1:L1:OP;156:-1:L2:OP;157:-1:B1:OP;158:-1:TT:OP;159:-1:U2:OP;160:-1:BE:NU;161:-1:BX:OP;162:-1:FN:NU;163:-1:D1:OP;164:-1:D2:OP;165:-1:D3:OP;166:-1:D4:OP;167:-1:S1:OP;168:-1:S2:OP;169:-1:S3:OP;170:-1:S4:OP;171:-1:S5:OP;172:-1:S6:OP;173:-1:D5:OP;174:-1:D6:OP;175:-1:D7:OP;176:-1:GI:OP;177:-1:D8:OP;178:-1:HI:OP;179:-1:BR:ON;180:-1:IT:NU;181:-1:BF:NU;182:-1:CL:NU;183:-1:A1:NU;184:-1:A2:NU;185:-1:N1:NU;186:-1:N2:NU;187:-1:TO:ON;188:-1:WT:ON;189:-1:RB:ON;190:-1:R1:NU;191:-1:R2:NU;192:-1:R3:NU;193:-1:R4:NU;194:-1:R5:NU;195:-1:S1:OP;196:-1:CT:OP;197:-1:AD:NU;198:-1:T1:NU;199:-1:T2:NU;200:-1:C1:OP;201:-1:C2:OP;202:-1:U3:OP;203:-1:C4:OP;204:-1:Z1:NU;205:-1:Z2:NU;206:-1:Z5:OP;207:-1:Z3:OP;208:-1:Z4:OP;209:-1:TP:ON;210:-1:PP:ON;211:-1:SS:;212:-1:D9:OP;213:-1:DA:OP;214:-1:DB:OP;215:-1:X1:;216:-1:X2:;217:-1:1R:NU;218:-1:2R:NU;219:-1:3R:NU;220:-1:4R:NU;221:-1:F1:;222:-1:F2:;223:-1:YD:NU;224:-1:TD:ON;225:-1:DD:ON;226:-1:SZ:;227:-1:SH:OP;228:-1:TA:;229:-1:C3:OP;230:-1:OB:OP;231:-1:AF:OP;232:-1:B2:NU;233:-1:HS:OP;234:-1:HW:OP;235:-1:BC:OP;236:-1:SG:OP;237:-1:CA:OP;238:-1:CB:OP;239:-1:MC:OP;240:-1:DO:OP;241:-1:TL:OP;242:-1:TR:OP;243:-1:iz:OP;244:-1:U4:OP;245:-1:U5:OP;246:-1:iy:OP;247:-1:ix:OP;248:-1:TS:OP;249:-1:TU:OP;250:-1:SJ:OP;251:-1:B3:OP;252:-1:FB:ON;253:-1:FL:NU;254:-1:A3:NU;255:-1:A4:NU;256:-1:W1:NU;257:-1:W2:NU;258:-1:HM:NU;259:-1:P2:OP;260:-1:n5:S1;261:-1:F3:OP;262:-1:n6:S1;263:-1:F4:OP;264:-1:n7:S1;265:-1:F5:OP;266:-1:SN:OP;267:-1:JT:ON;268:-1:F6:OP;269:-1:wp:ON;270:-1:dj:OP;271:-1:ss:;272:-1:ss:;273:-1:iw:OP;274:-1:iv:OP;275:-1:iu:OP;276:-1:is:OP;277:-1:ir:OP;278:-1:hg:OP;279:-1:h2:OP;280:-1:zw:NU;281:-1:9b:OP;282:-1:zc:NU;283:-1:xx:;284:-1:zs:OP;285:-1:zr:OP;286:-1:zd:OP;287:-1:zl:NU;288:-1:zy:NU;289:-1:q1:OP;290:-1:q2:OP;291:-1:q3:OP;292:-1:q4:OP;293:-1:q5:OP;294:-1:q6:OP;295:-1:wi:ON;296:-1:q9:OP;297:-1:q7:OP;298:-1:q8:OP;299:-1:za:OP;300:-1:zv:NU;301:-1:ze:OP;302:-1:HA:NU;303:-1:DX:OP;304:-1:GC:OP;305:-1:c7:OP;306:-1:wm:ON;307:-1:wn:ON;308:-1:cp:OP;309:-1:cq:OP;310:-1:FX:NU;311:-1:FY:NU;312:-1:FZ:NU;313:-1:cf:NU;314:-1:MB:OP;315:-1:MD:OP;316:-1:MF:OP;317:-1:MH:OP;318:-1:MJ:OP;319:-1:cz:NU;320:-1:JH:OP;321:-1:sx:OP;322:-1:Mk:OP;323:-1:Mi:OP;324:-1:RY:OP;325:-1:RZ:OP;326:-1:c8:OP;327:-1:c9:OP;328:-1:GS:OP;329:-1:b4:OP;330:-1:b5:OP;331:-1:JC:OP;332:-1:tm:OP;333:-1:jz:OP;334:-1:jy:OP;335:-1:jx:OP;336:-1:jw:OP;337:-1:jv:OP;338:-1:ju:OP;339:-1:tP:OP;340:-1:js:OP;341:-1:jr:OP;342:-1:7h:NU;343:-1:ab:OP;344:-1:sl:;345:-1:sv:;346:-1:a5:OP;347:-1:jq:OP;348:-1:c0:OP;349:-1:mz:OP;350:-1:my:OP;351:-1:mx:NU;352:-1:mw:OP;353:-1:mv:OP;354:-1:mu:OP;355:-1:mt:OP;356:-1:mr:OP;357:-1:rw:NU;358:-1:bd:OP;359:-1:bj:OP;360:-1:lw:NU;361:-1:wb:NU;362:-1:yb:NU;363:-1:wd:NU;364:-1:wc:NU;365:-1:we:NU;366:-1:wy:NU;367:-1:lx:NU;368:-1:w3:NU;369:-1:w4:NU;370:-1:w5:NU;371:-1:w6:NU;372:-1:70:OP;373:-1:CN:OP;374:-1:CC:OP;375:-1:ib:OP;376:-1:ia:OP;377:-1:QX:NU;378:-1:qw:NU;379:-1:SQ:OP;380:-1:SY:OP;381:-1:ht:OP;382:-1:hq:OP;383:-1:hv:OP;384:-1:Qy:NU;385:-1:Qz:NU;386:-1:ho:OP;387:-1:wz:ON;388:-1:wv:ON;389:-1:bz:ON;390:-1:cy:OP;391:-1:cx:OP;392:-1:cu:OP;393:-1:cd:OP;394:-1:rn:OP;395:-1:by:NU;396:-1:ra:OP;397:-1:qa:OP;398:-1:qb:OP;399:-1:hn:OP;400:-1:ew:OP;401:-1:ga:ON;402:-1:gd:ON;403:-1:11:NU;404:-1:12:NU;405:-1:ss:;406:-1:s9:NU;407:-1:wg:NU;408:-1:wh:NU;409:-1:QS:OP;410:-1:HL:OP;411:-1:A7:OP;412:-1:s0:OP;413:-1:jb:NU;414:-1:jd:OP;415:-1:jf:OP;416:-1:GP:OP;417:-1:b6:NU;418:-1:BP:NU;419:-1:1g:;420:-1:GF:OP;421:-1:dg:OP;422:-1:df:OP;423:-1:f8:NU;424:-1:f9:;425:-1:ce:OP;426:-1:cg:OP;427:-1:cg:OP;428:-1:de:OP;429:-1:wj:NU;430:-1:wk:OP;431:-1:wl:OP;432:-1:ws:NU;433:-1:bi:NU;434:-1:qc:OP;435:-1:bm:NU;436:-1:bo:NU;437:-1:bq:NU;438:-1:w7:ON;439:-1:ub:OP;440:-1:dv:NU;441:-1:dn:NU;442:-1:dp:NU;443:-1:dt:NU;444:-1:dk:NU;445:-1:dl:NU;446:-1:qd:NU;447:-1:qe:NU;448:-1:ay:ON;449:-1:hb:OP;450:-1:hc:OP;451:-1:qf:OP;452:-1:qg:OP;453:-1:hd:OP;454:-1:7h:NU;455:-1:aa:NU;456:-1:aa:NU;457:-1:7a:NU;458:-1:7b:NU;459:-1:7c:NU;460:-1:7d:NU;461:-1:7e:NU;462:-1:7f:NU;463:-1:7g:NU;464:-1:qh:NU;465:-1:qi:NU;466:-1:qj:NU;467:-1:qk:NU;468:-1:ss:;469:-1:ax:OP;470:-1:au:OP;471:-1:pp:S1;472:-1:hu:NU;473:-1:qm:ON;474:-1:ql:ON;475:-1:qn:NU;476:-1:qo:OP;477:-1:V1:NU;478:-1:V2:NU;479:-1:xb:OP;480:-1:xc:OP;481:-1:xd:OP;482:-1:xe:OP;483:-1:xf:OP;484:-1:xg:OP;485:-1:xh:OP;486:-1:xi:OP;487:-1:y6:NU;488:-1:y4:NU;489:-1:y2:NU;490:-1:y3:NU;491:-1:xj:OP;492:-1:1y:ON;493:-1:xl:OP;494:-1:xm:OP;495:-1:e3:NU;496:-1:e4:NU;497:-1:e5:NU;498:-1:e6:NU;499:-1:e7:NU;500:-1:e8:NU;501:-1:ss:;502:-1:ss:;503:-1:ss:;504:-1:xk:OP;505:-1:xk:OP;506:-1:xk:OP;507:-1:TT:NU;508:-1:E1:NU;509:-1:E2:NU;510:-1:xn:OP;511:-1:qo:OP;512:-1:xp:OP;513:-1:jw:OP;514:-1:ea:OP;515:-1:vb:OP;516:-1:ve:OP;517:-1:vf:OP;518:-1:ss:;519:-1:ss:;520:-1:VG:NU;521:-1:L1:OP;522:-1:y1:OP;523:-1:Qt:OP;524:-1:ud:NU;525:-1:xx:;526:-1:ux:ON;527:-1:PP:NU;528:-1:ss:;529:-1:ss:;530:-1:uy:OP;531:-1:15:OP;532:-1:ss:;533:-1:18:OP;534:-1:19:OP;535:-1:ss:;536:-1:sv:OP;537:-1:y7:OP;538:-1:y8:OP;539:-1:y9:OP;540:-1:ya:OP;541:-1:yc:OP;542:-1:30:ON;543:-1:31:ON;544:-1:32:ON;545:-1:33:ON;546:-1:34:ON;547:-1:yf:OP;548:-1:yg:ON;549:-1:fh:OP;550:-1:he:NU;551:-1:35:NU;552:-1:yi:ON;553:-1:9f:NU;554:-1:55:NU;555:-1:xk:OP;556:-1:xk:OP;557:-1:xk:OP;558:-1:98:NU;559:-1:99:NU;560:-1:zq:OP;561:-1:px:NU;562:-1:py:NU;563:-1:6q:OP;564:-1:6r:OP;565:-1:6s:NU;566:-1:3w:OP;567:-1:ym:NU;568:-1:yn:OP;569:-1:6t:OP;570:-1:yp:OP;571:-1:yq:NU;572:-1:yr:OP;573:-1:ys:OP;574:-1:yt:OP;575:-1:ys:OP;576:-1:yv:NU;577:-1:yw:OP;578:-1:yx:OP;579:-1:yy:ON;580:-1:yz:OP;581:-1:6a:OP;582:-1:6b:OP;583:-1:6c:OP;584:-1:6d:NU;585:-1:2w:NU;586:-1:2x:NU;587:-1:6e:NU;588:-1:6f:NU;589:-1:6g:NU;590:-1:6h:NU;591:-1:2y:NU;592:-1:2z:NU;593:-1:6i:OP;594:-1:6j:OP;595:-1:6k:OP;596:-1:6L:NU;597:-1:6m:NU;598:-1:6n:OP;599:-1:2v:OP;600:-1:6o:NU;601:-1:6p:NU;602:-1:ao:NU;603:-1:ap:NU;604:-1:6t:OP;605:-1:6u:OP;606:-1:6v:NU;607:-1:6w:NU;608:-1:6x:NU;609:-1:ss:;610:-1:ss:;611:-1:ss:;612:-1:ss:;613:-1:6y:OP;614:-1:8a:OP;615:-1:8b:OP;616:-1:8c:OP;617:-1:8d:OP;618:-1:8e:OP;619:-1:8f:OP;620:-1:8g:OP;621:-1:8h:OP;622:-1:8i:NU;623:-1:60:NU;624:-1:60:NU;625:-1:61:NU;626:-1:62:NU;627:-1:8j:OP;628:-1:oz:NU;629:-1:8k:NU;630:-1:8L:NU;631:-1:8m:NU;632:-1:2p:NU;633:-1:8n:OP;634:-1:8o:OP;635:-1:8p:OP;636:-1:8q:OP;637:-1:8r:OP;638:-1:8s:NU;639:-1:8t:NU;640:-1:8u:NU;641:-1:8v:OP;642:-1:8w:OP;643:-1:8x:NU;644:-1:8y:ON;645:-1:8z:NU;646:-1:5a:ON;647:-1:5b:OP;648:-1:5c:NU;649:-1:5d:NU;650:-1:5e:OP;651:-1:5f:OP;652:-1:5g:OP;653:-1:5h:NU;654:-1:5f:OP;655:-1:5f:OP;656:-1:5k:NU;657:-1:5l:NU;658:-1:2q:NU;659:-1:5h:NU;660:-1:5k:NU;661:-1:5a:ON;662:-1:5t:NU;663:-1:5q:NU;664:-1:5r:NU;665:-1:5s:NU;666:-1:5u:OP;667:-1:5v:OP;668:-1:5w:OP;669:-1:5x:NU;670:-1:5y:NU;671:-1:5z:OP;672:-1:3a:OP;673:-1:ss:;674:-1:3b:OP;675:-1:3c:OP;676:-1:3d:OP;677:-1:2u:NU;678:-1:2s:NU;679:-1:3f:OP;680:-1:3g:OP;681:-1:3h:OP;682:-1:3i:OP;683:-1:3j:OP;684:-1:3k:OP;685:-1:3L:OP;686:-1:3m:NU;687:-1:3n:NU;688:-1:3o:NU;689:-1:3p:ON;690:-1:3q:NU;691:-1:3s:OP;692:-1:ss:;693:-1:ss:;694:-1:3t:OP;695:-1:3u:OP;696:-1:4a:OP;697:-1:4b:OP;698:-1:3x:NU;699:-1:3y:NU;700:-1:3z:NU;701:-1:4c:NU;702:-1:9g:NU;703:-1:9h:NU;704:-1:9i:NU;705:-1:2o:NU;706:-1:3v:OP;707:-1:ss:;708:-1:2n:NU;709:-1:29:NU;710:-1:25:NU;711:-1:ss:;712:-1:ss:;713:-1:4x:ON;714:-1:4u:OP;715:-1:pp:NU;716:-1:pp:NU;717:-1:ss:;718:-1:7z:NU;719:-1:4x:ON;720:-1:7y:NU;721:-1:ss:;722:-1:ss:', 4: '0:238:WV:ON;1:580::;2:267:B6:NU;3:269:1G:NU;4:581::;5:573::;6:573::;7:573::;8:345:E3:NU;9:346:E4:NU;10:347:E5:NU;11:348:E6:NU;12:349:E7:NU;13:350:E8:NU;14:351::;15:352::;16:353::;17:358:E1:NU;18:359:E2:NU;19:363:XQ:OP;20:259:QS:OP;21:373:QT:OP;22:372:Y1:OP;23:374:UD:NU;24:236:HO:OP;25:249:HN:OP;26:226:IA:OP;27:231:HT:OP;28:232:HQ:OP;29:93:IZ:OP;30:97:IX:OP;31:123:IW:OP;32:124:IV:OP;33:96:IY:OP;34:225:IB:OP;35:233:HV:OP;36:222:70:OP;37:125:IU:OP;38:126:IS:OP;39:127:IR:OP;40:128:HG:ON;41:375::;42:376:UX:ON;43:254:12:NU;44:253:11:NU;45:342:1Y:ON;46:255:DI:NU:d7:m;47:392:30:ON;48:393:31:ON;49:394:32:ON;50:395:33:ON;51:396:34:ON;52:398:YG:ON;53:397:YF:OP;54:399:FH:OP;55:401:35:NU;56:400:HE:NU;57:380:UY:ON;58:383:18:OP;59:384:19:OP;60:296:QD:NU;61:297:QE:NU;62:403:9F:NU;63:102:FB:ON;64:408:98:NU;65:409:99:NU;66:0::;67:0::;68:0::;69:0::;70:0::;71:0::;72:0::;73:0::;74:0::;75:0::;76:0::;77:0::;78:0::;79:0::;80:0::;81:0::;82:0::;83:0::;84:0::;85:0::;86:0::;87:0::;88:0::;89:0::;90:0::;91:0::;92:0::;93:0::;94:0::;95:0::;96:0::;97:0::;98:0::;99:0::;100:0::;101:0::;102:0::;103:0::;104:0::;105:0::;106:0::;107:0::;108:0::;109:0::;110:0::;111:0::;112:0::;113:0::;114:0::;115:0::;116:0::;117:0::;118:0::;119:0::;120:0::;121:0::;122:0::;123:0::;124:0::;125:0::;126:0::;127:0::;128:0::;129:0::;130:0::;131:0::;132:0::;133:0::;134:0::;135:0::;136:0::;137:0::;138:0::;139:0::;140:0::;141:0::;142:0::;143:0::;144:0::;145:0::;146:0::;147:0::;148:0::;149:0::;150:-1:NU0:;151:-1:C5:OP;152:-1:SF:OP;153:-1:C6:OP;154:-1:U1:OP;155:-1:L1:OP;156:-1:L2:OP;157:-1:B1:OP;158:-1:TT:OP;159:-1:U2:OP;160:-1:BE:NU;161:-1:BX:OP;162:-1:FN:NU;163:-1:D1:OP;164:-1:D2:OP;165:-1:D3:OP;166:-1:D4:OP;167:-1:S1:OP;168:-1:S2:OP;169:-1:S3:OP;170:-1:S4:OP;171:-1:S5:OP;172:-1:S6:OP;173:-1:D5:OP;174:-1:D6:OP;175:-1:D7:OP;176:-1:GI:OP;177:-1:D8:OP;178:-1:HI:OP;179:-1:BR:ON;180:-1:IT:NU;181:-1:BF:NU;182:-1:CL:NU;183:-1:A1:NU;184:-1:A2:NU;185:-1:N1:NU;186:-1:N2:NU;187:-1:TO:ON;188:-1:WT:ON;189:-1:RB:ON;190:-1:R1:NU;191:-1:R2:NU;192:-1:R3:NU;193:-1:R4:NU;194:-1:R5:NU;195:-1:S1:OP;196:-1:CT:OP;197:-1:AD:NU;198:-1:T1:NU;199:-1:T2:NU;200:-1:C1:OP;201:-1:C2:OP;202:-1:U3:OP;203:-1:C4:OP;204:-1:Z1:NU;205:-1:Z2:NU;206:-1:Z5:OP;207:-1:Z3:OP;208:-1:Z4:OP;209:-1:TP:ON;210:-1:PP:ON;211:-1:SS:;212:-1:D9:OP;213:-1:DA:OP;214:-1:DB:OP;215:-1:X1:;216:-1:X2:;217:-1:1R:NU;218:-1:2R:NU;219:-1:3R:NU;220:-1:4R:NU;221:-1:F1:;222:-1:F2:;223:-1:YD:NU;224:-1:TD:ON;225:-1:DD:ON;226:-1:SZ:;227:-1:SH:OP;228:-1:TA:;229:-1:C3:OP;230:-1:OB:OP;231:-1:AF:OP;232:-1:B2:NU;233:-1:HS:OP;234:-1:HW:OP;235:-1:BC:OP;236:-1:SG:OP;237:-1:CA:OP;238:-1:CB:OP;239:-1:MC:OP;240:-1:DO:OP;241:-1:TL:OP;242:-1:TR:OP;243:-1:iz:OP;244:-1:U4:OP;245:-1:U5:OP;246:-1:iy:OP;247:-1:ix:OP;248:-1:TS:OP;249:-1:TU:OP;250:-1:SJ:OP;251:-1:B3:OP;252:-1:FB:ON;253:-1:FL:NU;254:-1:A3:NU;255:-1:A4:NU;256:-1:W1:NU;257:-1:W2:NU;258:-1:HM:NU;259:-1:P2:OP;260:-1:n5:S1;261:-1:F3:OP;262:-1:n6:S1;263:-1:F4:OP;264:-1:n7:S1;265:-1:F5:OP;266:-1:SN:OP;267:-1:JT:ON;268:-1:F6:OP;269:-1:wp:ON;270:-1:dj:OP;271:-1:ss:;272:-1:ss:;273:-1:iw:OP;274:-1:iv:OP;275:-1:iu:OP;276:-1:is:OP;277:-1:ir:OP;278:-1:hg:OP;279:-1:h2:OP;280:-1:zw:NU;281:-1:9b:OP;282:-1:zc:NU;283:-1:xx:;284:-1:zs:OP;285:-1:zr:OP;286:-1:zd:OP;287:-1:zl:NU;288:-1:zy:NU;289:-1:q1:OP;290:-1:q2:OP;291:-1:q3:OP;292:-1:q4:OP;293:-1:q5:OP;294:-1:q6:OP;295:-1:wi:ON;296:-1:q9:OP;297:-1:q7:OP;298:-1:q8:OP;299:-1:za:OP;300:-1:zv:NU;301:-1:ze:OP;302:-1:HA:NU;303:-1:DX:OP;304:-1:GC:OP;305:-1:c7:OP;306:-1:wm:ON;307:-1:wn:ON;308:-1:cp:OP;309:-1:cq:OP;310:-1:FX:NU;311:-1:FY:NU;312:-1:FZ:NU;313:-1:cf:NU;314:-1:MB:OP;315:-1:MD:OP;316:-1:MF:OP;317:-1:MH:OP;318:-1:MJ:OP;319:-1:cz:NU;320:-1:JH:OP;321:-1:sx:OP;322:-1:Mk:OP;323:-1:Mi:OP;324:-1:RY:OP;325:-1:RZ:OP;326:-1:c8:OP;327:-1:c9:OP;328:-1:GS:OP;329:-1:b4:OP;330:-1:b5:OP;331:-1:JC:OP;332:-1:tm:OP;333:-1:jz:OP;334:-1:jy:OP;335:-1:jx:OP;336:-1:jw:OP;337:-1:jv:OP;338:-1:ju:OP;339:-1:tP:OP;340:-1:js:OP;341:-1:jr:OP;342:-1:7h:NU;343:-1:ab:OP;344:-1:sl:;345:-1:sv:;346:-1:a5:OP;347:-1:jq:OP;348:-1:c0:OP;349:-1:mz:OP;350:-1:my:OP;351:-1:mx:NU;352:-1:mw:OP;353:-1:mv:OP;354:-1:mu:OP;355:-1:mt:OP;356:-1:mr:OP;357:-1:rw:NU;358:-1:bd:OP;359:-1:bj:OP;360:-1:lw:NU;361:-1:wb:NU;362:-1:yb:NU;363:-1:wd:NU;364:-1:wc:NU;365:-1:we:NU;366:-1:wy:NU;367:-1:lx:NU;368:-1:w3:NU;369:-1:w4:NU;370:-1:w5:NU;371:-1:w6:NU;372:-1:70:OP;373:-1:CN:OP;374:-1:CC:OP;375:-1:ib:OP;376:-1:ia:OP;377:-1:QX:NU;378:-1:qw:NU;379:-1:SQ:OP;380:-1:SY:OP;381:-1:ht:OP;382:-1:hq:OP;383:-1:hv:OP;384:-1:Qy:NU;385:-1:Qz:NU;386:-1:ho:OP;387:-1:wz:ON;388:-1:wv:ON;389:-1:bz:ON;390:-1:cy:OP;391:-1:cx:OP;392:-1:cu:OP;393:-1:cd:OP;394:-1:rn:OP;395:-1:by:NU;396:-1:ra:OP;397:-1:qa:OP;398:-1:qb:OP;399:-1:hn:OP;400:-1:ew:OP;401:-1:ga:ON;402:-1:gd:ON;403:-1:11:NU;404:-1:12:NU;405:-1:ss:;406:-1:s9:NU;407:-1:wg:NU;408:-1:wh:NU;409:-1:QS:OP;410:-1:HL:OP;411:-1:A7:OP;412:-1:s0:OP;413:-1:jb:NU;414:-1:jd:OP;415:-1:jf:OP;416:-1:GP:OP;417:-1:b6:NU;418:-1:BP:NU;419:-1:1g:;420:-1:GF:OP;421:-1:dg:OP;422:-1:df:OP;423:-1:f8:NU;424:-1:f9:;425:-1:ce:OP;426:-1:cg:OP;427:-1:cg:OP;428:-1:de:OP;429:-1:wj:NU;430:-1:wk:OP;431:-1:wl:OP;432:-1:ws:NU;433:-1:bi:NU;434:-1:qc:OP;435:-1:bm:NU;436:-1:bo:NU;437:-1:bq:NU;438:-1:w7:ON;439:-1:ub:OP;440:-1:dv:NU;441:-1:dn:NU;442:-1:dp:NU;443:-1:dt:NU;444:-1:dk:NU;445:-1:dl:NU;446:-1:qd:NU;447:-1:qe:NU;448:-1:ay:ON;449:-1:hb:OP;450:-1:hc:OP;451:-1:qf:OP;452:-1:qg:OP;453:-1:hd:OP;454:-1:7h:NU;455:-1:aa:NU;456:-1:aa:NU;457:-1:7a:NU;458:-1:7b:NU;459:-1:7c:NU;460:-1:7d:NU;461:-1:7e:NU;462:-1:7f:NU;463:-1:7g:NU;464:-1:qh:NU;465:-1:qi:NU;466:-1:qj:NU;467:-1:qk:NU;468:-1:ss:;469:-1:ax:OP;470:-1:au:OP;471:-1:pp:S1;472:-1:hu:NU;473:-1:qm:ON;474:-1:ql:ON;475:-1:qn:NU;476:-1:qo:OP;477:-1:V1:NU;478:-1:V2:NU;479:-1:xb:OP;480:-1:xc:OP;481:-1:xd:OP;482:-1:xe:OP;483:-1:xf:OP;484:-1:xg:OP;485:-1:xh:OP;486:-1:xi:OP;487:-1:y6:NU;488:-1:y4:NU;489:-1:y2:NU;490:-1:y3:NU;491:-1:xj:OP;492:-1:1y:ON;493:-1:xl:OP;494:-1:xm:OP;495:-1:e3:NU;496:-1:e4:NU;497:-1:e5:NU;498:-1:e6:NU;499:-1:e7:NU;500:-1:e8:NU;501:-1:ss:;502:-1:ss:;503:-1:ss:;504:-1:xk:OP;505:-1:xk:OP;506:-1:xk:OP;507:-1:TT:NU;508:-1:E1:NU;509:-1:E2:NU;510:-1:xn:OP;511:-1:qo:OP;512:-1:xp:OP;513:-1:jw:OP;514:-1:ea:OP;515:-1:vb:OP;516:-1:ve:OP;517:-1:vf:OP;518:-1:ss:;519:-1:ss:;520:-1:VG:NU;521:-1:L1:OP;522:-1:y1:OP;523:-1:Qt:OP;524:-1:ud:NU;525:-1:xx:;526:-1:ux:ON;527:-1:PP:NU;528:-1:ss:;529:-1:ss:;530:-1:uy:OP;531:-1:15:OP;532:-1:ss:;533:-1:18:OP;534:-1:19:OP;535:-1:ss:;536:-1:sv:OP;537:-1:y7:OP;538:-1:y8:OP;539:-1:y9:OP;540:-1:ya:OP;541:-1:yc:OP;542:-1:30:ON;543:-1:31:ON;544:-1:32:ON;545:-1:33:ON;546:-1:34:ON;547:-1:yf:OP;548:-1:yg:ON;549:-1:fh:OP;550:-1:he:NU;551:-1:35:NU;552:-1:yi:ON;553:-1:9f:NU;554:-1:55:NU;555:-1:xk:OP;556:-1:xk:OP;557:-1:xk:OP;558:-1:98:NU;559:-1:99:NU;560:-1:zq:OP;561:-1:px:NU;562:-1:py:NU;563:-1:6q:OP;564:-1:6r:OP;565:-1:6s:NU;566:-1:3w:OP;567:-1:ym:NU;568:-1:yn:OP;569:-1:6t:OP;570:-1:yp:OP;571:-1:yq:NU;572:-1:yr:OP;573:-1:ys:OP;574:-1:yt:OP;575:-1:ys:OP;576:-1:yv:NU;577:-1:yw:OP;578:-1:yx:OP;579:-1:yy:ON;580:-1:yz:OP;581:-1:6a:OP;582:-1:6b:OP;583:-1:6c:OP;584:-1:6d:NU;585:-1:2w:NU;586:-1:2x:NU;587:-1:6e:NU;588:-1:6f:NU;589:-1:6g:NU;590:-1:6h:NU;591:-1:2y:NU;592:-1:2z:NU;593:-1:6i:OP;594:-1:6j:OP;595:-1:6k:OP;596:-1:6L:NU;597:-1:6m:NU;598:-1:6n:OP;599:-1:2v:OP;600:-1:6o:NU;601:-1:6p:NU;602:-1:ao:NU;603:-1:ap:NU;604:-1:6t:OP;605:-1:6u:OP;606:-1:6v:NU;607:-1:6w:NU;608:-1:6x:NU;609:-1:ss:;610:-1:ss:;611:-1:ss:;612:-1:ss:;613:-1:6y:OP;614:-1:8a:OP;615:-1:8b:OP;616:-1:8c:OP;617:-1:8d:OP;618:-1:8e:OP;619:-1:8f:OP;620:-1:8g:OP;621:-1:8h:OP;622:-1:8i:NU;623:-1:60:NU;624:-1:60:NU;625:-1:61:NU;626:-1:62:NU;627:-1:8j:OP;628:-1:oz:NU;629:-1:8k:NU;630:-1:8L:NU;631:-1:8m:NU;632:-1:2p:NU;633:-1:8n:OP;634:-1:8o:OP;635:-1:8p:OP;636:-1:8q:OP;637:-1:8r:OP;638:-1:8s:NU;639:-1:8t:NU;640:-1:8u:NU;641:-1:8v:OP;642:-1:8w:OP;643:-1:8x:NU;644:-1:8y:ON;645:-1:8z:NU;646:-1:5a:ON;647:-1:5b:OP;648:-1:5c:NU;649:-1:5d:NU;650:-1:5e:OP;651:-1:5f:OP;652:-1:5g:OP;653:-1:5h:NU;654:-1:5f:OP;655:-1:5f:OP;656:-1:5k:NU;657:-1:5l:NU;658:-1:2q:NU;659:-1:5h:NU;660:-1:5k:NU;661:-1:5a:ON;662:-1:5t:NU;663:-1:5q:NU;664:-1:5r:NU;665:-1:5s:NU;666:-1:5u:OP;667:-1:5v:OP;668:-1:5w:OP;669:-1:5x:NU;670:-1:5y:NU;671:-1:5z:OP;672:-1:3a:OP;673:-1:ss:;674:-1:3b:OP;675:-1:3c:OP;676:-1:3d:OP;677:-1:2u:NU;678:-1:2s:NU;679:-1:3f:OP;680:-1:3g:OP;681:-1:3h:OP;682:-1:3i:OP;683:-1:3j:OP;684:-1:3k:OP;685:-1:3L:OP;686:-1:3m:NU;687:-1:3n:NU;688:-1:3o:NU;689:-1:3p:ON;690:-1:3q:NU;691:-1:3s:OP;692:-1:ss:;693:-1:ss:;694:-1:3t:OP;695:-1:3u:OP;696:-1:4a:OP;697:-1:4b:OP;698:-1:3x:NU;699:-1:3y:NU;700:-1:3z:NU;701:-1:4c:NU;702:-1:9g:NU;703:-1:9h:NU;704:-1:9i:NU;705:-1:2o:NU;706:-1:3v:OP;707:-1:ss:;708:-1:2n:NU;709:-1:29:NU;710:-1:25:NU;711:-1:ss:;712:-1:ss:;713:-1:4x:ON;714:-1:4u:OP;715:-1:pp:NU;716:-1:pp:NU;717:-1:ss:;718:-1:7z:NU;719:-1:4x:ON;720:-1:7y:NU;721:-1:ss:;722:-1:ss:', 5: '0:452:AO:NU;1:453:AP:NU;2:338:Y4:NU;3:337:Y6:NU;4:267:B6:NU;5:374:UD:NU;6:482:2P:NU;7:39:RB:ON;8:35:N1:NU;9:36:N2:NU;10:33:A1:NU;11:34:A2:NU;12:38:WT:ON;13:102:FB:ON;14:411:PX:NU;15:438:6F:NU;16:412:PY:NU;17:435:2W:NU;18:436:2X:NU;19:440:6H:NU;20:441:2Y:NU;21:441:2Y:NU;22:442:2Z:NU;23:429:YY:ON;24:420:YP:OP;25:431:6A:OP;26:430:YZ:OP;27:413:6Q:OP;28:432:6B:OP;29:433:6C:OP;30:418:YN:OP;31:419:YO:OP;32:424:YT:OP;33:425:YU:OP;34:416:3W:OP;35:414:6R:OP;36:415:6S:NU;37:427:YW:OP;38:428:YX:OP;39:421:YQ:NU;40:422:YR:OP;41:423:YS:OP;42:426:YV:NU;43:451:6P:NU;44:267:B6:NU;45:443:6I:OP;46:444:6J:OP;47:445:6K:OP;48:446:6L:NU;49:447:6M:NU;50:448:6N:NU;51:450:6O:NU;52:451:6P:NU;53:459:XS:NU:d1:m;54:460:2N:NU;55:461:0J:NU:d1:m;56:462:0J:NU:d7:m;57:482:2P:NU;58:473::;59:455:6U:OP;60:456:6V:NU;61:457:6W:NU;62:458:6X:NU;63:463:6Y:OP;64:464:8A:OP;65:465:8B:OP;66:466:8C:OP;67:467:8D:OP;68:468:8E:OP;69:469:8F:OP;70:470:8G:OP;71:471:8H:OP;72:472:8I:OP;73:477:8J:OP;74:479:8K:OP;75:480:8L:NU;76:481:8M:NU;77:483:8N:OP;78:484:8O:OP;79:485:8P:OP;80:486:8Q:OP;81:487:8R:OP;82:454:6T:OP;83:437:6E:NU;84:508:2Q:OP;85:488:8S:OP;86:493:8X:NU;87:493:8X:NU;88:495:8Z:OP;89:497:5B:OP;90:499:5D:OP;91:503:5H:OP;92:509:5M:OP;93:512:5T:OP;94:489:8T:NU;95:490:8U:NU;96:514:5R:NU;97:515:5S:NU;98:493:8X:NU;99:498:5C:NU;100:513:5Q:NU;101:494:8Y:ON;102:496:5A:ON;103:511:5O:ON;104:500:5E:OP;105:501:5F:OP;106:502:5G:OP;107:504:5I:OP;108:505:5J:OP;109:506:5K:NU;110:507:5L:NU;111:510:5N:NU;112:160:FX:NU;113:161:FY:NU;114:162:FZ:NU;115:269::;116:523::;117:434:6D:NU;118:496:5A:ON;119:496:5A:ON;120:496:5A:ON;121:527:2U:NU;122:528:2S:OP;123:538:3O:NU;124:539:3P:ON;125:542:XR:NU:d1:m;126:543:XR:NU:m;127:546:4A:OP;128:547:4B:OP;129:548:3X:NU;130:549:3Y:NU;131:550:3Z:NU;132:551:4C:NU;133:552:9G:NU;134:555:2O:NU;135:553:9H:NU;136:554:9I:NU;137:557::;138:541:3S:OP;139:544:3T:OP;140:559:29:NU;141:560:25:NU;142:564:4U:OP;143:567::;144:568:7Z:NU;145:536:3M:NU;146:537:3N:NU;147:563:4X:ON;148:570:7Y:NU;149:397:YF:OP;150:-1:NU0:;151:-1:C5:OP;152:-1:SF:OP;153:-1:C6:OP;154:-1:U1:OP;155:-1:L1:OP;156:-1:L2:OP;157:-1:B1:OP;158:-1:TT:OP;159:-1:U2:OP;160:-1:BE:NU;161:-1:BX:OP;162:-1:FN:NU;163:-1:D1:OP;164:-1:D2:OP;165:-1:D3:OP;166:-1:D4:OP;167:-1:S1:OP;168:-1:S2:OP;169:-1:S3:OP;170:-1:S4:OP;171:-1:S5:OP;172:-1:S6:OP;173:-1:D5:OP;174:-1:D6:OP;175:-1:D7:OP;176:-1:GI:OP;177:-1:D8:OP;178:-1:HI:OP;179:-1:BR:ON;180:-1:IT:NU;181:-1:BF:NU;182:-1:CL:NU;183:-1:A1:NU;184:-1:A2:NU;185:-1:N1:NU;186:-1:N2:NU;187:-1:TO:ON;188:-1:WT:ON;189:-1:RB:ON;190:-1:R1:NU;191:-1:R2:NU;192:-1:R3:NU;193:-1:R4:NU;194:-1:R5:NU;195:-1:S1:OP;196:-1:CT:OP;197:-1:AD:NU;198:-1:T1:NU;199:-1:T2:NU;200:-1:C1:OP;201:-1:C2:OP;202:-1:U3:OP;203:-1:C4:OP;204:-1:Z1:NU;205:-1:Z2:NU;206:-1:Z5:OP;207:-1:Z3:OP;208:-1:Z4:OP;209:-1:TP:ON;210:-1:PP:ON;211:-1:SS:;212:-1:D9:OP;213:-1:DA:OP;214:-1:DB:OP;215:-1:X1:;216:-1:X2:;217:-1:1R:NU;218:-1:2R:NU;219:-1:3R:NU;220:-1:4R:NU;221:-1:F1:;222:-1:F2:;223:-1:YD:NU;224:-1:TD:ON;225:-1:DD:ON;226:-1:SZ:;227:-1:SH:OP;228:-1:TA:;229:-1:C3:OP;230:-1:OB:OP;231:-1:AF:OP;232:-1:B2:NU;233:-1:HS:OP;234:-1:HW:OP;235:-1:BC:OP;236:-1:SG:OP;237:-1:CA:OP;238:-1:CB:OP;239:-1:MC:OP;240:-1:DO:OP;241:-1:TL:OP;242:-1:TR:OP;243:-1:iz:OP;244:-1:U4:OP;245:-1:U5:OP;246:-1:iy:OP;247:-1:ix:OP;248:-1:TS:OP;249:-1:TU:OP;250:-1:SJ:OP;251:-1:B3:OP;252:-1:FB:ON;253:-1:FL:NU;254:-1:A3:NU;255:-1:A4:NU;256:-1:W1:NU;257:-1:W2:NU;258:-1:HM:NU;259:-1:P2:OP;260:-1:n5:S1;261:-1:F3:OP;262:-1:n6:S1;263:-1:F4:OP;264:-1:n7:S1;265:-1:F5:OP;266:-1:SN:OP;267:-1:JT:ON;268:-1:F6:OP;269:-1:wp:ON;270:-1:dj:OP;271:-1:ss:;272:-1:ss:;273:-1:iw:OP;274:-1:iv:OP;275:-1:iu:OP;276:-1:is:OP;277:-1:ir:OP;278:-1:hg:OP;279:-1:h2:OP;280:-1:zw:NU;281:-1:9b:OP;282:-1:zc:NU;283:-1:xx:;284:-1:zs:OP;285:-1:zr:OP;286:-1:zd:OP;287:-1:zl:NU;288:-1:zy:NU;289:-1:q1:OP;290:-1:q2:OP;291:-1:q3:OP;292:-1:q4:OP;293:-1:q5:OP;294:-1:q6:OP;295:-1:wi:ON;296:-1:q9:OP;297:-1:q7:OP;298:-1:q8:OP;299:-1:za:OP;300:-1:zv:NU;301:-1:ze:OP;302:-1:HA:NU;303:-1:DX:OP;304:-1:GC:OP;305:-1:c7:OP;306:-1:wm:ON;307:-1:wn:ON;308:-1:cp:OP;309:-1:cq:OP;310:-1:FX:NU;311:-1:FY:NU;312:-1:FZ:NU;313:-1:cf:NU;314:-1:MB:OP;315:-1:MD:OP;316:-1:MF:OP;317:-1:MH:OP;318:-1:MJ:OP;319:-1:cz:NU;320:-1:JH:OP;321:-1:sx:OP;322:-1:Mk:OP;323:-1:Mi:OP;324:-1:RY:OP;325:-1:RZ:OP;326:-1:c8:OP;327:-1:c9:OP;328:-1:GS:OP;329:-1:b4:OP;330:-1:b5:OP;331:-1:JC:OP;332:-1:tm:OP;333:-1:jz:OP;334:-1:jy:OP;335:-1:jx:OP;336:-1:jw:OP;337:-1:jv:OP;338:-1:ju:OP;339:-1:tP:OP;340:-1:js:OP;341:-1:jr:OP;342:-1:7h:NU;343:-1:ab:OP;344:-1:sl:;345:-1:sv:;346:-1:a5:OP;347:-1:jq:OP;348:-1:c0:OP;349:-1:mz:OP;350:-1:my:OP;351:-1:mx:NU;352:-1:mw:OP;353:-1:mv:OP;354:-1:mu:OP;355:-1:mt:OP;356:-1:mr:OP;357:-1:rw:NU;358:-1:bd:OP;359:-1:bj:OP;360:-1:lw:NU;361:-1:wb:NU;362:-1:yb:NU;363:-1:wd:NU;364:-1:wc:NU;365:-1:we:NU;366:-1:wy:NU;367:-1:lx:NU;368:-1:w3:NU;369:-1:w4:NU;370:-1:w5:NU;371:-1:w6:NU;372:-1:70:OP;373:-1:CN:OP;374:-1:CC:OP;375:-1:ib:OP;376:-1:ia:OP;377:-1:QX:NU;378:-1:qw:NU;379:-1:SQ:OP;380:-1:SY:OP;381:-1:ht:OP;382:-1:hq:OP;383:-1:hv:OP;384:-1:Qy:NU;385:-1:Qz:NU;386:-1:ho:OP;387:-1:wz:ON;388:-1:wv:ON;389:-1:bz:ON;390:-1:cy:OP;391:-1:cx:OP;392:-1:cu:OP;393:-1:cd:OP;394:-1:rn:OP;395:-1:by:NU;396:-1:ra:OP;397:-1:qa:OP;398:-1:qb:OP;399:-1:hn:OP;400:-1:ew:OP;401:-1:ga:ON;402:-1:gd:ON;403:-1:11:NU;404:-1:12:NU;405:-1:ss:;406:-1:s9:NU;407:-1:wg:NU;408:-1:wh:NU;409:-1:QS:OP;410:-1:HL:OP;411:-1:A7:OP;412:-1:s0:OP;413:-1:jb:NU;414:-1:jd:OP;415:-1:jf:OP;416:-1:GP:OP;417:-1:b6:NU;418:-1:BP:NU;419:-1:1g:;420:-1:GF:OP;421:-1:dg:OP;422:-1:df:OP;423:-1:f8:NU;424:-1:f9:;425:-1:ce:OP;426:-1:cg:OP;427:-1:cg:OP;428:-1:de:OP;429:-1:wj:NU;430:-1:wk:OP;431:-1:wl:OP;432:-1:ws:NU;433:-1:bi:NU;434:-1:qc:OP;435:-1:bm:NU;436:-1:bo:NU;437:-1:bq:NU;438:-1:w7:ON;439:-1:ub:OP;440:-1:dv:NU;441:-1:dn:NU;442:-1:dp:NU;443:-1:dt:NU;444:-1:dk:NU;445:-1:dl:NU;446:-1:qd:NU;447:-1:qe:NU;448:-1:ay:ON;449:-1:hb:OP;450:-1:hc:OP;451:-1:qf:OP;452:-1:qg:OP;453:-1:hd:OP;454:-1:7h:NU;455:-1:aa:NU;456:-1:aa:NU;457:-1:7a:NU;458:-1:7b:NU;459:-1:7c:NU;460:-1:7d:NU;461:-1:7e:NU;462:-1:7f:NU;463:-1:7g:NU;464:-1:qh:NU;465:-1:qi:NU;466:-1:qj:NU;467:-1:qk:NU;468:-1:ss:;469:-1:ax:OP;470:-1:au:OP;471:-1:pp:S1;472:-1:hu:NU;473:-1:qm:ON;474:-1:ql:ON;475:-1:qn:NU;476:-1:qo:OP;477:-1:V1:NU;478:-1:V2:NU;479:-1:xb:OP;480:-1:xc:OP;481:-1:xd:OP;482:-1:xe:OP;483:-1:xf:OP;484:-1:xg:OP;485:-1:xh:OP;486:-1:xi:OP;487:-1:y6:NU;488:-1:y4:NU;489:-1:y2:NU;490:-1:y3:NU;491:-1:xj:OP;492:-1:1y:ON;493:-1:xl:OP;494:-1:xm:OP;495:-1:e3:NU;496:-1:e4:NU;497:-1:e5:NU;498:-1:e6:NU;499:-1:e7:NU;500:-1:e8:NU;501:-1:ss:;502:-1:ss:;503:-1:ss:;504:-1:xk:OP;505:-1:xk:OP;506:-1:xk:OP;507:-1:TT:NU;508:-1:E1:NU;509:-1:E2:NU;510:-1:xn:OP;511:-1:qo:OP;512:-1:xp:OP;513:-1:jw:OP;514:-1:ea:OP;515:-1:vb:OP;516:-1:ve:OP;517:-1:vf:OP;518:-1:ss:;519:-1:ss:;520:-1:VG:NU;521:-1:L1:OP;522:-1:y1:OP;523:-1:Qt:OP;524:-1:ud:NU;525:-1:xx:;526:-1:ux:ON;527:-1:PP:NU;528:-1:ss:;529:-1:ss:;530:-1:uy:OP;531:-1:15:OP;532:-1:ss:;533:-1:18:OP;534:-1:19:OP;535:-1:ss:;536:-1:sv:OP;537:-1:y7:OP;538:-1:y8:OP;539:-1:y9:OP;540:-1:ya:OP;541:-1:yc:OP;542:-1:30:ON;543:-1:31:ON;544:-1:32:ON;545:-1:33:ON;546:-1:34:ON;547:-1:yf:OP;548:-1:yg:ON;549:-1:fh:OP;550:-1:he:NU;551:-1:35:NU;552:-1:yi:ON;553:-1:9f:NU;554:-1:55:NU;555:-1:xk:OP;556:-1:xk:OP;557:-1:xk:OP;558:-1:98:NU;559:-1:99:NU;560:-1:zq:OP;561:-1:px:NU;562:-1:py:NU;563:-1:6q:OP;564:-1:6r:OP;565:-1:6s:NU;566:-1:3w:OP;567:-1:ym:NU;568:-1:yn:OP;569:-1:6t:OP;570:-1:yp:OP;571:-1:yq:NU;572:-1:yr:OP;573:-1:ys:OP;574:-1:yt:OP;575:-1:ys:OP;576:-1:yv:NU;577:-1:yw:OP;578:-1:yx:OP;579:-1:yy:ON;580:-1:yz:OP;581:-1:6a:OP;582:-1:6b:OP;583:-1:6c:OP;584:-1:6d:NU;585:-1:2w:NU;586:-1:2x:NU;587:-1:6e:NU;588:-1:6f:NU;589:-1:6g:NU;590:-1:6h:NU;591:-1:2y:NU;592:-1:2z:NU;593:-1:6i:OP;594:-1:6j:OP;595:-1:6k:OP;596:-1:6L:NU;597:-1:6m:NU;598:-1:6n:OP;599:-1:2v:OP;600:-1:6o:NU;601:-1:6p:NU;602:-1:ao:NU;603:-1:ap:NU;604:-1:6t:OP;605:-1:6u:OP;606:-1:6v:NU;607:-1:6w:NU;608:-1:6x:NU;609:-1:ss:;610:-1:ss:;611:-1:ss:;612:-1:ss:;613:-1:6y:OP;614:-1:8a:OP;615:-1:8b:OP;616:-1:8c:OP;617:-1:8d:OP;618:-1:8e:OP;619:-1:8f:OP;620:-1:8g:OP;621:-1:8h:OP;622:-1:8i:NU;623:-1:60:NU;624:-1:60:NU;625:-1:61:NU;626:-1:62:NU;627:-1:8j:OP;628:-1:oz:NU;629:-1:8k:NU;630:-1:8L:NU;631:-1:8m:NU;632:-1:2p:NU;633:-1:8n:OP;634:-1:8o:OP;635:-1:8p:OP;636:-1:8q:OP;637:-1:8r:OP;638:-1:8s:NU;639:-1:8t:NU;640:-1:8u:NU;641:-1:8v:OP;642:-1:8w:OP;643:-1:8x:NU;644:-1:8y:ON;645:-1:8z:NU;646:-1:5a:ON;647:-1:5b:OP;648:-1:5c:NU;649:-1:5d:NU;650:-1:5e:OP;651:-1:5f:OP;652:-1:5g:OP;653:-1:5h:NU;654:-1:5f:OP;655:-1:5f:OP;656:-1:5k:NU;657:-1:5l:NU;658:-1:2q:NU;659:-1:5h:NU;660:-1:5k:NU;661:-1:5a:ON;662:-1:5t:NU;663:-1:5q:NU;664:-1:5r:NU;665:-1:5s:NU;666:-1:5u:OP;667:-1:5v:OP;668:-1:5w:OP;669:-1:5x:NU;670:-1:5y:NU;671:-1:5z:OP;672:-1:3a:OP;673:-1:ss:;674:-1:3b:OP;675:-1:3c:OP;676:-1:3d:OP;677:-1:2u:NU;678:-1:2s:NU;679:-1:3f:OP;680:-1:3g:OP;681:-1:3h:OP;682:-1:3i:OP;683:-1:3j:OP;684:-1:3k:OP;685:-1:3L:OP;686:-1:3m:NU;687:-1:3n:NU;688:-1:3o:NU;689:-1:3p:ON;690:-1:3q:NU;691:-1:3s:OP;692:-1:ss:;693:-1:ss:;694:-1:3t:OP;695:-1:3u:OP;696:-1:4a:OP;697:-1:4b:OP;698:-1:3x:NU;699:-1:3y:NU;700:-1:3z:NU;701:-1:4c:NU;702:-1:9g:NU;703:-1:9h:NU;704:-1:9i:NU;705:-1:2o:NU;706:-1:3v:OP;707:-1:ss:;708:-1:2n:NU;709:-1:29:NU;710:-1:25:NU;711:-1:ss:;712:-1:ss:;713:-1:4x:ON;714:-1:4u:OP;715:-1:pp:NU;716:-1:pp:NU;717:-1:ss:;718:-1:7z:NU;719:-1:4x:ON;720:-1:7y:NU;721:-1:ss:;722:-1:ss:', } /** 表里带 token(= 有美术可查)的记录数。 */ -export const OBJECT_LOOKUP_WITH_ART = 3421 +export const OBJECT_LOOKUP_WITH_ART = 3422 /** 表里 token 为空的记录数:这些是不可见/占位对象,画不出来是对的。 */ export const OBJECT_LOOKUP_WITHOUT_ART = 193 /** 表里能对到 `Objects.txt` 行的记录数(其余只有 token/mode,没有名称与尺寸等元数据)。 */ -export const OBJECT_LOOKUP_WITH_ROW = 749 +export const OBJECT_LOOKUP_WITH_ROW = 750 diff --git a/src/scene/act-scene.ts b/src/scene/act-scene.ts index bed0674..67eb33a 100644 --- a/src/scene/act-scene.ts +++ b/src/scene/act-scene.ts @@ -147,6 +147,16 @@ interface Drawable { readonly page: number } +/** One object sprite to draw. */ +interface ObjectDrawable { + readonly frame: AtlasFrame + readonly x: number + readonly y: number + readonly depth: number + /** Object atlas page index this frame lives on. */ + readonly page: number +} + /** Everything the render loop needs, from either data path. */ interface MapRuntime { readonly source: 'pack' | 'live' @@ -172,6 +182,8 @@ interface MapRuntime { readonly walls: readonly Drawable[] /** Roof draws: painted after the character, so a roof covers what walks under it. */ readonly roofs: readonly Drawable[] + /** Object draws: interleaved with walls in painter's order. */ + readonly objectDrawables: readonly ObjectDrawable[] readonly spawn: { x: number; y: number } readonly objects: number readonly frames: number @@ -179,6 +191,8 @@ interface MapRuntime { readonly notes: readonly string[] /** Handles by page index; a hole means "not loaded yet". */ readonly pages: (AtlasHandle | null)[] + /** Object atlas page handles. */ + readonly objectPages: (AtlasHandle | null)[] /** Archive directories to try for the character archive, in order. */ readonly charBases: readonly string[] /** Act palette for the character atlas, when the pack carries one. */ @@ -274,6 +288,34 @@ interface PackIndex { }[] } +/** Object frame inside an object atlas page. */ +interface PackObjectFrame { + readonly page: number + readonly x: number + readonly y: number + readonly width: number + readonly height: number + readonly offsetX: number + readonly offsetY: number +} + +/** Object instance serialized in scene.json. */ +interface PackObject { + readonly id: number + readonly type: number + readonly name?: string | null + readonly token?: string + readonly mode?: string + readonly objectsTxtId?: number + readonly hp?: number + readonly member?: string | null + readonly alternatives?: number + readonly x: number + readonly y: number + readonly depth?: number + readonly frame?: PackObjectFrame | null +} + /** A pack's per-map scene file. */ interface PackSceneJson { readonly act: number @@ -286,13 +328,14 @@ interface PackSceneJson { readonly widthPx: number readonly heightPx: number readonly pages: readonly { readonly file: string; readonly width: number; readonly height: number }[] + readonly objectPages?: readonly { readonly file: string; readonly width: number; readonly height: number }[] readonly frames: readonly (readonly number[])[] readonly framePlacement: readonly (readonly number[])[] readonly floors: readonly (readonly number[])[] readonly walls: readonly (readonly number[])[] /** Roof draws, painted after everything else (absent in older packs). */ readonly roofs?: readonly (readonly number[])[] - readonly objects: readonly unknown[] + readonly objects: readonly PackObject[] readonly collision: { readonly width: number; readonly height: number; readonly runs: readonly (readonly number[])[] } readonly spawn: readonly number[] | null readonly stats: { readonly missingTiles: number; readonly walkable: number } @@ -347,6 +390,26 @@ async function loadPackRuntime( const walls = scene.walls.map(toDrawable) const roofs = (scene.roofs ?? []).map(toDrawable) + const objectDrawables: ObjectDrawable[] = [] + for (const obj of scene.objects) { + if (obj.frame) { + objectDrawables.push({ + frame: { + x: obj.frame.x, + y: obj.frame.y, + width: obj.frame.width, + height: obj.frame.height, + }, + x: obj.x + obj.frame.offsetX, + y: obj.y + obj.frame.offsetY, + depth: obj.depth ?? ((obj.x + obj.y) / 5), + page: obj.frame.page, + }) + } + } + objectDrawables.sort((a, b) => a.depth - b.depth) + const objectPages: (AtlasHandle | null)[] = (scene.objectPages ?? []).map(() => null) + // Collision arrives as runs; expanding it here keeps the JSON small and yields // exactly the grid the live path would have produced. const blocked = new Uint8Array(scene.collision.width * scene.collision.height) @@ -397,14 +460,33 @@ async function loadPackRuntime( floors, walls, roofs, + objectDrawables, spawn, objects: scene.objects.length, frames: scene.frames.length, notes: [`首屏页 ${priority.join(',')},共 ${String(pages.length)} 页`], pages, + objectPages, priorityPages: priority, loadOrder, async loadPages(renderer, indices, onProgress) { + if (objectPages.some(page => page === null) && scene.objectPages && scene.objectPages.length > 0) { + await Promise.all(scene.objectPages.map(async (page, index) => { + if (objectPages[index] !== null) return + try { + const response = await fetch(`${packBase}/${entry.path}/${page.file}`) + if (!response.ok) return + const bitmap = await createImageBitmap(await response.blob()) + try { + objectPages[index] = renderer.addAtlas(bitmap, page.width, page.height) + } finally { + bitmap.close() + } + } catch (err) { + console.warn(`object page ${page.file}: ${(err as Error).message}`) + } + })) + } const queue = indices.filter(index => pages[index] === null) let cursor = 0 const workers = Array.from({ length: Math.min(PAGE_CONCURRENCY, queue.length) }, async () => { @@ -536,11 +618,13 @@ async function loadLiveRuntime( floors: scene.floors.map(toDrawable), walls: scene.walls.map(toDrawable), roofs: scene.roofs.map(toDrawable), + objectDrawables: [], spawn: findIsoSpawn(scene) ?? { x: scene.widthPx / 2, y: scene.heightPx / 2 }, objects: level.objects.length, frames: scene.frames.length, notes, pages: [renderer.defaultAtlasHandle], + objectPages: [], priorityPages: [0], loadOrder: [0], loadPages: async () => {}, @@ -732,8 +816,44 @@ function runScene(runtime: MapRuntime, renderer: SpriteRenderer, started: number } drawTiles(runtime.floors, 0, runtime.floors.length) const cell = cellOf(runtime.grid, player.x, player.y) - const insertAt = depthInsertIndex(runtime.walls, cell.x, cell.y) - drawTiles(runtime.walls, 0, insertAt) + const playerDepth = cell.x + cell.y + + let wallIdx = 0 + let objIdx = 0 + const walls = runtime.walls + const objs = runtime.objectDrawables + + const drawUpToDepth = (maxDepth: number): void => { + while (wallIdx < walls.length || objIdx < objs.length) { + const nextWall = wallIdx < walls.length ? walls[wallIdx]! : null + const nextObj = objIdx < objs.length ? objs[objIdx]! : null + + const wallDepth = nextWall !== null ? nextWall.cellX + nextWall.cellY : Infinity + const objDepth = nextObj !== null ? nextObj.depth : Infinity + + if (wallDepth > maxDepth && objDepth > maxDepth) break + + if (wallDepth <= objDepth) { + const page = runtime.pages[nextWall!.page] + if (page === null || page === undefined) { + skippedDraws += 1 + } else { + renderer.draw(nextWall!.frame, nextWall!.x, nextWall!.y, { atlas: page }) + } + wallIdx += 1 + } else { + const page = runtime.objectPages[nextObj!.page] + if (page === null || page === undefined) { + skippedDraws += 1 + } else { + renderer.draw(nextObj!.frame, nextObj!.x, nextObj!.y, { atlas: page }) + } + objIdx += 1 + } + } + } + + drawUpToDepth(playerDepth) if (character === null) { // Placeholder until the character archive has been read. renderer.drawSolid(player.x - MARKER_WIDTH / 2, player.y - MARKER_HEIGHT, MARKER_WIDTH, MARKER_HEIGHT, [0.85, 0.75, 0.45, 1]) @@ -754,7 +874,7 @@ function runScene(runtime: MapRuntime, renderer: SpriteRenderer, started: number state.characterGroup = groupIndex } } - drawTiles(runtime.walls, insertAt, runtime.walls.length) + drawUpToDepth(Infinity) // Roofs last, in their own pass: the engine paints them after every other // layer so they cover the floor, the walls and anything walking under them. drawTiles(runtime.roofs, 0, runtime.roofs.length) @@ -788,7 +908,9 @@ function runScene(runtime: MapRuntime, renderer: SpriteRenderer, started: number + (state.character ? ` 角色为真·女法师(DCC+COF 合成,${String(state.characterMembers)} 层)。` : ' 角色暂为占位棋子:d2char.mpq 不可用时会退回这里。') - + ' 可破坏物品的位置与美术成员已进包,静态帧待接。' + + (runtime.objectDrawables.length > 0 + ? ` 对象层已绘制(火把/箱子/传送点等 ${String(runtime.objectDrawables.length)} 处)。` + : ' 可破坏物品的位置与美术成员已进包,静态帧待接。') preloadRemaining(runtime, renderer) if (runtime.palette !== null) { @@ -818,6 +940,9 @@ function runScene(runtime: MapRuntime, renderer: SpriteRenderer, started: number for (const page of runtime.pages) { if (page !== null) renderer.deleteAtlas(page) } + for (const page of runtime.objectPages) { + if (page !== null) renderer.deleteAtlas(page) + } renderer.dispose() }) }