Repository: qiao/PathFinding.js Branch: master Commit: 2904a9afba48 Files: 78 Total size: 517.5 KB Directory structure: gitextract_jynln01x/ ├── .gitignore ├── .travis.yml ├── README.md ├── TODO ├── benchmark/ │ ├── benchmark.js │ ├── parse_map.js │ ├── parse_scen.js │ ├── scen/ │ │ ├── 64room_000.map.scen │ │ ├── arena.map.scen │ │ ├── lak304d.map.scen │ │ └── losttemple.map.scen │ └── test_cases.js ├── docs/ │ ├── contributor-guide/ │ │ ├── authors.md │ │ ├── contributing.md │ │ └── developing.md │ ├── custom.css │ ├── index.md │ └── user-guide/ │ ├── diagonal-movement.md │ ├── faq.md │ ├── getting-started.md │ ├── installation.md │ ├── introduction.md │ └── obstacles.md ├── gulpfile.js ├── index.js ├── mkdocs.yml ├── package.json ├── src/ │ ├── PathFinding.js │ ├── banner │ ├── core/ │ │ ├── DiagonalMovement.js │ │ ├── Grid.js │ │ ├── Heuristic.js │ │ ├── Node.js │ │ └── Util.js │ └── finders/ │ ├── AStarFinder.js │ ├── BestFirstFinder.js │ ├── BiAStarFinder.js │ ├── BiBestFirstFinder.js │ ├── BiBreadthFirstFinder.js │ ├── BiDijkstraFinder.js │ ├── BreadthFirstFinder.js │ ├── DijkstraFinder.js │ ├── IDAStarFinder.js │ ├── JPFAlwaysMoveDiagonally.js │ ├── JPFMoveDiagonallyIfAtMostOneObstacle.js │ ├── JPFMoveDiagonallyIfNoObstacles.js │ ├── JPFNeverMoveDiagonally.js │ ├── JumpPointFinder.js │ └── JumpPointFinderBase.js ├── test/ │ ├── Grid.js │ ├── PathTest.js │ ├── PathTestScenarios.js │ └── Util.js └── visual/ ├── Makefile ├── css/ │ └── style.css ├── doc/ │ ├── state-description.md │ └── state-diagram.gv ├── index.html ├── js/ │ ├── controller.js │ ├── main.js │ ├── panel.js │ └── view.js ├── lib/ │ ├── raphael-min.js │ └── themes/ │ ├── jquery.ui.accordion.css │ ├── jquery.ui.all.css │ ├── jquery.ui.autocomplete.css │ ├── jquery.ui.base.css │ ├── jquery.ui.button.css │ ├── jquery.ui.core.css │ ├── jquery.ui.datepicker.css │ ├── jquery.ui.dialog.css │ ├── jquery.ui.progressbar.css │ ├── jquery.ui.resizable.css │ ├── jquery.ui.selectable.css │ ├── jquery.ui.slider.css │ ├── jquery.ui.tabs.css │ └── jquery.ui.theme.css └── notsupported.html ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ *.swp node_modules/ /lib site/ release/ ================================================ FILE: .travis.yml ================================================ language: node_js node_js: - "0.11" - "0.10" before_script: - npm install -g gulp - npm install -g mocha sudo: false ================================================ FILE: README.md ================================================ PathFinding.js ============== #### A comprehensive path-finding library in javascript. #### [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/qiao/PathFinding.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://travis-ci.org/qiao/PathFinding.js.svg?branch=master)](https://travis-ci.org/qiao/PathFinding.js) [![Dependency Status](https://david-dm.org/qiao/pathfinding.js.png)](https://david-dm.org/qiao/pathfinding.js) [![Documentation Status](https://readthedocs.org/projects/pathfindingjs/badge/)](https://readthedocs.org/projects/pathfindingjs/?badge=latest) Introduction ------------ The aim of this project is to provide a path-finding library that can be easily incorporated into web games. It may run on Node.js or the browser. It comes along with an [online demo](http://qiao.github.io/PathFinding.js/visual) to show how the algorithms execute. (The pathfinding speed is slowed down in the demo) Note that this project only provides path-finding algorithms for 2D space. If you need to work in a 3D environment, then you may use [@schteppe](https://github.com/schteppe)'s [fork](https://github.com/schteppe/PathFinding3D.js). There is new documentation being written for PathFinding.js. You can read it [here](http://pathfindingjs.readthedocs.org/en/latest/). Note that this is in very early stages and far from complete so keep your eyes open for mistakes and don't hesitate to open a pull request in case you find one. Server ------ If you want to use it in Node.js, you may install it via `npm`. ```bash npm install pathfinding ``` Then, in your program: ```javascript var PF = require('pathfinding'); ``` See the `Basic Usage` section below for usage details. Browser ------- If you have bower installed then you can install it with the following command: ```bash bower install pathfinding ``` By default bower will install pathfinding under the bower_components folder, so to include it in your page do something like: ```html ``` You can also grab a release from the [Releases Page](https://github.com/imor/pathfinding-bower/releases) if you don't use bower. Basic Usage ----------- To build a grid-map of width 5 and height 3: ```javascript var grid = new PF.Grid(5, 3); ``` By default, all the nodes in the grid will be able to be walked through. To set whether a node at a given coordinate is walkable or not, use the `setWalkableAt` method. For example, to set the node at (0, 1) to be un-walkable, where 0 is the x coordinate (from left to right), and 1 is the y coordinate (from up to down): ```javascript grid.setWalkableAt(0, 1, false); ``` You may also pass in a matrix while instantiating the `PF.Grid` class. It will initiate all the nodes in the grid with the same walkability indicated by the matrix. 0 for walkable while 1 for blocked. ```javascript var matrix = [ [0, 0, 0, 1, 0], [1, 0, 0, 0, 1], [0, 0, 1, 0, 0], ]; var grid = new PF.Grid(matrix); ``` Currently there are 10 path-finders bundled in this library, namely: * `AStarFinder` * * `BestFirstFinder` * `BreadthFirstFinder` * * `DijkstraFinder` * * `IDAStarFinder.js` * * `JumpPointFinder` * * `OrthogonalJumpPointFinder` * * `BiAStarFinder` * `BiBestFirstFinder` * `BiBreadthFirstFinder` * * `BiDijkstraFinder` * The prefix `Bi` for the last four finders in the above list stands for the bi-directional searching strategy. Also, Note that only the finders with trailing asterisks are guaranteed to find the shortest path. To build a path-finder, say, the `AStarFinder`: ```javascript var finder = new PF.AStarFinder(); ``` To find a path from (1, 2) to (4, 2), (Note: both the start point and end point should be walkable): ```javascript var path = finder.findPath(1, 2, 4, 2, grid); ``` `path` will be an array of coordinates including both the start and end positions. For the `matrix` defined previously, the `path` will be: ```javascript [ [ 1, 2 ], [ 1, 1 ], [ 2, 1 ], [ 3, 1 ], [ 3, 2 ], [ 4, 2 ] ] ``` Be aware that `grid` will be modified in each path-finding, and will not be usable afterwards. If you want to use a single grid multiple times, create a clone for it before calling `findPath`. ```javascript var gridBackup = grid.clone(); ``` Advanced Usage -------------- When instantiating path-finders, you may pass in additional parameters to indicate which specific strategies to use. For all path-finders, you may indicate whether diagonal movement is allowed. The default value is `false`, which means that the path can only go orthogonally. In order to enable diagonal movement: ```javascript var finder = new PF.AStarFinder({ allowDiagonal: true }); ``` When diagonal movement is enabled, you might want to prevent the path from touching the corners of the occupied grid blocks. This is usually desirable if the objects using the path have physical width and can also move between the grid cells. To enable the corner crossing prevention: ```javascript var finder = new PF.AStarFinder({ allowDiagonal: true, dontCrossCorners: true }); ``` Note that `dontCrossCorners` only makes sense when `allowDiagonal` is also used. Currently all algorithms except `JumpPointFinder` support this feature. For `AStarFinder`, `BestFirstFinder` and all their `Bi` relatives, you may indicate which heuristic function to use. The predefined heuristics are `PF.Heuristic.manhattan`(default), `PF.Heuristic.chebyshev`, `PF.Heuristic.euclidean` and `PF.Heuristic.octile`. To use the chebyshev heuristic: ```javascript var finder = new PF.AStarFinder({ heuristic: PF.Heuristic.chebyshev }); ``` To build a `BestFirstFinder` with diagonal movement allowed and a custom heuristic function: ```javascript var finder = new PF.BestFirstFinder({ allowDiagonal: true, heuristic: function(dx, dy) { return Math.min(dx, dy); } }); ``` To smoothen the path, you may use `PF.Util.smoothenPath`. This routine will return a new path with the original one unmodified. ```javascript var newPath = PF.Util.smoothenPath(grid, path); ``` Note that the new path will be compressed as well, i.e. if the original path is `[[0, 1], [0, 2], [0, 3], [0, 4]]`, then the new path will be `[[0, 1], [0, 4]]`. To just compress a path without smoothing it, you may use `PF.Util.compressPath`. ```javascript var newPath = PF.Util.compressPath(path); ``` To expand the compressed path like `[[0, 1], [0, 4]]` back to `[[0, 1], [0, 2], [0, 3], [0, 4]]`, you may use `PF.Util.expandPath`. ```javascript var newPath = PF.Util.expandPath(path); ``` Development ------------ Layout: . |-- lib # browser distribution |-- src # source code (algorithms only) |-- test # test scripts |-- utils # build scripts |-- benchmark # benchmarks `-- visual # visualization Make sure you have `node.js` installed, then use `npm` to install the dependencies: npm install -d The build system uses gulp, so make sure you have it installed: npm install -d -g gulp To build the browser distribution: gulp compile To run the tests (algorithms only, not including the visualization) with [mocha](http://mochajs.org/) and [should.js](https://github.com/visionmedia/should.js) First install mocha: npm install -d -g mocha Then run the tests: gulp test To run the benchmarks: gulp bench Or if you are feeling lazy, the default gulp task does everything(except running the benchmarks): gulp License ------- [MIT License](http://www.opensource.org/licenses/mit-license.php) © 2011-2012 Xueqiao Xu <xueqiaoxu@gmail.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: TODO ================================================ implement IDS implement Dynamic Weighting customize heuristic functions on demo page beautify play panel ================================================ FILE: benchmark/benchmark.js ================================================ #!/usr/bin/env node var colors = require('colors'); var PF = require('..'); var parseMap = require('./parse_map').parse; var parseScen = require('./parse_scen').parse; var testCases = require('./test_cases'); var path = require('path'); function profile(callback) { var startTime = Date.now(); ret = callback(); var endTime = Date.now(); return { returnValue: ret, time: endTime - startTime }; } /** * @param {object} opt * @param {string} opt.header * @param {string} opt.footer * @param {PF.*Finder} opt.finder * @param {PF.Grid} opt.grid * @param {number} opt.startX * @param {number} opt.startY * @param {number} opt.endX * @param {number} opt.endY */ function benchmark(opt) { var result = profile(function() { return opt.finder.findPath( opt.startX, opt.startY, opt.endX, opt.endY, opt.grid ); }); var fields = [ opt.header, (''+result.time + 'ms').yellow, 'length' , formatFloat(PF.Util.pathLength(result.returnValue)), opt.footer, ]; console.log(fields.join(' ')); } function formatFloat(float) { return Math.round(float * 1000) / 1000; } function map2grid(map) { return new PF.Grid(map.width, map.height, map.grid); } testCases.forEach(function(test) { var grid = map2grid(parseMap(path.join(__dirname, test.map))); var scens = parseScen(path.join(__dirname, test.scen)).scenarios; var select = test.select; select.forEach(function(id) { var scen = scens[id]; var result = benchmark({ header: 'AStarFinder', finder: new PF.AStarFinder({allowDiagonal: true}), grid: grid, startX: scen.startX, startY: scen.startY, endX: scen.endX, endY: scen.endY, footer: '(optimal: '.grey + (''+scen.length).green + ')'.grey }); }); }); ================================================ FILE: benchmark/parse_map.js ================================================ #!/usr/bin/env node /** * Convert the `map` files into json * * All maps begin with the lines: * * type octile * height x * width y * map * * where x and y are the repsective height and width of the map. * * The map data is store as an ASCII grid. The following characters are possible: * * . - passable terrain * G - passable terrain * @ - out of bounds * O - out of bounds * T - trees (unpassable) * S - swamp (passable from regular terrain) * W - water (traversable, but not passable from terrain) * */ /** * Implementation note: * For convenience, only '.' and 'G' are interpreted as walkable. */ var fs = require('fs'); var endOfLine = require('os').EOL; function parse(filename) { var content = fs.readFileSync(filename).toString(); var lines = content.split(endOfLine); return { height : parseInt(lines[1].split(' ')[1]), width : parseInt(lines[2].split(' ')[1]), grid : parseGrid(lines.slice(4)), }; } exports.parse = parse; function parseGrid(lines) { var grid = []; lines.forEach(function(line) { if (!line.length) { return; } var row = []; line.split('').forEach(function(char) { row.push(char in { '.': 1, 'G': 1 } ? 0 : 1); }); grid.push(row); }); return grid; } function splitext(filename) { var index = filename.lastIndexOf('.'); if (index < 0) { return [filename, '']; } else { return [filename.substr(0, index), filename.substr(index)]; } } function main(argv) { var filename = argv[2]; var obj = parse(filename); var root = splitext(filename)[0]; fs.writeFileSync(root + '.json', JSON.stringify(obj)); } if (!module.parent) { main(process.argv); } ================================================ FILE: benchmark/parse_scen.js ================================================ #!/usr/bin/env node /** * The scenario files have the following format. * The begin with the text "version x.x". This document describes version 1.0. * The trailing 0 is optional. * * Each line of a scenario has 9 fields: * * Bucket * map * map width * map height * start x-coordinate * start y-coordinate * goal x-coordinate * goal y-coordinate * optimal length */ var fs = require('fs'); function parse(filename) { var content = fs.readFileSync(filename).toString(); var lines = content.split('\n'); var version = lines[1].split(/\s+/); return { version: version, scenarios: lines.slice(1, lines.length - 1).map(parseLine) }; } function parseLine(line) { var fields = line.split(/\s+/); return { bucket: parseInt(fields[0]), map: fields[1], width: parseInt(fields[2]), height: parseInt(fields[3]), startX: parseInt(fields[4]), startY: parseInt(fields[5]), endX: parseInt(fields[6]), endY: parseInt(fields[7]), length: parseFloat(fields[8]) }; } exports.parse = parse; ================================================ FILE: benchmark/scen/64room_000.map.scen ================================================ version 1 1 maps/rooms/64room_000.map 512 512 210 389 214 389 4 1 maps/rooms/64room_000.map 512 512 137 295 134 292 4.24264 1 maps/rooms/64room_000.map 512 512 71 507 65 510 7.24264 1 maps/rooms/64room_000.map 512 512 474 427 469 426 5.41421 1 maps/rooms/64room_000.map 512 512 291 14 295 15 4.41421 1 maps/rooms/64room_000.map 512 512 227 214 225 220 6.82843 1 maps/rooms/64room_000.map 512 512 68 315 74 316 6.41421 1 maps/rooms/64room_000.map 512 512 456 113 456 108 5 1 maps/rooms/64room_000.map 512 512 393 111 397 110 4.41421 1 maps/rooms/64room_000.map 512 512 262 146 263 142 4.41421 2 maps/rooms/64room_000.map 512 512 44 124 52 122 8.82843 2 maps/rooms/64room_000.map 512 512 370 293 371 282 11.4142 2 maps/rooms/64room_000.map 512 512 328 324 328 334 10 2 maps/rooms/64room_000.map 512 512 343 130 339 138 9.65685 2 maps/rooms/64room_000.map 512 512 45 333 49 323 11.6569 2 maps/rooms/64room_000.map 512 512 111 85 106 79 8.07107 2 maps/rooms/64room_000.map 512 512 41 143 43 152 9.82843 2 maps/rooms/64room_000.map 512 512 374 461 374 471 10 2 maps/rooms/64room_000.map 512 512 416 492 412 484 9.65685 2 maps/rooms/64room_000.map 512 512 496 399 488 404 10.0711 3 maps/rooms/64room_000.map 512 512 47 370 58 376 13.4853 3 maps/rooms/64room_000.map 512 512 204 140 215 131 14.7279 3 maps/rooms/64room_000.map 512 512 132 5 144 7 12.8284 3 maps/rooms/64room_000.map 512 512 26 497 13 500 14.2426 3 maps/rooms/64room_000.map 512 512 430 354 437 365 13.8995 3 maps/rooms/64room_000.map 512 512 44 376 36 367 12.3137 3 maps/rooms/64room_000.map 512 512 96 96 98 83 13.8284 3 maps/rooms/64room_000.map 512 512 500 81 509 93 15.7279 3 maps/rooms/64room_000.map 512 512 474 158 460 156 14.8284 3 maps/rooms/64room_000.map 512 512 342 154 344 166 12.8284 4 maps/rooms/64room_000.map 512 512 311 287 304 302 17.8995 4 maps/rooms/64room_000.map 512 512 343 313 324 312 19.4142 4 maps/rooms/64room_000.map 512 512 52 462 38 456 16.4853 4 maps/rooms/64room_000.map 512 512 488 360 491 377 18.2426 4 maps/rooms/64room_000.map 512 512 359 187 377 187 18 4 maps/rooms/64room_000.map 512 512 398 39 391 25 16.8995 4 maps/rooms/64room_000.map 512 512 38 102 38 118 16 4 maps/rooms/64room_000.map 512 512 99 184 84 192 18.8995 4 maps/rooms/64room_000.map 512 512 407 338 389 341 19.2426 4 maps/rooms/64room_000.map 512 512 184 276 184 292 16 5 maps/rooms/64room_000.map 512 512 163 347 182 344 20.2426 5 maps/rooms/64room_000.map 512 512 259 404 281 404 22 5 maps/rooms/64room_000.map 512 512 410 136 406 156 21.6569 5 maps/rooms/64room_000.map 512 512 342 207 336 190 23.8284 5 maps/rooms/64room_000.map 512 512 277 218 276 196 22.4142 5 maps/rooms/64room_000.map 512 512 194 147 204 129 22.1421 5 maps/rooms/64room_000.map 512 512 94 511 77 496 23.2132 5 maps/rooms/64room_000.map 512 512 208 97 231 97 23 5 maps/rooms/64room_000.map 512 512 420 47 400 38 23.7279 5 maps/rooms/64room_000.map 512 512 415 170 438 170 23 6 maps/rooms/64room_000.map 512 512 334 335 360 333 26.8284 6 maps/rooms/64room_000.map 512 512 477 148 468 169 24.7279 6 maps/rooms/64room_000.map 512 512 252 202 226 204 26.8284 6 maps/rooms/64room_000.map 512 512 433 284 433 259 25 6 maps/rooms/64room_000.map 512 512 395 495 401 471 26.4853 6 maps/rooms/64room_000.map 512 512 110 493 132 497 26.1421 6 maps/rooms/64room_000.map 512 512 229 284 210 265 26.8701 6 maps/rooms/64room_000.map 512 512 223 476 205 458 25.4558 6 maps/rooms/64room_000.map 512 512 152 497 162 477 24.1421 6 maps/rooms/64room_000.map 512 512 451 247 444 225 26.6569 7 maps/rooms/64room_000.map 512 512 121 155 103 178 30.4558 7 maps/rooms/64room_000.map 512 512 58 463 78 482 29.6274 7 maps/rooms/64room_000.map 512 512 154 418 149 447 31.0711 7 maps/rooms/64room_000.map 512 512 329 275 352 290 29.2132 7 maps/rooms/64room_000.map 512 512 366 190 378 166 28.9706 7 maps/rooms/64room_000.map 512 512 333 423 324 398 28.7279 7 maps/rooms/64room_000.map 512 512 279 188 277 157 31.8284 7 maps/rooms/64room_000.map 512 512 397 416 403 387 31.4853 7 maps/rooms/64room_000.map 512 512 105 136 97 162 29.3137 7 maps/rooms/64room_000.map 512 512 478 377 508 379 30.8284 8 maps/rooms/64room_000.map 512 512 370 455 376 428 33.7279 8 maps/rooms/64room_000.map 512 512 29 211 45 237 32.6274 8 maps/rooms/64room_000.map 512 512 169 65 140 76 33.5563 8 maps/rooms/64room_000.map 512 512 195 59 179 32 34.799 8 maps/rooms/64room_000.map 512 512 421 371 391 380 33.7279 8 maps/rooms/64room_000.map 512 512 124 350 108 321 35.6274 8 maps/rooms/64room_000.map 512 512 346 325 325 308 35.799 8 maps/rooms/64room_000.map 512 512 105 162 80 180 32.4558 8 maps/rooms/64room_000.map 512 512 1 475 30 491 35.6274 8 maps/rooms/64room_000.map 512 512 251 233 247 200 34.6569 9 maps/rooms/64room_000.map 512 512 88 325 90 311 38.9706 9 maps/rooms/64room_000.map 512 512 58 484 79 459 38.9706 9 maps/rooms/64room_000.map 512 512 74 342 55 312 39.0416 9 maps/rooms/64room_000.map 512 512 243 300 232 268 36.5563 9 maps/rooms/64room_000.map 512 512 500 472 497 438 38.5563 9 maps/rooms/64room_000.map 512 512 72 283 97 309 36.3553 9 maps/rooms/64room_000.map 512 512 50 91 15 82 38.7279 9 maps/rooms/64room_000.map 512 512 505 268 471 273 36.0711 9 maps/rooms/64room_000.map 512 512 84 199 87 235 37.2426 9 maps/rooms/64room_000.map 512 512 433 255 420 223 37.3848 10 maps/rooms/64room_000.map 512 512 441 78 411 48 43.598 10 maps/rooms/64room_000.map 512 512 65 191 67 151 40.8284 10 maps/rooms/64room_000.map 512 512 156 447 145 460 41.5563 10 maps/rooms/64room_000.map 512 512 508 432 477 405 42.1838 10 maps/rooms/64room_000.map 512 512 174 156 142 183 43.1838 10 maps/rooms/64room_000.map 512 512 243 183 205 177 40.4853 10 maps/rooms/64room_000.map 512 512 377 316 361 279 43.6274 10 maps/rooms/64room_000.map 512 512 303 407 318 442 41.2132 10 maps/rooms/64room_000.map 512 512 116 304 118 262 42.8284 10 maps/rooms/64room_000.map 512 512 148 267 171 244 43.799 11 maps/rooms/64room_000.map 512 512 313 176 304 134 45.7279 11 maps/rooms/64room_000.map 512 512 80 30 119 14 45.6274 11 maps/rooms/64room_000.map 512 512 463 446 502 430 45.6274 11 maps/rooms/64room_000.map 512 512 184 235 157 200 46.1838 11 maps/rooms/64room_000.map 512 512 123 391 118 435 46.0711 11 maps/rooms/64room_000.map 512 512 18 233 59 220 46.3848 11 maps/rooms/64room_000.map 512 512 72 415 74 460 47.4853 11 maps/rooms/64room_000.map 512 512 215 238 207 280 47.799 11 maps/rooms/64room_000.map 512 512 337 346 380 354 46.3137 11 maps/rooms/64room_000.map 512 512 253 261 218 291 47.4264 12 maps/rooms/64room_000.map 512 512 452 14 467 59 51.2132 12 maps/rooms/64room_000.map 512 512 469 214 441 205 51.8701 12 maps/rooms/64room_000.map 512 512 315 118 306 70 51.7279 12 maps/rooms/64room_000.map 512 512 187 102 221 102 48.6274 12 maps/rooms/64room_000.map 512 512 206 63 237 27 48.8406 12 maps/rooms/64room_000.map 512 512 107 145 152 141 49.9706 12 maps/rooms/64room_000.map 512 512 362 365 333 328 49.0122 12 maps/rooms/64room_000.map 512 512 70 299 87 342 50.0416 12 maps/rooms/64room_000.map 512 512 389 118 415 77 51.7696 12 maps/rooms/64room_000.map 512 512 507 116 488 157 50.5269 13 maps/rooms/64room_000.map 512 512 78 152 125 168 53.6274 13 maps/rooms/64room_000.map 512 512 48 189 41 136 55.8995 13 maps/rooms/64room_000.map 512 512 261 235 220 203 54.2548 13 maps/rooms/64room_000.map 512 512 155 257 156 218 53.5563 13 maps/rooms/64room_000.map 512 512 299 432 348 444 53.9706 13 maps/rooms/64room_000.map 512 512 213 334 171 348 54.1838 13 maps/rooms/64room_000.map 512 512 385 113 410 157 54.3553 13 maps/rooms/64room_000.map 512 512 171 329 183 380 55.9706 13 maps/rooms/64room_000.map 512 512 172 211 213 247 55.9117 13 maps/rooms/64room_000.map 512 512 400 235 443 206 55.0122 14 maps/rooms/64room_000.map 512 512 503 44 492 91 58.1838 14 maps/rooms/64room_000.map 512 512 401 398 381 387 58.4558 14 maps/rooms/64room_000.map 512 512 393 52 372 84 57.0416 14 maps/rooms/64room_000.map 512 512 442 228 447 186 58.8995 14 maps/rooms/64room_000.map 512 512 62 435 14 454 57.0416 14 maps/rooms/64room_000.map 512 512 291 52 259 6 59.2548 14 maps/rooms/64room_000.map 512 512 335 276 352 224 59.0416 14 maps/rooms/64room_000.map 512 512 489 219 456 180 58.1838 14 maps/rooms/64room_000.map 512 512 213 80 199 35 57.2843 14 maps/rooms/64room_000.map 512 512 106 5 107 62 57.4142 15 maps/rooms/64room_000.map 512 512 454 354 445 366 60.8995 15 maps/rooms/64room_000.map 512 512 387 147 362 151 61.5269 15 maps/rooms/64room_000.map 512 512 436 377 387 344 62.669 15 maps/rooms/64room_000.map 512 512 396 395 353 430 63.9411 15 maps/rooms/64room_000.map 512 512 490 180 443 177 63.2132 15 maps/rooms/64room_000.map 512 512 353 68 410 63 61.8995 15 maps/rooms/64room_000.map 512 512 243 198 272 227 60.8701 15 maps/rooms/64room_000.map 512 512 120 149 66 130 61.8701 15 maps/rooms/64room_000.map 512 512 310 209 291 265 63.8701 15 maps/rooms/64room_000.map 512 512 310 170 262 140 60.4264 16 maps/rooms/64room_000.map 512 512 291 195 310 152 65.0711 16 maps/rooms/64room_000.map 512 512 178 112 243 119 67.8995 16 maps/rooms/64room_000.map 512 512 350 52 359 108 67.0416 16 maps/rooms/64room_000.map 512 512 79 337 50 288 65.1127 16 maps/rooms/64room_000.map 512 512 475 72 430 120 67.8112 16 maps/rooms/64room_000.map 512 512 380 333 441 338 66.9706 16 maps/rooms/64room_000.map 512 512 69 352 101 313 65.1421 16 maps/rooms/64room_000.map 512 512 372 125 325 156 64.5269 16 maps/rooms/64room_000.map 512 512 508 381 453 355 65.7696 16 maps/rooms/64room_000.map 512 512 507 118 455 82 66.9117 17 maps/rooms/64room_000.map 512 512 167 193 115 219 70.3848 17 maps/rooms/64room_000.map 512 512 189 114 244 145 69.0122 17 maps/rooms/64room_000.map 512 512 317 259 273 218 70.9411 17 maps/rooms/64room_000.map 512 512 45 505 37 447 70.2426 17 maps/rooms/64room_000.map 512 512 419 59 396 109 68.4975 17 maps/rooms/64room_000.map 512 512 280 416 232 416 71.0538 17 maps/rooms/64room_000.map 512 512 371 357 338 302 68.669 17 maps/rooms/64room_000.map 512 512 61 358 37 297 70.9411 17 maps/rooms/64room_000.map 512 512 295 229 277 292 70.4558 17 maps/rooms/64room_000.map 512 512 188 386 154 330 71.8406 18 maps/rooms/64room_000.map 512 512 350 301 284 291 74.2843 18 maps/rooms/64room_000.map 512 512 286 205 282 174 72.0122 18 maps/rooms/64room_000.map 512 512 177 411 235 410 72.8406 18 maps/rooms/64room_000.map 512 512 349 79 421 82 73.2426 18 maps/rooms/64room_000.map 512 512 193 103 223 52 73.9706 18 maps/rooms/64room_000.map 512 512 386 184 329 191 73.4558 18 maps/rooms/64room_000.map 512 512 48 268 36 246 74.2843 18 maps/rooms/64room_000.map 512 512 266 53 245 69 73.0833 18 maps/rooms/64room_000.map 512 512 200 65 139 61 75.7279 18 maps/rooms/64room_000.map 512 512 206 481 213 417 72.6985 19 maps/rooms/64room_000.map 512 512 238 424 293 392 78.4558 19 maps/rooms/64room_000.map 512 512 431 493 366 464 77.0122 19 maps/rooms/64room_000.map 512 512 335 284 266 308 78.9411 19 maps/rooms/64room_000.map 512 512 113 138 59 103 77.8701 19 maps/rooms/64room_000.map 512 512 349 273 344 203 79.5269 19 maps/rooms/64room_000.map 512 512 268 171 235 130 79.8406 19 maps/rooms/64room_000.map 512 512 54 136 10 109 79.6274 19 maps/rooms/64room_000.map 512 512 409 420 382 463 76.1421 19 maps/rooms/64room_000.map 512 512 227 189 177 211 78.7107 19 maps/rooms/64room_000.map 512 512 26 59 74 60 76.2548 20 maps/rooms/64room_000.map 512 512 77 273 43 338 83.7696 20 maps/rooms/64room_000.map 512 512 70 342 46 272 81.1127 20 maps/rooms/64room_000.map 512 512 349 293 276 270 82.5269 20 maps/rooms/64room_000.map 512 512 441 176 508 182 82.2132 20 maps/rooms/64room_000.map 512 512 144 17 200 39 80.8112 20 maps/rooms/64room_000.map 512 512 325 62 359 101 80.8995 20 maps/rooms/64room_000.map 512 512 276 111 312 56 82.2132 20 maps/rooms/64room_000.map 512 512 399 1 368 63 83.6274 20 maps/rooms/64room_000.map 512 512 491 414 452 464 83.0416 20 maps/rooms/64room_000.map 512 512 96 267 167 275 82.598 21 maps/rooms/64room_000.map 512 512 40 280 27 339 84.0833 21 maps/rooms/64room_000.map 512 512 193 233 255 292 87.6102 21 maps/rooms/64room_000.map 512 512 342 444 258 447 85.2426 21 maps/rooms/64room_000.map 512 512 502 422 474 498 87.598 21 maps/rooms/64room_000.map 512 512 96 244 96 166 87.9411 21 maps/rooms/64room_000.map 512 512 18 60 54 120 85.8822 21 maps/rooms/64room_000.map 512 512 459 443 492 495 84.0711 21 maps/rooms/64room_000.map 512 512 432 316 362 279 85.3259 21 maps/rooms/64room_000.map 512 512 71 290 126 326 86.8995 21 maps/rooms/64room_000.map 512 512 240 178 258 246 85.7401 22 maps/rooms/64room_000.map 512 512 305 389 242 358 89.2132 22 maps/rooms/64room_000.map 512 512 52 417 113 409 88.9828 22 maps/rooms/64room_000.map 512 512 509 226 434 191 90.669 22 maps/rooms/64room_000.map 512 512 432 254 376 239 89.2254 22 maps/rooms/64room_000.map 512 512 244 251 163 225 91.7696 22 maps/rooms/64room_000.map 512 512 417 150 375 215 91.0833 22 maps/rooms/64room_000.map 512 512 123 161 69 225 91.6396 22 maps/rooms/64room_000.map 512 512 409 430 462 385 90.3848 22 maps/rooms/64room_000.map 512 512 288 193 296 278 88.3137 22 maps/rooms/64room_000.map 512 512 189 475 114 487 90.7401 23 maps/rooms/64room_000.map 512 512 171 429 152 360 92.9117 23 maps/rooms/64room_000.map 512 512 303 126 265 50 95.2548 23 maps/rooms/64room_000.map 512 512 141 338 219 329 95.8112 23 maps/rooms/64room_000.map 512 512 98 240 151 294 92.9411 23 maps/rooms/64room_000.map 512 512 67 267 25 321 94.2426 23 maps/rooms/64room_000.map 512 512 304 314 235 271 94.4264 23 maps/rooms/64room_000.map 512 512 324 311 299 232 93.8406 23 maps/rooms/64room_000.map 512 512 254 49 315 8 92.6274 23 maps/rooms/64room_000.map 512 512 315 433 242 402 94.9533 23 maps/rooms/64room_000.map 512 512 243 372 160 346 93.7696 24 maps/rooms/64room_000.map 512 512 409 152 370 233 98.3259 24 maps/rooms/64room_000.map 512 512 119 126 181 96 99.8822 24 maps/rooms/64room_000.map 512 512 76 374 107 304 96.4558 24 maps/rooms/64room_000.map 512 512 464 447 471 505 96.1127 24 maps/rooms/64room_000.map 512 512 495 46 449 93 99.2254 24 maps/rooms/64room_000.map 512 512 438 497 370 441 99.397 24 maps/rooms/64room_000.map 512 512 35 84 101 71 99.5097 24 maps/rooms/64room_000.map 512 512 505 181 415 182 97.8701 24 maps/rooms/64room_000.map 512 512 30 402 12 328 97.598 24 maps/rooms/64room_000.map 512 512 340 331 363 419 97.5269 25 maps/rooms/64room_000.map 512 512 407 141 355 87 100.184 25 maps/rooms/64room_000.map 512 512 386 426 303 443 103.012 25 maps/rooms/64room_000.map 512 512 411 250 416 152 101.728 25 maps/rooms/64room_000.map 512 512 284 187 244 225 100.184 25 maps/rooms/64room_000.map 512 512 346 304 434 270 102.083 25 maps/rooms/64room_000.map 512 512 350 147 394 208 100.439 25 maps/rooms/64room_000.map 512 512 154 259 60 240 103.042 25 maps/rooms/64room_000.map 512 512 375 72 356 158 102.154 25 maps/rooms/64room_000.map 512 512 36 272 44 362 103.255 25 maps/rooms/64room_000.map 512 512 140 292 98 224 102.385 26 maps/rooms/64room_000.map 512 512 34 410 119 416 106.539 26 maps/rooms/64room_000.map 512 512 378 55 335 138 104.912 26 maps/rooms/64room_000.map 512 512 92 92 30 26 106.326 26 maps/rooms/64room_000.map 512 512 374 137 376 202 105.569 26 maps/rooms/64room_000.map 512 512 112 282 85 189 105.012 26 maps/rooms/64room_000.map 512 512 357 392 445 403 104.154 26 maps/rooms/64room_000.map 512 512 416 338 501 304 106.113 26 maps/rooms/64room_000.map 512 512 265 437 221 430 104.397 26 maps/rooms/64room_000.map 512 512 461 273 408 337 107.042 26 maps/rooms/64room_000.map 512 512 435 234 470 146 106.598 27 maps/rooms/64room_000.map 512 512 462 144 484 241 111.912 27 maps/rooms/64room_000.map 512 512 334 108 264 138 111.698 27 maps/rooms/64room_000.map 512 512 248 95 187 69 111.527 27 maps/rooms/64room_000.map 512 512 80 218 141 287 111.255 27 maps/rooms/64room_000.map 512 512 474 408 381 412 111.326 27 maps/rooms/64room_000.map 512 512 208 69 262 13 109.296 27 maps/rooms/64room_000.map 512 512 332 195 428 164 110.012 27 maps/rooms/64room_000.map 512 512 379 90 417 168 110.912 27 maps/rooms/64room_000.map 512 512 16 297 23 194 110.87 27 maps/rooms/64room_000.map 512 512 200 65 293 56 109.497 28 maps/rooms/64room_000.map 512 512 121 499 20 465 115.083 28 maps/rooms/64room_000.map 512 512 210 300 312 280 113.598 28 maps/rooms/64room_000.map 512 512 398 19 378 102 112.598 28 maps/rooms/64room_000.map 512 512 175 102 222 35 113.983 28 maps/rooms/64room_000.map 512 512 129 127 227 135 113.255 28 maps/rooms/64room_000.map 512 512 327 466 398 406 112.255 28 maps/rooms/64room_000.map 512 512 206 415 205 351 113.426 28 maps/rooms/64room_000.map 512 512 9 77 44 171 115.711 28 maps/rooms/64room_000.map 512 512 382 93 291 53 115.184 28 maps/rooms/64room_000.map 512 512 333 305 308 204 114.77 29 maps/rooms/64room_000.map 512 512 399 318 302 281 117.012 29 maps/rooms/64room_000.map 512 512 186 396 174 283 117.971 29 maps/rooms/64room_000.map 512 512 423 61 510 116 118.569 29 maps/rooms/64room_000.map 512 512 491 360 438 415 118.083 29 maps/rooms/64room_000.map 512 512 339 21 376 122 116.326 29 maps/rooms/64room_000.map 512 512 333 194 441 212 119.598 29 maps/rooms/64room_000.map 512 512 453 327 375 299 116.385 29 maps/rooms/64room_000.map 512 512 55 215 99 169 119.397 29 maps/rooms/64room_000.map 512 512 213 402 311 430 118.711 29 maps/rooms/64room_000.map 512 512 463 364 426 316 116.497 30 maps/rooms/64room_000.map 512 512 354 222 326 125 121.627 30 maps/rooms/64room_000.map 512 512 405 416 457 362 121.113 30 maps/rooms/64room_000.map 512 512 396 187 310 144 120.924 30 maps/rooms/64room_000.map 512 512 100 61 34 86 123.326 30 maps/rooms/64room_000.map 512 512 424 433 455 335 123.728 30 maps/rooms/64room_000.map 512 512 47 396 21 323 120.841 30 maps/rooms/64room_000.map 512 512 287 211 253 311 121.882 30 maps/rooms/64room_000.map 512 512 430 494 323 475 123.154 30 maps/rooms/64room_000.map 512 512 60 423 139 504 121.338 30 maps/rooms/64room_000.map 512 512 430 380 354 390 122.426 31 maps/rooms/64room_000.map 512 512 231 154 268 101 124.267 31 maps/rooms/64room_000.map 512 512 83 383 9 316 124.598 31 maps/rooms/64room_000.map 512 512 166 252 234 298 125.338 31 maps/rooms/64room_000.map 512 512 47 147 10 59 127.184 31 maps/rooms/64room_000.map 512 512 118 397 60 386 126.64 31 maps/rooms/64room_000.map 512 512 331 112 332 13 126.752 31 maps/rooms/64room_000.map 512 512 233 211 323 219 125.255 31 maps/rooms/64room_000.map 512 512 179 149 194 85 127.083 31 maps/rooms/64room_000.map 512 512 511 252 398 234 126.255 31 maps/rooms/64room_000.map 512 512 115 385 160 342 126.225 32 maps/rooms/64room_000.map 512 512 3 402 91 495 130.622 32 maps/rooms/64room_000.map 512 512 188 224 122 248 129.497 32 maps/rooms/64room_000.map 512 512 247 129 133 134 130.841 32 maps/rooms/64room_000.map 512 512 444 307 385 343 131.627 32 maps/rooms/64room_000.map 512 512 430 259 468 372 129.912 32 maps/rooms/64room_000.map 512 512 131 348 255 346 130.627 32 maps/rooms/64room_000.map 512 512 228 182 138 199 128.095 32 maps/rooms/64room_000.map 512 512 204 94 157 174 129.912 32 maps/rooms/64room_000.map 512 512 86 175 41 200 128.811 32 maps/rooms/64room_000.map 512 512 183 124 71 169 131.811 33 maps/rooms/64room_000.map 512 512 283 62 238 152 134.823 33 maps/rooms/64room_000.map 512 512 323 323 435 379 135.196 33 maps/rooms/64room_000.map 512 512 309 55 197 103 133.054 33 maps/rooms/64room_000.map 512 512 277 236 238 138 133.326 33 maps/rooms/64room_000.map 512 512 228 160 329 135 135.38 33 maps/rooms/64room_000.map 512 512 271 186 230 88 132.539 33 maps/rooms/64room_000.map 512 512 247 309 165 234 135.267 33 maps/rooms/64room_000.map 512 512 292 200 347 309 133.539 33 maps/rooms/64room_000.map 512 512 293 270 369 366 134.51 33 maps/rooms/64room_000.map 512 512 445 340 329 304 132.083 34 maps/rooms/64room_000.map 512 512 406 428 459 464 137.083 34 maps/rooms/64room_000.map 512 512 239 123 157 26 136.238 34 maps/rooms/64room_000.map 512 512 352 125 442 198 139.267 34 maps/rooms/64room_000.map 512 512 361 338 378 250 138.841 34 maps/rooms/64room_000.map 512 512 247 75 245 190 138.196 34 maps/rooms/64room_000.map 512 512 356 396 341 265 137.213 34 maps/rooms/64room_000.map 512 512 92 317 44 218 139.569 34 maps/rooms/64room_000.map 512 512 482 252 362 205 139.468 34 maps/rooms/64room_000.map 512 512 153 317 196 217 136.154 34 maps/rooms/64room_000.map 512 512 279 133 263 226 137.752 35 maps/rooms/64room_000.map 512 512 354 405 317 281 140.497 35 maps/rooms/64room_000.map 512 512 295 59 386 116 140.083 35 maps/rooms/64room_000.map 512 512 244 13 233 118 141.865 35 maps/rooms/64room_000.map 512 512 86 337 53 431 140.924 35 maps/rooms/64room_000.map 512 512 244 142 285 238 140.64 35 maps/rooms/64room_000.map 512 512 308 295 437 286 141.012 35 maps/rooms/64room_000.map 512 512 211 299 166 416 141.74 35 maps/rooms/64room_000.map 512 512 176 27 154 97 142.083 35 maps/rooms/64room_000.map 512 512 332 25 387 131 140.681 35 maps/rooms/64room_000.map 512 512 430 81 370 149 142.024 36 maps/rooms/64room_000.map 512 512 356 93 479 126 145.782 36 maps/rooms/64room_000.map 512 512 139 144 247 68 145.924 36 maps/rooms/64room_000.map 512 512 309 443 352 510 145.841 36 maps/rooms/64room_000.map 512 512 124 137 2 83 145.539 36 maps/rooms/64room_000.map 512 512 379 97 369 206 144.054 36 maps/rooms/64room_000.map 512 512 431 253 351 154 144.439 36 maps/rooms/64room_000.map 512 512 84 281 133 366 147.213 36 maps/rooms/64room_000.map 512 512 112 264 5 282 146.74 36 maps/rooms/64room_000.map 512 512 101 507 15 399 144.794 36 maps/rooms/64room_000.map 512 512 227 101 296 175 145.368 37 maps/rooms/64room_000.map 512 512 244 223 142 290 148.497 37 maps/rooms/64room_000.map 512 512 305 202 413 218 150.569 37 maps/rooms/64room_000.map 512 512 451 263 386 372 149.397 37 maps/rooms/64room_000.map 512 512 451 123 382 180 151.397 37 maps/rooms/64room_000.map 512 512 329 229 375 360 150.054 37 maps/rooms/64room_000.map 512 512 458 509 434 447 151.924 37 maps/rooms/64room_000.map 512 512 423 274 319 254 148.652 37 maps/rooms/64room_000.map 512 512 349 471 297 407 148.468 37 maps/rooms/64room_000.map 512 512 323 355 285 435 151.095 37 maps/rooms/64room_000.map 512 512 114 145 122 55 151.296 38 maps/rooms/64room_000.map 512 512 359 324 237 315 153.853 38 maps/rooms/64room_000.map 512 512 358 159 325 53 152.983 38 maps/rooms/64room_000.map 512 512 330 303 372 174 153.426 38 maps/rooms/64room_000.map 512 512 159 316 58 329 155.556 38 maps/rooms/64room_000.map 512 512 102 467 70 360 154.581 38 maps/rooms/64room_000.map 512 512 159 371 161 475 155.865 38 maps/rooms/64room_000.map 512 512 163 13 204 133 155.61 38 maps/rooms/64room_000.map 512 512 276 439 343 471 153.426 38 maps/rooms/64room_000.map 512 512 96 308 190 339 154.012 38 maps/rooms/64room_000.map 512 512 292 241 398 168 154.054 39 maps/rooms/64room_000.map 512 512 251 224 158 289 158.225 39 maps/rooms/64room_000.map 512 512 153 467 156 353 156.179 39 maps/rooms/64room_000.map 512 512 294 228 422 299 158.581 39 maps/rooms/64room_000.map 512 512 151 293 37 213 158.267 39 maps/rooms/64room_000.map 512 512 228 305 160 415 157.154 39 maps/rooms/64room_000.map 512 512 338 187 438 100 157.711 39 maps/rooms/64room_000.map 512 512 142 266 26 343 156.522 39 maps/rooms/64room_000.map 512 512 35 314 38 410 159.208 39 maps/rooms/64room_000.map 512 512 261 160 153 202 158.409 39 maps/rooms/64room_000.map 512 512 341 354 271 231 159.794 40 maps/rooms/64room_000.map 512 512 340 241 219 281 160.841 40 maps/rooms/64room_000.map 512 512 392 257 272 290 160.698 40 maps/rooms/64room_000.map 512 512 52 194 143 237 162.77 40 maps/rooms/64room_000.map 512 512 465 132 364 219 163.397 40 maps/rooms/64room_000.map 512 512 285 289 210 182 163.338 40 maps/rooms/64room_000.map 512 512 152 183 207 141 161.225 40 maps/rooms/64room_000.map 512 512 162 504 27 440 163.51 40 maps/rooms/64room_000.map 512 512 251 204 364 203 160.125 40 maps/rooms/64room_000.map 512 512 338 151 310 293 160.083 40 maps/rooms/64room_000.map 512 512 141 58 231 144 160.811 41 maps/rooms/64room_000.map 512 512 420 172 333 62 165.953 41 maps/rooms/64room_000.map 512 512 65 293 13 423 166.167 41 maps/rooms/64room_000.map 512 512 413 220 354 317 164.853 41 maps/rooms/64room_000.map 512 512 266 147 369 199 164.054 41 maps/rooms/64room_000.map 512 512 367 289 280 168 164.652 41 maps/rooms/64room_000.map 512 512 451 222 503 81 167.51 41 maps/rooms/64room_000.map 512 512 159 80 70 194 164.338 41 maps/rooms/64room_000.map 512 512 250 101 226 244 165.569 41 maps/rooms/64room_000.map 512 512 112 374 89 238 167.894 41 maps/rooms/64room_000.map 512 512 118 341 165 431 166.38 42 maps/rooms/64room_000.map 512 512 338 274 463 331 170.527 42 maps/rooms/64room_000.map 512 512 180 359 185 460 169.338 42 maps/rooms/64room_000.map 512 512 344 316 492 370 171.539 42 maps/rooms/64room_000.map 512 512 139 164 71 249 168.338 42 maps/rooms/64room_000.map 512 512 439 459 433 442 170.154 42 maps/rooms/64room_000.map 512 512 115 259 193 383 168.51 42 maps/rooms/64room_000.map 512 512 287 412 422 477 170.125 42 maps/rooms/64room_000.map 512 512 396 475 347 329 168.054 42 maps/rooms/64room_000.map 512 512 88 173 36 266 170.64 42 maps/rooms/64room_000.map 512 512 484 190 395 81 168.953 43 maps/rooms/64room_000.map 512 512 127 226 155 167 173.25 43 maps/rooms/64room_000.map 512 512 249 187 275 301 175.782 43 maps/rooms/64room_000.map 512 512 140 135 105 16 174.551 43 maps/rooms/64room_000.map 512 512 236 160 251 311 172.125 43 maps/rooms/64room_000.map 512 512 342 117 293 259 173.225 43 maps/rooms/64room_000.map 512 512 177 457 200 359 175.995 43 maps/rooms/64room_000.map 512 512 251 392 385 422 172.551 43 maps/rooms/64room_000.map 512 512 19 476 76 357 173.421 43 maps/rooms/64room_000.map 512 512 290 19 188 123 172.024 43 maps/rooms/64room_000.map 512 512 207 175 331 224 173.853 44 maps/rooms/64room_000.map 512 512 502 440 411 354 177.066 44 maps/rooms/64room_000.map 512 512 122 290 10 395 176.421 44 maps/rooms/64room_000.map 512 512 413 39 297 89 176.953 44 maps/rooms/64room_000.map 512 512 237 414 187 287 178.539 44 maps/rooms/64room_000.map 512 512 108 207 50 358 176.782 44 maps/rooms/64room_000.map 512 512 158 284 11 259 176.368 44 maps/rooms/64room_000.map 512 512 187 88 298 172 178.924 44 maps/rooms/64room_000.map 512 512 398 346 297 440 177.225 44 maps/rooms/64room_000.map 512 512 510 187 459 58 179.314 44 maps/rooms/64room_000.map 512 512 130 81 38 121 178.953 45 maps/rooms/64room_000.map 512 512 487 228 343 137 182.865 45 maps/rooms/64room_000.map 512 512 440 223 303 291 180.095 45 maps/rooms/64room_000.map 512 512 365 48 202 71 180.326 45 maps/rooms/64room_000.map 512 512 293 311 247 177 183.095 45 maps/rooms/64room_000.map 512 512 294 26 441 106 182.48 45 maps/rooms/64room_000.map 512 512 82 330 37 196 180.279 45 maps/rooms/64room_000.map 512 512 455 183 352 81 180.581 45 maps/rooms/64room_000.map 512 512 149 371 158 224 182.208 45 maps/rooms/64room_000.map 512 512 180 462 103 419 182.049 45 maps/rooms/64room_000.map 512 512 353 505 309 397 181.154 46 maps/rooms/64room_000.map 512 512 86 63 35 164 187.196 46 maps/rooms/64room_000.map 512 512 213 258 354 193 185.095 46 maps/rooms/64room_000.map 512 512 403 385 297 283 185.154 46 maps/rooms/64room_000.map 512 512 282 272 389 151 187.581 46 maps/rooms/64room_000.map 512 512 136 367 105 255 187.083 46 maps/rooms/64room_000.map 512 512 214 410 98 487 187.368 46 maps/rooms/64room_000.map 512 512 281 59 130 127 186.924 46 maps/rooms/64room_000.map 512 512 356 365 436 500 184.48 46 maps/rooms/64room_000.map 512 512 393 289 464 413 185.627 46 maps/rooms/64room_000.map 512 512 110 270 213 327 186.35 47 maps/rooms/64room_000.map 512 512 363 251 373 388 190.698 47 maps/rooms/64room_000.map 512 512 241 275 163 423 189.338 47 maps/rooms/64room_000.map 512 512 68 472 153 392 190.539 47 maps/rooms/64room_000.map 512 512 17 337 24 489 188.037 47 maps/rooms/64room_000.map 512 512 341 56 180 49 188.752 47 maps/rooms/64room_000.map 512 512 283 51 153 66 191.451 47 maps/rooms/64room_000.map 512 512 250 442 127 501 189.154 47 maps/rooms/64room_000.map 512 512 275 172 395 208 189.439 47 maps/rooms/64room_000.map 512 512 238 205 179 44 188.368 47 maps/rooms/64room_000.map 512 512 414 345 304 421 190.409 48 maps/rooms/64room_000.map 512 512 163 471 136 335 194.12 48 maps/rooms/64room_000.map 512 512 435 222 261 220 195.539 48 maps/rooms/64room_000.map 512 512 116 443 8 329 193.539 48 maps/rooms/64room_000.map 512 512 118 337 233 428 195.823 48 maps/rooms/64room_000.map 512 512 453 239 392 72 195.782 48 maps/rooms/64room_000.map 512 512 210 360 122 302 193.823 48 maps/rooms/64room_000.map 512 512 249 252 368 159 192.267 48 maps/rooms/64room_000.map 512 512 109 124 140 259 193.296 48 maps/rooms/64room_000.map 512 512 382 465 495 466 193.154 48 maps/rooms/64room_000.map 512 512 259 311 322 170 192.108 49 maps/rooms/64room_000.map 512 512 324 403 203 428 197.522 49 maps/rooms/64room_000.map 512 512 376 191 447 24 197.581 49 maps/rooms/64room_000.map 512 512 347 353 250 390 196.794 49 maps/rooms/64room_000.map 512 512 106 219 227 159 198.279 49 maps/rooms/64room_000.map 512 512 342 444 471 341 199.037 49 maps/rooms/64room_000.map 512 512 307 180 142 195 198.894 49 maps/rooms/64room_000.map 512 512 322 227 449 262 196.024 49 maps/rooms/64room_000.map 512 512 215 189 105 152 198.539 49 maps/rooms/64room_000.map 512 512 356 327 427 237 197.309 49 maps/rooms/64room_000.map 512 512 213 258 337 331 199.593 50 maps/rooms/64room_000.map 512 512 137 121 270 149 201.995 50 maps/rooms/64room_000.map 512 512 335 291 427 441 200.995 50 maps/rooms/64room_000.map 512 512 78 258 152 120 200.066 50 maps/rooms/64room_000.map 512 512 294 223 117 200 200.61 50 maps/rooms/64room_000.map 512 512 371 100 259 228 201.338 50 maps/rooms/64room_000.map 512 512 44 362 26 505 202.279 50 maps/rooms/64room_000.map 512 512 340 296 160 330 203.539 50 maps/rooms/64room_000.map 512 512 87 266 214 376 201.108 50 maps/rooms/64room_000.map 512 512 276 141 241 299 203.267 50 maps/rooms/64room_000.map 512 512 80 227 251 232 200.409 51 maps/rooms/64room_000.map 512 512 14 285 200 316 205.326 51 maps/rooms/64room_000.map 512 512 439 261 367 402 205.066 51 maps/rooms/64room_000.map 512 512 140 334 251 477 204.208 51 maps/rooms/64room_000.map 512 512 360 336 412 509 204.823 51 maps/rooms/64room_000.map 512 512 294 316 412 167 206.078 51 maps/rooms/64room_000.map 512 512 488 310 376 443 205.167 51 maps/rooms/64room_000.map 512 512 312 78 349 135 205.782 51 maps/rooms/64room_000.map 512 512 46 118 204 85 204.439 51 maps/rooms/64room_000.map 512 512 65 248 221 280 207.764 51 maps/rooms/64room_000.map 512 512 166 311 4 310 207.042 52 maps/rooms/64room_000.map 512 512 77 340 215 223 210.279 52 maps/rooms/64room_000.map 512 512 305 43 237 199 210.451 52 maps/rooms/64room_000.map 512 512 45 35 169 102 209.451 52 maps/rooms/64room_000.map 512 512 266 223 417 340 209.421 52 maps/rooms/64room_000.map 512 512 141 289 193 386 208.74 52 maps/rooms/64room_000.map 512 512 317 207 479 229 211.154 52 maps/rooms/64room_000.map 512 512 78 488 209 401 211.539 52 maps/rooms/64room_000.map 512 512 249 243 231 381 209.823 52 maps/rooms/64room_000.map 512 512 458 493 373 439 209.066 52 maps/rooms/64room_000.map 512 512 96 98 193 37 210.468 53 maps/rooms/64room_000.map 512 512 450 162 347 60 214.38 53 maps/rooms/64room_000.map 512 512 302 255 228 95 214.167 53 maps/rooms/64room_000.map 512 512 272 186 93 261 214.894 53 maps/rooms/64room_000.map 512 512 299 218 430 323 212.267 53 maps/rooms/64room_000.map 512 512 67 264 158 131 213.823 53 maps/rooms/64room_000.map 512 512 40 343 18 509 214.049 53 maps/rooms/64room_000.map 512 512 137 330 117 471 213.551 53 maps/rooms/64room_000.map 512 512 331 63 437 195 212.811 53 maps/rooms/64room_000.map 512 512 121 147 258 125 214.095 53 maps/rooms/64room_000.map 512 512 42 299 229 346 215.095 54 maps/rooms/64room_000.map 512 512 321 237 177 277 219.723 54 maps/rooms/64room_000.map 512 512 324 317 260 135 219.38 54 maps/rooms/64room_000.map 512 512 159 162 272 170 218.279 54 maps/rooms/64room_000.map 512 512 445 300 323 191 217.125 54 maps/rooms/64room_000.map 512 512 237 30 106 160 216.48 54 maps/rooms/64room_000.map 512 512 138 237 66 124 216.983 54 maps/rooms/64room_000.map 512 512 285 229 197 369 218.51 54 maps/rooms/64room_000.map 512 512 156 17 185 148 217.581 54 maps/rooms/64room_000.map 512 512 258 216 216 360 216.267 54 maps/rooms/64room_000.map 512 512 182 108 52 230 217.421 55 maps/rooms/64room_000.map 512 512 47 313 136 390 223.338 55 maps/rooms/64room_000.map 512 512 179 168 143 51 221.125 55 maps/rooms/64room_000.map 512 512 345 198 329 399 222.74 55 maps/rooms/64room_000.map 512 512 404 345 301 387 221.51 55 maps/rooms/64room_000.map 512 512 327 15 195 157 221.279 55 maps/rooms/64room_000.map 512 512 186 495 104 371 222.794 55 maps/rooms/64room_000.map 512 512 166 418 121 284 222.723 55 maps/rooms/64room_000.map 512 512 230 328 300 281 222.238 55 maps/rooms/64room_000.map 512 512 489 250 446 117 221.764 55 maps/rooms/64room_000.map 512 512 225 116 410 60 220.095 56 maps/rooms/64room_000.map 512 512 315 83 171 141 224.51 56 maps/rooms/64room_000.map 512 512 429 22 309 112 227.966 56 maps/rooms/64room_000.map 512 512 186 362 325 314 225.569 56 maps/rooms/64room_000.map 512 512 115 491 248 375 224.48 56 maps/rooms/64room_000.map 512 512 38 209 83 92 226.836 56 maps/rooms/64room_000.map 512 512 110 260 131 87 224.794 56 maps/rooms/64room_000.map 512 512 327 85 209 151 224.492 56 maps/rooms/64room_000.map 512 512 338 248 397 444 225.267 56 maps/rooms/64room_000.map 512 512 400 157 365 322 227.622 56 maps/rooms/64room_000.map 512 512 54 232 153 362 226.907 57 maps/rooms/64room_000.map 512 512 329 99 246 254 229.238 57 maps/rooms/64room_000.map 512 512 113 83 101 295 231.054 57 maps/rooms/64room_000.map 512 512 100 330 82 139 231.368 57 maps/rooms/64room_000.map 512 512 317 294 486 251 228.451 57 maps/rooms/64room_000.map 512 512 336 397 464 264 228.196 57 maps/rooms/64room_000.map 512 512 380 507 464 339 231.095 57 maps/rooms/64room_000.map 512 512 37 409 172 322 231.865 57 maps/rooms/64room_000.map 512 512 443 370 372 234 231.794 57 maps/rooms/64room_000.map 512 512 301 197 365 15 229.012 57 maps/rooms/64room_000.map 512 512 199 57 395 52 229.551 58 maps/rooms/64room_000.map 512 512 188 95 249 281 232.681 58 maps/rooms/64room_000.map 512 512 165 119 114 293 232.865 58 maps/rooms/64room_000.map 512 512 330 505 498 419 234.894 58 maps/rooms/64room_000.map 512 512 197 117 340 233 235.995 58 maps/rooms/64room_000.map 512 512 439 202 253 302 235.522 58 maps/rooms/64room_000.map 512 512 142 401 71 394 235.581 58 maps/rooms/64room_000.map 512 512 73 159 87 365 234.167 58 maps/rooms/64room_000.map 512 512 198 94 78 30 234.309 58 maps/rooms/64room_000.map 512 512 113 186 185 336 234.894 58 maps/rooms/64room_000.map 512 512 227 153 69 271 234.309 59 maps/rooms/64room_000.map 512 512 72 190 24 24 236.007 59 maps/rooms/64room_000.map 512 512 317 221 329 435 237.296 59 maps/rooms/64room_000.map 512 512 227 432 397 458 236.35 59 maps/rooms/64room_000.map 512 512 115 308 275 310 237.522 59 maps/rooms/64room_000.map 512 512 372 263 385 80 238.368 59 maps/rooms/64room_000.map 512 512 124 109 287 58 239.522 59 maps/rooms/64room_000.map 512 512 48 296 200 431 238.966 59 maps/rooms/64room_000.map 512 512 362 385 253 255 237.066 59 maps/rooms/64room_000.map 512 512 117 95 231 24 236.823 59 maps/rooms/64room_000.map 512 512 137 8 235 196 236.794 60 maps/rooms/64room_000.map 512 512 37 190 78 13 240.794 60 maps/rooms/64room_000.map 512 512 489 465 415 501 243.823 60 maps/rooms/64room_000.map 512 512 350 5 232 160 240.078 60 maps/rooms/64room_000.map 512 512 257 233 163 62 243.409 60 maps/rooms/64room_000.map 512 512 158 187 153 11 240.338 60 maps/rooms/64room_000.map 512 512 35 272 162 398 240.179 60 maps/rooms/64room_000.map 512 512 212 364 120 446 243.966 60 maps/rooms/64room_000.map 512 512 210 288 7 361 242.024 60 maps/rooms/64room_000.map 512 512 396 169 329 352 240.149 60 maps/rooms/64room_000.map 512 512 55 106 174 214 241.995 61 maps/rooms/64room_000.map 512 512 322 281 429 99 244.48 61 maps/rooms/64room_000.map 512 512 93 328 310 263 245.095 61 maps/rooms/64room_000.map 512 512 296 415 122 354 244.179 61 maps/rooms/64room_000.map 512 512 6 221 174 138 245.794 61 maps/rooms/64room_000.map 512 512 217 249 403 341 244.735 61 maps/rooms/64room_000.map 512 512 252 150 390 134 247.321 61 maps/rooms/64room_000.map 512 512 175 246 263 108 245.078 61 maps/rooms/64room_000.map 512 512 346 359 435 175 245.35 61 maps/rooms/64room_000.map 512 512 132 53 93 163 244.296 61 maps/rooms/64room_000.map 512 512 211 404 375 496 247.238 62 maps/rooms/64room_000.map 512 512 413 432 204 397 250.836 62 maps/rooms/64room_000.map 512 512 29 258 156 122 248.865 62 maps/rooms/64room_000.map 512 512 65 80 194 27 250.894 62 maps/rooms/64room_000.map 512 512 214 274 424 329 251.794 62 maps/rooms/64room_000.map 512 512 43 238 106 423 248.978 62 maps/rooms/64room_000.map 512 512 110 288 303 272 251.551 62 maps/rooms/64room_000.map 512 512 324 386 189 332 251.108 62 maps/rooms/64room_000.map 512 512 396 459 194 409 250.794 62 maps/rooms/64room_000.map 512 512 292 150 284 4 250.208 62 maps/rooms/64room_000.map 512 512 307 217 93 283 248.309 63 maps/rooms/64room_000.map 512 512 391 475 412 312 253.723 63 maps/rooms/64room_000.map 512 512 310 153 228 48 252.907 63 maps/rooms/64room_000.map 512 512 249 190 414 268 254.421 63 maps/rooms/64room_000.map 512 512 17 262 167 164 253.321 63 maps/rooms/64room_000.map 512 512 414 285 355 110 254.995 63 maps/rooms/64room_000.map 512 512 380 222 394 422 254.794 63 maps/rooms/64room_000.map 512 512 300 225 323 46 253.782 63 maps/rooms/64room_000.map 512 512 263 133 413 286 253.877 63 maps/rooms/64room_000.map 512 512 45 263 215 228 253.735 63 maps/rooms/64room_000.map 512 512 137 337 269 177 252.752 64 maps/rooms/64room_000.map 512 512 485 493 453 258 257.368 64 maps/rooms/64room_000.map 512 512 39 283 115 483 258.777 64 maps/rooms/64room_000.map 512 512 368 108 255 308 257.35 64 maps/rooms/64room_000.map 512 512 182 334 394 277 257.953 64 maps/rooms/64room_000.map 512 512 46 267 214 251 259.605 64 maps/rooms/64room_000.map 512 512 237 295 112 156 257.907 64 maps/rooms/64room_000.map 512 512 363 37 269 239 258.409 64 maps/rooms/64room_000.map 512 512 243 378 44 273 258.894 64 maps/rooms/64room_000.map 512 512 303 287 255 89 259.664 64 maps/rooms/64room_000.map 512 512 166 28 378 23 259.635 65 maps/rooms/64room_000.map 512 512 155 129 38 280 261.907 65 maps/rooms/64room_000.map 512 512 174 114 330 107 262.706 65 maps/rooms/64room_000.map 512 512 112 85 271 191 260.037 65 maps/rooms/64room_000.map 512 512 375 166 422 344 263.995 65 maps/rooms/64room_000.map 512 512 499 127 286 137 260.279 65 maps/rooms/64room_000.map 512 512 75 173 298 219 260.924 65 maps/rooms/64room_000.map 512 512 509 165 301 210 262.522 65 maps/rooms/64room_000.map 512 512 150 209 209 415 262.095 65 maps/rooms/64room_000.map 512 512 188 133 129 283 262.095 65 maps/rooms/64room_000.map 512 512 296 140 156 33 262.12 66 maps/rooms/64room_000.map 512 512 357 353 195 422 266.706 66 maps/rooms/64room_000.map 512 512 122 298 327 236 265.368 66 maps/rooms/64room_000.map 512 512 213 459 350 378 265.304 66 maps/rooms/64room_000.map 512 512 109 508 102 295 266.049 66 maps/rooms/64room_000.map 512 512 223 89 412 147 267.451 66 maps/rooms/64room_000.map 512 512 203 273 430 260 266.35 66 maps/rooms/64room_000.map 512 512 326 424 349 181 264.125 66 maps/rooms/64room_000.map 512 512 196 403 49 362 267.622 66 maps/rooms/64room_000.map 512 512 32 43 213 107 266.279 66 maps/rooms/64room_000.map 512 512 142 145 195 263 267.61 67 maps/rooms/64room_000.map 512 512 207 61 245 288 269.066 67 maps/rooms/64room_000.map 512 512 445 2 250 60 269.25 67 maps/rooms/64room_000.map 512 512 220 301 264 95 268.167 67 maps/rooms/64room_000.map 512 512 264 271 281 414 271.037 67 maps/rooms/64room_000.map 512 512 409 306 244 152 268.037 67 maps/rooms/64room_000.map 512 512 114 252 231 89 270.291 67 maps/rooms/64room_000.map 512 512 446 42 317 241 270.836 67 maps/rooms/64room_000.map 512 512 217 481 263 293 270.953 67 maps/rooms/64room_000.map 512 512 66 188 49 172 270.463 67 maps/rooms/64room_000.map 512 512 78 257 311 316 269.037 68 maps/rooms/64room_000.map 512 512 217 445 108 243 275.451 68 maps/rooms/64room_000.map 512 512 199 308 403 184 275.563 68 maps/rooms/64room_000.map 512 512 274 281 404 77 274.836 68 maps/rooms/64room_000.map 512 512 261 197 277 116 273.593 68 maps/rooms/64room_000.map 512 512 390 38 182 29 274.966 68 maps/rooms/64room_000.map 512 512 220 338 96 189 274.179 68 maps/rooms/64room_000.map 512 512 181 247 67 416 272.362 68 maps/rooms/64room_000.map 512 512 28 407 152 296 272.103 68 maps/rooms/64room_000.map 512 512 109 259 346 274 275.581 68 maps/rooms/64room_000.map 512 512 110 209 163 418 273.622 69 maps/rooms/64room_000.map 512 512 232 58 153 238 279.208 69 maps/rooms/64room_000.map 512 512 381 252 509 337 278.924 69 maps/rooms/64room_000.map 512 512 262 135 166 357 278.752 69 maps/rooms/64room_000.map 512 512 292 168 476 265 278.563 69 maps/rooms/64room_000.map 512 512 26 198 239 271 277.463 69 maps/rooms/64room_000.map 512 512 35 89 267 83 279.907 69 maps/rooms/64room_000.map 512 512 162 315 411 317 276.338 69 maps/rooms/64room_000.map 512 512 167 52 389 30 279.238 69 maps/rooms/64room_000.map 512 512 294 202 177 139 279.279 69 maps/rooms/64room_000.map 512 512 323 166 387 396 279.539 70 maps/rooms/64room_000.map 512 512 297 240 163 47 283.652 70 maps/rooms/64room_000.map 512 512 201 281 378 394 280.309 70 maps/rooms/64room_000.map 512 512 378 239 298 29 282.451 70 maps/rooms/64room_000.map 512 512 137 438 180 207 281.12 70 maps/rooms/64room_000.map 512 512 510 340 413 495 280.35 70 maps/rooms/64room_000.map 512 512 426 357 201 269 280.463 70 maps/rooms/64room_000.map 512 512 105 310 305 166 280.149 70 maps/rooms/64room_000.map 512 512 344 231 117 232 283.581 70 maps/rooms/64room_000.map 512 512 191 436 351 352 280.291 70 maps/rooms/64room_000.map 512 512 198 163 413 109 282.161 71 maps/rooms/64room_000.map 512 512 307 119 285 242 287.534 71 maps/rooms/64room_000.map 512 512 210 257 133 178 286.853 71 maps/rooms/64room_000.map 512 512 118 78 226 229 285.995 71 maps/rooms/64room_000.map 512 512 289 304 14 314 287.284 71 maps/rooms/64room_000.map 512 512 68 220 312 197 286.664 71 maps/rooms/64room_000.map 512 512 197 415 422 494 285.806 71 maps/rooms/64room_000.map 512 512 11 36 221 109 285.593 71 maps/rooms/64room_000.map 512 512 33 286 167 171 285.676 71 maps/rooms/64room_000.map 512 512 62 358 213 473 287.279 71 maps/rooms/64room_000.map 512 512 272 165 58 312 284.546 72 maps/rooms/64room_000.map 512 512 505 185 406 295 289.735 72 maps/rooms/64room_000.map 512 512 141 261 332 336 290.777 72 maps/rooms/64room_000.map 512 512 152 449 74 279 289.321 72 maps/rooms/64room_000.map 512 512 216 101 91 306 290.978 72 maps/rooms/64room_000.map 512 512 382 122 386 323 288.154 72 maps/rooms/64room_000.map 512 512 431 67 310 272 289.806 72 maps/rooms/64room_000.map 512 512 494 426 302 273 289.35 72 maps/rooms/64room_000.map 512 512 396 267 492 196 289.635 72 maps/rooms/64room_000.map 512 512 406 73 174 90 289.392 72 maps/rooms/64room_000.map 512 512 221 143 227 333 288.066 73 maps/rooms/64room_000.map 512 512 498 182 353 348 294.865 73 maps/rooms/64room_000.map 512 512 365 359 207 144 292.747 73 maps/rooms/64room_000.map 512 512 247 259 139 499 295.806 73 maps/rooms/64room_000.map 512 512 367 419 432 208 293.723 73 maps/rooms/64room_000.map 512 512 324 314 148 410 293.681 73 maps/rooms/64room_000.map 512 512 147 94 189 264 292.894 73 maps/rooms/64room_000.map 512 512 434 271 216 171 295.362 73 maps/rooms/64room_000.map 512 512 149 316 8 439 293.924 73 maps/rooms/64room_000.map 512 512 437 65 207 205 295.019 73 maps/rooms/64room_000.map 512 512 133 424 8 278 293.919 74 maps/rooms/64room_000.map 512 512 61 225 186 58 298.108 74 maps/rooms/64room_000.map 512 512 308 247 127 174 298.409 74 maps/rooms/64room_000.map 512 512 13 298 268 392 296.279 74 maps/rooms/64room_000.map 512 512 39 326 291 235 298.664 74 maps/rooms/64room_000.map 512 512 335 283 455 65 296.995 74 maps/rooms/64room_000.map 512 512 194 40 116 252 297.179 74 maps/rooms/64room_000.map 512 512 87 120 46 353 296.25 74 maps/rooms/64room_000.map 512 512 166 344 335 166 296.806 74 maps/rooms/64room_000.map 512 512 372 335 385 83 296.48 74 maps/rooms/64room_000.map 512 512 197 200 450 290 296.421 75 maps/rooms/64room_000.map 512 512 319 100 501 75 301.978 75 maps/rooms/64room_000.map 512 512 400 317 447 455 300.966 75 maps/rooms/64room_000.map 512 512 319 57 316 288 301.196 75 maps/rooms/64room_000.map 512 512 94 259 359 275 300.48 75 maps/rooms/64room_000.map 512 512 297 406 189 219 300.563 75 maps/rooms/64room_000.map 512 512 241 186 52 381 302.576 75 maps/rooms/64room_000.map 512 512 142 163 369 36 300.108 75 maps/rooms/64room_000.map 512 512 130 280 75 488 303.635 75 maps/rooms/64room_000.map 512 512 291 442 170 232 300.747 75 maps/rooms/64room_000.map 512 512 316 248 471 424 302.865 76 maps/rooms/64room_000.map 512 512 201 181 428 40 306.978 76 maps/rooms/64room_000.map 512 512 306 399 151 206 304.936 76 maps/rooms/64room_000.map 512 512 405 415 206 310 305.137 76 maps/rooms/64room_000.map 512 512 168 324 435 324 307.894 76 maps/rooms/64room_000.map 512 512 109 451 72 226 304.049 76 maps/rooms/64room_000.map 512 512 194 501 106 312 306.137 76 maps/rooms/64room_000.map 512 512 158 265 265 116 304.191 76 maps/rooms/64room_000.map 512 512 38 399 194 324 307.534 76 maps/rooms/64room_000.map 512 512 66 379 286 240 305.978 76 maps/rooms/64room_000.map 512 512 159 456 37 291 306.99 77 maps/rooms/64room_000.map 512 512 201 335 21 478 309.576 77 maps/rooms/64room_000.map 512 512 270 445 190 249 308.007 77 maps/rooms/64room_000.map 512 512 196 28 65 20 310.723 77 maps/rooms/64room_000.map 512 512 271 232 5 199 308.522 77 maps/rooms/64room_000.map 512 512 65 282 61 33 309.877 77 maps/rooms/64room_000.map 512 512 284 432 84 280 311.907 77 maps/rooms/64room_000.map 512 512 108 9 203 56 308.978 77 maps/rooms/64room_000.map 512 512 221 27 297 271 308.978 77 maps/rooms/64room_000.map 512 512 37 154 232 111 308.208 77 maps/rooms/64room_000.map 512 512 40 113 13 292 310.894 78 maps/rooms/64room_000.map 512 512 277 245 482 72 315.321 78 maps/rooms/64room_000.map 512 512 24 232 41 475 313.002 78 maps/rooms/64room_000.map 512 512 249 144 45 8 314.534 78 maps/rooms/64room_000.map 512 512 37 81 296 88 315.806 78 maps/rooms/64room_000.map 512 512 117 481 253 283 314.25 78 maps/rooms/64room_000.map 512 512 238 336 290 173 314.966 78 maps/rooms/64room_000.map 512 512 204 231 90 56 313.392 78 maps/rooms/64room_000.map 512 512 341 52 83 98 312.877 78 maps/rooms/64room_000.map 512 512 365 315 204 439 313.09 78 maps/rooms/64room_000.map 512 512 158 111 92 363 314.191 79 maps/rooms/64room_000.map 512 512 339 2 464 11 316.475 79 maps/rooms/64room_000.map 512 512 65 175 315 27 316.576 79 maps/rooms/64room_000.map 512 512 126 376 121 112 319.09 79 maps/rooms/64room_000.map 512 512 4 86 230 187 317.35 79 maps/rooms/64room_000.map 512 512 493 340 359 162 319.865 79 maps/rooms/64room_000.map 512 512 171 248 171 492 318.919 79 maps/rooms/64room_000.map 512 512 133 6 183 200 316.777 79 maps/rooms/64room_000.map 512 512 110 118 312 241 319.451 79 maps/rooms/64room_000.map 512 512 287 138 462 322 317.108 79 maps/rooms/64room_000.map 512 512 442 396 189 437 318.576 80 maps/rooms/64room_000.map 512 512 154 57 5 89 322.238 80 maps/rooms/64room_000.map 512 512 443 418 182 410 321.191 80 maps/rooms/64room_000.map 512 512 303 74 380 247 322.451 80 maps/rooms/64room_000.map 512 512 220 290 310 26 320.836 80 maps/rooms/64room_000.map 512 512 332 511 181 349 323.233 80 maps/rooms/64room_000.map 512 512 63 308 161 66 322.877 80 maps/rooms/64room_000.map 512 512 463 86 348 318 320.865 80 maps/rooms/64room_000.map 512 512 154 262 237 30 323.919 80 maps/rooms/64room_000.map 512 512 224 65 498 125 322.735 80 maps/rooms/64room_000.map 512 512 306 172 122 65 320.421 81 maps/rooms/64room_000.map 512 512 212 163 478 178 327.718 81 maps/rooms/64room_000.map 512 512 383 433 387 184 324.463 81 maps/rooms/64room_000.map 512 512 131 352 100 120 326.137 81 maps/rooms/64room_000.map 512 512 120 263 374 99 325.446 81 maps/rooms/64room_000.map 512 512 466 188 179 242 324.723 81 maps/rooms/64room_000.map 512 512 140 43 409 110 325.12 81 maps/rooms/64room_000.map 512 512 5 33 112 261 324.22 81 maps/rooms/64room_000.map 512 512 321 194 185 421 327.167 81 maps/rooms/64room_000.map 512 512 130 138 305 303 327.664 81 maps/rooms/64room_000.map 512 512 247 282 229 2 327.907 82 maps/rooms/64room_000.map 512 512 237 295 142 25 331.936 82 maps/rooms/64room_000.map 512 512 206 300 141 37 330.066 82 maps/rooms/64room_000.map 512 512 510 298 199 298 330.882 82 maps/rooms/64room_000.map 512 512 158 49 335 255 328.522 82 maps/rooms/64room_000.map 512 512 275 161 50 73 330.362 82 maps/rooms/64room_000.map 512 512 486 280 258 434 328.777 82 maps/rooms/64room_000.map 512 512 66 332 354 254 331.439 82 maps/rooms/64room_000.map 512 512 104 104 105 387 328.978 82 maps/rooms/64room_000.map 512 512 311 301 463 452 329.149 82 maps/rooms/64room_000.map 512 512 99 241 161 486 329.919 83 maps/rooms/64room_000.map 512 512 500 197 405 342 332.836 83 maps/rooms/64room_000.map 512 512 134 499 294 267 334.492 83 maps/rooms/64room_000.map 512 512 183 378 244 85 332.652 83 maps/rooms/64room_000.map 512 512 232 287 506 210 334.706 83 maps/rooms/64room_000.map 512 512 382 303 254 325 334.451 83 maps/rooms/64room_000.map 512 512 111 139 331 174 332.747 83 maps/rooms/64room_000.map 512 512 463 458 312 302 332.22 83 maps/rooms/64room_000.map 512 512 73 201 28 457 334.99 83 maps/rooms/64room_000.map 512 512 91 2 223 181 332.078 83 maps/rooms/64room_000.map 512 512 242 359 510 435 332.978 84 maps/rooms/64room_000.map 512 512 126 288 348 348 337.948 84 maps/rooms/64room_000.map 512 512 129 268 287 30 337.161 84 maps/rooms/64room_000.map 512 512 211 151 46 379 336.446 84 maps/rooms/64room_000.map 512 512 57 215 237 418 336.12 84 maps/rooms/64room_000.map 512 512 434 207 301 125 339.108 84 maps/rooms/64room_000.map 512 512 440 171 509 282 338.919 84 maps/rooms/64room_000.map 512 512 456 331 447 148 338.96 84 maps/rooms/64room_000.map 512 512 460 336 176 231 339.007 84 maps/rooms/64room_000.map 512 512 248 19 95 252 337.706 84 maps/rooms/64room_000.map 512 512 303 222 8 266 339.066 85 maps/rooms/64room_000.map 512 512 52 56 283 70 342.262 85 maps/rooms/64room_000.map 512 512 162 200 425 371 343.203 85 maps/rooms/64room_000.map 512 512 507 253 401 351 342.392 85 maps/rooms/64room_000.map 512 512 161 338 441 465 341.978 85 maps/rooms/64room_000.map 512 512 282 285 486 472 342.907 85 maps/rooms/64room_000.map 512 512 114 11 181 26 341.12 85 maps/rooms/64room_000.map 512 512 165 221 446 351 343.049 85 maps/rooms/64room_000.map 512 512 226 88 203 321 342.652 85 maps/rooms/64room_000.map 512 512 176 119 201 381 340.966 85 maps/rooms/64room_000.map 512 512 71 227 56 510 340.676 86 maps/rooms/64room_000.map 512 512 161 204 408 117 345.144 86 maps/rooms/64room_000.map 512 512 251 415 225 141 345.723 86 maps/rooms/64room_000.map 512 512 193 134 134 398 346.037 86 maps/rooms/64room_000.map 512 512 347 507 150 443 346.99 86 maps/rooms/64room_000.map 512 512 471 328 254 432 347.333 86 maps/rooms/64room_000.map 512 512 161 36 177 278 346.333 86 maps/rooms/64room_000.map 512 512 332 243 92 125 347.764 86 maps/rooms/64room_000.map 512 512 132 275 380 416 347.174 86 maps/rooms/64room_000.map 512 512 92 508 23 227 344.718 86 maps/rooms/64room_000.map 512 512 404 304 464 83 345.191 87 maps/rooms/64room_000.map 512 512 254 487 16 343 351.019 87 maps/rooms/64room_000.map 512 512 440 293 236 401 349.463 87 maps/rooms/64room_000.map 512 512 231 47 345 274 348.22 87 maps/rooms/64room_000.map 512 512 287 269 157 511 351.12 87 maps/rooms/64room_000.map 512 512 509 300 259 139 349.191 87 maps/rooms/64room_000.map 512 512 467 319 241 146 350.078 87 maps/rooms/64room_000.map 512 512 310 237 56 382 350.966 87 maps/rooms/64room_000.map 512 512 341 191 475 438 348.38 87 maps/rooms/64room_000.map 512 512 242 34 479 208 348.061 87 maps/rooms/64room_000.map 512 512 24 299 261 132 351.789 88 maps/rooms/64room_000.map 512 512 226 99 188 419 354.267 88 maps/rooms/64room_000.map 512 512 399 231 259 440 355.593 88 maps/rooms/64room_000.map 512 512 175 56 460 127 353.463 88 maps/rooms/64room_000.map 512 512 132 503 61 244 353.203 88 maps/rooms/64room_000.map 512 512 138 93 433 106 353.262 88 maps/rooms/64room_000.map 512 512 479 234 492 309 352.291 88 maps/rooms/64room_000.map 512 512 393 193 101 223 355.321 88 maps/rooms/64room_000.map 512 512 292 241 496 467 355.019 88 maps/rooms/64room_000.map 512 512 236 150 500 69 352.203 88 maps/rooms/64room_000.map 512 512 135 428 249 132 352.836 89 maps/rooms/64room_000.map 512 512 465 40 279 176 358.718 89 maps/rooms/64room_000.map 512 512 314 190 502 386 357.882 89 maps/rooms/64room_000.map 512 512 252 296 317 12 356.99 89 maps/rooms/64room_000.map 512 512 341 312 198 27 359.848 89 maps/rooms/64room_000.map 512 512 150 282 466 306 357.421 89 maps/rooms/64room_000.map 512 512 109 389 142 96 358.676 89 maps/rooms/64room_000.map 512 512 206 363 430 202 359.534 89 maps/rooms/64room_000.map 512 512 378 335 185 86 358.233 89 maps/rooms/64room_000.map 512 512 262 83 351 346 358.375 89 maps/rooms/64room_000.map 512 512 381 115 328 427 359.024 90 maps/rooms/64room_000.map 512 512 242 499 30 380 360.546 90 maps/rooms/64room_000.map 512 512 65 250 361 185 360.48 90 maps/rooms/64room_000.map 512 512 375 242 158 56 362.723 90 maps/rooms/64room_000.map 512 512 13 77 272 21 363.534 90 maps/rooms/64room_000.map 512 512 175 86 425 206 363.772 90 maps/rooms/64room_000.map 512 512 371 355 77 313 363.037 90 maps/rooms/64room_000.map 512 512 101 45 191 271 360.049 90 maps/rooms/64room_000.map 512 512 199 328 127 102 363.605 90 maps/rooms/64room_000.map 512 512 284 397 359 172 362.836 90 maps/rooms/64room_000.map 512 512 208 111 26 353 363.487 91 maps/rooms/64room_000.map 512 512 249 294 331 18 366.919 91 maps/rooms/64room_000.map 512 512 502 61 224 183 366.818 91 maps/rooms/64room_000.map 512 512 148 486 289 220 364.019 91 maps/rooms/64room_000.map 512 512 479 149 406 381 367.919 91 maps/rooms/64room_000.map 512 512 269 98 41 129 364.078 91 maps/rooms/64room_000.map 512 512 6 510 232 362 366.375 91 maps/rooms/64room_000.map 512 512 224 2 419 240 367.392 91 maps/rooms/64room_000.map 512 512 298 177 84 27 364.919 91 maps/rooms/64room_000.map 512 512 99 98 7 392 365.789 91 maps/rooms/64room_000.map 512 512 469 181 213 41 365.889 92 maps/rooms/64room_000.map 512 512 440 279 335 47 371.25 92 maps/rooms/64room_000.map 512 512 327 60 364 368 368.681 92 maps/rooms/64room_000.map 512 512 308 48 87 19 370.475 92 maps/rooms/64room_000.map 512 512 312 446 447 157 369.99 92 maps/rooms/64room_000.map 512 512 201 200 510 139 370.233 92 maps/rooms/64room_000.map 512 512 186 477 243 197 368.262 92 maps/rooms/64room_000.map 512 512 68 110 281 269 370.434 92 maps/rooms/64room_000.map 512 512 90 291 169 17 368.22 92 maps/rooms/64room_000.map 512 512 334 263 116 103 368.978 92 maps/rooms/64room_000.map 512 512 146 304 484 306 370.309 93 maps/rooms/64room_000.map 512 512 369 407 123 272 373.701 93 maps/rooms/64room_000.map 512 512 498 148 198 312 375.546 93 maps/rooms/64room_000.map 512 512 319 194 15 109 372.907 93 maps/rooms/64room_000.map 512 512 117 307 390 313 373.877 93 maps/rooms/64room_000.map 512 512 109 227 406 255 375.392 93 maps/rooms/64room_000.map 512 512 450 486 284 279 375.818 93 maps/rooms/64room_000.map 512 512 190 100 254 362 372.894 93 maps/rooms/64room_000.map 512 512 414 257 424 55 373.161 93 maps/rooms/64room_000.map 512 512 96 68 6 373 373.475 93 maps/rooms/64room_000.map 512 512 154 188 105 397 372.233 94 maps/rooms/64room_000.map 512 512 60 323 409 288 378.267 94 maps/rooms/64room_000.map 512 512 434 361 480 139 379.889 94 maps/rooms/64room_000.map 512 512 230 296 493 445 376.534 94 maps/rooms/64room_000.map 512 512 447 50 157 208 379.387 94 maps/rooms/64room_000.map 512 512 235 329 97 111 377.889 94 maps/rooms/64room_000.map 512 512 61 66 104 361 378.877 94 maps/rooms/64room_000.map 512 512 443 190 376 476 376.563 94 maps/rooms/64room_000.map 512 512 335 358 82 281 376.86 94 maps/rooms/64room_000.map 512 512 445 414 182 284 379.191 94 maps/rooms/64room_000.map 512 512 207 212 118 7 376.274 95 maps/rooms/64room_000.map 512 512 368 8 394 322 383.681 95 maps/rooms/64room_000.map 512 512 121 38 190 268 380.706 95 maps/rooms/64room_000.map 512 512 477 136 192 318 383.818 95 maps/rooms/64room_000.map 512 512 375 347 66 289 381.936 95 maps/rooms/64room_000.map 512 512 321 359 120 306 380.617 95 maps/rooms/64room_000.map 512 512 114 159 399 122 381.505 95 maps/rooms/64room_000.map 512 512 385 125 331 444 380.581 95 maps/rooms/64room_000.map 512 512 385 425 190 462 380.718 95 maps/rooms/64room_000.map 512 512 354 370 156 126 383.99 95 maps/rooms/64room_000.map 512 512 473 476 209 428 382.174 96 maps/rooms/64room_000.map 512 512 325 432 329 73 386.338 96 maps/rooms/64room_000.map 512 512 18 506 156 218 385.487 96 maps/rooms/64room_000.map 512 512 124 188 117 459 386.635 96 maps/rooms/64room_000.map 512 512 47 412 242 196 384.085 96 maps/rooms/64room_000.map 512 512 473 12 251 36 385.304 96 maps/rooms/64room_000.map 512 512 291 404 443 207 387.877 96 maps/rooms/64room_000.map 512 512 97 333 363 144 384.706 96 maps/rooms/64room_000.map 512 512 187 373 488 393 386.588 96 maps/rooms/64room_000.map 512 512 489 472 353 203 386.907 96 maps/rooms/64room_000.map 512 512 498 285 334 65 385.238 97 maps/rooms/64room_000.map 512 512 65 139 379 106 390.907 97 maps/rooms/64room_000.map 512 512 82 92 289 318 390.588 97 maps/rooms/64room_000.map 512 512 57 477 199 194 390.931 97 maps/rooms/64room_000.map 512 512 463 495 232 354 390.517 97 maps/rooms/64room_000.map 512 512 237 372 261 89 390.22 97 maps/rooms/64room_000.map 512 512 3 53 48 305 389.274 97 maps/rooms/64room_000.map 512 512 232 74 409 345 389.304 97 maps/rooms/64room_000.map 512 512 35 393 259 213 391.103 97 maps/rooms/64room_000.map 512 512 124 309 151 24 391.848 97 maps/rooms/64room_000.map 512 512 99 461 304 248 391.948 98 maps/rooms/64room_000.map 512 512 389 19 424 257 392.22 98 maps/rooms/64room_000.map 512 512 415 242 497 409 392.22 98 maps/rooms/64room_000.map 512 512 81 205 327 432 395.073 98 maps/rooms/64room_000.map 512 512 470 59 242 121 393.463 98 maps/rooms/64room_000.map 512 512 378 359 306 39 395.764 98 maps/rooms/64room_000.map 512 512 176 50 210 332 394.836 98 maps/rooms/64room_000.map 512 512 107 151 432 116 395.203 98 maps/rooms/64room_000.map 512 512 294 41 404 262 394.563 98 maps/rooms/64room_000.map 512 512 363 367 504 89 394.203 98 maps/rooms/64room_000.map 512 512 352 188 224 416 395.563 99 maps/rooms/64room_000.map 512 512 357 26 28 89 398.375 99 maps/rooms/64room_000.map 512 512 172 411 121 93 396.706 99 maps/rooms/64room_000.map 512 512 132 282 461 252 398.664 99 maps/rooms/64room_000.map 512 512 84 449 125 122 398.919 99 maps/rooms/64room_000.map 512 512 407 352 161 118 396.032 99 maps/rooms/64room_000.map 512 512 434 417 322 101 397.865 99 maps/rooms/64room_000.map 512 512 203 475 376 238 398.451 99 maps/rooms/64room_000.map 512 512 189 271 23 29 397.806 99 maps/rooms/64room_000.map 512 512 430 221 259 405 396.948 99 maps/rooms/64room_000.map 512 512 166 355 239 22 399.848 100 maps/rooms/64room_000.map 512 512 4 161 81 339 402.563 100 maps/rooms/64room_000.map 512 512 112 389 314 130 403.777 100 maps/rooms/64room_000.map 512 512 430 276 153 434 401.35 100 maps/rooms/64room_000.map 512 512 451 375 454 151 403.936 100 maps/rooms/64room_000.map 512 512 300 432 13 443 403.789 100 maps/rooms/64room_000.map 512 512 201 73 185 438 401.752 100 maps/rooms/64room_000.map 512 512 310 245 59 454 401.161 100 maps/rooms/64room_000.map 512 512 419 335 326 33 403.451 100 maps/rooms/64room_000.map 512 512 127 316 418 273 402.191 100 maps/rooms/64room_000.map 512 512 207 351 501 273 402.309 101 maps/rooms/64room_000.map 512 512 41 191 132 281 405.635 101 maps/rooms/64room_000.map 512 512 133 170 400 150 404.286 101 maps/rooms/64room_000.map 512 512 98 154 19 484 406.931 101 maps/rooms/64room_000.map 512 512 225 152 20 424 404.671 101 maps/rooms/64room_000.map 512 512 333 158 205 411 407.877 101 maps/rooms/64room_000.map 512 512 509 350 199 162 406.032 101 maps/rooms/64room_000.map 512 512 99 218 417 362 406.316 101 maps/rooms/64room_000.map 512 512 25 171 298 51 405.818 101 maps/rooms/64room_000.map 512 512 355 402 41 291 404.73 101 maps/rooms/64room_000.map 512 512 193 86 346 413 405.161 102 maps/rooms/64room_000.map 512 512 65 14 279 223 410.747 102 maps/rooms/64room_000.map 512 512 404 331 304 33 411.723 102 maps/rooms/64room_000.map 512 512 58 177 179 9 411.291 102 maps/rooms/64room_000.map 512 512 202 124 394 432 409.789 102 maps/rooms/64room_000.map 512 512 308 63 15 3 408.446 102 maps/rooms/64room_000.map 512 512 238 252 29 52 409.132 102 maps/rooms/64room_000.map 512 512 141 95 90 437 411.233 102 maps/rooms/64room_000.map 512 512 97 326 437 407 409.517 102 maps/rooms/64room_000.map 512 512 389 223 194 389 410.078 102 maps/rooms/64room_000.map 512 512 421 327 71 258 411.676 103 maps/rooms/64room_000.map 512 512 246 350 171 176 414.345 103 maps/rooms/64room_000.map 512 512 440 262 137 410 412.664 103 maps/rooms/64room_000.map 512 512 185 11 142 363 412.706 103 maps/rooms/64room_000.map 512 512 500 503 326 203 415.421 103 maps/rooms/64room_000.map 512 512 27 13 57 347 415.789 103 maps/rooms/64room_000.map 512 512 395 356 141 486 415.789 103 maps/rooms/64room_000.map 512 512 450 185 312 390 413.392 103 maps/rooms/64room_000.map 512 512 229 123 149 470 412.706 103 maps/rooms/64room_000.map 512 512 150 165 40 426 413.985 103 maps/rooms/64room_000.map 512 512 457 219 83 251 415.279 104 maps/rooms/64room_000.map 512 512 430 125 180 182 417.316 104 maps/rooms/64room_000.map 512 512 490 421 198 206 419.132 104 maps/rooms/64room_000.map 512 512 151 304 54 142 416.321 104 maps/rooms/64room_000.map 512 512 444 127 189 147 416.103 104 maps/rooms/64room_000.map 512 512 72 80 378 111 416.286 104 maps/rooms/64room_000.map 512 512 223 257 506 439 416.061 104 maps/rooms/64room_000.map 512 512 114 353 126 48 417.032 104 maps/rooms/64room_000.map 512 512 101 323 10 167 418.563 104 maps/rooms/64room_000.map 512 512 34 14 324 38 418.274 104 maps/rooms/64room_000.map 512 512 174 82 131 398 417.108 105 maps/rooms/64room_000.map 512 512 63 100 381 111 422.019 105 maps/rooms/64room_000.map 512 512 177 18 349 356 422.718 105 maps/rooms/64room_000.map 512 512 206 325 451 202 421.362 105 maps/rooms/64room_000.map 512 512 397 313 224 486 420.6 105 maps/rooms/64room_000.map 512 512 54 108 235 382 421.96 105 maps/rooms/64room_000.map 512 512 185 97 436 372 420.558 105 maps/rooms/64room_000.map 512 512 198 449 505 498 421.73 105 maps/rooms/64room_000.map 512 512 6 335 118 48 422.304 105 maps/rooms/64room_000.map 512 512 101 432 316 156 422.463 105 maps/rooms/64room_000.map 512 512 118 330 92 2 421.161 106 maps/rooms/64room_000.map 512 512 16 110 275 304 426.404 106 maps/rooms/64room_000.map 512 512 18 213 364 143 426.558 106 maps/rooms/64room_000.map 512 512 15 144 179 335 424.647 106 maps/rooms/64room_000.map 512 512 50 187 246 210 424.889 106 maps/rooms/64room_000.map 512 512 191 205 366 504 427.948 106 maps/rooms/64room_000.map 512 512 126 100 394 153 427.257 106 maps/rooms/64room_000.map 512 512 397 289 145 58 424.99 106 maps/rooms/64room_000.map 512 512 470 335 353 37 427.25 106 maps/rooms/64room_000.map 512 512 350 503 97 360 424.801 106 maps/rooms/64room_000.map 512 512 162 183 250 373 425.245 107 maps/rooms/64room_000.map 512 512 362 33 120 304 429.375 107 maps/rooms/64room_000.map 512 512 62 325 151 18 430.96 107 maps/rooms/64room_000.map 512 512 507 354 409 106 431.019 107 maps/rooms/64room_000.map 512 512 335 416 468 82 431.735 107 maps/rooms/64room_000.map 512 512 380 316 249 8 428.12 107 maps/rooms/64room_000.map 512 512 138 132 294 390 429.688 107 maps/rooms/64room_000.map 512 512 366 34 60 49 431.032 107 maps/rooms/64room_000.map 512 512 413 86 170 358 429.475 107 maps/rooms/64room_000.map 512 512 138 61 41 276 428.777 107 maps/rooms/64room_000.map 512 512 382 429 124 223 431.872 108 maps/rooms/64room_000.map 512 512 393 372 141 101 433.96 108 maps/rooms/64room_000.map 512 512 129 1 193 356 433.09 108 maps/rooms/64room_000.map 512 512 68 305 374 502 434.505 108 maps/rooms/64room_000.map 512 512 321 383 50 360 434.149 108 maps/rooms/64room_000.map 512 512 68 398 391 225 434.09 108 maps/rooms/64room_000.map 512 512 395 72 83 60 434.174 108 maps/rooms/64room_000.map 512 512 420 140 278 392 434.617 108 maps/rooms/64room_000.map 512 512 219 466 453 290 434.156 108 maps/rooms/64room_000.map 512 512 374 337 118 114 435.073 108 maps/rooms/64room_000.map 512 512 147 251 482 65 432.328 109 maps/rooms/64room_000.map 512 512 97 321 140 60 438.049 109 maps/rooms/64room_000.map 512 512 247 262 34 151 438.818 109 maps/rooms/64room_000.map 512 512 172 101 56 443 438.357 109 maps/rooms/64room_000.map 512 512 334 94 81 353 436.014 109 maps/rooms/64room_000.map 512 512 123 213 498 253 436.806 109 maps/rooms/64room_000.map 512 512 139 287 451 131 439.421 109 maps/rooms/64room_000.map 512 512 419 349 150 137 438.002 109 maps/rooms/64room_000.map 512 512 505 397 264 136 439.321 109 maps/rooms/64room_000.map 512 512 382 423 327 46 436.936 109 maps/rooms/64room_000.map 512 512 440 16 406 349 437.534 110 maps/rooms/64room_000.map 512 512 202 442 402 156 442.576 110 maps/rooms/64room_000.map 512 512 232 479 116 130 443.475 110 maps/rooms/64room_000.map 512 512 53 329 258 45 441.742 110 maps/rooms/64room_000.map 512 512 369 335 164 191 442.002 110 maps/rooms/64room_000.map 512 512 473 110 130 180 443.818 110 maps/rooms/64room_000.map 512 512 58 93 3 428 442.617 110 maps/rooms/64room_000.map 512 512 126 134 311 406 442.002 110 maps/rooms/64room_000.map 512 512 483 302 165 426 440.551 110 maps/rooms/64room_000.map 512 512 262 219 468 509 440.558 110 maps/rooms/64room_000.map 512 512 138 316 496 140 442.517 111 maps/rooms/64room_000.map 512 512 477 13 397 284 444.571 111 maps/rooms/64room_000.map 512 512 437 218 71 382 445.304 111 maps/rooms/64room_000.map 512 512 350 103 21 95 444.002 111 maps/rooms/64room_000.map 512 512 155 370 454 135 447.304 111 maps/rooms/64room_000.map 512 512 281 83 379 387 446.375 111 maps/rooms/64room_000.map 512 512 97 382 19 48 444.174 111 maps/rooms/64room_000.map 512 512 437 351 163 461 444.558 111 maps/rooms/64room_000.map 512 512 499 490 250 202 446.789 111 maps/rooms/64room_000.map 512 512 357 343 464 45 446.931 111 maps/rooms/64room_000.map 512 512 103 47 328 168 445.772 112 maps/rooms/64room_000.map 512 512 375 327 8 206 448.902 112 maps/rooms/64room_000.map 512 512 472 263 72 360 451.978 112 maps/rooms/64room_000.map 512 512 122 87 70 478 451.475 112 maps/rooms/64room_000.map 512 512 209 321 492 209 451.233 112 maps/rooms/64room_000.map 512 512 424 300 507 19 449.831 112 maps/rooms/64room_000.map 512 512 103 345 146 37 450.806 112 maps/rooms/64room_000.map 512 512 452 224 152 432 449.747 112 maps/rooms/64room_000.map 512 512 249 110 439 394 451.647 112 maps/rooms/64room_000.map 512 512 54 372 388 367 449.451 112 maps/rooms/64room_000.map 512 512 72 405 415 353 449.333 113 maps/rooms/64room_000.map 512 512 250 366 80 59 453.274 113 maps/rooms/64room_000.map 512 512 397 13 46 94 452.576 113 maps/rooms/64room_000.map 512 512 152 393 252 62 454.966 113 maps/rooms/64room_000.map 512 512 457 134 405 464 454.291 113 maps/rooms/64room_000.map 512 512 339 152 81 420 453.161 113 maps/rooms/64room_000.map 512 512 463 409 175 460 453.073 113 maps/rooms/64room_000.map 512 512 198 459 104 86 454.12 113 maps/rooms/64room_000.map 512 512 137 150 43 498 454.215 113 maps/rooms/64room_000.map 512 512 388 426 408 38 453.078 113 maps/rooms/64room_000.map 512 512 258 32 331 371 453.522 114 maps/rooms/64room_000.map 512 512 98 441 401 219 457.534 114 maps/rooms/64room_000.map 512 512 113 451 168 127 456.203 114 maps/rooms/64room_000.map 512 512 186 146 209 443 456.475 114 maps/rooms/64room_000.map 512 512 190 13 440 293 458.676 114 maps/rooms/64room_000.map 512 512 201 151 460 33 456.671 114 maps/rooms/64room_000.map 512 512 125 427 248 84 458.534 114 maps/rooms/64room_000.map 512 512 219 442 113 78 456.534 114 maps/rooms/64room_000.map 512 512 480 424 404 124 458.936 114 maps/rooms/64room_000.map 512 512 137 455 155 89 458.818 114 maps/rooms/64room_000.map 512 512 330 424 203 56 457.274 115 maps/rooms/64room_000.map 512 512 440 299 158 29 461.203 115 maps/rooms/64room_000.map 512 512 61 490 367 304 460.635 115 maps/rooms/64room_000.map 512 512 364 376 179 5 461.103 115 maps/rooms/64room_000.map 512 512 428 206 459 479 462.517 115 maps/rooms/64room_000.map 512 512 184 65 12 422 461.156 115 maps/rooms/64room_000.map 512 512 300 73 339 408 462.517 115 maps/rooms/64room_000.map 512 512 481 279 94 301 461.375 115 maps/rooms/64room_000.map 512 512 218 447 404 153 460.96 115 maps/rooms/64room_000.map 512 512 189 45 222 418 462.108 115 maps/rooms/64room_000.map 512 512 342 398 187 19 462.475 116 maps/rooms/64room_000.map 512 512 153 378 362 39 465.546 116 maps/rooms/64room_000.map 512 512 228 105 383 488 467.789 116 maps/rooms/64room_000.map 512 512 446 382 347 2 466.948 116 maps/rooms/64room_000.map 512 512 220 432 430 161 467.718 116 maps/rooms/64room_000.map 512 512 381 73 36 18 467.831 116 maps/rooms/64room_000.map 512 512 405 326 318 127 467.328 116 maps/rooms/64room_000.map 512 512 410 356 9 360 467.09 116 maps/rooms/64room_000.map 512 512 460 508 315 177 465.161 116 maps/rooms/64room_000.map 512 512 201 487 423 214 466.563 116 maps/rooms/64room_000.map 512 512 378 143 38 265 464.784 117 maps/rooms/64room_000.map 512 512 108 197 445 411 469.132 117 maps/rooms/64room_000.map 512 512 490 221 106 180 471.836 117 maps/rooms/64room_000.map 512 512 340 173 69 451 470.647 117 maps/rooms/64room_000.map 512 512 493 172 172 11 470.458 117 maps/rooms/64room_000.map 512 512 67 351 258 14 469.203 117 maps/rooms/64room_000.map 512 512 235 396 451 196 469.345 117 maps/rooms/64room_000.map 512 512 321 349 42 425 468.345 117 maps/rooms/64room_000.map 512 512 499 43 164 245 468.813 117 maps/rooms/64room_000.map 512 512 443 333 220 39 469.416 117 maps/rooms/64room_000.map 512 512 338 438 198 51 469.718 118 maps/rooms/64room_000.map 512 512 203 462 163 183 472.345 118 maps/rooms/64room_000.map 512 512 232 274 480 60 473.872 118 maps/rooms/64room_000.map 512 512 466 218 113 141 472.926 118 maps/rooms/64room_000.map 512 512 73 407 341 485 473.914 118 maps/rooms/64room_000.map 512 512 14 261 427 269 474.706 118 maps/rooms/64room_000.map 512 512 377 43 28 3 472.73 118 maps/rooms/64room_000.map 512 512 25 385 352 359 473.191 118 maps/rooms/64room_000.map 512 512 120 207 489 115 472.328 118 maps/rooms/64room_000.map 512 512 235 490 410 230 474.789 118 maps/rooms/64room_000.map 512 512 330 173 54 447 475.831 119 maps/rooms/64room_000.map 512 512 463 311 30 346 478.451 119 maps/rooms/64room_000.map 512 512 364 232 95 35 479.931 119 maps/rooms/64room_000.map 512 512 215 460 286 87 476.877 119 maps/rooms/64room_000.map 512 512 207 17 435 323 477.688 119 maps/rooms/64room_000.map 512 512 54 246 477 251 476.291 119 maps/rooms/64room_000.map 512 512 67 367 470 228 477.304 119 maps/rooms/64room_000.map 512 512 300 427 381 30 478.492 119 maps/rooms/64room_000.map 512 512 394 451 101 442 476.517 119 maps/rooms/64room_000.map 512 512 88 371 477 372 478.576 119 maps/rooms/64room_000.map 512 512 269 412 94 67 476.416 120 maps/rooms/64room_000.map 512 512 381 333 102 76 480.073 120 maps/rooms/64room_000.map 512 512 60 489 68 88 483.801 120 maps/rooms/64room_000.map 512 512 39 103 407 145 483.688 120 maps/rooms/64room_000.map 512 512 255 379 259 24 483.617 120 maps/rooms/64room_000.map 512 512 282 49 341 433 480.338 120 maps/rooms/64room_000.map 512 512 469 16 160 123 481.044 120 maps/rooms/64room_000.map 512 512 18 385 396 339 481.404 120 maps/rooms/64room_000.map 512 512 308 28 61 263 481.487 120 maps/rooms/64room_000.map 512 512 208 112 427 465 481.789 120 maps/rooms/64room_000.map 512 512 312 211 38 511 482.032 121 maps/rooms/64room_000.map 512 512 363 234 110 42 486.688 121 maps/rooms/64room_000.map 512 512 25 511 330 389 487.357 121 maps/rooms/64room_000.map 512 512 201 471 321 117 486.777 121 maps/rooms/64room_000.map 512 512 184 96 352 463 487.073 121 maps/rooms/64room_000.map 512 512 485 486 408 152 484.203 121 maps/rooms/64room_000.map 512 512 114 449 440 477 487.061 121 maps/rooms/64room_000.map 512 512 114 93 425 319 487.416 121 maps/rooms/64room_000.map 512 512 419 87 411 491 486.09 121 maps/rooms/64room_000.map 512 512 200 390 405 134 486.99 121 maps/rooms/64room_000.map 512 512 458 297 86 432 484.179 122 maps/rooms/64room_000.map 512 512 115 40 383 155 491.541 122 maps/rooms/64room_000.map 512 512 504 149 239 363 489.659 122 maps/rooms/64room_000.map 512 512 456 113 358 460 489.191 122 maps/rooms/64room_000.map 512 512 383 166 459 505 490.546 122 maps/rooms/64room_000.map 512 512 440 406 63 371 490.759 122 maps/rooms/64room_000.map 512 512 262 159 490 495 489.161 122 maps/rooms/64room_000.map 512 512 435 464 122 415 488.416 122 maps/rooms/64room_000.map 512 512 234 430 396 131 488.605 122 maps/rooms/64room_000.map 512 512 474 33 132 60 491.659 122 maps/rooms/64room_000.map 512 512 33 288 367 53 490.754 123 maps/rooms/64room_000.map 512 512 313 402 280 82 492.404 123 maps/rooms/64room_000.map 512 512 127 27 232 346 494.701 123 maps/rooms/64room_000.map 512 512 267 394 511 169 493.902 123 maps/rooms/64room_000.map 512 512 75 469 399 218 492.647 123 maps/rooms/64room_000.map 512 512 469 273 15 301 492.794 123 maps/rooms/64room_000.map 512 512 331 273 37 29 495.931 123 maps/rooms/64room_000.map 512 512 42 310 455 249 492.049 123 maps/rooms/64room_000.map 512 512 353 439 305 74 495.617 123 maps/rooms/64room_000.map 512 512 388 71 13 329 495.926 123 maps/rooms/64room_000.map 512 512 484 293 176 30 493.96 124 maps/rooms/64room_000.map 512 512 35 328 452 441 497.831 124 maps/rooms/64room_000.map 512 512 343 84 251 429 496.99 124 maps/rooms/64room_000.map 512 512 341 335 17 494 497.416 124 maps/rooms/64room_000.map 512 512 489 78 103 226 499.612 124 maps/rooms/64room_000.map 512 512 66 331 412 55 497.813 124 maps/rooms/64room_000.map 512 512 92 388 408 116 498.96 124 maps/rooms/64room_000.map 512 512 449 397 84 192 498.434 124 maps/rooms/64room_000.map 512 512 510 139 97 294 496.073 124 maps/rooms/64room_000.map 512 512 175 184 294 420 496.269 124 maps/rooms/64room_000.map 512 512 474 145 444 484 496.789 125 maps/rooms/64room_000.map 512 512 458 103 235 345 501.174 125 maps/rooms/64room_000.map 512 512 341 70 45 146 503.304 125 maps/rooms/64room_000.map 512 512 33 229 339 450 502.144 125 maps/rooms/64room_000.map 512 512 321 69 496 436 500.149 125 maps/rooms/64room_000.map 512 512 165 403 25 57 503.63 125 maps/rooms/64room_000.map 512 512 78 501 406 278 503.877 125 maps/rooms/64room_000.map 512 512 14 89 356 318 503.357 125 maps/rooms/64room_000.map 512 512 82 400 487 328 502.22 125 maps/rooms/64room_000.map 512 512 454 207 491 490 500.576 125 maps/rooms/64room_000.map 512 512 117 126 348 447 502.6 126 maps/rooms/64room_000.map 512 512 247 321 355 38 507.416 126 maps/rooms/64room_000.map 512 512 425 89 142 413 507.073 126 maps/rooms/64room_000.map 512 512 134 488 185 52 504.605 126 maps/rooms/64room_000.map 512 512 59 298 452 406 504.002 126 maps/rooms/64room_000.map 512 512 355 28 175 415 506.647 126 maps/rooms/64room_000.map 512 512 14 50 403 106 505.843 126 maps/rooms/64room_000.map 512 512 433 250 247 468 506.032 126 maps/rooms/64room_000.map 512 512 182 119 409 497 506.044 126 maps/rooms/64room_000.map 512 512 172 468 354 124 504.659 126 maps/rooms/64room_000.map 512 512 204 3 365 423 507.274 127 maps/rooms/64room_000.map 512 512 453 157 226 416 511.044 127 maps/rooms/64room_000.map 512 512 106 404 143 39 510.617 127 maps/rooms/64room_000.map 512 512 195 396 476 165 509.546 127 maps/rooms/64room_000.map 512 512 97 87 13 505 509.428 127 maps/rooms/64room_000.map 512 512 96 462 403 198 509.659 127 maps/rooms/64room_000.map 512 512 28 95 385 194 510.132 127 maps/rooms/64room_000.map 512 512 482 363 121 407 509.233 127 maps/rooms/64room_000.map 512 512 315 125 463 271 509.328 127 maps/rooms/64room_000.map 512 512 356 94 81 419 509.203 127 maps/rooms/64room_000.map 512 512 76 507 421 340 510.801 128 maps/rooms/64room_000.map 512 512 409 328 32 471 514.617 128 maps/rooms/64room_000.map 512 512 188 508 398 241 513.399 128 maps/rooms/64room_000.map 512 512 431 46 104 11 515.973 128 maps/rooms/64room_000.map 512 512 132 433 259 19 513.659 128 maps/rooms/64room_000.map 512 512 56 494 397 269 513.362 128 maps/rooms/64room_000.map 512 512 307 425 441 32 513.919 128 maps/rooms/64room_000.map 512 512 156 172 221 511 514.902 128 maps/rooms/64room_000.map 512 512 174 428 49 14 515.416 128 maps/rooms/64room_000.map 512 512 423 24 455 390 515.421 128 maps/rooms/64room_000.map 512 512 174 183 380 405 515.63 129 maps/rooms/64room_000.map 512 512 413 379 85 124 517.115 129 maps/rooms/64room_000.map 512 512 502 80 428 441 518.428 129 maps/rooms/64room_000.map 512 512 475 109 65 299 519.269 129 maps/rooms/64room_000.map 512 512 413 478 185 84 518.902 129 maps/rooms/64room_000.map 512 512 439 428 151 73 517.642 129 maps/rooms/64room_000.map 512 512 35 411 400 471 518.227 129 maps/rooms/64room_000.map 512 512 426 466 200 77 519.517 129 maps/rooms/64room_000.map 512 512 297 11 6 352 519.269 129 maps/rooms/64room_000.map 512 512 56 385 328 181 516.174 129 maps/rooms/64room_000.map 512 512 459 202 53 372 518.333 130 maps/rooms/64room_000.map 512 512 425 183 53 444 521.701 130 maps/rooms/64room_000.map 512 512 71 99 452 211 520.612 130 maps/rooms/64room_000.map 512 512 414 82 6 165 520.304 130 maps/rooms/64room_000.map 512 512 50 204 435 127 522.098 130 maps/rooms/64room_000.map 512 512 51 277 462 254 521.605 130 maps/rooms/64room_000.map 512 512 145 479 511 496 522.186 130 maps/rooms/64room_000.map 512 512 333 471 487 118 523.6 130 maps/rooms/64room_000.map 512 512 156 166 509 237 520.926 130 maps/rooms/64room_000.map 512 512 494 342 29 354 521.635 130 maps/rooms/64room_000.map 512 512 479 366 104 426 521.777 131 maps/rooms/64room_000.map 512 512 500 341 275 112 525.63 131 maps/rooms/64room_000.map 512 512 96 410 227 4 525.558 131 maps/rooms/64room_000.map 512 512 484 79 465 399 526.362 131 maps/rooms/64room_000.map 512 512 403 111 14 35 525.843 131 maps/rooms/64room_000.map 512 512 343 2 101 357 527.032 131 maps/rooms/64room_000.map 512 512 436 416 413 2 526.806 131 maps/rooms/64room_000.map 512 512 487 390 402 34 527.551 131 maps/rooms/64room_000.map 512 512 460 407 144 107 526.96 131 maps/rooms/64room_000.map 512 512 339 338 80 29 526.156 131 maps/rooms/64room_000.map 512 512 226 493 257 127 527.191 132 maps/rooms/64room_000.map 512 512 356 342 81 29 529.328 132 maps/rooms/64room_000.map 512 512 28 496 367 497 529.529 132 maps/rooms/64room_000.map 512 512 471 200 159 450 531.487 132 maps/rooms/64room_000.map 512 512 115 369 488 480 529.772 132 maps/rooms/64room_000.map 512 512 389 13 107 345 529.647 132 maps/rooms/64room_000.map 512 512 485 95 230 328 529.387 132 maps/rooms/64room_000.map 512 512 465 205 11 304 529.676 132 maps/rooms/64room_000.map 512 512 431 115 475 453 530.919 132 maps/rooms/64room_000.map 512 512 356 299 7 46 530.257 132 maps/rooms/64room_000.map 512 512 319 77 414 419 530.044 133 maps/rooms/64room_000.map 512 512 474 507 330 102 532.848 133 maps/rooms/64room_000.map 512 512 135 420 354 27 535.831 133 maps/rooms/64room_000.map 512 512 164 446 39 36 533.759 133 maps/rooms/64room_000.map 512 512 139 24 393 417 532.186 133 maps/rooms/64room_000.map 512 512 21 104 9 454 534.316 133 maps/rooms/64room_000.map 512 512 145 34 325 446 535.73 133 maps/rooms/64room_000.map 512 512 492 446 126 218 534.801 133 maps/rooms/64room_000.map 512 512 478 342 486 41 532.227 133 maps/rooms/64room_000.map 512 512 355 372 29 102 534.801 133 maps/rooms/64room_000.map 512 512 86 474 110 39 532.085 134 maps/rooms/64room_000.map 512 512 114 151 492 7 539.872 134 maps/rooms/64room_000.map 512 512 243 132 463 486 537.227 134 maps/rooms/64room_000.map 512 512 476 52 489 321 539.973 134 maps/rooms/64room_000.map 512 512 107 492 425 175 538.772 134 maps/rooms/64room_000.map 512 512 70 382 330 8 538.843 134 maps/rooms/64room_000.map 512 512 393 255 89 501 536.617 134 maps/rooms/64room_000.map 512 512 496 221 90 417 537.647 134 maps/rooms/64room_000.map 512 512 16 226 426 426 538.642 134 maps/rooms/64room_000.map 512 512 15 388 422 450 539.156 134 maps/rooms/64room_000.map 512 512 349 30 211 441 536.789 135 maps/rooms/64room_000.map 512 512 7 39 435 18 542.085 135 maps/rooms/64room_000.map 512 512 61 63 252 414 543.044 135 maps/rooms/64room_000.map 512 512 470 362 206 2 543.73 135 maps/rooms/64room_000.map 512 512 90 310 507 463 540.257 135 maps/rooms/64room_000.map 512 512 41 69 441 152 542.754 135 maps/rooms/64room_000.map 512 512 500 441 36 316 540.487 135 maps/rooms/64room_000.map 512 512 219 59 116 489 543.233 135 maps/rooms/64room_000.map 512 512 15 482 89 48 541.754 135 maps/rooms/64room_000.map 512 512 494 329 250 57 543.789 135 maps/rooms/64room_000.map 512 512 207 14 166 466 540.789 136 maps/rooms/64room_000.map 512 512 390 208 31 34 546.245 136 maps/rooms/64room_000.map 512 512 481 52 152 316 546.286 136 maps/rooms/64room_000.map 512 512 433 118 80 413 547.831 136 maps/rooms/64room_000.map 512 512 21 23 60 397 545.742 136 maps/rooms/64room_000.map 512 512 4 91 438 129 545.688 136 maps/rooms/64room_000.map 512 512 452 361 156 191 547.688 136 maps/rooms/64room_000.map 512 512 204 47 98 459 546.458 136 maps/rooms/64room_000.map 512 512 20 507 418 457 545.085 136 maps/rooms/64room_000.map 512 512 398 212 125 45 544.558 136 maps/rooms/64room_000.map 512 512 394 10 335 475 546.978 137 maps/rooms/64room_000.map 512 512 229 53 346 457 550.387 137 maps/rooms/64room_000.map 512 512 155 463 20 83 551.156 137 maps/rooms/64room_000.map 512 512 50 447 333 99 550.387 137 maps/rooms/64room_000.map 512 512 475 318 46 432 548.647 137 maps/rooms/64room_000.map 512 512 388 497 277 100 548.5 137 maps/rooms/64room_000.map 512 512 99 166 324 467 548.257 137 maps/rooms/64room_000.map 512 512 71 134 511 259 550.546 137 maps/rooms/64room_000.map 512 512 284 67 377 500 550.115 137 maps/rooms/64room_000.map 512 512 468 57 163 323 548.63 137 maps/rooms/64room_000.map 512 512 474 480 505 166 549.701 138 maps/rooms/64room_000.map 512 512 485 30 410 431 554.985 138 maps/rooms/64room_000.map 512 512 54 498 412 194 553.63 138 maps/rooms/64room_000.map 512 512 447 10 225 378 554.5 138 maps/rooms/64room_000.map 512 512 402 149 119 10 553.98 138 maps/rooms/64room_000.map 512 512 493 462 450 94 553.718 138 maps/rooms/64room_000.map 512 512 434 435 46 404 553.926 138 maps/rooms/64room_000.map 512 512 488 317 163 510 555.127 138 maps/rooms/64room_000.map 512 512 2 60 130 450 555.47 138 maps/rooms/64room_000.map 512 512 478 2 490 313 555.198 138 maps/rooms/64room_000.map 512 512 196 61 25 473 553.399 139 maps/rooms/64room_000.map 512 512 277 26 472 387 559.764 139 maps/rooms/64room_000.map 512 512 464 341 74 510 559.985 139 maps/rooms/64room_000.map 512 512 333 1 270 397 556.002 139 maps/rooms/64room_000.map 512 512 13 169 165 439 559.446 139 maps/rooms/64room_000.map 512 512 216 416 29 13 558.458 139 maps/rooms/64room_000.map 512 512 51 489 50 49 558.227 139 maps/rooms/64room_000.map 512 512 180 351 470 52 559.115 139 maps/rooms/64room_000.map 512 512 2 422 265 36 558.11 139 maps/rooms/64room_000.map 512 512 266 32 172 469 558.286 139 maps/rooms/64room_000.map 512 512 62 463 22 151 558.115 140 maps/rooms/64room_000.map 512 512 511 87 52 252 562.399 140 maps/rooms/64room_000.map 512 512 403 267 10 79 561.399 140 maps/rooms/64room_000.map 512 512 499 209 71 82 561.382 140 maps/rooms/64room_000.map 512 512 12 170 404 185 563.441 140 maps/rooms/64room_000.map 512 512 68 82 495 215 561.11 140 maps/rooms/64room_000.map 512 512 148 497 446 135 563.713 140 maps/rooms/64room_000.map 512 512 41 383 433 112 562.495 140 maps/rooms/64room_000.map 512 512 41 40 245 436 561.286 140 maps/rooms/64room_000.map 512 512 506 447 106 418 562.085 140 maps/rooms/64room_000.map 512 512 490 336 242 4 560.6 141 maps/rooms/64room_000.map 512 512 450 301 38 122 564.487 141 maps/rooms/64room_000.map 512 512 6 344 490 168 565.688 141 maps/rooms/64room_000.map 512 512 480 13 186 289 565.813 141 maps/rooms/64room_000.map 512 512 259 111 54 478 565.446 141 maps/rooms/64room_000.map 512 512 392 86 147 491 567.328 141 maps/rooms/64room_000.map 512 512 484 416 286 45 566.907 141 maps/rooms/64room_000.map 512 512 487 85 98 370 565.044 141 maps/rooms/64room_000.map 512 512 471 305 38 389 564.848 141 maps/rooms/64room_000.map 512 512 502 3 482 338 564.186 141 maps/rooms/64room_000.map 512 512 258 114 109 456 564.647 142 maps/rooms/64room_000.map 512 512 101 503 298 55 571.759 142 maps/rooms/64room_000.map 512 512 81 363 484 76 568.156 142 maps/rooms/64room_000.map 512 512 83 481 343 97 570.274 142 maps/rooms/64room_000.map 512 512 250 454 464 146 568.718 142 maps/rooms/64room_000.map 512 512 3 483 337 130 569.5 142 maps/rooms/64room_000.map 512 512 76 272 508 37 571.441 142 maps/rooms/64room_000.map 512 512 5 451 403 178 569.943 142 maps/rooms/64room_000.map 512 512 25 8 390 202 569.014 142 maps/rooms/64room_000.map 512 512 430 244 101 30 570.813 142 maps/rooms/64room_000.map 512 512 439 376 62 126 568.955 143 maps/rooms/64room_000.map 512 512 469 362 123 88 574.357 143 maps/rooms/64room_000.map 512 512 478 51 101 233 574.796 143 maps/rooms/64room_000.map 512 512 456 425 189 12 575.772 143 maps/rooms/64room_000.map 512 512 15 117 507 72 572.487 143 maps/rooms/64room_000.map 512 512 50 478 416 155 573.014 143 maps/rooms/64room_000.map 512 512 46 136 340 328 572.357 143 maps/rooms/64room_000.map 512 512 416 3 424 484 574.848 143 maps/rooms/64room_000.map 512 512 422 481 133 65 574.955 143 maps/rooms/64room_000.map 512 512 53 102 459 330 573.286 143 maps/rooms/64room_000.map 512 512 105 399 453 122 574.245 144 maps/rooms/64room_000.map 512 512 120 187 439 494 577.914 144 maps/rooms/64room_000.map 512 512 104 213 460 44 576.796 144 maps/rooms/64room_000.map 512 512 107 212 464 468 578.127 144 maps/rooms/64room_000.map 512 512 53 474 275 53 578.73 144 maps/rooms/64room_000.map 512 512 463 444 295 118 578.382 144 maps/rooms/64room_000.map 512 512 507 78 252 321 579.713 144 maps/rooms/64room_000.map 512 512 46 49 337 373 579.784 144 maps/rooms/64room_000.map 512 512 452 474 87 501 579.186 144 maps/rooms/64room_000.map 512 512 346 365 127 35 578.955 144 maps/rooms/64room_000.map 512 512 142 446 474 83 578.671 145 maps/rooms/64room_000.map 512 512 467 198 58 38 581.139 145 maps/rooms/64room_000.map 512 512 35 58 423 230 582.843 145 maps/rooms/64room_000.map 512 512 418 212 32 5 581.257 145 maps/rooms/64room_000.map 512 512 126 164 434 481 583.056 145 maps/rooms/64room_000.map 512 512 218 489 101 19 583.014 145 maps/rooms/64room_000.map 512 512 108 54 440 281 583.156 145 maps/rooms/64room_000.map 512 512 478 68 98 11 583.784 145 maps/rooms/64room_000.map 512 512 24 120 472 242 582.767 145 maps/rooms/64room_000.map 512 512 187 19 386 505 583.073 145 maps/rooms/64room_000.map 512 512 29 497 199 54 581.642 146 maps/rooms/64room_000.map 512 512 1 422 459 241 585.659 146 maps/rooms/64room_000.map 512 512 30 27 410 254 586.428 146 maps/rooms/64room_000.map 512 512 86 19 441 238 584.115 146 maps/rooms/64room_000.map 512 512 423 467 266 35 585.735 146 maps/rooms/64room_000.map 512 512 487 33 350 473 586.47 146 maps/rooms/64room_000.map 512 512 432 77 118 431 585.286 146 maps/rooms/64room_000.map 512 512 22 28 23 477 587.855 146 maps/rooms/64room_000.map 512 512 416 326 49 37 586.399 146 maps/rooms/64room_000.map 512 512 21 502 461 442 586.34 146 maps/rooms/64room_000.map 512 512 106 16 443 215 586.708 147 maps/rooms/64room_000.map 512 512 137 13 248 504 590.902 147 maps/rooms/64room_000.map 512 512 214 3 409 475 591.014 147 maps/rooms/64room_000.map 512 512 106 471 462 205 590.115 147 maps/rooms/64room_000.map 512 512 509 72 247 397 590.37 147 maps/rooms/64room_000.map 512 512 83 465 268 25 591.659 147 maps/rooms/64room_000.map 512 512 87 234 455 458 588.441 147 maps/rooms/64room_000.map 512 512 30 70 326 437 589.482 147 maps/rooms/64room_000.map 512 512 118 389 460 491 588.583 147 maps/rooms/64room_000.map 512 512 32 21 61 507 590.914 147 maps/rooms/64room_000.map 512 512 103 455 305 41 588.316 148 maps/rooms/64room_000.map 512 512 477 483 21 328 593.257 148 maps/rooms/64room_000.map 512 512 222 9 416 456 594.914 148 maps/rooms/64room_000.map 512 512 409 474 106 110 595.257 148 maps/rooms/64room_000.map 512 512 30 92 392 395 592.671 148 maps/rooms/64room_000.map 512 512 361 419 17 116 592.973 148 maps/rooms/64room_000.map 512 512 1 499 49 51 595.453 148 maps/rooms/64room_000.map 512 512 271 2 478 414 595.818 148 maps/rooms/64room_000.map 512 512 23 34 350 373 593.671 148 maps/rooms/64room_000.map 512 512 118 458 462 499 595.985 148 maps/rooms/64room_000.map 512 512 493 314 40 475 593.546 149 maps/rooms/64room_000.map 512 512 398 502 310 124 599.997 149 maps/rooms/64room_000.map 512 512 15 501 122 40 597.068 149 maps/rooms/64room_000.map 512 512 330 71 27 446 596.222 149 maps/rooms/64room_000.map 512 512 498 432 163 150 599.642 149 maps/rooms/64room_000.map 512 512 434 504 284 27 597.375 149 maps/rooms/64room_000.map 512 512 497 59 239 324 596.127 149 maps/rooms/64room_000.map 512 512 445 504 70 151 596.198 149 maps/rooms/64room_000.map 512 512 327 66 100 502 599.902 149 maps/rooms/64room_000.map 512 512 92 35 469 158 598.08 149 maps/rooms/64room_000.map 512 512 46 490 278 50 598.215 150 maps/rooms/64room_000.map 512 512 36 458 506 431 600.186 150 maps/rooms/64room_000.map 512 512 8 21 406 303 600.056 150 maps/rooms/64room_000.map 512 512 309 106 496 410 602.813 150 maps/rooms/64room_000.map 512 512 14 169 281 430 601.914 150 maps/rooms/64room_000.map 512 512 439 227 30 12 603.428 150 maps/rooms/64room_000.map 512 512 15 47 241 474 600.914 150 maps/rooms/64room_000.map 512 512 445 168 9 462 600.541 150 maps/rooms/64room_000.map 512 512 236 50 440 453 601.943 150 maps/rooms/64room_000.map 512 512 356 46 190 460 602.701 150 maps/rooms/64room_000.map 512 512 35 478 452 376 600.671 151 maps/rooms/64room_000.map 512 512 47 118 478 357 604.742 151 maps/rooms/64room_000.map 512 512 92 451 492 504 606.328 151 maps/rooms/64room_000.map 512 512 53 442 433 90 604.884 151 maps/rooms/64room_000.map 512 512 410 381 6 126 606.813 151 maps/rooms/64room_000.map 512 512 1 122 175 505 607.056 151 maps/rooms/64room_000.map 512 512 239 55 443 455 605.044 151 maps/rooms/64room_000.map 512 512 2 122 492 181 607.441 151 maps/rooms/64room_000.map 512 512 301 77 495 451 604.541 151 maps/rooms/64room_000.map 512 512 357 13 245 464 607.073 151 maps/rooms/64room_000.map 512 512 31 53 333 381 606.098 152 maps/rooms/64room_000.map 512 512 507 177 17 106 608.269 152 maps/rooms/64room_000.map 512 512 190 510 480 156 610.624 152 maps/rooms/64room_000.map 512 512 480 251 66 487 609.044 152 maps/rooms/64room_000.map 512 512 378 409 100 37 608.825 152 maps/rooms/64room_000.map 512 512 454 226 39 510 608.872 152 maps/rooms/64room_000.map 512 512 337 485 509 19 609.328 152 maps/rooms/64room_000.map 512 512 106 58 450 264 611.186 152 maps/rooms/64room_000.map 512 512 33 45 421 327 610.299 152 maps/rooms/64room_000.map 512 512 5 91 165 509 608.299 152 maps/rooms/64room_000.map 512 512 500 45 62 214 609.34 153 maps/rooms/64room_000.map 512 512 59 14 390 376 612.47 153 maps/rooms/64room_000.map 512 512 133 341 477 5 612.683 153 maps/rooms/64room_000.map 512 512 183 395 459 49 614.943 153 maps/rooms/64room_000.map 512 512 223 469 425 27 613.872 153 maps/rooms/64room_000.map 512 512 11 181 107 492 612.428 153 maps/rooms/64room_000.map 512 512 487 121 44 259 612.98 153 maps/rooms/64room_000.map 512 512 207 387 510 81 615.642 153 maps/rooms/64room_000.map 512 512 423 198 51 175 612.495 153 maps/rooms/64room_000.map 512 512 399 364 96 7 613.754 153 maps/rooms/64room_000.map 512 512 49 165 292 412 614.198 154 maps/rooms/64room_000.map 512 512 463 413 120 92 617.63 154 maps/rooms/64room_000.map 512 512 25 16 137 495 618.796 154 maps/rooms/64room_000.map 512 512 440 271 22 52 616.654 154 maps/rooms/64room_000.map 512 512 456 403 96 82 618.044 154 maps/rooms/64room_000.map 512 512 84 41 386 426 617.34 154 maps/rooms/64room_000.map 512 512 459 407 456 34 617.872 154 maps/rooms/64room_000.map 512 512 433 273 27 16 617.34 154 maps/rooms/64room_000.map 512 512 26 85 366 440 617.399 154 maps/rooms/64room_000.map 512 512 42 166 196 485 617.558 154 maps/rooms/64room_000.map 512 512 431 153 7 493 618.725 155 maps/rooms/64room_000.map 512 512 426 462 255 3 622.683 155 maps/rooms/64room_000.map 512 512 478 308 5 101 623.772 155 maps/rooms/64room_000.map 512 512 300 44 41 503 623.428 155 maps/rooms/64room_000.map 512 512 445 77 27 407 621.335 155 maps/rooms/64room_000.map 512 512 399 113 31 486 620.328 155 maps/rooms/64room_000.map 512 512 143 383 459 39 622.825 155 maps/rooms/64room_000.map 512 512 474 69 151 469 620.997 155 maps/rooms/64room_000.map 512 512 214 3 425 509 623.441 155 maps/rooms/64room_000.map 512 512 15 136 482 178 620.654 155 maps/rooms/64room_000.map 512 512 381 449 31 103 621.328 156 maps/rooms/64room_000.map 512 512 194 476 63 151 624.174 156 maps/rooms/64room_000.map 512 512 141 5 491 409 625.127 156 maps/rooms/64room_000.map 512 512 45 52 428 373 626.181 156 maps/rooms/64room_000.map 512 512 56 140 440 216 627.453 156 maps/rooms/64room_000.map 512 512 397 492 461 22 626.198 156 maps/rooms/64room_000.map 512 512 4 150 484 196 625.855 156 maps/rooms/64room_000.map 512 512 471 37 492 406 626.014 156 maps/rooms/64room_000.map 512 512 63 475 459 488 627.583 156 maps/rooms/64room_000.map 512 512 446 36 129 475 624.441 156 maps/rooms/64room_000.map 512 512 475 304 59 47 626.47 157 maps/rooms/64room_000.map 512 512 417 49 36 393 629.808 157 maps/rooms/64room_000.map 512 512 105 38 398 405 631.169 157 maps/rooms/64room_000.map 512 512 495 39 247 392 628.754 157 maps/rooms/64room_000.map 512 512 108 61 505 232 630.909 157 maps/rooms/64room_000.map 512 512 486 119 74 428 628.754 157 maps/rooms/64room_000.map 512 512 483 7 105 328 630.813 157 maps/rooms/64room_000.map 512 512 458 69 78 438 630.671 157 maps/rooms/64room_000.map 512 512 30 488 470 451 631.441 157 maps/rooms/64room_000.map 512 512 210 324 457 26 628.997 157 maps/rooms/64room_000.map 512 512 50 507 318 65 630.073 158 maps/rooms/64room_000.map 512 512 511 72 449 450 633.571 158 maps/rooms/64room_000.map 512 512 398 505 112 85 635.428 158 maps/rooms/64room_000.map 512 512 13 400 465 102 632.406 158 maps/rooms/64room_000.map 512 512 468 84 216 511 634.286 158 maps/rooms/64room_000.map 512 512 10 440 376 26 633.98 158 maps/rooms/64room_000.map 512 512 278 20 56 500 634.073 158 maps/rooms/64room_000.map 512 512 43 250 470 34 634.696 158 maps/rooms/64room_000.map 512 512 34 14 429 354 632.21 158 maps/rooms/64room_000.map 512 512 440 478 187 179 634.198 158 maps/rooms/64room_000.map 512 512 452 22 68 232 633.495 159 maps/rooms/64room_000.map 512 512 137 469 441 14 638.37 159 maps/rooms/64room_000.map 512 512 452 261 94 13 638.642 159 maps/rooms/64room_000.map 512 512 413 10 12 402 638.678 159 maps/rooms/64room_000.map 512 512 449 32 266 428 638.227 159 maps/rooms/64room_000.map 512 512 398 395 11 139 639.156 159 maps/rooms/64room_000.map 512 512 316 31 54 504 638.671 159 maps/rooms/64room_000.map 512 512 370 376 63 130 638.671 159 maps/rooms/64room_000.map 512 512 5 454 499 224 639.144 159 maps/rooms/64room_000.map 512 512 473 464 147 161 636.37 159 maps/rooms/64room_000.map 512 512 496 2 52 234 639.897 160 maps/rooms/64room_000.map 512 512 422 30 246 495 643.399 160 maps/rooms/64room_000.map 512 512 392 103 44 506 640.428 160 maps/rooms/64room_000.map 512 512 453 13 479 406 640.955 160 maps/rooms/64room_000.map 512 512 443 406 30 106 640.671 160 maps/rooms/64room_000.map 512 512 29 440 497 133 642.612 160 maps/rooms/64room_000.map 512 512 297 49 487 508 642.505 160 maps/rooms/64room_000.map 512 512 33 114 392 471 642.742 160 maps/rooms/64room_000.map 512 512 497 248 49 45 643.749 160 maps/rooms/64room_000.map 512 512 1 425 403 20 642.98 160 maps/rooms/64room_000.map 512 512 2 150 390 396 642.357 161 maps/rooms/64room_000.map 512 512 29 77 452 380 646.642 161 maps/rooms/64room_000.map 512 512 48 252 469 10 647.909 161 maps/rooms/64room_000.map 512 512 49 26 476 51 647.512 161 maps/rooms/64room_000.map 512 512 468 312 118 16 645.21 161 maps/rooms/64room_000.map 512 512 395 439 103 38 647.867 161 maps/rooms/64room_000.map 512 512 411 55 59 416 646.529 161 maps/rooms/64room_000.map 512 512 497 70 52 160 647.299 161 maps/rooms/64room_000.map 512 512 354 379 62 162 647.299 161 maps/rooms/64room_000.map 512 512 28 34 467 271 644.299 161 maps/rooms/64room_000.map 512 512 126 84 323 481 646.441 162 maps/rooms/64room_000.map 512 512 494 265 100 28 651.24 162 maps/rooms/64room_000.map 512 512 18 478 487 148 651.382 162 maps/rooms/64room_000.map 512 512 124 495 444 43 649.855 162 maps/rooms/64room_000.map 512 512 61 263 510 47 648.495 162 maps/rooms/64room_000.map 512 512 11 511 310 61 649.156 162 maps/rooms/64room_000.map 512 512 496 211 7 479 649.884 162 maps/rooms/64room_000.map 512 512 56 140 431 258 648.955 162 maps/rooms/64room_000.map 512 512 434 260 8 3 648.11 162 maps/rooms/64room_000.map 512 512 369 449 6 111 651.014 162 maps/rooms/64room_000.map 512 512 183 477 14 7 648.21 163 maps/rooms/64room_000.map 512 512 476 217 49 132 655.311 163 maps/rooms/64room_000.map 512 512 510 36 2 258 654.583 163 maps/rooms/64room_000.map 512 512 454 55 499 432 653.328 163 maps/rooms/64room_000.map 512 512 456 452 61 402 653.926 163 maps/rooms/64room_000.map 512 512 54 498 451 477 654.825 163 maps/rooms/64room_000.map 512 512 71 459 457 126 653.156 163 maps/rooms/64room_000.map 512 512 90 106 490 450 653.068 163 maps/rooms/64room_000.map 512 512 464 27 47 314 655.82 163 maps/rooms/64room_000.map 512 512 125 363 459 11 654.683 163 maps/rooms/64room_000.map 512 512 449 79 76 473 652.772 164 maps/rooms/64room_000.map 512 512 360 49 20 485 656.541 164 maps/rooms/64room_000.map 512 512 41 190 146 486 657.683 164 maps/rooms/64room_000.map 512 512 35 454 499 507 658.955 164 maps/rooms/64room_000.map 512 512 408 435 92 25 657.696 164 maps/rooms/64room_000.map 512 512 473 190 19 190 658.24 164 maps/rooms/64room_000.map 512 512 453 394 60 69 656.215 164 maps/rooms/64room_000.map 512 512 457 482 104 151 657.169 164 maps/rooms/64room_000.map 512 512 447 111 55 494 657.257 164 maps/rooms/64room_000.map 512 512 453 22 495 414 656.541 164 maps/rooms/64room_000.map 512 512 420 44 108 495 659.014 165 maps/rooms/64room_000.map 512 512 472 274 5 31 663.512 165 maps/rooms/64room_000.map 512 512 482 54 36 9 660.311 165 maps/rooms/64room_000.map 512 512 304 82 511 500 663.583 165 maps/rooms/64room_000.map 512 512 476 82 187 496 661.281 165 maps/rooms/64room_000.map 512 512 58 91 414 453 660.884 165 maps/rooms/64room_000.map 512 512 181 469 498 92 661.955 165 maps/rooms/64room_000.map 512 512 2 211 470 455 662.039 165 maps/rooms/64room_000.map 512 512 100 23 456 367 661.754 165 maps/rooms/64room_000.map 512 512 489 81 123 495 662.541 165 maps/rooms/64room_000.map 512 512 13 432 450 83 662.164 166 maps/rooms/64room_000.map 512 512 486 478 1 423 667.311 166 maps/rooms/64room_000.map 512 512 424 27 179 501 665.382 166 maps/rooms/64room_000.map 512 512 508 495 275 22 666.416 166 maps/rooms/64room_000.map 512 512 232 15 461 461 666.21 166 maps/rooms/64room_000.map 512 512 269 35 480 496 667.203 166 maps/rooms/64room_000.map 512 512 474 349 104 14 666.553 166 maps/rooms/64room_000.map 512 512 459 502 171 51 665.825 166 maps/rooms/64room_000.map 512 512 332 490 87 65 664.725 166 maps/rooms/64room_000.map 512 512 428 27 49 400 665.82 166 maps/rooms/64room_000.map 512 512 96 405 494 39 666.198 167 maps/rooms/64room_000.map 512 512 372 412 7 182 668.571 167 maps/rooms/64room_000.map 512 512 400 484 73 47 669.411 167 maps/rooms/64room_000.map 512 512 187 497 491 102 671.725 167 maps/rooms/64room_000.map 512 512 473 78 57 453 669.583 167 maps/rooms/64room_000.map 512 512 8 497 269 9 669.784 167 maps/rooms/64room_000.map 512 512 42 37 488 344 670.37 167 maps/rooms/64room_000.map 512 512 246 402 470 15 669.423 167 maps/rooms/64room_000.map 512 512 491 394 42 105 669.186 167 maps/rooms/64room_000.map 512 512 111 427 506 51 670.813 167 maps/rooms/64room_000.map 512 512 5 489 275 1 670.299 168 maps/rooms/64room_000.map 512 512 465 454 148 4 674.796 168 maps/rooms/64room_000.map 512 512 77 486 469 86 672.156 168 maps/rooms/64room_000.map 512 512 366 468 54 32 675.897 168 maps/rooms/64room_000.map 512 512 61 405 493 510 673.683 168 maps/rooms/64room_000.map 512 512 362 1 53 474 675.127 168 maps/rooms/64room_000.map 512 512 464 50 119 16 675.524 168 maps/rooms/64room_000.map 512 512 49 96 353 505 672.754 168 maps/rooms/64room_000.map 512 512 129 411 449 61 675.328 168 maps/rooms/64room_000.map 512 512 274 29 510 504 674.345 168 maps/rooms/64room_000.map 512 512 495 1 495 455 673.612 169 maps/rooms/64room_000.map 512 512 486 91 54 456 676.026 169 maps/rooms/64room_000.map 512 512 458 76 19 444 678.127 169 maps/rooms/64room_000.map 512 512 26 48 492 260 678.867 169 maps/rooms/64room_000.map 512 512 473 492 251 53 677.926 169 maps/rooms/64room_000.map 512 512 502 71 148 502 677.583 169 maps/rooms/64room_000.map 512 512 502 487 141 29 679.583 169 maps/rooms/64room_000.map 512 512 503 231 22 161 677.808 169 maps/rooms/64room_000.map 512 512 31 182 323 407 677.098 169 maps/rooms/64room_000.map 512 512 59 59 467 19 676.281 169 maps/rooms/64room_000.map 512 512 457 270 13 185 678.428 170 maps/rooms/64room_000.map 512 512 496 109 22 438 683.968 170 maps/rooms/64room_000.map 512 512 417 407 23 152 681.098 170 maps/rooms/64room_000.map 512 512 123 68 508 425 683.47 170 maps/rooms/64room_000.map 512 512 69 345 451 4 683.448 170 maps/rooms/64room_000.map 512 512 101 420 504 31 682.985 170 maps/rooms/64room_000.map 512 512 507 44 224 483 683.127 170 maps/rooms/64room_000.map 512 512 62 179 418 362 680.252 170 maps/rooms/64room_000.map 512 512 452 471 1 472 680.098 170 maps/rooms/64room_000.map 512 512 361 455 47 27 681.068 170 maps/rooms/64room_000.map 512 512 455 463 133 46 682.612 171 maps/rooms/64room_000.map 512 512 447 41 32 464 686.867 171 maps/rooms/64room_000.map 512 512 501 33 97 422 685.884 171 maps/rooms/64room_000.map 512 512 84 450 445 9 686.784 171 maps/rooms/64room_000.map 512 512 377 481 85 25 684.34 171 maps/rooms/64room_000.map 512 512 18 189 491 163 686.009 171 maps/rooms/64room_000.map 512 512 455 50 15 145 684.713 171 maps/rooms/64room_000.map 512 512 511 372 25 67 687.624 171 maps/rooms/64room_000.map 512 512 43 349 454 30 686.205 171 maps/rooms/64room_000.map 512 512 465 501 155 36 684.553 171 maps/rooms/64room_000.map 512 512 505 476 454 62 687.541 172 maps/rooms/64room_000.map 512 512 157 511 440 5 691.968 172 maps/rooms/64room_000.map 512 512 360 22 32 501 690.47 172 maps/rooms/64room_000.map 512 512 488 63 156 476 691.382 172 maps/rooms/64room_000.map 512 512 466 38 251 434 689.725 172 maps/rooms/64room_000.map 512 512 462 477 171 188 689.696 172 maps/rooms/64room_000.map 512 512 41 511 452 96 691.269 172 maps/rooms/64room_000.map 512 512 204 387 509 10 690.884 172 maps/rooms/64room_000.map 512 512 22 155 465 44 690.098 172 maps/rooms/64room_000.map 512 512 237 402 463 6 689.151 172 maps/rooms/64room_000.map 512 512 482 30 7 285 690.933 173 maps/rooms/64room_000.map 512 512 39 262 487 21 694.134 173 maps/rooms/64room_000.map 512 512 9 171 510 15 695.257 173 maps/rooms/64room_000.map 512 512 102 52 353 489 692.867 173 maps/rooms/64room_000.map 512 512 29 411 501 76 694.661 173 maps/rooms/64room_000.map 512 512 106 455 491 77 692.955 173 maps/rooms/64room_000.map 512 512 406 428 23 2 693.323 173 maps/rooms/64room_000.map 512 512 255 23 494 507 692.203 173 maps/rooms/64room_000.map 512 512 435 473 24 114 695.571 173 maps/rooms/64room_000.map 512 512 15 440 496 107 692.968 173 maps/rooms/64room_000.map 512 512 163 29 455 510 692.595 174 maps/rooms/64room_000.map 512 512 3 132 373 487 697.299 174 maps/rooms/64room_000.map 512 512 63 53 397 451 696.482 174 maps/rooms/64room_000.map 512 512 478 60 241 458 698.085 174 maps/rooms/64room_000.map 512 512 488 378 81 3 698.139 174 maps/rooms/64room_000.map 512 512 456 28 54 365 696.477 174 maps/rooms/64room_000.map 512 512 470 321 28 174 698.855 174 maps/rooms/64room_000.map 512 512 491 375 13 144 697.482 174 maps/rooms/64room_000.map 512 512 170 453 482 62 699.926 174 maps/rooms/64room_000.map 512 512 49 491 466 73 696.169 174 maps/rooms/64room_000.map 512 512 2 34 414 425 696.11 175 maps/rooms/64room_000.map 512 512 449 459 135 3 702.767 175 maps/rooms/64room_000.map 512 512 425 491 14 116 703.855 175 maps/rooms/64room_000.map 512 512 426 491 30 80 701.281 175 maps/rooms/64room_000.map 512 512 204 493 481 43 702.47 175 maps/rooms/64room_000.map 512 512 23 47 449 35 703.009 175 maps/rooms/64room_000.map 512 512 48 273 454 24 700.619 175 maps/rooms/64room_000.map 512 512 372 465 1 42 702.281 175 maps/rooms/64room_000.map 512 512 73 43 436 470 701.269 175 maps/rooms/64room_000.map 512 512 462 8 28 63 701.909 175 maps/rooms/64room_000.map 512 512 474 15 2 315 701.82 176 maps/rooms/64room_000.map 512 512 41 484 487 87 705.34 176 maps/rooms/64room_000.map 512 512 178 490 504 54 705.737 176 maps/rooms/64room_000.map 512 512 106 52 324 458 704.825 176 maps/rooms/64room_000.map 512 512 465 26 22 165 707.553 176 maps/rooms/64room_000.map 512 512 76 27 328 467 704.24 176 maps/rooms/64room_000.map 512 512 122 47 450 407 704.541 176 maps/rooms/64room_000.map 512 512 468 354 36 172 704.482 176 maps/rooms/64room_000.map 512 512 19 332 451 13 707.933 176 maps/rooms/64room_000.map 512 512 97 506 446 13 706.926 176 maps/rooms/64room_000.map 512 512 17 490 473 90 707.796 177 maps/rooms/64room_000.map 512 512 499 409 17 99 710.884 177 maps/rooms/64room_000.map 512 512 400 52 6 508 708.825 177 maps/rooms/64room_000.map 512 512 504 365 32 21 710.867 177 maps/rooms/64room_000.map 512 512 20 500 356 5 711.24 177 maps/rooms/64room_000.map 512 512 55 2 461 394 709.855 177 maps/rooms/64room_000.map 512 512 120 23 402 471 711.252 177 maps/rooms/64room_000.map 512 512 111 31 483 386 710.169 177 maps/rooms/64room_000.map 512 512 18 49 442 433 708.566 177 maps/rooms/64room_000.map 512 512 355 510 6 111 711.955 177 maps/rooms/64room_000.map 512 512 462 400 32 36 709.37 178 maps/rooms/64room_000.map 512 512 445 425 127 12 715.122 178 maps/rooms/64room_000.map 512 512 103 422 471 15 713.825 178 maps/rooms/64room_000.map 512 512 365 497 2 73 714.553 178 maps/rooms/64room_000.map 512 512 505 427 27 104 712.269 178 maps/rooms/64room_000.map 512 512 52 501 486 118 712.453 178 maps/rooms/64room_000.map 512 512 213 501 481 48 712.127 178 maps/rooms/64room_000.map 512 512 461 376 14 14 712.068 178 maps/rooms/64room_000.map 512 512 476 1 490 489 715.897 178 maps/rooms/64room_000.map 512 512 327 449 112 26 714.867 178 maps/rooms/64room_000.map 512 512 485 107 66 509 713.299 179 maps/rooms/64room_000.map 512 512 75 17 474 430 717.897 179 maps/rooms/64room_000.map 512 512 486 476 52 122 718.382 179 maps/rooms/64room_000.map 512 512 6 61 412 483 717.009 179 maps/rooms/64room_000.map 512 512 401 451 107 9 718.08 179 maps/rooms/64room_000.map 512 512 89 427 460 50 716.441 179 maps/rooms/64room_000.map 512 512 503 335 38 153 719.299 179 maps/rooms/64room_000.map 512 512 510 63 55 409 718.311 179 maps/rooms/64room_000.map 512 512 490 5 140 464 716.453 179 maps/rooms/64room_000.map 512 512 34 150 377 473 719.512 179 maps/rooms/64room_000.map 512 512 239 464 467 43 716.612 180 maps/rooms/64room_000.map 512 512 91 439 471 36 722.411 180 maps/rooms/64room_000.map 512 512 10 127 496 427 722.34 180 maps/rooms/64room_000.map 512 512 27 9 352 466 722.08 180 maps/rooms/64room_000.map 512 512 93 65 492 480 720.24 180 maps/rooms/64room_000.map 512 512 505 1 55 130 720.428 180 maps/rooms/64room_000.map 512 512 505 54 89 467 722.311 180 maps/rooms/64room_000.map 512 512 60 462 506 62 721.654 180 maps/rooms/64room_000.map 512 512 402 452 12 150 720.583 180 maps/rooms/64room_000.map 512 512 511 47 89 461 721.411 180 maps/rooms/64room_000.map 512 512 18 367 462 7 723.703 181 maps/rooms/64room_000.map 512 512 462 486 82 82 726.222 181 maps/rooms/64room_000.map 512 512 492 390 42 42 725.37 181 maps/rooms/64room_000.map 512 512 22 474 508 79 724.252 181 maps/rooms/64room_000.map 512 512 451 21 44 383 726.519 181 maps/rooms/64room_000.map 512 512 446 504 45 75 725.453 181 maps/rooms/64room_000.map 512 512 488 12 86 433 727.825 181 maps/rooms/64room_000.map 512 512 488 8 4 3 726.595 181 maps/rooms/64room_000.map 512 512 495 51 111 505 725.553 181 maps/rooms/64room_000.map 512 512 5 496 422 35 726.281 181 maps/rooms/64room_000.map 512 512 8 18 453 23 726.423 182 maps/rooms/64room_000.map 512 512 107 61 494 442 730.867 182 maps/rooms/64room_000.map 512 512 485 379 51 136 731.926 182 maps/rooms/64room_000.map 512 512 61 142 466 23 728.482 182 maps/rooms/64room_000.map 512 512 446 502 18 124 728.725 182 maps/rooms/64room_000.map 512 512 454 24 94 426 730.139 182 maps/rooms/64room_000.map 512 512 488 447 16 72 730.737 182 maps/rooms/64room_000.map 512 512 387 455 16 10 729.11 182 maps/rooms/64room_000.map 512 512 113 75 455 492 730.11 182 maps/rooms/64room_000.map 512 512 422 489 1 65 731.666 182 maps/rooms/64room_000.map 512 512 203 504 470 29 729.855 183 maps/rooms/64room_000.map 512 512 5 496 483 76 734.566 183 maps/rooms/64room_000.map 512 512 498 66 37 493 733.352 183 maps/rooms/64room_000.map 512 512 425 484 84 9 734.624 183 maps/rooms/64room_000.map 512 512 470 503 72 96 735.323 183 maps/rooms/64room_000.map 512 512 63 172 481 344 733.897 183 maps/rooms/64room_000.map 512 512 339 489 2 48 733.536 183 maps/rooms/64room_000.map 512 512 62 161 372 449 734.24 183 maps/rooms/64room_000.map 512 512 431 470 122 41 734.382 183 maps/rooms/64room_000.map 512 512 505 18 75 447 733.34 183 maps/rooms/64room_000.map 512 512 74 431 460 30 734.938 184 maps/rooms/64room_000.map 512 512 426 502 75 10 738.352 184 maps/rooms/64room_000.map 512 512 56 166 444 388 738.441 184 maps/rooms/64room_000.map 512 512 487 350 42 186 736.553 184 maps/rooms/64room_000.map 512 512 28 178 441 414 736.068 184 maps/rooms/64room_000.map 512 512 466 61 59 444 736.482 184 maps/rooms/64room_000.map 512 512 478 33 18 395 739.016 184 maps/rooms/64room_000.map 512 512 73 4 488 424 739.825 184 maps/rooms/64room_000.map 512 512 444 496 15 73 739.252 184 maps/rooms/64room_000.map 512 512 5 159 410 489 739.24 184 maps/rooms/64room_000.map 512 512 496 420 12 62 739.938 185 maps/rooms/64room_000.map 512 512 141 503 483 21 742.767 185 maps/rooms/64room_000.map 512 512 134 484 470 5 742.252 185 maps/rooms/64room_000.map 512 512 490 508 111 66 740.612 185 maps/rooms/64room_000.map 512 512 70 69 459 479 740.779 185 maps/rooms/64room_000.map 512 512 21 26 368 498 740.553 185 maps/rooms/64room_000.map 512 512 446 497 58 37 740.181 185 maps/rooms/64room_000.map 512 512 415 481 18 32 743.796 185 maps/rooms/64room_000.map 512 512 73 453 507 14 743.34 185 maps/rooms/64room_000.map 512 512 360 485 19 5 741.566 185 maps/rooms/64room_000.map 512 512 3 17 398 457 743.524 186 maps/rooms/64room_000.map 512 512 30 173 352 473 745.938 186 maps/rooms/64room_000.map 512 512 431 455 21 52 745.423 186 maps/rooms/64room_000.map 512 512 32 38 495 410 744.997 186 maps/rooms/64room_000.map 512 512 328 502 89 7 745.293 186 maps/rooms/64room_000.map 512 512 81 485 509 45 744.34 186 maps/rooms/64room_000.map 512 512 375 490 48 134 744.713 186 maps/rooms/64room_000.map 512 512 45 172 356 465 744.423 186 maps/rooms/64room_000.map 512 512 31 41 430 483 747.039 186 maps/rooms/64room_000.map 512 512 13 125 509 451 745.553 186 maps/rooms/64room_000.map 512 512 28 1 415 478 745.394 187 maps/rooms/64room_000.map 512 512 31 502 511 75 748.252 187 maps/rooms/64room_000.map 512 512 495 54 11 440 751.318 187 maps/rooms/64room_000.map 512 512 468 400 45 156 749.34 187 maps/rooms/64room_000.map 512 512 27 46 334 501 751.637 187 maps/rooms/64room_000.map 512 512 39 157 405 449 748.867 187 maps/rooms/64room_000.map 512 512 40 148 378 500 751.269 187 maps/rooms/64room_000.map 512 512 29 150 357 500 749.796 187 maps/rooms/64room_000.map 512 512 20 16 336 484 749.637 187 maps/rooms/64room_000.map 512 512 56 433 471 27 748.394 187 maps/rooms/64room_000.map 512 512 351 478 10 182 750.311 188 maps/rooms/64room_000.map 512 512 56 190 501 332 752.897 188 maps/rooms/64room_000.map 512 512 501 19 15 412 753.389 188 maps/rooms/64room_000.map 512 512 61 22 494 455 752.666 188 maps/rooms/64room_000.map 512 512 28 99 508 482 753.767 188 maps/rooms/64room_000.map 512 512 462 473 55 76 755.009 188 maps/rooms/64room_000.map 512 512 37 27 330 511 752.879 188 maps/rooms/64room_000.map 512 512 492 454 50 24 754.808 188 maps/rooms/64room_000.map 512 512 441 505 126 60 755.009 188 maps/rooms/64room_000.map 512 512 71 2 505 418 755.997 188 maps/rooms/64room_000.map 512 512 108 38 498 458 755.536 189 maps/rooms/64room_000.map 512 512 481 389 4 11 759.825 189 maps/rooms/64room_000.map 512 512 493 10 120 506 756.453 189 maps/rooms/64room_000.map 512 512 188 482 490 13 759.222 189 maps/rooms/64room_000.map 512 512 16 11 465 444 757.536 189 maps/rooms/64room_000.map 512 512 468 502 81 66 756.151 189 maps/rooms/64room_000.map 512 512 442 498 40 27 757.909 189 maps/rooms/64room_000.map 512 512 497 34 95 509 757.039 189 maps/rooms/64room_000.map 512 512 47 423 478 26 757.293 189 maps/rooms/64room_000.map 512 512 342 499 24 3 758.85 189 maps/rooms/64room_000.map 512 512 456 478 32 100 759.151 190 maps/rooms/64room_000.map 512 512 1 10 363 492 763.252 190 maps/rooms/64room_000.map 512 512 37 164 401 497 761.767 190 maps/rooms/64room_000.map 512 512 100 500 482 27 761.524 190 maps/rooms/64room_000.map 512 512 9 167 366 510 760.683 190 maps/rooms/64room_000.map 512 512 469 39 1 422 761.389 190 maps/rooms/64room_000.map 512 512 29 96 503 491 760.938 190 maps/rooms/64room_000.map 512 512 426 492 6 166 763.897 190 maps/rooms/64room_000.map 512 512 501 33 74 489 762.411 190 maps/rooms/64room_000.map 512 512 469 506 47 101 761.666 190 maps/rooms/64room_000.map 512 512 35 426 493 26 761.838 191 maps/rooms/64room_000.map 512 512 501 475 102 39 767.365 191 maps/rooms/64room_000.map 512 512 492 33 57 386 766.732 191 maps/rooms/64room_000.map 512 512 450 14 8 393 764.644 191 maps/rooms/64room_000.map 512 512 9 166 482 437 766.725 191 maps/rooms/64room_000.map 512 512 499 387 19 169 767.227 191 maps/rooms/64room_000.map 512 512 459 404 23 191 764.37 191 maps/rooms/64room_000.map 512 512 13 44 445 485 767.666 191 maps/rooms/64room_000.map 512 512 177 490 452 27 766.749 191 maps/rooms/64room_000.map 512 512 507 399 126 8 765.252 191 maps/rooms/64room_000.map 512 512 36 2 505 408 767.524 192 maps/rooms/64room_000.map 512 512 19 436 490 30 770.938 192 maps/rooms/64room_000.map 512 512 324 492 1 174 770.796 192 maps/rooms/64room_000.map 512 512 337 506 9 28 768.465 192 maps/rooms/64room_000.map 512 512 413 472 18 187 768.583 192 maps/rooms/64room_000.map 512 512 389 493 15 191 770.098 192 maps/rooms/64room_000.map 512 512 124 489 455 28 769.252 192 maps/rooms/64room_000.map 512 512 456 416 59 145 768.642 192 maps/rooms/64room_000.map 512 512 113 47 510 468 771.779 192 maps/rooms/64room_000.map 512 512 489 421 1 27 769.252 192 maps/rooms/64room_000.map 512 512 482 495 35 79 769.909 193 maps/rooms/64room_000.map 512 512 442 495 27 143 773.867 193 maps/rooms/64room_000.map 512 512 497 440 31 13 772.051 193 maps/rooms/64room_000.map 512 512 20 469 479 61 773.423 193 maps/rooms/64room_000.map 512 512 86 48 460 489 773.164 193 maps/rooms/64room_000.map 512 512 17 155 497 436 773.624 193 maps/rooms/64room_000.map 512 512 476 23 95 474 774.808 193 maps/rooms/64room_000.map 512 512 23 431 487 28 772.252 193 maps/rooms/64room_000.map 512 512 12 484 495 58 772.879 193 maps/rooms/64room_000.map 512 512 53 466 465 42 775.696 193 maps/rooms/64room_000.map 512 512 47 469 463 63 772.725 194 maps/rooms/64room_000.map 512 512 502 461 127 40 778.365 194 maps/rooms/64room_000.map 512 512 12 90 506 488 778.666 194 maps/rooms/64room_000.map 512 512 452 32 171 506 776.436 194 maps/rooms/64room_000.map 512 512 11 431 460 52 778.146 194 maps/rooms/64room_000.map 512 512 416 478 50 174 776.666 194 maps/rooms/64room_000.map 512 512 50 180 351 491 777.879 194 maps/rooms/64room_000.map 512 512 59 470 490 9 779.352 194 maps/rooms/64room_000.map 512 512 106 455 463 40 777.453 194 maps/rooms/64room_000.map 512 512 101 478 460 53 776.767 194 maps/rooms/64room_000.map 512 512 486 477 108 33 777.436 195 maps/rooms/64room_000.map 512 512 102 58 477 494 781.808 195 maps/rooms/64room_000.map 512 512 486 490 16 69 782.879 195 maps/rooms/64room_000.map 512 512 477 12 44 414 781.95 195 maps/rooms/64room_000.map 512 512 93 53 497 506 781.909 195 maps/rooms/64room_000.map 512 512 53 139 433 476 781.34 195 maps/rooms/64room_000.map 512 512 327 470 22 188 781.382 195 maps/rooms/64room_000.map 512 512 489 395 60 152 781.612 195 maps/rooms/64room_000.map 512 512 435 487 12 7 782.637 195 maps/rooms/64room_000.map 512 512 509 440 3 43 780.293 195 maps/rooms/64room_000.map 512 512 489 38 30 485 781.879 196 maps/rooms/64room_000.map 512 512 56 163 345 497 784.151 196 maps/rooms/64room_000.map 512 512 22 507 503 50 785.293 196 maps/rooms/64room_000.map 512 512 47 481 483 23 784.808 196 maps/rooms/64room_000.map 512 512 49 180 420 449 785.151 196 maps/rooms/64room_000.map 512 512 97 56 471 501 787.122 196 maps/rooms/64room_000.map 512 512 18 191 413 498 786.281 196 maps/rooms/64room_000.map 512 512 2 76 475 477 785.536 196 maps/rooms/64room_000.map 512 512 496 5 48 409 784.423 196 maps/rooms/64room_000.map 512 512 476 458 46 9 786.193 196 maps/rooms/64room_000.map 512 512 429 494 51 147 786.11 197 maps/rooms/64room_000.map 512 512 345 510 53 157 791.666 197 maps/rooms/64room_000.map 512 512 444 456 46 150 789.068 197 maps/rooms/64room_000.map 512 512 333 504 38 178 791.365 197 maps/rooms/64room_000.map 512 512 57 3 497 469 788.566 197 maps/rooms/64room_000.map 512 512 483 493 106 38 790.607 197 maps/rooms/64room_000.map 512 512 464 423 56 187 789.193 197 maps/rooms/64room_000.map 512 512 48 460 465 8 789.365 197 maps/rooms/64room_000.map 512 512 478 471 107 14 790.406 197 maps/rooms/64room_000.map 512 512 121 30 470 466 790.82 197 maps/rooms/64room_000.map 512 512 341 499 43 181 788.122 198 maps/rooms/64room_000.map 512 512 456 16 109 473 795.436 198 maps/rooms/64room_000.map 512 512 438 468 60 146 792.926 198 maps/rooms/64room_000.map 512 512 490 8 11 438 793.288 198 maps/rooms/64room_000.map 512 512 53 31 491 499 794.323 198 maps/rooms/64room_000.map 512 512 469 420 60 183 794.767 198 maps/rooms/64room_000.map 512 512 452 27 60 459 793.151 198 maps/rooms/64room_000.map 512 512 459 62 70 502 795.34 198 maps/rooms/64room_000.map 512 512 88 479 462 10 795.708 198 maps/rooms/64room_000.map 512 512 493 491 107 25 793.193 198 maps/rooms/64room_000.map 512 512 84 26 449 471 793.779 199 maps/rooms/64room_000.map 512 512 456 22 23 434 798.051 199 maps/rooms/64room_000.map 512 512 97 481 485 2 796.151 199 maps/rooms/64room_000.map 512 512 125 457 459 21 799.737 199 maps/rooms/64room_000.map 512 512 14 92 470 506 797.98 199 maps/rooms/64room_000.map 512 512 481 37 8 485 799.992 199 maps/rooms/64room_000.map 512 512 443 486 1 12 799.151 199 maps/rooms/64room_000.map 512 512 503 427 49 152 797.867 199 maps/rooms/64room_000.map 512 512 58 504 480 30 796.909 199 maps/rooms/64room_000.map 512 512 389 511 52 185 797.423 199 maps/rooms/64room_000.map 512 512 449 31 78 483 797.524 200 maps/rooms/64room_000.map 512 512 471 20 22 474 800.235 200 maps/rooms/64room_000.map 512 512 125 21 460 455 803.992 200 maps/rooms/64room_000.map 512 512 94 482 450 27 802.879 200 maps/rooms/64room_000.map 512 512 13 155 499 473 801.009 200 maps/rooms/64room_000.map 512 512 467 8 112 465 800.95 200 maps/rooms/64room_000.map 512 512 502 12 7 453 801.696 200 maps/rooms/64room_000.map 512 512 454 470 104 22 800.649 200 maps/rooms/64room_000.map 512 512 456 464 118 28 801.82 200 maps/rooms/64room_000.map 512 512 51 142 510 423 801.068 200 maps/rooms/64room_000.map 512 512 452 8 38 410 801.585 201 maps/rooms/64room_000.map 512 512 475 62 10 500 807.465 201 maps/rooms/64room_000.map 512 512 56 53 451 484 807.82 201 maps/rooms/64room_000.map 512 512 432 495 32 191 806.909 201 maps/rooms/64room_000.map 512 512 52 6 453 452 807.222 201 maps/rooms/64room_000.map 512 512 495 437 49 177 807.293 201 maps/rooms/64room_000.map 512 512 79 504 480 6 806.009 201 maps/rooms/64room_000.map 512 512 47 13 459 478 807.063 201 maps/rooms/64room_000.map 512 512 462 40 46 494 804.566 201 maps/rooms/64room_000.map 512 512 482 491 7 55 805.021 201 maps/rooms/64room_000.map 512 512 487 447 49 178 804.436 202 maps/rooms/64room_000.map 512 512 44 22 465 491 809.82 202 maps/rooms/64room_000.map 512 512 1 500 486 43 808.063 202 maps/rooms/64room_000.map 512 512 10 5 504 450 808.678 202 maps/rooms/64room_000.map 512 512 454 463 23 55 811.749 202 maps/rooms/64room_000.map 512 512 499 496 86 8 808.98 202 maps/rooms/64room_000.map 512 512 12 154 469 475 809.051 202 maps/rooms/64room_000.map 512 512 497 17 38 502 809.151 202 maps/rooms/64room_000.map 512 512 478 471 29 155 810.536 202 maps/rooms/64room_000.map 512 512 487 472 30 155 808.808 202 maps/rooms/64room_000.map 512 512 470 500 59 18 811.607 203 maps/rooms/64room_000.map 512 512 481 477 22 19 812.436 203 maps/rooms/64room_000.map 512 512 496 509 55 18 813.98 203 maps/rooms/64room_000.map 512 512 452 485 52 12 815.891 203 maps/rooms/64room_000.map 512 512 467 482 31 54 814.649 203 maps/rooms/64room_000.map 512 512 54 2 489 493 814.808 203 maps/rooms/64room_000.map 512 512 470 488 105 10 813.891 203 maps/rooms/64room_000.map 512 512 8 47 490 494 812.293 203 maps/rooms/64room_000.map 512 512 462 43 54 506 812.009 203 maps/rooms/64room_000.map 512 512 36 145 498 475 813.252 203 maps/rooms/64room_000.map 512 512 496 505 48 17 813.879 ================================================ FILE: benchmark/scen/arena.map.scen ================================================ version 1 0 maps/dao/arena.map 49 49 1 11 1 12 1 0 maps/dao/arena.map 49 49 1 12 1 10 2 0 maps/dao/arena.map 49 49 1 13 4 12 3.41421 0 maps/dao/arena.map 49 49 1 3 3 1 3.41421 0 maps/dao/arena.map 49 49 1 3 4 3 3 0 maps/dao/arena.map 49 49 1 4 4 2 3.82843 0 maps/dao/arena.map 49 49 1 40 2 39 1.41421 0 maps/dao/arena.map 49 49 1 41 1 39 2 0 maps/dao/arena.map 49 49 1 41 1 44 3 0 maps/dao/arena.map 49 49 1 42 4 43 3.41421 1 maps/dao/arena.map 49 49 1 10 7 10 6 1 maps/dao/arena.map 49 49 1 11 1 4 7 1 maps/dao/arena.map 49 49 1 11 7 14 7.24264 1 maps/dao/arena.map 49 49 1 12 5 7 6.65685 1 maps/dao/arena.map 49 49 1 12 6 15 6.24264 1 maps/dao/arena.map 49 49 1 12 8 11 7.41421 1 maps/dao/arena.map 49 49 1 14 1 9 5 1 maps/dao/arena.map 49 49 1 24 7 26 6.82843 1 maps/dao/arena.map 49 49 1 25 5 25 4 1 maps/dao/arena.map 49 49 1 35 5 33 4.82843 2 maps/dao/arena.map 49 49 1 11 4 18 8.24264 2 maps/dao/arena.map 49 49 1 12 12 14 11.8284 2 maps/dao/arena.map 49 49 1 13 4 23 11.8284 2 maps/dao/arena.map 49 49 1 13 5 3 11.6569 2 maps/dao/arena.map 49 49 1 13 6 7 8.07107 2 maps/dao/arena.map 49 49 1 13 7 7 8.48528 2 maps/dao/arena.map 49 49 1 23 7 32 11.4853 2 maps/dao/arena.map 49 49 1 24 11 25 10.4142 2 maps/dao/arena.map 49 49 1 24 6 32 10.0711 2 maps/dao/arena.map 49 49 1 25 9 24 8.41421 3 maps/dao/arena.map 49 49 1 10 11 19 13.7279 3 maps/dao/arena.map 49 49 1 10 13 11 12.4142 3 maps/dao/arena.map 49 49 1 11 10 2 12.7279 3 maps/dao/arena.map 49 49 1 12 11 21 13.7279 3 maps/dao/arena.map 49 49 1 12 13 13 12.4142 3 maps/dao/arena.map 49 49 1 12 14 12 13 3 maps/dao/arena.map 49 49 1 12 6 25 15.0711 3 maps/dao/arena.map 49 49 1 13 11 3 14.1421 3 maps/dao/arena.map 49 49 1 13 13 11 12.8284 3 maps/dao/arena.map 49 49 1 14 6 23 12.2426 4 maps/dao/arena.map 49 49 1 10 18 11 17.4142 4 maps/dao/arena.map 49 49 1 11 16 14 16.2426 4 maps/dao/arena.map 49 49 1 12 14 2 17.1421 4 maps/dao/arena.map 49 49 1 12 17 13 16.4142 4 maps/dao/arena.map 49 49 1 12 9 28 19.3137 4 maps/dao/arena.map 49 49 1 13 4 30 18.8284 4 maps/dao/arena.map 49 49 1 13 9 26 16.8995 4 maps/dao/arena.map 49 49 1 14 14 22 16.3137 4 maps/dao/arena.map 49 49 1 23 10 8 19.3137 4 maps/dao/arena.map 49 49 1 23 14 9 19.9706 5 maps/dao/arena.map 49 49 1 10 13 29 23.9706 5 maps/dao/arena.map 49 49 1 10 18 22 21.9706 5 maps/dao/arena.map 49 49 1 10 19 18 22.1421 5 maps/dao/arena.map 49 49 1 10 21 2 23.3137 5 maps/dao/arena.map 49 49 1 10 5 32 23.6569 5 maps/dao/arena.map 49 49 1 10 6 29 21.0711 5 maps/dao/arena.map 49 49 1 11 20 7 20.6569 5 maps/dao/arena.map 49 49 1 11 21 17 23.0711 5 maps/dao/arena.map 49 49 1 11 22 16 23.0711 5 maps/dao/arena.map 49 49 1 11 8 29 20.8995 6 maps/dao/arena.map 49 49 1 10 22 22 25.9706 6 maps/dao/arena.map 49 49 1 10 5 33 24.6569 6 maps/dao/arena.map 49 49 1 11 10 32 24.7279 6 maps/dao/arena.map 49 49 1 11 20 31 27.8701 6 maps/dao/arena.map 49 49 1 11 21 23 24.9706 6 maps/dao/arena.map 49 49 1 11 24 14 24.2426 6 maps/dao/arena.map 49 49 1 11 25 4 26.8995 6 maps/dao/arena.map 49 49 1 11 3 36 25.8284 6 maps/dao/arena.map 49 49 1 12 19 27 24.2132 6 maps/dao/arena.map 49 49 1 12 2 37 26.2426 7 maps/dao/arena.map 49 49 1 10 22 31 29.6985 7 maps/dao/arena.map 49 49 1 10 24 27 30.0416 7 maps/dao/arena.map 49 49 1 10 28 15 29.0711 7 maps/dao/arena.map 49 49 1 10 7 39 31.4853 7 maps/dao/arena.map 49 49 1 11 12 35 28.5563 7 maps/dao/arena.map 49 49 1 11 28 18 29.8995 7 maps/dao/arena.map 49 49 1 11 5 40 30.6569 7 maps/dao/arena.map 49 49 1 12 26 3 28.7279 7 maps/dao/arena.map 49 49 1 12 29 14 28.8284 7 maps/dao/arena.map 49 49 1 12 29 6 30.4853 8 maps/dao/arena.map 49 49 1 10 25 36 35.9411 8 maps/dao/arena.map 49 49 1 10 27 25 32.2132 8 maps/dao/arena.map 49 49 1 10 32 4 33.4853 8 maps/dao/arena.map 49 49 1 10 33 4 34.4853 8 maps/dao/arena.map 49 49 1 11 10 42 34.7279 8 maps/dao/arena.map 49 49 1 11 27 28 33.0416 8 maps/dao/arena.map 49 49 1 11 30 2 32.7279 8 maps/dao/arena.map 49 49 1 11 31 3 33.3137 8 maps/dao/arena.map 49 49 1 11 5 42 32.6569 8 maps/dao/arena.map 49 49 1 12 18 37 32.8701 9 maps/dao/arena.map 49 49 1 10 15 43 38.799 9 maps/dao/arena.map 49 49 1 10 21 41 39.2843 9 maps/dao/arena.map 49 49 1 10 27 37 37.7696 9 maps/dao/arena.map 49 49 1 10 29 38 39.598 9 maps/dao/arena.map 49 49 1 10 31 25 36.2132 9 maps/dao/arena.map 49 49 1 10 38 13 38.2426 9 maps/dao/arena.map 49 49 1 10 38 6 38.6569 9 maps/dao/arena.map 49 49 1 10 39 6 39.6569 9 maps/dao/arena.map 49 49 1 10 40 9 39.4142 9 maps/dao/arena.map 49 49 1 11 11 43 36.1421 10 maps/dao/arena.map 49 49 1 10 12 47 41.5563 10 maps/dao/arena.map 49 49 1 10 14 47 42.3848 10 maps/dao/arena.map 49 49 1 10 16 46 42.2132 10 maps/dao/arena.map 49 49 1 10 28 41 42.1838 10 maps/dao/arena.map 49 49 1 10 37 21 40.5563 10 maps/dao/arena.map 49 49 1 10 39 24 43.799 10 maps/dao/arena.map 49 49 1 11 16 45 40.2132 10 maps/dao/arena.map 49 49 1 11 21 43 40.2843 10 maps/dao/arena.map 49 49 1 11 32 39 42.598 10 maps/dao/arena.map 49 49 1 11 34 29 40.4558 11 maps/dao/arena.map 49 49 1 10 29 43 44.598 11 maps/dao/arena.map 49 49 1 10 43 15 44.0711 11 maps/dao/arena.map 49 49 1 10 43 17 44.8995 11 maps/dao/arena.map 49 49 1 10 45 10 44 11 maps/dao/arena.map 49 49 1 10 46 15 47.0711 11 maps/dao/arena.map 49 49 1 10 46 3 47.8995 11 maps/dao/arena.map 49 49 1 11 30 45 46.0122 11 maps/dao/arena.map 49 49 1 11 35 41 46.4264 11 maps/dao/arena.map 49 49 1 11 35 42 46.8406 11 maps/dao/arena.map 49 49 1 11 43 3 45.3137 12 maps/dao/arena.map 49 49 1 10 31 46 48.4264 12 maps/dao/arena.map 49 49 1 10 34 46 49.669 12 maps/dao/arena.map 49 49 1 10 35 46 50.0833 12 maps/dao/arena.map 49 49 1 10 36 42 48.2548 12 maps/dao/arena.map 49 49 1 10 38 45 51.4975 12 maps/dao/arena.map 49 49 1 10 46 18 48.3137 12 maps/dao/arena.map 49 49 1 11 37 44 49.669 12 maps/dao/arena.map 49 49 1 11 41 35 49.9411 12 maps/dao/arena.map 49 49 1 11 43 27 48.6274 12 maps/dao/arena.map 49 49 1 11 44 25 48.799 13 maps/dao/arena.map 49 49 1 10 41 40 52.4264 13 maps/dao/arena.map 49 49 1 10 43 40 54.4264 13 maps/dao/arena.map 49 49 1 11 39 47 52.9117 13 maps/dao/arena.map 49 49 1 11 42 46 55.4975 13 maps/dao/arena.map 49 49 1 11 45 33 53.1127 13 maps/dao/arena.map 49 49 1 12 43 43 54.8406 13 maps/dao/arena.map 49 49 1 12 44 38 53.7696 13 maps/dao/arena.map 49 49 1 12 46 34 54.1127 13 maps/dao/arena.map 49 49 1 13 42 40 52.1838 13 maps/dao/arena.map 49 49 1 14 46 32 52.4558 14 maps/dao/arena.map 49 49 1 14 44 46 56.2548 14 maps/dao/arena.map 49 49 1 14 46 43 57.0122 14 maps/dao/arena.map 49 49 1 35 46 3 58.2548 14 maps/dao/arena.map 49 49 1 37 43 1 56.9117 14 maps/dao/arena.map 49 49 1 38 43 3 56.4975 14 maps/dao/arena.map 49 49 1 38 47 13 56.3553 14 maps/dao/arena.map 49 49 1 39 47 14 56.3553 14 maps/dao/arena.map 49 49 1 4 38 47 58.3259 14 maps/dao/arena.map 49 49 1 4 41 42 56.9117 14 maps/dao/arena.map 49 49 1 42 44 5 58.3259 15 maps/dao/arena.map 49 49 1 3 41 47 60.5685 15 maps/dao/arena.map 49 49 1 3 47 37 60.0833 15 maps/dao/arena.map 49 49 1 39 46 1 60.7401 15 maps/dao/arena.map 49 49 1 4 43 46 60.5685 15 maps/dao/arena.map 49 49 1 4 44 45 61.1543 15 maps/dao/arena.map 49 49 1 40 47 3 61.3259 15 maps/dao/arena.map 49 49 1 41 46 2 61.1543 15 maps/dao/arena.map 49 49 1 45 47 9 60.9117 15 maps/dao/arena.map 49 49 1 7 47 44 61.3259 15 maps/dao/arena.map 49 49 1 7 47 46 62.1543 ================================================ FILE: benchmark/scen/lak304d.map.scen ================================================ version 1 0 maps/dao/lak304d.map 193 194 10 115 7 116 3.41421 0 maps/dao/lak304d.map 193 194 10 66 13 65 3.41421 0 maps/dao/lak304d.map 193 194 10 88 12 90 3.41421 0 maps/dao/lak304d.map 193 194 100 43 97 42 3.41421 0 maps/dao/lak304d.map 193 194 100 98 102 95 3.82843 0 maps/dao/lak304d.map 193 194 101 109 101 109 0 0 maps/dao/lak304d.map 193 194 101 113 101 111 2 0 maps/dao/lak304d.map 193 194 101 44 98 45 3.41421 0 maps/dao/lak304d.map 193 194 101 91 100 94 3.41421 0 maps/dao/lak304d.map 193 194 103 101 101 101 2 1 maps/dao/lak304d.map 193 194 10 68 6 66 4.82843 1 maps/dao/lak304d.map 193 194 10 70 5 73 6.24264 1 maps/dao/lak304d.map 193 194 100 115 96 116 4.41421 1 maps/dao/lak304d.map 193 194 100 118 105 119 5.41421 1 maps/dao/lak304d.map 193 194 100 127 96 125 4.82843 1 maps/dao/lak304d.map 193 194 100 46 101 51 5.41421 1 maps/dao/lak304d.map 193 194 101 121 98 124 4.24264 1 maps/dao/lak304d.map 193 194 101 141 107 142 6.41421 1 maps/dao/lak304d.map 193 194 101 42 101 47 5 1 maps/dao/lak304d.map 193 194 101 91 107 89 6.82843 2 maps/dao/lak304d.map 193 194 1 82 3 89 9.24264 2 maps/dao/lak304d.map 193 194 100 116 107 107 11.8995 2 maps/dao/lak304d.map 193 194 100 146 110 146 10 2 maps/dao/lak304d.map 193 194 100 148 103 141 8.24264 2 maps/dao/lak304d.map 193 194 100 167 110 170 11.2426 2 maps/dao/lak304d.map 193 194 100 176 109 177 9.41421 2 maps/dao/lak304d.map 193 194 100 82 98 92 11.4142 2 maps/dao/lak304d.map 193 194 100 90 108 84 10.4853 2 maps/dao/lak304d.map 193 194 101 113 108 121 10.8995 2 maps/dao/lak304d.map 193 194 101 172 99 163 9.82843 3 maps/dao/lak304d.map 193 194 10 117 12 103 14.8284 3 maps/dao/lak304d.map 193 194 10 67 17 56 13.8995 3 maps/dao/lak304d.map 193 194 10 70 1 81 14.7279 3 maps/dao/lak304d.map 193 194 100 126 91 124 13.4853 3 maps/dao/lak304d.map 193 194 100 174 115 172 15.8284 3 maps/dao/lak304d.map 193 194 100 175 110 182 14.0711 3 maps/dao/lak304d.map 193 194 100 73 107 72 15.6569 3 maps/dao/lak304d.map 193 194 100 77 90 87 14.1421 3 maps/dao/lak304d.map 193 194 100 97 105 110 15.0711 3 maps/dao/lak304d.map 193 194 101 100 90 107 13.8995 4 maps/dao/lak304d.map 193 194 100 103 87 117 19.3848 4 maps/dao/lak304d.map 193 194 100 105 94 121 18.4853 4 maps/dao/lak304d.map 193 194 100 112 83 105 19.8995 4 maps/dao/lak304d.map 193 194 100 118 87 108 17.1421 4 maps/dao/lak304d.map 193 194 100 124 115 127 16.2426 4 maps/dao/lak304d.map 193 194 100 166 99 182 16.4142 4 maps/dao/lak304d.map 193 194 100 175 104 160 16.6569 4 maps/dao/lak304d.map 193 194 100 181 115 169 19.9706 4 maps/dao/lak304d.map 193 194 100 72 88 85 17.9706 4 maps/dao/lak304d.map 193 194 100 82 109 89 16.8284 5 maps/dao/lak304d.map 193 194 1 115 12 132 21.5563 5 maps/dao/lak304d.map 193 194 10 117 29 118 20.2426 5 maps/dao/lak304d.map 193 194 100 101 93 80 23.8995 5 maps/dao/lak304d.map 193 194 100 105 97 85 21.2426 5 maps/dao/lak304d.map 193 194 100 106 82 114 21.3137 5 maps/dao/lak304d.map 193 194 100 107 102 129 22.8284 5 maps/dao/lak304d.map 193 194 100 119 79 112 23.8995 5 maps/dao/lak304d.map 193 194 100 122 83 108 22.799 5 maps/dao/lak304d.map 193 194 100 147 81 143 20.6569 5 maps/dao/lak304d.map 193 194 100 38 116 49 20.5563 6 maps/dao/lak304d.map 193 194 1 78 25 70 27.3137 6 maps/dao/lak304d.map 193 194 10 122 19 104 24.6569 6 maps/dao/lak304d.map 193 194 10 62 28 50 25.3137 6 maps/dao/lak304d.map 193 194 10 66 30 57 25.4853 6 maps/dao/lak304d.map 193 194 100 182 122 168 27.799 6 maps/dao/lak304d.map 193 194 100 40 77 48 26.3137 6 maps/dao/lak304d.map 193 194 100 92 125 91 25.4142 6 maps/dao/lak304d.map 193 194 101 162 109 184 26.4853 6 maps/dao/lak304d.map 193 194 101 87 74 87 27.8284 6 maps/dao/lak304d.map 193 194 101 89 108 114 27.8995 7 maps/dao/lak304d.map 193 194 1 82 23 62 30.8701 7 maps/dao/lak304d.map 193 194 10 125 24 149 29.799 7 maps/dao/lak304d.map 193 194 10 126 28 105 29.0416 7 maps/dao/lak304d.map 193 194 10 128 4 102 29.6569 7 maps/dao/lak304d.map 193 194 10 61 16 89 30.4853 7 maps/dao/lak304d.map 193 194 10 94 13 65 31.8995 7 maps/dao/lak304d.map 193 194 100 103 98 75 28.8284 7 maps/dao/lak304d.map 193 194 100 107 78 125 30.6274 7 maps/dao/lak304d.map 193 194 100 125 71 118 31.8995 7 maps/dao/lak304d.map 193 194 100 147 76 157 28.1421 8 maps/dao/lak304d.map 193 194 10 121 25 147 32.2132 8 maps/dao/lak304d.map 193 194 10 77 36 62 33.9706 8 maps/dao/lak304d.map 193 194 10 83 28 60 33.9706 8 maps/dao/lak304d.map 193 194 100 107 86 135 33.799 8 maps/dao/lak304d.map 193 194 100 114 90 84 34.1421 8 maps/dao/lak304d.map 193 194 100 122 102 88 34.8284 8 maps/dao/lak304d.map 193 194 100 124 75 102 34.1127 8 maps/dao/lak304d.map 193 194 100 127 75 106 34.2843 8 maps/dao/lak304d.map 193 194 100 152 128 140 32.9706 8 maps/dao/lak304d.map 193 194 100 73 112 103 35.799 9 maps/dao/lak304d.map 193 194 10 61 6 94 36.3137 9 maps/dao/lak304d.map 193 194 10 75 20 92 37.7279 9 maps/dao/lak304d.map 193 194 100 106 122 77 38.1127 9 maps/dao/lak304d.map 193 194 100 126 64 117 39.7279 9 maps/dao/lak304d.map 193 194 100 136 112 102 38.9706 9 maps/dao/lak304d.map 193 194 100 136 91 101 38.7279 9 maps/dao/lak304d.map 193 194 100 74 116 71 39.3848 9 maps/dao/lak304d.map 193 194 101 109 109 75 39.5563 9 maps/dao/lak304d.map 193 194 101 117 85 86 39.3848 9 maps/dao/lak304d.map 193 194 101 127 88 96 36.3848 10 maps/dao/lak304d.map 193 194 1 81 23 51 43.4558 10 maps/dao/lak304d.map 193 194 10 117 29 152 42.8701 10 maps/dao/lak304d.map 193 194 10 118 23 155 43.2132 10 maps/dao/lak304d.map 193 194 10 93 18 55 42.9706 10 maps/dao/lak304d.map 193 194 100 102 68 88 40.1421 10 maps/dao/lak304d.map 193 194 100 109 86 71 43.799 10 maps/dao/lak304d.map 193 194 100 117 124 86 40.9411 10 maps/dao/lak304d.map 193 194 100 121 110 85 40.1421 10 maps/dao/lak304d.map 193 194 100 136 73 123 42.3848 10 maps/dao/lak304d.map 193 194 100 46 77 22 40.5563 11 maps/dao/lak304d.map 193 194 10 109 29 147 45.8701 11 maps/dao/lak304d.map 193 194 10 68 53 80 47.9706 11 maps/dao/lak304d.map 193 194 10 77 45 53 47.8701 11 maps/dao/lak304d.map 193 194 10 78 45 77 44.3848 11 maps/dao/lak304d.map 193 194 100 104 81 68 45.0416 11 maps/dao/lak304d.map 193 194 100 113 135 84 47.598 11 maps/dao/lak304d.map 193 194 100 114 78 82 44.6274 11 maps/dao/lak304d.map 193 194 100 134 98 89 45.8284 11 maps/dao/lak304d.map 193 194 100 146 61 167 47.6985 11 maps/dao/lak304d.map 193 194 100 148 63 132 44.799 12 maps/dao/lak304d.map 193 194 1 114 42 137 50.5269 12 maps/dao/lak304d.map 193 194 1 92 31 58 49.9411 12 maps/dao/lak304d.map 193 194 10 66 44 93 49.2843 12 maps/dao/lak304d.map 193 194 10 83 27 40 50.6274 12 maps/dao/lak304d.map 193 194 10 88 38 81 49.6274 12 maps/dao/lak304d.map 193 194 100 114 139 87 50.1838 12 maps/dao/lak304d.map 193 194 100 119 124 80 48.9411 12 maps/dao/lak304d.map 193 194 100 136 65 115 49.5563 12 maps/dao/lak304d.map 193 194 100 155 137 122 50.669 12 maps/dao/lak304d.map 193 194 100 79 98 127 48.8284 13 maps/dao/lak304d.map 193 194 10 115 43 150 52.1838 13 maps/dao/lak304d.map 193 194 10 81 45 90 52.8701 13 maps/dao/lak304d.map 193 194 10 94 25 88 54.5563 13 maps/dao/lak304d.map 193 194 100 117 50 113 55.799 13 maps/dao/lak304d.map 193 194 100 123 74 86 55.9706 13 maps/dao/lak304d.map 193 194 100 148 145 125 54.5269 13 maps/dao/lak304d.map 193 194 100 149 69 183 54.4558 13 maps/dao/lak304d.map 193 194 100 44 52 62 55.4558 13 maps/dao/lak304d.map 193 194 100 78 61 108 55.5269 13 maps/dao/lak304d.map 193 194 101 120 114 71 54.3848 14 maps/dao/lak304d.map 193 194 10 124 53 131 56.6274 14 maps/dao/lak304d.map 193 194 10 72 58 68 56.2843 14 maps/dao/lak304d.map 193 194 10 76 50 100 59.9411 14 maps/dao/lak304d.map 193 194 10 79 51 44 59.598 14 maps/dao/lak304d.map 193 194 10 81 50 47 59.3553 14 maps/dao/lak304d.map 193 194 10 82 46 95 59.2843 14 maps/dao/lak304d.map 193 194 100 125 73 89 57.7279 14 maps/dao/lak304d.map 193 194 100 127 127 82 56.1838 14 maps/dao/lak304d.map 193 194 100 130 93 74 58.8995 14 maps/dao/lak304d.map 193 194 100 154 91 186 56.3137 15 maps/dao/lak304d.map 193 194 1 82 27 33 60.3553 15 maps/dao/lak304d.map 193 194 10 55 52 68 60.0122 15 maps/dao/lak304d.map 193 194 100 112 45 121 63.799 15 maps/dao/lak304d.map 193 194 100 131 91 72 62.7279 15 maps/dao/lak304d.map 193 194 100 135 79 92 62.9706 15 maps/dao/lak304d.map 193 194 100 163 151 135 63.1838 15 maps/dao/lak304d.map 193 194 100 176 150 167 63.5269 15 maps/dao/lak304d.map 193 194 100 46 50 74 61.598 15 maps/dao/lak304d.map 193 194 100 47 48 71 61.9411 15 maps/dao/lak304d.map 193 194 100 76 113 132 62.2132 16 maps/dao/lak304d.map 193 194 10 123 46 172 64.4975 16 maps/dao/lak304d.map 193 194 10 128 59 125 65.9411 16 maps/dao/lak304d.map 193 194 10 76 60 61 64.0122 16 maps/dao/lak304d.map 193 194 100 104 145 103 66.7696 16 maps/dao/lak304d.map 193 194 100 118 144 71 66.9828 16 maps/dao/lak304d.map 193 194 100 154 47 151 67.1127 16 maps/dao/lak304d.map 193 194 100 155 140 109 65.4975 16 maps/dao/lak304d.map 193 194 101 101 47 121 65.2132 16 maps/dao/lak304d.map 193 194 101 108 51 89 67.4853 16 maps/dao/lak304d.map 193 194 101 112 56 125 66.7279 17 maps/dao/lak304d.map 193 194 10 119 71 142 70.5269 17 maps/dao/lak304d.map 193 194 100 104 50 87 68.0711 17 maps/dao/lak304d.map 193 194 100 106 128 63 70.2548 17 maps/dao/lak304d.map 193 194 100 112 133 62 71.669 17 maps/dao/lak304d.map 193 194 100 129 52 122 70.6985 17 maps/dao/lak304d.map 193 194 100 133 47 103 69.5269 17 maps/dao/lak304d.map 193 194 100 141 55 113 70.9411 17 maps/dao/lak304d.map 193 194 100 163 146 126 70.9411 17 maps/dao/lak304d.map 193 194 100 82 127 62 70.799 17 maps/dao/lak304d.map 193 194 100 94 44 90 71.6985 18 maps/dao/lak304d.map 193 194 10 104 58 152 74.9117 18 maps/dao/lak304d.map 193 194 10 64 62 50 75.4975 18 maps/dao/lak304d.map 193 194 10 74 62 105 74.598 18 maps/dao/lak304d.map 193 194 10 79 51 109 72.3553 18 maps/dao/lak304d.map 193 194 100 101 146 110 72.1127 18 maps/dao/lak304d.map 193 194 100 102 137 54 73.8701 18 maps/dao/lak304d.map 193 194 100 135 52 119 73.6985 18 maps/dao/lak304d.map 193 194 100 152 167 143 74.0416 18 maps/dao/lak304d.map 193 194 100 51 52 90 74.3553 18 maps/dao/lak304d.map 193 194 100 80 46 119 74.2548 19 maps/dao/lak304d.map 193 194 1 112 64 131 77.4975 19 maps/dao/lak304d.map 193 194 10 63 55 115 77.0833 19 maps/dao/lak304d.map 193 194 10 94 59 68 79.7696 19 maps/dao/lak304d.map 193 194 100 105 164 81 79.4975 19 maps/dao/lak304d.map 193 194 100 106 152 61 79.669 19 maps/dao/lak304d.map 193 194 100 149 162 110 78.1543 19 maps/dao/lak304d.map 193 194 100 151 144 170 77.5269 19 maps/dao/lak304d.map 193 194 100 155 152 101 78.468 19 maps/dao/lak304d.map 193 194 100 161 148 121 76.7696 19 maps/dao/lak304d.map 193 194 100 164 164 150 78.2843 20 maps/dao/lak304d.map 193 194 10 88 60 42 80.669 20 maps/dao/lak304d.map 193 194 100 101 163 86 82.4264 20 maps/dao/lak304d.map 193 194 100 106 62 138 80.3848 20 maps/dao/lak304d.map 193 194 100 107 53 142 80.2426 20 maps/dao/lak304d.map 193 194 100 115 134 54 80.4975 20 maps/dao/lak304d.map 193 194 100 119 146 57 82.8112 20 maps/dao/lak304d.map 193 194 100 124 144 104 80.5685 20 maps/dao/lak304d.map 193 194 100 143 33 161 81.7696 20 maps/dao/lak304d.map 193 194 100 146 26 127 81.8701 20 maps/dao/lak304d.map 193 194 100 149 59 103 80.8406 21 maps/dao/lak304d.map 193 194 10 64 65 119 87.1543 21 maps/dao/lak304d.map 193 194 10 70 73 113 87.2548 21 maps/dao/lak304d.map 193 194 10 70 75 104 87.1838 21 maps/dao/lak304d.map 193 194 100 106 34 76 84.8701 21 maps/dao/lak304d.map 193 194 100 118 138 113 86.0538 21 maps/dao/lak304d.map 193 194 100 144 27 121 84.5269 21 maps/dao/lak304d.map 193 194 100 153 169 117 86.397 21 maps/dao/lak304d.map 193 194 100 154 122 175 87.9117 21 maps/dao/lak304d.map 193 194 100 81 155 50 86.5269 21 maps/dao/lak304d.map 193 194 100 89 168 50 87.669 22 maps/dao/lak304d.map 193 194 10 105 74 148 89.4264 22 maps/dao/lak304d.map 193 194 10 114 48 106 89.0122 22 maps/dao/lak304d.map 193 194 100 108 57 66 91.9706 22 maps/dao/lak304d.map 193 194 100 116 159 116 90.0538 22 maps/dao/lak304d.map 193 194 100 135 151 102 89.9828 22 maps/dao/lak304d.map 193 194 100 151 23 158 89.8406 22 maps/dao/lak304d.map 193 194 100 152 67 105 88.669 22 maps/dao/lak304d.map 193 194 100 161 103 144 91.9411 22 maps/dao/lak304d.map 193 194 100 168 108 146 89.8406 22 maps/dao/lak304d.map 193 194 100 170 169 156 88.8406 23 maps/dao/lak304d.map 193 194 1 78 70 111 94.9117 23 maps/dao/lak304d.map 193 194 1 82 68 106 92.4975 23 maps/dao/lak304d.map 193 194 1 89 53 114 92.4975 23 maps/dao/lak304d.map 193 194 10 124 91 153 93.0122 23 maps/dao/lak304d.map 193 194 10 63 83 49 92.0538 23 maps/dao/lak304d.map 193 194 10 65 86 46 95.468 23 maps/dao/lak304d.map 193 194 10 74 63 128 93.0833 23 maps/dao/lak304d.map 193 194 100 100 42 135 92.2132 23 maps/dao/lak304d.map 193 194 100 110 179 69 95.9828 23 maps/dao/lak304d.map 193 194 100 110 71 149 95.1127 24 maps/dao/lak304d.map 193 194 1 115 88 143 98.598 24 maps/dao/lak304d.map 193 194 1 92 45 120 97.598 24 maps/dao/lak304d.map 193 194 10 104 43 109 98.0833 24 maps/dao/lak304d.map 193 194 10 125 68 119 98.7696 24 maps/dao/lak304d.map 193 194 10 128 70 158 96.669 24 maps/dao/lak304d.map 193 194 10 55 61 123 97.3259 24 maps/dao/lak304d.map 193 194 10 65 78 34 99.3675 24 maps/dao/lak304d.map 193 194 10 73 84 33 99.5391 24 maps/dao/lak304d.map 193 194 10 90 73 50 97.2254 24 maps/dao/lak304d.map 193 194 10 92 73 51 99.397 25 maps/dao/lak304d.map 193 194 10 103 58 107 100.184 25 maps/dao/lak304d.map 193 194 10 72 47 141 103.598 25 maps/dao/lak304d.map 193 194 10 83 74 123 102.225 25 maps/dao/lak304d.map 193 194 100 105 149 33 101.083 25 maps/dao/lak304d.map 193 194 100 109 185 82 101.983 25 maps/dao/lak304d.map 193 194 100 109 19 86 101.698 25 maps/dao/lak304d.map 193 194 100 112 141 33 103.983 25 maps/dao/lak304d.map 193 194 100 115 20 82 100.941 25 maps/dao/lak304d.map 193 194 100 118 168 121 102.539 25 maps/dao/lak304d.map 193 194 100 125 175 73 101.225 26 maps/dao/lak304d.map 193 194 1 116 67 112 106.426 26 maps/dao/lak304d.map 193 194 10 124 75 121 105.841 26 maps/dao/lak304d.map 193 194 10 60 46 139 107.912 26 maps/dao/lak304d.map 193 194 10 68 48 146 107.255 26 maps/dao/lak304d.map 193 194 10 70 68 140 104.569 26 maps/dao/lak304d.map 193 194 10 71 63 143 105.083 26 maps/dao/lak304d.map 193 194 10 71 94 103 106.184 26 maps/dao/lak304d.map 193 194 10 72 91 102 104.012 26 maps/dao/lak304d.map 193 194 100 103 141 27 106.255 26 maps/dao/lak304d.map 193 194 100 103 32 158 107.184 27 maps/dao/lak304d.map 193 194 1 113 69 161 111.64 27 maps/dao/lak304d.map 193 194 1 78 85 116 111.983 27 maps/dao/lak304d.map 193 194 10 117 53 83 110.012 27 maps/dao/lak304d.map 193 194 10 117 79 114 109.841 27 maps/dao/lak304d.map 193 194 10 121 44 81 111.598 27 maps/dao/lak304d.map 193 194 10 62 77 26 109.024 27 maps/dao/lak304d.map 193 194 10 66 95 99 110.912 27 maps/dao/lak304d.map 193 194 10 71 99 39 108.882 27 maps/dao/lak304d.map 193 194 10 73 72 144 110.64 27 maps/dao/lak304d.map 193 194 10 77 87 26 111.196 28 maps/dao/lak304d.map 193 194 1 80 75 29 115.853 28 maps/dao/lak304d.map 193 194 1 82 68 137 114.711 28 maps/dao/lak304d.map 193 194 10 102 71 164 114.64 28 maps/dao/lak304d.map 193 194 10 111 79 115 115.669 28 maps/dao/lak304d.map 193 194 10 112 74 174 113.397 28 maps/dao/lak304d.map 193 194 10 63 94 116 112.397 28 maps/dao/lak304d.map 193 194 10 69 98 117 114.326 28 maps/dao/lak304d.map 193 194 10 74 87 128 113.569 28 maps/dao/lak304d.map 193 194 10 83 90 111 113.255 28 maps/dao/lak304d.map 193 194 10 90 90 47 115.468 29 maps/dao/lak304d.map 193 194 1 112 104 141 118.326 29 maps/dao/lak304d.map 193 194 1 114 64 164 117.468 29 maps/dao/lak304d.map 193 194 1 79 87 120 116.64 29 maps/dao/lak304d.map 193 194 10 108 41 86 117.912 29 maps/dao/lak304d.map 193 194 10 79 39 146 119.497 29 maps/dao/lak304d.map 193 194 100 102 6 78 119.497 29 maps/dao/lak304d.map 193 194 100 105 125 144 116.468 29 maps/dao/lak304d.map 193 194 100 109 18 144 117.042 29 maps/dao/lak304d.map 193 194 100 110 179 137 116.267 29 maps/dao/lak304d.map 193 194 100 110 47 48 119.912 30 maps/dao/lak304d.map 193 194 1 79 82 20 123.196 30 maps/dao/lak304d.map 193 194 1 81 65 145 121.054 30 maps/dao/lak304d.map 193 194 10 106 74 128 123.983 30 maps/dao/lak304d.map 193 194 10 106 77 121 121.154 30 maps/dao/lak304d.map 193 194 10 111 78 128 120.64 30 maps/dao/lak304d.map 193 194 10 117 92 108 120.355 30 maps/dao/lak304d.map 193 194 10 120 91 122 123.912 30 maps/dao/lak304d.map 193 194 10 122 122 141 123.184 30 maps/dao/lak304d.map 193 194 10 67 101 87 121.468 30 maps/dao/lak304d.map 193 194 10 68 37 156 121.811 31 maps/dao/lak304d.map 193 194 1 79 36 140 126.083 31 maps/dao/lak304d.map 193 194 1 82 97 114 124.811 31 maps/dao/lak304d.map 193 194 1 91 92 112 127.397 31 maps/dao/lak304d.map 193 194 1 92 96 44 126.782 31 maps/dao/lak304d.map 193 194 10 103 110 149 126.669 31 maps/dao/lak304d.map 193 194 10 110 43 76 125.083 31 maps/dao/lak304d.map 193 194 10 121 57 66 127.012 31 maps/dao/lak304d.map 193 194 10 123 92 191 125.983 31 maps/dao/lak304d.map 193 194 10 72 94 78 124.569 31 maps/dao/lak304d.map 193 194 10 76 83 153 127.196 32 maps/dao/lak304d.map 193 194 1 90 82 21 130.853 32 maps/dao/lak304d.map 193 194 10 109 35 76 129.397 32 maps/dao/lak304d.map 193 194 10 122 59 62 131.426 32 maps/dao/lak304d.map 193 194 10 61 36 122 130.397 32 maps/dao/lak304d.map 193 194 10 62 111 95 130.225 32 maps/dao/lak304d.map 193 194 10 66 110 120 128.811 32 maps/dao/lak304d.map 193 194 10 69 89 5 129.61 32 maps/dao/lak304d.map 193 194 10 72 76 93 128.983 32 maps/dao/lak304d.map 193 194 10 73 116 103 129.012 32 maps/dao/lak304d.map 193 194 10 79 31 150 129.154 33 maps/dao/lak304d.map 193 194 1 116 91 93 135.569 33 maps/dao/lak304d.map 193 194 1 89 82 18 133.439 33 maps/dao/lak304d.map 193 194 1 91 90 125 132.539 33 maps/dao/lak304d.map 193 194 10 71 111 133 133.125 33 maps/dao/lak304d.map 193 194 10 92 94 121 132.64 33 maps/dao/lak304d.map 193 194 100 129 13 84 133.054 33 maps/dao/lak304d.map 193 194 100 133 149 22 134.468 33 maps/dao/lak304d.map 193 194 100 134 5 63 135.539 33 maps/dao/lak304d.map 193 194 100 134 7 62 133.953 33 maps/dao/lak304d.map 193 194 100 136 81 168 134.882 34 maps/dao/lak304d.map 193 194 1 114 46 66 137.669 34 maps/dao/lak304d.map 193 194 1 77 32 125 136.397 34 maps/dao/lak304d.map 193 194 1 77 86 149 136.782 34 maps/dao/lak304d.map 193 194 10 102 33 79 136.569 34 maps/dao/lak304d.map 193 194 10 117 103 123 137.569 34 maps/dao/lak304d.map 193 194 10 122 96 80 139.154 34 maps/dao/lak304d.map 193 194 10 123 133 126 139.983 34 maps/dao/lak304d.map 193 194 10 123 68 58 138.74 34 maps/dao/lak304d.map 193 194 10 127 18 67 139.64 34 maps/dao/lak304d.map 193 194 10 55 61 9 138.48 35 maps/dao/lak304d.map 193 194 1 114 103 109 142.012 35 maps/dao/lak304d.map 193 194 10 118 61 53 142.912 35 maps/dao/lak304d.map 193 194 10 118 80 84 142.811 35 maps/dao/lak304d.map 193 194 10 128 15 67 143.054 35 maps/dao/lak304d.map 193 194 10 63 83 167 140.681 35 maps/dao/lak304d.map 193 194 10 65 109 74 142.024 35 maps/dao/lak304d.map 193 194 10 81 91 2 140.853 35 maps/dao/lak304d.map 193 194 10 88 80 154 140.61 35 maps/dao/lak304d.map 193 194 10 93 115 46 143.882 35 maps/dao/lak304d.map 193 194 10 93 34 130 140.983 36 maps/dao/lak304d.map 193 194 1 114 24 67 147.539 36 maps/dao/lak304d.map 193 194 1 81 112 86 144.368 36 maps/dao/lak304d.map 193 194 1 92 107 121 147.125 36 maps/dao/lak304d.map 193 194 10 105 97 89 145.225 36 maps/dao/lak304d.map 193 194 10 106 130 137 145.326 36 maps/dao/lak304d.map 193 194 10 112 96 80 145.64 36 maps/dao/lak304d.map 193 194 10 113 108 123 145.983 36 maps/dao/lak304d.map 193 194 10 120 112 91 146.154 36 maps/dao/lak304d.map 193 194 10 122 110 89 144.154 36 maps/dao/lak304d.map 193 194 10 124 74 89 144.255 37 maps/dao/lak304d.map 193 194 1 114 107 117 149.326 37 maps/dao/lak304d.map 193 194 1 92 113 103 148.154 37 maps/dao/lak304d.map 193 194 10 105 21 70 149.296 37 maps/dao/lak304d.map 193 194 10 106 24 65 149.711 37 maps/dao/lak304d.map 193 194 10 121 68 47 150.569 37 maps/dao/lak304d.map 193 194 10 127 15 57 149.711 37 maps/dao/lak304d.map 193 194 10 55 15 139 151.368 37 maps/dao/lak304d.map 193 194 10 73 67 173 148.338 37 maps/dao/lak304d.map 193 194 10 89 34 116 150.983 37 maps/dao/lak304d.map 193 194 100 112 106 40 151.64 38 maps/dao/lak304d.map 193 194 1 115 135 123 155.539 38 maps/dao/lak304d.map 193 194 1 78 112 71 154.024 38 maps/dao/lak304d.map 193 194 1 89 24 142 152.125 38 maps/dao/lak304d.map 193 194 1 92 98 74 152.782 38 maps/dao/lak304d.map 193 194 10 106 69 55 155.054 38 maps/dao/lak304d.map 193 194 10 110 141 143 153.154 38 maps/dao/lak304d.map 193 194 10 115 105 72 155.539 38 maps/dao/lak304d.map 193 194 10 120 145 123 154.468 38 maps/dao/lak304d.map 193 194 10 123 123 95 154.255 38 maps/dao/lak304d.map 193 194 10 124 148 134 155.012 39 maps/dao/lak304d.map 193 194 1 89 21 138 157.368 39 maps/dao/lak304d.map 193 194 1 90 100 145 158.61 39 maps/dao/lak304d.map 193 194 10 104 138 127 159.468 39 maps/dao/lak304d.map 193 194 10 104 41 54 159.711 39 maps/dao/lak304d.map 193 194 10 111 13 79 159.711 39 maps/dao/lak304d.map 193 194 10 124 136 156 158.083 39 maps/dao/lak304d.map 193 194 10 127 117 71 159.953 39 maps/dao/lak304d.map 193 194 10 54 108 148 156.853 39 maps/dao/lak304d.map 193 194 10 54 128 83 158.439 39 maps/dao/lak304d.map 193 194 10 89 117 75 158.681 40 maps/dao/lak304d.map 193 194 1 76 72 179 162.51 40 maps/dao/lak304d.map 193 194 10 112 10 81 161.125 40 maps/dao/lak304d.map 193 194 10 122 85 45 161.539 40 maps/dao/lak304d.map 193 194 10 128 22 43 161.368 40 maps/dao/lak304d.map 193 194 10 54 11 112 162.439 40 maps/dao/lak304d.map 193 194 10 54 73 178 160.823 40 maps/dao/lak304d.map 193 194 10 70 9 102 163.711 40 maps/dao/lak304d.map 193 194 10 72 141 91 163.054 40 maps/dao/lak304d.map 193 194 10 79 118 149 163.539 40 maps/dao/lak304d.map 193 194 100 100 100 170 161.539 41 maps/dao/lak304d.map 193 194 1 76 79 187 167.61 41 maps/dao/lak304d.map 193 194 1 80 112 137 166.267 41 maps/dao/lak304d.map 193 194 1 89 105 147 164.024 41 maps/dao/lak304d.map 193 194 10 106 125 98 167.912 41 maps/dao/lak304d.map 193 194 10 113 147 156 165.64 41 maps/dao/lak304d.map 193 194 10 114 142 109 166.196 41 maps/dao/lak304d.map 193 194 10 118 145 160 164.983 41 maps/dao/lak304d.map 193 194 10 74 143 93 166.711 41 maps/dao/lak304d.map 193 194 10 88 110 147 165.953 41 maps/dao/lak304d.map 193 194 10 89 119 68 165.924 42 maps/dao/lak304d.map 193 194 1 92 20 106 171.853 42 maps/dao/lak304d.map 193 194 10 101 145 122 171.539 42 maps/dao/lak304d.map 193 194 10 108 154 149 170.64 42 maps/dao/lak304d.map 193 194 10 113 20 43 168.61 42 maps/dao/lak304d.map 193 194 10 119 140 103 168.125 42 maps/dao/lak304d.map 193 194 10 124 151 104 169.61 42 maps/dao/lak304d.map 193 194 10 69 128 137 169.782 42 maps/dao/lak304d.map 193 194 10 78 9 102 168.539 42 maps/dao/lak304d.map 193 194 100 148 40 24 170.61 42 maps/dao/lak304d.map 193 194 100 153 99 48 168.853 43 maps/dao/lak304d.map 193 194 1 115 82 40 174.853 43 maps/dao/lak304d.map 193 194 1 116 27 42 172.61 43 maps/dao/lak304d.map 193 194 1 78 122 149 173.196 43 maps/dao/lak304d.map 193 194 10 101 3 75 172.539 43 maps/dao/lak304d.map 193 194 10 102 125 94 173.569 43 maps/dao/lak304d.map 193 194 10 114 93 46 173.61 43 maps/dao/lak304d.map 193 194 10 116 149 104 172.095 43 maps/dao/lak304d.map 193 194 10 128 72 31 175.024 43 maps/dao/lak304d.map 193 194 10 68 133 139 174.368 43 maps/dao/lak304d.map 193 194 10 93 12 111 174.953 44 maps/dao/lak304d.map 193 194 1 90 117 150 177.681 44 maps/dao/lak304d.map 193 194 10 110 128 76 176.024 44 maps/dao/lak304d.map 193 194 10 112 137 86 178.882 44 maps/dao/lak304d.map 193 194 10 112 151 166 178.296 44 maps/dao/lak304d.map 193 194 10 126 166 119 179.61 44 maps/dao/lak304d.map 193 194 10 127 85 24 179.782 44 maps/dao/lak304d.map 193 194 10 60 150 75 178.338 44 maps/dao/lak304d.map 193 194 10 73 139 65 177.125 44 maps/dao/lak304d.map 193 194 10 77 145 70 178.024 44 maps/dao/lak304d.map 193 194 10 92 138 83 179.953 45 maps/dao/lak304d.map 193 194 1 92 64 184 182.723 45 maps/dao/lak304d.map 193 194 10 115 163 123 183.167 45 maps/dao/lak304d.map 193 194 10 118 116 162 180.125 45 maps/dao/lak304d.map 193 194 10 123 72 25 180.024 45 maps/dao/lak304d.map 193 194 10 124 76 21 181.953 45 maps/dao/lak304d.map 193 194 10 126 120 172 180.711 45 maps/dao/lak304d.map 193 194 10 127 47 29 182.054 45 maps/dao/lak304d.map 193 194 10 78 151 69 183.681 45 maps/dao/lak304d.map 193 194 100 163 32 168 183.125 45 maps/dao/lak304d.map 193 194 100 164 38 98 183.681 46 maps/dao/lak304d.map 193 194 1 89 145 93 186.853 46 maps/dao/lak304d.map 193 194 10 109 119 162 184.953 46 maps/dao/lak304d.map 193 194 10 123 136 72 184.64 46 maps/dao/lak304d.map 193 194 10 75 147 111 187.953 46 maps/dao/lak304d.map 193 194 10 80 154 102 187.439 46 maps/dao/lak304d.map 193 194 100 129 100 180 184.723 46 maps/dao/lak304d.map 193 194 100 132 101 174 184.238 46 maps/dao/lak304d.map 193 194 100 164 71 116 187.61 46 maps/dao/lak304d.map 193 194 100 172 23 155 185.196 46 maps/dao/lak304d.map 193 194 100 173 102 134 185.995 47 maps/dao/lak304d.map 193 194 1 115 122 169 189.61 47 maps/dao/lak304d.map 193 194 1 78 139 140 191.439 47 maps/dao/lak304d.map 193 194 10 105 118 165 191.196 47 maps/dao/lak304d.map 193 194 10 119 90 17 190.51 47 maps/dao/lak304d.map 193 194 10 121 83 15 188.782 47 maps/dao/lak304d.map 193 194 10 126 80 12 190.125 47 maps/dao/lak304d.map 193 194 10 73 142 118 191.652 47 maps/dao/lak304d.map 193 194 10 74 156 59 191.752 47 maps/dao/lak304d.map 193 194 10 80 145 106 188.782 47 maps/dao/lak304d.map 193 194 100 164 14 127 190.882 48 maps/dao/lak304d.map 193 194 10 109 48 30 192.539 48 maps/dao/lak304d.map 193 194 10 127 105 170 192.368 48 maps/dao/lak304d.map 193 194 10 127 141 64 193.882 48 maps/dao/lak304d.map 193 194 10 63 160 61 193.48 48 maps/dao/lak304d.map 193 194 10 76 144 149 193.267 48 maps/dao/lak304d.map 193 194 10 76 161 83 194.853 48 maps/dao/lak304d.map 193 194 10 79 144 112 194.196 48 maps/dao/lak304d.map 193 194 100 165 26 107 195.296 48 maps/dao/lak304d.map 193 194 100 166 27 106 195.711 48 maps/dao/lak304d.map 193 194 100 179 37 94 194.894 49 maps/dao/lak304d.map 193 194 10 104 93 29 197.095 49 maps/dao/lak304d.map 193 194 10 118 133 63 196.953 49 maps/dao/lak304d.map 193 194 10 70 168 62 197.581 49 maps/dao/lak304d.map 193 194 10 75 152 132 199.853 49 maps/dao/lak304d.map 193 194 100 114 66 36 196.752 49 maps/dao/lak304d.map 193 194 100 153 88 3 196.995 49 maps/dao/lak304d.map 193 194 100 182 25 113 196.167 49 maps/dao/lak304d.map 193 194 100 44 126 131 199.995 49 maps/dao/lak304d.map 193 194 101 142 93 4 197.581 49 maps/dao/lak304d.map 193 194 101 165 12 114 198.368 50 maps/dao/lak304d.map 193 194 1 112 156 88 201.652 50 maps/dao/lak304d.map 193 194 1 79 144 127 201.409 50 maps/dao/lak304d.map 193 194 1 89 131 63 200.51 50 maps/dao/lak304d.map 193 194 1 92 137 134 202.167 50 maps/dao/lak304d.map 193 194 10 105 50 23 200.853 50 maps/dao/lak304d.map 193 194 10 109 127 186 202.953 50 maps/dao/lak304d.map 193 194 10 121 187 104 203.924 50 maps/dao/lak304d.map 193 194 10 62 140 47 202.581 50 maps/dao/lak304d.map 193 194 10 62 143 157 201.338 50 maps/dao/lak304d.map 193 194 10 62 150 156 203.238 51 maps/dao/lak304d.map 193 194 1 113 68 12 207.823 51 maps/dao/lak304d.map 193 194 1 76 151 50 207.338 51 maps/dao/lak304d.map 193 194 1 82 154 114 205.167 51 maps/dao/lak304d.map 193 194 10 111 159 73 207.267 51 maps/dao/lak304d.map 193 194 10 125 191 103 206.681 51 maps/dao/lak304d.map 193 194 10 61 157 45 207.894 51 maps/dao/lak304d.map 193 194 10 61 167 113 207.752 51 maps/dao/lak304d.map 193 194 10 62 149 43 206.167 51 maps/dao/lak304d.map 193 194 10 71 162 144 204.196 51 maps/dao/lak304d.map 193 194 10 76 137 44 206.338 52 maps/dao/lak304d.map 193 194 1 112 118 54 208.095 52 maps/dao/lak304d.map 193 194 1 76 148 48 208.095 52 maps/dao/lak304d.map 193 194 1 76 158 136 211.267 52 maps/dao/lak304d.map 193 194 1 80 148 155 210.409 52 maps/dao/lak304d.map 193 194 1 92 138 54 209.853 52 maps/dao/lak304d.map 193 194 10 102 103 160 209.368 52 maps/dao/lak304d.map 193 194 10 115 126 56 208.681 52 maps/dao/lak304d.map 193 194 10 122 166 84 210.853 52 maps/dao/lak304d.map 193 194 10 83 158 139 209.196 52 maps/dao/lak304d.map 193 194 101 168 31 84 210.167 53 maps/dao/lak304d.map 193 194 1 76 161 48 215.238 53 maps/dao/lak304d.map 193 194 1 82 161 93 215.167 53 maps/dao/lak304d.map 193 194 1 90 138 114 213.409 53 maps/dao/lak304d.map 193 194 10 102 158 73 215.267 53 maps/dao/lak304d.map 193 194 10 113 189 126 214.309 53 maps/dao/lak304d.map 193 194 10 120 154 50 214.51 53 maps/dao/lak304d.map 193 194 10 124 146 45 214.539 53 maps/dao/lak304d.map 193 194 10 60 155 162 212.137 53 maps/dao/lak304d.map 193 194 10 61 123 163 214.137 53 maps/dao/lak304d.map 193 194 10 68 147 30 215.853 54 maps/dao/lak304d.map 193 194 1 116 150 57 217.095 54 maps/dao/lak304d.map 193 194 1 91 147 48 218.581 54 maps/dao/lak304d.map 193 194 10 63 140 32 217.167 54 maps/dao/lak304d.map 193 194 10 81 182 85 218.167 54 maps/dao/lak304d.map 193 194 10 90 135 159 219.338 54 maps/dao/lak304d.map 193 194 10 92 154 52 216.995 54 maps/dao/lak304d.map 193 194 10 93 156 117 217.338 54 maps/dao/lak304d.map 193 194 100 165 59 64 216.853 54 maps/dao/lak304d.map 193 194 100 44 129 55 219.338 54 maps/dao/lak304d.map 193 194 100 46 161 68 217.409 55 maps/dao/lak304d.map 193 194 1 76 183 65 221.995 55 maps/dao/lak304d.map 193 194 1 91 167 89 222.066 55 maps/dao/lak304d.map 193 194 10 106 166 79 220.095 55 maps/dao/lak304d.map 193 194 10 60 153 174 223.309 55 maps/dao/lak304d.map 193 194 10 66 179 101 221.823 55 maps/dao/lak304d.map 193 194 10 71 112 166 222.238 55 maps/dao/lak304d.map 193 194 10 73 163 157 220.439 55 maps/dao/lak304d.map 193 194 10 82 159 39 220.409 55 maps/dao/lak304d.map 193 194 10 88 155 158 222.238 55 maps/dao/lak304d.map 193 194 100 42 145 117 223.924 56 maps/dao/lak304d.map 193 194 1 78 188 67 226.995 56 maps/dao/lak304d.map 193 194 1 91 163 121 224.894 56 maps/dao/lak304d.map 193 194 10 108 159 51 226.409 56 maps/dao/lak304d.map 193 194 10 123 132 43 224.267 56 maps/dao/lak304d.map 193 194 10 125 184 85 226.853 56 maps/dao/lak304d.map 193 194 10 61 150 24 225.995 56 maps/dao/lak304d.map 193 194 10 70 157 24 225.167 56 maps/dao/lak304d.map 193 194 10 72 122 177 224.238 56 maps/dao/lak304d.map 193 194 10 76 111 163 225.238 56 maps/dao/lak304d.map 193 194 10 82 127 171 226.409 57 maps/dao/lak304d.map 193 194 10 110 118 190 229.238 57 maps/dao/lak304d.map 193 194 10 111 145 38 229.439 57 maps/dao/lak304d.map 193 194 10 112 149 40 228.095 57 maps/dao/lak304d.map 193 194 10 117 170 45 229.723 57 maps/dao/lak304d.map 193 194 10 61 131 177 228.38 57 maps/dao/lak304d.map 193 194 10 63 185 130 231.966 57 maps/dao/lak304d.map 193 194 10 78 125 180 230.823 57 maps/dao/lak304d.map 193 194 100 165 61 51 230.681 57 maps/dao/lak304d.map 193 194 100 178 20 91 229.794 57 maps/dao/lak304d.map 193 194 100 181 25 67 228.865 58 maps/dao/lak304d.map 193 194 10 101 173 65 234.581 58 maps/dao/lak304d.map 193 194 10 65 187 125 234.38 58 maps/dao/lak304d.map 193 194 10 82 169 34 232.48 58 maps/dao/lak304d.map 193 194 10 89 190 77 234.167 58 maps/dao/lak304d.map 193 194 100 174 16 69 232.38 58 maps/dao/lak304d.map 193 194 100 42 162 106 232.652 58 maps/dao/lak304d.map 193 194 100 43 174 85 232.894 58 maps/dao/lak304d.map 193 194 100 50 173 55 233.137 58 maps/dao/lak304d.map 193 194 100 51 179 69 233.752 58 maps/dao/lak304d.map 193 194 101 42 146 160 234.238 59 maps/dao/lak304d.map 193 194 1 112 178 56 238.966 59 maps/dao/lak304d.map 193 194 10 106 146 35 237.853 59 maps/dao/lak304d.map 193 194 10 118 140 27 236.681 59 maps/dao/lak304d.map 193 194 10 73 101 177 238.622 59 maps/dao/lak304d.map 193 194 10 82 107 168 237.309 59 maps/dao/lak304d.map 193 194 10 93 155 169 236.48 59 maps/dao/lak304d.map 193 194 100 37 178 82 238.137 59 maps/dao/lak304d.map 193 194 100 51 150 165 236.995 59 maps/dao/lak304d.map 193 194 100 51 174 110 239.51 59 maps/dao/lak304d.map 193 194 101 161 28 47 239.894 60 maps/dao/lak304d.map 193 194 1 82 184 125 243.037 60 maps/dao/lak304d.map 193 194 1 89 180 103 240.48 60 maps/dao/lak304d.map 193 194 10 78 99 166 240.48 60 maps/dao/lak304d.map 193 194 100 182 13 65 240.35 60 maps/dao/lak304d.map 193 194 100 38 127 163 240.794 60 maps/dao/lak304d.map 193 194 101 165 11 54 241.794 60 maps/dao/lak304d.map 193 194 101 39 166 126 242.208 60 maps/dao/lak304d.map 193 194 101 48 146 33 241.095 60 maps/dao/lak304d.map 193 194 101 52 135 36 241.823 60 maps/dao/lak304d.map 193 194 102 165 23 49 243.309 61 maps/dao/lak304d.map 193 194 1 113 171 40 245.794 61 maps/dao/lak304d.map 193 194 1 114 174 40 246.622 61 maps/dao/lak304d.map 193 194 10 113 160 27 244.652 61 maps/dao/lak304d.map 193 194 100 178 69 44 246.38 61 maps/dao/lak304d.map 193 194 100 48 174 128 245.723 61 maps/dao/lak304d.map 193 194 101 179 75 48 244.279 61 maps/dao/lak304d.map 193 194 101 41 142 32 245.823 61 maps/dao/lak304d.map 193 194 101 45 156 167 244.137 61 maps/dao/lak304d.map 193 194 101 46 148 28 247.752 61 maps/dao/lak304d.map 193 194 101 50 184 60 244.723 62 maps/dao/lak304d.map 193 194 1 90 108 174 250.522 62 maps/dao/lak304d.map 193 194 1 90 111 176 248.35 62 maps/dao/lak304d.map 193 194 10 111 154 21 250.167 62 maps/dao/lak304d.map 193 194 100 172 43 42 248.38 62 maps/dao/lak304d.map 193 194 100 42 112 161 251.551 62 maps/dao/lak304d.map 193 194 100 42 174 134 251.279 62 maps/dao/lak304d.map 193 194 100 44 166 156 249.581 62 maps/dao/lak304d.map 193 194 100 47 129 172 248.894 62 maps/dao/lak304d.map 193 194 101 167 26 40 249.38 62 maps/dao/lak304d.map 193 194 101 174 79 41 250.865 63 maps/dao/lak304d.map 193 194 1 92 186 128 252.622 63 maps/dao/lak304d.map 193 194 10 81 109 183 252.279 63 maps/dao/lak304d.map 193 194 100 169 24 37 255.037 63 maps/dao/lak304d.map 193 194 101 174 89 53 252.38 63 maps/dao/lak304d.map 193 194 101 179 15 86 252.279 63 maps/dao/lak304d.map 193 194 101 48 185 103 254.823 63 maps/dao/lak304d.map 193 194 102 181 22 44 253.593 63 maps/dao/lak304d.map 193 194 102 38 143 25 254.652 63 maps/dao/lak304d.map 193 194 102 47 181 102 252.652 63 maps/dao/lak304d.map 193 194 103 165 83 34 253.794 64 maps/dao/lak304d.map 193 194 10 75 115 192 258.936 64 maps/dao/lak304d.map 193 194 10 89 100 181 258.35 64 maps/dao/lak304d.map 193 194 100 176 30 33 259.451 64 maps/dao/lak304d.map 193 194 101 178 29 35 257.693 64 maps/dao/lak304d.map 193 194 101 182 30 36 258.522 64 maps/dao/lak304d.map 193 194 102 164 24 32 256.551 64 maps/dao/lak304d.map 193 194 102 165 55 33 257.451 64 maps/dao/lak304d.map 193 194 103 179 33 30 259.451 64 maps/dao/lak304d.map 193 194 103 182 89 46 258.35 64 maps/dao/lak304d.map 193 194 103 190 48 44 259.35 65 maps/dao/lak304d.map 193 194 100 42 135 181 261.279 65 maps/dao/lak304d.map 193 194 100 43 127 186 262.551 65 maps/dao/lak304d.map 193 194 100 50 188 116 263.581 65 maps/dao/lak304d.map 193 194 102 190 43 42 260.279 65 maps/dao/lak304d.map 193 194 102 48 188 127 262.966 65 maps/dao/lak304d.map 193 194 104 179 81 32 260.35 65 maps/dao/lak304d.map 193 194 104 39 110 158 260.622 65 maps/dao/lak304d.map 193 194 104 45 155 22 260.066 65 maps/dao/lak304d.map 193 194 105 162 46 25 263.723 65 maps/dao/lak304d.map 193 194 105 41 185 103 261.723 66 maps/dao/lak304d.map 193 194 100 164 85 25 266.208 66 maps/dao/lak304d.map 193 194 100 42 103 172 265.108 66 maps/dao/lak304d.map 193 194 102 165 41 21 266.966 66 maps/dao/lak304d.map 193 194 102 181 97 46 265.764 66 maps/dao/lak304d.map 193 194 102 46 136 183 264.037 66 maps/dao/lak304d.map 193 194 103 162 105 40 266.794 66 maps/dao/lak304d.map 193 194 103 39 106 175 267.593 66 maps/dao/lak304d.map 193 194 103 40 108 176 265.593 66 maps/dao/lak304d.map 193 194 103 45 103 170 266.037 66 maps/dao/lak304d.map 193 194 104 175 38 24 264.865 67 maps/dao/lak304d.map 193 194 1 82 118 188 270.421 67 maps/dao/lak304d.map 193 194 100 162 91 21 271.865 67 maps/dao/lak304d.map 193 194 100 166 43 20 271.208 67 maps/dao/lak304d.map 193 194 100 173 88 28 268.764 67 maps/dao/lak304d.map 193 194 101 163 84 20 269.38 67 maps/dao/lak304d.map 193 194 101 175 44 32 269.037 67 maps/dao/lak304d.map 193 194 102 166 76 20 269.622 67 maps/dao/lak304d.map 193 194 103 164 105 53 269.309 67 maps/dao/lak304d.map 193 194 103 179 88 28 268.25 67 maps/dao/lak304d.map 193 194 103 190 55 35 271.25 68 maps/dao/lak304d.map 193 194 100 176 87 22 275.007 68 maps/dao/lak304d.map 193 194 101 167 110 53 273.794 68 maps/dao/lak304d.map 193 194 102 176 106 42 273.764 68 maps/dao/lak304d.map 193 194 102 178 93 32 273.593 68 maps/dao/lak304d.map 193 194 105 175 72 20 272.007 68 maps/dao/lak304d.map 193 194 106 168 115 48 272.966 68 maps/dao/lak304d.map 193 194 107 177 80 13 275.936 68 maps/dao/lak304d.map 193 194 109 176 82 10 275.936 68 maps/dao/lak304d.map 193 194 109 181 88 30 274.007 68 maps/dao/lak304d.map 193 194 109 53 102 173 274.865 69 maps/dao/lak304d.map 193 194 102 182 108 47 277.35 69 maps/dao/lak304d.map 193 194 103 164 71 13 279.936 69 maps/dao/lak304d.map 193 194 103 168 113 42 276.451 69 maps/dao/lak304d.map 193 194 103 184 90 22 279.492 69 maps/dao/lak304d.map 193 194 104 166 113 56 279.551 69 maps/dao/lak304d.map 193 194 104 167 105 62 279.38 69 maps/dao/lak304d.map 193 194 104 174 116 52 279.279 69 maps/dao/lak304d.map 193 194 104 181 109 54 278.936 69 maps/dao/lak304d.map 193 194 105 172 115 45 276.865 69 maps/dao/lak304d.map 193 194 105 174 116 47 277.865 70 maps/dao/lak304d.map 193 194 100 166 116 42 281.622 70 maps/dao/lak304d.map 193 194 100 178 112 46 280.936 70 maps/dao/lak304d.map 193 194 102 168 87 9 282.693 70 maps/dao/lak304d.map 193 194 102 41 103 190 281.421 70 maps/dao/lak304d.map 193 194 103 186 89 20 283.078 70 maps/dao/lak304d.map 193 194 103 190 75 25 280.421 70 maps/dao/lak304d.map 193 194 103 46 113 181 282.764 70 maps/dao/lak304d.map 193 194 105 188 106 48 280.522 70 maps/dao/lak304d.map 193 194 106 177 65 14 281.321 70 maps/dao/lak304d.map 193 194 107 181 43 17 281.179 71 maps/dao/lak304d.map 193 194 100 181 118 48 287.35 71 maps/dao/lak304d.map 193 194 101 175 85 7 287.764 71 maps/dao/lak304d.map 193 194 102 173 121 46 285.865 71 maps/dao/lak304d.map 193 194 103 163 92 4 286.693 71 maps/dao/lak304d.map 193 194 103 170 88 4 287.936 71 maps/dao/lak304d.map 193 194 103 179 86 9 285.836 71 maps/dao/lak304d.map 193 194 103 183 116 52 286.35 71 maps/dao/lak304d.map 193 194 103 188 108 53 284.936 71 maps/dao/lak304d.map 193 194 105 173 61 12 285.492 71 maps/dao/lak304d.map 193 194 109 181 87 17 284.836 72 maps/dao/lak304d.map 193 194 101 182 118 53 288.593 72 maps/dao/lak304d.map 193 194 103 171 89 4 288.764 72 maps/dao/lak304d.map 193 194 103 178 123 44 289.764 72 maps/dao/lak304d.map 193 194 104 188 116 48 290.108 72 maps/dao/lak304d.map 193 194 105 189 113 41 291.421 72 maps/dao/lak304d.map 193 194 112 41 112 183 290.836 72 maps/dao/lak304d.map 193 194 114 183 89 17 291.492 72 maps/dao/lak304d.map 193 194 114 53 111 184 291.764 72 maps/dao/lak304d.map 193 194 115 46 111 183 290.764 72 maps/dao/lak304d.map 193 194 116 172 60 24 289.321 73 maps/dao/lak304d.map 193 194 100 171 92 4 293.007 73 maps/dao/lak304d.map 193 194 102 182 60 11 294.806 73 maps/dao/lak304d.map 193 194 102 190 90 16 292.492 73 maps/dao/lak304d.map 193 194 105 61 109 188 295.593 73 maps/dao/lak304d.map 193 194 107 188 117 53 293.593 73 maps/dao/lak304d.map 193 194 109 180 118 43 292.593 73 maps/dao/lak304d.map 193 194 116 182 114 47 294.764 73 maps/dao/lak304d.map 193 194 118 187 93 29 292.078 73 maps/dao/lak304d.map 193 194 119 47 109 188 295.593 73 maps/dao/lak304d.map 193 194 128 175 60 27 292.007 74 maps/dao/lak304d.map 193 194 101 178 55 13 297.149 74 maps/dao/lak304d.map 193 194 101 182 58 9 298.049 74 maps/dao/lak304d.map 193 194 103 185 60 9 298.22 74 maps/dao/lak304d.map 193 194 107 184 61 11 296.22 74 maps/dao/lak304d.map 193 194 109 163 62 28 296.836 74 maps/dao/lak304d.map 193 194 110 186 72 10 298.635 74 maps/dao/lak304d.map 193 194 110 192 118 48 299.179 74 maps/dao/lak304d.map 193 194 112 49 114 192 296.179 74 maps/dao/lak304d.map 193 194 114 161 66 33 298.25 74 maps/dao/lak304d.map 193 194 114 182 92 12 298.149 75 maps/dao/lak304d.map 193 194 100 176 78 2 300.593 75 maps/dao/lak304d.map 193 194 103 186 55 13 302.563 75 maps/dao/lak304d.map 193 194 106 63 114 179 301.764 75 maps/dao/lak304d.map 193 194 109 164 64 31 301.078 75 maps/dao/lak304d.map 193 194 111 192 116 42 300.078 75 maps/dao/lak304d.map 193 194 113 182 88 7 301.078 75 maps/dao/lak304d.map 193 194 116 182 87 9 301.078 75 maps/dao/lak304d.map 193 194 125 176 64 33 300.25 75 maps/dao/lak304d.map 193 194 173 39 67 38 303.635 75 maps/dao/lak304d.map 193 194 185 120 75 2 300.108 76 maps/dao/lak304d.map 193 194 109 181 79 1 304.836 76 maps/dao/lak304d.map 193 194 136 174 63 31 305.907 76 maps/dao/lak304d.map 193 194 61 9 110 190 304.877 76 maps/dao/lak304d.map 193 194 63 27 135 184 305.735 76 maps/dao/lak304d.map 193 194 64 32 184 131 305.735 76 maps/dao/lak304d.map 193 194 67 38 162 158 305.936 77 maps/dao/lak304d.map 193 194 106 186 58 21 308.22 77 maps/dao/lak304d.map 193 194 108 181 71 2 311.421 77 maps/dao/lak304d.map 193 194 108 185 59 20 308.049 77 maps/dao/lak304d.map 193 194 118 188 87 5 310.492 77 maps/dao/lak304d.map 193 194 135 175 67 35 310.149 77 maps/dao/lak304d.map 193 194 186 126 65 34 310.563 77 maps/dao/lak304d.map 193 194 55 12 116 182 310.806 ================================================ FILE: benchmark/scen/losttemple.map.scen ================================================ version 1.0 66 maps/wc3maps/losttemple.map 512 512 242 400 121 216 265.58 60 maps/wc3maps/losttemple.map 512 512 360 249 145 312 241.10 34 maps/wc3maps/losttemple.map 512 512 108 204 222 264 138.85 77 maps/wc3maps/losttemple.map 512 512 358 110 137 303 309.97 70 maps/wc3maps/losttemple.map 512 512 402 269 188 370 282.06 54 maps/wc3maps/losttemple.map 512 512 279 218 279 422 218.67 45 maps/wc3maps/losttemple.map 512 512 327 241 287 77 183.50 45 maps/wc3maps/losttemple.map 512 512 210 208 175 366 183.04 17 maps/wc3maps/losttemple.map 512 512 74 264 90 328 70.63 61 maps/wc3maps/losttemple.map 512 512 414 323 234 408 244.66 53 maps/wc3maps/losttemple.map 512 512 396 251 228 142 213.15 28 maps/wc3maps/losttemple.map 512 512 152 317 196 231 112.81 97 maps/wc3maps/losttemple.map 512 512 111 377 400 180 388.42 57 maps/wc3maps/losttemple.map 512 512 208 237 401 146 230.69 31 maps/wc3maps/losttemple.map 512 512 202 282 112 225 127.81 44 maps/wc3maps/losttemple.map 512 512 92 257 214 366 176.52 21 maps/wc3maps/losttemple.map 512 512 190 175 265 149 85.77 96 maps/wc3maps/losttemple.map 512 512 424 103 178 380 385.93 58 maps/wc3maps/losttemple.map 512 512 203 125 403 152 235.55 71 maps/wc3maps/losttemple.map 512 512 111 243 301 391 286.01 21 maps/wc3maps/losttemple.map 512 512 186 289 215 364 87.01 88 maps/wc3maps/losttemple.map 512 512 281 413 231 81 352.71 90 maps/wc3maps/losttemple.map 512 512 392 119 83 215 361.79 20 maps/wc3maps/losttemple.map 512 512 238 431 304 391 82.57 27 maps/wc3maps/losttemple.map 512 512 402 201 335 280 109.68 30 maps/wc3maps/losttemple.map 512 512 405 291 303 239 123.54 104 maps/wc3maps/losttemple.map 512 512 144 336 438 92 417.33 54 maps/wc3maps/losttemple.map 512 512 398 290 302 416 217.14 13 maps/wc3maps/losttemple.map 512 512 140 361 152 312 53.97 70 maps/wc3maps/losttemple.map 512 512 378 145 197 321 280.26 72 maps/wc3maps/losttemple.map 512 512 261 349 343 98 288.28 14 maps/wc3maps/losttemple.map 512 512 179 247 158 297 58.70 33 maps/wc3maps/losttemple.map 512 512 158 331 58 252 132.72 33 maps/wc3maps/losttemple.map 512 512 301 251 387 179 132.23 57 maps/wc3maps/losttemple.map 512 512 427 196 439 128 230.74 46 maps/wc3maps/losttemple.map 512 512 87 304 269 311 186.90 44 maps/wc3maps/losttemple.map 512 512 142 354 176 189 179.08 70 maps/wc3maps/losttemple.map 512 512 205 161 263 416 281.95 26 maps/wc3maps/losttemple.map 512 512 350 290 273 297 107.78 91 maps/wc3maps/losttemple.map 512 512 419 211 121 372 364.69 4 maps/wc3maps/losttemple.map 512 512 390 443 377 432 17.56 62 maps/wc3maps/losttemple.map 512 512 210 380 388 278 248.53 93 maps/wc3maps/losttemple.map 512 512 313 176 100 428 372.45 3 maps/wc3maps/losttemple.map 512 512 76 430 77 415 15.41 54 maps/wc3maps/losttemple.map 512 512 135 258 266 290 219.81 34 maps/wc3maps/losttemple.map 512 512 304 301 414 255 139.58 14 maps/wc3maps/losttemple.map 512 512 287 399 288 351 57.49 15 maps/wc3maps/losttemple.map 512 512 142 126 89 145 63.36 35 maps/wc3maps/losttemple.map 512 512 189 109 210 202 141.36 36 maps/wc3maps/losttemple.map 512 512 294 429 232 309 145.68 46 maps/wc3maps/losttemple.map 512 512 111 216 253 324 187.32 37 maps/wc3maps/losttemple.map 512 512 280 293 230 163 150.71 65 maps/wc3maps/losttemple.map 512 512 404 253 200 117 260.33 86 maps/wc3maps/losttemple.map 512 512 393 282 67 229 347.95 58 maps/wc3maps/losttemple.map 512 512 75 396 122 216 232.92 35 maps/wc3maps/losttemple.map 512 512 326 154 200 188 140.08 46 maps/wc3maps/losttemple.map 512 512 327 353 156 316 186.33 95 maps/wc3maps/losttemple.map 512 512 73 425 225 108 382.45 30 maps/wc3maps/losttemple.map 512 512 218 411 146 350 122.50 68 maps/wc3maps/losttemple.map 512 512 339 71 136 238 272.76 34 maps/wc3maps/losttemple.map 512 512 175 140 176 248 137.95 58 maps/wc3maps/losttemple.map 512 512 424 92 259 211 235.38 100 maps/wc3maps/losttemple.map 512 512 76 387 290 106 403.03 52 maps/wc3maps/losttemple.map 512 512 139 338 298 235 208.11 48 maps/wc3maps/losttemple.map 512 512 269 291 115 271 193.50 69 maps/wc3maps/losttemple.map 512 512 273 179 206 421 276.82 43 maps/wc3maps/losttemple.map 512 512 221 249 320 122 175.87 19 maps/wc3maps/losttemple.map 512 512 193 304 231 269 78.07 67 maps/wc3maps/losttemple.map 512 512 104 308 367 298 271.28 56 maps/wc3maps/losttemple.map 512 512 349 195 278 389 225.75 59 maps/wc3maps/losttemple.map 512 512 353 134 241 305 238.14 9 maps/wc3maps/losttemple.map 512 512 277 375 294 349 39.49 35 maps/wc3maps/losttemple.map 512 512 312 335 194 387 141.30 41 maps/wc3maps/losttemple.map 512 512 317 340 338 182 166.70 55 maps/wc3maps/losttemple.map 512 512 228 272 86 402 223.91 3 maps/wc3maps/losttemple.map 512 512 435 307 428 317 12.90 31 maps/wc3maps/losttemple.map 512 512 255 266 361 218 125.88 49 maps/wc3maps/losttemple.map 512 512 81 203 192 349 196.66 76 maps/wc3maps/losttemple.map 512 512 366 77 266 335 307.42 20 maps/wc3maps/losttemple.map 512 512 243 127 275 194 80.25 36 maps/wc3maps/losttemple.map 512 512 303 395 189 331 144.02 43 maps/wc3maps/losttemple.map 512 512 144 216 76 344 172.57 119 maps/wc3maps/losttemple.map 512 512 411 149 70 437 476.70 7 maps/wc3maps/losttemple.map 512 512 334 256 349 280 30.21 38 maps/wc3maps/losttemple.map 512 512 146 389 77 298 152.33 65 maps/wc3maps/losttemple.map 512 512 437 246 234 121 261.22 37 maps/wc3maps/losttemple.map 512 512 269 223 162 305 150.92 6 maps/wc3maps/losttemple.map 512 512 71 299 87 319 26.63 41 maps/wc3maps/losttemple.map 512 512 135 397 82 265 166.10 48 maps/wc3maps/losttemple.map 512 512 183 389 141 212 194.40 51 maps/wc3maps/losttemple.map 512 512 402 315 226 239 207.48 36 maps/wc3maps/losttemple.map 512 512 358 111 371 223 147.37 66 maps/wc3maps/losttemple.map 512 512 376 155 136 221 267.34 11 maps/wc3maps/losttemple.map 512 512 98 317 136 299 46.04 69 maps/wc3maps/losttemple.map 512 512 124 357 355 243 278.22 45 maps/wc3maps/losttemple.map 512 512 207 191 68 274 180.99 36 maps/wc3maps/losttemple.map 512 512 398 143 386 249 145.52 31 maps/wc3maps/losttemple.map 512 512 341 190 227 219 127.67 57 maps/wc3maps/losttemple.map 512 512 245 309 346 131 230.04 18 maps/wc3maps/losttemple.map 512 512 244 319 184 297 73.25 39 maps/wc3maps/losttemple.map 512 512 429 300 320 370 158.50 9 maps/wc3maps/losttemple.map 512 512 352 420 383 439 38.87 40 maps/wc3maps/losttemple.map 512 512 272 116 385 174 160.20 60 maps/wc3maps/losttemple.map 512 512 295 418 321 204 241.34 99 maps/wc3maps/losttemple.map 512 512 174 445 285 102 397.18 59 maps/wc3maps/losttemple.map 512 512 243 411 420 309 237.11 35 maps/wc3maps/losttemple.map 512 512 344 128 221 170 140.40 47 maps/wc3maps/losttemple.map 512 512 270 121 408 136 188.92 65 maps/wc3maps/losttemple.map 512 512 92 311 208 125 260.41 13 maps/wc3maps/losttemple.map 512 512 232 104 252 147 53.04 43 maps/wc3maps/losttemple.map 512 512 404 118 286 101 175.51 89 maps/wc3maps/losttemple.map 512 512 197 432 240 93 356.81 83 maps/wc3maps/losttemple.map 512 512 130 306 338 80 333.83 47 maps/wc3maps/losttemple.map 512 512 434 215 261 257 190.40 45 maps/wc3maps/losttemple.map 512 512 106 389 258 363 182.57 102 maps/wc3maps/losttemple.map 512 512 123 387 406 130 408.20 37 maps/wc3maps/losttemple.map 512 512 342 93 200 117 151.94 70 maps/wc3maps/losttemple.map 512 512 179 246 426 159 283.04 18 maps/wc3maps/losttemple.map 512 512 387 389 399 436 72.21 61 maps/wc3maps/losttemple.map 512 512 334 353 252 146 246.62 92 maps/wc3maps/losttemple.map 512 512 421 162 122 314 370.16 72 maps/wc3maps/losttemple.map 512 512 83 439 88 197 290.46 24 maps/wc3maps/losttemple.map 512 512 408 218 350 180 97.94 90 maps/wc3maps/losttemple.map 512 512 86 333 426 318 362.78 20 maps/wc3maps/losttemple.map 512 512 431 235 426 164 82.18 55 maps/wc3maps/losttemple.map 512 512 210 160 306 334 221.38 55 maps/wc3maps/losttemple.map 512 512 275 186 131 328 220.78 53 maps/wc3maps/losttemple.map 512 512 309 271 187 392 215.15 51 maps/wc3maps/losttemple.map 512 512 321 245 424 83 205.84 52 maps/wc3maps/losttemple.map 512 512 338 131 177 252 211.12 49 maps/wc3maps/losttemple.map 512 512 263 86 417 154 199.54 19 maps/wc3maps/losttemple.map 512 512 265 291 287 356 77.18 25 maps/wc3maps/losttemple.map 512 512 281 359 215 435 103.92 75 maps/wc3maps/losttemple.map 512 512 280 366 336 91 301.51 53 maps/wc3maps/losttemple.map 512 512 307 194 206 338 215.15 39 maps/wc3maps/losttemple.map 512 512 273 322 278 187 159.80 60 maps/wc3maps/losttemple.map 512 512 89 293 172 140 242.84 46 maps/wc3maps/losttemple.map 512 512 193 328 355 270 186.02 43 maps/wc3maps/losttemple.map 512 512 316 239 291 118 175.11 84 maps/wc3maps/losttemple.map 512 512 224 86 337 374 338.32 38 maps/wc3maps/losttemple.map 512 512 99 377 88 335 152.40 43 maps/wc3maps/losttemple.map 512 512 176 430 106 412 173.68 31 maps/wc3maps/losttemple.map 512 512 292 213 366 298 124.44 57 maps/wc3maps/losttemple.map 512 512 278 386 177 213 228.49 13 maps/wc3maps/losttemple.map 512 512 268 265 257 310 53.07 42 maps/wc3maps/losttemple.map 512 512 277 364 135 300 168.51 9 maps/wc3maps/losttemple.map 512 512 319 109 352 111 39.49 52 maps/wc3maps/losttemple.map 512 512 337 128 336 327 210.18 37 maps/wc3maps/losttemple.map 512 512 348 250 236 165 148.38 52 maps/wc3maps/losttemple.map 512 512 446 110 266 175 211.07 44 maps/wc3maps/losttemple.map 512 512 156 284 321 318 179.91 26 maps/wc3maps/losttemple.map 512 512 321 330 229 312 104.14 21 maps/wc3maps/losttemple.map 512 512 207 296 287 307 85.38 24 maps/wc3maps/losttemple.map 512 512 151 171 167 83 97.94 56 maps/wc3maps/losttemple.map 512 512 275 126 98 202 225.88 3 maps/wc3maps/losttemple.map 512 512 449 217 452 204 14.24 50 maps/wc3maps/losttemple.map 512 512 405 242 206 247 201.07 50 maps/wc3maps/losttemple.map 512 512 212 155 355 290 201.26 64 maps/wc3maps/losttemple.map 512 512 137 253 199 132 256.38 22 maps/wc3maps/losttemple.map 512 512 87 321 168 336 88.87 87 maps/wc3maps/losttemple.map 512 512 289 98 280 409 351.10 67 maps/wc3maps/losttemple.map 512 512 364 273 122 328 268.92 36 maps/wc3maps/losttemple.map 512 512 262 330 256 187 145.49 79 maps/wc3maps/losttemple.map 512 512 440 196 152 272 319.48 59 maps/wc3maps/losttemple.map 512 512 173 151 112 322 237.38 100 maps/wc3maps/losttemple.map 512 512 335 90 121 387 400.29 50 maps/wc3maps/losttemple.map 512 512 117 234 190 406 203.99 28 maps/wc3maps/losttemple.map 512 512 225 334 142 377 114.57 50 maps/wc3maps/losttemple.map 512 512 128 229 267 94 201.95 68 maps/wc3maps/losttemple.map 512 512 348 67 141 226 272.86 50 maps/wc3maps/losttemple.map 512 512 92 222 283 242 200.94 58 maps/wc3maps/losttemple.map 512 512 85 301 239 398 232.52 59 maps/wc3maps/losttemple.map 512 512 261 384 76 330 236.88 73 maps/wc3maps/losttemple.map 512 512 393 248 115 212 293.74 103 maps/wc3maps/losttemple.map 512 512 63 433 242 94 413.73 43 maps/wc3maps/losttemple.map 512 512 118 392 163 454 175.61 53 maps/wc3maps/losttemple.map 512 512 285 350 182 198 212.46 70 maps/wc3maps/losttemple.map 512 512 378 280 121 331 283.44 29 maps/wc3maps/losttemple.map 512 512 427 315 353 231 116.99 22 maps/wc3maps/losttemple.map 512 512 359 340 341 421 88.46 88 maps/wc3maps/losttemple.map 512 512 272 113 281 436 355.30 20 maps/wc3maps/losttemple.map 512 512 196 331 198 413 82.83 30 maps/wc3maps/losttemple.map 512 512 363 167 333 278 123.43 19 maps/wc3maps/losttemple.map 512 512 262 145 280 98 79.43 57 maps/wc3maps/losttemple.map 512 512 321 239 198 409 230.46 86 maps/wc3maps/losttemple.map 512 512 405 277 81 243 345.05 63 maps/wc3maps/losttemple.map 512 512 399 155 163 202 255.47 75 maps/wc3maps/losttemple.map 512 512 88 205 346 306 301.49 74 maps/wc3maps/losttemple.map 512 512 347 259 81 339 299.14 47 maps/wc3maps/losttemple.map 512 512 110 267 109 424 191.58 55 maps/wc3maps/losttemple.map 512 512 231 153 132 331 221.94 30 maps/wc3maps/losttemple.map 512 512 241 351 207 244 121.08 50 maps/wc3maps/losttemple.map 512 512 412 140 247 212 201.85 70 maps/wc3maps/losttemple.map 512 512 326 373 347 105 282.50 54 maps/wc3maps/losttemple.map 512 512 411 150 227 225 217.99 51 maps/wc3maps/losttemple.map 512 512 403 316 393 163 206.28 36 maps/wc3maps/losttemple.map 512 512 438 141 313 168 146.12 56 maps/wc3maps/losttemple.map 512 512 281 382 159 214 225.56 77 maps/wc3maps/losttemple.map 512 512 164 265 441 186 309.72 65 maps/wc3maps/losttemple.map 512 512 403 293 436 92 263.89 83 maps/wc3maps/losttemple.map 512 512 74 447 239 187 334.79 76 maps/wc3maps/losttemple.map 512 512 64 436 255 229 306.03 81 maps/wc3maps/losttemple.map 512 512 196 376 293 109 324.17 43 maps/wc3maps/losttemple.map 512 512 137 268 145 379 174.44 8 maps/wc3maps/losttemple.map 512 512 255 104 283 121 35.04 65 maps/wc3maps/losttemple.map 512 512 329 140 201 332 260.84 20 maps/wc3maps/losttemple.map 512 512 237 350 317 352 80.83 69 maps/wc3maps/losttemple.map 512 512 347 282 100 345 278.41 63 maps/wc3maps/losttemple.map 512 512 419 319 193 250 254.58 14 maps/wc3maps/losttemple.map 512 512 53 347 71 295 59.46 42 maps/wc3maps/losttemple.map 512 512 273 183 153 289 168.59 27 maps/wc3maps/losttemple.map 512 512 164 326 105 411 109.44 49 maps/wc3maps/losttemple.map 512 512 415 104 286 93 197.38 110 maps/wc3maps/losttemple.map 512 512 89 422 430 182 441.00 20 maps/wc3maps/losttemple.map 512 512 133 354 73 395 82.84 67 maps/wc3maps/losttemple.map 512 512 210 338 190 112 268.95 24 maps/wc3maps/losttemple.map 512 512 354 95 376 159 98.28 73 maps/wc3maps/losttemple.map 512 512 176 328 440 253 295.07 22 maps/wc3maps/losttemple.map 512 512 181 200 166 283 89.21 77 maps/wc3maps/losttemple.map 512 512 128 383 367 214 309.59 37 maps/wc3maps/losttemple.map 512 512 149 348 271 278 150.99 36 maps/wc3maps/losttemple.map 512 512 139 358 181 237 144.25 35 maps/wc3maps/losttemple.map 512 512 171 208 89 283 143.23 85 maps/wc3maps/losttemple.map 512 512 145 353 292 70 343.89 39 maps/wc3maps/losttemple.map 512 512 293 274 345 156 156.27 61 maps/wc3maps/losttemple.map 512 512 298 319 180 138 245.69 47 maps/wc3maps/losttemple.map 512 512 323 215 162 251 188.46 41 maps/wc3maps/losttemple.map 512 512 416 269 280 216 166.15 34 maps/wc3maps/losttemple.map 512 512 341 189 222 230 139.74 30 maps/wc3maps/losttemple.map 512 512 253 228 144 264 123.91 9 maps/wc3maps/losttemple.map 512 512 84 258 106 234 39.56 25 maps/wc3maps/losttemple.map 512 512 230 87 269 174 103.15 55 maps/wc3maps/losttemple.map 512 512 206 262 406 314 221.54 47 maps/wc3maps/losttemple.map 512 512 80 299 251 277 190.11 18 maps/wc3maps/losttemple.map 512 512 426 379 365 409 74.01 18 maps/wc3maps/losttemple.map 512 512 344 305 337 235 72.90 46 maps/wc3maps/losttemple.map 512 512 232 287 76 278 187.43 61 maps/wc3maps/losttemple.map 512 512 424 75 323 63 247.49 24 maps/wc3maps/losttemple.map 512 512 281 231 201 186 98.64 11 maps/wc3maps/losttemple.map 512 512 293 250 265 214 47.60 18 maps/wc3maps/losttemple.map 512 512 145 283 94 310 73.90 35 maps/wc3maps/losttemple.map 512 512 355 301 282 198 142.61 78 maps/wc3maps/losttemple.map 512 512 68 253 336 142 313.98 50 maps/wc3maps/losttemple.map 512 512 176 367 214 188 202.30 30 maps/wc3maps/losttemple.map 512 512 317 200 419 250 122.71 40 maps/wc3maps/losttemple.map 512 512 271 148 280 291 160.77 31 maps/wc3maps/losttemple.map 512 512 236 256 306 193 126.30 25 maps/wc3maps/losttemple.map 512 512 317 342 256 275 101.64 57 maps/wc3maps/losttemple.map 512 512 385 309 181 363 231.34 4 maps/wc3maps/losttemple.map 512 512 229 111 217 101 16.14 40 maps/wc3maps/losttemple.map 512 512 248 296 191 183 160.63 20 maps/wc3maps/losttemple.map 512 512 141 237 78 189 82.88 53 maps/wc3maps/losttemple.map 512 512 74 203 260 210 213.75 50 maps/wc3maps/losttemple.map 512 512 255 358 107 261 203.99 31 maps/wc3maps/losttemple.map 512 512 234 160 157 254 125.89 53 maps/wc3maps/losttemple.map 512 512 273 402 418 310 214.10 30 maps/wc3maps/losttemple.map 512 512 94 366 129 304 120.54 43 maps/wc3maps/losttemple.map 512 512 95 292 83 402 175.48 95 maps/wc3maps/losttemple.map 512 512 150 378 352 121 381.90 84 maps/wc3maps/losttemple.map 512 512 170 317 349 70 336.62 40 maps/wc3maps/losttemple.map 512 512 208 323 88 224 161.59 92 maps/wc3maps/losttemple.map 512 512 404 242 99 400 370.45 40 maps/wc3maps/losttemple.map 512 512 339 289 208 367 163.31 53 maps/wc3maps/losttemple.map 512 512 313 102 194 252 215.05 18 maps/wc3maps/losttemple.map 512 512 48 85 102 54 74.46 46 maps/wc3maps/losttemple.map 512 512 314 188 174 272 187.10 74 maps/wc3maps/losttemple.map 512 512 416 291 224 89 296.17 42 maps/wc3maps/losttemple.map 512 512 253 309 124 213 169.94 88 maps/wc3maps/losttemple.map 512 512 132 333 390 148 352.20 89 maps/wc3maps/losttemple.map 512 512 247 427 286 118 357.40 15 maps/wc3maps/losttemple.map 512 512 160 126 187 76 61.18 34 maps/wc3maps/losttemple.map 512 512 360 159 281 225 136.64 67 maps/wc3maps/losttemple.map 512 512 109 320 353 254 271.34 15 maps/wc3maps/losttemple.map 512 512 407 395 373 432 61.77 48 maps/wc3maps/losttemple.map 512 512 396 246 234 172 192.65 49 maps/wc3maps/losttemple.map 512 512 69 397 75 321 197.05 93 maps/wc3maps/losttemple.map 512 512 186 114 222 376 373.42 60 maps/wc3maps/losttemple.map 512 512 269 222 428 94 243.05 57 maps/wc3maps/losttemple.map 512 512 425 117 253 120 230.38 92 maps/wc3maps/losttemple.map 512 512 411 312 67 262 369.68 45 maps/wc3maps/losttemple.map 512 512 438 69 326 162 183.79 47 maps/wc3maps/losttemple.map 512 512 425 242 236 241 191.07 56 maps/wc3maps/losttemple.map 512 512 254 154 61 233 225.72 71 maps/wc3maps/losttemple.map 512 512 426 304 187 400 284.87 18 maps/wc3maps/losttemple.map 512 512 119 301 190 295 75.97 49 maps/wc3maps/losttemple.map 512 512 387 175 422 306 197.87 83 maps/wc3maps/losttemple.map 512 512 339 88 171 336 333.89 45 maps/wc3maps/losttemple.map 512 512 331 245 185 332 182.04 9 maps/wc3maps/losttemple.map 512 512 204 353 167 346 39.90 31 maps/wc3maps/losttemple.map 512 512 299 419 311 380 126.84 57 maps/wc3maps/losttemple.map 512 512 426 219 293 98 228.71 68 maps/wc3maps/losttemple.map 512 512 444 111 299 315 272.85 44 maps/wc3maps/losttemple.map 512 512 148 257 255 365 178.42 62 maps/wc3maps/losttemple.map 512 512 159 243 383 179 251.34 21 maps/wc3maps/losttemple.map 512 512 326 290 312 371 86.80 64 maps/wc3maps/losttemple.map 512 512 215 93 361 291 258.48 71 maps/wc3maps/losttemple.map 512 512 79 218 344 272 287.37 56 maps/wc3maps/losttemple.map 512 512 112 300 312 248 224.85 94 maps/wc3maps/losttemple.map 512 512 137 391 327 105 379.35 59 maps/wc3maps/losttemple.map 512 512 401 279 261 430 237.11 80 maps/wc3maps/losttemple.map 512 512 218 137 140 399 320.01 23 maps/wc3maps/losttemple.map 512 512 413 220 346 188 92.46 31 maps/wc3maps/losttemple.map 512 512 308 403 229 450 127.21 54 maps/wc3maps/losttemple.map 512 512 86 257 263 191 216.78 92 maps/wc3maps/losttemple.map 512 512 338 77 72 287 370.56 47 maps/wc3maps/losttemple.map 512 512 271 220 369 83 191.98 82 maps/wc3maps/losttemple.map 512 512 66 333 264 116 328.89 87 maps/wc3maps/losttemple.map 512 512 353 96 64 241 349.06 41 maps/wc3maps/losttemple.map 512 512 133 365 120 212 167.50 58 maps/wc3maps/losttemple.map 512 512 104 396 309 366 232.20 64 maps/wc3maps/losttemple.map 512 512 171 286 308 122 256.62 51 maps/wc3maps/losttemple.map 512 512 267 124 414 122 204.97 22 maps/wc3maps/losttemple.map 512 512 312 164 297 119 91.70 10 maps/wc3maps/losttemple.map 512 512 256 306 216 303 42.07 22 maps/wc3maps/losttemple.map 512 512 317 205 265 218 89.87 30 maps/wc3maps/losttemple.map 512 512 294 417 297 308 121.01 74 maps/wc3maps/losttemple.map 512 512 340 375 105 262 296.45 73 maps/wc3maps/losttemple.map 512 512 230 135 61 332 292.78 93 maps/wc3maps/losttemple.map 512 512 327 117 174 423 375.48 46 maps/wc3maps/losttemple.map 512 512 133 333 304 361 184.94 22 maps/wc3maps/losttemple.map 512 512 154 259 115 332 89.74 85 maps/wc3maps/losttemple.map 512 512 305 180 89 395 341.96 68 maps/wc3maps/losttemple.map 512 512 374 292 139 376 272.72 63 maps/wc3maps/losttemple.map 512 512 197 330 233 101 253.67 59 maps/wc3maps/losttemple.map 512 512 204 352 415 315 236.27 91 maps/wc3maps/losttemple.map 512 512 109 335 351 85 367.23 98 maps/wc3maps/losttemple.map 512 512 436 320 62 328 395.54 18 maps/wc3maps/losttemple.map 512 512 131 348 196 325 74.53 18 maps/wc3maps/losttemple.map 512 512 281 193 250 235 74.80 25 maps/wc3maps/losttemple.map 512 512 404 267 340 281 100.81 54 maps/wc3maps/losttemple.map 512 512 230 435 329 258 218.01 25 maps/wc3maps/losttemple.map 512 512 180 236 159 323 100.38 24 maps/wc3maps/losttemple.map 512 512 272 370 204 434 99.78 71 maps/wc3maps/losttemple.map 512 512 67 257 315 170 284.04 28 maps/wc3maps/losttemple.map 512 512 252 314 158 264 114.71 18 maps/wc3maps/losttemple.map 512 512 360 105 301 126 74.73 65 maps/wc3maps/losttemple.map 512 512 375 293 137 237 261.20 94 maps/wc3maps/losttemple.map 512 512 171 428 233 80 376.99 14 maps/wc3maps/losttemple.map 512 512 152 255 102 231 59.94 41 maps/wc3maps/losttemple.map 512 512 392 299 235 292 167.36 78 maps/wc3maps/losttemple.map 512 512 265 109 182 390 315.97 107 maps/wc3maps/losttemple.map 512 512 441 129 182 430 431.13 62 maps/wc3maps/losttemple.map 512 512 104 337 319 256 248.55 93 maps/wc3maps/losttemple.map 512 512 418 221 118 271 374.49 65 maps/wc3maps/losttemple.map 512 512 193 418 195 177 261.71 19 maps/wc3maps/losttemple.map 512 512 291 168 291 221 77.33 71 maps/wc3maps/losttemple.map 512 512 143 266 388 169 285.18 26 maps/wc3maps/losttemple.map 512 512 315 286 286 377 107.15 67 maps/wc3maps/losttemple.map 512 512 411 113 248 312 271.79 32 maps/wc3maps/losttemple.map 512 512 259 285 154 344 129.44 35 maps/wc3maps/losttemple.map 512 512 276 188 238 306 143.70 74 maps/wc3maps/losttemple.map 512 512 400 286 164 423 298.02 36 maps/wc3maps/losttemple.map 512 512 268 365 243 228 147.36 4 maps/wc3maps/losttemple.map 512 512 359 302 347 287 19.97 31 maps/wc3maps/losttemple.map 512 512 226 296 230 196 125.80 48 maps/wc3maps/losttemple.map 512 512 342 374 316 197 192.25 6 maps/wc3maps/losttemple.map 512 512 240 290 238 264 26.83 66 maps/wc3maps/losttemple.map 512 512 377 287 193 107 265.59 70 maps/wc3maps/losttemple.map 512 512 72 276 332 288 282.37 94 maps/wc3maps/losttemple.map 512 512 68 322 341 106 377.70 73 maps/wc3maps/losttemple.map 512 512 211 433 394 231 294.20 67 maps/wc3maps/losttemple.map 512 512 121 251 317 336 271.85 64 maps/wc3maps/losttemple.map 512 512 104 283 280 421 257.76 38 maps/wc3maps/losttemple.map 512 512 290 110 245 230 154.46 43 maps/wc3maps/losttemple.map 512 512 207 255 324 135 175.49 51 maps/wc3maps/losttemple.map 512 512 170 368 250 198 204.31 67 maps/wc3maps/losttemple.map 512 512 80 226 90 443 269.39 72 maps/wc3maps/losttemple.map 512 512 75 208 347 249 288.98 22 maps/wc3maps/losttemple.map 512 512 244 405 286 334 89.57 73 maps/wc3maps/losttemple.map 512 512 100 216 275 423 294.13 42 maps/wc3maps/losttemple.map 512 512 294 90 353 228 168.88 61 maps/wc3maps/losttemple.map 512 512 438 113 283 283 244.16 16 maps/wc3maps/losttemple.map 512 512 82 228 149 226 67.83 28 maps/wc3maps/losttemple.map 512 512 431 209 325 226 113.04 33 maps/wc3maps/losttemple.map 512 512 109 220 230 226 135.08 63 maps/wc3maps/losttemple.map 512 512 66 232 89 429 255.61 48 maps/wc3maps/losttemple.map 512 512 359 239 293 73 193.34 48 maps/wc3maps/losttemple.map 512 512 274 169 209 336 195.10 4 maps/wc3maps/losttemple.map 512 512 416 103 428 117 18.97 71 maps/wc3maps/losttemple.map 512 512 224 424 438 328 285.61 37 maps/wc3maps/losttemple.map 512 512 102 319 159 209 149.43 57 maps/wc3maps/losttemple.map 512 512 279 265 440 135 231.25 48 maps/wc3maps/losttemple.map 512 512 202 151 184 327 195.88 73 maps/wc3maps/losttemple.map 512 512 100 215 375 229 293.23 45 maps/wc3maps/losttemple.map 512 512 370 176 301 324 180.10 56 maps/wc3maps/losttemple.map 512 512 197 156 370 280 224.36 68 maps/wc3maps/losttemple.map 512 512 191 316 341 145 275.79 27 maps/wc3maps/losttemple.map 512 512 279 211 183 199 110.08 56 maps/wc3maps/losttemple.map 512 512 257 240 184 437 227.24 19 maps/wc3maps/losttemple.map 512 512 251 281 199 337 78.71 68 maps/wc3maps/losttemple.map 512 512 290 365 140 271 273.42 75 maps/wc3maps/losttemple.map 512 512 321 158 122 343 302.72 43 maps/wc3maps/losttemple.map 512 512 169 429 283 315 172.94 115 maps/wc3maps/losttemple.map 512 512 368 74 109 414 461.93 77 maps/wc3maps/losttemple.map 512 512 253 315 440 89 308.73 23 maps/wc3maps/losttemple.map 512 512 414 231 330 251 92.28 38 maps/wc3maps/losttemple.map 512 512 442 280 331 189 152.79 114 maps/wc3maps/losttemple.map 512 512 138 362 446 72 458.00 85 maps/wc3maps/losttemple.map 512 512 207 398 407 166 343.10 97 maps/wc3maps/losttemple.map 512 512 421 83 104 226 390.88 80 maps/wc3maps/losttemple.map 512 512 275 422 259 121 322.50 11 maps/wc3maps/losttemple.map 512 512 183 430 181 383 47.83 33 maps/wc3maps/losttemple.map 512 512 266 170 346 82 134.61 51 maps/wc3maps/losttemple.map 512 512 114 330 290 262 204.17 19 maps/wc3maps/losttemple.map 512 512 123 213 83 272 79.67 61 maps/wc3maps/losttemple.map 512 512 147 383 262 211 246.66 105 maps/wc3maps/losttemple.map 512 512 402 251 75 447 421.84 63 maps/wc3maps/losttemple.map 512 512 370 165 290 379 254.59 13 maps/wc3maps/losttemple.map 512 512 243 87 284 122 55.50 78 maps/wc3maps/losttemple.map 512 512 225 367 389 127 313.20 21 maps/wc3maps/losttemple.map 512 512 83 269 142 237 86.56 77 maps/wc3maps/losttemple.map 512 512 215 107 262 395 308.30 3 maps/wc3maps/losttemple.map 512 512 207 254 215 245 12.31 17 maps/wc3maps/losttemple.map 512 512 355 216 416 202 70.94 33 maps/wc3maps/losttemple.map 512 512 346 271 283 379 135.75 45 maps/wc3maps/losttemple.map 512 512 229 329 394 286 182.81 46 maps/wc3maps/losttemple.map 512 512 229 425 104 385 187.89 35 maps/wc3maps/losttemple.map 512 512 416 298 333 195 143.24 76 maps/wc3maps/losttemple.map 512 512 218 309 427 116 305.35 19 maps/wc3maps/losttemple.map 512 512 316 361 334 290 78.46 58 maps/wc3maps/losttemple.map 512 512 180 298 196 120 232.55 19 maps/wc3maps/losttemple.map 512 512 235 176 244 250 77.73 39 maps/wc3maps/losttemple.map 512 512 326 202 433 87 159.91 75 maps/wc3maps/losttemple.map 512 512 214 195 211 382 301.10 85 maps/wc3maps/losttemple.map 512 512 376 129 239 412 341.40 55 maps/wc3maps/losttemple.map 512 512 234 87 108 199 220.35 74 maps/wc3maps/losttemple.map 512 512 183 211 426 293 296.02 61 maps/wc3maps/losttemple.map 512 512 371 77 184 200 244.39 85 maps/wc3maps/losttemple.map 512 512 276 387 312 77 341.48 29 maps/wc3maps/losttemple.map 512 512 201 184 217 262 119.94 97 maps/wc3maps/losttemple.map 512 512 411 240 138 264 390.18 50 maps/wc3maps/losttemple.map 512 512 217 270 224 80 203.67 48 maps/wc3maps/losttemple.map 512 512 147 341 312 288 192.23 56 maps/wc3maps/losttemple.map 512 512 68 444 113 268 227.98 50 maps/wc3maps/losttemple.map 512 512 377 244 175 244 202.83 11 maps/wc3maps/losttemple.map 512 512 261 160 246 120 46.21 55 maps/wc3maps/losttemple.map 512 512 272 208 77 257 221.54 24 maps/wc3maps/losttemple.map 512 512 317 154 348 238 96.84 31 maps/wc3maps/losttemple.map 512 512 145 275 251 225 126.71 88 maps/wc3maps/losttemple.map 512 512 178 418 239 90 353.27 95 maps/wc3maps/losttemple.map 512 512 281 122 152 433 383.42 7 maps/wc3maps/losttemple.map 512 512 240 109 262 88 30.70 15 maps/wc3maps/losttemple.map 512 512 277 284 290 325 63.50 53 maps/wc3maps/losttemple.map 512 512 416 306 214 288 213.60 6 maps/wc3maps/losttemple.map 512 512 396 165 412 144 27.63 72 maps/wc3maps/losttemple.map 512 512 335 370 329 93 288.36 53 maps/wc3maps/losttemple.map 512 512 179 370 246 183 215.92 57 maps/wc3maps/losttemple.map 512 512 111 251 191 442 230.14 78 maps/wc3maps/losttemple.map 512 512 318 165 109 360 313.79 28 maps/wc3maps/losttemple.map 512 512 309 161 216 132 113.30 15 maps/wc3maps/losttemple.map 512 512 121 86 70 64 60.11 12 maps/wc3maps/losttemple.map 512 512 301 261 321 285 48.38 11 maps/wc3maps/losttemple.map 512 512 158 144 144 103 46.80 42 maps/wc3maps/losttemple.map 512 512 244 174 234 339 169.14 66 maps/wc3maps/losttemple.map 512 512 317 234 154 416 265.86 32 maps/wc3maps/losttemple.map 512 512 300 215 334 323 131.74 52 maps/wc3maps/losttemple.map 512 512 163 443 81 299 211.44 61 maps/wc3maps/losttemple.map 512 512 167 315 266 110 247.76 74 maps/wc3maps/losttemple.map 512 512 139 357 334 183 296.95 42 maps/wc3maps/losttemple.map 512 512 414 144 407 219 169.58 64 maps/wc3maps/losttemple.map 512 512 313 395 166 215 256.71 63 maps/wc3maps/losttemple.map 512 512 76 254 316 235 255.08 20 maps/wc3maps/losttemple.map 512 512 269 250 340 221 83.01 44 maps/wc3maps/losttemple.map 512 512 147 224 139 398 178.97 32 maps/wc3maps/losttemple.map 512 512 155 302 281 308 129.31 68 maps/wc3maps/losttemple.map 512 512 410 272 158 292 272.23 78 maps/wc3maps/losttemple.map 512 512 287 73 137 326 315.13 58 maps/wc3maps/losttemple.map 512 512 148 273 266 88 233.88 12 maps/wc3maps/losttemple.map 512 512 116 396 150 360 50.08 113 maps/wc3maps/losttemple.map 512 512 407 112 114 408 455.00 46 maps/wc3maps/losttemple.map 512 512 327 180 320 362 184.90 41 maps/wc3maps/losttemple.map 512 512 152 301 86 439 165.34 67 maps/wc3maps/losttemple.map 512 512 316 61 240 296 268.82 29 maps/wc3maps/losttemple.map 512 512 255 329 355 290 116.15 54 maps/wc3maps/losttemple.map 512 512 297 111 329 294 218.21 21 maps/wc3maps/losttemple.map 512 512 188 326 104 317 87.73 21 maps/wc3maps/losttemple.map 512 512 191 305 267 313 84.49 52 maps/wc3maps/losttemple.map 512 512 419 296 375 141 209.94 6 maps/wc3maps/losttemple.map 512 512 175 285 180 307 24.07 5 maps/wc3maps/losttemple.map 512 512 140 312 148 294 21.31 54 maps/wc3maps/losttemple.map 512 512 99 385 263 272 216.66 66 maps/wc3maps/losttemple.map 512 512 220 332 437 212 267.88 96 maps/wc3maps/losttemple.map 512 512 132 263 376 173 385.30 9 maps/wc3maps/losttemple.map 512 512 434 260 421 292 37.38 63 maps/wc3maps/losttemple.map 512 512 215 349 380 181 253.92 10 maps/wc3maps/losttemple.map 512 512 179 390 180 431 41.41 66 maps/wc3maps/losttemple.map 512 512 331 99 332 350 264.28 39 maps/wc3maps/losttemple.map 512 512 286 253 183 364 158.94 62 maps/wc3maps/losttemple.map 512 512 271 408 323 184 248.85 29 maps/wc3maps/losttemple.map 512 512 169 311 241 246 116.50 25 maps/wc3maps/losttemple.map 512 512 428 131 344 178 103.47 55 maps/wc3maps/losttemple.map 512 512 198 158 277 340 220.58 62 maps/wc3maps/losttemple.map 512 512 90 219 324 254 248.50 65 maps/wc3maps/losttemple.map 512 512 233 220 79 393 261.98 80 maps/wc3maps/losttemple.map 512 512 80 304 386 273 322.98 77 maps/wc3maps/losttemple.map 512 512 170 291 360 77 308.17 77 maps/wc3maps/losttemple.map 512 512 312 368 281 106 311.53 25 maps/wc3maps/losttemple.map 512 512 90 287 175 279 102.40 62 maps/wc3maps/losttemple.map 512 512 253 294 343 87 251.31 21 maps/wc3maps/losttemple.map 512 512 321 173 377 236 86.78 39 maps/wc3maps/losttemple.map 512 512 224 160 254 307 159.43 74 maps/wc3maps/losttemple.map 512 512 127 405 347 252 296.26 17 maps/wc3maps/losttemple.map 512 512 130 346 196 335 70.56 5 maps/wc3maps/losttemple.map 512 512 279 210 263 220 20.14 49 maps/wc3maps/losttemple.map 512 512 356 230 204 337 197.49 63 maps/wc3maps/losttemple.map 512 512 313 342 361 110 255.20 28 maps/wc3maps/losttemple.map 512 512 244 208 205 114 113.67 27 maps/wc3maps/losttemple.map 512 512 274 85 199 151 110.54 15 maps/wc3maps/losttemple.map 512 512 148 230 182 274 62.77 59 maps/wc3maps/losttemple.map 512 512 81 252 232 102 238.32 8 maps/wc3maps/losttemple.map 512 512 200 244 232 248 33.66 60 maps/wc3maps/losttemple.map 512 512 406 306 356 109 242.52 42 maps/wc3maps/losttemple.map 512 512 213 222 104 336 170.28 53 maps/wc3maps/losttemple.map 512 512 294 348 371 167 212.89 0 maps/wc3maps/losttemple.map 512 512 362 235 365 233 3.83 30 maps/wc3maps/losttemple.map 512 512 140 220 74 296 121.50 52 maps/wc3maps/losttemple.map 512 512 400 188 226 244 209.50 29 maps/wc3maps/losttemple.map 512 512 285 247 167 244 119.24 48 maps/wc3maps/losttemple.map 512 512 389 127 285 271 194.11 99 maps/wc3maps/losttemple.map 512 512 86 329 430 194 399.92 59 maps/wc3maps/losttemple.map 512 512 247 128 253 362 237.31 55 maps/wc3maps/losttemple.map 512 512 241 263 89 374 221.21 47 maps/wc3maps/losttemple.map 512 512 410 235 247 304 191.58 94 maps/wc3maps/losttemple.map 512 512 227 406 358 98 376.12 89 maps/wc3maps/losttemple.map 512 512 72 414 191 119 357.36 70 maps/wc3maps/losttemple.map 512 512 418 252 219 397 283.81 91 maps/wc3maps/losttemple.map 512 512 87 430 303 193 366.93 20 maps/wc3maps/losttemple.map 512 512 188 385 134 370 83.57 109 maps/wc3maps/losttemple.map 512 512 88 439 325 113 438.81 68 maps/wc3maps/losttemple.map 512 512 195 361 211 122 273.02 77 maps/wc3maps/losttemple.map 512 512 163 351 441 273 310.31 47 maps/wc3maps/losttemple.map 512 512 270 425 302 254 191.47 35 maps/wc3maps/losttemple.map 512 512 205 138 117 228 140.51 64 maps/wc3maps/losttemple.map 512 512 435 189 361 78 258.04 105 maps/wc3maps/losttemple.map 512 512 72 447 404 247 423.43 39 maps/wc3maps/losttemple.map 512 512 268 255 415 286 159.84 88 maps/wc3maps/losttemple.map 512 512 384 141 69 230 354.21 72 maps/wc3maps/losttemple.map 512 512 102 388 355 302 288.62 73 maps/wc3maps/losttemple.map 512 512 86 258 319 368 292.91 58 maps/wc3maps/losttemple.map 512 512 361 117 216 274 235.22 59 maps/wc3maps/losttemple.map 512 512 118 243 284 311 236.08 25 maps/wc3maps/losttemple.map 512 512 132 249 205 319 101.99 40 maps/wc3maps/losttemple.map 512 512 407 127 272 167 162.34 68 maps/wc3maps/losttemple.map 512 512 129 318 239 89 275.15 46 maps/wc3maps/losttemple.map 512 512 216 265 108 386 185.65 97 maps/wc3maps/losttemple.map 512 512 418 233 101 409 389.90 34 maps/wc3maps/losttemple.map 512 512 199 447 265 343 136.61 19 maps/wc3maps/losttemple.map 512 512 233 331 214 265 76.70 24 maps/wc3maps/losttemple.map 512 512 145 217 86 269 98.25 13 maps/wc3maps/losttemple.map 512 512 324 375 334 326 55.14 3 maps/wc3maps/losttemple.map 512 512 240 166 251 171 13.07 37 maps/wc3maps/losttemple.map 512 512 404 204 310 141 151.75 24 maps/wc3maps/losttemple.map 512 512 112 227 191 178 99.30 52 maps/wc3maps/losttemple.map 512 512 254 367 427 283 208.62 34 maps/wc3maps/losttemple.map 512 512 405 280 277 271 139.18 73 maps/wc3maps/losttemple.map 512 512 283 180 67 345 292.55 20 maps/wc3maps/losttemple.map 512 512 355 119 282 101 80.46 36 maps/wc3maps/losttemple.map 512 512 291 213 167 269 147.20 56 maps/wc3maps/losttemple.map 512 512 115 409 288 383 225.31 36 maps/wc3maps/losttemple.map 512 512 139 246 273 233 144.36 78 maps/wc3maps/losttemple.map 512 512 164 442 231 159 314.07 62 maps/wc3maps/losttemple.map 512 512 280 351 81 246 250.78 112 maps/wc3maps/losttemple.map 512 512 78 432 309 99 449.19 22 maps/wc3maps/losttemple.map 512 512 298 158 309 119 89.36 78 maps/wc3maps/losttemple.map 512 512 271 368 295 98 312.37 38 maps/wc3maps/losttemple.map 512 512 322 212 195 149 153.10 45 maps/wc3maps/losttemple.map 512 512 125 318 264 212 183.49 72 maps/wc3maps/losttemple.map 512 512 408 289 167 205 289.85 65 maps/wc3maps/losttemple.map 512 512 202 406 79 200 260.46 26 maps/wc3maps/losttemple.map 512 512 324 271 331 369 105.97 42 maps/wc3maps/losttemple.map 512 512 377 246 330 376 168.88 33 maps/wc3maps/losttemple.map 512 512 317 216 254 116 132.72 51 maps/wc3maps/losttemple.map 512 512 314 133 164 252 206.32 54 maps/wc3maps/losttemple.map 512 512 111 265 291 292 219.43 60 maps/wc3maps/losttemple.map 512 512 346 295 237 99 241.15 62 maps/wc3maps/losttemple.map 512 512 431 283 232 202 251.76 66 maps/wc3maps/losttemple.map 512 512 328 271 111 373 265.11 63 maps/wc3maps/losttemple.map 512 512 77 310 299 238 254.65 59 maps/wc3maps/losttemple.map 512 512 203 435 327 257 236.98 67 maps/wc3maps/losttemple.map 512 512 66 231 327 234 270.53 90 maps/wc3maps/losttemple.map 512 512 392 142 139 353 360.32 42 maps/wc3maps/losttemple.map 512 512 168 301 277 400 168.75 37 maps/wc3maps/losttemple.map 512 512 302 401 214 464 150.84 41 maps/wc3maps/losttemple.map 512 512 361 226 226 154 164.82 10 maps/wc3maps/losttemple.map 512 512 232 125 272 121 41.66 26 maps/wc3maps/losttemple.map 512 512 436 213 335 215 106.80 21 maps/wc3maps/losttemple.map 512 512 239 265 163 288 86.11 66 maps/wc3maps/losttemple.map 512 512 217 398 385 233 265.53 23 maps/wc3maps/losttemple.map 512 512 252 302 161 295 95.56 29 maps/wc3maps/losttemple.map 512 512 249 220 146 259 119.15 60 maps/wc3maps/losttemple.map 512 512 372 289 425 90 243.32 76 maps/wc3maps/losttemple.map 512 512 201 369 392 148 305.39 78 maps/wc3maps/losttemple.map 512 512 320 147 55 257 313.05 51 maps/wc3maps/losttemple.map 512 512 362 296 184 366 206.99 91 maps/wc3maps/losttemple.map 512 512 129 358 435 215 365.23 71 maps/wc3maps/losttemple.map 512 512 213 189 230 425 285.85 70 maps/wc3maps/losttemple.map 512 512 397 224 160 333 282.15 56 maps/wc3maps/losttemple.map 512 512 203 379 351 220 227.33 52 maps/wc3maps/losttemple.map 512 512 357 107 252 265 211.45 30 maps/wc3maps/losttemple.map 512 512 355 163 410 219 120.01 47 maps/wc3maps/losttemple.map 512 512 241 291 412 280 189.64 86 maps/wc3maps/losttemple.map 512 512 380 240 79 343 344.25 92 maps/wc3maps/losttemple.map 512 512 283 416 277 73 371.17 42 maps/wc3maps/losttemple.map 512 512 126 321 240 205 170.25 74 maps/wc3maps/losttemple.map 512 512 326 374 113 245 299.28 94 maps/wc3maps/losttemple.map 512 512 195 395 330 79 378.02 14 maps/wc3maps/losttemple.map 512 512 381 128 435 116 58.97 39 maps/wc3maps/losttemple.map 512 512 78 223 172 326 157.75 68 maps/wc3maps/losttemple.map 512 512 278 244 76 395 273.92 51 maps/wc3maps/losttemple.map 512 512 266 254 150 380 207.66 58 maps/wc3maps/losttemple.map 512 512 149 292 366 255 232.33 85 maps/wc3maps/losttemple.map 512 512 432 258 115 298 342.68 55 maps/wc3maps/losttemple.map 512 512 336 319 177 220 220.55 41 maps/wc3maps/losttemple.map 512 512 180 201 179 359 166.70 58 maps/wc3maps/losttemple.map 512 512 276 323 82 417 232.94 78 maps/wc3maps/losttemple.map 512 512 309 171 134 386 314.43 76 maps/wc3maps/losttemple.map 512 512 376 300 82 319 306.01 14 maps/wc3maps/losttemple.map 512 512 265 217 226 199 58.50 35 maps/wc3maps/losttemple.map 512 512 240 302 210 189 142.66 74 maps/wc3maps/losttemple.map 512 512 173 305 307 64 299.82 82 maps/wc3maps/losttemple.map 512 512 323 125 83 308 330.45 74 maps/wc3maps/losttemple.map 512 512 275 92 148 337 297.61 91 maps/wc3maps/losttemple.map 512 512 435 189 121 319 367.85 72 maps/wc3maps/losttemple.map 512 512 202 190 286 422 290.12 40 maps/wc3maps/losttemple.map 512 512 314 115 237 211 160.70 45 maps/wc3maps/losttemple.map 512 512 134 345 301 313 180.25 69 maps/wc3maps/losttemple.map 512 512 312 235 101 250 276.33 54 maps/wc3maps/losttemple.map 512 512 414 148 391 307 219.52 61 maps/wc3maps/losttemple.map 512 512 187 183 414 211 246.88 51 maps/wc3maps/losttemple.map 512 512 89 203 259 288 205.21 77 maps/wc3maps/losttemple.map 512 512 279 437 234 145 310.64 52 maps/wc3maps/losttemple.map 512 512 328 206 268 393 211.85 44 maps/wc3maps/losttemple.map 512 512 254 226 428 239 179.38 48 maps/wc3maps/losttemple.map 512 512 71 327 83 410 194.92 25 maps/wc3maps/losttemple.map 512 512 347 289 277 295 101.30 64 maps/wc3maps/losttemple.map 512 512 145 242 396 230 257.63 17 maps/wc3maps/losttemple.map 512 512 169 235 110 213 68.11 29 maps/wc3maps/losttemple.map 512 512 326 192 277 288 119.81 64 maps/wc3maps/losttemple.map 512 512 352 254 188 424 256.09 71 maps/wc3maps/losttemple.map 512 512 108 312 197 111 286.39 8 maps/wc3maps/losttemple.map 512 512 207 228 233 210 33.46 49 maps/wc3maps/losttemple.map 512 512 299 191 307 370 198.88 41 maps/wc3maps/losttemple.map 512 512 253 212 323 337 167.85 100 maps/wc3maps/losttemple.map 512 512 420 130 127 356 403.01 41 maps/wc3maps/losttemple.map 512 512 278 295 365 167 167.55 49 maps/wc3maps/losttemple.map 512 512 202 335 318 208 198.76 49 maps/wc3maps/losttemple.map 512 512 419 191 393 118 199.94 14 maps/wc3maps/losttemple.map 512 512 94 132 67 86 59.53 49 maps/wc3maps/losttemple.map 512 512 394 310 224 366 198.99 44 maps/wc3maps/losttemple.map 512 512 247 265 410 300 179.98 69 maps/wc3maps/losttemple.map 512 512 225 167 102 369 277.39 103 maps/wc3maps/losttemple.map 512 512 354 184 58 423 412.57 26 maps/wc3maps/losttemple.map 512 512 390 296 351 207 106.33 44 maps/wc3maps/losttemple.map 512 512 256 121 219 283 179.67 77 maps/wc3maps/losttemple.map 512 512 85 430 321 257 310.59 91 maps/wc3maps/losttemple.map 512 512 317 96 237 422 367.42 76 maps/wc3maps/losttemple.map 512 512 347 121 82 212 307.66 89 maps/wc3maps/losttemple.map 512 512 314 114 113 351 358.92 37 maps/wc3maps/losttemple.map 512 512 142 216 279 241 149.84 99 maps/wc3maps/losttemple.map 512 512 210 117 69 439 397.66 34 maps/wc3maps/losttemple.map 512 512 241 240 109 224 139.46 23 maps/wc3maps/losttemple.map 512 512 194 248 166 327 95.28 44 maps/wc3maps/losttemple.map 512 512 290 239 430 335 179.76 44 maps/wc3maps/losttemple.map 512 512 259 105 367 148 178.15 81 maps/wc3maps/losttemple.map 512 512 174 236 439 96 326.30 38 maps/wc3maps/losttemple.map 512 512 216 372 158 340 155.64 40 maps/wc3maps/losttemple.map 512 512 256 252 221 103 163.50 24 maps/wc3maps/losttemple.map 512 512 90 200 84 294 97.31 40 maps/wc3maps/losttemple.map 512 512 206 117 274 244 162.68 5 maps/wc3maps/losttemple.map 512 512 271 201 292 199 21.83 67 maps/wc3maps/losttemple.map 512 512 300 330 212 101 271.89 27 maps/wc3maps/losttemple.map 512 512 296 415 284 311 111.46 40 maps/wc3maps/losttemple.map 512 512 281 358 368 231 163.04 39 maps/wc3maps/losttemple.map 512 512 179 415 104 340 159.78 34 maps/wc3maps/losttemple.map 512 512 78 290 120 371 139.95 34 maps/wc3maps/losttemple.map 512 512 272 246 323 144 139.27 33 maps/wc3maps/losttemple.map 512 512 321 251 217 324 135.41 32 maps/wc3maps/losttemple.map 512 512 189 348 81 395 129.23 64 maps/wc3maps/losttemple.map 512 512 269 231 120 404 256.92 39 maps/wc3maps/losttemple.map 512 512 238 286 302 165 159.23 17 maps/wc3maps/losttemple.map 512 512 147 322 210 342 71.28 38 maps/wc3maps/losttemple.map 512 512 373 221 402 109 155.89 82 maps/wc3maps/losttemple.map 512 512 99 341 288 107 329.86 94 maps/wc3maps/losttemple.map 512 512 73 439 225 127 377.45 93 maps/wc3maps/losttemple.map 512 512 413 325 95 411 375.36 38 maps/wc3maps/losttemple.map 512 512 92 207 232 236 155.33 10 maps/wc3maps/losttemple.map 512 512 279 242 299 208 42.28 66 maps/wc3maps/losttemple.map 512 512 242 403 404 263 264.09 60 maps/wc3maps/losttemple.map 512 512 192 305 424 295 240.28 25 maps/wc3maps/losttemple.map 512 512 240 147 296 213 100.33 38 maps/wc3maps/losttemple.map 512 512 402 123 280 199 155.82 38 maps/wc3maps/losttemple.map 512 512 289 196 419 258 155.68 89 maps/wc3maps/losttemple.map 512 512 323 89 292 422 358.27 37 maps/wc3maps/losttemple.map 512 512 187 315 332 330 151.21 96 maps/wc3maps/losttemple.map 512 512 432 251 98 352 387.74 33 maps/wc3maps/losttemple.map 512 512 240 258 308 166 135.98 29 maps/wc3maps/losttemple.map 512 512 249 216 345 272 119.20 22 maps/wc3maps/losttemple.map 512 512 328 269 398 224 88.64 15 maps/wc3maps/losttemple.map 512 512 221 319 209 280 61.43 33 maps/wc3maps/losttemple.map 512 512 406 110 307 139 134.71 15 maps/wc3maps/losttemple.map 512 512 397 144 428 95 61.84 33 maps/wc3maps/losttemple.map 512 512 398 292 334 371 135.12 70 maps/wc3maps/losttemple.map 512 512 416 266 154 229 282.25 32 maps/wc3maps/losttemple.map 512 512 317 126 224 197 131.78 32 maps/wc3maps/losttemple.map 512 512 341 253 404 164 131.50 32 maps/wc3maps/losttemple.map 512 512 296 179 413 145 131.91 60 maps/wc3maps/losttemple.map 512 512 318 260 104 283 242.10 29 maps/wc3maps/losttemple.map 512 512 214 253 102 235 119.46 32 maps/wc3maps/losttemple.map 512 512 261 353 189 251 131.82 92 maps/wc3maps/losttemple.map 512 512 433 301 105 400 369.01 69 maps/wc3maps/losttemple.map 512 512 150 216 405 217 277.78 87 maps/wc3maps/losttemple.map 512 512 184 386 376 124 348.46 21 maps/wc3maps/losttemple.map 512 512 323 181 305 252 85.73 9 maps/wc3maps/losttemple.map 512 512 350 347 378 370 37.53 32 maps/wc3maps/losttemple.map 512 512 262 389 348 308 130.68 73 maps/wc3maps/losttemple.map 512 512 183 265 431 156 293.74 60 maps/wc3maps/losttemple.map 512 512 194 191 99 392 243.87 14 maps/wc3maps/losttemple.map 512 512 134 303 183 322 56.87 23 maps/wc3maps/losttemple.map 512 512 250 205 178 262 95.61 94 maps/wc3maps/losttemple.map 512 512 309 94 226 424 379.88 32 maps/wc3maps/losttemple.map 512 512 224 297 281 399 131.47 29 maps/wc3maps/losttemple.map 512 512 379 222 393 146 119.92 5 maps/wc3maps/losttemple.map 512 512 232 285 218 268 22.80 28 maps/wc3maps/losttemple.map 512 512 250 284 231 197 115.21 19 maps/wc3maps/losttemple.map 512 512 359 293 428 311 76.46 16 maps/wc3maps/losttemple.map 512 512 279 231 279 297 66.00 28 maps/wc3maps/losttemple.map 512 512 340 266 378 173 115.18 28 maps/wc3maps/losttemple.map 512 512 237 261 208 158 115.01 63 maps/wc3maps/losttemple.map 512 512 305 64 230 285 252.07 66 maps/wc3maps/losttemple.map 512 512 328 214 113 310 264.14 28 maps/wc3maps/losttemple.map 512 512 278 284 366 219 115.51 100 maps/wc3maps/losttemple.map 512 512 75 282 371 125 402.56 65 maps/wc3maps/losttemple.map 512 512 301 153 75 200 263.31 24 maps/wc3maps/losttemple.map 512 512 317 314 288 277 99.60 27 maps/wc3maps/losttemple.map 512 512 180 256 262 185 111.41 75 maps/wc3maps/losttemple.map 512 512 307 144 293 414 302.31 94 maps/wc3maps/losttemple.map 512 512 427 314 119 249 378.88 27 maps/wc3maps/losttemple.map 512 512 284 278 190 321 111.81 64 maps/wc3maps/losttemple.map 512 512 221 124 418 273 259.89 17 maps/wc3maps/losttemple.map 512 512 238 124 197 179 71.98 100 maps/wc3maps/losttemple.map 512 512 398 230 83 431 400.60 27 maps/wc3maps/losttemple.map 512 512 354 246 431 323 111.24 76 maps/wc3maps/losttemple.map 512 512 303 348 431 94 307.02 27 maps/wc3maps/losttemple.map 512 512 327 225 331 118 111.97 27 maps/wc3maps/losttemple.map 512 512 186 370 255 427 110.77 26 maps/wc3maps/losttemple.map 512 512 315 234 422 233 107.41 26 maps/wc3maps/losttemple.map 512 512 324 160 324 267 107.83 14 maps/wc3maps/losttemple.map 512 512 165 277 145 325 56.28 26 maps/wc3maps/losttemple.map 512 512 189 304 293 311 107.73 26 maps/wc3maps/losttemple.map 512 512 219 328 229 231 107.28 69 maps/wc3maps/losttemple.map 512 512 219 83 398 266 278.82 23 maps/wc3maps/losttemple.map 512 512 122 213 196 173 94.71 23 maps/wc3maps/losttemple.map 512 512 133 229 207 178 95.12 23 maps/wc3maps/losttemple.map 512 512 263 370 279 287 95.14 23 maps/wc3maps/losttemple.map 512 512 324 307 377 243 95.33 17 maps/wc3maps/losttemple.map 512 512 400 443 436 387 70.91 23 maps/wc3maps/losttemple.map 512 512 269 248 178 259 95.56 75 maps/wc3maps/losttemple.map 512 512 270 80 412 309 303.63 22 maps/wc3maps/losttemple.map 512 512 320 158 286 95 91.14 17 maps/wc3maps/losttemple.map 512 512 169 278 209 333 71.57 95 maps/wc3maps/losttemple.map 512 512 102 388 367 161 382.46 103 maps/wc3maps/losttemple.map 512 512 156 433 333 100 412.42 17 maps/wc3maps/losttemple.map 512 512 142 289 112 235 71.70 62 maps/wc3maps/losttemple.map 512 512 405 227 256 86 251.34 17 maps/wc3maps/losttemple.map 512 512 327 178 391 166 70.63 16 maps/wc3maps/losttemple.map 512 512 235 298 226 234 67.73 16 maps/wc3maps/losttemple.map 512 512 322 244 271 285 67.98 75 maps/wc3maps/losttemple.map 512 512 137 370 205 124 302.59 62 maps/wc3maps/losttemple.map 512 512 355 244 181 405 251.23 16 maps/wc3maps/losttemple.map 512 512 144 274 109 298 67.49 16 maps/wc3maps/losttemple.map 512 512 297 85 315 139 67.36 16 maps/wc3maps/losttemple.map 512 512 240 351 262 397 67.66 16 maps/wc3maps/losttemple.map 512 512 318 293 318 360 67.00 16 maps/wc3maps/losttemple.map 512 512 297 333 281 394 67.63 12 maps/wc3maps/losttemple.map 512 512 392 438 419 400 49.18 82 maps/wc3maps/losttemple.map 512 512 420 330 116 325 330.78 93 maps/wc3maps/losttemple.map 512 512 167 447 260 114 372.11 16 maps/wc3maps/losttemple.map 512 512 209 416 267 435 67.63 15 maps/wc3maps/losttemple.map 512 512 249 303 308 302 63.56 15 maps/wc3maps/losttemple.map 512 512 318 143 310 203 63.31 14 maps/wc3maps/losttemple.map 512 512 329 304 385 297 58.90 13 maps/wc3maps/losttemple.map 512 512 350 207 383 249 55.67 61 maps/wc3maps/losttemple.map 512 512 228 416 410 286 246.98 13 maps/wc3maps/losttemple.map 512 512 169 244 193 198 55.94 81 maps/wc3maps/losttemple.map 512 512 278 211 73 433 325.66 69 maps/wc3maps/losttemple.map 512 512 103 326 278 144 279.09 13 maps/wc3maps/losttemple.map 512 512 258 280 278 327 55.87 78 maps/wc3maps/losttemple.map 512 512 236 348 334 80 314.69 13 maps/wc3maps/losttemple.map 512 512 355 306 407 309 55.73 13 maps/wc3maps/losttemple.map 512 512 262 353 247 304 55.21 12 maps/wc3maps/losttemple.map 512 512 201 174 206 127 51.90 12 maps/wc3maps/losttemple.map 512 512 190 209 229 178 51.84 12 maps/wc3maps/losttemple.map 512 512 323 171 333 124 51.14 12 maps/wc3maps/losttemple.map 512 512 288 170 274 149 51.38 80 maps/wc3maps/losttemple.map 512 512 341 385 310 123 323.08 12 maps/wc3maps/losttemple.map 512 512 201 399 228 433 51.04 76 maps/wc3maps/losttemple.map 512 512 293 97 331 374 307.18 12 maps/wc3maps/losttemple.map 512 512 251 203 216 166 51.50 12 maps/wc3maps/losttemple.map 512 512 283 336 321 367 50.84 118 maps/wc3maps/losttemple.map 512 512 432 66 132 380 472.24 76 maps/wc3maps/losttemple.map 512 512 192 420 310 178 307.75 69 maps/wc3maps/losttemple.map 512 512 320 85 144 270 276.65 80 maps/wc3maps/losttemple.map 512 512 324 132 268 429 323.51 4 maps/wc3maps/losttemple.map 512 512 267 388 270 371 18.24 11 maps/wc3maps/losttemple.map 512 512 264 384 273 428 47.73 86 maps/wc3maps/losttemple.map 512 512 258 97 59 334 345.20 11 maps/wc3maps/losttemple.map 512 512 121 354 96 378 47.83 93 maps/wc3maps/losttemple.map 512 512 427 232 75 259 372.74 3 maps/wc3maps/losttemple.map 512 512 250 169 248 183 14.83 8 maps/wc3maps/losttemple.map 512 512 220 143 237 124 33.56 11 maps/wc3maps/losttemple.map 512 512 204 393 206 437 47.31 11 maps/wc3maps/losttemple.map 512 512 259 215 275 176 47.97 11 maps/wc3maps/losttemple.map 512 512 235 345 269 316 47.18 10 maps/wc3maps/losttemple.map 512 512 246 329 203 330 43.41 10 maps/wc3maps/losttemple.map 512 512 140 319 106 339 43.46 10 maps/wc3maps/losttemple.map 512 512 263 188 246 222 43.38 10 maps/wc3maps/losttemple.map 512 512 266 306 302 323 43.04 75 maps/wc3maps/losttemple.map 512 512 317 185 220 439 302.46 10 maps/wc3maps/losttemple.map 512 512 280 282 265 314 43.04 10 maps/wc3maps/losttemple.map 512 512 298 77 290 117 43.31 79 maps/wc3maps/losttemple.map 512 512 367 182 109 304 316.74 90 maps/wc3maps/losttemple.map 512 512 147 248 431 81 363.13 9 maps/wc3maps/losttemple.map 512 512 157 326 162 289 39.07 76 maps/wc3maps/losttemple.map 512 512 162 339 284 85 304.53 9 maps/wc3maps/losttemple.map 512 512 279 265 293 299 39.80 9 maps/wc3maps/losttemple.map 512 512 319 105 286 120 39.21 8 maps/wc3maps/losttemple.map 512 512 320 104 350 91 35.38 8 maps/wc3maps/losttemple.map 512 512 219 159 244 134 35.36 8 maps/wc3maps/losttemple.map 512 512 347 114 362 85 35.21 75 maps/wc3maps/losttemple.map 512 512 229 106 424 323 303.63 104 maps/wc3maps/losttemple.map 512 512 62 440 422 299 418.40 99 maps/wc3maps/losttemple.map 512 512 138 399 306 81 396.62 8 maps/wc3maps/losttemple.map 512 512 273 368 275 403 35.83 8 maps/wc3maps/losttemple.map 512 512 299 352 268 340 35.97 4 maps/wc3maps/losttemple.map 512 512 346 89 356 74 19.14 8 maps/wc3maps/losttemple.map 512 512 247 272 218 287 35.21 7 maps/wc3maps/losttemple.map 512 512 93 403 71 425 31.11 7 maps/wc3maps/losttemple.map 512 512 390 289 411 311 30.70 75 maps/wc3maps/losttemple.map 512 512 375 279 94 224 303.78 7 maps/wc3maps/losttemple.map 512 512 282 319 260 341 31.11 7 maps/wc3maps/losttemple.map 512 512 199 156 191 128 31.31 7 maps/wc3maps/losttemple.map 512 512 202 416 171 416 31.00 7 maps/wc3maps/losttemple.map 512 512 82 244 78 214 31.66 7 maps/wc3maps/losttemple.map 512 512 322 164 321 195 31.41 7 maps/wc3maps/losttemple.map 512 512 379 145 400 123 30.70 6 maps/wc3maps/losttemple.map 512 512 227 202 201 205 27.24 6 maps/wc3maps/losttemple.map 512 512 383 242 403 260 27.46 6 maps/wc3maps/losttemple.map 512 512 88 260 98 237 27.14 126 maps/wc3maps/losttemple.map 512 512 70 379 438 94 507.14 95 maps/wc3maps/losttemple.map 512 512 404 194 80 285 383.88 85 maps/wc3maps/losttemple.map 512 512 316 79 215 367 342.72 104 maps/wc3maps/losttemple.map 512 512 333 103 81 380 417.11 73 maps/wc3maps/losttemple.map 512 512 263 350 410 116 294.89 69 maps/wc3maps/losttemple.map 512 512 404 306 288 81 278.91 6 maps/wc3maps/losttemple.map 512 512 185 269 196 257 27.24 6 maps/wc3maps/losttemple.map 512 512 193 154 168 147 27.90 6 maps/wc3maps/losttemple.map 512 512 271 362 261 385 27.14 5 maps/wc3maps/losttemple.map 512 512 225 432 206 441 22.73 5 maps/wc3maps/losttemple.map 512 512 182 288 181 272 23.14 5 maps/wc3maps/losttemple.map 512 512 233 234 222 215 23.56 112 maps/wc3maps/losttemple.map 512 512 432 97 94 243 448.62 5 maps/wc3maps/losttemple.map 512 512 277 202 269 188 23.41 5 maps/wc3maps/losttemple.map 512 512 184 204 162 207 23.24 71 maps/wc3maps/losttemple.map 512 512 88 243 358 272 287.81 5 maps/wc3maps/losttemple.map 512 512 369 160 381 141 23.97 4 maps/wc3maps/losttemple.map 512 512 137 319 118 320 19.41 4 maps/wc3maps/losttemple.map 512 512 266 303 283 309 19.49 4 maps/wc3maps/losttemple.map 512 512 271 256 285 244 18.97 72 maps/wc3maps/losttemple.map 512 512 319 140 105 300 291.79 88 maps/wc3maps/losttemple.map 512 512 328 138 218 370 353.76 4 maps/wc3maps/losttemple.map 512 512 264 297 263 313 19.00 3 maps/wc3maps/losttemple.map 512 512 100 329 87 333 14.66 3 maps/wc3maps/losttemple.map 512 512 263 403 263 418 15.00 3 maps/wc3maps/losttemple.map 512 512 378 151 373 148 15.66 3 maps/wc3maps/losttemple.map 512 512 175 279 168 267 14.90 2 maps/wc3maps/losttemple.map 512 512 304 252 312 244 11.31 91 maps/wc3maps/losttemple.map 512 512 66 437 211 132 365.06 2 maps/wc3maps/losttemple.map 512 512 295 236 291 245 11.24 2 maps/wc3maps/losttemple.map 512 512 283 390 289 399 11.49 2 maps/wc3maps/losttemple.map 512 512 221 253 232 253 11.00 2 maps/wc3maps/losttemple.map 512 512 347 252 349 263 11.83 2 maps/wc3maps/losttemple.map 512 512 268 335 274 344 11.49 93 maps/wc3maps/losttemple.map 512 512 87 300 355 92 372.70 2 maps/wc3maps/losttemple.map 512 512 229 283 218 285 11.83 2 maps/wc3maps/losttemple.map 512 512 254 103 262 95 11.31 2 maps/wc3maps/losttemple.map 512 512 173 322 166 313 11.90 2 maps/wc3maps/losttemple.map 512 512 89 236 78 234 11.83 1 maps/wc3maps/losttemple.map 512 512 200 153 204 147 7.66 1 maps/wc3maps/losttemple.map 512 512 262 162 256 158 7.66 1 maps/wc3maps/losttemple.map 512 512 250 297 255 292 7.07 1 maps/wc3maps/losttemple.map 512 512 315 90 310 85 7.07 90 maps/wc3maps/losttemple.map 512 512 91 233 424 163 361.99 82 maps/wc3maps/losttemple.map 512 512 417 254 136 348 329.05 1 maps/wc3maps/losttemple.map 512 512 404 138 409 133 7.07 100 maps/wc3maps/losttemple.map 512 512 102 418 399 197 402.01 1 maps/wc3maps/losttemple.map 512 512 218 388 217 381 7.41 1 maps/wc3maps/losttemple.map 512 512 91 324 84 326 7.83 82 maps/wc3maps/losttemple.map 512 512 195 406 197 120 331.68 1 maps/wc3maps/losttemple.map 512 512 157 254 150 254 7.00 1 maps/wc3maps/losttemple.map 512 512 103 207 98 202 7.07 1 maps/wc3maps/losttemple.map 512 512 350 283 355 287 6.66 0 maps/wc3maps/losttemple.map 512 512 182 296 182 293 3.00 0 maps/wc3maps/losttemple.map 512 512 340 304 342 306 2.83 0 maps/wc3maps/losttemple.map 512 512 412 304 415 305 3.41 0 maps/wc3maps/losttemple.map 512 512 398 275 401 274 3.41 0 maps/wc3maps/losttemple.map 512 512 339 273 338 276 3.41 80 maps/wc3maps/losttemple.map 512 512 411 117 133 219 320.84 0 maps/wc3maps/losttemple.map 512 512 303 83 306 83 3.00 72 maps/wc3maps/losttemple.map 512 512 149 334 333 143 291.82 0 maps/wc3maps/losttemple.map 512 512 325 361 327 363 2.83 0 maps/wc3maps/losttemple.map 512 512 279 312 281 310 2.83 0 maps/wc3maps/losttemple.map 512 512 268 311 268 314 3.00 72 maps/wc3maps/losttemple.map 512 512 280 359 327 90 291.78 71 maps/wc3maps/losttemple.map 512 512 337 144 126 308 287.96 87 maps/wc3maps/losttemple.map 512 512 286 407 349 92 348.55 90 maps/wc3maps/losttemple.map 512 512 146 376 364 155 360.83 80 maps/wc3maps/losttemple.map 512 512 421 88 305 360 320.05 99 maps/wc3maps/losttemple.map 512 512 412 139 92 268 399.63 80 maps/wc3maps/losttemple.map 512 512 333 132 237 408 322.59 117 maps/wc3maps/losttemple.map 512 512 427 97 101 376 469.00 84 maps/wc3maps/losttemple.map 512 512 83 383 300 179 338.40 98 maps/wc3maps/losttemple.map 512 512 405 143 59 260 394.46 94 maps/wc3maps/losttemple.map 512 512 289 118 116 403 376.58 82 maps/wc3maps/losttemple.map 512 512 315 164 208 374 329.15 84 maps/wc3maps/losttemple.map 512 512 223 126 89 403 339.58 88 maps/wc3maps/losttemple.map 512 512 82 437 371 292 354.33 96 maps/wc3maps/losttemple.map 512 512 219 411 314 86 387.42 79 maps/wc3maps/losttemple.map 512 512 169 417 309 175 317.69 82 maps/wc3maps/losttemple.map 512 512 393 259 80 223 331.67 79 maps/wc3maps/losttemple.map 512 512 287 435 89 225 318.37 79 maps/wc3maps/losttemple.map 512 512 104 418 338 230 318.90 86 maps/wc3maps/losttemple.map 512 512 430 318 140 391 347.45 79 maps/wc3maps/losttemple.map 512 512 89 202 380 269 319.92 79 maps/wc3maps/losttemple.map 512 512 226 306 445 104 319.07 92 maps/wc3maps/losttemple.map 512 512 294 412 417 103 370.72 87 maps/wc3maps/losttemple.map 512 512 354 268 80 439 350.10 80 maps/wc3maps/losttemple.map 512 512 286 62 211 353 322.07 84 maps/wc3maps/losttemple.map 512 512 140 304 431 195 336.15 101 maps/wc3maps/losttemple.map 512 512 412 131 147 377 407.06 107 maps/wc3maps/losttemple.map 512 512 268 95 74 443 428.36 82 maps/wc3maps/losttemple.map 512 512 285 437 65 239 329.55 89 maps/wc3maps/losttemple.map 512 512 109 250 391 253 358.62 100 maps/wc3maps/losttemple.map 512 512 338 126 150 445 402.97 79 maps/wc3maps/losttemple.map 512 512 81 267 312 88 316.27 80 maps/wc3maps/losttemple.map 512 512 428 254 176 407 322.40 97 maps/wc3maps/losttemple.map 512 512 131 260 433 325 390.68 81 maps/wc3maps/losttemple.map 512 512 319 91 67 265 325.83 93 maps/wc3maps/losttemple.map 512 512 72 206 423 260 374.20 101 maps/wc3maps/losttemple.map 512 512 447 86 172 355 406.93 87 maps/wc3maps/losttemple.map 512 512 83 242 403 198 349.54 94 maps/wc3maps/losttemple.map 512 512 86 245 420 141 378.25 109 maps/wc3maps/losttemple.map 512 512 102 415 364 107 438.20 86 maps/wc3maps/losttemple.map 512 512 171 136 226 419 346.45 89 maps/wc3maps/losttemple.map 512 512 74 224 396 133 359.69 79 maps/wc3maps/losttemple.map 512 512 101 320 399 283 317.47 83 maps/wc3maps/losttemple.map 512 512 171 375 285 93 333.32 93 maps/wc3maps/losttemple.map 512 512 82 300 386 154 375.99 102 maps/wc3maps/losttemple.map 512 512 440 100 84 202 411.50 84 maps/wc3maps/losttemple.map 512 512 308 69 97 278 336.11 96 maps/wc3maps/losttemple.map 512 512 360 94 285 442 385.69 116 maps/wc3maps/losttemple.map 512 512 422 101 131 250 465.13 92 maps/wc3maps/losttemple.map 512 512 121 353 316 73 370.73 98 maps/wc3maps/losttemple.map 512 512 76 398 363 184 393.22 92 maps/wc3maps/losttemple.map 512 512 296 75 240 404 370.38 90 maps/wc3maps/losttemple.map 512 512 406 238 67 269 362.57 89 maps/wc3maps/losttemple.map 512 512 358 68 75 248 357.56 83 maps/wc3maps/losttemple.map 512 512 335 208 96 404 334.83 79 maps/wc3maps/losttemple.map 512 512 70 426 220 170 318.72 89 maps/wc3maps/losttemple.map 512 512 227 120 74 398 356.85 82 maps/wc3maps/losttemple.map 512 512 237 125 103 399 329.50 95 maps/wc3maps/losttemple.map 512 512 284 416 354 68 382.79 83 maps/wc3maps/losttemple.map 512 512 350 72 196 326 334.19 90 maps/wc3maps/losttemple.map 512 512 121 375 293 88 362.93 81 maps/wc3maps/losttemple.map 512 512 421 282 110 311 327.15 85 maps/wc3maps/losttemple.map 512 512 426 126 269 396 342.06 114 maps/wc3maps/losttemple.map 512 512 100 394 424 113 458.55 83 maps/wc3maps/losttemple.map 512 512 368 157 220 431 335.30 96 maps/wc3maps/losttemple.map 512 512 418 139 212 421 387.83 99 maps/wc3maps/losttemple.map 512 512 63 330 363 114 397.67 84 maps/wc3maps/losttemple.map 512 512 126 375 329 144 337.93 91 maps/wc3maps/losttemple.map 512 512 395 242 96 238 364.01 81 maps/wc3maps/losttemple.map 512 512 338 132 193 393 327.16 90 maps/wc3maps/losttemple.map 512 512 99 243 395 237 362.33 86 maps/wc3maps/losttemple.map 512 512 372 154 143 371 345.83 97 maps/wc3maps/losttemple.map 512 512 433 212 73 263 391.85 86 maps/wc3maps/losttemple.map 512 512 427 203 112 212 345.24 91 maps/wc3maps/losttemple.map 512 512 305 121 294 414 364.41 103 maps/wc3maps/losttemple.map 512 512 438 329 83 424 415.89 92 maps/wc3maps/losttemple.map 512 512 94 313 413 192 371.46 114 maps/wc3maps/losttemple.map 512 512 93 416 343 78 456.20 101 maps/wc3maps/losttemple.map 512 512 223 395 364 73 407.19 91 maps/wc3maps/losttemple.map 512 512 426 97 150 295 367.97 101 maps/wc3maps/losttemple.map 512 512 174 440 287 79 407.81 100 maps/wc3maps/losttemple.map 512 512 70 438 314 163 401.26 85 maps/wc3maps/losttemple.map 512 512 152 352 310 90 343.26 90 maps/wc3maps/losttemple.map 512 512 299 166 68 397 363.59 83 maps/wc3maps/losttemple.map 512 512 96 255 336 123 333.02 100 maps/wc3maps/losttemple.map 512 512 132 262 362 99 400.96 89 maps/wc3maps/losttemple.map 512 512 111 397 395 216 358.97 86 maps/wc3maps/losttemple.map 512 512 436 303 99 313 345.28 99 maps/wc3maps/losttemple.map 512 512 225 407 435 109 398.46 88 maps/wc3maps/losttemple.map 512 512 245 407 419 128 355.17 83 maps/wc3maps/losttemple.map 512 512 311 122 102 317 334.53 98 maps/wc3maps/losttemple.map 512 512 407 307 70 438 394.58 111 maps/wc3maps/losttemple.map 512 512 429 87 94 261 444.89 104 maps/wc3maps/losttemple.map 512 512 420 85 220 394 418.49 83 maps/wc3maps/losttemple.map 512 512 186 144 214 396 335.62 81 maps/wc3maps/losttemple.map 512 512 373 148 150 313 327.75 88 maps/wc3maps/losttemple.map 512 512 337 97 243 407 352.84 101 maps/wc3maps/losttemple.map 512 512 411 188 108 248 404.12 81 maps/wc3maps/losttemple.map 512 512 65 256 293 440 327.65 88 maps/wc3maps/losttemple.map 512 512 78 323 411 278 355.78 87 maps/wc3maps/losttemple.map 512 512 86 263 386 172 351.89 81 maps/wc3maps/losttemple.map 512 512 332 140 226 414 327.66 81 maps/wc3maps/losttemple.map 512 512 424 277 113 239 327.91 84 maps/wc3maps/losttemple.map 512 512 173 150 159 448 338.61 120 maps/wc3maps/losttemple.map 512 512 97 389 445 103 482.87 107 maps/wc3maps/losttemple.map 512 512 303 105 99 431 431.00 87 maps/wc3maps/losttemple.map 512 512 324 139 170 421 351.89 95 maps/wc3maps/losttemple.map 512 512 90 383 432 320 382.18 87 maps/wc3maps/losttemple.map 512 512 420 220 126 359 351.58 102 maps/wc3maps/losttemple.map 512 512 88 423 417 225 411.60 117 maps/wc3maps/losttemple.map 512 512 118 250 440 101 470.20 85 maps/wc3maps/losttemple.map 512 512 297 425 405 152 340.95 104 maps/wc3maps/losttemple.map 512 512 402 242 62 432 418.70 98 maps/wc3maps/losttemple.map 512 512 174 405 322 80 394.16 110 maps/wc3maps/losttemple.map 512 512 91 286 438 113 441.77 108 maps/wc3maps/losttemple.map 512 512 433 296 61 444 433.30 86 maps/wc3maps/losttemple.map 512 512 319 205 95 421 346.90 97 maps/wc3maps/losttemple.map 512 512 411 135 104 313 388.93 87 maps/wc3maps/losttemple.map 512 512 262 110 213 390 350.78 84 maps/wc3maps/losttemple.map 512 512 290 124 184 393 339.41 84 maps/wc3maps/losttemple.map 512 512 153 344 340 97 339.10 105 maps/wc3maps/losttemple.map 512 512 94 420 347 128 420.81 98 maps/wc3maps/losttemple.map 512 512 421 163 89 266 394.87 101 maps/wc3maps/losttemple.map 512 512 149 363 434 110 407.37 117 maps/wc3maps/losttemple.map 512 512 432 182 64 430 470.72 98 maps/wc3maps/losttemple.map 512 512 83 375 296 125 394.99 100 maps/wc3maps/losttemple.map 512 512 266 419 429 86 400.52 98 maps/wc3maps/losttemple.map 512 512 322 150 80 421 393.50 96 maps/wc3maps/losttemple.map 512 512 126 317 406 105 386.56 96 maps/wc3maps/losttemple.map 512 512 382 130 96 267 386.91 114 maps/wc3maps/losttemple.map 512 512 317 109 59 425 456.20 104 maps/wc3maps/losttemple.map 512 512 411 106 128 361 418.50 96 maps/wc3maps/losttemple.map 512 512 348 76 294 426 386.45 95 maps/wc3maps/losttemple.map 512 512 98 246 401 201 383.92 110 maps/wc3maps/losttemple.map 512 512 159 343 446 63 443.98 96 maps/wc3maps/losttemple.map 512 512 204 443 286 106 385.75 105 maps/wc3maps/losttemple.map 512 512 406 118 166 434 420.68 116 maps/wc3maps/losttemple.map 512 512 393 129 92 437 466.65 110 maps/wc3maps/losttemple.map 512 512 159 449 314 83 442.20 98 maps/wc3maps/losttemple.map 512 512 212 398 286 73 395.41 103 maps/wc3maps/losttemple.map 512 512 135 322 422 81 415.53 113 maps/wc3maps/losttemple.map 512 512 341 153 66 448 455.27 109 maps/wc3maps/losttemple.map 512 512 76 287 432 133 439.71 95 maps/wc3maps/losttemple.map 512 512 289 123 214 379 380.54 98 maps/wc3maps/losttemple.map 512 512 108 263 369 147 392.45 124 maps/wc3maps/losttemple.map 512 512 349 65 82 439 499.24 103 maps/wc3maps/losttemple.map 512 512 79 337 354 69 415.30 97 maps/wc3maps/losttemple.map 512 512 113 355 352 81 391.74 95 maps/wc3maps/losttemple.map 512 512 108 330 402 138 381.73 120 maps/wc3maps/losttemple.map 512 512 72 427 339 72 480.24 103 maps/wc3maps/losttemple.map 512 512 292 445 291 67 415.69 106 maps/wc3maps/losttemple.map 512 512 418 87 329 425 425.07 102 maps/wc3maps/losttemple.map 512 512 177 432 416 130 409.78 99 maps/wc3maps/losttemple.map 512 512 315 73 222 401 399.49 113 maps/wc3maps/losttemple.map 512 512 412 120 90 369 453.68 108 maps/wc3maps/losttemple.map 512 512 251 85 57 434 432.87 110 maps/wc3maps/losttemple.map 512 512 114 253 435 140 443.81 107 maps/wc3maps/losttemple.map 512 512 427 123 115 272 428.87 97 maps/wc3maps/losttemple.map 512 512 435 64 198 332 388.43 102 maps/wc3maps/losttemple.map 512 512 394 239 63 425 408.04 102 maps/wc3maps/losttemple.map 512 512 429 71 313 399 409.59 97 maps/wc3maps/losttemple.map 512 512 428 108 183 393 391.75 105 maps/wc3maps/losttemple.map 512 512 70 402 401 207 421.91 101 maps/wc3maps/losttemple.map 512 512 80 383 430 255 405.36 108 maps/wc3maps/losttemple.map 512 512 77 446 318 126 434.47 101 maps/wc3maps/losttemple.map 512 512 323 161 85 439 405.87 101 maps/wc3maps/losttemple.map 512 512 413 151 104 259 404.76 106 maps/wc3maps/losttemple.map 512 512 96 373 319 71 424.87 114 maps/wc3maps/losttemple.map 512 512 304 96 56 430 458.98 106 maps/wc3maps/losttemple.map 512 512 59 425 425 278 426.89 102 maps/wc3maps/losttemple.map 512 512 77 426 406 256 410.19 99 maps/wc3maps/losttemple.map 512 512 182 428 409 128 399.30 99 maps/wc3maps/losttemple.map 512 512 81 378 292 99 399.20 113 maps/wc3maps/losttemple.map 512 512 93 453 303 105 455.49 101 maps/wc3maps/losttemple.map 512 512 68 420 324 144 407.23 113 maps/wc3maps/losttemple.map 512 512 443 103 148 388 454.38 108 maps/wc3maps/losttemple.map 512 512 426 205 70 395 434.70 111 maps/wc3maps/losttemple.map 512 512 343 76 175 445 444.69 119 maps/wc3maps/losttemple.map 512 512 439 93 67 326 476.71 122 maps/wc3maps/losttemple.map 512 512 81 426 430 123 490.91 103 maps/wc3maps/losttemple.map 512 512 283 81 71 380 413.76 108 maps/wc3maps/losttemple.map 512 512 66 442 329 131 435.17 105 maps/wc3maps/losttemple.map 512 512 107 407 436 184 423.71 112 maps/wc3maps/losttemple.map 512 512 364 79 88 389 450.68 102 maps/wc3maps/losttemple.map 512 512 65 325 429 213 410.39 116 maps/wc3maps/losttemple.map 512 512 95 442 329 89 464.57 105 maps/wc3maps/losttemple.map 512 512 310 99 148 431 420.86 104 maps/wc3maps/losttemple.map 512 512 71 419 414 235 419.22 102 maps/wc3maps/losttemple.map 512 512 440 79 168 345 410.88 112 maps/wc3maps/losttemple.map 512 512 214 384 442 73 450.33 102 maps/wc3maps/losttemple.map 512 512 363 150 104 362 410.14 107 maps/wc3maps/losttemple.map 512 512 308 112 344 455 428.42 108 maps/wc3maps/losttemple.map 512 512 421 104 239 373 434.04 109 maps/wc3maps/losttemple.map 512 512 383 141 78 400 438.06 104 maps/wc3maps/losttemple.map 512 512 99 439 416 238 416.66 104 maps/wc3maps/losttemple.map 512 512 444 102 154 361 416.61 105 maps/wc3maps/losttemple.map 512 512 363 83 140 267 422.24 111 maps/wc3maps/losttemple.map 512 512 300 92 65 430 447.64 103 maps/wc3maps/losttemple.map 512 512 74 230 438 109 414.12 106 maps/wc3maps/losttemple.map 512 512 433 74 300 430 426.83 120 maps/wc3maps/losttemple.map 512 512 446 62 81 270 482.20 106 maps/wc3maps/losttemple.map 512 512 93 427 385 158 425.68 106 maps/wc3maps/losttemple.map 512 512 79 331 414 130 426.46 111 maps/wc3maps/losttemple.map 512 512 438 75 142 357 445.03 114 maps/wc3maps/losttemple.map 512 512 429 201 66 429 457.44 109 maps/wc3maps/losttemple.map 512 512 139 399 433 139 436.16 103 maps/wc3maps/losttemple.map 512 512 242 437 319 76 412.98 110 maps/wc3maps/losttemple.map 512 512 68 434 334 115 443.83 114 maps/wc3maps/losttemple.map 512 512 98 427 343 86 457.13 121 maps/wc3maps/losttemple.map 512 512 424 80 63 329 486.98 111 maps/wc3maps/losttemple.map 512 512 323 76 101 414 445.19 106 maps/wc3maps/losttemple.map 512 512 364 150 105 404 425.54 113 maps/wc3maps/losttemple.map 512 512 65 446 445 281 455.66 107 maps/wc3maps/losttemple.map 512 512 440 73 261 429 430.14 109 maps/wc3maps/losttemple.map 512 512 420 112 115 383 438.34 106 maps/wc3maps/losttemple.map 512 512 93 300 431 116 425.73 109 maps/wc3maps/losttemple.map 512 512 435 74 215 399 438.63 118 maps/wc3maps/losttemple.map 512 512 194 441 441 73 475.58 112 maps/wc3maps/losttemple.map 512 512 409 199 60 444 451.07 127 maps/wc3maps/losttemple.map 512 512 444 91 85 413 511.71 112 maps/wc3maps/losttemple.map 512 512 424 211 74 442 449.20 113 maps/wc3maps/losttemple.map 512 512 311 67 76 422 455.27 110 maps/wc3maps/losttemple.map 512 512 110 311 432 74 441.84 114 maps/wc3maps/losttemple.map 512 512 434 93 110 356 456.96 127 maps/wc3maps/losttemple.map 512 512 435 70 113 409 508.01 108 maps/wc3maps/losttemple.map 512 512 307 106 69 399 432.00 115 maps/wc3maps/losttemple.map 512 512 122 256 435 103 463.47 110 maps/wc3maps/losttemple.map 512 512 428 112 109 374 443.93 112 maps/wc3maps/losttemple.map 512 512 70 378 333 80 450.29 117 maps/wc3maps/losttemple.map 512 512 447 108 112 247 469.55 110 maps/wc3maps/losttemple.map 512 512 435 122 155 430 443.70 124 maps/wc3maps/losttemple.map 512 512 430 75 98 390 499.38 124 maps/wc3maps/losttemple.map 512 512 418 118 71 438 498.29 127 maps/wc3maps/losttemple.map 512 512 422 73 89 396 509.55 127 maps/wc3maps/losttemple.map 512 512 70 441 409 107 508.39 123 maps/wc3maps/losttemple.map 512 512 110 240 433 65 492.42 111 maps/wc3maps/losttemple.map 512 512 351 101 75 416 447.48 111 maps/wc3maps/losttemple.map 512 512 358 65 100 376 446.47 107 maps/wc3maps/losttemple.map 512 512 402 254 58 442 430.98 123 maps/wc3maps/losttemple.map 512 512 414 84 99 402 493.28 110 maps/wc3maps/losttemple.map 512 512 417 133 73 346 440.43 109 maps/wc3maps/losttemple.map 512 512 307 101 75 423 438.60 105 maps/wc3maps/losttemple.map 512 512 325 163 58 443 422.23 113 maps/wc3maps/losttemple.map 512 512 418 93 181 444 454.44 107 maps/wc3maps/losttemple.map 512 512 424 92 86 263 430.65 112 maps/wc3maps/losttemple.map 512 512 105 329 437 79 451.37 125 maps/wc3maps/losttemple.map 512 512 82 387 433 87 503.38 107 maps/wc3maps/losttemple.map 512 512 87 418 306 94 430.53 114 maps/wc3maps/losttemple.map 512 512 408 128 84 406 457.90 108 maps/wc3maps/losttemple.map 512 512 433 219 84 422 433.09 109 maps/wc3maps/losttemple.map 512 512 84 316 433 118 439.22 109 maps/wc3maps/losttemple.map 512 512 444 117 205 438 438.64 105 maps/wc3maps/losttemple.map 512 512 430 73 143 319 420.53 111 maps/wc3maps/losttemple.map 512 512 349 131 89 442 445.64 107 maps/wc3maps/losttemple.map 512 512 85 440 419 230 429.77 106 maps/wc3maps/losttemple.map 512 512 106 329 437 121 427.84 104 maps/wc3maps/losttemple.map 512 512 425 71 251 418 419.07 108 maps/wc3maps/losttemple.map 512 512 426 73 293 442 434.03 113 maps/wc3maps/losttemple.map 512 512 367 86 109 417 453.34 106 maps/wc3maps/losttemple.map 512 512 73 401 297 113 426.90 108 maps/wc3maps/losttemple.map 512 512 122 308 444 75 432.57 112 maps/wc3maps/losttemple.map 512 512 378 135 78 424 451.93 114 maps/wc3maps/losttemple.map 512 512 435 79 70 269 458.35 111 maps/wc3maps/losttemple.map 512 512 70 416 311 93 447.43 116 maps/wc3maps/losttemple.map 512 512 352 110 93 451 464.68 113 maps/wc3maps/losttemple.map 512 512 81 410 368 129 453.27 115 maps/wc3maps/losttemple.map 512 512 68 451 424 209 461.51 127 maps/wc3maps/losttemple.map 512 512 442 104 82 429 511.61 117 maps/wc3maps/losttemple.map 512 512 109 412 432 109 471.35 123 maps/wc3maps/losttemple.map 512 512 415 116 92 444 495.77 119 maps/wc3maps/losttemple.map 512 512 433 68 122 375 477.41 112 maps/wc3maps/losttemple.map 512 512 418 78 124 345 450.43 119 maps/wc3maps/losttemple.map 512 512 83 447 358 97 478.55 117 maps/wc3maps/losttemple.map 512 512 84 405 421 125 469.38 111 maps/wc3maps/losttemple.map 512 512 441 93 93 263 446.62 116 maps/wc3maps/losttemple.map 512 512 422 158 65 382 466.19 115 maps/wc3maps/losttemple.map 512 512 319 109 64 440 460.68 123 maps/wc3maps/losttemple.map 512 512 71 327 431 69 492.06 116 maps/wc3maps/losttemple.map 512 512 103 381 430 100 465.65 118 maps/wc3maps/losttemple.map 512 512 125 404 416 88 475.58 118 maps/wc3maps/losttemple.map 512 512 313 82 74 446 475.88 117 maps/wc3maps/losttemple.map 512 512 117 411 423 106 471.87 119 maps/wc3maps/losttemple.map 512 512 414 119 80 420 479.18 127 maps/wc3maps/losttemple.map 512 512 431 114 64 420 510.15 127 maps/wc3maps/losttemple.map 512 512 420 76 84 399 511.97 121 maps/wc3maps/losttemple.map 512 512 75 429 399 115 485.70 117 maps/wc3maps/losttemple.map 512 512 364 78 78 411 470.80 121 maps/wc3maps/losttemple.map 512 512 433 93 101 403 485.01 121 maps/wc3maps/losttemple.map 512 512 434 79 121 401 485.62 117 maps/wc3maps/losttemple.map 512 512 436 87 177 443 468.55 119 maps/wc3maps/losttemple.map 512 512 72 298 441 80 477.16 127 maps/wc3maps/losttemple.map 512 512 73 335 445 62 511.44 120 maps/wc3maps/losttemple.map 512 512 437 114 84 384 481.24 119 maps/wc3maps/losttemple.map 512 512 426 82 64 316 479.43 124 maps/wc3maps/losttemple.map 512 512 426 84 87 386 498.07 118 maps/wc3maps/losttemple.map 512 512 440 134 86 381 472.71 116 maps/wc3maps/losttemple.map 512 512 68 447 342 108 467.14 117 maps/wc3maps/losttemple.map 512 512 417 162 75 434 471.65 115 maps/wc3maps/losttemple.map 512 512 73 384 406 126 460.96 116 maps/wc3maps/losttemple.map 512 512 400 115 89 417 467.72 122 maps/wc3maps/losttemple.map 512 512 444 74 174 446 489.11 120 maps/wc3maps/losttemple.map 512 512 124 399 441 81 483.28 127 maps/wc3maps/losttemple.map 512 512 70 447 412 112 510.64 121 maps/wc3maps/losttemple.map 512 512 136 260 444 102 484.88 116 maps/wc3maps/losttemple.map 512 512 65 433 357 101 467.60 116 maps/wc3maps/losttemple.map 512 512 95 427 411 126 465.87 119 maps/wc3maps/losttemple.map 512 512 118 401 420 84 476.07 119 maps/wc3maps/losttemple.map 512 512 376 127 66 440 479.38 119 maps/wc3maps/losttemple.map 512 512 87 371 419 101 477.75 118 maps/wc3maps/losttemple.map 512 512 424 130 83 409 472.97 122 maps/wc3maps/losttemple.map 512 512 138 275 444 115 491.81 124 maps/wc3maps/losttemple.map 512 512 419 85 95 414 498.60 124 maps/wc3maps/losttemple.map 512 512 432 70 161 452 499.52 118 maps/wc3maps/losttemple.map 512 512 380 129 67 438 475.55 118 maps/wc3maps/losttemple.map 512 512 80 443 441 187 474.65 123 maps/wc3maps/losttemple.map 512 512 357 75 70 437 495.52 115 maps/wc3maps/losttemple.map 512 512 412 164 73 426 463.93 115 maps/wc3maps/losttemple.map 512 512 420 84 103 240 463.37 115 maps/wc3maps/losttemple.map 512 512 440 79 85 276 462.86 127 maps/wc3maps/losttemple.map 512 512 423 91 77 415 511.84 122 maps/wc3maps/losttemple.map 512 512 416 86 115 408 489.62 118 maps/wc3maps/losttemple.map 512 512 70 397 421 137 475.10 115 maps/wc3maps/losttemple.map 512 512 432 94 117 393 463.45 122 maps/wc3maps/losttemple.map 512 512 89 283 443 61 489.71 115 maps/wc3maps/losttemple.map 512 512 440 115 76 332 462.09 121 maps/wc3maps/losttemple.map 512 512 162 449 442 85 485.25 ================================================ FILE: benchmark/test_cases.js ================================================ /** * the `select` field indicates which scenarios in the `scen` file are chosen * to be included in the benchmark. */ module.exports = [ { map: './map/64room_000.map', scen: './scen/64room_000.map.scen', select: [ 245, 1996 ] }, ] ================================================ FILE: docs/contributor-guide/authors.md ================================================ # Authors This is the alphabetically sorted list of contributors to PathFinding.js: Anders Riutta
Chris Khoo
Gerjo
Juan Pablo Canepa
Mat Gadd
Murilo Pereira
Nathan Witmer
rafaelcastrocouto
Raminder Singh
Ricardo Tomasi
Rodrigo Navarro
Rory O'Kane
Stuart Lee
surrim
Tapio Vierros
Thomas Hunter II
Willem Mulder
Xueqiao Xu ================================================ FILE: docs/contributor-guide/contributing.md ================================================ If you have added a new feature or fixed a bug please open a pull request. Don't forget to add yourself to the [list of contributors](https://github.com/qiao/PathFinding.js/blob/master/docs/contributor-guide/authors.md). ================================================ FILE: docs/contributor-guide/developing.md ================================================ ================================================ FILE: docs/custom.css ================================================ /*This is a hack to prevent mkdocs from creating useless subheadings in table of contents. E.g. If there is a page called introduction.md and it contains the following: # Introduction Blah Blah Blah Then mkdocs created a table of contents like this: Introduction Introduction This hack hides the second level heading */ .toctree-l2 { display: none; } ================================================ FILE: docs/index.md ================================================ #Welcome to PathFinding.js documentation Table of Contents * User Guide * [Introduction](./user-guide/introduction.md) * [Installation](./user-guide/installation.md) * [Getting Started](./user-guide/getting-started.md) * [Obstacles](./user-guide/obstacles.md) * [Diagonal Movement](./user-guide/diagonal-movement.md) * [FAQ](./user-guide/faq.md) * Contributor Guide * [Contributing](./contributor-guide/contributing.md) * [Developing](./contributor-guide/developing.md) * [Authors](./contributor-guide/authors.md) ================================================ FILE: docs/user-guide/diagonal-movement.md ================================================ # Diagonal Movement To disable diagonal movement you need to configure the finder. The finder takes a configuration object with an option called `diagonalMovement`. Setting this option to `DiagonalMovement.Never` will disable diagonal movement completely. Let us try it. ```javascript var finder = new PF.AStarFinder({ diagonalMovement: PF.DiagonalMovement.Never }); ``` See that the path is straight now: ![Screenshot](user-guide/images/DiagonalMovementDisabled.png) The `diagonalMovement` option can take any of the following values: * Always * Never * IfAtMostOneObstacle * OnlyWhenNoObstacles To understand them consider the following four simple maps labelled A, B, C and D. A has no obstacles for diagonal movement from green to orange cell, B and C have one obstacle and D has two obstacles. ![Screenshot](user-guide/images/DiagonalMaps.png) ## Always With this option PathFinding.js will always find a diagonal path, irrespective of the obstacles when moving diagonally. ![Screenshot](user-guide/images/AllMapsWithAPath.png) ## Never With this option PathFinding.js will only find straight paths and will never find any diagonal paths. ![Screenshot](user-guide/images/AllMapsWithStraightPaths.png) ## IfAtMostOneObstacle With this option PathFinding.js will find diagonal paths only if there is at most one obstacle for the diagonal path. ![Screenshot](user-guide/images/DiagonalPathsForAtMostOneObstacle.png) ## OnlyWhenNoObstacles With this option PathFinding.js will find diagonal paths only if there are no obstacles for the diagonal path. ![Screenshot](user-guide/images/DiagonalPathsForOnlyWhenNoObstacles.png) ================================================ FILE: docs/user-guide/faq.md ================================================ ================================================ FILE: docs/user-guide/getting-started.md ================================================ # Getting Started This section explains the basic usage of PathFinding.js. ## Importing in Node.js To import PathFinding.js in your file do: ```javascript var PF = require('pathfinding'); ``` ## Including in Browser To include PathFinding.js in your page, add a script tag to your page: ```html ``` ## Finding a Path To find a path you need a grid first. Create a 5 by 7 grid: ```javascript var grid = new PF.Grid(5, 7); ``` This will create a grid which is walkable all over. ![Screenshot](user-guide/images/5x7EmptyGrid.png) In this grid, the green cell at the top left is [0, 0] and the orange cell at the bottom right is [4, 6]. Now create an instance of a finder. There are many finders available in PathFinding.js but use the famous A* for now: ```javascript var finder = new PF.AStarFinder(); ``` Now find the path from the green cell to the orange cell: ```javascript var path = finder.findPath(0, 0, 4, 6, grid); ``` This will return the following path: ```javascript [[0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [4, 5], [4, 6]] ``` Which when plotted on the grid looks like: ![Screenshot](user-guide/images/5x7GridWithPath.png) ================================================ FILE: docs/user-guide/installation.md ================================================ # Installation This section describes how to install PathFinding.js. ## Using Package Managers PathFinding.js supports installation using npm and bower command line tools. ### For Server [Node.js](http://nodejs.org/) is an environment for running javascript on the server. [Download](http://nodejs.org/download/) and install Node.js for your OS and confirm that it works from the command line: ```bash node -v ``` If Node.js was installed correctly this should print the installed version of] Node.js. Node.js comes with a [Node Package Manager](https://www.npmjs.com/) command line tool called _npm_. It is used to install packages for Node.js. Check that it works: ```bash npm -v ``` This should print the installed version of npm. npm installs the packages in the current folder by default. Make sure you are in your project folder before continuing: ```bash cd ``` Now you are ready to install PathFinding.js. The npm command to install PathFinding.js is: ```bash npm install pathfinding ``` This will create a _node_modules_ folder inside the my_new_project folder. PathFinding.js is now installed in the _pathfinding_ folder inside the node_modules folder. ### For Client [Bower](http://bower.io/) is a front-end package manager. Install it by running the command: ```bash npm install -g bower ``` Confirm that you can run the bower command: ```bash bower -v ``` This should print the installed version of bower. Navigate to your project folder: ```bash cd ``` Install pathfinding: ```bash bower install pathfinding ``` This will create a _bower_components_ folder inside the my_new_project folder. PathFinding.js is now installed in the pathfinding folder inside the bower_components folder. ## Manual Installation If you want to use the latest development version you will have to install PathFinding.js manually. ### For Server [Download](https://github.com/qiao/PathFinding.js/archive/master.zip) the zip from github and extract the contents into the node_modules folder. Don't forget to rename the extracted folder from PathFinding.js-master to pathfinding. ### For Client [Download](https://github.com/qiao/PathFinding.js/archive/master.zip) the zip from github, extract it in a temporary folder and navigate to this folder: ```bash cd ``` Now install all the dependencies of PathFinding.js: ```bash npm install ``` Now compile the browser builds: ```bash gulp compile ``` This will create _pathfinding-browser.js_ and _pathfinding-browser.min.js_ files in the temp_folder/lib folder. You can use these files in your project now. ================================================ FILE: docs/user-guide/introduction.md ================================================ # Introduction PathFinding.js is a javascript library to find paths on a 2D square grid. It works in both node.js and browser environments. ```javascript //Walkability matrix. Zero is walkable, One is not var matrix = [ [0, 0, 0, 1, 0], [1, 0, 0, 0, 1], [0, 0, 1, 0, 0], ]; var grid = new PF.Grid(matrix); var finder = new PF.AStarFinder(); //Find path from (1, 2) to (4, 2) var path = finder.findPath(1, 2, 4, 2, grid); ``` ## Getting Help If you stumble upon a bug or don't understand some feature of PathFinding.js, open an issue in the [Issue Tracker](https://github.com/qiao/PathFinding.js/issues). Browsing the [source](https://github.com/qiao/PathFinding.js) might also help. A great visualization of the different pathfinding algorithms is available [here](http://qiao.github.io/PathFinding.js/visual/). ## License PathFinding.js is released under the [MIT License](http://opensource.org/licenses/mit-license.php). (c) 2011-2012 Xueqiao Xu Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: docs/user-guide/obstacles.md ================================================ # Obstacles A grid without any obstacles is boring. Let us create a grid with obstacles: ```javascript var walkabilityMatrix = [[0, 0, 0, 0, 0], [1, 1, 1, 1, 0], [0, 0, 0, 0, 0], [0, 1, 1, 1, 1], [0, 0, 0, 0, 0], [1, 1, 1, 1, 0], [0, 0, 0, 0, 0]]; var grid = new PF.Grid(matrix); ``` The _walkabilityMatrix_ defines which cells are walkable and which have obstacles. Ones are obstacles and zeroes are walkable. Alternatively, you can also set the obstacles on the grid by calling the `setWalkableAt` function: ```javascript var grid = new PF.Grid(5, 7); grid.setWalkableAt(0, 1, false); grid.setWalkableAt(1, 1, false); grid.setWalkableAt(2, 1, false); ... ``` After setting the obstacles the grid should look like this. ![Screenshot](user-guide/images/5x7GridWithObstacles.png) Let us find a path now. ```javascript var finder = new PF.AStarFinder(); var path = finder.findPath(0, 0, 4, 6, grid); ``` PathFinding.js will find the following path: ![Screenshot](user-guide/images/5x7GridWithObstaclesAndPath.png) Notice how the path moves diagonally where it can, thus making it shorter. This may not be always desirable and you may want to create a path without any diagonal movement. Read the next section to find out how to achieve that. ================================================ FILE: gulpfile.js ================================================ var gulp = require('gulp'), uglify = require('gulp-uglify'), rename = require('gulp-rename'), browserify = require('gulp-browserify'), concat = require('gulp-concat'), mocha = require('gulp-mocha'), shell = require('shelljs'), del = require('del'), jshint = require('gulp-jshint'), stylish = require('jshint-stylish'), semver = require('semver'), jsonfile = require('jsonfile'), inquirer = require("inquirer"), fs = require('fs'); gulp.task('clean', function(cb) { del('lib/**/*.*', cb); }); gulp.task('browserify', ['clean'], function(cb) { return gulp.src('./src/PathFinding.js') .pipe(browserify({ standalone: 'PF' })) .pipe(rename('pathfinding-browserified.js')) .pipe(gulp.dest('./lib/'), cb); }); gulp.task('uglify', ['browserify'], function(cb) { return gulp.src('./lib/pathfinding-browserified.js') .pipe(uglify()) .pipe(rename('pathfinding-browser.min.js')) .pipe(gulp.dest('./lib/'), cb); }); gulp.task('scripts', ['clean', 'browserify', 'uglify'], function(cb) { return gulp.src(['./src/banner', './lib/pathfinding-browserified.js']) .pipe(concat('pathfinding-browser.js')) .pipe(gulp.dest('./lib/'), cb); }); gulp.task('compile', ['scripts'], function() { del('./lib/pathfinding-browserified.js'); }); gulp.task('test', function () { return gulp.src('./test/**/*.js', {read: false}) .pipe(mocha({reporter: 'spec', bail: true, globals: { should: require('should') }})); }); gulp.task('bench', function() { shell.exec('node benchmark/benchmark.js'); }); gulp.task('lint', function() { return gulp.src('./src/**/*.js') .pipe(jshint()) .pipe(jshint.reporter(stylish)) .pipe(jshint.reporter('fail')); }); gulp.task('release', ['compile'], function(cb) { inquirer.prompt({ type: 'list', name: 'bumpType', message: 'Which version do you want to bump?', choices: ['patch', 'minor', 'major'], //default is patch default: 0 }, function (result) { var f = jsonfile.readFileSync('./package.json'); f.version = semver.inc(f.version, result.bumpType); jsonfile.writeFileSync('./package.json', f); shell.exec('git add .'); shell.exec('git commit -m "Bumping version to ' + f.version + '"'); shell.exec('git push origin master'); shell.exec('git tag -a ' + f.version + ' -m "Creating tag for version ' + f.version + '"'); shell.exec('git push origin ' + f.version); shell.exec('npm publish'); shell.exec('git clone https://github.com/imor/pathfinding-bower.git release'); process.chdir('release'); fs.writeFileSync('pathfinding-browser.js', fs.readFileSync('../lib/pathfinding-browser.js')); fs.writeFileSync('pathfinding-browser.min.js', fs.readFileSync('../lib/pathfinding-browser.min.js')); f = jsonfile.readFileSync('bower.json'); f.version = semver.inc(f.version, result.bumpType); jsonfile.writeFileSync('bower.json', f); shell.exec('git add .'); shell.exec('git commit -m "Bumping version to ' + f.version + '"'); shell.exec('git push origin master'); shell.exec('git tag -a ' + f.version + ' -m "Creating tag for version ' + f.version + '"'); shell.exec('git push origin ' + f.version); process.chdir('../'); del('release'); del('lib/**/*.*', cb); }); }); gulp.task('default', ['lint', 'test', 'compile'], function() { }); ================================================ FILE: index.js ================================================ module.exports = require('./src/PathFinding'); ================================================ FILE: mkdocs.yml ================================================ site_name: PathFinding.js repo_url: https://github.com/qiao/PathFinding.js site_description: PathFinding.js is a javascript library to find paths on a 2D square grid site_favicon: favicon.ico site_author: Raminder Singh pages: - [index.md, Home] - ['user-guide/introduction.md', 'User Guide', 'Introduction'] - ['user-guide/installation.md', 'User Guide', 'Installation'] - ['user-guide/getting-started.md', 'User Guide', 'Getting Started'] - ['user-guide/obstacles.md', 'User Guide', 'Obstacles'] - ['user-guide/diagonal-movement.md', 'User Guide', 'Diagonal Movement'] - ['user-guide/faq.md', 'User Guide', 'FAQ'] - ['contributor-guide/contributing.md', 'Contributor Guide', 'Contributing'] - ['contributor-guide/developing.md', 'Contributor Guide', 'Developing'] - ['contributor-guide/authors.md', 'Contributor Guide', 'Authors'] theme: readthedocs ================================================ FILE: package.json ================================================ {"name":"pathfinding","version":"0.4.18","description":"Comprehensive pathfinding library for grid based games","homepage":"https://github.com/qiao/PathFinding.js","keywords":["pathfinding","astar","dijkstra","game","algorithm","jumppoint","depthfirst","breadthfirst"],"author":"Xueqiao Xu ","main":"./index.js","dependencies":{"heap":"0.2.5"},"devDependencies":{"colors":"^1.0.3","del":"^0.1.3","gulp":"^3.8.10","gulp-browserify":"^0.5.0","gulp-concat":"^2.4.1","gulp-jshint":"^1.9.0","gulp-mocha":"^2.0.0","gulp-rename":"^1.2.0","gulp-uglify":"^1.0.1","inquirer":"^0.8.0","jshint-stylish":"^1.0.0","jsonfile":"^2.0.0","mocha":"2.0.x","semver":"^4.2.0","shelljs":"^0.3.0","should":"4.3.x"},"scripts":{"test":"gulp test"},"repository":{"type":"git","url":"git://github.com/qiao/PathFinding.js.git"},"licenses":[{"type":"MIT","url":"http://opensource.org/licenses/mit-license.php"}]} ================================================ FILE: src/PathFinding.js ================================================ module.exports = { 'Heap' : require('heap'), 'Node' : require('./core/Node'), 'Grid' : require('./core/Grid'), 'Util' : require('./core/Util'), 'DiagonalMovement' : require('./core/DiagonalMovement'), 'Heuristic' : require('./core/Heuristic'), 'AStarFinder' : require('./finders/AStarFinder'), 'BestFirstFinder' : require('./finders/BestFirstFinder'), 'BreadthFirstFinder' : require('./finders/BreadthFirstFinder'), 'DijkstraFinder' : require('./finders/DijkstraFinder'), 'BiAStarFinder' : require('./finders/BiAStarFinder'), 'BiBestFirstFinder' : require('./finders/BiBestFirstFinder'), 'BiBreadthFirstFinder' : require('./finders/BiBreadthFirstFinder'), 'BiDijkstraFinder' : require('./finders/BiDijkstraFinder'), 'IDAStarFinder' : require('./finders/IDAStarFinder'), 'JumpPointFinder' : require('./finders/JumpPointFinder'), }; ================================================ FILE: src/banner ================================================ /** * ____ _ _ _____ _ _ _ _ * | _ \ __ _| |_| |__ | ___(_)_ __ __| (_)_ __ __ _ (_)___ * | |_) / _` | __| '_ \| |_ | | '_ \ / _` | | '_ \ / _` | | / __| * | __/ (_| | |_| | | | _| | | | | | (_| | | | | | (_| |_ | \__ \ * |_| \__,_|\__|_| |_|_| |_|_| |_|\__,_|_|_| |_|\__, (_)/ |___/ * |___/ |__/ * https://github.com/qiao/PathFinding.js */ ================================================ FILE: src/core/DiagonalMovement.js ================================================ var DiagonalMovement = { Always: 1, Never: 2, IfAtMostOneObstacle: 3, OnlyWhenNoObstacles: 4 }; module.exports = DiagonalMovement; ================================================ FILE: src/core/Grid.js ================================================ var Node = require('./Node'); var DiagonalMovement = require('./DiagonalMovement'); /** * The Grid class, which serves as the encapsulation of the layout of the nodes. * @constructor * @param {number|Array>} width_or_matrix Number of columns of the grid, or matrix * @param {number} height Number of rows of the grid. * @param {Array>} [matrix] - A 0-1 matrix * representing the walkable status of the nodes(0 or false for walkable). * If the matrix is not supplied, all the nodes will be walkable. */ function Grid(width_or_matrix, height, matrix) { var width; if (typeof width_or_matrix !== 'object') { width = width_or_matrix; } else { height = width_or_matrix.length; width = width_or_matrix[0].length; matrix = width_or_matrix; } /** * The number of columns of the grid. * @type number */ this.width = width; /** * The number of rows of the grid. * @type number */ this.height = height; /** * A 2D array of nodes. */ this.nodes = this._buildNodes(width, height, matrix); } /** * Build and return the nodes. * @private * @param {number} width * @param {number} height * @param {Array>} [matrix] - A 0-1 matrix representing * the walkable status of the nodes. * @see Grid */ Grid.prototype._buildNodes = function(width, height, matrix) { var i, j, nodes = new Array(height); for (i = 0; i < height; ++i) { nodes[i] = new Array(width); for (j = 0; j < width; ++j) { nodes[i][j] = new Node(j, i); } } if (matrix === undefined) { return nodes; } if (matrix.length !== height || matrix[0].length !== width) { throw new Error('Matrix size does not fit'); } for (i = 0; i < height; ++i) { for (j = 0; j < width; ++j) { if (matrix[i][j]) { // 0, false, null will be walkable // while others will be un-walkable nodes[i][j].walkable = false; } } } return nodes; }; Grid.prototype.getNodeAt = function(x, y) { return this.nodes[y][x]; }; /** * Determine whether the node at the given position is walkable. * (Also returns false if the position is outside the grid.) * @param {number} x - The x coordinate of the node. * @param {number} y - The y coordinate of the node. * @return {boolean} - The walkability of the node. */ Grid.prototype.isWalkableAt = function(x, y) { return this.isInside(x, y) && this.nodes[y][x].walkable; }; /** * Determine whether the position is inside the grid. * XXX: `grid.isInside(x, y)` is wierd to read. * It should be `(x, y) is inside grid`, but I failed to find a better * name for this method. * @param {number} x * @param {number} y * @return {boolean} */ Grid.prototype.isInside = function(x, y) { return (x >= 0 && x < this.width) && (y >= 0 && y < this.height); }; /** * Set whether the node on the given position is walkable. * NOTE: throws exception if the coordinate is not inside the grid. * @param {number} x - The x coordinate of the node. * @param {number} y - The y coordinate of the node. * @param {boolean} walkable - Whether the position is walkable. */ Grid.prototype.setWalkableAt = function(x, y, walkable) { this.nodes[y][x].walkable = walkable; }; /** * Get the neighbors of the given node. * * offsets diagonalOffsets: * +---+---+---+ +---+---+---+ * | | 0 | | | 0 | | 1 | * +---+---+---+ +---+---+---+ * | 3 | | 1 | | | | | * +---+---+---+ +---+---+---+ * | | 2 | | | 3 | | 2 | * +---+---+---+ +---+---+---+ * * When allowDiagonal is true, if offsets[i] is valid, then * diagonalOffsets[i] and * diagonalOffsets[(i + 1) % 4] is valid. * @param {Node} node * @param {DiagonalMovement} diagonalMovement */ Grid.prototype.getNeighbors = function(node, diagonalMovement) { var x = node.x, y = node.y, neighbors = [], s0 = false, d0 = false, s1 = false, d1 = false, s2 = false, d2 = false, s3 = false, d3 = false, nodes = this.nodes; // ↑ if (this.isWalkableAt(x, y - 1)) { neighbors.push(nodes[y - 1][x]); s0 = true; } // → if (this.isWalkableAt(x + 1, y)) { neighbors.push(nodes[y][x + 1]); s1 = true; } // ↓ if (this.isWalkableAt(x, y + 1)) { neighbors.push(nodes[y + 1][x]); s2 = true; } // ← if (this.isWalkableAt(x - 1, y)) { neighbors.push(nodes[y][x - 1]); s3 = true; } if (diagonalMovement === DiagonalMovement.Never) { return neighbors; } if (diagonalMovement === DiagonalMovement.OnlyWhenNoObstacles) { d0 = s3 && s0; d1 = s0 && s1; d2 = s1 && s2; d3 = s2 && s3; } else if (diagonalMovement === DiagonalMovement.IfAtMostOneObstacle) { d0 = s3 || s0; d1 = s0 || s1; d2 = s1 || s2; d3 = s2 || s3; } else if (diagonalMovement === DiagonalMovement.Always) { d0 = true; d1 = true; d2 = true; d3 = true; } else { throw new Error('Incorrect value of diagonalMovement'); } // ↖ if (d0 && this.isWalkableAt(x - 1, y - 1)) { neighbors.push(nodes[y - 1][x - 1]); } // ↗ if (d1 && this.isWalkableAt(x + 1, y - 1)) { neighbors.push(nodes[y - 1][x + 1]); } // ↘ if (d2 && this.isWalkableAt(x + 1, y + 1)) { neighbors.push(nodes[y + 1][x + 1]); } // ↙ if (d3 && this.isWalkableAt(x - 1, y + 1)) { neighbors.push(nodes[y + 1][x - 1]); } return neighbors; }; /** * Get a clone of this grid. * @return {Grid} Cloned grid. */ Grid.prototype.clone = function() { var i, j, width = this.width, height = this.height, thisNodes = this.nodes, newGrid = new Grid(width, height), newNodes = new Array(height); for (i = 0; i < height; ++i) { newNodes[i] = new Array(width); for (j = 0; j < width; ++j) { newNodes[i][j] = new Node(j, i, thisNodes[i][j].walkable); } } newGrid.nodes = newNodes; return newGrid; }; module.exports = Grid; ================================================ FILE: src/core/Heuristic.js ================================================ /** * @namespace PF.Heuristic * @description A collection of heuristic functions. */ module.exports = { /** * Manhattan distance. * @param {number} dx - Difference in x. * @param {number} dy - Difference in y. * @return {number} dx + dy */ manhattan: function(dx, dy) { return dx + dy; }, /** * Euclidean distance. * @param {number} dx - Difference in x. * @param {number} dy - Difference in y. * @return {number} sqrt(dx * dx + dy * dy) */ euclidean: function(dx, dy) { return Math.sqrt(dx * dx + dy * dy); }, /** * Octile distance. * @param {number} dx - Difference in x. * @param {number} dy - Difference in y. * @return {number} sqrt(dx * dx + dy * dy) for grids */ octile: function(dx, dy) { var F = Math.SQRT2 - 1; return (dx < dy) ? F * dx + dy : F * dy + dx; }, /** * Chebyshev distance. * @param {number} dx - Difference in x. * @param {number} dy - Difference in y. * @return {number} max(dx, dy) */ chebyshev: function(dx, dy) { return Math.max(dx, dy); } }; ================================================ FILE: src/core/Node.js ================================================ /** * A node in grid. * This class holds some basic information about a node and custom * attributes may be added, depending on the algorithms' needs. * @constructor * @param {number} x - The x coordinate of the node on the grid. * @param {number} y - The y coordinate of the node on the grid. * @param {boolean} [walkable] - Whether this node is walkable. */ function Node(x, y, walkable) { /** * The x coordinate of the node on the grid. * @type number */ this.x = x; /** * The y coordinate of the node on the grid. * @type number */ this.y = y; /** * Whether this node can be walked through. * @type boolean */ this.walkable = (walkable === undefined ? true : walkable); } module.exports = Node; ================================================ FILE: src/core/Util.js ================================================ /** * Backtrace according to the parent records and return the path. * (including both start and end nodes) * @param {Node} node End node * @return {Array>} the path */ function backtrace(node) { var path = [[node.x, node.y]]; while (node.parent) { node = node.parent; path.push([node.x, node.y]); } return path.reverse(); } exports.backtrace = backtrace; /** * Backtrace from start and end node, and return the path. * (including both start and end nodes) * @param {Node} * @param {Node} */ function biBacktrace(nodeA, nodeB) { var pathA = backtrace(nodeA), pathB = backtrace(nodeB); return pathA.concat(pathB.reverse()); } exports.biBacktrace = biBacktrace; /** * Compute the length of the path. * @param {Array>} path The path * @return {number} The length of the path */ function pathLength(path) { var i, sum = 0, a, b, dx, dy; for (i = 1; i < path.length; ++i) { a = path[i - 1]; b = path[i]; dx = a[0] - b[0]; dy = a[1] - b[1]; sum += Math.sqrt(dx * dx + dy * dy); } return sum; } exports.pathLength = pathLength; /** * Given the start and end coordinates, return all the coordinates lying * on the line formed by these coordinates, based on Bresenham's algorithm. * http://en.wikipedia.org/wiki/Bresenham's_line_algorithm#Simplification * @param {number} x0 Start x coordinate * @param {number} y0 Start y coordinate * @param {number} x1 End x coordinate * @param {number} y1 End y coordinate * @return {Array>} The coordinates on the line */ function interpolate(x0, y0, x1, y1) { var abs = Math.abs, line = [], sx, sy, dx, dy, err, e2; dx = abs(x1 - x0); dy = abs(y1 - y0); sx = (x0 < x1) ? 1 : -1; sy = (y0 < y1) ? 1 : -1; err = dx - dy; while (true) { line.push([x0, y0]); if (x0 === x1 && y0 === y1) { break; } e2 = 2 * err; if (e2 > -dy) { err = err - dy; x0 = x0 + sx; } if (e2 < dx) { err = err + dx; y0 = y0 + sy; } } return line; } exports.interpolate = interpolate; /** * Given a compressed path, return a new path that has all the segments * in it interpolated. * @param {Array>} path The path * @return {Array>} expanded path */ function expandPath(path) { var expanded = [], len = path.length, coord0, coord1, interpolated, interpolatedLen, i, j; if (len < 2) { return expanded; } for (i = 0; i < len - 1; ++i) { coord0 = path[i]; coord1 = path[i + 1]; interpolated = interpolate(coord0[0], coord0[1], coord1[0], coord1[1]); interpolatedLen = interpolated.length; for (j = 0; j < interpolatedLen - 1; ++j) { expanded.push(interpolated[j]); } } expanded.push(path[len - 1]); return expanded; } exports.expandPath = expandPath; /** * Smoothen the give path. * The original path will not be modified; a new path will be returned. * @param {PF.Grid} grid * @param {Array>} path The path */ function smoothenPath(grid, path) { var len = path.length, x0 = path[0][0], // path start x y0 = path[0][1], // path start y x1 = path[len - 1][0], // path end x y1 = path[len - 1][1], // path end y sx, sy, // current start coordinate ex, ey, // current end coordinate newPath, i, j, coord, line, testCoord, blocked; sx = x0; sy = y0; newPath = [[sx, sy]]; for (i = 2; i < len; ++i) { coord = path[i]; ex = coord[0]; ey = coord[1]; line = interpolate(sx, sy, ex, ey); blocked = false; for (j = 1; j < line.length; ++j) { testCoord = line[j]; if (!grid.isWalkableAt(testCoord[0], testCoord[1])) { blocked = true; break; } } if (blocked) { lastValidCoord = path[i - 1]; newPath.push(lastValidCoord); sx = lastValidCoord[0]; sy = lastValidCoord[1]; } } newPath.push([x1, y1]); return newPath; } exports.smoothenPath = smoothenPath; /** * Compress a path, remove redundant nodes without altering the shape * The original path is not modified * @param {Array>} path The path * @return {Array>} The compressed path */ function compressPath(path) { // nothing to compress if(path.length < 3) { return path; } var compressed = [], sx = path[0][0], // start x sy = path[0][1], // start y px = path[1][0], // second point x py = path[1][1], // second point y dx = px - sx, // direction between the two points dy = py - sy, // direction between the two points lx, ly, ldx, ldy, sq, i; // normalize the direction sq = Math.sqrt(dx*dx + dy*dy); dx /= sq; dy /= sq; // start the new path compressed.push([sx,sy]); for(i = 2; i < path.length; i++) { // store the last point lx = px; ly = py; // store the last direction ldx = dx; ldy = dy; // next point px = path[i][0]; py = path[i][1]; // next direction dx = px - lx; dy = py - ly; // normalize sq = Math.sqrt(dx*dx + dy*dy); dx /= sq; dy /= sq; // if the direction has changed, store the point if ( dx !== ldx || dy !== ldy ) { compressed.push([lx,ly]); } } // store the last point compressed.push([px,py]); return compressed; } exports.compressPath = compressPath; ================================================ FILE: src/finders/AStarFinder.js ================================================ var Heap = require('heap'); var Util = require('../core/Util'); var Heuristic = require('../core/Heuristic'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * A* path-finder. Based upon https://github.com/bgrins/javascript-astar * @constructor * @param {Object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. * @param {function} opt.heuristic Heuristic function to estimate the distance * (defaults to manhattan). * @param {number} opt.weight Weight to apply to the heuristic to allow for * suboptimal paths, in order to speed up the search. */ function AStarFinder(opt) { opt = opt || {}; this.allowDiagonal = opt.allowDiagonal; this.dontCrossCorners = opt.dontCrossCorners; this.heuristic = opt.heuristic || Heuristic.manhattan; this.weight = opt.weight || 1; this.diagonalMovement = opt.diagonalMovement; if (!this.diagonalMovement) { if (!this.allowDiagonal) { this.diagonalMovement = DiagonalMovement.Never; } else { if (this.dontCrossCorners) { this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles; } else { this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle; } } } // When diagonal movement is allowed the manhattan heuristic is not //admissible. It should be octile instead if (this.diagonalMovement === DiagonalMovement.Never) { this.heuristic = opt.heuristic || Heuristic.manhattan; } else { this.heuristic = opt.heuristic || Heuristic.octile; } } /** * Find and return the the path. * @return {Array>} The path, including both start and * end positions. */ AStarFinder.prototype.findPath = function(startX, startY, endX, endY, grid) { var openList = new Heap(function(nodeA, nodeB) { return nodeA.f - nodeB.f; }), startNode = grid.getNodeAt(startX, startY), endNode = grid.getNodeAt(endX, endY), heuristic = this.heuristic, diagonalMovement = this.diagonalMovement, weight = this.weight, abs = Math.abs, SQRT2 = Math.SQRT2, node, neighbors, neighbor, i, l, x, y, ng; // set the `g` and `f` value of the start node to be 0 startNode.g = 0; startNode.f = 0; // push the start node into the open list openList.push(startNode); startNode.opened = true; // while the open list is not empty while (!openList.empty()) { // pop the position of node which has the minimum `f` value. node = openList.pop(); node.closed = true; // if reached the end position, construct the path and return it if (node === endNode) { return Util.backtrace(endNode); } // get neigbours of the current node neighbors = grid.getNeighbors(node, diagonalMovement); for (i = 0, l = neighbors.length; i < l; ++i) { neighbor = neighbors[i]; if (neighbor.closed) { continue; } x = neighbor.x; y = neighbor.y; // get the distance between current node and the neighbor // and calculate the next g score ng = node.g + ((x - node.x === 0 || y - node.y === 0) ? 1 : SQRT2); // check if the neighbor has not been inspected yet, or // can be reached with smaller cost from the current node if (!neighbor.opened || ng < neighbor.g) { neighbor.g = ng; neighbor.h = neighbor.h || weight * heuristic(abs(x - endX), abs(y - endY)); neighbor.f = neighbor.g + neighbor.h; neighbor.parent = node; if (!neighbor.opened) { openList.push(neighbor); neighbor.opened = true; } else { // the neighbor can be reached with smaller cost. // Since its f value has been updated, we have to // update its position in the open list openList.updateItem(neighbor); } } } // end for each neighbor } // end while not open list empty // fail to find the path return []; }; module.exports = AStarFinder; ================================================ FILE: src/finders/BestFirstFinder.js ================================================ var AStarFinder = require('./AStarFinder'); /** * Best-First-Search path-finder. * @constructor * @extends AStarFinder * @param {Object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. * @param {function} opt.heuristic Heuristic function to estimate the distance * (defaults to manhattan). */ function BestFirstFinder(opt) { AStarFinder.call(this, opt); var orig = this.heuristic; this.heuristic = function(dx, dy) { return orig(dx, dy) * 1000000; }; } BestFirstFinder.prototype = new AStarFinder(); BestFirstFinder.prototype.constructor = BestFirstFinder; module.exports = BestFirstFinder; ================================================ FILE: src/finders/BiAStarFinder.js ================================================ var Heap = require('heap'); var Util = require('../core/Util'); var Heuristic = require('../core/Heuristic'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * A* path-finder. * based upon https://github.com/bgrins/javascript-astar * @constructor * @param {Object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. * @param {function} opt.heuristic Heuristic function to estimate the distance * (defaults to manhattan). * @param {number} opt.weight Weight to apply to the heuristic to allow for * suboptimal paths, in order to speed up the search. */ function BiAStarFinder(opt) { opt = opt || {}; this.allowDiagonal = opt.allowDiagonal; this.dontCrossCorners = opt.dontCrossCorners; this.diagonalMovement = opt.diagonalMovement; this.heuristic = opt.heuristic || Heuristic.manhattan; this.weight = opt.weight || 1; if (!this.diagonalMovement) { if (!this.allowDiagonal) { this.diagonalMovement = DiagonalMovement.Never; } else { if (this.dontCrossCorners) { this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles; } else { this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle; } } } //When diagonal movement is allowed the manhattan heuristic is not admissible //It should be octile instead if (this.diagonalMovement === DiagonalMovement.Never) { this.heuristic = opt.heuristic || Heuristic.manhattan; } else { this.heuristic = opt.heuristic || Heuristic.octile; } } /** * Find and return the the path. * @return {Array>} The path, including both start and * end positions. */ BiAStarFinder.prototype.findPath = function(startX, startY, endX, endY, grid) { var cmp = function(nodeA, nodeB) { return nodeA.f - nodeB.f; }, startOpenList = new Heap(cmp), endOpenList = new Heap(cmp), startNode = grid.getNodeAt(startX, startY), endNode = grid.getNodeAt(endX, endY), heuristic = this.heuristic, diagonalMovement = this.diagonalMovement, weight = this.weight, abs = Math.abs, SQRT2 = Math.SQRT2, node, neighbors, neighbor, i, l, x, y, ng, BY_START = 1, BY_END = 2; // set the `g` and `f` value of the start node to be 0 // and push it into the start open list startNode.g = 0; startNode.f = 0; startOpenList.push(startNode); startNode.opened = BY_START; // set the `g` and `f` value of the end node to be 0 // and push it into the open open list endNode.g = 0; endNode.f = 0; endOpenList.push(endNode); endNode.opened = BY_END; // while both the open lists are not empty while (!startOpenList.empty() && !endOpenList.empty()) { // pop the position of start node which has the minimum `f` value. node = startOpenList.pop(); node.closed = true; // get neigbours of the current node neighbors = grid.getNeighbors(node, diagonalMovement); for (i = 0, l = neighbors.length; i < l; ++i) { neighbor = neighbors[i]; if (neighbor.closed) { continue; } if (neighbor.opened === BY_END) { return Util.biBacktrace(node, neighbor); } x = neighbor.x; y = neighbor.y; // get the distance between current node and the neighbor // and calculate the next g score ng = node.g + ((x - node.x === 0 || y - node.y === 0) ? 1 : SQRT2); // check if the neighbor has not been inspected yet, or // can be reached with smaller cost from the current node if (!neighbor.opened || ng < neighbor.g) { neighbor.g = ng; neighbor.h = neighbor.h || weight * heuristic(abs(x - endX), abs(y - endY)); neighbor.f = neighbor.g + neighbor.h; neighbor.parent = node; if (!neighbor.opened) { startOpenList.push(neighbor); neighbor.opened = BY_START; } else { // the neighbor can be reached with smaller cost. // Since its f value has been updated, we have to // update its position in the open list startOpenList.updateItem(neighbor); } } } // end for each neighbor // pop the position of end node which has the minimum `f` value. node = endOpenList.pop(); node.closed = true; // get neigbours of the current node neighbors = grid.getNeighbors(node, diagonalMovement); for (i = 0, l = neighbors.length; i < l; ++i) { neighbor = neighbors[i]; if (neighbor.closed) { continue; } if (neighbor.opened === BY_START) { return Util.biBacktrace(neighbor, node); } x = neighbor.x; y = neighbor.y; // get the distance between current node and the neighbor // and calculate the next g score ng = node.g + ((x - node.x === 0 || y - node.y === 0) ? 1 : SQRT2); // check if the neighbor has not been inspected yet, or // can be reached with smaller cost from the current node if (!neighbor.opened || ng < neighbor.g) { neighbor.g = ng; neighbor.h = neighbor.h || weight * heuristic(abs(x - startX), abs(y - startY)); neighbor.f = neighbor.g + neighbor.h; neighbor.parent = node; if (!neighbor.opened) { endOpenList.push(neighbor); neighbor.opened = BY_END; } else { // the neighbor can be reached with smaller cost. // Since its f value has been updated, we have to // update its position in the open list endOpenList.updateItem(neighbor); } } } // end for each neighbor } // end while not open list empty // fail to find the path return []; }; module.exports = BiAStarFinder; ================================================ FILE: src/finders/BiBestFirstFinder.js ================================================ var BiAStarFinder = require('./BiAStarFinder'); /** * Bi-direcitional Best-First-Search path-finder. * @constructor * @extends BiAStarFinder * @param {Object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. * @param {function} opt.heuristic Heuristic function to estimate the distance * (defaults to manhattan). */ function BiBestFirstFinder(opt) { BiAStarFinder.call(this, opt); var orig = this.heuristic; this.heuristic = function(dx, dy) { return orig(dx, dy) * 1000000; }; } BiBestFirstFinder.prototype = new BiAStarFinder(); BiBestFirstFinder.prototype.constructor = BiBestFirstFinder; module.exports = BiBestFirstFinder; ================================================ FILE: src/finders/BiBreadthFirstFinder.js ================================================ var Util = require('../core/Util'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * Bi-directional Breadth-First-Search path finder. * @constructor * @param {object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. */ function BiBreadthFirstFinder(opt) { opt = opt || {}; this.allowDiagonal = opt.allowDiagonal; this.dontCrossCorners = opt.dontCrossCorners; this.diagonalMovement = opt.diagonalMovement; if (!this.diagonalMovement) { if (!this.allowDiagonal) { this.diagonalMovement = DiagonalMovement.Never; } else { if (this.dontCrossCorners) { this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles; } else { this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle; } } } } /** * Find and return the the path. * @return {Array>} The path, including both start and * end positions. */ BiBreadthFirstFinder.prototype.findPath = function(startX, startY, endX, endY, grid) { var startNode = grid.getNodeAt(startX, startY), endNode = grid.getNodeAt(endX, endY), startOpenList = [], endOpenList = [], neighbors, neighbor, node, diagonalMovement = this.diagonalMovement, BY_START = 0, BY_END = 1, i, l; // push the start and end nodes into the queues startOpenList.push(startNode); startNode.opened = true; startNode.by = BY_START; endOpenList.push(endNode); endNode.opened = true; endNode.by = BY_END; // while both the queues are not empty while (startOpenList.length && endOpenList.length) { // expand start open list node = startOpenList.shift(); node.closed = true; neighbors = grid.getNeighbors(node, diagonalMovement); for (i = 0, l = neighbors.length; i < l; ++i) { neighbor = neighbors[i]; if (neighbor.closed) { continue; } if (neighbor.opened) { // if this node has been inspected by the reversed search, // then a path is found. if (neighbor.by === BY_END) { return Util.biBacktrace(node, neighbor); } continue; } startOpenList.push(neighbor); neighbor.parent = node; neighbor.opened = true; neighbor.by = BY_START; } // expand end open list node = endOpenList.shift(); node.closed = true; neighbors = grid.getNeighbors(node, diagonalMovement); for (i = 0, l = neighbors.length; i < l; ++i) { neighbor = neighbors[i]; if (neighbor.closed) { continue; } if (neighbor.opened) { if (neighbor.by === BY_START) { return Util.biBacktrace(neighbor, node); } continue; } endOpenList.push(neighbor); neighbor.parent = node; neighbor.opened = true; neighbor.by = BY_END; } } // fail to find the path return []; }; module.exports = BiBreadthFirstFinder; ================================================ FILE: src/finders/BiDijkstraFinder.js ================================================ var BiAStarFinder = require('./BiAStarFinder'); /** * Bi-directional Dijkstra path-finder. * @constructor * @extends BiAStarFinder * @param {Object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. */ function BiDijkstraFinder(opt) { BiAStarFinder.call(this, opt); this.heuristic = function(dx, dy) { return 0; }; } BiDijkstraFinder.prototype = new BiAStarFinder(); BiDijkstraFinder.prototype.constructor = BiDijkstraFinder; module.exports = BiDijkstraFinder; ================================================ FILE: src/finders/BreadthFirstFinder.js ================================================ var Util = require('../core/Util'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * Breadth-First-Search path finder. * @constructor * @param {Object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. */ function BreadthFirstFinder(opt) { opt = opt || {}; this.allowDiagonal = opt.allowDiagonal; this.dontCrossCorners = opt.dontCrossCorners; this.diagonalMovement = opt.diagonalMovement; if (!this.diagonalMovement) { if (!this.allowDiagonal) { this.diagonalMovement = DiagonalMovement.Never; } else { if (this.dontCrossCorners) { this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles; } else { this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle; } } } } /** * Find and return the the path. * @return {Array>} The path, including both start and * end positions. */ BreadthFirstFinder.prototype.findPath = function(startX, startY, endX, endY, grid) { var openList = [], diagonalMovement = this.diagonalMovement, startNode = grid.getNodeAt(startX, startY), endNode = grid.getNodeAt(endX, endY), neighbors, neighbor, node, i, l; // push the start pos into the queue openList.push(startNode); startNode.opened = true; // while the queue is not empty while (openList.length) { // take the front node from the queue node = openList.shift(); node.closed = true; // reached the end position if (node === endNode) { return Util.backtrace(endNode); } neighbors = grid.getNeighbors(node, diagonalMovement); for (i = 0, l = neighbors.length; i < l; ++i) { neighbor = neighbors[i]; // skip this neighbor if it has been inspected before if (neighbor.closed || neighbor.opened) { continue; } openList.push(neighbor); neighbor.opened = true; neighbor.parent = node; } } // fail to find the path return []; }; module.exports = BreadthFirstFinder; ================================================ FILE: src/finders/DijkstraFinder.js ================================================ var AStarFinder = require('./AStarFinder'); /** * Dijkstra path-finder. * @constructor * @extends AStarFinder * @param {Object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. */ function DijkstraFinder(opt) { AStarFinder.call(this, opt); this.heuristic = function(dx, dy) { return 0; }; } DijkstraFinder.prototype = new AStarFinder(); DijkstraFinder.prototype.constructor = DijkstraFinder; module.exports = DijkstraFinder; ================================================ FILE: src/finders/IDAStarFinder.js ================================================ var Util = require('../core/Util'); var Heuristic = require('../core/Heuristic'); var Node = require('../core/Node'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * Iterative Deeping A Star (IDA*) path-finder. * * Recursion based on: * http://www.apl.jhu.edu/~hall/AI-Programming/IDA-Star.html * * Path retracing based on: * V. Nageshwara Rao, Vipin Kumar and K. Ramesh * "A Parallel Implementation of Iterative-Deeping-A*", January 1987. * ftp://ftp.cs.utexas.edu/.snapshot/hourly.1/pub/AI-Lab/tech-reports/UT-AI-TR-87-46.pdf * * @author Gerard Meier (www.gerardmeier.com) * * @constructor * @param {Object} opt * @param {boolean} opt.allowDiagonal Whether diagonal movement is allowed. * Deprecated, use diagonalMovement instead. * @param {boolean} opt.dontCrossCorners Disallow diagonal movement touching * block corners. Deprecated, use diagonalMovement instead. * @param {DiagonalMovement} opt.diagonalMovement Allowed diagonal movement. * @param {function} opt.heuristic Heuristic function to estimate the distance * (defaults to manhattan). * @param {number} opt.weight Weight to apply to the heuristic to allow for * suboptimal paths, in order to speed up the search. * @param {boolean} opt.trackRecursion Whether to track recursion for * statistical purposes. * @param {number} opt.timeLimit Maximum execution time. Use <= 0 for infinite. */ function IDAStarFinder(opt) { opt = opt || {}; this.allowDiagonal = opt.allowDiagonal; this.dontCrossCorners = opt.dontCrossCorners; this.diagonalMovement = opt.diagonalMovement; this.heuristic = opt.heuristic || Heuristic.manhattan; this.weight = opt.weight || 1; this.trackRecursion = opt.trackRecursion || false; this.timeLimit = opt.timeLimit || Infinity; // Default: no time limit. if (!this.diagonalMovement) { if (!this.allowDiagonal) { this.diagonalMovement = DiagonalMovement.Never; } else { if (this.dontCrossCorners) { this.diagonalMovement = DiagonalMovement.OnlyWhenNoObstacles; } else { this.diagonalMovement = DiagonalMovement.IfAtMostOneObstacle; } } } // When diagonal movement is allowed the manhattan heuristic is not // admissible, it should be octile instead if (this.diagonalMovement === DiagonalMovement.Never) { this.heuristic = opt.heuristic || Heuristic.manhattan; } else { this.heuristic = opt.heuristic || Heuristic.octile; } } /** * Find and return the the path. When an empty array is returned, either * no path is possible, or the maximum execution time is reached. * * @return {Array>} The path, including both start and * end positions. */ IDAStarFinder.prototype.findPath = function(startX, startY, endX, endY, grid) { // Used for statistics: var nodesVisited = 0; // Execution time limitation: var startTime = new Date().getTime(); // Heuristic helper: var h = function(a, b) { return this.heuristic(Math.abs(b.x - a.x), Math.abs(b.y - a.y)); }.bind(this); // Step cost from a to b: var cost = function(a, b) { return (a.x === b.x || a.y === b.y) ? 1 : Math.SQRT2; }; /** * IDA* search implementation. * * @param {Node} The node currently expanding from. * @param {number} Cost to reach the given node. * @param {number} Maximum search depth (cut-off value). * @param {Array>} The found route. * @param {number} Recursion depth. * * @return {Object} either a number with the new optimal cut-off depth, * or a valid node instance, in which case a path was found. */ var search = function(node, g, cutoff, route, depth) { nodesVisited++; // Enforce timelimit: if (this.timeLimit > 0 && new Date().getTime() - startTime > this.timeLimit * 1000) { // Enforced as "path-not-found". return Infinity; } var f = g + h(node, end) * this.weight; // We've searched too deep for this iteration. if (f > cutoff) { return f; } if (node == end) { route[depth] = [node.x, node.y]; return node; } var min, t, k, neighbour; var neighbours = grid.getNeighbors(node, this.diagonalMovement); // Sort the neighbours, gives nicer paths. But, this deviates // from the original algorithm - so I left it out. //neighbours.sort(function(a, b){ // return h(a, end) - h(b, end); //}); /*jshint -W084 *///Disable warning: Expected a conditional expression and instead saw an assignment for (k = 0, min = Infinity; neighbour = neighbours[k]; ++k) { /*jshint +W084 *///Enable warning: Expected a conditional expression and instead saw an assignment if (this.trackRecursion) { // Retain a copy for visualisation. Due to recursion, this // node may be part of other paths too. neighbour.retainCount = neighbour.retainCount + 1 || 1; if(neighbour.tested !== true) { neighbour.tested = true; } } t = search(neighbour, g + cost(node, neighbour), cutoff, route, depth + 1); if (t instanceof Node) { route[depth] = [node.x, node.y]; // For a typical A* linked list, this would work: // neighbour.parent = node; return t; } // Decrement count, then determine whether it's actually closed. if (this.trackRecursion && (--neighbour.retainCount) === 0) { neighbour.tested = false; } if (t < min) { min = t; } } return min; }.bind(this); // Node instance lookups: var start = grid.getNodeAt(startX, startY); var end = grid.getNodeAt(endX, endY); // Initial search depth, given the typical heuristic contraints, // there should be no cheaper route possible. var cutOff = h(start, end); var j, route, t; // With an overflow protection. for (j = 0; true; ++j) { route = []; // Search till cut-off depth: t = search(start, 0, cutOff, route, 0); // Route not possible, or not found in time limit. if (t === Infinity) { return []; } // If t is a node, it's also the end node. Route is now // populated with a valid path to the end node. if (t instanceof Node) { return route; } // Try again, this time with a deeper cut-off. The t score // is the closest we got to the end node. cutOff = t; } // This _should_ never to be reached. return []; }; module.exports = IDAStarFinder; ================================================ FILE: src/finders/JPFAlwaysMoveDiagonally.js ================================================ /** * @author imor / https://github.com/imor */ var JumpPointFinderBase = require('./JumpPointFinderBase'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * Path finder using the Jump Point Search algorithm which always moves * diagonally irrespective of the number of obstacles. */ function JPFAlwaysMoveDiagonally(opt) { JumpPointFinderBase.call(this, opt); } JPFAlwaysMoveDiagonally.prototype = new JumpPointFinderBase(); JPFAlwaysMoveDiagonally.prototype.constructor = JPFAlwaysMoveDiagonally; /** * Search recursively in the direction (parent -> child), stopping only when a * jump point is found. * @protected * @return {Array>} The x, y coordinate of the jump point * found, or null if not found */ JPFAlwaysMoveDiagonally.prototype._jump = function(x, y, px, py) { var grid = this.grid, dx = x - px, dy = y - py; if (!grid.isWalkableAt(x, y)) { return null; } if(this.trackJumpRecursion === true) { grid.getNodeAt(x, y).tested = true; } if (grid.getNodeAt(x, y) === this.endNode) { return [x, y]; } // check for forced neighbors // along the diagonal if (dx !== 0 && dy !== 0) { if ((grid.isWalkableAt(x - dx, y + dy) && !grid.isWalkableAt(x - dx, y)) || (grid.isWalkableAt(x + dx, y - dy) && !grid.isWalkableAt(x, y - dy))) { return [x, y]; } // when moving diagonally, must check for vertical/horizontal jump points if (this._jump(x + dx, y, x, y) || this._jump(x, y + dy, x, y)) { return [x, y]; } } // horizontally/vertically else { if( dx !== 0 ) { // moving along x if((grid.isWalkableAt(x + dx, y + 1) && !grid.isWalkableAt(x, y + 1)) || (grid.isWalkableAt(x + dx, y - 1) && !grid.isWalkableAt(x, y - 1))) { return [x, y]; } } else { if((grid.isWalkableAt(x + 1, y + dy) && !grid.isWalkableAt(x + 1, y)) || (grid.isWalkableAt(x - 1, y + dy) && !grid.isWalkableAt(x - 1, y))) { return [x, y]; } } } return this._jump(x + dx, y + dy, x, y); }; /** * Find the neighbors for the given node. If the node has a parent, * prune the neighbors based on the jump point search algorithm, otherwise * return all available neighbors. * @return {Array>} The neighbors found. */ JPFAlwaysMoveDiagonally.prototype._findNeighbors = function(node) { var parent = node.parent, x = node.x, y = node.y, grid = this.grid, px, py, nx, ny, dx, dy, neighbors = [], neighborNodes, neighborNode, i, l; // directed pruning: can ignore most neighbors, unless forced. if (parent) { px = parent.x; py = parent.y; // get the normalized direction of travel dx = (x - px) / Math.max(Math.abs(x - px), 1); dy = (y - py) / Math.max(Math.abs(y - py), 1); // search diagonally if (dx !== 0 && dy !== 0) { if (grid.isWalkableAt(x, y + dy)) { neighbors.push([x, y + dy]); } if (grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y]); } if (grid.isWalkableAt(x + dx, y + dy)) { neighbors.push([x + dx, y + dy]); } if (!grid.isWalkableAt(x - dx, y)) { neighbors.push([x - dx, y + dy]); } if (!grid.isWalkableAt(x, y - dy)) { neighbors.push([x + dx, y - dy]); } } // search horizontally/vertically else { if(dx === 0) { if (grid.isWalkableAt(x, y + dy)) { neighbors.push([x, y + dy]); } if (!grid.isWalkableAt(x + 1, y)) { neighbors.push([x + 1, y + dy]); } if (!grid.isWalkableAt(x - 1, y)) { neighbors.push([x - 1, y + dy]); } } else { if (grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y]); } if (!grid.isWalkableAt(x, y + 1)) { neighbors.push([x + dx, y + 1]); } if (!grid.isWalkableAt(x, y - 1)) { neighbors.push([x + dx, y - 1]); } } } } // return all neighbors else { neighborNodes = grid.getNeighbors(node, DiagonalMovement.Always); for (i = 0, l = neighborNodes.length; i < l; ++i) { neighborNode = neighborNodes[i]; neighbors.push([neighborNode.x, neighborNode.y]); } } return neighbors; }; module.exports = JPFAlwaysMoveDiagonally; ================================================ FILE: src/finders/JPFMoveDiagonallyIfAtMostOneObstacle.js ================================================ /** * @author imor / https://github.com/imor */ var JumpPointFinderBase = require('./JumpPointFinderBase'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * Path finder using the Jump Point Search algorithm which moves * diagonally only when there is at most one obstacle. */ function JPFMoveDiagonallyIfAtMostOneObstacle(opt) { JumpPointFinderBase.call(this, opt); } JPFMoveDiagonallyIfAtMostOneObstacle.prototype = new JumpPointFinderBase(); JPFMoveDiagonallyIfAtMostOneObstacle.prototype.constructor = JPFMoveDiagonallyIfAtMostOneObstacle; /** * Search recursively in the direction (parent -> child), stopping only when a * jump point is found. * @protected * @return {Array>} The x, y coordinate of the jump point * found, or null if not found */ JPFMoveDiagonallyIfAtMostOneObstacle.prototype._jump = function(x, y, px, py) { var grid = this.grid, dx = x - px, dy = y - py; if (!grid.isWalkableAt(x, y)) { return null; } if(this.trackJumpRecursion === true) { grid.getNodeAt(x, y).tested = true; } if (grid.getNodeAt(x, y) === this.endNode) { return [x, y]; } // check for forced neighbors // along the diagonal if (dx !== 0 && dy !== 0) { if ((grid.isWalkableAt(x - dx, y + dy) && !grid.isWalkableAt(x - dx, y)) || (grid.isWalkableAt(x + dx, y - dy) && !grid.isWalkableAt(x, y - dy))) { return [x, y]; } // when moving diagonally, must check for vertical/horizontal jump points if (this._jump(x + dx, y, x, y) || this._jump(x, y + dy, x, y)) { return [x, y]; } } // horizontally/vertically else { if( dx !== 0 ) { // moving along x if((grid.isWalkableAt(x + dx, y + 1) && !grid.isWalkableAt(x, y + 1)) || (grid.isWalkableAt(x + dx, y - 1) && !grid.isWalkableAt(x, y - 1))) { return [x, y]; } } else { if((grid.isWalkableAt(x + 1, y + dy) && !grid.isWalkableAt(x + 1, y)) || (grid.isWalkableAt(x - 1, y + dy) && !grid.isWalkableAt(x - 1, y))) { return [x, y]; } } } // moving diagonally, must make sure one of the vertical/horizontal // neighbors is open to allow the path if (grid.isWalkableAt(x + dx, y) || grid.isWalkableAt(x, y + dy)) { return this._jump(x + dx, y + dy, x, y); } else { return null; } }; /** * Find the neighbors for the given node. If the node has a parent, * prune the neighbors based on the jump point search algorithm, otherwise * return all available neighbors. * @return {Array>} The neighbors found. */ JPFMoveDiagonallyIfAtMostOneObstacle.prototype._findNeighbors = function(node) { var parent = node.parent, x = node.x, y = node.y, grid = this.grid, px, py, nx, ny, dx, dy, neighbors = [], neighborNodes, neighborNode, i, l; // directed pruning: can ignore most neighbors, unless forced. if (parent) { px = parent.x; py = parent.y; // get the normalized direction of travel dx = (x - px) / Math.max(Math.abs(x - px), 1); dy = (y - py) / Math.max(Math.abs(y - py), 1); // search diagonally if (dx !== 0 && dy !== 0) { if (grid.isWalkableAt(x, y + dy)) { neighbors.push([x, y + dy]); } if (grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y]); } if (grid.isWalkableAt(x, y + dy) || grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y + dy]); } if (!grid.isWalkableAt(x - dx, y) && grid.isWalkableAt(x, y + dy)) { neighbors.push([x - dx, y + dy]); } if (!grid.isWalkableAt(x, y - dy) && grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y - dy]); } } // search horizontally/vertically else { if(dx === 0) { if (grid.isWalkableAt(x, y + dy)) { neighbors.push([x, y + dy]); if (!grid.isWalkableAt(x + 1, y)) { neighbors.push([x + 1, y + dy]); } if (!grid.isWalkableAt(x - 1, y)) { neighbors.push([x - 1, y + dy]); } } } else { if (grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y]); if (!grid.isWalkableAt(x, y + 1)) { neighbors.push([x + dx, y + 1]); } if (!grid.isWalkableAt(x, y - 1)) { neighbors.push([x + dx, y - 1]); } } } } } // return all neighbors else { neighborNodes = grid.getNeighbors(node, DiagonalMovement.IfAtMostOneObstacle); for (i = 0, l = neighborNodes.length; i < l; ++i) { neighborNode = neighborNodes[i]; neighbors.push([neighborNode.x, neighborNode.y]); } } return neighbors; }; module.exports = JPFMoveDiagonallyIfAtMostOneObstacle; ================================================ FILE: src/finders/JPFMoveDiagonallyIfNoObstacles.js ================================================ /** * @author imor / https://github.com/imor */ var JumpPointFinderBase = require('./JumpPointFinderBase'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * Path finder using the Jump Point Search algorithm which moves * diagonally only when there are no obstacles. */ function JPFMoveDiagonallyIfNoObstacles(opt) { JumpPointFinderBase.call(this, opt); } JPFMoveDiagonallyIfNoObstacles.prototype = new JumpPointFinderBase(); JPFMoveDiagonallyIfNoObstacles.prototype.constructor = JPFMoveDiagonallyIfNoObstacles; /** * Search recursively in the direction (parent -> child), stopping only when a * jump point is found. * @protected * @return {Array>} The x, y coordinate of the jump point * found, or null if not found */ JPFMoveDiagonallyIfNoObstacles.prototype._jump = function(x, y, px, py) { var grid = this.grid, dx = x - px, dy = y - py; if (!grid.isWalkableAt(x, y)) { return null; } if(this.trackJumpRecursion === true) { grid.getNodeAt(x, y).tested = true; } if (grid.getNodeAt(x, y) === this.endNode) { return [x, y]; } // check for forced neighbors // along the diagonal if (dx !== 0 && dy !== 0) { // if ((grid.isWalkableAt(x - dx, y + dy) && !grid.isWalkableAt(x - dx, y)) || // (grid.isWalkableAt(x + dx, y - dy) && !grid.isWalkableAt(x, y - dy))) { // return [x, y]; // } // when moving diagonally, must check for vertical/horizontal jump points if (this._jump(x + dx, y, x, y) || this._jump(x, y + dy, x, y)) { return [x, y]; } } // horizontally/vertically else { if (dx !== 0) { if ((grid.isWalkableAt(x, y - 1) && !grid.isWalkableAt(x - dx, y - 1)) || (grid.isWalkableAt(x, y + 1) && !grid.isWalkableAt(x - dx, y + 1))) { return [x, y]; } } else if (dy !== 0) { if ((grid.isWalkableAt(x - 1, y) && !grid.isWalkableAt(x - 1, y - dy)) || (grid.isWalkableAt(x + 1, y) && !grid.isWalkableAt(x + 1, y - dy))) { return [x, y]; } // When moving vertically, must check for horizontal jump points // if (this._jump(x + 1, y, x, y) || this._jump(x - 1, y, x, y)) { // return [x, y]; // } } } // moving diagonally, must make sure one of the vertical/horizontal // neighbors is open to allow the path if (grid.isWalkableAt(x + dx, y) && grid.isWalkableAt(x, y + dy)) { return this._jump(x + dx, y + dy, x, y); } else { return null; } }; /** * Find the neighbors for the given node. If the node has a parent, * prune the neighbors based on the jump point search algorithm, otherwise * return all available neighbors. * @return {Array>} The neighbors found. */ JPFMoveDiagonallyIfNoObstacles.prototype._findNeighbors = function(node) { var parent = node.parent, x = node.x, y = node.y, grid = this.grid, px, py, nx, ny, dx, dy, neighbors = [], neighborNodes, neighborNode, i, l; // directed pruning: can ignore most neighbors, unless forced. if (parent) { px = parent.x; py = parent.y; // get the normalized direction of travel dx = (x - px) / Math.max(Math.abs(x - px), 1); dy = (y - py) / Math.max(Math.abs(y - py), 1); // search diagonally if (dx !== 0 && dy !== 0) { if (grid.isWalkableAt(x, y + dy)) { neighbors.push([x, y + dy]); } if (grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y]); } if (grid.isWalkableAt(x, y + dy) && grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y + dy]); } } // search horizontally/vertically else { var isNextWalkable; if (dx !== 0) { isNextWalkable = grid.isWalkableAt(x + dx, y); var isTopWalkable = grid.isWalkableAt(x, y + 1); var isBottomWalkable = grid.isWalkableAt(x, y - 1); if (isNextWalkable) { neighbors.push([x + dx, y]); if (isTopWalkable) { neighbors.push([x + dx, y + 1]); } if (isBottomWalkable) { neighbors.push([x + dx, y - 1]); } } if (isTopWalkable) { neighbors.push([x, y + 1]); } if (isBottomWalkable) { neighbors.push([x, y - 1]); } } else if (dy !== 0) { isNextWalkable = grid.isWalkableAt(x, y + dy); var isRightWalkable = grid.isWalkableAt(x + 1, y); var isLeftWalkable = grid.isWalkableAt(x - 1, y); if (isNextWalkable) { neighbors.push([x, y + dy]); if (isRightWalkable) { neighbors.push([x + 1, y + dy]); } if (isLeftWalkable) { neighbors.push([x - 1, y + dy]); } } if (isRightWalkable) { neighbors.push([x + 1, y]); } if (isLeftWalkable) { neighbors.push([x - 1, y]); } } } } // return all neighbors else { neighborNodes = grid.getNeighbors(node, DiagonalMovement.OnlyWhenNoObstacles); for (i = 0, l = neighborNodes.length; i < l; ++i) { neighborNode = neighborNodes[i]; neighbors.push([neighborNode.x, neighborNode.y]); } } return neighbors; }; module.exports = JPFMoveDiagonallyIfNoObstacles; ================================================ FILE: src/finders/JPFNeverMoveDiagonally.js ================================================ /** * @author imor / https://github.com/imor */ var JumpPointFinderBase = require('./JumpPointFinderBase'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * Path finder using the Jump Point Search algorithm allowing only horizontal * or vertical movements. */ function JPFNeverMoveDiagonally(opt) { JumpPointFinderBase.call(this, opt); } JPFNeverMoveDiagonally.prototype = new JumpPointFinderBase(); JPFNeverMoveDiagonally.prototype.constructor = JPFNeverMoveDiagonally; /** * Search recursively in the direction (parent -> child), stopping only when a * jump point is found. * @protected * @return {Array>} The x, y coordinate of the jump point * found, or null if not found */ JPFNeverMoveDiagonally.prototype._jump = function(x, y, px, py) { var grid = this.grid, dx = x - px, dy = y - py; if (!grid.isWalkableAt(x, y)) { return null; } if(this.trackJumpRecursion === true) { grid.getNodeAt(x, y).tested = true; } if (grid.getNodeAt(x, y) === this.endNode) { return [x, y]; } if (dx !== 0) { if ((grid.isWalkableAt(x, y - 1) && !grid.isWalkableAt(x - dx, y - 1)) || (grid.isWalkableAt(x, y + 1) && !grid.isWalkableAt(x - dx, y + 1))) { return [x, y]; } } else if (dy !== 0) { if ((grid.isWalkableAt(x - 1, y) && !grid.isWalkableAt(x - 1, y - dy)) || (grid.isWalkableAt(x + 1, y) && !grid.isWalkableAt(x + 1, y - dy))) { return [x, y]; } //When moving vertically, must check for horizontal jump points if (this._jump(x + 1, y, x, y) || this._jump(x - 1, y, x, y)) { return [x, y]; } } else { throw new Error("Only horizontal and vertical movements are allowed"); } return this._jump(x + dx, y + dy, x, y); }; /** * Find the neighbors for the given node. If the node has a parent, * prune the neighbors based on the jump point search algorithm, otherwise * return all available neighbors. * @return {Array>} The neighbors found. */ JPFNeverMoveDiagonally.prototype._findNeighbors = function(node) { var parent = node.parent, x = node.x, y = node.y, grid = this.grid, px, py, nx, ny, dx, dy, neighbors = [], neighborNodes, neighborNode, i, l; // directed pruning: can ignore most neighbors, unless forced. if (parent) { px = parent.x; py = parent.y; // get the normalized direction of travel dx = (x - px) / Math.max(Math.abs(x - px), 1); dy = (y - py) / Math.max(Math.abs(y - py), 1); if (dx !== 0) { if (grid.isWalkableAt(x, y - 1)) { neighbors.push([x, y - 1]); } if (grid.isWalkableAt(x, y + 1)) { neighbors.push([x, y + 1]); } if (grid.isWalkableAt(x + dx, y)) { neighbors.push([x + dx, y]); } } else if (dy !== 0) { if (grid.isWalkableAt(x - 1, y)) { neighbors.push([x - 1, y]); } if (grid.isWalkableAt(x + 1, y)) { neighbors.push([x + 1, y]); } if (grid.isWalkableAt(x, y + dy)) { neighbors.push([x, y + dy]); } } } // return all neighbors else { neighborNodes = grid.getNeighbors(node, DiagonalMovement.Never); for (i = 0, l = neighborNodes.length; i < l; ++i) { neighborNode = neighborNodes[i]; neighbors.push([neighborNode.x, neighborNode.y]); } } return neighbors; }; module.exports = JPFNeverMoveDiagonally; ================================================ FILE: src/finders/JumpPointFinder.js ================================================ /** * @author aniero / https://github.com/aniero */ var DiagonalMovement = require('../core/DiagonalMovement'); var JPFNeverMoveDiagonally = require('./JPFNeverMoveDiagonally'); var JPFAlwaysMoveDiagonally = require('./JPFAlwaysMoveDiagonally'); var JPFMoveDiagonallyIfNoObstacles = require('./JPFMoveDiagonallyIfNoObstacles'); var JPFMoveDiagonallyIfAtMostOneObstacle = require('./JPFMoveDiagonallyIfAtMostOneObstacle'); /** * Path finder using the Jump Point Search algorithm * @param {Object} opt * @param {function} opt.heuristic Heuristic function to estimate the distance * (defaults to manhattan). * @param {DiagonalMovement} opt.diagonalMovement Condition under which diagonal * movement will be allowed. */ function JumpPointFinder(opt) { opt = opt || {}; if (opt.diagonalMovement === DiagonalMovement.Never) { return new JPFNeverMoveDiagonally(opt); } else if (opt.diagonalMovement === DiagonalMovement.Always) { return new JPFAlwaysMoveDiagonally(opt); } else if (opt.diagonalMovement === DiagonalMovement.OnlyWhenNoObstacles) { return new JPFMoveDiagonallyIfNoObstacles(opt); } else { return new JPFMoveDiagonallyIfAtMostOneObstacle(opt); } } module.exports = JumpPointFinder; ================================================ FILE: src/finders/JumpPointFinderBase.js ================================================ /** * @author imor / https://github.com/imor */ var Heap = require('heap'); var Util = require('../core/Util'); var Heuristic = require('../core/Heuristic'); var DiagonalMovement = require('../core/DiagonalMovement'); /** * Base class for the Jump Point Search algorithm * @param {object} opt * @param {function} opt.heuristic Heuristic function to estimate the distance * (defaults to manhattan). */ function JumpPointFinderBase(opt) { opt = opt || {}; this.heuristic = opt.heuristic || Heuristic.manhattan; this.trackJumpRecursion = opt.trackJumpRecursion || false; } /** * Find and return the path. * @return {Array>} The path, including both start and * end positions. */ JumpPointFinderBase.prototype.findPath = function(startX, startY, endX, endY, grid) { var openList = this.openList = new Heap(function(nodeA, nodeB) { return nodeA.f - nodeB.f; }), startNode = this.startNode = grid.getNodeAt(startX, startY), endNode = this.endNode = grid.getNodeAt(endX, endY), node; this.grid = grid; // set the `g` and `f` value of the start node to be 0 startNode.g = 0; startNode.f = 0; // push the start node into the open list openList.push(startNode); startNode.opened = true; // while the open list is not empty while (!openList.empty()) { // pop the position of node which has the minimum `f` value. node = openList.pop(); node.closed = true; if (node === endNode) { return Util.expandPath(Util.backtrace(endNode)); } this._identifySuccessors(node); } // fail to find the path return []; }; /** * Identify successors for the given node. Runs a jump point search in the * direction of each available neighbor, adding any points found to the open * list. * @protected */ JumpPointFinderBase.prototype._identifySuccessors = function(node) { var grid = this.grid, heuristic = this.heuristic, openList = this.openList, endX = this.endNode.x, endY = this.endNode.y, neighbors, neighbor, jumpPoint, i, l, x = node.x, y = node.y, jx, jy, dx, dy, d, ng, jumpNode, abs = Math.abs, max = Math.max; neighbors = this._findNeighbors(node); for(i = 0, l = neighbors.length; i < l; ++i) { neighbor = neighbors[i]; jumpPoint = this._jump(neighbor[0], neighbor[1], x, y); if (jumpPoint) { jx = jumpPoint[0]; jy = jumpPoint[1]; jumpNode = grid.getNodeAt(jx, jy); if (jumpNode.closed) { continue; } // include distance, as parent may not be immediately adjacent: d = Heuristic.octile(abs(jx - x), abs(jy - y)); ng = node.g + d; // next `g` value if (!jumpNode.opened || ng < jumpNode.g) { jumpNode.g = ng; jumpNode.h = jumpNode.h || heuristic(abs(jx - endX), abs(jy - endY)); jumpNode.f = jumpNode.g + jumpNode.h; jumpNode.parent = node; if (!jumpNode.opened) { openList.push(jumpNode); jumpNode.opened = true; } else { openList.updateItem(jumpNode); } } } } }; module.exports = JumpPointFinderBase; ================================================ FILE: test/Grid.js ================================================ var PF = require('..'); var Grid = PF.Grid; var DiagonalMovement = PF.DiagonalMovement; describe('Grid', function() { describe('generate without matrix', function() { var width, height, grid; beforeEach(function() { width = 10; height = 20; grid = new Grid(width, height); }); it('should have correct size', function() { grid.width.should.equal(width); grid.height.should.equal(height); grid.nodes.length.should.equal(height); for (var i = 0; i < height; ++i) { grid.nodes[i].length.should.equal(width); } }); it('should set all nodes\' walkable attribute', function() { for (var i = 0; i < height; ++i) { for (var j = 0; j < width; ++j) { grid.isWalkableAt(j, i).should.be.true; } } }); }); describe('generate with matrix', function() { var matrix, grid, width, height; var enumPos = function(f, o) { for (var y = 0; y < height; ++y) { for (var x = 0; x < width; ++x) { if (o) { f.call(o, x, y, grid); } else { f(x, y, grid); } } } }; beforeEach(function() { matrix = [ [1, 0, 0, 1], [0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [1, 0, 0, 1], ]; height = matrix.length; width = matrix[0].length; grid = new Grid(width, height, matrix); }); it('should have correct size', function() { grid.width.should.equal(width); grid.height.should.equal(height); grid.nodes.length.should.equal(height); for (var i = 0; i < height; ++i) { grid.nodes[i].length.should.equal(width); } }); it('should initiate all nodes\' walkable attribute', function() { enumPos(function(x, y, g) { if (matrix[y][x]) { g.isWalkableAt(x, y).should.be.false; } else { g.isWalkableAt(x, y).should.be.true; } }); }); it('should be able to set nodes\' walkable attribute', function() { enumPos(function(x, y) { grid.setWalkableAt(x, y, false); }); enumPos(function(x, y) { grid.isWalkableAt(x, y).should.be.false; }) enumPos(function(x, y) { grid.setWalkableAt(x, y, true); }); enumPos(function(x, y) { grid.isWalkableAt(x, y).should.be.true; }) }); it('should return correct answer for position validity query', function() { var asserts = [ [0, 0, true], [0, height - 1, true], [width - 1, 0, true], [width - 1, height - 1, true], [-1, -1, false], [0, -1, false], [-1, 0, false], [0, height, false], [width, 0, false], [width, height, false], ]; asserts.forEach(function(v, i, a) { grid.isInside(v[0], v[1]).should.equal(v[2]); }); }); it('should return correct neighbors', function() { grid.getNeighbors(grid.nodes[1][0], DiagonalMovement.Never).should.eql([ grid.nodes[2][0] ]); var cmp = function(a, b) { return a.x * 100 + a.y - b.x * 100 - b.y; }; grid.getNeighbors(grid.nodes[0][2], DiagonalMovement.IfAtMostOneObstacle).sort(cmp).should.eql([ grid.nodes[0][1], grid.nodes[1][2], grid.nodes[1][3] ].sort(cmp)) }); }); describe('generate with matrix and no width or height', function() { var matrix, grid; beforeEach(function() { matrix = [ [1, 0, 0, 1], [0, 1, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [1, 0, 0, 1], ]; grid = new Grid(matrix); }); it('should have correct size', function() { var height = matrix.length; var width = matrix[0].length; grid.width.should.equal(width); grid.height.should.equal(height); grid.nodes.length.should.equal(height); for (var i = 0; i < height; ++i) { grid.nodes[i].length.should.equal(width); } }); }); }); ================================================ FILE: test/PathTest.js ================================================ var PF = require('..') var scenarios = require('./PathTestScenarios'); /** * Path-finding tests for the path-finders. * @param {boolean} opt.optimal - Whether the finder is guaranteed to find the shortest path */ function pathTest(opt) { var name = opt.name, finder = opt.finder, optimal = opt.optimal; describe(name, function() { var startX, startY, endX, endY, grid, expectedLength, width, height, matrix, path, i, scen; var test = (function() { var testId = 0; return function(startX, startY, endX, endY, grid, expectedLength) { it('should solve maze '+ ++testId, function() { path = finder.findPath(startX, startY, endX, endY, grid); if (optimal) { path.length.should.equal(expectedLength); } else { path[0].should.eql([startX, startY]); path[path.length - 1].should.eql([endX, endY]); } }); }; })(); // Load all the scenarios and test against the finder. for (i = 0; i < scenarios.length; ++i) { scen = scenarios[i]; matrix = scen.matrix; height = matrix.length; width = matrix[0].length; grid = new PF.Grid(width, height, matrix); test( scen.startX, scen.startY, scen.endX, scen.endY, grid, scen.expectedLength ); } }); } function pathTests(tests) { for (i = 0; i < arguments.length; ++i) { pathTest(arguments[i]); } } // finders guaranteed to find the shortest path pathTests({ name: 'AStar', finder: new PF.AStarFinder(), optimal: true }, { name: 'BreadthFirst', finder: new PF.BreadthFirstFinder(), optimal: true }, { name: 'Dijkstra', finder: new PF.DijkstraFinder(), optimal: true }, { name: 'BiBreadthFirst', finder: new PF.BiBreadthFirstFinder(), optimal: true }, { name: 'BiDijkstra', finder: new PF.BiDijkstraFinder(), optimal: true }); // finders NOT guaranteed to find the shortest path pathTests({ name: 'BiAStar', finder: new PF.BiAStarFinder(), optimal: false }, { name: 'BestFirst', finder: new PF.BestFirstFinder(), optimal: false }, { name: 'BiBestFirst', finder: new PF.BiBestFirstFinder(), optimal: false }, { name: 'IDAStar', finder: new PF.IDAStarFinder(), optimal: false }, { name: 'JPFMoveDiagonallyIfAtMostOneObstacle', finder: new PF.JumpPointFinder({ diagonalMovement: PF.DiagonalMovement.IfAtMostOneObstacle }), optimal: false }, { name: 'JPFNeverMoveDiagonally', finder: new PF.JumpPointFinder({ diagonalMovement: PF.DiagonalMovement.Never }), optimal: false }); ================================================ FILE: test/PathTestScenarios.js ================================================ module.exports = [ { startX: 0, startY: 0, endX: 1, endY: 1, matrix: [[0, 0], [1, 0]], expectedLength: 3, }, { startX: 1, startY: 1, endX: 4, endY: 4, matrix: [[0, 0, 0, 0, 0], [1, 0, 1, 1, 0], [1, 0, 1, 0, 0], [0, 1, 0, 0, 0], [1, 0, 1, 1, 0], [0, 0, 1, 0, 0]], expectedLength: 9, }, { startX: 0, startY: 3, endX: 3, endY: 3, matrix: [[0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [1, 0, 1, 1, 0], [0, 0, 0, 0, 0]], expectedLength: 10, }, { startX: 4, startY: 4, endX: 19, endY: 19, matrix: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], expectedLength: 31, }, ]; ================================================ FILE: test/Util.js ================================================ var PF = require('..'); describe('Utility functions', function () { describe('interpolate', function () { it('should return the interpolated path', function () { PF.Util.interpolate(0, 1, 0, 4).should.eql([ [0, 1], [0, 2], [0, 3], [0, 4] ]); }); }); describe('expandPath', function () { it('should return an empty array given an empty array', function () { PF.Util.expandPath([]).should.eql([]); }); it('should return the expanded path', function () { PF.Util.expandPath([ [0, 1], [0, 4] ]).should.eql([ [0, 1], [0, 2], [0, 3], [0, 4] ]); PF.Util.expandPath([ [0, 1], [0, 4], [2, 6] ]).should.eql([ [0, 1], [0, 2], [0, 3], [0, 4], [1, 5], [2, 6] ]); }); }); describe('compressPath', function () { it('should return the original path if it is too short to compress', function () { PF.Util.compressPath([]).should.eql([]); }); it('should return a compressed path', function () { PF.Util.compressPath([ [0, 1], [0, 2], [0, 3], [0, 4] ]).should.eql([ [0, 1], [0, 4] ]); PF.Util.compressPath([ [0, 1], [0, 2], [0, 3], [0, 4], [1, 5], [2, 6] ]).should.eql([ [0, 1], [0, 4], [2, 6] ]); }); }); }); ================================================ FILE: visual/Makefile ================================================ doc: doc/state-diagram.gv dot -Tpng -odoc/state-diagram.png doc/state-diagram.gv .PHONY: doc ================================================ FILE: visual/css/style.css ================================================ body { padding: 0px; margin: 0px; overflow: hidden; } input { cursor: pointer; } h1, h2, h3, h4, h5, h6 { margin: 0px; padding: 0px; font-weight: normal; } .header_title { font-size: 120%; font-weight: bold; padding-bottom: 5px; margin-top: -10px; } .panel { position: fixed; padding: 20px; background-color: rgba(0, 0, 0, 0.6); color: #fff; border-radius: 8px; box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5); cursor: default; } .right_panel { width: 250px; right: 20px; } #algorithm_panel { right: 20px; top: 20px; } #instructions_panel { top: 20px; left: 20px; width: 550px; } #hide_instructions { position: absolute; right: 25px; top: 10px; font-size: 90%; cursor: pointer; } #hide_instruction:hover { color: #fff; text-decoration: underline; } .option_header { font-size: 80%; margin-left: 20px; } .option_label { cursor: pointer; } button { border: none; background: rgba(255, 255, 255, 0.7); border-radius: 5px; font-size: 90%; cursor: pointer; padding: 2px 8px; margin: 0 2%; width: 28%; } button:hover { background: rgba(255, 255, 255, 0.9); } .finder_section { border: solid 1px #ddd; border-radius: 5px; margin: 5px; } .sub_options { padding: 2px; font-size: 14px; margin: 2px 30px 0; } #stats { position: fixed; bottom: 40px; left: 35px; color: #0a0; font-size: 85%; padding: 5px; background: rgba(255, 255, 255, 0.5); border-radius: 5px; } a { color: #33f; } footer { color: #333; font-size: 70%; text-align: center; position: fixed; width: 200px; bottom: 10px; left: 50%; margin-left: -100px; background: rgba(255, 255, 255, 0.5); padding: 5px; border-radius: 5px; } .white { color: #fff; } .green { color: #0d0; } .red { color: #ff9166; } .spinner { width: 2em; } ================================================ FILE: visual/doc/state-description.md ================================================ From [issue 6](https://github.com/qiao/PathFinding.js/issues/6) #### states and button labels/actions ##### before searching; no colored squares - state B - **Start Search** - to N - **Pause Search** - button disabled (grayed out) ##### starting a new search - state N This state clears any existing search progress and then immediately goes to state S. ##### during searching - state S - **Restart Search** - to N - **Pause Search** - to P when search has finished - to F ##### search is paused - state P - **Resume Search** - to S - **Cancel Search** - to B ##### search has finished - state F - **Restart Search** - to N - **Clear Path** - to B selecting a different algorithm or adding or deleting walls - to M ##### after search has finished and user has changed settings - state M - **Start Search** - to N - **Clear Path** - to B ================================================ FILE: visual/doc/state-diagram.gv ================================================ digraph controller_states { rankdir=LR; size="10,8" node [shape = circle]; none -> before [ label = "init" ]; before -> starting [ label = "start" ]; starting -> searching [ label = "search" ]; searching -> starting [ label = "restart" ]; searching -> paused [ label = "pause" ]; searching -> finished [ label = "finish" ]; paused -> searching [ label = "resume" ]; paused -> before [ label = "cancel" ]; finished -> starting [ label = "restart" ]; finished -> before [ label = "clear" ]; finished -> modified [ label = "modify" ]; modified -> starting [ label = "start" ]; modified -> before [ label = "clear" ]; } ================================================ FILE: visual/index.html ================================================ PathFinding.js

Instructions

hide
Click within the white grid and drag your mouse to draw obstacles.
Drag the green node to set the start position.
Drag the red node to set the end position.
Choose an algorithm from the right-hand panel.
Click Start Search in the lower-right corner to start the animation.

Select Algorithm

A*

Heuristic





Options





IDA*

Heuristic





Options






Breadth-First-Search

Options




Best-First-Search

Heuristic





Options




Dijkstra

Options




Jump Point Search

Heuristic





Options


Orthogonal Jump Point Search

Heuristic





Options


================================================ FILE: visual/js/controller.js ================================================ /** * The visualization controller will works as a state machine. * See files under the `doc` folder for transition descriptions. * See https://github.com/jakesgordon/javascript-state-machine * for the document of the StateMachine module. */ var Controller = StateMachine.create({ initial: 'none', events: [ { name: 'init', from: 'none', to: 'ready' }, { name: 'search', from: 'starting', to: 'searching' }, { name: 'pause', from: 'searching', to: 'paused' }, { name: 'finish', from: 'searching', to: 'finished' }, { name: 'resume', from: 'paused', to: 'searching' }, { name: 'cancel', from: 'paused', to: 'ready' }, { name: 'modify', from: 'finished', to: 'modified' }, { name: 'reset', from: '*', to: 'ready' }, { name: 'clear', from: ['finished', 'modified'], to: 'ready' }, { name: 'start', from: ['ready', 'modified', 'restarting'], to: 'starting' }, { name: 'restart', from: ['searching', 'finished'], to: 'restarting' }, { name: 'dragStart', from: ['ready', 'finished'], to: 'draggingStart' }, { name: 'dragEnd', from: ['ready', 'finished'], to: 'draggingEnd' }, { name: 'drawWall', from: ['ready', 'finished'], to: 'drawingWall' }, { name: 'eraseWall', from: ['ready', 'finished'], to: 'erasingWall' }, { name: 'rest', from: ['draggingStart', 'draggingEnd', 'drawingWall', 'erasingWall'], to : 'ready' }, ], }); $.extend(Controller, { gridSize: [64, 36], // number of nodes horizontally and vertically operationsPerSecond: 300, /** * Asynchronous transition from `none` state to `ready` state. */ onleavenone: function() { var numCols = this.gridSize[0], numRows = this.gridSize[1]; this.grid = new PF.Grid(numCols, numRows); View.init({ numCols: numCols, numRows: numRows }); View.generateGrid(function() { Controller.setDefaultStartEndPos(); Controller.bindEvents(); Controller.transition(); // transit to the next state (ready) }); this.$buttons = $('.control_button'); this.hookPathFinding(); return StateMachine.ASYNC; // => ready }, ondrawWall: function(event, from, to, gridX, gridY) { this.setWalkableAt(gridX, gridY, false); // => drawingWall }, oneraseWall: function(event, from, to, gridX, gridY) { this.setWalkableAt(gridX, gridY, true); // => erasingWall }, onsearch: function(event, from, to) { var grid, timeStart, timeEnd, finder = Panel.getFinder(); timeStart = window.performance ? performance.now() : Date.now(); grid = this.grid.clone(); this.path = finder.findPath( this.startX, this.startY, this.endX, this.endY, grid ); this.operationCount = this.operations.length; timeEnd = window.performance ? performance.now() : Date.now(); this.timeSpent = (timeEnd - timeStart).toFixed(4); this.loop(); // => searching }, onrestart: function() { // When clearing the colorized nodes, there may be // nodes still animating, which is an asynchronous procedure. // Therefore, we have to defer the `abort` routine to make sure // that all the animations are done by the time we clear the colors. // The same reason applies for the `onreset` event handler. setTimeout(function() { Controller.clearOperations(); Controller.clearFootprints(); Controller.start(); }, View.nodeColorizeEffect.duration * 1.2); // => restarting }, onpause: function(event, from, to) { // => paused }, onresume: function(event, from, to) { this.loop(); // => searching }, oncancel: function(event, from, to) { this.clearOperations(); this.clearFootprints(); // => ready }, onfinish: function(event, from, to) { View.showStats({ pathLength: PF.Util.pathLength(this.path), timeSpent: this.timeSpent, operationCount: this.operationCount, }); View.drawPath(this.path); // => finished }, onclear: function(event, from, to) { this.clearOperations(); this.clearFootprints(); // => ready }, onmodify: function(event, from, to) { // => modified }, onreset: function(event, from, to) { setTimeout(function() { Controller.clearOperations(); Controller.clearAll(); Controller.buildNewGrid(); }, View.nodeColorizeEffect.duration * 1.2); // => ready }, /** * The following functions are called on entering states. */ onready: function() { console.log('=> ready'); this.setButtonStates({ id: 1, text: 'Start Search', enabled: true, callback: $.proxy(this.start, this), }, { id: 2, text: 'Pause Search', enabled: false, }, { id: 3, text: 'Clear Walls', enabled: true, callback: $.proxy(this.reset, this), }); // => [starting, draggingStart, draggingEnd, drawingStart, drawingEnd] }, onstarting: function(event, from, to) { console.log('=> starting'); // Clears any existing search progress this.clearFootprints(); this.setButtonStates({ id: 2, enabled: true, }); this.search(); // => searching }, onsearching: function() { console.log('=> searching'); this.setButtonStates({ id: 1, text: 'Restart Search', enabled: true, callback: $.proxy(this.restart, this), }, { id: 2, text: 'Pause Search', enabled: true, callback: $.proxy(this.pause, this), }); // => [paused, finished] }, onpaused: function() { console.log('=> paused'); this.setButtonStates({ id: 1, text: 'Resume Search', enabled: true, callback: $.proxy(this.resume, this), }, { id: 2, text: 'Cancel Search', enabled: true, callback: $.proxy(this.cancel, this), }); // => [searching, ready] }, onfinished: function() { console.log('=> finished'); this.setButtonStates({ id: 1, text: 'Restart Search', enabled: true, callback: $.proxy(this.restart, this), }, { id: 2, text: 'Clear Path', enabled: true, callback: $.proxy(this.clear, this), }); }, onmodified: function() { console.log('=> modified'); this.setButtonStates({ id: 1, text: 'Start Search', enabled: true, callback: $.proxy(this.start, this), }, { id: 2, text: 'Clear Path', enabled: true, callback: $.proxy(this.clear, this), }); }, /** * Define setters and getters of PF.Node, then we can get the operations * of the pathfinding. */ hookPathFinding: function() { PF.Node.prototype = { get opened() { return this._opened; }, set opened(v) { this._opened = v; Controller.operations.push({ x: this.x, y: this.y, attr: 'opened', value: v }); }, get closed() { return this._closed; }, set closed(v) { this._closed = v; Controller.operations.push({ x: this.x, y: this.y, attr: 'closed', value: v }); }, get tested() { return this._tested; }, set tested(v) { this._tested = v; Controller.operations.push({ x: this.x, y: this.y, attr: 'tested', value: v }); }, }; this.operations = []; }, bindEvents: function() { $('#draw_area').mousedown($.proxy(this.mousedown, this)); $(window) .mousemove($.proxy(this.mousemove, this)) .mouseup($.proxy(this.mouseup, this)); }, loop: function() { var interval = 1000 / this.operationsPerSecond; (function loop() { if (!Controller.is('searching')) { return; } Controller.step(); setTimeout(loop, interval); })(); }, step: function() { var operations = this.operations, op, isSupported; do { if (!operations.length) { this.finish(); // transit to `finished` state return; } op = operations.shift(); isSupported = View.supportedOperations.indexOf(op.attr) !== -1; } while (!isSupported); View.setAttributeAt(op.x, op.y, op.attr, op.value); }, clearOperations: function() { this.operations = []; }, clearFootprints: function() { View.clearFootprints(); View.clearPath(); }, clearAll: function() { this.clearFootprints(); View.clearBlockedNodes(); }, buildNewGrid: function() { this.grid = new PF.Grid(this.gridSize[0], this.gridSize[1]); }, mousedown: function (event) { var coord = View.toGridCoordinate(event.pageX, event.pageY), gridX = coord[0], gridY = coord[1], grid = this.grid; if (this.can('dragStart') && this.isStartPos(gridX, gridY)) { this.dragStart(); return; } if (this.can('dragEnd') && this.isEndPos(gridX, gridY)) { this.dragEnd(); return; } if (this.can('drawWall') && grid.isWalkableAt(gridX, gridY)) { this.drawWall(gridX, gridY); return; } if (this.can('eraseWall') && !grid.isWalkableAt(gridX, gridY)) { this.eraseWall(gridX, gridY); } }, mousemove: function(event) { var coord = View.toGridCoordinate(event.pageX, event.pageY), grid = this.grid, gridX = coord[0], gridY = coord[1]; if (this.isStartOrEndPos(gridX, gridY)) { return; } switch (this.current) { case 'draggingStart': if (grid.isWalkableAt(gridX, gridY)) { this.setStartPos(gridX, gridY); } break; case 'draggingEnd': if (grid.isWalkableAt(gridX, gridY)) { this.setEndPos(gridX, gridY); } break; case 'drawingWall': this.setWalkableAt(gridX, gridY, false); break; case 'erasingWall': this.setWalkableAt(gridX, gridY, true); break; } }, mouseup: function(event) { if (Controller.can('rest')) { Controller.rest(); } }, setButtonStates: function() { $.each(arguments, function(i, opt) { var $button = Controller.$buttons.eq(opt.id - 1); if (opt.text) { $button.text(opt.text); } if (opt.callback) { $button .unbind('click') .click(opt.callback); } if (opt.enabled === undefined) { return; } else if (opt.enabled) { $button.removeAttr('disabled'); } else { $button.attr({ disabled: 'disabled' }); } }); }, /** * When initializing, this method will be called to set the positions * of start node and end node. * It will detect user's display size, and compute the best positions. */ setDefaultStartEndPos: function() { var width, height, marginRight, availWidth, centerX, centerY, endX, endY, nodeSize = View.nodeSize; width = $(window).width(); height = $(window).height(); marginRight = $('#algorithm_panel').width(); availWidth = width - marginRight; centerX = Math.ceil(availWidth / 2 / nodeSize); centerY = Math.floor(height / 2 / nodeSize); this.setStartPos(centerX - 5, centerY); this.setEndPos(centerX + 5, centerY); }, setStartPos: function(gridX, gridY) { this.startX = gridX; this.startY = gridY; View.setStartPos(gridX, gridY); }, setEndPos: function(gridX, gridY) { this.endX = gridX; this.endY = gridY; View.setEndPos(gridX, gridY); }, setWalkableAt: function(gridX, gridY, walkable) { this.grid.setWalkableAt(gridX, gridY, walkable); View.setAttributeAt(gridX, gridY, 'walkable', walkable); }, isStartPos: function(gridX, gridY) { return gridX === this.startX && gridY === this.startY; }, isEndPos: function(gridX, gridY) { return gridX === this.endX && gridY === this.endY; }, isStartOrEndPos: function(gridX, gridY) { return this.isStartPos(gridX, gridY) || this.isEndPos(gridX, gridY); }, }); ================================================ FILE: visual/js/main.js ================================================ $(document).ready(function() { if (!Raphael.svg) { window.location = './notsupported.html'; } // suppress select events $(window).bind('selectstart', function(event) { event.preventDefault(); }); // initialize visualization Panel.init(); Controller.init(); }); ================================================ FILE: visual/js/panel.js ================================================ /** * The control panel. */ var Panel = { init: function() { var $algo = $('#algorithm_panel'); $('.panel').draggable(); $('.accordion').accordion({ collapsible: false, }); $('.option_label').click(function() { $(this).prev().click(); }); $('#hide_instructions').click(function() { $('#instructions_panel').slideUp(); }); $('#play_panel').css({ top: $algo.offset().top + $algo.outerHeight() + 20 }); $('#button2').attr('disabled', 'disabled'); }, /** * Get the user selected path-finder. * TODO: clean up this messy code. */ getFinder: function() { var finder, selected_header, heuristic, allowDiagonal, biDirectional, dontCrossCorners, weight, trackRecursion, timeLimit; selected_header = $( '#algorithm_panel ' + '.ui-accordion-header[aria-selected=true]' ).attr('id'); switch (selected_header) { case 'astar_header': allowDiagonal = typeof $('#astar_section ' + '.allow_diagonal:checked').val() !== 'undefined'; biDirectional = typeof $('#astar_section ' + '.bi-directional:checked').val() !=='undefined'; dontCrossCorners = typeof $('#astar_section ' + '.dont_cross_corners:checked').val() !=='undefined'; /* parseInt returns NaN (which is falsy) if the string can't be parsed */ weight = parseInt($('#astar_section .spinner').val()) || 1; weight = weight >= 1 ? weight : 1; /* if negative or 0, use 1 */ heuristic = $('input[name=astar_heuristic]:checked').val(); if (biDirectional) { finder = new PF.BiAStarFinder({ allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners, heuristic: PF.Heuristic[heuristic], weight: weight }); } else { finder = new PF.AStarFinder({ allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners, heuristic: PF.Heuristic[heuristic], weight: weight }); } break; case 'breadthfirst_header': allowDiagonal = typeof $('#breadthfirst_section ' + '.allow_diagonal:checked').val() !== 'undefined'; biDirectional = typeof $('#breadthfirst_section ' + '.bi-directional:checked').val() !== 'undefined'; dontCrossCorners = typeof $('#breadthfirst_section ' + '.dont_cross_corners:checked').val() !=='undefined'; if (biDirectional) { finder = new PF.BiBreadthFirstFinder({ allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners }); } else { finder = new PF.BreadthFirstFinder({ allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners }); } break; case 'bestfirst_header': allowDiagonal = typeof $('#bestfirst_section ' + '.allow_diagonal:checked').val() !== 'undefined'; biDirectional = typeof $('#bestfirst_section ' + '.bi-directional:checked').val() !== 'undefined'; dontCrossCorners = typeof $('#bestfirst_section ' + '.dont_cross_corners:checked').val() !=='undefined'; heuristic = $('input[name=bestfirst_heuristic]:checked').val(); if (biDirectional) { finder = new PF.BiBestFirstFinder({ allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners, heuristic: PF.Heuristic[heuristic] }); } else { finder = new PF.BestFirstFinder({ allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners, heuristic: PF.Heuristic[heuristic] }); } break; case 'dijkstra_header': allowDiagonal = typeof $('#dijkstra_section ' + '.allow_diagonal:checked').val() !== 'undefined'; biDirectional = typeof $('#dijkstra_section ' + '.bi-directional:checked').val() !=='undefined'; dontCrossCorners = typeof $('#dijkstra_section ' + '.dont_cross_corners:checked').val() !=='undefined'; if (biDirectional) { finder = new PF.BiDijkstraFinder({ allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners }); } else { finder = new PF.DijkstraFinder({ allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners }); } break; case 'jump_point_header': trackRecursion = typeof $('#jump_point_section ' + '.track_recursion:checked').val() !== 'undefined'; heuristic = $('input[name=jump_point_heuristic]:checked').val(); finder = new PF.JumpPointFinder({ trackJumpRecursion: trackRecursion, heuristic: PF.Heuristic[heuristic], diagonalMovement: PF.DiagonalMovement.IfAtMostOneObstacle }); break; case 'orth_jump_point_header': trackRecursion = typeof $('#orth_jump_point_section ' + '.track_recursion:checked').val() !== 'undefined'; heuristic = $('input[name=orth_jump_point_heuristic]:checked').val(); finder = new PF.JumpPointFinder({ trackJumpRecursion: trackRecursion, heuristic: PF.Heuristic[heuristic], diagonalMovement: PF.DiagonalMovement.Never }); break; case 'ida_header': allowDiagonal = typeof $('#ida_section ' + '.allow_diagonal:checked').val() !== 'undefined'; dontCrossCorners = typeof $('#ida_section ' + '.dont_cross_corners:checked').val() !=='undefined'; trackRecursion = typeof $('#ida_section ' + '.track_recursion:checked').val() !== 'undefined'; heuristic = $('input[name=jump_point_heuristic]:checked').val(); weight = parseInt($('#ida_section input[name=astar_weight]').val()) || 1; weight = weight >= 1 ? weight : 1; /* if negative or 0, use 1 */ timeLimit = parseInt($('#ida_section input[name=time_limit]').val()); // Any non-negative integer, indicates "forever". timeLimit = (timeLimit <= 0 || isNaN(timeLimit)) ? -1 : timeLimit; finder = new PF.IDAStarFinder({ timeLimit: timeLimit, trackRecursion: trackRecursion, allowDiagonal: allowDiagonal, dontCrossCorners: dontCrossCorners, heuristic: PF.Heuristic[heuristic], weight: weight }); break; } return finder; } }; ================================================ FILE: visual/js/view.js ================================================ /** * The pathfinding visualization. * It uses raphael.js to show the grids. */ var View = { nodeSize: 30, // width and height of a single node, in pixel nodeStyle: { normal: { fill: 'white', 'stroke-opacity': 0.2, // the border }, blocked: { fill: 'grey', 'stroke-opacity': 0.2, }, start: { fill: '#0d0', 'stroke-opacity': 0.2, }, end: { fill: '#e40', 'stroke-opacity': 0.2, }, opened: { fill: '#98fb98', 'stroke-opacity': 0.2, }, closed: { fill: '#afeeee', 'stroke-opacity': 0.2, }, failed: { fill: '#ff8888', 'stroke-opacity': 0.2, }, tested: { fill: '#e5e5e5', 'stroke-opacity': 0.2, }, }, nodeColorizeEffect: { duration: 50, }, nodeZoomEffect: { duration: 200, transform: 's1.2', // scale by 1.2x transformBack: 's1.0', }, pathStyle: { stroke: 'yellow', 'stroke-width': 3, }, supportedOperations: ['opened', 'closed', 'tested'], init: function(opts) { this.numCols = opts.numCols; this.numRows = opts.numRows; this.paper = Raphael('draw_area'); this.$stats = $('#stats'); }, /** * Generate the grid asynchronously. * This method will be a very expensive task. * Therefore, in order to not to block the rendering of browser ui, * I decomposed the task into smaller ones. Each will only generate a row. */ generateGrid: function(callback) { var i, j, x, y, rect, normalStyle, nodeSize, createRowTask, sleep, tasks, nodeSize = this.nodeSize, normalStyle = this.nodeStyle.normal, numCols = this.numCols, numRows = this.numRows, paper = this.paper, rects = this.rects = [], $stats = this.$stats; paper.setSize(numCols * nodeSize, numRows * nodeSize); createRowTask = function(rowId) { return function(done) { rects[rowId] = []; for (j = 0; j < numCols; ++j) { x = j * nodeSize; y = rowId * nodeSize; rect = paper.rect(x, y, nodeSize, nodeSize); rect.attr(normalStyle); rects[rowId].push(rect); } $stats.text( 'generating grid ' + Math.round((rowId + 1) / numRows * 100) + '%' ); done(null); }; }; sleep = function(done) { setTimeout(function() { done(null); }, 0); }; tasks = []; for (i = 0; i < numRows; ++i) { tasks.push(createRowTask(i)); tasks.push(sleep); } async.series(tasks, function() { if (callback) { callback(); } }); }, setStartPos: function(gridX, gridY) { var coord = this.toPageCoordinate(gridX, gridY); if (!this.startNode) { this.startNode = this.paper.rect( coord[0], coord[1], this.nodeSize, this.nodeSize ).attr(this.nodeStyle.normal) .animate(this.nodeStyle.start, 1000); } else { this.startNode.attr({ x: coord[0], y: coord[1] }).toFront(); } }, setEndPos: function(gridX, gridY) { var coord = this.toPageCoordinate(gridX, gridY); if (!this.endNode) { this.endNode = this.paper.rect( coord[0], coord[1], this.nodeSize, this.nodeSize ).attr(this.nodeStyle.normal) .animate(this.nodeStyle.end, 1000); } else { this.endNode.attr({ x: coord[0], y: coord[1] }).toFront(); } }, /** * Set the attribute of the node at the given coordinate. */ setAttributeAt: function(gridX, gridY, attr, value) { var color, nodeStyle = this.nodeStyle; switch (attr) { case 'walkable': color = value ? nodeStyle.normal.fill : nodeStyle.blocked.fill; this.setWalkableAt(gridX, gridY, value); break; case 'opened': this.colorizeNode(this.rects[gridY][gridX], nodeStyle.opened.fill); this.setCoordDirty(gridX, gridY, true); break; case 'closed': this.colorizeNode(this.rects[gridY][gridX], nodeStyle.closed.fill); this.setCoordDirty(gridX, gridY, true); break; case 'tested': color = (value === true) ? nodeStyle.tested.fill : nodeStyle.normal.fill; this.colorizeNode(this.rects[gridY][gridX], color); this.setCoordDirty(gridX, gridY, true); break; case 'parent': // XXX: Maybe draw a line from this node to its parent? // This would be expensive. break; default: console.error('unsupported operation: ' + attr + ':' + value); return; } }, colorizeNode: function(node, color) { node.animate({ fill: color }, this.nodeColorizeEffect.duration); }, zoomNode: function(node) { node.toFront().attr({ transform: this.nodeZoomEffect.transform, }).animate({ transform: this.nodeZoomEffect.transformBack, }, this.nodeZoomEffect.duration); }, setWalkableAt: function(gridX, gridY, value) { var node, i, blockedNodes = this.blockedNodes; if (!blockedNodes) { blockedNodes = this.blockedNodes = new Array(this.numRows); for (i = 0; i < this.numRows; ++i) { blockedNodes[i] = []; } } node = blockedNodes[gridY][gridX]; if (value) { // clear blocked node if (node) { this.colorizeNode(node, this.rects[gridY][gridX].attr('fill')); this.zoomNode(node); setTimeout(function() { node.remove(); }, this.nodeZoomEffect.duration); blockedNodes[gridY][gridX] = null; } } else { // draw blocked node if (node) { return; } node = blockedNodes[gridY][gridX] = this.rects[gridY][gridX].clone(); this.colorizeNode(node, this.nodeStyle.blocked.fill); this.zoomNode(node); } }, clearFootprints: function() { var i, x, y, coord, coords = this.getDirtyCoords(); for (i = 0; i < coords.length; ++i) { coord = coords[i]; x = coord[0]; y = coord[1]; this.rects[y][x].attr(this.nodeStyle.normal); this.setCoordDirty(x, y, false); } }, clearBlockedNodes: function() { var i, j, blockedNodes = this.blockedNodes; if (!blockedNodes) { return; } for (i = 0; i < this.numRows; ++i) { for (j = 0 ;j < this.numCols; ++j) { if (blockedNodes[i][j]) { blockedNodes[i][j].remove(); blockedNodes[i][j] = null; } } } }, drawPath: function(path) { if (!path.length) { return; } var svgPath = this.buildSvgPath(path); this.path = this.paper.path(svgPath).attr(this.pathStyle); }, /** * Given a path, build its SVG represention. */ buildSvgPath: function(path) { var i, strs = [], size = this.nodeSize; strs.push('M' + (path[0][0] * size + size / 2) + ' ' + (path[0][1] * size + size / 2)); for (i = 1; i < path.length; ++i) { strs.push('L' + (path[i][0] * size + size / 2) + ' ' + (path[i][1] * size + size / 2)); } return strs.join(''); }, clearPath: function() { if (this.path) { this.path.remove(); } }, /** * Helper function to convert the page coordinate to grid coordinate */ toGridCoordinate: function(pageX, pageY) { return [ Math.floor(pageX / this.nodeSize), Math.floor(pageY / this.nodeSize) ]; }, /** * helper function to convert the grid coordinate to page coordinate */ toPageCoordinate: function(gridX, gridY) { return [ gridX * this.nodeSize, gridY * this.nodeSize ]; }, showStats: function(opts) { var texts = [ 'length: ' + Math.round(opts.pathLength * 100) / 100, 'time: ' + opts.timeSpent + 'ms', 'operations: ' + opts.operationCount ]; $('#stats').show().html(texts.join('
')); }, setCoordDirty: function(gridX, gridY, isDirty) { var x, y, numRows = this.numRows, numCols = this.numCols, coordDirty; if (this.coordDirty === undefined) { coordDirty = this.coordDirty = []; for (y = 0; y < numRows; ++y) { coordDirty.push([]); for (x = 0; x < numCols; ++x) { coordDirty[y].push(false); } } } this.coordDirty[gridY][gridX] = isDirty; }, getDirtyCoords: function() { var x, y, numRows = this.numRows, numCols = this.numCols, coordDirty = this.coordDirty, coords = []; if (coordDirty === undefined) { return []; } for (y = 0; y < numRows; ++y) { for (x = 0; x < numCols; ++x) { if (coordDirty[y][x]) { coords.push([x, y]); } } } return coords; }, }; ================================================ FILE: visual/lib/raphael-min.js ================================================ // ┌────────────────────────────────────────────────────────────────────┐ \\ // │ Raphaël 2.1.0 - JavaScript Vector Library │ \\ // ├────────────────────────────────────────────────────────────────────┤ \\ // │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) │ \\ // │ Copyright © 2008-2012 Sencha Labs (http://sencha.com) │ \\ // ├────────────────────────────────────────────────────────────────────┤ \\ // │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\ // └────────────────────────────────────────────────────────────────────┘ \\ (function(a){var b="0.3.4",c="hasOwnProperty",d=/[\.\/]/,e="*",f=function(){},g=function(a,b){return a-b},h,i,j={n:{}},k=function(a,b){var c=j,d=i,e=Array.prototype.slice.call(arguments,2),f=k.listeners(a),l=0,m=!1,n,o=[],p={},q=[],r=h,s=[];h=a,i=0;for(var t=0,u=f.length;tf*b.top){e=b.percents[y],p=b.percents[y-1]||0,t=t/b.top*(e-p),o=b.percents[y+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[y]])}if(!!j){if(!k){for(var A in j)if(j[g](A))if(U[g](A)||d.paper.customAttributes[g](A)){u[A]=d.attr(A),u[A]==null&&(u[A]=T[A]),v[A]=j[A];switch(U[A]){case C:w[A]=(v[A]-u[A])/t;break;case"colour":u[A]=a.getRGB(u[A]);var B=a.getRGB(v[A]);w[A]={r:(B.r-u[A].r)/t,g:(B.g-u[A].g)/t,b:(B.b-u[A].b)/t};break;case"path":var D=bR(u[A],v[A]),E=D[1];u[A]=D[0],w[A]=[];for(y=0,z=u[A].length;yd)return d;while(cf?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cq(){return this.x+q+this.y+q+this.width+" × "+this.height}function cp(){return this.x+q+this.y}function cb(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bH(b,c,d){b=a._path2curve(b),c=a._path2curve(c);var e,f,g,h,i,j,k,l,m,n,o=d?0:[];for(var p=0,q=b.length;p=0&&y<=1&&A>=0&&A<=1&&(d?n++:n.push({x:x.x,y:x.y,t1:y,t2:A}))}}return n}function bF(a,b){return bG(a,b,1)}function bE(a,b){return bG(a,b)}function bD(a,b,c,d,e,f,g,h){if(!(x(a,c)x(e,g)||x(b,d)x(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(!k)return;var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(n<+y(a,c).toFixed(2)||n>+x(a,c).toFixed(2)||n<+y(e,g).toFixed(2)||n>+x(e,g).toFixed(2)||o<+y(b,d).toFixed(2)||o>+x(b,d).toFixed(2)||o<+y(f,h).toFixed(2)||o>+x(f,h).toFixed(2))return;return{x:l,y:m}}}function bC(a,b,c,d,e,f,g,h,i){if(!(i<0||bB(a,b,c,d,e,f,g,h)n)k/=2,l+=(m1?1:i<0?0:i;var j=i/2,k=12,l=[-0.1252,.1252,-0.3678,.3678,-0.5873,.5873,-0.7699,.7699,-0.9041,.9041,-0.9816,.9816],m=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],n=0;for(var o=0;od;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function bx(){return this.hex}function bv(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bu(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bu(a,b){for(var c=0,d=a.length;c',bl=bk.firstChild,bl.style.behavior="url(#default#VML)";if(!bl||typeof bl.adj!="object")return a.type=p;bk=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a&&a!==null||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(fb-d)return c-f+b}return c};var bn=a.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve("raphael.setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,a._engine.initWin&&a._engine.initWin(h.win)};var bo=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write(""),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bo=bv(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bo=bv(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bo(b)},bp=function(){return"hsb("+[this.h,this.s,this.b]+")"},bq=function(){return"hsl("+[this.h,this.s,this.l]+")"},br=function(){return this.hex},bs=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},bt=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:br};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},b.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=br;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bp}},a.rgb2hsl=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bq}},a._path2string=function(){return this.join(",").replace(Y,"$1")};var bw=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bv(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bx};!X[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bo(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bx},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx}},a),a.hsb=bv(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bv(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bv(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=function(b){if(!b)return null;var c=bz(b);if(c.arr)return bJ(c.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];a.is(b,E)&&a.is(b[0],E)&&(e=bJ(b)),e.length||r(b).replace(Z,function(a,b,c){var f=[],g=b.toLowerCase();c.replace(_,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(e.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");if(g=="r")e.push([b][n](f));else while(f.length>=d[g]){e.push([b][n](f.splice(0,d[g])));if(!d[g])break}}),e.toString=a._path2string,c.arr=bJ(e);return e},a.parseTransformString=bv(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bJ(b)),d.length||r(b).replace($,function(a,b,c){var e=[],f=v.call(b);c.replace(_,function(a,b){b&&e.push(+b)}),d.push([b][n](e))}),d.toString=a._path2string;return d});var bz=function(a){var b=bz.ps=bz.ps||{};b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[g](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])});return b[a]};a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3),l=A(j,2),m=i*i,n=m*i,o=k*a+l*3*i*c+j*3*i*i*e+n*g,p=k*b+l*3*i*d+j*3*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,x=j*e+i*g,y=j*f+i*h,z=90-w.atan2(q-s,r-t)*180/B;(q>s||r=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},a.isBBoxIntersect=function(b,c){var d=a.isPointInsideBBox;return d(c,b.x,b.y)||d(c,b.x2,b.y)||d(c,b.x,b.y2)||d(c,b.x2,b.y2)||d(b,c.x,c.y)||d(b,c.x2,c.y)||d(b,c.x,c.y2)||d(b,c.x2,c.y2)||(b.xc.x||c.xb.x)&&(b.yc.y||c.yb.y)},a.pathIntersection=function(a,b){return bH(a,b)},a.pathIntersectionNumber=function(a,b){return bH(a,b,1)},a.isPointInsidePath=function(b,c,d){var e=a.pathBBox(b);return a.isPointInsideBBox(e,c,d)&&bH(b,[["M",c,d],["H",e.x2+10]],1)%2==1},a._removedFactory=function(a){return function(){eve("raphael.log",null,"Raphaël: you are calling to method “"+a+"” of removed object",a)}};var bI=a.pathBBox=function(a){var b=bz(a);if(b.bbox)return b.bbox;if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=bR(a);var c=0,d=0,e=[],f=[],g;for(var h=0,i=a.length;h1&&(v=w.sqrt(v),c=v*c,d=v*d);var x=c*c,y=d*d,A=(f==g?-1:1)*w.sqrt(z((x*y-x*u*u-y*t*t)/(x*u*u+y*t*t))),C=A*c*u/d+(a+h)/2,D=A*-d*t/c+(b+i)/2,E=w.asin(((b-D)/d).toFixed(9)),F=w.asin(((i-D)/d).toFixed(9));E=aF&&(E=E-B*2),!g&&F>E&&(F=F-B*2)}else E=j[0],F=j[1],C=j[2],D=j[3];var G=F-E;if(z(G)>k){var H=F,I=h,J=i;F=E+k*(g&&F>E?1:-1),h=C+c*w.cos(F),i=D+d*w.sin(F),m=bO(h,i,c,d,e,0,g,I,J,[F,H,C,D])}G=F-E;var K=w.cos(E),L=w.sin(E),M=w.cos(F),N=w.sin(F),O=w.tan(G/4),P=4/3*c*O,Q=4/3*d*O,R=[a,b],S=[a+P*L,b-Q*K],T=[h+P*N,i-Q*M],U=[h,i];S[0]=2*R[0]-S[0],S[1]=2*R[1]-S[1];if(j)return[S,T,U][n](m);m=[S,T,U][n](m).join()[s](",");var V=[];for(var W=0,X=m.length;W"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bR=a._path2curve=bv(function(a,b){var c=!b&&bz(a);if(!b&&c.curve)return bJ(c.curve);var d=bL(a),e=b&&bL(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bO[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bN(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bN(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bM(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bM(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bM(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bM(b.x,b.y,b.X,b.Y))}return a},i=function(a,b){if(a[b].length>7){a[b].shift();var c=a[b];while(c.length)a.splice(b++,0,["C"][n](c.splice(0,6)));a.splice(b,1),l=x(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=x(d.length,e&&e.length||0))};for(var k=0,l=x(d.length,e&&e.length||0);ke){if(c&&!l.start){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cu=ct(1),cv=ct(),cw=ct(0,1);a.getTotalLength=cu,a.getPointAtLength=cv,a.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return cw(a,b).end;var d=cw(a,c,1);return b?cw(d,b).end:d},cl.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return cu(this.attrs.path)}},cl.getPointAtLength=function(a){if(this.type=="path")return cv(this.attrs.path,a)},cl.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var cx=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};cx.easeIn=cx["ease-in"]=cx["<"],cx.easeOut=cx["ease-out"]=cx[">"],cx.easeInOut=cx["ease-in-out"]=cx["<>"],cx["back-in"]=cx.backIn,cx["back-out"]=cx.backOut;var cy=[],cz=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cA=function(){var b=+(new Date),c=0;for(;c1&&!d.next){for(s in k)k[g](s)&&(r[s]=d.totalOrigin[s]);d.el.attr(r),cE(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1)}d.next&&!d.stop&&cE(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}}a.svg&&m&&m.paper&&m.paper.safari(),cy.length&&cz(cA)},cB=function(a){return a>255?255:a<0?0:a};cl.animateWith=function(b,c,d,e,f,g){var h=this;if(h.removed){g&&g.call(h);return h}var i=d instanceof cD?d:a.animation(d,e,f,g),j,k;cE(i,h,i.percents[0],null,h.attr());for(var l=0,m=cy.length;l.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;k=k.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient);if(!b.gradient){s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;x1?G.opacity/100:G.opacity});case"stroke":G=a.getRGB(p),i.setAttribute(o,G.hex),o=="stroke"&&G[b]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),o=="stroke"&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(p).charAt()!="r")&&r(d,p);break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break};default:o=="font-size"&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n"));var $=X.getBoundingClientRect();t.W=m.w=($.right-$.left)/Y,t.H=m.h=($.bottom-$.top)/Y,t.X=m.x,t.Y=m.y+t.H/2,("x"in i||"y"in i)&&(t.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));var _=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var ba=0,bb=_.length;ba.25&&(c=e.sqrt(.25-i(b-.5,2))*((c>.5)*2-1)+.5),m=b+n+c);return o}),f=f.split(/\s*\-\s*/);if(l=="linear"){var p=f.shift();p=-d(p);if(isNaN(p))return null}var q=a._parseDots(f);if(!q)return null;b=b.shape||b.node;if(q.length){b.removeChild(g),g.on=!0,g.method="none",g.color=q[0].color,g.color2=q[q.length-1].color;var r=[];for(var s=0,t=q.length;s')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=u*1e3+n+u*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]=="function"?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E)E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}(window.Raphael) ================================================ FILE: visual/lib/themes/jquery.ui.accordion.css ================================================ /* * jQuery UI Accordion 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Accordion#theming */ /* IE/Win - Fix animation bug - #4615 */ .ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; border: solid 1px #333; background: rgba(0, 0, 0, 0.5); } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: 0px; } .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 10px; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; border-radius: 0 0 5px 5px;} .ui-accordion .ui-accordion-content-active { display: block; } ================================================ FILE: visual/lib/themes/jquery.ui.all.css ================================================ /* * jQuery UI CSS Framework 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming */ @import "jquery.ui.base.css"; @import "jquery.ui.theme.css"; ================================================ FILE: visual/lib/themes/jquery.ui.autocomplete.css ================================================ /* * jQuery UI Autocomplete 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Autocomplete#theming */ .ui-autocomplete { position: absolute; cursor: default; } /* workarounds */ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ /* * jQuery UI Menu 1.8.16 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Menu#theming */ .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; float: left; } .ui-menu .ui-menu { margin-top: -3px; } .ui-menu .ui-menu-item { margin:0; padding: 0; zoom: 1; float: left; clear: left; width: 100%; } .ui-menu .ui-menu-item a { text-decoration:none; display:block; padding:.2em .4em; line-height:1.5; zoom:1; } .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; } ================================================ FILE: visual/lib/themes/jquery.ui.base.css ================================================ @import url("jquery.ui.core.css"); @import url("jquery.ui.resizable.css"); @import url("jquery.ui.selectable.css"); @import url("jquery.ui.accordion.css"); @import url("jquery.ui.autocomplete.css"); @import url("jquery.ui.button.css"); @import url("jquery.ui.dialog.css"); @import url("jquery.ui.slider.css"); @import url("jquery.ui.tabs.css"); @import url("jquery.ui.datepicker.css"); @import url("jquery.ui.progressbar.css"); ================================================ FILE: visual/lib/themes/jquery.ui.button.css ================================================ /* * jQuery UI Button 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Button#theming */ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /*button text element */ .ui-button .ui-button-text { display: block; line-height: 1.4; } .ui-button-text-only .ui-button-text { padding: .4em 1em; } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ input.ui-button { padding: .4em 1em; } /*button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ ================================================ FILE: visual/lib/themes/jquery.ui.core.css ================================================ /* * jQuery UI CSS Framework 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } ================================================ FILE: visual/lib/themes/jquery.ui.datepicker.css ================================================ /* * jQuery UI Datepicker 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Datepicker#theming */ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev-hover { left:1px; } .ui-datepicker .ui-datepicker-next-hover { right:1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ } ================================================ FILE: visual/lib/themes/jquery.ui.dialog.css ================================================ /* * jQuery UI Dialog 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Dialog#theming */ .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } ================================================ FILE: visual/lib/themes/jquery.ui.progressbar.css ================================================ /* * jQuery UI Progressbar 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Progressbar#theming */ .ui-progressbar { height:2em; text-align: left; } .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } ================================================ FILE: visual/lib/themes/jquery.ui.resizable.css ================================================ /* * jQuery UI Resizable 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Resizable#theming */ .ui-resizable { position: relative;} .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} ================================================ FILE: visual/lib/themes/jquery.ui.selectable.css ================================================ /* * jQuery UI Selectable 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Selectable#theming */ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } ================================================ FILE: visual/lib/themes/jquery.ui.slider.css ================================================ /* * jQuery UI Slider 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Slider#theming */ .ui-slider { position: relative; text-align: left; background: rgba(255, 255, 255, 0.3) !important; border: none !important;} .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 15px; height: 15px; cursor: default;} .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } .ui-slider-horizontal { height: 5px; margin-bottom: 15px; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; } ================================================ FILE: visual/lib/themes/jquery.ui.tabs.css ================================================ /* * jQuery UI Tabs 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Tabs#theming */ .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } .ui-tabs .ui-tabs-hide { display: none !important; } ================================================ FILE: visual/lib/themes/jquery.ui.theme.css ================================================ /* * jQuery UI CSS Framework 1.8.16 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API * * To view and modify this theme, visit http://jqueryui.com/themeroller/?tr&ffDefault=Helvetica,%20Arial,%20sans-serif&fwDefault=normal&fsDefault=1.1&fsDefaultUnit=em&cornerRadius=5&cornerRadiusUnit=px&bgColorHeader=888888&bgTextureHeader=04_highlight_hard.png&bgImgOpacityHeader=15&borderColorHeader=404040&fcHeader=ffffff&iconColorHeader=cccccc&bgColorContent=121212&bgTextureContent=12_gloss_wave.png&bgImgOpacityContent=16&borderColorContent=404040&fcContent=eeeeee&iconColorContent=bbbbbb&bgColorDefault=adadad&bgTextureDefault=03_highlight_soft.png&bgImgOpacityDefault=35&borderColorDefault=cccccc&fcDefault=333333&iconColorDefault=666666&bgColorHover=dddddd&bgTextureHover=03_highlight_soft.png&bgImgOpacityHover=60&borderColorHover=dddddd&fcHover=000000&iconColorHover=c98000&bgColorActive=121212&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=15&borderColorActive=000000&fcActive=ffffff&iconColorActive=f29a00&bgColorHighlight=555555&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=55&borderColorHighlight=404040&fcHighlight=cccccc&iconColorHighlight=aaaaaa&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Helvetica, Arial, sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Helvetica, Arial, sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #404040; background: rgba(0, 0, 0, 0.3); color: #eeeeee; } .ui-widget-content a { color: #eeeeee; } .ui-widget-header { border: 1px solid #404040; background: #888888; color: #ffffff; font-weight: normal; } .ui-widget-header a { color: #ffffff; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #333; background: rgba(0, 0, 0, 0.5); font-weight: normal; color: #ddd; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ddd; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #333; background: rgba(0, 0, 0, 0.2); font-weight: normal; color: #ddd; } .ui-state-hover a, .ui-state-hover a:hover { color: #fff; text-decoration: none; }A .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #333; background: rgba(0, 0, 0, 0.5); font-weight: normal; color: #ffffff; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #404040; background: #555555 url(images/ui-bg_highlight-hard_55_555555_1x100.png) 50% top repeat-x; color: #cccccc; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #cccccc; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: normal; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_bbbbbb_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_bbbbbb_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_cccccc_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_666666_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_c98000_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_f29a00_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_aaaaaa_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } ================================================ FILE: visual/notsupported.html ================================================ PathFinding.js
Sorry, your browser is not supported