diff --git a/data/json/terrain.json b/data/json/terrain.json index ded7715..8f5fd12 100644 --- a/data/json/terrain.json +++ b/data/json/terrain.json @@ -1 +1 @@ -{"_comment":"Static land/water mask. SAILABLE WATER = the map's own PATHING MAP (data/extracted/war3map.wpm, bit 0x40 = no-water, 4x4 32u subcells per 128u tile, majority vote): the engine's truth for where ships could actually sail in the original. This REPLACES the minimap NON-BLUE colour key (~0.66 water), which over-watered: green 'shallow' paint is often visually-wet-but-UNSAILABLE, merging lanes the real map separates (owner-reported 2026-07-08: the NE lane must NOT merge into the east-edge lane; the wpm separates them). The wpm reads ~0.55 sailable over the playable crop and all 26 known anchors (HQs, harbours, spawns, lane waypoints) sit sailable. The ONLY additions on top of the raw wpm grid are MINIMAL 1-cell connectivity necks (so every shop + dock/spawn reaches the sea and the two bases stay water-connected) PLUS the two owner-approved WEST sail-around island moats (Swedish Lumber Mill, Goblin Potion Dealer: land core + thin 1-cell navigable ring + EXACTLY ONE entrance; deterministic post-step). water=true is ship-navigable. The OPTIONAL `depth` field (0=land,1=deep,2=shallow,3=pink) is additive render metadata the SIM IGNORES; the minimap colours band each FINAL water cell so a client paints the water shades like the original. Regenerate with: make terrain (tools/extractor/terrain.py; pure stdlib, reads wpm+w3e+PNG, no venv). yOrientation 'top-down' means rle row 0 is the NORTH (max-Y) edge.","source":"data/extracted/war3map.wpm (pathing map, bit 0x40=no-water; THE sailability authority) + data/extracted/war3map.w3e (grid geometry) + data/reference/war3mapMap.png (depth render metadata only)","target":"the original map's enforced ship-pathing (wpm no-water), cropped to the playable rectangle","rule":"water = wpm NOT-no-water majority over the 16 32u subcells per 128u tile, MINUS singleton speckle, PLUS minimal 1-cell connectivity necks (Dijkstra cost 1 water / 30 land) for shops, docks/spawns and base-to-base, PLUS the two carved WEST sail-around island moats (compact land core + thin 1-cell water ring + exactly one entrance) around the Swedish Lumber Mill and Goblin Potion Dealer shops. depth sub-classifies FINAL water cells from the minimap colours for RENDER only: DEEP (R-B>35 AND R>=G), PINK (R>150 AND B>120 AND R-G>15), else SHALLOW; a water cell whose pixels read land-blue falls back to SHALLOW.","playableBounds":{"minX":-5376.0,"minY":-7424.0,"maxX":4864.0,"maxY":6912.0},"bounds":{"minX":-5440.0,"minY":-7488.0,"maxX":4928.0,"maxY":6976.0},"cols":162,"rows":226,"cellSizeX":64.0,"cellSizeY":64.0,"yOrientation":"top-down","yOrientationNote":"rle row 0 = max-Y (north); last row = min-Y (south). col 0 = min-X (west). col=floor((x-minX)/cellSizeX), row=floor((maxY-y)/cellSizeY). The minimap is north-up; tiles are sampled at their world centers via the content-box registration, emit row 0 = north, matching sim isWater.","rleFormat":"water[r] = [leadingValue, run0, run1, ...]; runs alternate from leadingValue (0=land,1=water) and sum to cols.","depthRleFormat":"OPTIONAL render metadata, the sim IGNORES it. depth[r] = [value0, run0, value1, run1, ...] (explicit value per run; values 0=land, 1=deep, 2=shallow, 3=pink; runs sum to cols). depth[r][col]>0 IFF water[r][col]==1 (exactly consistent with the authoritative `water` mask). Carved necks/moats with no minimap colour emit as shallow (2).","waterFraction":0.51311,"validation":{"hqsOnWater":"2/2","harboursOnWater":"4/4","playerSpawnsOnWater":"12/12","lanes":["south-west: spawnWater=True connToEnemyHQ=True","south-east: spawnWater=True connToEnemyHQ=True","north-west: spawnWater=True connToEnemyHQ=True","north-east: spawnWater=True connToEnemyHQ=True"],"basesConnected":true,"shopsReachable":"16/16","shopReach":["Swedish Lumber Mill: reachable=True nearestSeaCells=1","Goblin Potion Dealer: reachable=True nearestSeaCells=1","Elven Library: reachable=True nearestSeaCells=0","Ship Wreck: reachable=True nearestSeaCells=0","Elven Library: reachable=True nearestSeaCells=4","Ale Brewery: reachable=True nearestSeaCells=2","Equipment Merchant: reachable=True nearestSeaCells=3","Heavy Weapons Merchant: reachable=True nearestSeaCells=2","Weapons Merchant: reachable=True nearestSeaCells=4","Equipment Merchant: reachable=True nearestSeaCells=2","Bill (Trade Master): reachable=True nearestSeaCells=3","Pirate Boat Merchant: reachable=True nearestSeaCells=0","Will (Trade Master): reachable=True nearestSeaCells=4","Weapons Merchant: reachable=True nearestSeaCells=2","Heavy Weapons Merchant: reachable=True nearestSeaCells=3","Goblin Bomb Shop: reachable=True nearestSeaCells=0"],"repairRegionsReachable":"2/2","repairRegionReach":["Repair_Station_South: reachable=True","Repair_Station_North: reachable=True"],"waterFraction":0.5131,"eastThirdWaterRun":"median=6.0 mean=8.57 count=567","bottomRightWaterRun":"median=5.0 mean=5.87 count=200","necks":{"basePlatformCellsAdded":1,"connectivityNeckCellsAdded":0,"shopNeckCellsAdded":4,"repairRegionNeckCellsAdded":0,"waterFractionBefore":0.5136,"waterFractionAfter":0.5137,"shopsReachable":"16/16","repairRegionsReachable":"2/2","singletonCellsDropped":0,"straddledChannelCellsRestored":0,"ownerLaneGates":[{"gate":"north-most lane: east leg (owner's arrow)","row":22,"blocked":2,"widthUnits":128}],"westIslandLoops":{"Swedish Lumber Mill":{"shopCell":[12,123],"anchor":[8,123],"shopInCore":true,"shopInRing":false,"shopOnLand":true,"cycleLen":40,"entranceCells":[[7,117]],"entrances":1,"cellsChanged":93},"Goblin Potion Dealer":{"shopCell":[7,192],"anchor":[7,188],"shopInCore":true,"shopInRing":false,"shopOnLand":true,"cycleLen":40,"entranceCells":[[7,194]],"entrances":1,"cellsChanged":49},"waterFractionBefore":0.5137,"waterFractionAfter":0.5131,"totalCellsChanged":142}},"laneTopologyVsWpm":{"anchors":22,"pairwiseMismatches":0},"sideRoutes":{"westLumberMillIsland":{"islandLandCells":81,"ringWaterCells":36,"entrances":1},"westGoblinPotionIsland":{"islandLandCells":81,"ringWaterCells":36,"entrances":1},"eastBreweryWrap":{"brewerySeaReachable":true,"farEastNorthWaterCells":226},"bottomRightWinding":{"tanSegments":196,"tanMaxRun":27,"windingNotBlob":false}},"wpmAgreement":0.9959,"wpmConfusion":"agree=0.9959 ours-only(necks/moats)=0.0018 ref-only(denoised)=0.0023","depthSplitLandDeepShallowPink":[0.4869,0.2337,0.2719,0.0075],"colourKeyAgreement":0.6694},"water":[[0,162],[0,162],[0,162],[0,71,6,85],[0,71,6,85],[0,57,2,12,6,85],[0,57,2,12,6,85],[0,47,2,7,7,8,6,85],[0,47,2,7,7,8,6,85],[0,47,4,4,22,85],[0,47,4,4,22,85],[0,47,32,54,2,27],[0,47,32,54,2,27],[0,55,30,44,8,25],[0,55,30,44,8,25],[0,57,28,40,14,23],[0,57,28,37,20,20],[0,57,20,45,7,8,5,20],[0,57,20,45,7,8,5,20],[0,57,20,45,5,11,5,19],[0,57,20,45,5,12,5,18],[0,57,18,46,4,15,4,18],[0,57,18,46,4,37],[0,57,18,48,2,16,4,17],[0,57,19,47,2,16,4,17],[0,7,8,28,33,5,12,18,4,8,2,18,2,17],[0,7,8,28,37,1,13,6,4,6,5,8,2,18,3,16],[0,7,10,24,54,5,5,5,7,6,4,16,3,11,3,2],[0,7,10,24,54,5,5,1,2,2,8,5,4,9,4,2,4,11,3,2],[0,7,11,15,2,4,56,4,30,6,11,7,3,1,5],[0,7,12,9,2,3,2,4,56,3,31,6,2,1,8,7,9],[0,9,26,4,56,3,29,8,11,7,9],[0,9,26,4,56,3,28,9,13,5,9],[0,9,3,2,21,4,88,6,28,1],[0,9,2,1,116,5,18,1,9,1],[0,12,106,5,6,4,6,4,12,1,4,2],[0,11,104,8,6,4,6,4,18,1],[0,13,14,3,79,15,15,5,18],[0,13,15,2,74,1,4,16,14,6,16,1],[0,13,15,2,68,29,12,6,13,4],[0,2,2,9,84,30,13,5,5,1,6,5],[1,4,9,84,20,2,18,1,1,1,10,6,6],[1,3,1,2,2,89,13,2,4,3,18,2,23],[1,97,12,14,39],[1,29,3,65,12,17,36],[0,3,26,3,65,13,23,29],[0,2,7,4,16,3,66,12,23,29],[0,2,7,4,16,3,35,8,4,4,16,11,10,3,18,18,3],[0,2,7,4,16,4,34,8,4,4,16,7,14,3,18,1,2,15,3],[0,2,7,4,5,13,31,15,2,4,14,8,15,7,2,3,13,10,6,1],[0,3,7,3,4,14,31,15,2,4,14,8,15,7,2,8,9,9,6,1],[1,17,19,26,15,2,4,14,8,15,18,2,1,5,7,6,3],[1,17,20,27,12,6,1,14,8,12,24,7,5,6,3],[1,17,21,28,10,21,8,12,26,12,7],[1,17,21,28,12,20,6,13,26,12,7],[1,19,14,2,3,27,13,21,5,11,8,2,20,9,8],[1,19,14,2,3,27,11,5,4,15,4,11,8,2,20,9,8],[1,13,20,2,3,26,12,5,4,15,4,10,9,2,10,4,9,6,8],[1,13,20,2,3,24,15,4,4,15,5,9,6,5,10,5,22],[1,13,20,2,3,24,3,2,9,5,4,15,3,11,5,8,8,8,19],[1,13,20,29,13,6,4,15,3,10,3,12,7,8,19],[0,4,9,6,2,12,29,3,12,4,32,3,13,6,10,17],[0,5,11,3,2,12,44,4,32,3,29,17],[0,6,17,11,43,4,64,4,2,11],[0,9,15,10,44,3,64,1,6,10],[0,10,17,7,30,2,87,9],[0,11,17,6,29,3,87,9],[0,19,12,3,28,4,5,9,73,9],[0,19,43,5,4,9,76,6],[0,21,41,7,2,9,76,5,1],[0,21,43,4,3,7,78,5,1],[0,21,43,4,5,4,79,6],[0,21,42,1,9,1,81,7],[0,25,129,8],[0,25,2,4,120,11],[0,32,119,11],[0,33,118,11],[0,33,66,4,48,11],[0,33,66,4,48,11],[0,11,8,18,62,10,5,2,34,12],[0,11,8,18,62,9,6,3,5,3,16,21],[0,7,16,14,62,9,6,4,4,40],[0,7,16,14,63,4,2,3,4,49],[0,5,7,3,12,11,62,3,10,49],[0,4,7,4,12,14,20,3,3,6,3,2,21,3,3,1,7,49],[0,3,7,5,10,16,20,3,2,7,3,2,35,48,1],[1,2,1,7,5,10,13,2,1,20,12,3,2,35,48,1],[1,2,1,7,5,7,16,23,12,40,6,2,32,4,5],[0,3,6,6,6,17,26,8,39,8,2,32,4,5],[0,3,6,6,6,17,26,8,31,4,4,6,4,20,4,4,8,5],[0,2,7,5,10,15,28,3,33,4,4,6,4,20,4,4,8,5],[0,2,5,7,11,13,63,6,5,7,2,10,26,5],[0,5,3,6,11,13,64,5,5,7,2,10,26,5],[0,5,3,5,14,11,64,5,5,21,22,7],[0,5,3,5,14,10,64,6,4,22,23,6],[0,5,14,1,2,3,2,6,33,2,33,4,6,23,22,6],[0,5,14,6,2,6,32,6,30,4,8,22,21,6],[0,6,13,6,2,6,31,9,5,3,20,4,8,22,22,5],[0,8,12,5,2,6,31,9,4,4,20,3,9,9,2,11,23,4],[0,8,19,12,28,6,4,4,29,12,5,8,6,4,13,4],[0,8,19,12,28,5,6,3,30,11,6,7,6,4,11,6],[0,8,19,13,22,10,6,5,26,12,8,6,6,8,7,6],[0,4,26,10,21,12,5,5,26,12,8,6,6,8,7,6],[0,3,27,10,19,14,5,5,22,16,8,6,4,11,7,5],[1,30,10,19,14,5,5,22,16,9,5,4,12,6,5],[1,6,5,6,1,15,7,16,17,6,4,21,9,17,21,11],[0,2,4,5,6,6,10,7,16,17,6,4,20,10,17,21,11],[0,2,4,5,6,9,9,5,16,11,12,4,18,12,17,25,7],[0,4,2,5,6,10,9,5,15,11,12,4,18,12,19,23,7],[0,4,2,5,4,14,7,7,13,9,12,6,18,10,21,25,5],[0,11,4,14,7,7,12,1,2,2,4,1,12,6,18,10,20,11,4,10,4,2],[0,11,4,14,8,6,15,2,17,6,48,10,6,9,4,2],[0,11,4,14,8,6,15,3,16,6,48,9,7,5,7,3],[0,9,8,14,6,6,34,4,50,6,10,5,7,3],[0,9,8,14,6,6,34,4,50,6,13,2,7,3],[0,7,6,18,6,6,30,1,2,5,20,6,26,4,22,3],[0,7,6,13,2,3,6,6,31,7,20,6,26,4,22,3],[0,7,1,18,2,1,8,6,14,4,13,7,20,10,21,9,16,5],[0,3,11,14,9,5,15,4,40,10,20,10,16,5],[0,3,1,9,1,14,29,4,40,12,7,4,7,10,14,7],[0,3,1,9,1,14,29,4,40,11,7,6,6,10,14,7],[0,3,1,9,1,14,29,4,2,7,30,12,6,7,10,6,4,17],[0,3,1,9,1,14,32,1,2,10,26,26,10,5,5,17],[0,3,1,9,1,13,10,1,25,11,25,26,4,4,2,5,5,17],[0,3,1,9,1,13,10,5,21,12,25,25,4,4,2,6,4,17],[0,3,1,9,1,1,2,10,7,8,21,12,25,23,6,13,3,17],[0,3,1,9,1,1,2,10,6,9,21,12,29,19,6,14,2,17],[0,3,1,9,1,1,2,8,4,1,2,9,20,14,29,19,4,16,2,10,6,1],[0,3,11,1,2,7,5,12,20,14,28,20,4,16,5,7,6,1],[0,15,2,7,5,10,22,14,27,19,6,16,5,7,4,3],[0,9,8,8,4,10,22,14,26,15,2,3,6,15,5,8,4,3],[0,9,8,8,4,8,24,14,26,8,2,5,2,1,12,8,8,8,4,3],[0,8,9,8,5,7,24,14,26,5,5,7,13,8,8,8,4,3],[0,1,2,4,12,6,5,7,25,13,36,7,6,1,7,1,13,5,10,1],[0,1,2,4,12,6,5,7,27,11,37,7,2,3,22,5,2,2,6,1],[0,1,2,4,2,6,4,6,5,11,24,6,41,12,22,3,1,2,1,2,7],[0,1,2,3,3,6,4,6,5,11,24,6,41,10,28,2,10],[0,6,3,6,4,4,7,11,24,4,44,9,40],[0,6,3,6,4,4,6,12,25,3,43,10,38,1,1],[0,5,4,6,12,12,27,3,34,3,6,10,35,4,1],[0,5,4,6,12,12,29,1,34,3,12,2,37,4,1],[0,7,18,14,63,4,12,2,12,5,1,2,10,1,6,5],[0,7,18,14,62,5,12,5,9,5,1,2,17,5],[0,7,6,4,6,18,23,3,33,6,12,5,9,5,22,3],[0,7,6,4,6,18,22,4,32,7,7,10,9,5,9,3,10,3],[0,41,22,6,30,7,4,2,1,15,6,2,10,3,12,1],[0,41,22,5,31,7,4,2,1,16,17,3,12,1],[0,37,24,7,3,6,34,21,15,4,10,1],[0,37,24,8,2,6,34,22,5,2,7,4,7,1,2,1],[0,27,2,8,24,8,2,6,26,2,4,25,4,2,7,4,11],[0,27,2,8,25,2,2,2,3,6,26,2,4,25,3,3,7,4,2,3,6],[0,27,2,8,36,4,23,7,2,10,4,10,4,3,2,11,1,2,6],[0,26,3,7,37,4,22,8,2,10,4,10,4,16,9],[0,26,5,4,38,4,22,8,2,10,4,12,2,18,2,4,1],[0,26,73,8,2,10,4,12,2,18,2,4,1],[0,26,2,2,37,4,30,6,4,6,2,16,2,25],[0,30,37,4,30,6,4,6,2,15,4,6,2,16],[0,30,33,8,2,1,27,6,4,23,5,4,3,16],[0,31,32,7,3,6,22,6,4,21,7,4,2,17],[0,29,33,8,3,8,22,4,6,19,7,16,2,5],[0,29,34,5,2,1,2,8,22,4,7,18,7,16,2,5],[0,29,33,1,12,6,36,15,7,16,2,5],[0,29,30,3,13,6,35,12,2,4,5,16,2,5],[0,29,30,3,15,4,26,18,5,4,2,1,4,10,10,1],[0,29,30,4,15,3,26,18,5,7,4,9,11,1],[0,27,32,4,44,18,6,8,2,9,12],[0,27,32,4,44,18,6,8,2,5,16],[0,27,32,4,14,1,31,16,6,8,2,4,7,9,1],[0,27,50,3,29,15,7,8,2,4,6,10,1],[0,27,50,3,26,1,8,9,7,8,9,13,1],[0,26,51,3,22,5,9,6,9,8,8,14,1],[0,21,10,7,22,11,6,3,22,7,7,6,9,10,5,9,7],[0,21,11,6,22,3,2,10,2,3,21,8,7,7,8,10,4,10,7],[0,21,11,6,22,17,28,5,7,6,12,16,11],[0,21,11,6,21,17,29,8,4,6,13,15,11],[0,23,9,5,22,17,29,9,13,6,4,12,7,6],[0,23,9,5,22,18,29,9,12,6,4,12,5,8],[0,23,36,18,29,9,10,8,6,8,7,8],[0,23,37,17,20,17,11,8,6,7,5,11],[0,25,35,17,16,21,4,16,5,4,8,11],[0,25,35,14,19,42,5,3,8,11],[0,25,4,3,30,2,29,45,9,15],[0,25,4,4,29,2,29,11,2,33,8,15],[0,2,11,12,2,7,59,11,2,34,7,10,5],[0,2,1,9,1,11,3,9,60,6,4,16,2,17,6,10,4,1],[0,2,1,9,1,11,3,9,61,4,6,15,2,38],[0,2,1,9,1,11,4,6,63,4,6,55],[0,2,1,9,1,10,72,6,8,18,4,24,1,6],[0,2,1,9,1,10,72,6,9,14,2,1,7,21,1,6],[0,2,1,9,1,1,1,6,74,6,9,13,12,20,1,5,1],[0,2,1,9,1,1,1,6,74,6,9,8,2,3,12,20,1,5,1],[0,2,1,9,1,1,1,6,89,7,20,14,5,6],[0,2,1,9,1,1,1,6,89,6,22,13,5,6],[0,2,11,8,89,5,23,13,5,6],[0,7,1,12,82,3,5,5,27,9,6,5],[0,7,5,8,20,2,60,4,24,5,8,6,8,5],[0,7,6,7,20,3,57,7,22,6,9,5,6,7],[0,7,6,4,23,3,57,8,11,3,5,10,7,5,5,8],[0,7,2,1,3,4,22,4,57,8,11,3,5,9,10,2,5,9],[1,3,6,29,9,53,8,4,3,4,3,5,9,17,9],[1,36,11,53,8,4,3,4,5,3,12,14,9],[1,36,11,50,1,2,7,5,3,2,7,7,8,12,11],[1,1,5,25,16,50,9,6,3,2,8,6,8,12,11],[1,1,5,8,4,4,2,6,28,22,7,4,15,6,15,6,29],[1,1,24,4,34,16,8,4,15,6,15,6,29],[0,25,2,36,16,27,6,15,6,29],[0,25,2,36,16,28,5,15,6,29],[0,63,16,28,6,14,8,27],[0,63,16,28,6,14,8,27],[0,63,16,29,9,8,4,33],[0,63,16,30,13,3,4,33],[0,63,20,29,17,33],[0,63,20,30,16,33],[0,55,30,29,6,42],[0,55,30,33,2,42],[0,55,30,33,2,42],[0,55,30,77],[0,59,8,4,1,90],[0,59,8,95],[0,61,6,95],[0,61,6,95],[0,61,6,95],[0,61,6,95],[0,61,6,95],[0,61,6,95],[0,63,2,97]],"depth":[[0,162],[0,162],[0,162],[0,71,2,6,0,85],[0,71,2,6,0,85],[0,57,2,2,0,12,2,6,0,85],[0,57,2,2,0,12,2,6,0,85],[0,47,2,2,0,7,2,7,0,8,2,6,0,85],[0,47,2,2,0,7,2,7,0,8,2,6,0,85],[0,47,2,4,0,4,2,22,0,85],[0,47,2,4,0,4,2,22,0,85],[0,47,2,15,1,10,2,7,0,54,2,2,0,27],[0,47,2,14,1,13,2,5,0,54,2,2,0,27],[0,55,2,5,1,16,2,9,0,44,2,8,0,25],[0,55,2,5,1,16,2,9,0,44,2,8,0,25],[0,57,2,4,1,16,2,8,0,40,2,14,0,23],[0,57,2,4,1,16,2,8,0,37,2,20,0,20],[0,57,2,3,1,17,0,45,2,7,0,8,2,5,0,20],[0,57,2,2,1,18,0,45,2,2,1,2,2,3,0,8,2,5,0,20],[0,57,2,2,1,18,0,45,2,2,1,3,0,11,2,5,0,19],[0,57,1,20,0,45,2,3,1,1,2,1,0,12,2,5,0,18],[0,57,1,18,0,46,2,4,0,15,2,4,0,18],[0,57,1,18,0,46,2,4,0,37],[0,57,1,18,0,48,2,2,0,16,2,4,0,17],[0,57,1,19,0,47,2,2,0,16,2,4,0,17],[0,7,2,4,1,4,0,28,1,33,0,5,1,3,2,2,1,7,0,18,2,4,0,8,2,2,0,18,2,2,0,17],[0,7,2,3,1,5,0,28,1,37,0,1,1,13,0,6,2,4,0,6,2,5,0,8,2,2,0,18,2,3,0,16],[0,7,2,3,1,7,0,24,1,54,0,5,2,5,0,5,2,7,0,6,2,4,0,16,2,3,0,11,2,3,0,2],[0,7,2,3,1,7,0,24,1,54,0,5,2,5,0,1,2,2,0,2,2,8,0,5,2,4,0,9,2,4,0,2,2,4,0,11,2,3,0,2],[0,7,2,3,1,8,0,15,2,1,1,1,0,4,1,56,0,4,2,30,0,6,2,11,0,7,2,3,0,1,2,5],[0,7,1,1,2,2,1,9,0,9,2,1,1,1,0,3,1,1,2,1,0,4,1,31,2,2,1,3,2,6,1,1,2,2,1,11,0,3,2,31,0,6,2,2,0,1,2,8,0,7,2,9],[0,9,2,1,1,11,2,8,1,4,2,2,0,4,1,25,2,3,1,3,2,7,1,1,2,7,1,10,0,3,2,29,0,8,2,11,0,7,2,9],[0,9,2,2,1,11,2,8,1,3,2,2,0,4,1,24,2,22,1,10,0,3,2,28,0,9,2,13,0,5,2,9],[0,9,2,3,0,2,2,2,1,6,2,11,1,2,0,4,1,23,2,22,1,12,2,31,0,6,2,28,0,1],[0,9,2,2,0,1,2,1,1,1,2,2,1,3,2,13,1,26,2,26,1,12,2,32,0,5,2,18,0,1,2,9,0,1],[0,12,2,4,1,2,2,13,1,5,2,1,1,20,2,30,1,6,2,23,1,1,2,1,0,5,1,1,2,5,0,4,2,6,0,4,2,12,0,1,2,4,0,2],[0,11,2,13,3,3,2,4,1,3,2,3,1,19,2,19,3,1,1,2,2,9,1,6,2,22,0,8,1,1,2,5,0,4,2,6,0,4,2,18,0,1],[0,13,2,6,3,2,1,1,2,1,3,4,0,3,2,1,1,3,2,3,1,19,2,2,1,2,2,14,3,1,1,4,2,8,1,7,2,15,0,15,2,15,0,5,2,18],[0,13,2,5,1,1,3,9,0,2,2,3,1,1,2,3,1,21,2,16,3,2,1,4,2,7,1,7,2,10,0,1,2,4,0,16,2,14,0,6,2,16,0,1],[0,13,2,2,3,4,2,4,3,5,0,2,2,7,1,22,2,15,3,4,1,3,2,7,1,7,2,3,0,29,2,12,0,6,2,13,0,4],[0,2,1,2,0,9,2,1,3,5,2,5,3,6,2,7,1,22,2,15,3,4,1,3,2,3,1,1,2,3,1,7,2,2,0,30,2,13,0,5,2,5,0,1,2,6,0,5],[1,4,0,9,2,1,3,5,2,7,3,4,2,7,1,23,2,15,3,4,1,2,2,2,1,2,2,3,1,8,2,1,0,20,1,2,0,18,2,1,0,1,2,1,0,10,2,6,0,6],[1,3,0,1,1,2,0,2,2,6,3,5,2,7,3,5,2,7,1,22,2,15,3,3,1,3,2,8,1,8,0,13,2,1,1,1,0,4,1,2,2,1,0,18,2,2,0,23],[1,7,2,7,3,3,2,10,3,5,2,6,1,26,2,11,3,3,1,3,2,8,1,8,0,12,2,2,1,6,2,6,0,39],[1,6,2,9,3,2,2,10,3,2,0,3,2,6,1,24,2,1,1,1,2,12,3,1,1,4,2,5,1,2,2,2,1,7,0,12,2,2,1,6,2,9,0,36],[0,3,1,2,2,11,3,1,2,10,3,2,0,3,2,6,1,23,2,5,3,4,2,6,3,1,1,5,2,4,1,4,2,6,1,1,0,13,2,1,1,6,2,16,0,29],[0,2,1,2,2,5,0,4,2,14,3,2,0,3,2,6,1,23,2,5,3,5,2,5,3,1,1,5,2,5,1,4,2,7,0,12,1,7,2,16,0,29],[0,2,1,2,2,5,0,4,2,16,0,3,2,6,1,22,2,6,3,1,0,8,2,1,3,1,1,2,0,4,2,5,1,3,2,8,0,11,1,2,2,2,1,3,2,3,0,3,2,18,0,18,2,3],[0,2,1,3,2,4,0,4,2,16,0,4,2,4,1,23,2,6,3,1,0,8,2,4,0,4,2,10,1,2,2,4,0,7,2,4,1,3,2,1,1,3,2,3,0,3,2,1,1,1,2,16,0,1,2,2,0,15,2,3],[0,2,1,3,2,4,0,4,2,5,0,13,2,7,1,23,2,1,0,15,2,2,0,4,2,10,1,3,2,1,0,8,2,5,1,4,2,2,1,1,2,3,0,7,2,2,0,3,2,13,0,10,2,6,0,1],[0,3,1,1,2,6,0,3,2,4,0,14,2,8,1,22,2,1,0,15,2,2,0,4,2,9,1,5,0,8,2,5,1,7,2,3,0,7,2,2,0,8,2,9,0,9,2,6,0,1],[2,17,0,19,2,3,1,22,2,1,0,15,2,2,0,4,2,7,1,7,0,8,2,4,1,9,2,2,0,18,2,2,0,1,2,4,1,1,0,7,2,6,0,3],[1,2,2,15,0,20,2,2,1,23,2,2,0,12,2,6,0,1,2,7,1,7,0,8,2,1,1,11,0,24,1,7,0,5,2,6,0,3],[2,17,0,21,2,1,1,22,2,5,0,10,1,1,2,13,1,7,0,8,1,12,0,26,1,5,2,7,0,7],[2,17,0,21,2,1,1,22,2,5,0,12,2,12,1,8,0,6,1,13,0,26,1,6,2,6,0,7],[2,10,1,1,2,6,1,2,0,14,2,2,0,3,2,1,1,22,2,4,0,13,2,10,1,11,0,5,1,11,0,8,1,2,0,20,1,5,2,4,0,8],[2,8,1,7,2,2,1,2,0,14,2,2,0,3,1,23,2,4,0,11,2,5,0,4,2,2,1,13,0,4,1,11,0,8,1,2,0,20,1,5,2,4,0,8],[2,8,1,5,0,20,1,2,0,3,1,23,2,3,0,12,2,5,0,4,1,15,0,4,1,10,0,9,1,2,0,10,1,4,0,9,1,6,0,8],[2,9,1,4,0,20,1,2,0,3,1,23,2,1,0,15,2,4,0,4,1,15,0,5,1,9,0,6,1,5,0,10,1,5,0,22],[2,9,3,4,0,20,1,2,0,3,1,22,2,2,0,3,2,2,0,9,2,5,0,4,1,15,0,3,1,11,0,5,1,8,0,8,1,8,0,19],[2,13,0,20,1,27,2,2,0,13,2,6,0,4,1,15,0,3,1,10,0,3,1,12,0,7,1,8,0,19],[0,4,2,9,0,6,2,2,0,12,1,28,2,1,0,3,2,2,1,2,2,8,0,4,2,2,1,30,0,3,1,13,0,6,1,10,0,17],[0,5,2,11,0,3,2,2,0,12,1,30,2,4,1,3,2,7,0,4,2,2,1,30,0,3,1,29,0,17],[0,6,2,17,0,11,1,29,2,4,1,3,2,2,1,2,2,3,0,4,2,1,1,63,0,4,1,2,0,11],[0,9,2,15,0,10,1,29,2,4,1,3,2,2,1,2,2,4,0,3,1,22,2,4,1,38,0,1,1,5,2,1,0,10],[0,10,2,17,0,7,1,29,2,1,0,2,2,1,1,3,2,10,1,22,2,5,1,2,2,6,1,4,2,2,1,31,2,1,0,9],[0,11,2,17,0,6,1,29,0,3,2,1,1,3,2,4,1,29,2,4,1,1,2,7,1,4,2,3,1,31,0,9],[0,19,2,12,0,3,2,1,1,27,0,4,2,1,1,2,2,2,0,9,1,23,2,4,1,1,2,7,1,5,2,1,1,28,2,1,1,3,0,9],[0,19,2,17,1,26,0,5,2,4,0,9,1,20,2,18,1,15,2,6,1,9,2,2,1,6,0,6],[0,21,2,18,1,23,0,7,2,1,1,1,0,9,1,19,2,20,1,1,2,2,1,1,2,3,1,5,2,13,1,3,2,4,1,4,2,1,0,5,2,1],[0,21,2,18,1,24,2,1,0,4,2,2,1,1,0,7,1,21,2,18,1,3,2,32,1,4,0,5,2,1],[0,21,2,19,1,22,2,2,0,4,2,2,1,3,0,4,1,22,2,18,1,1,2,1,1,1,2,36,0,6],[0,21,2,20,1,20,2,2,0,1,2,6,1,3,0,1,1,24,2,19,1,1,2,37,0,7],[0,25,2,16,1,19,2,10,1,28,2,2,1,2,2,14,1,2,2,36,0,8],[0,25,2,2,0,4,2,8,1,1,2,2,1,15,2,13,1,28,2,19,1,1,2,33,0,11],[0,32,2,10,1,14,2,15,1,1,2,1,1,1,2,1,1,1,2,11,1,11,2,53,0,11],[0,33,2,10,1,14,2,1,1,2,2,28,1,10,2,53,0,11],[0,33,2,10,1,14,2,31,1,10,2,1,0,4,2,48,0,11],[0,33,2,10,1,14,2,29,1,12,2,1,0,4,2,48,0,11],[0,11,2,8,0,18,2,2,1,17,2,30,1,13,0,10,2,5,0,2,2,13,3,1,2,20,0,12],[0,11,2,8,0,18,1,20,2,29,1,13,0,9,2,6,0,3,2,5,0,3,2,3,3,3,2,10,0,21],[0,7,2,16,0,14,1,23,2,26,1,13,0,9,2,6,0,4,2,4,0,40],[0,7,2,16,0,14,2,2,1,22,2,24,1,15,0,4,2,2,0,3,2,4,0,49],[0,5,2,6,1,1,0,3,1,2,2,10,0,11,2,1,1,24,2,21,1,16,0,3,1,1,2,9,0,49],[0,4,2,7,0,4,1,1,2,11,0,14,1,20,0,3,2,3,0,6,2,3,0,2,2,4,1,17,0,3,1,3,0,1,2,7,0,49],[0,3,2,7,0,5,2,10,0,16,1,20,0,3,1,1,2,1,0,7,2,3,0,2,2,4,1,21,2,10,0,48,2,1],[2,2,0,1,2,7,0,5,2,10,0,13,1,2,0,1,1,20,0,12,2,1,1,2,0,2,2,6,1,18,2,11,0,48,1,1],[2,2,0,1,2,7,0,5,2,7,0,16,1,23,0,12,2,12,1,18,2,10,0,6,2,2,0,32,2,4,0,5],[0,3,1,1,2,5,0,6,2,6,0,17,1,25,2,1,0,8,2,13,1,18,2,8,0,8,2,2,0,32,2,2,1,2,0,5],[0,3,1,2,2,4,0,6,2,6,0,17,1,24,2,2,0,8,2,14,1,17,0,4,2,4,0,6,2,4,0,20,2,4,0,4,2,6,1,1,2,1,0,5],[0,2,2,1,1,2,2,4,0,5,2,10,0,15,1,22,2,6,0,3,2,16,1,17,0,4,2,4,0,6,2,4,0,20,2,4,0,4,2,8,0,5],[0,2,2,5,0,7,2,11,0,13,1,22,2,2,1,2,2,22,1,15,0,6,2,4,1,1,0,7,2,2,0,10,2,26,0,5],[0,5,2,3,0,6,2,11,0,13,1,21,2,27,1,16,0,5,2,3,1,2,0,7,2,2,0,10,2,26,0,5],[0,5,2,3,0,5,1,4,2,10,0,11,2,1,1,19,2,16,1,3,2,9,1,16,0,5,2,3,1,2,0,21,2,22,0,7],[0,5,2,3,0,5,1,6,2,8,0,10,2,2,1,17,2,18,1,4,2,9,1,14,0,6,2,4,0,22,2,23,0,6],[0,5,2,8,1,6,0,1,2,2,0,3,2,2,0,6,2,6,1,16,2,11,0,2,2,7,1,2,2,10,1,14,0,4,2,6,0,23,2,22,0,6],[0,5,2,8,1,6,0,6,2,2,0,6,2,6,1,16,2,10,0,6,2,16,1,14,0,4,2,8,0,22,2,5,3,1,2,15,0,6],[0,6,2,8,1,5,0,6,2,2,0,6,2,6,1,16,2,9,0,9,2,5,0,3,2,5,1,15,0,4,2,8,0,22,2,7,3,1,2,14,0,5],[0,8,2,7,1,5,0,5,2,2,0,6,2,6,1,16,2,9,0,9,2,1,1,3,0,4,2,5,1,7,2,2,1,6,0,3,2,9,0,9,2,2,0,11,2,6,3,3,2,14,0,4],[0,8,2,7,1,5,2,7,0,12,2,1,1,14,2,13,0,6,3,1,1,3,0,4,2,5,1,2,2,1,1,4,2,3,1,6,2,8,0,12,2,5,0,8,2,6,0,4,2,13,0,4],[0,8,2,9,1,3,2,7,0,12,2,1,1,14,2,13,0,5,3,1,1,5,0,3,2,10,1,2,2,4,1,5,2,1,1,1,2,7,0,11,2,6,0,7,2,6,0,4,2,11,0,6],[0,8,2,19,0,13,2,1,1,13,2,8,0,10,1,6,0,5,2,10,1,1,2,3,1,5,2,7,0,12,2,1,1,3,2,3,1,1,0,6,2,6,0,8,2,7,0,6],[0,4,2,26,0,10,2,3,1,11,2,7,0,12,1,5,0,5,2,11,1,1,2,3,1,3,2,8,0,12,1,5,2,2,1,1,0,6,1,1,2,5,0,8,2,7,0,6],[0,3,2,27,0,10,2,3,1,12,2,4,0,14,1,5,0,5,2,12,1,1,2,1,1,4,2,4,0,16,1,6,2,2,0,6,1,1,2,3,0,11,2,7,0,5],[2,3,1,4,2,23,0,10,2,2,1,11,2,1,1,4,2,1,0,14,1,5,0,5,2,11,1,8,2,3,0,16,1,7,2,2,0,5,1,1,2,3,0,12,2,6,0,5],[3,3,1,3,0,5,2,6,0,1,2,15,0,7,2,2,1,10,2,3,1,1,0,17,1,4,2,2,0,4,2,11,1,8,2,2,0,9,2,3,1,14,0,21,2,11],[0,2,1,4,0,5,2,6,0,6,2,10,0,7,2,3,1,9,2,3,1,1,0,17,1,4,2,2,0,4,2,11,1,8,2,1,0,10,1,17,0,21,2,11],[0,2,1,4,0,5,2,6,0,9,2,9,0,5,2,3,1,9,2,3,1,1,0,11,1,9,2,3,0,4,2,10,1,7,2,1,0,12,3,1,1,16,0,25,2,7],[0,4,1,2,0,5,2,6,0,10,2,9,0,5,2,1,1,10,2,4,0,11,1,8,2,4,0,4,2,9,1,9,0,12,1,16,2,3,0,23,2,7],[0,4,1,2,0,5,2,4,0,14,2,7,0,7,1,10,2,3,0,9,1,9,2,3,0,6,2,6,1,12,0,10,1,17,2,4,0,25,2,3,1,2],[0,11,2,4,0,14,2,7,0,7,1,10,2,2,0,1,2,2,0,2,2,1,1,3,0,1,1,9,2,3,0,6,2,3,1,1,2,1,1,13,0,10,1,16,2,2,1,1,2,1,0,11,2,4,0,10,1,1,2,3,0,2],[0,11,3,1,2,3,0,14,2,8,0,6,1,10,2,5,0,2,1,14,2,3,0,6,2,3,1,16,2,2,1,2,2,6,1,15,2,1,1,3,0,10,2,6,0,9,1,1,2,3,0,2],[0,11,3,2,2,2,0,14,2,8,0,6,1,10,2,5,0,3,1,12,2,4,0,6,2,3,1,16,2,12,3,1,1,11,2,2,1,3,0,9,2,7,0,5,1,4,2,3,0,3],[0,9,3,3,2,5,0,14,2,6,0,6,1,10,2,8,1,13,2,3,0,4,2,5,1,17,2,11,3,1,1,10,2,4,1,1,2,1,0,6,2,10,0,5,1,1,2,6,0,3],[0,9,3,3,2,5,0,14,2,6,0,6,1,10,2,9,1,15,0,4,2,5,1,17,2,13,1,9,2,6,0,6,2,13,0,2,2,7,0,3],[0,7,3,6,0,18,2,6,0,6,1,10,2,8,3,1,1,8,2,3,0,1,1,2,0,5,2,5,1,15,0,6,2,12,1,5,2,9,0,4,2,22,0,3],[0,7,3,6,0,13,2,2,0,3,2,6,0,6,1,10,2,8,3,1,1,6,2,6,0,7,2,5,1,15,0,6,2,13,1,3,2,10,0,4,2,22,0,3],[0,7,3,1,0,18,2,2,0,1,2,8,0,6,1,10,2,4,0,4,3,2,1,2,3,4,2,5,0,7,2,5,1,15,0,10,2,9,1,3,2,9,0,9,2,16,0,5],[0,3,2,1,1,2,3,7,2,1,0,14,2,9,0,5,1,15,0,4,3,8,2,17,1,15,0,10,2,20,0,10,2,16,0,5],[0,3,2,1,0,9,2,1,0,14,1,1,2,12,1,16,0,4,2,1,3,7,2,17,1,15,0,12,2,7,0,4,2,7,0,10,2,14,0,7],[0,3,1,1,0,9,2,1,0,14,1,1,2,12,1,16,0,4,2,1,3,1,1,3,3,2,2,18,1,15,0,11,2,7,0,6,2,6,0,10,2,14,0,7],[0,3,1,1,0,9,2,1,0,14,2,13,1,16,0,4,2,1,3,1,0,7,2,3,3,1,2,12,1,14,0,12,2,6,0,7,2,10,0,6,2,4,0,17],[0,3,1,1,0,9,2,1,0,14,2,13,1,19,0,1,1,2,0,10,2,13,1,13,0,26,2,6,1,2,2,2,0,5,2,5,0,17],[0,3,1,1,0,9,2,1,0,13,2,10,0,1,2,3,1,22,0,11,2,12,1,13,0,26,2,4,0,4,3,2,0,5,2,5,0,17],[0,3,1,1,0,9,2,1,0,13,2,10,0,5,1,21,0,12,2,11,1,14,0,25,2,3,3,1,0,4,3,2,0,6,2,4,0,17],[0,3,1,1,0,9,2,1,0,1,2,2,0,10,2,7,0,8,1,19,3,2,0,12,2,11,1,14,0,23,2,6,0,13,2,3,0,17],[0,3,1,1,0,9,2,1,0,1,2,2,0,10,2,6,0,9,1,19,3,2,0,12,3,3,2,8,1,17,2,1,0,19,2,6,0,14,2,2,0,17],[0,3,1,1,0,9,3,1,0,1,2,2,0,8,2,4,0,1,2,2,0,9,1,20,0,14,3,3,2,8,1,17,2,1,0,19,2,4,0,16,2,2,0,10,2,6,0,1],[0,3,1,7,3,4,0,1,2,2,0,7,2,5,0,12,1,19,3,1,0,14,3,3,2,8,1,17,0,20,2,4,0,16,2,5,0,7,2,6,0,1],[0,15,2,2,0,7,2,5,0,10,2,2,1,19,3,1,0,14,3,3,2,8,1,16,0,19,2,6,0,16,2,5,0,7,2,4,0,3],[0,9,1,3,3,2,2,3,0,8,2,4,0,10,2,2,1,19,2,1,0,14,3,2,2,9,1,15,0,15,2,2,0,3,2,6,0,15,2,5,0,8,2,4,0,3],[0,9,1,5,2,3,0,8,2,4,0,8,2,5,1,17,2,2,0,14,1,1,2,10,1,15,0,8,2,2,0,5,2,2,0,1,2,12,0,8,2,8,0,8,2,4,0,3],[0,8,1,6,3,1,2,2,0,8,2,5,0,7,2,5,1,17,2,2,0,14,2,11,1,15,0,5,2,5,0,7,2,12,1,1,0,8,2,8,0,8,2,4,0,3],[0,1,1,2,0,4,1,7,3,1,2,4,0,6,2,5,0,7,2,6,1,17,2,2,0,13,2,11,1,18,2,7,0,7,2,6,0,1,2,4,1,3,0,1,1,2,2,4,1,1,2,6,0,5,2,10,0,1],[0,1,1,2,0,4,3,1,1,6,3,1,2,3,3,1,0,6,2,5,0,7,2,8,1,16,2,3,0,11,2,11,1,7,2,2,1,10,2,7,0,7,2,2,0,3,2,5,1,6,2,3,1,3,2,5,0,5,2,2,0,2,2,6,0,1],[0,1,1,2,0,4,3,2,0,6,2,3,3,1,0,6,2,5,0,11,2,5,1,15,2,3,1,1,0,6,2,4,1,6,2,4,1,7,2,3,1,11,2,6,0,12,2,8,1,4,2,3,1,2,2,5,0,3,2,1,0,2,2,1,0,2,2,7],[0,1,1,2,0,3,3,3,0,6,1,1,2,3,0,6,2,5,0,11,2,5,1,16,2,1,1,2,0,6,2,2,1,19,2,3,1,11,2,6,0,10,2,10,1,5,2,13,0,2,2,10],[0,6,3,3,0,6,1,2,2,2,0,4,2,7,0,11,2,4,1,18,2,2,0,4,2,3,1,20,2,4,1,10,2,7,0,9,2,8,1,7,2,25],[0,6,3,2,2,1,0,6,1,2,3,1,2,1,0,4,2,6,0,12,2,4,1,18,2,3,0,3,2,2,1,23,2,3,1,9,2,6,0,10,2,8,1,8,2,22,0,1,2,1],[0,5,3,2,2,2,0,6,1,3,2,9,0,12,2,5,1,18,2,4,0,3,2,1,1,25,2,3,1,4,2,1,0,3,2,6,0,10,2,14,1,3,2,8,1,1,2,9,0,4,2,1],[0,5,3,1,2,3,0,6,1,3,2,9,0,12,2,5,1,17,2,7,0,1,2,1,1,26,2,2,1,5,0,3,2,4,1,2,2,6,0,2,1,2,2,16,1,1,2,18,0,4,2,1],[0,7,2,6,1,5,2,7,0,14,2,4,1,18,2,9,1,32,0,4,2,12,0,2,2,12,0,5,2,1,0,2,2,8,1,2,0,1,2,6,0,5],[0,7,2,6,1,3,3,2,2,7,0,14,2,5,1,16,2,10,1,12,2,3,1,16,0,5,2,12,0,5,2,9,0,5,2,1,0,2,2,8,1,4,2,5,0,5],[0,7,2,5,1,1,0,4,3,2,2,4,0,18,2,3,1,14,2,6,0,3,2,4,1,8,2,6,1,15,0,6,2,12,0,5,2,9,0,5,2,9,1,7,2,6,0,3],[0,7,2,6,0,4,2,6,0,18,2,3,1,13,2,6,0,4,2,5,1,5,2,9,1,13,0,7,2,7,0,10,2,9,0,5,2,7,1,2,0,3,2,1,1,4,2,5,0,3],[0,41,2,3,1,12,2,7,0,6,2,4,1,3,2,11,1,12,0,7,2,4,0,2,2,1,0,15,2,6,0,2,2,8,1,2,0,3,2,1,1,5,2,4,3,2,0,1],[0,41,2,1,1,15,2,6,0,5,2,7,1,1,2,11,1,12,0,7,2,4,0,2,2,1,0,16,2,16,1,1,0,3,2,1,1,6,2,3,3,2,0,1],[0,37,2,4,1,18,2,2,0,7,2,3,0,6,2,10,1,12,2,12,0,21,2,15,0,4,1,5,2,3,3,2,0,1],[0,37,2,4,1,18,2,2,0,8,2,2,0,6,2,8,1,16,2,10,0,22,2,5,0,2,2,7,0,4,1,2,3,3,2,2,0,1,2,2,0,1],[0,27,2,2,0,8,2,3,1,20,2,1,0,8,2,2,0,6,2,7,1,18,2,1,0,2,2,4,0,25,2,4,0,2,2,7,0,4,1,2,2,9],[0,27,2,2,0,8,2,2,1,21,2,2,0,2,1,1,2,1,0,2,2,3,0,6,2,5,1,18,2,3,0,2,2,4,0,25,2,3,0,3,2,7,0,4,2,2,0,3,2,6],[0,27,2,2,0,8,2,1,1,22,2,3,1,2,2,8,0,4,2,6,1,17,0,7,2,2,0,10,2,4,0,10,2,4,0,3,2,2,0,11,2,1,0,2,2,6],[0,26,2,3,0,7,2,1,1,24,2,2,1,2,2,8,0,4,2,6,1,16,0,8,2,2,0,10,2,4,0,10,2,4,0,16,2,9],[0,26,2,4,1,1,0,4,2,1,1,24,2,13,0,4,2,6,1,16,0,8,2,2,0,10,2,4,0,12,2,2,0,18,2,2,0,4,2,1],[0,26,2,4,1,1,2,3,1,2,2,4,1,19,2,24,1,16,0,8,2,2,0,10,3,2,2,2,0,12,2,2,0,18,2,2,0,4,2,1],[0,26,2,2,0,2,2,1,1,5,2,5,1,17,2,9,0,4,2,13,1,17,0,6,2,4,0,6,1,2,0,16,2,2,0,25],[0,30,1,7,2,4,1,14,2,12,0,4,2,12,1,18,0,6,2,4,0,6,1,2,0,15,2,4,0,6,2,2,0,16],[0,30,1,7,2,1,1,1,2,4,1,11,2,9,0,8,2,2,0,1,2,9,1,18,0,6,2,4,0,23,2,5,0,4,2,3,0,16],[0,31,1,6,2,6,1,11,2,9,0,7,2,3,0,6,2,4,1,1,2,1,1,16,0,6,2,4,0,21,2,7,0,4,2,2,0,17],[0,29,2,1,1,7,2,6,1,11,2,2,1,2,2,4,0,8,2,3,0,8,2,5,1,16,2,1,0,4,2,6,0,19,2,7,0,16,2,2,0,5],[0,29,2,1,1,7,2,3,1,1,2,1,1,12,2,2,1,2,2,5,0,5,2,2,0,1,2,2,0,8,2,5,1,16,2,1,0,4,2,7,0,18,2,7,0,16,2,2,0,5],[0,29,2,2,1,7,2,1,1,15,2,8,0,1,2,4,1,6,2,2,0,6,2,5,1,16,2,15,0,15,2,7,0,16,2,2,0,5],[0,29,2,2,1,24,2,4,0,3,2,3,1,10,0,6,2,5,1,16,2,14,0,12,2,2,0,4,2,5,0,16,2,2,0,5],[0,29,2,2,1,24,2,4,0,3,2,2,1,12,2,1,0,4,2,5,1,16,2,5,0,18,2,5,0,4,2,2,0,1,2,4,0,10,2,10,0,1],[0,29,2,2,1,25,2,3,0,4,2,1,1,13,2,1,0,3,2,5,1,16,2,5,0,18,2,5,0,7,2,4,0,9,2,11,0,1],[0,27,2,5,1,24,2,3,0,4,2,1,1,13,2,8,1,16,2,5,1,1,0,18,2,6,0,8,2,2,0,9,2,12],[0,27,2,6,1,24,2,2,0,4,2,1,1,13,2,8,1,15,2,6,1,1,0,18,2,6,0,8,2,2,0,5,2,16],[0,27,2,6,1,23,2,2,1,1,0,4,2,1,1,13,0,1,2,6,1,15,2,7,1,2,2,1,0,16,2,6,0,8,2,2,0,4,2,7,0,9,2,1],[0,27,1,1,2,6,1,22,2,2,1,2,2,3,1,14,0,3,2,4,1,14,2,11,0,15,2,7,0,8,2,2,0,4,2,6,0,10,2,1],[0,27,1,1,2,6,1,22,2,2,1,2,2,3,1,14,0,3,2,3,1,15,2,8,0,1,2,8,0,9,2,7,0,8,2,9,0,13,2,1],[0,26,1,2,2,8,1,23,2,5,1,13,0,3,2,3,1,15,2,4,0,5,2,9,0,6,2,9,0,8,2,8,0,14,2,1],[0,21,2,2,1,4,2,4,0,7,1,20,2,2,0,11,1,6,0,3,2,3,1,16,2,3,0,7,2,7,0,6,2,8,1,1,0,10,2,5,0,9,2,7],[0,21,2,1,1,5,2,5,0,6,1,20,2,2,0,3,2,1,3,1,0,10,1,1,2,1,0,3,2,3,1,18,0,8,2,7,0,7,2,8,0,10,2,4,0,10,2,7],[0,21,1,6,2,5,0,6,1,19,2,3,0,17,2,5,1,10,2,1,1,8,2,4,0,5,2,7,0,6,2,12,0,16,2,11],[0,21,1,6,2,5,0,6,1,18,2,3,0,17,2,6,1,9,2,3,1,5,2,5,1,1,0,8,2,4,0,6,2,13,0,15,2,11],[0,23,1,5,2,4,0,5,2,1,1,18,2,3,0,17,2,6,1,8,2,5,1,4,2,6,0,9,2,13,0,6,2,4,0,12,2,7,0,6],[0,23,1,6,2,3,0,5,2,2,1,16,2,4,0,18,2,5,1,7,2,7,1,4,2,6,0,9,2,12,0,6,2,4,0,12,2,5,0,8],[0,23,1,6,2,10,1,16,2,4,0,18,2,4,1,8,2,9,1,2,2,3,1,3,0,9,2,10,0,8,2,6,0,8,2,7,0,8],[0,23,1,11,2,5,1,17,2,4,0,17,2,4,1,8,2,8,0,17,2,6,1,1,2,4,0,8,2,6,0,7,2,5,0,11],[0,25,1,10,2,3,1,18,2,4,0,17,2,4,1,11,2,1,0,21,2,4,0,16,2,5,0,4,2,8,0,11],[0,25,1,32,2,3,0,14,2,7,1,9,2,3,0,42,2,5,0,3,2,8,0,11],[0,25,1,4,0,3,1,25,2,5,0,2,2,17,1,8,2,4,0,45,2,9,0,15],[0,25,1,4,0,4,1,25,2,4,0,2,2,17,1,8,2,4,0,11,2,2,0,33,2,8,0,15],[0,2,2,11,0,12,1,2,0,7,1,25,2,3,1,2,2,9,1,1,2,7,1,8,2,4,0,11,2,2,0,34,2,7,0,10,2,5],[0,2,2,1,0,9,2,1,0,11,1,3,0,9,1,24,2,10,1,6,2,5,1,9,2,6,0,6,2,4,0,16,2,2,0,17,2,6,0,10,2,4,0,1],[0,2,2,1,0,9,2,1,0,11,1,1,3,2,0,9,2,1,1,23,2,9,1,7,2,5,1,10,2,6,0,4,2,6,0,15,2,2,0,38],[0,2,2,1,0,9,2,1,0,11,3,3,2,1,0,6,2,1,1,1,2,1,1,24,2,8,1,7,2,4,1,12,2,5,0,4,2,6,0,55],[0,2,2,1,0,9,2,1,0,10,1,1,2,10,1,2,2,2,1,27,2,4,1,2,2,4,1,1,2,4,1,13,2,2,0,6,2,8,0,18,2,4,0,24,2,1,0,6],[0,2,2,1,0,9,2,1,0,10,2,15,1,33,2,3,1,20,2,1,0,6,2,8,1,1,0,14,2,2,0,1,2,7,0,21,2,1,0,6],[0,2,2,1,0,9,2,1,0,1,2,1,0,6,2,17,1,56,2,1,0,6,2,6,1,3,0,13,2,12,0,20,2,1,0,5,1,1],[0,2,2,1,0,9,2,1,0,1,2,1,0,6,2,16,1,57,2,1,0,6,2,6,1,2,2,1,0,8,2,2,0,3,2,12,0,20,2,1,0,5,1,1],[0,2,2,1,0,9,2,1,0,1,2,1,0,6,2,12,1,60,2,17,0,7,2,20,0,14,2,5,0,6],[0,2,2,1,0,9,2,1,0,1,2,1,0,6,2,9,1,63,2,17,0,6,2,22,0,13,2,5,0,6],[0,2,2,1,1,3,3,3,2,4,0,8,2,9,1,64,2,16,0,5,2,16,1,1,2,6,0,13,2,5,0,6],[0,7,1,1,0,12,2,10,1,18,2,5,1,42,2,2,1,1,2,4,0,3,2,5,0,5,2,16,1,1,2,10,0,9,2,6,0,5],[0,7,1,1,2,4,0,8,2,9,1,11,0,2,1,6,2,5,1,46,2,3,0,4,2,6,1,2,2,10,1,2,2,4,0,5,2,4,1,4,0,6,2,8,0,5],[0,7,1,1,2,5,0,7,2,9,1,11,0,3,1,5,2,5,1,2,2,4,1,41,0,7,2,3,1,4,2,15,0,6,2,5,1,4,0,5,1,1,2,5,0,7],[0,7,1,1,2,5,0,4,2,11,1,12,0,3,1,1,2,2,1,2,2,5,1,2,2,5,1,40,0,8,2,2,1,3,2,6,0,3,2,5,0,10,2,7,0,5,1,1,2,4,0,8],[0,7,2,2,0,1,2,3,0,4,2,2,1,2,2,6,1,10,2,1,1,1,0,4,1,1,2,2,1,2,2,12,1,40,0,8,2,2,1,1,2,8,0,3,2,5,0,9,2,10,0,2,1,1,2,4,0,9],[3,1,1,2,0,6,2,10,1,3,2,5,1,8,2,3,0,9,2,15,1,38,0,8,2,4,0,3,2,4,0,3,2,5,0,9,2,11,1,3,2,3,0,9],[3,2,1,2,2,15,1,4,2,4,1,7,2,2,0,11,2,17,1,36,0,8,2,4,0,3,1,1,2,3,0,5,2,3,0,12,2,8,1,4,2,2,0,9],[2,19,1,6,2,3,1,5,2,3,0,11,2,18,1,32,0,1,1,2,0,7,2,5,0,3,1,2,0,7,2,7,0,8,2,8,1,4,0,11],[2,1,0,5,2,13,1,7,2,1,1,4,0,16,2,19,1,29,2,2,0,9,2,6,0,3,1,2,0,8,2,6,0,8,2,8,1,4,0,11],[2,1,0,5,2,8,0,4,2,1,1,3,0,2,1,6,0,28,2,16,1,6,0,7,1,4,0,15,2,6,0,15,2,6,0,29],[2,1,0,24,1,1,2,3,0,34,2,14,1,2,0,8,1,4,0,15,2,6,0,15,2,6,0,29],[0,25,2,2,0,36,2,15,1,1,0,27,2,6,0,15,2,6,0,29],[0,25,2,2,0,36,2,16,0,28,2,5,0,15,2,6,0,29],[0,63,2,16,0,28,2,6,0,14,2,8,0,27],[0,63,2,16,0,28,2,6,0,14,2,8,0,27],[0,63,2,16,0,29,2,9,0,8,2,4,0,33],[0,63,2,16,0,30,2,13,0,3,2,4,0,33],[0,63,2,20,0,29,2,17,0,33],[0,63,2,20,0,30,2,16,0,33],[0,55,3,1,2,29,0,29,2,6,0,42],[0,55,3,1,2,29,0,33,2,2,0,42],[0,55,3,1,2,29,0,33,2,1,1,1,0,42],[0,55,2,30,0,77],[0,59,2,8,0,4,2,1,0,90],[0,59,2,8,0,95],[0,61,2,6,0,95],[0,61,2,6,0,95],[0,61,2,6,0,95],[0,61,2,6,0,95],[0,61,2,6,0,95],[0,61,2,1,1,2,2,3,0,95],[0,63,3,2,0,97]]} +{"_comment":"Static land/water mask. SAILABLE WATER = the map's own PATHING MAP (data/extracted/war3map.wpm, bit 0x40 = no-water, 4x4 32u subcells per 128u tile, majority vote): the engine's truth for where ships could actually sail in the original. This REPLACES the minimap NON-BLUE colour key (~0.66 water), which over-watered: green 'shallow' paint is often visually-wet-but-UNSAILABLE, merging lanes the real map separates (owner-reported 2026-07-08: the NE lane must NOT merge into the east-edge lane; the wpm separates them). The wpm reads ~0.55 sailable over the playable crop and all 26 known anchors (HQs, harbours, spawns, lane waypoints) sit sailable. The ONLY additions on top of the raw wpm grid are MINIMAL 1-cell connectivity necks (so every shop + dock/spawn reaches the sea and the two bases stay water-connected) PLUS the two owner-approved WEST sail-around island moats (Swedish Lumber Mill, Goblin Potion Dealer: land core + thin 1-cell navigable ring + EXACTLY ONE entrance; deterministic post-step). water=true is ship-navigable. The OPTIONAL `depth` field (0=land,1=deep,2=shallow,3=pink) is additive render metadata the SIM IGNORES; the minimap colours band each FINAL water cell so a client paints the water shades like the original. Regenerate with: make terrain (tools/extractor/terrain.py; pure stdlib, reads wpm+w3e+PNG, no venv). yOrientation 'top-down' means rle row 0 is the NORTH (max-Y) edge.","source":"data/extracted/war3map.wpm (pathing map, bit 0x40=no-water; THE sailability authority) + data/extracted/war3map.w3e (grid geometry) + data/reference/war3mapMap.png (depth render metadata only)","target":"the original map's enforced ship-pathing (wpm no-water), cropped to the playable rectangle","rule":"water = wpm NOT-no-water majority over the 16 32u subcells per 128u tile, MINUS singleton speckle, PLUS minimal 1-cell connectivity necks (Dijkstra cost 1 water / 30 land) for shops, docks/spawns and base-to-base, PLUS the two carved WEST sail-around island moats (compact land core + thin 1-cell water ring + exactly one entrance) around the Swedish Lumber Mill and Goblin Potion Dealer shops. depth sub-classifies FINAL water cells from the minimap colours for RENDER only: DEEP (R-B>35 AND R>=G), PINK (R>150 AND B>120 AND R-G>15), else SHALLOW; a water cell whose pixels read land-blue falls back to SHALLOW.","playableBounds":{"minX":-5632.0,"minY":-7680.0,"maxX":5504.0,"maxY":7168.0},"bounds":{"minX":-5696.0,"minY":-7744.0,"maxX":5568.0,"maxY":7232.0},"cols":176,"rows":234,"cellSizeX":64.0,"cellSizeY":64.0,"yOrientation":"top-down","yOrientationNote":"rle row 0 = max-Y (north); last row = min-Y (south). col 0 = min-X (west). col=floor((x-minX)/cellSizeX), row=floor((maxY-y)/cellSizeY). The minimap is north-up; tiles are sampled at their world centers via the content-box registration, emit row 0 = north, matching sim isWater.","rleFormat":"water[r] = [leadingValue, run0, run1, ...]; runs alternate from leadingValue (0=land,1=water) and sum to cols.","depthRleFormat":"OPTIONAL render metadata, the sim IGNORES it. depth[r] = [value0, run0, value1, run1, ...] (explicit value per run; values 0=land, 1=deep, 2=shallow, 3=pink; runs sum to cols). depth[r][col]>0 IFF water[r][col]==1 (exactly consistent with the authoritative `water` mask). Carved necks/moats with no minimap colour emit as shallow (2).","waterFraction":0.462995,"validation":{"hqsOnWater":"2/2","harboursOnWater":"4/4","playerSpawnsOnWater":"12/12","lanes":["south-west: spawnWater=True connToEnemyHQ=True","south-east: spawnWater=True connToEnemyHQ=True","north-west: spawnWater=True connToEnemyHQ=True","north-east: spawnWater=True connToEnemyHQ=True"],"basesConnected":true,"shopsReachable":"16/16","shopReach":["Swedish Lumber Mill: reachable=True nearestSeaCells=1","Goblin Potion Dealer: reachable=True nearestSeaCells=1","Elven Library: reachable=True nearestSeaCells=0","Ship Wreck: reachable=True nearestSeaCells=0","Elven Library: reachable=True nearestSeaCells=4","Ale Brewery: reachable=True nearestSeaCells=2","Equipment Merchant: reachable=True nearestSeaCells=3","Heavy Weapons Merchant: reachable=True nearestSeaCells=2","Weapons Merchant: reachable=True nearestSeaCells=4","Equipment Merchant: reachable=True nearestSeaCells=2","Bill (Trade Master): reachable=True nearestSeaCells=3","Pirate Boat Merchant: reachable=True nearestSeaCells=0","Will (Trade Master): reachable=True nearestSeaCells=4","Weapons Merchant: reachable=True nearestSeaCells=2","Heavy Weapons Merchant: reachable=True nearestSeaCells=3","Goblin Bomb Shop: reachable=True nearestSeaCells=0"],"repairRegionsReachable":"2/2","repairRegionReach":["Repair_Station_South: reachable=True","Repair_Station_North: reachable=True"],"waterFraction":0.463,"eastThirdWaterRun":"median=6.0 mean=8.24 count=551","bottomRightWaterRun":"median=5.0 mean=6.32 count=161","rawWpmWaterFraction":0.4633,"necks":{"basePlatformCellsAdded":1,"connectivityNeckCellsAdded":0,"shopNeckCellsAdded":4,"repairRegionNeckCellsAdded":0,"waterFractionBefore":0.4633,"waterFractionAfter":0.4634,"shopsReachable":"16/16","repairRegionsReachable":"2/2","singletonCellsDropped":0,"straddledChannelCellsRestored":0,"ownerLaneGates":[{"gate":"north-most lane: east leg (owner's arrow)","row":26,"blocked":2,"widthUnits":128}],"westIslandLoops":{"Swedish Lumber Mill":{"shopCell":[16,127],"anchor":[12,127],"shopInCore":true,"shopInRing":false,"shopOnLand":true,"cycleLen":40,"entranceCells":[[11,121]],"entrances":1,"cellsChanged":93},"Goblin Potion Dealer":{"shopCell":[11,196],"anchor":[7,196],"shopInCore":true,"shopInRing":false,"shopOnLand":true,"cycleLen":40,"entranceCells":[[3,202]],"entrances":1,"cellsChanged":48},"waterFractionBefore":0.4634,"waterFractionAfter":0.463,"totalCellsChanged":141}},"laneTopologyVsWpm":{"anchors":22,"pairwiseMismatches":0},"sideRoutes":{"westLumberMillIsland":{"islandLandCells":81,"ringWaterCells":36,"entrances":1},"westGoblinPotionIsland":{"islandLandCells":81,"ringWaterCells":36,"entrances":1},"eastBreweryWrap":{"brewerySeaReachable":true,"farEastNorthWaterCells":152},"bottomRightWinding":{"tanSegments":157,"tanMaxRun":27,"windingNotBlob":false}},"wpmAgreement":0.9964,"wpmConfusion":"agree=0.9964 ours-only(necks/moats)=0.0017 ref-only(denoised)=0.0019","depthSplitLandDeepShallowPink":[0.537,0.2082,0.248,0.0068],"colourKeyAgreement":0.679},"water":[[0,176],[0,176],[0,176],[0,176],[0,176],[0,176],[0,176],[0,75,6,95],[0,75,6,95],[0,61,2,12,6,95],[0,61,2,12,6,95],[0,51,2,7,7,8,6,95],[0,51,2,7,7,8,6,95],[0,51,4,4,22,95],[0,51,4,4,22,95],[0,51,32,54,2,37],[0,51,32,54,2,37],[0,59,30,44,8,35],[0,59,30,44,8,35],[0,61,28,40,14,33],[0,61,28,37,20,30],[0,61,20,45,7,8,5,30],[0,61,20,45,7,8,5,30],[0,61,20,45,5,11,5,29],[0,61,20,45,5,12,5,28],[0,61,18,46,4,15,4,28],[0,61,18,46,4,47],[0,61,18,48,2,16,4,27],[0,61,19,47,2,16,4,27],[0,11,8,28,33,5,12,18,4,8,2,18,2,18,2,7],[0,11,8,28,37,1,13,6,4,6,5,8,2,18,3,17,2,7],[0,11,10,24,54,5,5,5,7,6,4,16,3,11,3,4,1,7],[0,11,10,24,54,5,5,1,2,2,8,5,4,9,4,2,4,11,3,4,1,7],[0,11,11,15,2,4,56,4,30,6,11,7,3,1,5,1,2,7],[0,11,12,9,2,3,2,4,56,3,31,6,2,1,8,7,12,7],[0,13,26,4,56,3,29,8,11,7,10,9],[0,13,26,4,56,3,28,9,13,5,10,9],[0,13,3,2,21,4,88,6,28,11],[0,13,2,1,116,5,18,1,9,11],[0,16,106,5,6,4,6,4,12,1,4,12],[0,15,104,8,6,4,6,4,18,11],[0,17,14,3,79,15,15,5,18,10],[0,17,15,2,74,1,4,16,14,6,16,11],[0,17,15,2,68,29,12,6,13,14],[0,6,2,9,84,30,13,5,5,1,6,15],[0,3,5,9,84,20,2,18,1,1,1,10,6,16],[0,3,4,1,2,2,89,13,2,4,3,18,2,33],[0,3,98,12,14,49],[0,3,30,3,65,12,17,46],[0,7,26,3,65,13,23,39],[0,6,7,4,16,3,66,12,23,31,4,4],[0,6,7,4,16,3,35,8,4,4,16,11,10,3,18,18,9,4],[0,6,7,4,16,4,34,8,4,4,16,7,14,3,18,1,2,15,9,4],[0,6,7,4,5,13,31,15,2,4,14,8,15,7,2,3,13,10,6,1,7,3],[0,7,7,3,4,14,31,15,2,4,14,8,15,7,2,8,9,9,6,4,4,3],[0,3,18,19,26,15,2,4,14,8,15,18,2,1,5,7,6,6,4,3],[0,3,18,20,27,12,6,1,14,8,12,24,7,5,6,6,3,4],[0,3,18,21,28,10,21,8,12,26,12,10,3,4],[0,3,18,21,28,12,20,6,13,26,12,10,2,5],[0,3,20,14,2,3,27,13,21,5,11,8,2,20,9,11,2,5],[0,3,20,14,2,3,27,11,5,4,15,4,11,8,2,20,9,10,3,5],[0,3,14,20,2,3,26,12,5,4,15,4,10,9,2,10,4,9,6,10,3,5],[0,3,14,20,2,3,24,15,4,4,15,5,9,6,5,10,5,25,2,5],[0,3,14,20,2,3,24,3,2,9,5,4,15,3,11,5,8,8,8,22,2,5],[0,3,14,20,29,13,6,4,15,3,10,3,12,7,8,21,3,5],[0,3,1,4,9,6,2,12,29,3,12,4,32,3,13,6,10,18,4,5],[0,9,11,3,2,12,44,4,32,3,29,18,4,5],[0,10,17,11,43,4,64,4,2,12,4,5],[0,13,15,10,44,3,64,1,6,11,4,5],[0,14,17,7,30,2,87,10,2,7],[0,15,17,6,29,3,87,10,2,7],[0,23,12,3,28,4,5,9,73,10,2,7],[0,23,43,5,4,9,76,7,3,6],[0,25,41,7,2,9,76,5,5,6],[0,25,43,4,3,7,78,5,4,7],[0,25,43,4,5,4,79,7,2,7],[0,25,42,1,9,1,81,7,3,7],[0,29,129,8,3,7],[0,29,2,4,120,12,2,7],[0,36,119,12,2,7],[0,37,118,12,2,7],[0,37,66,4,48,12,2,7],[0,37,66,4,48,12,2,7],[0,15,8,18,62,10,5,2,34,13,2,7],[0,15,8,18,62,9,6,3,5,3,16,22,2,7],[0,11,16,14,62,9,6,4,4,41,2,7],[0,11,16,14,63,4,2,3,4,50,2,7],[0,9,7,3,12,11,62,3,10,50,2,7],[0,8,7,4,12,14,20,3,3,6,3,2,21,3,3,1,7,49,3,7],[0,7,7,5,10,16,20,3,2,7,3,2,35,48,6,5],[0,4,2,1,7,5,10,13,2,1,20,12,3,2,35,48,6,5],[0,4,2,1,7,5,7,16,23,12,40,6,2,32,4,8,2,5],[0,7,6,6,6,17,26,8,39,8,2,32,4,8,3,4],[0,7,6,6,6,17,26,8,31,4,4,6,4,20,4,4,8,8,3,4],[0,6,7,5,10,15,28,3,33,4,4,6,4,20,4,4,8,8,2,5],[0,6,5,7,11,13,63,6,5,7,2,10,26,6,4,5],[0,9,3,6,11,13,64,5,5,7,2,10,26,6,4,5],[0,9,3,5,14,11,64,5,5,21,22,8,2,7],[0,9,3,5,14,10,64,6,4,22,23,7,2,7],[0,9,14,1,2,3,2,6,33,2,33,4,6,23,22,7,2,7],[0,9,14,6,2,6,32,6,30,4,8,22,21,7,3,6],[0,10,13,6,2,6,31,9,5,3,20,4,8,22,22,6,3,6],[0,12,12,5,2,6,31,9,4,4,20,3,9,9,2,11,23,5,3,6],[0,12,19,12,28,6,4,4,29,12,5,8,6,4,13,5,4,5],[0,12,19,12,28,5,6,3,30,11,6,7,6,4,11,7,4,5],[0,12,19,13,22,10,6,5,26,12,8,6,6,8,7,7,4,5],[0,8,26,10,21,12,5,5,26,12,8,6,6,8,7,7,5,4],[0,7,27,10,19,14,5,5,22,16,8,6,4,11,7,6,5,4],[0,4,30,10,19,14,5,5,22,16,9,5,4,12,6,6,5,4],[0,4,6,5,6,1,15,7,16,17,6,4,21,9,17,21,17,4],[0,6,4,5,6,6,10,7,16,17,6,4,20,10,17,21,17,4],[0,6,4,5,6,9,9,5,16,11,12,4,18,12,17,25,13,4],[0,8,2,5,6,10,9,5,15,11,12,4,18,12,19,23,7,10],[0,8,2,5,4,14,7,7,13,9,12,6,18,10,21,25,5,10],[0,15,4,14,7,7,12,1,2,2,4,1,12,6,18,10,20,11,4,10,4,12],[0,15,4,14,8,6,15,2,17,6,48,10,6,9,4,12],[0,15,4,14,8,6,15,3,16,6,48,9,7,5,7,13],[0,13,8,14,6,6,34,4,50,6,10,5,7,13],[0,13,8,14,6,6,34,4,50,6,13,2,7,13],[0,11,6,18,6,6,30,1,2,5,20,6,26,4,22,13],[0,11,6,13,2,3,6,6,31,7,20,6,26,4,22,13],[0,11,1,18,2,1,8,6,14,4,13,7,20,10,21,9,16,15],[0,7,11,14,9,5,15,4,40,10,20,10,16,15],[0,7,1,9,1,14,29,4,40,12,7,4,7,10,14,17],[0,7,1,9,1,14,29,4,40,11,7,6,6,10,14,17],[0,7,1,9,1,14,29,4,2,7,30,12,6,7,10,6,4,27],[0,7,1,9,1,14,32,1,2,10,26,26,10,5,5,27],[0,7,1,9,1,13,10,1,25,11,25,26,4,4,2,5,5,27],[0,7,1,9,1,13,10,5,21,12,25,25,4,4,2,6,4,27],[0,7,1,9,1,1,2,10,7,8,21,12,25,23,6,13,3,27],[0,7,1,9,1,1,2,10,6,9,21,12,29,19,6,14,2,27],[0,7,1,9,1,1,2,8,4,1,2,9,20,14,29,19,4,16,2,10,6,11],[0,7,11,1,2,7,5,12,20,14,28,20,4,16,5,7,6,11],[0,19,2,7,5,10,22,14,27,19,6,16,5,7,4,13],[0,13,8,8,4,10,22,14,26,15,2,3,6,15,5,8,4,13],[0,13,8,8,4,8,24,14,26,8,2,5,2,1,12,8,8,8,4,13],[0,12,9,8,5,7,24,14,26,5,5,7,13,8,8,8,4,13],[0,5,2,4,12,6,5,7,25,13,36,7,6,1,7,1,13,5,10,11],[0,5,2,4,12,6,5,7,27,11,37,7,2,3,22,5,2,2,6,11],[0,5,2,4,2,6,4,6,5,11,24,6,41,12,22,3,1,2,1,2,8,9],[0,5,2,3,3,6,4,6,5,11,24,6,41,10,28,2,11,9],[0,10,3,6,4,4,7,11,24,4,44,9,41,9],[0,10,3,6,4,4,6,12,25,3,43,10,38,1,2,9],[0,9,4,6,12,12,27,3,34,3,6,10,35,4,2,9],[0,9,4,6,12,12,29,1,34,3,12,2,37,4,2,9],[0,11,18,14,63,4,12,2,12,5,1,2,10,1,6,15],[0,11,18,14,62,5,12,5,9,5,1,2,17,15],[0,11,6,4,6,18,23,3,33,6,12,5,9,5,22,13],[0,11,6,4,6,18,22,4,32,7,7,10,9,5,9,3,10,13],[0,45,22,6,30,7,4,2,1,15,6,2,10,3,12,11],[0,45,22,5,31,7,4,2,1,16,17,3,12,11],[0,41,24,7,3,6,34,21,15,4,10,11],[0,41,24,8,2,6,34,22,5,2,7,4,7,1,2,11],[0,31,2,8,24,8,2,6,26,2,4,25,4,2,7,4,12,9],[0,31,2,8,25,2,2,2,3,6,26,2,4,25,3,3,7,4,2,3,7,9],[0,31,2,8,36,4,23,7,2,10,4,10,4,3,2,11,1,2,7,9],[0,30,3,7,37,4,22,8,2,10,4,10,4,16,10,9],[0,30,5,4,38,4,22,8,2,10,4,12,2,18,2,4,2,9],[0,30,73,8,2,10,4,12,2,18,2,4,2,9],[0,30,2,2,37,4,30,6,4,6,2,16,2,35],[0,34,37,4,30,6,4,6,2,15,4,6,2,26],[0,34,33,8,2,1,27,6,4,23,5,4,3,26],[0,35,32,7,3,6,22,6,4,21,7,4,2,27],[0,33,33,8,3,8,22,4,6,19,7,16,2,15],[0,33,34,5,2,1,2,8,22,4,7,18,7,16,2,15],[0,33,33,1,12,6,36,15,7,16,2,15],[0,33,30,3,13,6,35,12,2,4,5,16,2,15],[0,33,30,3,15,4,26,18,5,4,2,1,4,10,10,11],[0,33,30,4,15,3,26,18,5,7,4,9,11,11],[0,31,32,4,44,18,6,8,2,9,13,9],[0,31,32,4,44,18,6,8,2,5,17,9],[0,31,32,4,14,1,31,16,6,8,2,4,7,9,2,9],[0,31,50,3,29,15,7,8,2,4,6,10,2,9],[0,31,50,3,26,1,8,9,7,8,9,13,2,9],[0,30,51,3,22,5,9,6,9,8,8,14,3,8],[0,25,10,7,22,11,6,3,22,7,7,6,9,10,5,9,10,7],[0,25,11,6,22,3,2,10,2,3,21,8,7,7,8,10,4,10,10,7],[0,25,11,6,22,17,28,5,7,6,12,16,12,9],[0,25,11,6,21,17,29,8,4,6,13,15,12,9],[0,27,9,5,22,17,29,9,13,6,4,12,7,16],[0,27,9,5,22,18,29,9,12,6,4,12,5,18],[0,27,36,18,29,9,10,8,6,8,7,18],[0,27,37,17,20,17,11,8,6,7,5,21],[0,29,35,17,16,21,4,16,5,4,8,21],[0,29,35,14,19,42,5,3,8,21],[0,29,4,3,30,2,29,45,9,25],[0,29,4,4,29,2,29,11,2,33,8,25],[0,29,2,7,59,11,2,34,7,10,8,7],[0,28,3,9,60,6,4,16,2,17,6,10,4,11],[0,28,3,9,61,4,6,15,2,48],[0,28,4,6,63,4,6,65],[0,2,11,14,72,6,8,18,4,24,1,16],[0,2,1,9,1,14,72,6,9,14,2,1,7,21,1,16],[0,2,1,9,1,4,2,6,74,6,9,13,12,20,1,5,4,7],[0,2,1,9,1,4,2,6,74,6,9,8,2,3,12,20,1,5,4,7],[0,2,1,9,1,1,5,6,89,7,20,14,5,16],[0,2,1,9,1,1,5,6,89,6,22,13,5,16],[0,2,1,9,1,1,3,8,89,5,23,13,5,16],[0,2,1,9,1,1,3,7,82,3,5,5,27,9,6,15],[0,2,1,9,1,1,2,8,20,2,60,4,24,5,8,6,8,15],[0,2,1,9,1,1,3,7,20,3,57,7,22,6,9,5,6,17],[0,2,11,1,3,4,23,3,57,8,11,3,5,10,7,5,5,18],[0,3,1,10,3,4,22,4,57,8,11,3,5,9,10,2,5,19],[0,3,4,6,29,9,53,8,4,3,4,3,5,9,17,19],[0,3,37,11,53,8,4,3,4,5,3,12,14,19],[0,3,37,11,50,1,2,7,5,3,2,7,7,8,12,21],[0,3,2,5,25,16,50,9,6,3,2,8,6,8,12,21],[0,3,2,5,8,4,4,2,6,28,22,7,4,15,6,15,6,39],[0,3,2,24,4,34,16,8,4,15,6,15,6,39],[0,29,2,36,16,27,6,15,6,39],[0,29,2,36,16,28,5,15,6,39],[0,67,16,28,6,14,8,37],[0,67,16,28,6,14,8,37],[0,67,16,29,9,8,4,43],[0,67,16,30,13,3,4,43],[0,67,20,29,17,43],[0,67,20,30,16,43],[0,59,30,29,6,52],[0,59,30,33,2,52],[0,59,30,33,2,52],[0,59,30,87],[0,63,8,4,1,100],[0,63,8,105],[0,65,6,105],[0,65,6,105],[0,65,6,105],[0,65,6,105],[0,65,6,105],[0,65,6,105],[0,67,2,107],[0,67,2,107],[0,176],[0,176],[0,176]],"depth":[[0,176],[0,176],[0,176],[0,176],[0,176],[0,176],[0,176],[0,75,2,6,0,95],[0,75,2,6,0,95],[0,61,2,2,0,12,2,6,0,95],[0,61,2,2,0,12,2,6,0,95],[0,51,2,2,0,7,2,7,0,8,2,6,0,95],[0,51,2,2,0,7,2,7,0,8,2,6,0,95],[0,51,2,4,0,4,2,22,0,95],[0,51,2,4,0,4,2,22,0,95],[0,51,2,15,1,10,2,7,0,54,2,2,0,37],[0,51,2,14,1,13,2,5,0,54,2,2,0,37],[0,59,2,5,1,16,2,9,0,44,2,8,0,35],[0,59,2,5,1,16,2,9,0,44,2,8,0,35],[0,61,2,4,1,16,2,8,0,40,2,14,0,33],[0,61,2,4,1,16,2,8,0,37,2,20,0,30],[0,61,2,3,1,17,0,45,2,7,0,8,2,5,0,30],[0,61,2,2,1,18,0,45,2,2,1,2,2,3,0,8,2,5,0,30],[0,61,2,2,1,18,0,45,2,2,1,3,0,11,2,5,0,29],[0,61,1,20,0,45,2,3,1,1,2,1,0,12,2,5,0,28],[0,61,1,18,0,46,2,4,0,15,2,4,0,28],[0,61,1,18,0,46,2,4,0,47],[0,61,1,18,0,48,2,2,0,16,2,4,0,27],[0,61,1,19,0,47,2,2,0,16,2,4,0,27],[0,11,2,4,1,4,0,28,1,33,0,5,1,3,2,2,1,7,0,18,2,4,0,8,2,2,0,18,2,2,0,18,2,2,0,7],[0,11,2,3,1,5,0,28,1,37,0,1,1,13,0,6,2,4,0,6,2,5,0,8,2,2,0,18,2,3,0,17,2,2,0,7],[0,11,2,3,1,7,0,24,1,54,0,5,2,5,0,5,2,7,0,6,2,4,0,16,2,3,0,11,2,3,0,4,2,1,0,7],[0,11,2,3,1,7,0,24,1,54,0,5,2,5,0,1,2,2,0,2,2,8,0,5,2,4,0,9,2,4,0,2,2,4,0,11,2,3,0,4,2,1,0,7],[0,11,2,3,1,8,0,15,2,1,1,1,0,4,1,56,0,4,2,30,0,6,2,11,0,7,2,3,0,1,2,5,0,1,2,2,0,7],[0,11,1,1,2,2,1,9,0,9,2,1,1,1,0,3,1,1,2,1,0,4,1,31,2,2,1,3,2,6,1,1,2,2,1,11,0,3,2,31,0,6,2,2,0,1,2,8,0,7,2,12,0,7],[0,13,2,1,1,11,2,8,1,4,2,2,0,4,1,25,2,3,1,3,2,7,1,1,2,7,1,10,0,3,2,29,0,8,2,11,0,7,2,10,0,9],[0,13,2,2,1,11,2,8,1,3,2,2,0,4,1,24,2,22,1,10,0,3,2,28,0,9,2,13,0,5,2,10,0,9],[0,13,2,3,0,2,2,2,1,6,2,11,1,2,0,4,1,23,2,22,1,12,2,31,0,6,2,28,0,11],[0,13,2,2,0,1,2,1,1,1,2,2,1,3,2,13,1,26,2,26,1,12,2,32,0,5,2,18,0,1,2,9,0,11],[0,16,2,4,1,2,2,13,1,5,2,1,1,20,2,30,1,6,2,23,1,1,2,1,0,5,1,1,2,5,0,4,2,6,0,4,2,12,0,1,2,4,0,12],[0,15,2,13,3,3,2,4,1,3,2,3,1,19,2,19,3,1,1,2,2,9,1,6,2,22,0,8,1,1,2,5,0,4,2,6,0,4,2,18,0,11],[0,17,2,6,3,2,1,1,2,1,3,4,0,3,2,1,1,3,2,3,1,19,2,2,1,2,2,14,3,1,1,4,2,8,1,7,2,15,0,15,2,15,0,5,2,18,0,10],[0,17,2,5,1,1,3,9,0,2,2,3,1,1,2,3,1,21,2,16,3,2,1,4,2,7,1,7,2,10,0,1,2,4,0,16,2,14,0,6,2,16,0,11],[0,17,2,2,3,4,2,4,3,5,0,2,2,7,1,22,2,15,3,4,1,3,2,7,1,7,2,3,0,29,2,12,0,6,2,13,0,14],[0,6,1,2,0,9,2,1,3,5,2,5,3,6,2,7,1,22,2,15,3,4,1,3,2,3,1,1,2,3,1,7,2,2,0,30,2,13,0,5,2,5,0,1,2,6,0,15],[0,3,1,5,0,9,2,1,3,5,2,7,3,4,2,7,1,23,2,15,3,4,1,2,2,2,1,2,2,3,1,8,2,1,0,20,1,2,0,18,2,1,0,1,2,1,0,10,2,6,0,16],[0,3,1,4,0,1,1,2,0,2,2,6,3,5,2,7,3,5,2,7,1,22,2,15,3,3,1,3,2,8,1,8,0,13,2,1,1,1,0,4,1,2,2,1,0,18,2,2,0,33],[0,3,1,8,2,7,3,3,2,10,3,5,2,6,1,26,2,11,3,3,1,3,2,8,1,8,0,12,2,2,1,6,2,6,0,49],[0,3,1,7,2,9,3,2,2,10,3,2,0,3,2,6,1,24,2,1,1,1,2,12,3,1,1,4,2,5,1,2,2,2,1,7,0,12,2,2,1,6,2,9,0,46],[0,7,1,2,2,11,3,1,2,10,3,2,0,3,2,6,1,23,2,5,3,4,2,6,3,1,1,5,2,4,1,4,2,6,1,1,0,13,2,1,1,6,2,16,0,39],[0,6,1,2,2,5,0,4,2,14,3,2,0,3,2,6,1,23,2,5,3,5,2,5,3,1,1,5,2,5,1,4,2,7,0,12,1,7,2,16,0,31,2,4,0,4],[0,6,1,2,2,5,0,4,2,16,0,3,2,6,1,22,2,6,3,1,0,8,2,1,3,1,1,2,0,4,2,5,1,3,2,8,0,11,1,2,2,2,1,3,2,3,0,3,2,18,0,18,2,9,0,4],[0,6,1,3,2,4,0,4,2,16,0,4,2,4,1,23,2,6,3,1,0,8,2,4,0,4,2,10,1,2,2,4,0,7,2,4,1,3,2,1,1,3,2,3,0,3,2,1,1,1,2,16,0,1,2,2,0,15,2,9,0,4],[0,6,1,3,2,4,0,4,2,5,0,13,2,7,1,23,2,1,0,15,2,2,0,4,2,10,1,3,2,1,0,8,2,5,1,4,2,2,1,1,2,3,0,7,2,2,0,3,2,13,0,10,2,6,0,1,2,7,0,3],[0,7,1,1,2,6,0,3,2,4,0,14,2,8,1,22,2,1,0,15,2,2,0,4,2,9,1,5,0,8,2,5,1,7,2,3,0,7,2,2,0,8,2,9,0,9,2,6,0,4,2,4,0,3],[0,3,2,18,0,19,2,3,1,22,2,1,0,15,2,2,0,4,2,7,1,7,0,8,2,4,1,9,2,2,0,18,2,2,0,1,2,4,1,1,0,7,2,6,0,6,2,4,0,3],[0,3,2,1,1,2,2,15,0,20,2,2,1,23,2,2,0,12,2,6,0,1,2,7,1,7,0,8,2,1,1,11,0,24,1,7,0,5,2,6,0,6,2,3,0,4],[0,3,2,18,0,21,2,1,1,22,2,5,0,10,1,1,2,13,1,7,0,8,1,12,0,26,1,5,2,7,0,10,2,3,0,4],[0,3,2,18,0,21,2,1,1,22,2,5,0,12,2,12,1,8,0,6,1,13,0,26,1,6,2,6,0,10,2,2,0,5],[0,3,2,11,1,1,2,6,1,2,0,14,2,2,0,3,2,1,1,22,2,4,0,13,2,10,1,11,0,5,1,11,0,8,1,2,0,20,1,5,2,4,0,11,2,2,0,5],[0,3,2,9,1,7,2,2,1,2,0,14,2,2,0,3,1,23,2,4,0,11,2,5,0,4,2,2,1,13,0,4,1,11,0,8,1,2,0,20,1,5,2,4,0,10,2,3,0,5],[0,3,2,9,1,5,0,20,1,2,0,3,1,23,2,3,0,12,2,5,0,4,1,15,0,4,1,10,0,9,1,2,0,10,1,4,0,9,1,6,0,10,2,3,0,5],[0,3,2,10,1,4,0,20,1,2,0,3,1,23,2,1,0,15,2,4,0,4,1,15,0,5,1,9,0,6,1,5,0,10,1,5,0,25,2,2,0,5],[0,3,2,10,3,4,0,20,1,2,0,3,1,22,2,2,0,3,2,2,0,9,2,5,0,4,1,15,0,3,1,11,0,5,1,8,0,8,1,8,0,22,2,2,0,5],[0,3,2,14,0,20,1,27,2,2,0,13,2,6,0,4,1,15,0,3,1,10,0,3,1,12,0,7,1,8,0,21,2,3,0,5],[0,3,2,1,0,4,2,9,0,6,2,2,0,12,1,28,2,1,0,3,2,2,1,2,2,8,0,4,2,2,1,30,0,3,1,13,0,6,1,10,0,18,2,4,0,5],[0,9,2,11,0,3,2,2,0,12,1,30,2,4,1,3,2,7,0,4,2,2,1,30,0,3,1,29,0,18,2,4,0,5],[0,10,2,17,0,11,1,29,2,4,1,3,2,2,1,2,2,3,0,4,2,1,1,63,0,4,1,2,0,12,2,4,0,5],[0,13,2,15,0,10,1,29,2,4,1,3,2,2,1,2,2,4,0,3,1,22,2,4,1,38,0,1,1,5,2,1,0,11,2,4,0,5],[0,14,2,17,0,7,1,29,2,1,0,2,2,1,1,3,2,10,1,22,2,5,1,2,2,6,1,4,2,2,1,31,2,1,0,10,2,2,0,7],[0,15,2,17,0,6,1,29,0,3,2,1,1,3,2,4,1,29,2,4,1,1,2,7,1,4,2,3,1,31,0,10,2,2,0,7],[0,23,2,12,0,3,2,1,1,27,0,4,2,1,1,2,2,2,0,9,1,23,2,4,1,1,2,7,1,5,2,1,1,28,2,1,1,3,0,10,2,2,0,7],[0,23,2,17,1,26,0,5,2,4,0,9,1,20,2,18,1,15,2,6,1,9,2,2,1,6,0,7,2,3,0,6],[0,25,2,18,1,23,0,7,2,1,1,1,0,9,1,19,2,20,1,1,2,2,1,1,2,3,1,5,2,13,1,3,2,4,1,4,2,1,0,5,2,5,0,6],[0,25,2,18,1,24,2,1,0,4,2,2,1,1,0,7,1,21,2,18,1,3,2,32,1,4,0,5,2,4,0,7],[0,25,2,19,1,22,2,2,0,4,2,2,1,3,0,4,1,22,2,18,1,1,2,1,1,1,2,36,0,7,2,2,0,7],[0,25,2,20,1,20,2,2,0,1,2,6,1,3,0,1,1,24,2,19,1,1,2,37,0,7,2,3,0,7],[0,29,2,16,1,19,2,10,1,28,2,2,1,2,2,14,1,2,2,36,0,8,2,3,0,7],[0,29,2,2,0,4,2,8,1,1,2,2,1,15,2,13,1,28,2,19,1,1,2,33,0,12,2,2,0,7],[0,36,2,10,1,14,2,15,1,1,2,1,1,1,2,1,1,1,2,11,1,11,2,53,0,12,2,2,0,7],[0,37,2,10,1,14,2,1,1,2,2,28,1,10,2,53,0,12,2,2,0,7],[0,37,2,10,1,14,2,31,1,10,2,1,0,4,2,48,0,12,2,2,0,7],[0,37,2,10,1,14,2,29,1,12,2,1,0,4,2,48,0,12,2,2,0,7],[0,15,2,8,0,18,2,2,1,17,2,30,1,13,0,10,2,5,0,2,2,13,3,1,2,20,0,13,2,2,0,7],[0,15,2,8,0,18,1,20,2,29,1,13,0,9,2,6,0,3,2,5,0,3,2,3,3,3,2,10,0,22,2,2,0,7],[0,11,2,16,0,14,1,23,2,26,1,13,0,9,2,6,0,4,2,4,0,41,2,2,0,7],[0,11,2,16,0,14,2,2,1,22,2,24,1,15,0,4,2,2,0,3,2,4,0,50,2,2,0,7],[0,9,2,6,1,1,0,3,1,2,2,10,0,11,2,1,1,24,2,21,1,16,0,3,1,1,2,9,0,50,2,2,0,7],[0,8,2,7,0,4,1,1,2,11,0,14,1,20,0,3,2,3,0,6,2,3,0,2,2,4,1,17,0,3,1,3,0,1,2,7,0,49,2,3,0,7],[0,7,2,7,0,5,2,10,0,16,1,20,0,3,1,1,2,1,0,7,2,3,0,2,2,4,1,21,2,10,0,48,2,6,0,5],[0,4,2,2,0,1,2,7,0,5,2,10,0,13,1,2,0,1,1,20,0,12,2,1,1,2,0,2,2,6,1,18,2,11,0,48,1,3,2,3,0,5],[0,4,2,2,0,1,2,7,0,5,2,7,0,16,1,23,0,12,2,12,1,18,2,10,0,6,2,2,0,32,2,4,0,8,2,2,0,5],[0,7,1,1,2,5,0,6,2,6,0,17,1,25,2,1,0,8,2,13,1,18,2,8,0,8,2,2,0,32,2,2,1,2,0,8,2,3,0,4],[0,7,1,2,2,4,0,6,2,6,0,17,1,24,2,2,0,8,2,14,1,17,0,4,2,4,0,6,2,4,0,20,2,4,0,4,2,6,1,1,2,1,0,8,2,3,0,4],[0,6,2,1,1,2,2,4,0,5,2,10,0,15,1,22,2,6,0,3,2,16,1,17,0,4,2,4,0,6,2,4,0,20,2,4,0,4,2,8,0,8,2,2,0,5],[0,6,2,5,0,7,2,11,0,13,1,22,2,2,1,2,2,22,1,15,0,6,2,4,1,1,0,7,2,2,0,10,2,26,0,6,1,1,2,3,0,5],[0,9,2,3,0,6,2,11,0,13,1,21,2,27,1,16,0,5,2,3,1,2,0,7,2,2,0,10,2,26,0,6,1,1,2,3,0,5],[0,9,2,3,0,5,1,4,2,10,0,11,2,1,1,19,2,16,1,3,2,9,1,16,0,5,2,3,1,2,0,21,2,22,0,8,1,2,0,7],[0,9,2,3,0,5,1,6,2,8,0,10,2,2,1,17,2,18,1,4,2,9,1,14,0,6,2,4,0,22,2,23,0,7,1,2,0,7],[0,9,2,8,1,6,0,1,2,2,0,3,2,2,0,6,2,6,1,16,2,11,0,2,2,7,1,2,2,10,1,14,0,4,2,6,0,23,2,22,0,7,1,1,2,1,0,7],[0,9,2,8,1,6,0,6,2,2,0,6,2,6,1,16,2,10,0,6,2,16,1,14,0,4,2,8,0,22,2,5,3,1,2,15,0,7,2,3,0,6],[0,10,2,8,1,5,0,6,2,2,0,6,2,6,1,16,2,9,0,9,2,5,0,3,2,5,1,15,0,4,2,8,0,22,2,7,3,1,2,14,0,6,2,3,0,6],[0,12,2,7,1,5,0,5,2,2,0,6,2,6,1,16,2,9,0,9,2,1,1,3,0,4,2,5,1,7,2,2,1,6,0,3,2,9,0,9,2,2,0,11,2,6,3,3,2,14,0,5,2,3,0,6],[0,12,2,7,1,5,2,7,0,12,2,1,1,14,2,13,0,6,3,1,1,3,0,4,2,5,1,2,2,1,1,4,2,3,1,6,2,8,0,12,2,5,0,8,2,6,0,4,2,13,0,5,2,4,0,5],[0,12,2,9,1,3,2,7,0,12,2,1,1,14,2,13,0,5,3,1,1,5,0,3,2,10,1,2,2,4,1,5,2,1,1,1,2,7,0,11,2,6,0,7,2,6,0,4,2,11,0,7,2,4,0,5],[0,12,2,19,0,13,2,1,1,13,2,8,0,10,1,6,0,5,2,10,1,1,2,3,1,5,2,7,0,12,2,1,1,3,2,3,1,1,0,6,2,6,0,8,2,7,0,7,2,4,0,5],[0,8,2,26,0,10,2,3,1,11,2,7,0,12,1,5,0,5,2,11,1,1,2,3,1,3,2,8,0,12,1,5,2,2,1,1,0,6,1,1,2,5,0,8,2,7,0,7,2,5,0,4],[0,7,2,27,0,10,2,3,1,12,2,4,0,14,1,5,0,5,2,12,1,1,2,1,1,4,2,4,0,16,1,6,2,2,0,6,1,1,2,3,0,11,2,7,0,6,2,5,0,4],[0,4,2,3,1,4,2,23,0,10,2,2,1,11,2,1,1,4,2,1,0,14,1,5,0,5,2,11,1,8,2,3,0,16,1,7,2,2,0,5,1,1,2,3,0,12,2,6,0,6,2,5,0,4],[0,4,3,3,1,3,0,5,2,6,0,1,2,15,0,7,2,2,1,10,2,3,1,1,0,17,1,4,2,2,0,4,2,11,1,8,2,2,0,9,2,3,1,14,0,21,2,17,0,4],[0,6,1,4,0,5,2,6,0,6,2,10,0,7,2,3,1,9,2,3,1,1,0,17,1,4,2,2,0,4,2,11,1,8,2,1,0,10,1,17,0,21,2,17,0,4],[0,6,1,4,0,5,2,6,0,9,2,9,0,5,2,3,1,9,2,3,1,1,0,11,1,9,2,3,0,4,2,10,1,7,2,1,0,12,3,1,1,16,0,25,2,13,0,4],[0,8,1,2,0,5,2,6,0,10,2,9,0,5,2,1,1,10,2,4,0,11,1,8,2,4,0,4,2,9,1,9,0,12,1,16,2,3,0,23,2,7,0,10],[0,8,1,2,0,5,2,4,0,14,2,7,0,7,1,10,2,3,0,9,1,9,2,3,0,6,2,6,1,12,0,10,1,17,2,4,0,25,2,3,1,2,0,10],[0,15,2,4,0,14,2,7,0,7,1,10,2,2,0,1,2,2,0,2,2,1,1,3,0,1,1,9,2,3,0,6,2,3,1,1,2,1,1,13,0,10,1,16,2,2,1,1,2,1,0,11,2,4,0,10,1,1,2,3,0,12],[0,15,3,1,2,3,0,14,2,8,0,6,1,10,2,5,0,2,1,14,2,3,0,6,2,3,1,16,2,2,1,2,2,6,1,15,2,1,1,3,0,10,2,6,0,9,1,1,2,3,0,12],[0,15,3,2,2,2,0,14,2,8,0,6,1,10,2,5,0,3,1,12,2,4,0,6,2,3,1,16,2,12,3,1,1,11,2,2,1,3,0,9,2,7,0,5,1,4,2,3,0,13],[0,13,3,3,2,5,0,14,2,6,0,6,1,10,2,8,1,13,2,3,0,4,2,5,1,17,2,11,3,1,1,10,2,4,1,1,2,1,0,6,2,10,0,5,1,1,2,6,0,13],[0,13,3,3,2,5,0,14,2,6,0,6,1,10,2,9,1,15,0,4,2,5,1,17,2,13,1,9,2,6,0,6,2,13,0,2,2,7,0,13],[0,11,3,6,0,18,2,6,0,6,1,10,2,8,3,1,1,8,2,3,0,1,1,2,0,5,2,5,1,15,0,6,2,12,1,5,2,9,0,4,2,22,0,13],[0,11,3,6,0,13,2,2,0,3,2,6,0,6,1,10,2,8,3,1,1,6,2,6,0,7,2,5,1,15,0,6,2,13,1,3,2,10,0,4,2,22,0,13],[0,11,3,1,0,18,2,2,0,1,2,8,0,6,1,10,2,4,0,4,3,2,1,2,3,4,2,5,0,7,2,5,1,15,0,10,2,9,1,3,2,9,0,9,2,16,0,15],[0,7,2,1,1,2,3,7,2,1,0,14,2,9,0,5,1,15,0,4,3,8,2,17,1,15,0,10,2,20,0,10,2,16,0,15],[0,7,2,1,0,9,2,1,0,14,1,1,2,12,1,16,0,4,2,1,3,7,2,17,1,15,0,12,2,7,0,4,2,7,0,10,2,14,0,17],[0,7,1,1,0,9,2,1,0,14,1,1,2,12,1,16,0,4,2,1,3,1,1,3,3,2,2,18,1,15,0,11,2,7,0,6,2,6,0,10,2,14,0,17],[0,7,1,1,0,9,2,1,0,14,2,13,1,16,0,4,2,1,3,1,0,7,2,3,3,1,2,12,1,14,0,12,2,6,0,7,2,10,0,6,2,4,0,27],[0,7,1,1,0,9,2,1,0,14,2,13,1,19,0,1,1,2,0,10,2,13,1,13,0,26,2,6,1,2,2,2,0,5,2,5,0,27],[0,7,1,1,0,9,2,1,0,13,2,10,0,1,2,3,1,22,0,11,2,12,1,13,0,26,2,4,0,4,3,2,0,5,2,5,0,27],[0,7,1,1,0,9,2,1,0,13,2,10,0,5,1,21,0,12,2,11,1,14,0,25,2,3,3,1,0,4,3,2,0,6,2,4,0,27],[0,7,1,1,0,9,2,1,0,1,2,2,0,10,2,7,0,8,1,19,3,2,0,12,2,11,1,14,0,23,2,6,0,13,2,3,0,27],[0,7,1,1,0,9,2,1,0,1,2,2,0,10,2,6,0,9,1,19,3,2,0,12,3,3,2,8,1,17,2,1,0,19,2,6,0,14,2,2,0,27],[0,7,1,1,0,9,3,1,0,1,2,2,0,8,2,4,0,1,2,2,0,9,1,20,0,14,3,3,2,8,1,17,2,1,0,19,2,4,0,16,2,2,0,10,2,6,0,11],[0,7,1,7,3,4,0,1,2,2,0,7,2,5,0,12,1,19,3,1,0,14,3,3,2,8,1,17,0,20,2,4,0,16,2,5,0,7,2,6,0,11],[0,19,2,2,0,7,2,5,0,10,2,2,1,19,3,1,0,14,3,3,2,8,1,16,0,19,2,6,0,16,2,5,0,7,2,4,0,13],[0,13,1,3,3,2,2,3,0,8,2,4,0,10,2,2,1,19,2,1,0,14,3,2,2,9,1,15,0,15,2,2,0,3,2,6,0,15,2,5,0,8,2,4,0,13],[0,13,1,5,2,3,0,8,2,4,0,8,2,5,1,17,2,2,0,14,1,1,2,10,1,15,0,8,2,2,0,5,2,2,0,1,2,12,0,8,2,8,0,8,2,4,0,13],[0,12,1,6,3,1,2,2,0,8,2,5,0,7,2,5,1,17,2,2,0,14,2,11,1,15,0,5,2,5,0,7,2,12,1,1,0,8,2,8,0,8,2,4,0,13],[0,5,1,2,0,4,1,7,3,1,2,4,0,6,2,5,0,7,2,6,1,17,2,2,0,13,2,11,1,18,2,7,0,7,2,6,0,1,2,4,1,3,0,1,1,2,2,4,1,1,2,6,0,5,2,10,0,11],[0,5,1,2,0,4,3,1,1,6,3,1,2,3,3,1,0,6,2,5,0,7,2,8,1,16,2,3,0,11,2,11,1,7,2,2,1,10,2,7,0,7,2,2,0,3,2,5,1,6,2,3,1,3,2,5,0,5,2,2,0,2,2,6,0,11],[0,5,1,2,0,4,3,2,0,6,2,3,3,1,0,6,2,5,0,11,2,5,1,15,2,3,1,1,0,6,2,4,1,6,2,4,1,7,2,3,1,11,2,6,0,12,2,8,1,4,2,3,1,2,2,5,0,3,2,1,0,2,2,1,0,2,2,8,0,9],[0,5,1,2,0,3,3,3,0,6,1,1,2,3,0,6,2,5,0,11,2,5,1,16,2,1,1,2,0,6,2,2,1,19,2,3,1,11,2,6,0,10,2,10,1,5,2,13,0,2,2,11,0,9],[0,10,3,3,0,6,1,2,2,2,0,4,2,7,0,11,2,4,1,18,2,2,0,4,2,3,1,20,2,4,1,10,2,7,0,9,2,8,1,7,2,26,0,9],[0,10,3,2,2,1,0,6,1,2,3,1,2,1,0,4,2,6,0,12,2,4,1,18,2,3,0,3,2,2,1,23,2,3,1,9,2,6,0,10,2,8,1,8,2,22,0,1,2,2,0,9],[0,9,3,2,2,2,0,6,1,3,2,9,0,12,2,5,1,18,2,4,0,3,2,1,1,25,2,3,1,4,2,1,0,3,2,6,0,10,2,14,1,3,2,8,1,1,2,9,0,4,2,2,0,9],[0,9,3,1,2,3,0,6,1,3,2,9,0,12,2,5,1,17,2,7,0,1,2,1,1,26,2,2,1,5,0,3,2,4,1,2,2,6,0,2,1,2,2,16,1,1,2,18,0,4,2,2,0,9],[0,11,2,6,1,5,2,7,0,14,2,4,1,18,2,9,1,32,0,4,2,12,0,2,2,12,0,5,2,1,0,2,2,8,1,2,0,1,2,6,0,15],[0,11,2,6,1,3,3,2,2,7,0,14,2,5,1,16,2,10,1,12,2,3,1,16,0,5,2,12,0,5,2,9,0,5,2,1,0,2,2,8,1,4,2,5,0,15],[0,11,2,5,1,1,0,4,3,2,2,4,0,18,2,3,1,14,2,6,0,3,2,4,1,8,2,6,1,15,0,6,2,12,0,5,2,9,0,5,2,9,1,7,2,6,0,13],[0,11,2,6,0,4,2,6,0,18,2,3,1,13,2,6,0,4,2,5,1,5,2,9,1,13,0,7,2,7,0,10,2,9,0,5,2,7,1,2,0,3,2,1,1,4,2,5,0,13],[0,45,2,3,1,12,2,7,0,6,2,4,1,3,2,11,1,12,0,7,2,4,0,2,2,1,0,15,2,6,0,2,2,8,1,2,0,3,2,1,1,5,2,4,3,2,0,11],[0,45,2,1,1,15,2,6,0,5,2,7,1,1,2,11,1,12,0,7,2,4,0,2,2,1,0,16,2,16,1,1,0,3,2,1,1,6,2,3,3,2,0,11],[0,41,2,4,1,18,2,2,0,7,2,3,0,6,2,10,1,12,2,12,0,21,2,15,0,4,1,5,2,3,3,2,0,11],[0,41,2,4,1,18,2,2,0,8,2,2,0,6,2,8,1,16,2,10,0,22,2,5,0,2,2,7,0,4,1,2,3,3,2,2,0,1,2,2,0,11],[0,31,2,2,0,8,2,3,1,20,2,1,0,8,2,2,0,6,2,7,1,18,2,1,0,2,2,4,0,25,2,4,0,2,2,7,0,4,1,2,2,10,0,9],[0,31,2,2,0,8,2,2,1,21,2,2,0,2,1,1,2,1,0,2,2,3,0,6,2,5,1,18,2,3,0,2,2,4,0,25,2,3,0,3,2,7,0,4,2,2,0,3,2,7,0,9],[0,31,2,2,0,8,2,1,1,22,2,3,1,2,2,8,0,4,2,6,1,17,0,7,2,2,0,10,2,4,0,10,2,4,0,3,2,2,0,11,2,1,0,2,2,7,0,9],[0,30,2,3,0,7,2,1,1,24,2,2,1,2,2,8,0,4,2,6,1,16,0,8,2,2,0,10,2,4,0,10,2,4,0,16,2,10,0,9],[0,30,2,4,1,1,0,4,2,1,1,24,2,13,0,4,2,6,1,16,0,8,2,2,0,10,2,4,0,12,2,2,0,18,2,2,0,4,2,2,0,9],[0,30,2,4,1,1,2,3,1,2,2,4,1,19,2,24,1,16,0,8,2,2,0,10,3,2,2,2,0,12,2,2,0,18,2,2,0,4,2,2,0,9],[0,30,2,2,0,2,2,1,1,5,2,5,1,17,2,9,0,4,2,13,1,17,0,6,2,4,0,6,1,2,0,16,2,2,0,35],[0,34,1,7,2,4,1,14,2,12,0,4,2,12,1,18,0,6,2,4,0,6,1,2,0,15,2,4,0,6,2,2,0,26],[0,34,1,7,2,1,1,1,2,4,1,11,2,9,0,8,2,2,0,1,2,9,1,18,0,6,2,4,0,23,2,5,0,4,2,3,0,26],[0,35,1,6,2,6,1,11,2,9,0,7,2,3,0,6,2,4,1,1,2,1,1,16,0,6,2,4,0,21,2,7,0,4,2,2,0,27],[0,33,2,1,1,7,2,6,1,11,2,2,1,2,2,4,0,8,2,3,0,8,2,5,1,16,2,1,0,4,2,6,0,19,2,7,0,16,2,2,0,15],[0,33,2,1,1,7,2,3,1,1,2,1,1,12,2,2,1,2,2,5,0,5,2,2,0,1,2,2,0,8,2,5,1,16,2,1,0,4,2,7,0,18,2,7,0,16,2,2,0,15],[0,33,2,2,1,7,2,1,1,15,2,8,0,1,2,4,1,6,2,2,0,6,2,5,1,16,2,15,0,15,2,7,0,16,2,2,0,15],[0,33,2,2,1,24,2,4,0,3,2,3,1,10,0,6,2,5,1,16,2,14,0,12,2,2,0,4,2,5,0,16,2,2,0,15],[0,33,2,2,1,24,2,4,0,3,2,2,1,12,2,1,0,4,2,5,1,16,2,5,0,18,2,5,0,4,2,2,0,1,2,4,0,10,2,10,0,11],[0,33,2,2,1,25,2,3,0,4,2,1,1,13,2,1,0,3,2,5,1,16,2,5,0,18,2,5,0,7,2,4,0,9,2,11,0,11],[0,31,2,5,1,24,2,3,0,4,2,1,1,13,2,8,1,16,2,5,1,1,0,18,2,6,0,8,2,2,0,9,2,13,0,9],[0,31,2,6,1,24,2,2,0,4,2,1,1,13,2,8,1,15,2,6,1,1,0,18,2,6,0,8,2,2,0,5,2,17,0,9],[0,31,2,6,1,23,2,2,1,1,0,4,2,1,1,13,0,1,2,6,1,15,2,7,1,2,2,1,0,16,2,6,0,8,2,2,0,4,2,7,0,9,2,2,0,9],[0,31,1,1,2,6,1,22,2,2,1,2,2,3,1,14,0,3,2,4,1,14,2,11,0,15,2,7,0,8,2,2,0,4,2,6,0,10,2,2,0,9],[0,31,1,1,2,6,1,22,2,2,1,2,2,3,1,14,0,3,2,3,1,15,2,8,0,1,2,8,0,9,2,7,0,8,2,9,0,13,2,2,0,9],[0,30,1,2,2,8,1,23,2,5,1,13,0,3,2,3,1,15,2,4,0,5,2,9,0,6,2,9,0,8,2,8,0,14,2,3,0,8],[0,25,2,2,1,4,2,4,0,7,1,20,2,2,0,11,1,6,0,3,2,3,1,16,2,3,0,7,2,7,0,6,2,8,1,1,0,10,2,5,0,9,2,10,0,7],[0,25,2,1,1,5,2,5,0,6,1,20,2,2,0,3,2,1,3,1,0,10,1,1,2,1,0,3,2,3,1,18,0,8,2,7,0,7,2,8,0,10,2,4,0,10,2,10,0,7],[0,25,1,6,2,5,0,6,1,19,2,3,0,17,2,5,1,10,2,1,1,8,2,4,0,5,2,7,0,6,2,12,0,16,2,12,0,9],[0,25,1,6,2,5,0,6,1,18,2,3,0,17,2,6,1,9,2,3,1,5,2,5,1,1,0,8,2,4,0,6,2,13,0,15,2,12,0,9],[0,27,1,5,2,4,0,5,2,1,1,18,2,3,0,17,2,6,1,8,2,5,1,4,2,6,0,9,2,13,0,6,2,4,0,12,2,7,0,16],[0,27,1,6,2,3,0,5,2,2,1,16,2,4,0,18,2,5,1,7,2,7,1,4,2,6,0,9,2,12,0,6,2,4,0,12,2,5,0,18],[0,27,1,6,2,10,1,16,2,4,0,18,2,4,1,8,2,9,1,2,2,3,1,3,0,9,2,10,0,8,2,6,0,8,2,7,0,18],[0,27,1,11,2,5,1,17,2,4,0,17,2,4,1,8,2,8,0,17,2,6,1,1,2,4,0,8,2,6,0,7,2,5,0,21],[0,29,1,10,2,3,1,18,2,4,0,17,2,4,1,11,2,1,0,21,2,4,0,16,2,5,0,4,2,8,0,21],[0,29,1,32,2,3,0,14,2,7,1,9,2,3,0,42,2,5,0,3,2,8,0,21],[0,29,1,4,0,3,1,25,2,5,0,2,2,17,1,8,2,4,0,45,2,9,0,25],[0,29,1,4,0,4,1,25,2,4,0,2,2,17,1,8,2,4,0,11,2,2,0,33,2,8,0,25],[0,29,1,2,0,7,1,25,2,3,1,2,2,9,1,1,2,7,1,8,2,4,0,11,2,2,0,34,2,7,0,10,2,8,0,7],[0,28,1,3,0,9,1,24,2,10,1,6,2,5,1,9,2,6,0,6,2,4,0,16,2,2,0,17,2,6,0,10,2,4,0,11],[0,28,1,1,3,2,0,9,2,1,1,23,2,9,1,7,2,5,1,10,2,6,0,4,2,6,0,15,2,2,0,48],[0,28,3,3,2,1,0,6,2,1,1,1,2,1,1,24,2,8,1,7,2,4,1,12,2,5,0,4,2,6,0,65],[0,2,2,11,0,14,1,1,2,10,1,2,2,2,1,27,2,4,1,2,2,4,1,1,2,4,1,13,2,2,0,6,2,8,0,18,2,4,0,24,2,1,0,16],[0,2,2,1,0,9,2,1,0,14,2,15,1,33,2,3,1,20,2,1,0,6,2,8,1,1,0,14,2,2,0,1,2,7,0,21,2,1,0,16],[0,2,2,1,0,9,2,1,0,4,2,2,0,6,2,17,1,56,2,1,0,6,2,6,1,3,0,13,2,12,0,20,2,1,0,5,1,3,3,1,0,7],[0,2,2,1,0,9,2,1,0,4,2,2,0,6,2,16,1,57,2,1,0,6,2,6,1,2,2,1,0,8,2,2,0,3,2,12,0,20,2,1,0,5,1,4,0,7],[0,2,2,1,0,9,2,1,0,1,2,5,0,6,2,12,1,60,2,17,0,7,2,20,0,14,2,5,0,16],[0,2,2,1,0,9,3,1,0,1,2,5,0,6,2,9,1,63,2,17,0,6,2,22,0,13,2,5,0,16],[0,2,2,1,0,9,3,1,0,1,2,3,0,8,2,9,1,64,2,16,0,5,2,16,1,1,2,6,0,13,2,5,0,16],[0,2,2,1,0,9,3,1,0,1,2,3,0,7,2,10,1,18,2,5,1,42,2,2,1,1,2,4,0,3,2,5,0,5,2,16,1,1,2,10,0,9,2,6,0,15],[0,2,2,1,0,9,2,1,0,1,2,2,0,8,2,9,1,11,0,2,1,6,2,5,1,46,2,3,0,4,2,6,1,2,2,10,1,2,2,4,0,5,2,4,1,4,0,6,2,8,0,15],[0,2,2,1,0,9,2,1,0,1,2,3,0,7,2,9,1,11,0,3,1,5,2,5,1,2,2,4,1,41,0,7,2,3,1,4,2,15,0,6,2,5,1,4,0,5,1,1,2,5,0,17],[0,2,2,1,3,2,1,7,2,1,0,1,2,3,0,4,2,11,1,12,0,3,1,1,2,2,1,2,2,5,1,2,2,5,1,40,0,8,2,2,1,3,2,6,0,3,2,5,0,10,2,7,0,5,1,1,2,4,0,18],[0,3,3,1,0,10,2,3,0,4,2,2,1,2,2,6,1,10,2,1,1,1,0,4,1,1,2,2,1,2,2,12,1,40,0,8,2,2,1,1,2,8,0,3,2,5,0,9,2,10,0,2,1,1,2,4,0,19],[0,3,3,2,1,2,0,6,2,10,1,3,2,5,1,8,2,3,0,9,2,15,1,38,0,8,2,4,0,3,2,4,0,3,2,5,0,9,2,11,1,3,2,3,0,19],[0,3,3,3,1,2,2,15,1,4,2,4,1,7,2,2,0,11,2,17,1,36,0,8,2,4,0,3,1,1,2,3,0,5,2,3,0,12,2,8,1,4,2,2,0,19],[0,3,2,20,1,6,2,3,1,5,2,3,0,11,2,18,1,32,0,1,1,2,0,7,2,5,0,3,1,2,0,7,2,7,0,8,2,8,1,4,0,21],[0,3,2,2,0,5,2,13,1,7,2,1,1,4,0,16,2,19,1,29,2,2,0,9,2,6,0,3,1,2,0,8,2,6,0,8,2,8,1,4,0,21],[0,3,2,2,0,5,2,8,0,4,2,1,1,3,0,2,1,6,0,28,2,16,1,6,0,7,1,4,0,15,2,6,0,15,2,6,0,39],[0,3,2,2,0,24,1,1,2,3,0,34,2,14,1,2,0,8,1,4,0,15,2,6,0,15,2,6,0,39],[0,29,2,2,0,36,2,15,1,1,0,27,2,6,0,15,2,6,0,39],[0,29,2,2,0,36,2,16,0,28,2,5,0,15,2,6,0,39],[0,67,2,16,0,28,2,6,0,14,2,8,0,37],[0,67,2,16,0,28,2,6,0,14,2,8,0,37],[0,67,2,16,0,29,2,9,0,8,2,4,0,43],[0,67,2,16,0,30,2,13,0,3,2,4,0,43],[0,67,2,20,0,29,2,17,0,43],[0,67,2,20,0,30,2,16,0,43],[0,59,3,1,2,29,0,29,2,6,0,52],[0,59,3,1,2,29,0,33,2,2,0,52],[0,59,3,1,2,29,0,33,2,1,1,1,0,52],[0,59,2,30,0,87],[0,63,2,8,0,4,2,1,0,100],[0,63,2,8,0,105],[0,65,2,6,0,105],[0,65,2,6,0,105],[0,65,2,6,0,105],[0,65,2,6,0,105],[0,65,2,6,0,105],[0,65,2,1,1,2,2,3,0,105],[0,67,3,2,0,107],[0,67,3,2,0,107],[0,176],[0,176],[0,176]]} diff --git a/packages/client/src/render/land.ts b/packages/client/src/render/land.ts index 36d8ad4..94ef1d4 100644 --- a/packages/client/src/render/land.ts +++ b/packages/client/src/render/land.ts @@ -54,13 +54,13 @@ import { COAST_ROCK, COAST_SAND, SHADOW, mix, scale, shade } from './theme.js'; // --------------------------------------------------------------------------- /** - * Base land color — the original's lush grass green (owner's screenshots of - * real play show green islands with rock cliffs, not the olive-slate we had). - * Kept darker than the shoal band so water still reads as the playfield. + * Base land color — the original's grass green, pushed YELLOW-green so it + * separates by HUE from the cyan water ramp (theme.WATER_RAMP). With flat + * fills and no texture, hue is the only thing telling shore from shoal. * The lit/shade variants come from theme.shade so the land obeys the same * top-left key light as every structure. */ -export const LAND_BASE = 0x2f5730; +export const LAND_BASE = 0x4d6b33; /** * Width (world units) of the sand/rock coast band drawn along the waterline. diff --git a/packages/client/src/render/theme.ts b/packages/client/src/render/theme.ts index cc0d8ca..7ccf70a 100644 --- a/packages/client/src/render/theme.ts +++ b/packages/client/src/render/theme.ts @@ -50,19 +50,23 @@ export const GOLD = 0xf4c95c; * renderer interpolates along this by a per-pixel/per-band "depth" value so * the sea reads as layered rather than a single flat fill. * - * Retuned 2026-07-31 against the owner's gameplay screenshots of the ORIGINAL: - * the real map is HIGH CONTRAST — near-black navy in the deep channels against - * bright teal-green shoals ringing every island — not the uniform mid-blue we - * had. That contrast is what makes the lanes legible at a glance, and it only - * became worth doing once the true per-cell seabed shipped (WaterMask.depth). - * Hulls still out-saturate the sea: the ramp stays desaturated, it just spans - * a much wider value range. + * Retuned against the owner's gameplay screenshots of the ORIGINAL: high + * contrast, near-black navy in the deep channels up to a bright shoal at the + * coast. That range is what makes the lanes legible, and it only became worth + * doing once the true per-cell seabed shipped (WaterMask.depth). + * + * HUE IS LOAD-BEARING: every stop is BLUE-DOMINANT (cyan, never green). A + * first attempt used a teal-GREEN shoal to match the screenshots' warmth and + * it collided with the green land — shoals read as coastline and the map + * became unreadable (owner: "almost seems worse"). Without texture to + * separate them, hue is the only cue: water cyan, land green. Do not warm the + * shoal toward green again. */ export const WATER_RAMP: readonly number[] = [ - 0x3f8f7d, // shallow / near coast — the original's bright teal-green shoal - 0x24606a, // mid - 0x102a44, // deep open sea — the original reads near-black navy here - 0x06121f, // abyss / map edge + 0x2b8ca6, // shallow / near coast — CYAN, blue-dominant on purpose + 0x1b5f7d, // mid + 0x0e2b45, // deep open sea — near-black navy + 0x061520, // abyss / map edge ]; /** Foam / wave-crest highlight stroked on the lighter water bands. */ diff --git a/packages/core/test/terrain-integration.test.ts b/packages/core/test/terrain-integration.test.ts index 1e47661..f7e9ffe 100644 --- a/packages/core/test/terrain-integration.test.ts +++ b/packages/core/test/terrain-integration.test.ts @@ -78,7 +78,7 @@ describe('terrain integration (real water mask)', () => { expect(ruleset.map.waterMask.cells.length).toBeGreaterThan(0); // The mask is SAILABILITY from the map's own PATHING MAP (war3map.wpm bit // 0x40 = no-water — the engine's enforced truth; see terrain.py), cropped - // to the 162x226 PLAYABLE grid (64u cells — 2x the tilepoint spacing; + // to the 176x234 PLAYABLE grid (64u cells — 2x the tilepoint spacing; // lane-topology equivalence vs the raw 32u wpm is gate G6) (the unplayable border removed; // the WEST bound extended 3 cells west of the camera bounds so the Goblin // Potion Dealer shop sits off the grid edge — see docs/TERRAIN.md @@ -92,12 +92,13 @@ describe('terrain integration (real water mask)', () => { // real map separates. const water = ruleset.map.waterMask.cells.reduce((n, c) => n + c, 0); const total = ruleset.map.waterMask.cells.length; - expect(total).toBe(162 * 226); // 64u cells (full-res lane deduction) - // ~0.513: the wpm sailable fraction at 64u cells with LAND-BIASED ties - // (straddling walls are kept, conservatively thickening land). Same band - // as the extractor's fail-loud gate [0.50, 0.62]. - expect(water / total).toBeGreaterThan(0.5); - expect(water / total).toBeLessThan(0.62); + expect(total).toBe(176 * 234); // 64u cells over the FULL playable extent + // ~0.463 over the FULL playable extent. The absolute value is a function + // of how much land-heavy border the crop includes, so it is NOT the + // fidelity signal — the extractor gates on DRIFT from the raw wpm over the + // same rect instead. Kept here only as a broad sanity band. + expect(water / total).toBeGreaterThan(0.40); + expect(water / total).toBeLessThan(0.60); // Nav fields are populated (a real flood from each base goal). expect(ruleset.map.navByTeam.south.dist.length).toBe(total); expect(ruleset.map.navByTeam.north.dist.length).toBe(total); diff --git a/tools/extractor/terrain.py b/tools/extractor/terrain.py index e2334ba..374f276 100644 --- a/tools/extractor/terrain.py +++ b/tools/extractor/terrain.py @@ -150,17 +150,57 @@ # and the shop sits ON the island LAND CORE (the west moat side at col 0 is sealed # by the off-grid boundary, exactly like a land wall). The new west columns get # their water from the SAME minimap trace. -WEST_EXTEND_CELLS = 3 # K: whole cells the playable west bound is moved westward. -_PLAYABLE_CAMERA_MIN_X = -4992.0 # the prior west bound (war3map.w3i camera bounds). - -# Playable rectangle = war3map.w3i camera bounds, with the WEST bound extended by -# WEST_EXTEND_CELLS cells (see above). minY/maxX/maxY unchanged. -PLAYABLE = { - "minX": _PLAYABLE_CAMERA_MIN_X - WEST_EXTEND_CELLS * TILE_SPACING, - "minY": -7424.0, - "maxX": 4864.0, - "maxY": 6912.0, -} +# PLAYABLE RECTANGLE — derived from the MAP DATA, not the camera. +# +# It used to be the war3map.w3i CAMERA bounds (plus a 3-cell west fudge added so +# one shop stopped falling off the grid). That fudge was the tell: the camera +# rect is where the VIEW may scroll, and WC3 deliberately keeps it inside the +# terrain, so cropping to it silently deletes real playable map. Measured, the +# camera crop was short on ALL FOUR sides — worst 448u of navigable sea off the +# EAST lane — and it cut the Flux Repair System (-1344,-7552) off the map +# entirely (owner 2026-07-31: "the map needs to be right first, and it is not"). +# +# The rect is now computed to cover every SAILABLE wpm cell plus every placed +# STRUCTURE, padded to whole tilepoints. Self-correcting: it can never clip +# playable water or a building again, and no per-shop fudge is needed. +PLAYABLE_PAD_CELLS = 1 # whole 128u tilepoints of margin beyond the content + + +def compute_playable(wpm: dict, layout: dict, map_min_x: float, map_min_y: float) -> dict: + """Smallest tilepoint-aligned rect covering all sailable water + structures.""" + ww, wh, flags = wpm["width"], wpm["height"], wpm["flags"] + xs: list[float] = [] + ys: list[float] = [] + for sy in range(wh): + row = sy * ww + for sx in range(ww): + if not (flags[row + sx] & 0x40): + xs.append(map_min_x + sx * 32) + ys.append(map_min_y + sy * 32) + for st in layout.get("structures", []): + if st.get("x") is not None and st.get("y") is not None: + xs.append(float(st["x"])) + ys.append(float(st["y"])) + pad = PLAYABLE_PAD_CELLS * TILE_SPACING + def snap_lo(v: float) -> float: + return math.floor((v - pad - map_min_x) / TILE_SPACING) * TILE_SPACING + map_min_x + def snap_hi(v: float) -> float: + return math.ceil((v + pad - map_min_x) / TILE_SPACING) * TILE_SPACING + map_min_x + def snap_lo_y(v: float) -> float: + return math.floor((v - pad - map_min_y) / TILE_SPACING) * TILE_SPACING + map_min_y + def snap_hi_y(v: float) -> float: + return math.ceil((v + pad - map_min_y) / TILE_SPACING) * TILE_SPACING + map_min_y + return { + "minX": snap_lo(min(xs)), + "minY": snap_lo_y(min(ys)), + "maxX": snap_hi(max(xs) + 32), + "maxY": snap_hi_y(max(ys) + 32), + } + + +# Filled in by main() once the wpm + layout are read; the module-level default is +# only a placeholder for tools that import PLAYABLE before main runs. +PLAYABLE = {"minX": -5568.0, "minY": -7744.0, "maxX": 5440.0, "maxY": 6912.0} # --- minimap registration (content box -> full w3e tile-edge extent) ---------- CONTENT_X0, CONTENT_X1 = 32.0, 223.0 # non-white content cols (letterboxed x) @@ -1505,10 +1545,22 @@ def is_water_at(x: float, y: float) -> bool: # trace. Band [0.55, 0.70] (target the playable-crop NON-BLUE read). wf = water_fraction(rows) report["waterFraction"] = round(wf, 4) - if not (0.50 <= wf <= 0.62): - raise SystemExit(f"terrain: water fraction {wf:.3f} out of the wpm band [0.50, 0.62] " - "(the pathing map reads ~0.55 sailable over the playable crop; " - "well above = colour-key-style over-watering, well below = over-dry)") + # CROP-INDEPENDENT gate: compare the emitted mask against the RAW wpm + # sailable fraction over the SAME rect. An absolute band was wrong — it was + # calibrated on one particular crop, so simply widening the playable rect + # (which pulls in more border land) tripped it even though the + # classification was unchanged. What actually matters is that we neither + # over- nor under-water RELATIVE to the pathing map: the only legitimate + # additions are the minimal connectivity necks + the two west moats. + raw_wf = report.get("rawWpmWaterFraction") + if isinstance(raw_wf, float): + drift = wf - raw_wf + report["waterFractionDriftVsWpm"] = round(drift, 4) + if abs(drift) > 0.02: + raise SystemExit( + f"terrain: emitted water fraction {wf:.3f} drifts {drift:+.3f} from the raw " + f"wpm's {raw_wf:.3f} over the same crop (>|0.02|). Only minimal necks/moats " + "may be added; a drift this large means the classification changed.") def lane_runs(col_range, row_range) -> list[int]: out: list[int] = [] @@ -1927,8 +1979,11 @@ def main() -> None: w3e = parse_w3e(args.w3e.read_bytes()) layout = json.loads(args.layout.read_text()) - cols_idx, rows_idx = playable_indices(w3e, PLAYABLE) - geom = crop_geometry(w3e, cols_idx, rows_idx, PLAYABLE) + wpm = parse_wpm(args.wpm.read_bytes()) + playable = compute_playable(wpm, layout, w3e["centerX"], w3e["centerY"]) + print(f"terrain: playable rect from data: {playable}", file=sys.stderr) + cols_idx, rows_idx = playable_indices(w3e, playable) + geom = crop_geometry(w3e, cols_idx, rows_idx, playable) mm_w, mm_h, mm_px = decode_png_rgb(args.minimap) @@ -1939,7 +1994,6 @@ def main() -> None: # merged lanes the real map separates (owner-reported: the NE lane must NOT # merge into the east-edge lane; the wpm separates them, 26/26 known # anchors -- HQs/harbours/spawns/lane waypoints -- sit sailable). - wpm = parse_wpm(args.wpm.read_bytes()) sail = wpm_sailable_grid(geom, wpm, w3e["centerX"], w3e["centerY"]) # The colour key stays for depth RENDER metadata + an informational # agreement stat (how far the picture is from the pathing truth). @@ -1950,6 +2004,7 @@ def main() -> None: # rows = the working mask; keep the denoised raw wpm grid as the reference # the G2 agreement compares the final (carved) mask against. + raw_water_fraction = water_fraction(sail) rows = [list(r) for r in sail] restored = restore_straddled_channels(rows, wpm, geom, w3e["centerX"], w3e["centerY"]) removed = drop_singletons(rows, geom["cols"], geom["rows"]) @@ -1985,6 +2040,7 @@ def main() -> None: rle = [rle_encode_row(r) for r in rows] wf = water_fraction(rows) report = validate(rows, layout, geom) + report["rawWpmWaterFraction"] = round(raw_water_fraction, 4) report["necks"] = neck_report report["laneTopologyVsWpm"] = topo_report report["sideRoutes"] = confirm_side_routes(rows, ref_after_denoise, layout, geom) @@ -2066,7 +2122,7 @@ def main() -> None: "PINK (R>150 AND B>120 AND R-G>15), else SHALLOW; a water cell " "whose pixels read land-blue falls back to SHALLOW." ), - "playableBounds": PLAYABLE, + "playableBounds": playable, "bounds": geom["bounds"], "cols": geom["cols"], "rows": geom["rows"],