Removing node modules from source tree, documenting dependencies in README.md file
authorJack Allnutt <m2ys4u@Gmail.com>
Sat, 17 Sep 2011 14:41:55 +0000 (15:41 +0100)
committerJack Allnutt <m2ys4u@Gmail.com>
Sat, 17 Sep 2011 14:41:55 +0000 (15:41 +0100)
1071 files changed:
.gitignore
README.md [new file with mode: 0755]
node/node_modules/jade/.gitignore [deleted file]
node/node_modules/jade/.gitmodules [deleted file]
node/node_modules/jade/.npmignore [deleted file]
node/node_modules/jade/History.md [deleted file]
node/node_modules/jade/LICENSE [deleted file]
node/node_modules/jade/Makefile [deleted file]
node/node_modules/jade/Readme.md [deleted file]
node/node_modules/jade/bin/jade [deleted file]
node/node_modules/jade/examples/attributes.jade [deleted file]
node/node_modules/jade/examples/attributes.js [deleted file]
node/node_modules/jade/examples/code.jade [deleted file]
node/node_modules/jade/examples/code.js [deleted file]
node/node_modules/jade/examples/conditionals.jade [deleted file]
node/node_modules/jade/examples/conditionals.js [deleted file]
node/node_modules/jade/examples/csrf.jade [deleted file]
node/node_modules/jade/examples/csrf.js [deleted file]
node/node_modules/jade/examples/dynamicscript.jade [deleted file]
node/node_modules/jade/examples/dynamicscript.js [deleted file]
node/node_modules/jade/examples/each.jade [deleted file]
node/node_modules/jade/examples/each.js [deleted file]
node/node_modules/jade/examples/form.jade [deleted file]
node/node_modules/jade/examples/form.js [deleted file]
node/node_modules/jade/examples/includes.jade [deleted file]
node/node_modules/jade/examples/includes.js [deleted file]
node/node_modules/jade/examples/includes/foot.jade [deleted file]
node/node_modules/jade/examples/includes/head.jade [deleted file]
node/node_modules/jade/examples/includes/scripts.jade [deleted file]
node/node_modules/jade/examples/includes/style.css [deleted file]
node/node_modules/jade/examples/layout-debug.js [deleted file]
node/node_modules/jade/examples/layout.jade [deleted file]
node/node_modules/jade/examples/layout.js [deleted file]
node/node_modules/jade/examples/mixins.jade [deleted file]
node/node_modules/jade/examples/mixins.js [deleted file]
node/node_modules/jade/examples/mixins/dialog.jade [deleted file]
node/node_modules/jade/examples/mixins/profile.jade [deleted file]
node/node_modules/jade/examples/model.jade [deleted file]
node/node_modules/jade/examples/model.js [deleted file]
node/node_modules/jade/examples/nested-filters.jade [deleted file]
node/node_modules/jade/examples/nested-filters.js [deleted file]
node/node_modules/jade/examples/rss.jade [deleted file]
node/node_modules/jade/examples/rss.js [deleted file]
node/node_modules/jade/examples/text.jade [deleted file]
node/node_modules/jade/examples/text.js [deleted file]
node/node_modules/jade/examples/whitespace.jade [deleted file]
node/node_modules/jade/examples/whitespace.js [deleted file]
node/node_modules/jade/index.js [deleted file]
node/node_modules/jade/jade.js [deleted file]
node/node_modules/jade/jade.min.js [deleted file]
node/node_modules/jade/lib/compiler.js [deleted file]
node/node_modules/jade/lib/doctypes.js [deleted file]
node/node_modules/jade/lib/filters.js [deleted file]
node/node_modules/jade/lib/index.js [deleted symlink]
node/node_modules/jade/lib/inline-tags.js [deleted file]
node/node_modules/jade/lib/jade.js [deleted file]
node/node_modules/jade/lib/lexer.js [deleted file]
node/node_modules/jade/lib/nodes/block-comment.js [deleted file]
node/node_modules/jade/lib/nodes/block.js [deleted file]
node/node_modules/jade/lib/nodes/code.js [deleted file]
node/node_modules/jade/lib/nodes/comment.js [deleted file]
node/node_modules/jade/lib/nodes/doctype.js [deleted file]
node/node_modules/jade/lib/nodes/each.js [deleted file]
node/node_modules/jade/lib/nodes/filter.js [deleted file]
node/node_modules/jade/lib/nodes/index.js [deleted file]
node/node_modules/jade/lib/nodes/literal.js [deleted file]
node/node_modules/jade/lib/nodes/mixin.js [deleted file]
node/node_modules/jade/lib/nodes/node.js [deleted file]
node/node_modules/jade/lib/nodes/tag.js [deleted file]
node/node_modules/jade/lib/nodes/text.js [deleted file]
node/node_modules/jade/lib/parser.js [deleted file]
node/node_modules/jade/lib/runtime.js [deleted file]
node/node_modules/jade/lib/self-closing.js [deleted file]
node/node_modules/jade/lib/utils.js [deleted file]
node/node_modules/jade/package.json [deleted file]
node/node_modules/jade/runtime.js [deleted file]
node/node_modules/jade/runtime.min.js [deleted file]
node/node_modules/jade/support/benchmark.js [deleted file]
node/node_modules/jade/support/coffee-script/.gitignore [deleted file]
node/node_modules/jade/support/coffee-script/Cakefile [deleted file]
node/node_modules/jade/support/coffee-script/LICENSE [deleted file]
node/node_modules/jade/support/coffee-script/README [deleted file]
node/node_modules/jade/support/coffee-script/Rakefile [deleted file]
node/node_modules/jade/support/coffee-script/bin/cake [deleted file]
node/node_modules/jade/support/coffee-script/bin/coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/aliases.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/array_comprehensions.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/block_comment.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/cake_tasks.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/classes.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/comparisons.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/conditionals.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/embedded.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/existence.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/expressions.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_assignment.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_comprehension.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_try.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/fat_arrow.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/functions.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/heredocs.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/interpolation.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/interpolation_expression.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/multiple_return_values.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/object_comprehensions.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/object_extraction.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/objects_and_arrays.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/objects_reserved.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/overview.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/parallel_assignment.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/patterns_and_splats.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/prototypes.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/range_comprehensions.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/scope.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/slices.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/soaks.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/splats.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/splices.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/strings.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/switch.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/try.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/coffee/while.coffee [deleted file]
node/node_modules/jade/support/coffee-script/documentation/css/docs.css [deleted file]
node/node_modules/jade/support/coffee-script/documentation/css/idle.css [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/browser.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/cake.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/coffee-script.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/command.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/docco.css [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/grammar.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/helpers.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/index.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/lexer.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/nodes.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/optparse.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/repl.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/rewriter.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/scope.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/docs/underscore.html [deleted file]
node/node_modules/jade/support/coffee-script/documentation/images/favicon.ico [deleted file]
node/node_modules/jade/support/coffee-script/documentation/images/logo.png [deleted file]
node/node_modules/jade/support/coffee-script/documentation/index.html.erb [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/aliases.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/array_comprehensions.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/block_comment.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/cake_tasks.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/classes.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/comparisons.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/conditionals.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/embedded.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/existence.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/expressions.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/expressions_assignment.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/expressions_comprehension.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/expressions_try.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/fat_arrow.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/functions.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/heredocs.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/interpolation.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/interpolation_expression.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/multiple_return_values.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/object_comprehensions.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/object_extraction.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/objects_and_arrays.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/objects_reserved.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/overview.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/parallel_assignment.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/patterns_and_splats.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/prototypes.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/range_comprehensions.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/scope.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/slices.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/soaks.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/splats.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/splices.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/strings.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/switch.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/try.js [deleted file]
node/node_modules/jade/support/coffee-script/documentation/js/while.js [deleted file]
node/node_modules/jade/support/coffee-script/examples/beautiful_code/binary_search.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/beautiful_code/quicksort_runtime.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/blocks.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/code.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/computer_science/README [deleted file]
node/node_modules/jade/support/coffee-script/examples/computer_science/binary_search.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/computer_science/bubble_sort.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/computer_science/linked_list.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/computer_science/luhn_algorithm.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/computer_science/merge_sort.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/computer_science/selection_sort.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/poignant.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/potion.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/underscore.coffee [deleted file]
node/node_modules/jade/support/coffee-script/examples/web_server.coffee [deleted file]
node/node_modules/jade/support/coffee-script/extras/EXTRAS [deleted file]
node/node_modules/jade/support/coffee-script/extras/coffee-script.js [deleted file]
node/node_modules/jade/support/coffee-script/extras/jsl.conf [deleted file]
node/node_modules/jade/support/coffee-script/index.html [deleted file]
node/node_modules/jade/support/coffee-script/lib/browser.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/cake.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/coffee-script.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/command.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/grammar.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/helpers.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/index.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/lexer.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/nodes.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/optparse.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/parser.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/repl.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/rewriter.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/scope.js [deleted file]
node/node_modules/jade/support/coffee-script/lib/utilities.js [deleted file]
node/node_modules/jade/support/coffee-script/package.json [deleted file]
node/node_modules/jade/support/coffee-script/src/browser.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/cake.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/coffee-script.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/command.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/grammar.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/helpers.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/index.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/lexer.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/nodes.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/optparse.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/repl.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/rewriter.coffee [deleted file]
node/node_modules/jade/support/coffee-script/src/scope.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test.html [deleted file]
node/node_modules/jade/support/coffee-script/test/test_arguments.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_assignment.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_break.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_chaining.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_classes.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_comments.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_compilation.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_compound_assignment.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_comprehensions.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_existence.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_expressions.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_functions.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_helpers.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_heredocs.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_if.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_importing.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_literals.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_module.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_operations.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_option_parser.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_pattern_matching.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_ranges_slices_and_splices.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_regexps.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_returns.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_splats.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_strings.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_switch.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_try_catch.coffee [deleted file]
node/node_modules/jade/support/coffee-script/test/test_while.coffee [deleted file]
node/node_modules/jade/support/compile.js [deleted file]
node/node_modules/jade/support/expresso/.gitignore [deleted file]
node/node_modules/jade/support/expresso/.gitmodules [deleted file]
node/node_modules/jade/support/expresso/History.md [deleted file]
node/node_modules/jade/support/expresso/Makefile [deleted file]
node/node_modules/jade/support/expresso/Readme.md [deleted file]
node/node_modules/jade/support/expresso/bin/expresso [deleted file]
node/node_modules/jade/support/expresso/docs/api.html [deleted file]
node/node_modules/jade/support/expresso/docs/index.html [deleted file]
node/node_modules/jade/support/expresso/docs/index.md [deleted file]
node/node_modules/jade/support/expresso/docs/layout/foot.html [deleted file]
node/node_modules/jade/support/expresso/docs/layout/head.html [deleted file]
node/node_modules/jade/support/expresso/lib/bar.js [deleted file]
node/node_modules/jade/support/expresso/lib/foo.js [deleted file]
node/node_modules/jade/support/expresso/package.json [deleted file]
node/node_modules/jade/support/expresso/test/assert.test.js [deleted file]
node/node_modules/jade/support/expresso/test/async.test.js [deleted file]
node/node_modules/jade/support/expresso/test/bar.test.js [deleted file]
node/node_modules/jade/support/expresso/test/foo.test.js [deleted file]
node/node_modules/jade/support/expresso/test/http.test.js [deleted file]
node/node_modules/jade/support/expresso/test/serial/async.test.js [deleted file]
node/node_modules/jade/support/expresso/test/serial/http.test.js [deleted file]
node/node_modules/jade/support/foot.js [deleted file]
node/node_modules/jade/support/head.js [deleted file]
node/node_modules/jade/support/sass/.gitignore [deleted file]
node/node_modules/jade/support/sass/History.md [deleted file]
node/node_modules/jade/support/sass/Makefile [deleted file]
node/node_modules/jade/support/sass/Readme.md [deleted file]
node/node_modules/jade/support/sass/index.js [deleted symlink]
node/node_modules/jade/support/sass/lib/sass.js [deleted file]
node/node_modules/jade/support/sass/package.json [deleted file]
node/node_modules/jade/support/sass/seed.yml [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/collect.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/comment.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/comment.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/continuation.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/continuation.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/literal.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/literal.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/mixin.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/mixin.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/mixin.undefined.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/properties.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/properties.expand.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/properties.expand.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/properties.invalid.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/properties.nested.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/properties.nested.invalid.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/properties.nested.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/properties.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/selectors.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/selectors.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/variables.alternate.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/variables.alternate.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/variables.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/variables.regular.css [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/variables.regular.sass [deleted file]
node/node_modules/jade/support/sass/spec/fixtures/variables.sass [deleted file]
node/node_modules/jade/support/sass/spec/lib/images/bg.png [deleted file]
node/node_modules/jade/support/sass/spec/lib/images/hr.png [deleted file]
node/node_modules/jade/support/sass/spec/lib/images/loading.gif [deleted file]
node/node_modules/jade/support/sass/spec/lib/images/sprites.bg.png [deleted file]
node/node_modules/jade/support/sass/spec/lib/images/sprites.png [deleted file]
node/node_modules/jade/support/sass/spec/lib/images/vr.png [deleted file]
node/node_modules/jade/support/sass/spec/lib/jspec.css [deleted file]
node/node_modules/jade/support/sass/spec/lib/jspec.growl.js [deleted file]
node/node_modules/jade/support/sass/spec/lib/jspec.jquery.js [deleted file]
node/node_modules/jade/support/sass/spec/lib/jspec.js [deleted file]
node/node_modules/jade/support/sass/spec/lib/jspec.nodejs.js [deleted file]
node/node_modules/jade/support/sass/spec/lib/jspec.shell.js [deleted file]
node/node_modules/jade/support/sass/spec/lib/jspec.timers.js [deleted file]
node/node_modules/jade/support/sass/spec/lib/jspec.xhr.js [deleted file]
node/node_modules/jade/support/sass/spec/node.js [deleted file]
node/node_modules/jade/support/sass/spec/spec.core.js [deleted file]
node/node_modules/jade/support/stylus/.gitignore [deleted file]
node/node_modules/jade/support/stylus/.gitmodules [deleted file]
node/node_modules/jade/support/stylus/.npmignore [deleted file]
node/node_modules/jade/support/stylus/History.md [deleted file]
node/node_modules/jade/support/stylus/LICENSE [deleted file]
node/node_modules/jade/support/stylus/Makefile [deleted file]
node/node_modules/jade/support/stylus/Readme.md [deleted file]
node/node_modules/jade/support/stylus/bin/stylus [deleted file]
node/node_modules/jade/support/stylus/bin/stylus-tutorial [deleted file]
node/node_modules/jade/support/stylus/bm.js [deleted file]
node/node_modules/jade/support/stylus/docs/bifs.md [deleted file]
node/node_modules/jade/support/stylus/docs/comments.md [deleted file]
node/node_modules/jade/support/stylus/docs/compare.md [deleted file]
node/node_modules/jade/support/stylus/docs/conditionals.md [deleted file]
node/node_modules/jade/support/stylus/docs/css-style.md [deleted file]
node/node_modules/jade/support/stylus/docs/error-reporting.md [deleted file]
node/node_modules/jade/support/stylus/docs/escape.md [deleted file]
node/node_modules/jade/support/stylus/docs/executable.md [deleted file]
node/node_modules/jade/support/stylus/docs/font-face.md [deleted file]
node/node_modules/jade/support/stylus/docs/functions.md [deleted file]
node/node_modules/jade/support/stylus/docs/functions.url.md [deleted file]
node/node_modules/jade/support/stylus/docs/import.md [deleted file]
node/node_modules/jade/support/stylus/docs/interpolation.md [deleted file]
node/node_modules/jade/support/stylus/docs/introspection.md [deleted file]
node/node_modules/jade/support/stylus/docs/iteration.md [deleted file]
node/node_modules/jade/support/stylus/docs/js.md [deleted file]
node/node_modules/jade/support/stylus/docs/keyframes.md [deleted file]
node/node_modules/jade/support/stylus/docs/literal.md [deleted file]
node/node_modules/jade/support/stylus/docs/media.md [deleted file]
node/node_modules/jade/support/stylus/docs/middleware.md [deleted file]
node/node_modules/jade/support/stylus/docs/mixins.md [deleted file]
node/node_modules/jade/support/stylus/docs/operators.md [deleted file]
node/node_modules/jade/support/stylus/docs/selectors.md [deleted file]
node/node_modules/jade/support/stylus/docs/textmate.md [deleted file]
node/node_modules/jade/support/stylus/docs/vargs.md [deleted file]
node/node_modules/jade/support/stylus/docs/variables.md [deleted file]
node/node_modules/jade/support/stylus/editors/Stylus.tmbundle/Syntaxes/Stylus.tmLanguage [deleted file]
node/node_modules/jade/support/stylus/editors/Stylus.tmbundle/info.plist [deleted file]
node/node_modules/jade/support/stylus/examples/arithmetic.js [deleted file]
node/node_modules/jade/support/stylus/examples/arithmetic.styl [deleted file]
node/node_modules/jade/support/stylus/examples/basic.js [deleted file]
node/node_modules/jade/support/stylus/examples/basic.styl [deleted file]
node/node_modules/jade/support/stylus/examples/builtins.js [deleted file]
node/node_modules/jade/support/stylus/examples/builtins.styl [deleted file]
node/node_modules/jade/support/stylus/examples/comments.js [deleted file]
node/node_modules/jade/support/stylus/examples/comments.styl [deleted file]
node/node_modules/jade/support/stylus/examples/compress.js [deleted file]
node/node_modules/jade/support/stylus/examples/conversions.js [deleted file]
node/node_modules/jade/support/stylus/examples/conversions.styl [deleted file]
node/node_modules/jade/support/stylus/examples/functions.js [deleted file]
node/node_modules/jade/support/stylus/examples/functions.styl [deleted file]
node/node_modules/jade/support/stylus/examples/images.js [deleted file]
node/node_modules/jade/support/stylus/examples/images.styl [deleted file]
node/node_modules/jade/support/stylus/examples/images/gopher.jpg [deleted file]
node/node_modules/jade/support/stylus/examples/images/jesus.gif [deleted file]
node/node_modules/jade/support/stylus/examples/images/sprite.gif [deleted file]
node/node_modules/jade/support/stylus/examples/implicit-functions.js [deleted file]
node/node_modules/jade/support/stylus/examples/implicit-functions.styl [deleted file]
node/node_modules/jade/support/stylus/examples/import.js [deleted file]
node/node_modules/jade/support/stylus/examples/import.styl [deleted file]
node/node_modules/jade/support/stylus/examples/js-functions.js [deleted file]
node/node_modules/jade/support/stylus/examples/js-functions.styl [deleted file]
node/node_modules/jade/support/stylus/examples/literal.js [deleted file]
node/node_modules/jade/support/stylus/examples/literal.styl [deleted file]
node/node_modules/jade/support/stylus/examples/middleware.js [deleted file]
node/node_modules/jade/support/stylus/examples/mixins/box.styl [deleted file]
node/node_modules/jade/support/stylus/examples/nesting.js [deleted file]
node/node_modules/jade/support/stylus/examples/nesting.styl [deleted file]
node/node_modules/jade/support/stylus/examples/public/.gitignore [deleted file]
node/node_modules/jade/support/stylus/examples/variables.js [deleted file]
node/node_modules/jade/support/stylus/examples/variables.styl [deleted file]
node/node_modules/jade/support/stylus/index.js [deleted file]
node/node_modules/jade/support/stylus/lib/colors.js [deleted file]
node/node_modules/jade/support/stylus/lib/convert/css.js [deleted file]
node/node_modules/jade/support/stylus/lib/functions/image.js [deleted file]
node/node_modules/jade/support/stylus/lib/functions/index.js [deleted file]
node/node_modules/jade/support/stylus/lib/functions/index.styl [deleted file]
node/node_modules/jade/support/stylus/lib/functions/url.js [deleted file]
node/node_modules/jade/support/stylus/lib/lexer.js [deleted file]
node/node_modules/jade/support/stylus/lib/middleware.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/binop.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/block.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/boolean.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/call.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/charset.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/each.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/expression.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/function.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/group.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/hsla.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/ident.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/if.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/import.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/index.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/keyframes.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/literal.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/media.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/node.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/null.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/page.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/params.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/property.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/return.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/rgba.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/root.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/selector.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/string.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/ternary.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/unaryop.js [deleted file]
node/node_modules/jade/support/stylus/lib/nodes/unit.js [deleted file]
node/node_modules/jade/support/stylus/lib/parser.js [deleted file]
node/node_modules/jade/support/stylus/lib/renderer.js [deleted file]
node/node_modules/jade/support/stylus/lib/stack/frame.js [deleted file]
node/node_modules/jade/support/stylus/lib/stack/index.js [deleted file]
node/node_modules/jade/support/stylus/lib/stack/scope.js [deleted file]
node/node_modules/jade/support/stylus/lib/stylus.js [deleted file]
node/node_modules/jade/support/stylus/lib/token.js [deleted file]
node/node_modules/jade/support/stylus/lib/utils.js [deleted file]
node/node_modules/jade/support/stylus/lib/visitor/compiler.js [deleted file]
node/node_modules/jade/support/stylus/lib/visitor/evaluator.js [deleted file]
node/node_modules/jade/support/stylus/lib/visitor/index.js [deleted file]
node/node_modules/jade/support/stylus/package.json [deleted file]
node/node_modules/jade/support/stylus/test/cases/arithmetic.color.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/arithmetic.color.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/arithmetic.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/arithmetic.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/arithmetic.unary.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/arithmetic.unary.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.components.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.components.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.dark.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.dark.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.darken-by.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.darken-by.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.image-size.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.image-size.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.join.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.join.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.last.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.last.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.length.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.length.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.light.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.light.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.lighten-by.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.lighten-by.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.lookup.complex.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.lookup.complex.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.lookup.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.lookup.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.match.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.match.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.opposite-position.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.opposite-position.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.rgba.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.rgba.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.type.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.type.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.unit.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.unit.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.unquote.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.unquote.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.url.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/bifs.url.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/coercion.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/coercion.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/comments.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/comments.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/compress.units.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/compress.units.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/conditional-assignment.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/conditional-assignment.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.functions.single-line.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.functions.single-line.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.if.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.if.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.keyframes.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.keyframes.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.large.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.large.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.media.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.media.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.mixins.braces.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.mixins.braces.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.mixins.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.mixins.root.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.mixins.root.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.mixins.root.wonky.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.mixins.root.wonky.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.mixins.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.selectors.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.selectors.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.whitespace.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/css.whitespace.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/escape.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/escape.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/for.complex.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/for.complex.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/for.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/for.function.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/for.function.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/for.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/function.arguments.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/function.arguments.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/function.literals.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/function.literals.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.arg-calls.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.arg-calls.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.call.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.call.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.defaults.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.defaults.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.multi-line.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.multi-line.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.multiple-calls.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.multiple-calls.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.nested-calls.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.nested-calls.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.nested.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.nested.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.property.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.property.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.return.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.return.each.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.return.each.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.return.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.variable.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.variable.ident.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.variable.ident.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/functions.variable.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.else.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.else.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.mixin.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.mixin.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.postfix.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.postfix.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.selectors.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.selectors.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/if.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.basic.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.basic.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.basic/a.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.basic/b.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.basic/c.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.complex.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.complex.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.complex/a.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.complex/c.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.complex/nested/b.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.index.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.index.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.index/vendor/a.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.index/vendor/b.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.index/vendor/c.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.index/vendor/index.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.literal.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.literal.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.mixins.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.mixins.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.ordering.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.ordering.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.ordering/five.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.ordering/four.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/import.ordering/two.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/important.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/important.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/interpolation.properties.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/interpolation.properties.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/introspection.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/introspection.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/jquery.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/jquery.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/list.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/list.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/literal.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/literal.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/media.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/media.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixin.conditional.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixin.conditional.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixin.order.conditional.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixin.order.conditional.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixin.order.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixin.order.nested.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixin.order.nested.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixin.order.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.complex.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.complex.fix-to.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.complex.fix-to.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.complex.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.conditional.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.conditional.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.nested.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.nested.selectors.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.nested.selectors.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.nested.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.order.2.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.order.2.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.return.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.return.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.root.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins.root.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/mixins/box.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operator.range.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operator.range.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.assignment.function.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.assignment.function.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.assignment.mixin.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.assignment.mixin.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.assignment.root.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.assignment.root.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.complex.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.complex.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.equality.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.equality.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.in.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.in.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.mixins.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.mixins.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.precedence.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.precedence.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.subscript.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.subscript.range.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.subscript.range.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/operators.subscript.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/page.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/page.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/parent.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/parent.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/properties.colons.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/properties.colons.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/properties.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/properties.one-line.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/properties.one-line.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/properties.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.107.lookup-failure.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.107.lookup-failure.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.127.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.127.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.130.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.130.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.131.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.131.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.137.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.137.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.139.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.139.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.142.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.142.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.146.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.146.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.153.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.153.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.154.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.154.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.156.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/regression.156.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/rule.charset.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/rule.charset.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/rulset.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/rulset.newline.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/rulset.newline.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/rulset.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/scope.complex.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/scope.complex.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/scope.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/scope.nested.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/scope.nested.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/scope.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.complex.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.complex.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.nested.comma.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.nested.comma.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.nested.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.nested.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.pseudo.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.pseudo.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/selectors.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/self-assignment.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/self-assignment.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/vargs.call.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/vargs.call.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/vargs.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/vargs.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/variable.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/variable.styl [deleted file]
node/node_modules/jade/support/stylus/test/cases/variables.css [deleted file]
node/node_modules/jade/support/stylus/test/cases/variables.styl [deleted file]
node/node_modules/jade/support/stylus/test/images/gif [deleted file]
node/node_modules/jade/support/stylus/test/images/squirrel.jpeg [deleted file]
node/node_modules/jade/support/stylus/test/images/tux.png [deleted file]
node/node_modules/jade/support/stylus/test/run.js [deleted file]
node/node_modules/jade/test/filters.test.js [deleted file]
node/node_modules/jade/test/fixtures/invalid.jade [deleted file]
node/node_modules/jade/test/fixtures/layout.jade [deleted file]
node/node_modules/jade/test/jade.test.js [deleted file]
node/node_modules/node-static/LICENSE [deleted file]
node/node_modules/node-static/README.md [deleted file]
node/node_modules/node-static/benchmark/node-static-0.3.0.txt [deleted file]
node/node_modules/node-static/examples/file-server.js [deleted file]
node/node_modules/node-static/lib/node-static.js [deleted file]
node/node_modules/node-static/lib/node-static/mime.js [deleted file]
node/node_modules/node-static/lib/node-static/util.js [deleted file]
node/node_modules/node-static/package.json [deleted file]
node/node_modules/socket.io-client/.gitignore [deleted file]
node/node_modules/socket.io-client/.npmignore [deleted file]
node/node_modules/socket.io-client/History.md [deleted file]
node/node_modules/socket.io-client/Makefile [deleted file]
node/node_modules/socket.io-client/README.md [deleted file]
node/node_modules/socket.io-client/bin/builder.js [deleted file]
node/node_modules/socket.io-client/dist/WebSocketMain.swf [deleted file]
node/node_modules/socket.io-client/dist/WebSocketMainInsecure.swf [deleted file]
node/node_modules/socket.io-client/dist/socket.io.js [deleted file]
node/node_modules/socket.io-client/dist/socket.io.min.js [deleted file]
node/node_modules/socket.io-client/lib/events.js [deleted file]
node/node_modules/socket.io-client/lib/io.js [deleted file]
node/node_modules/socket.io-client/lib/json.js [deleted file]
node/node_modules/socket.io-client/lib/namespace.js [deleted file]
node/node_modules/socket.io-client/lib/parser.js [deleted file]
node/node_modules/socket.io-client/lib/socket.io-client.js [deleted symlink]
node/node_modules/socket.io-client/lib/socket.js [deleted file]
node/node_modules/socket.io-client/lib/transport.js [deleted file]
node/node_modules/socket.io-client/lib/transports/flashsocket.js [deleted file]
node/node_modules/socket.io-client/lib/transports/htmlfile.js [deleted file]
node/node_modules/socket.io-client/lib/transports/jsonp-polling.js [deleted file]
node/node_modules/socket.io-client/lib/transports/websocket.js [deleted file]
node/node_modules/socket.io-client/lib/transports/xhr-polling.js [deleted file]
node/node_modules/socket.io-client/lib/transports/xhr.js [deleted file]
node/node_modules/socket.io-client/lib/util.js [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/.gitignore [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/README.md [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/WebSocketMain.swf [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/WebSocketMainInsecure.zip [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/IWebSocketLogger.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocket.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketEvent.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketMain.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/build.sh [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/sample.html [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/swfobject.js [deleted file]
node/node_modules/socket.io-client/lib/vendor/web-socket-js/web_socket.js [deleted file]
node/node_modules/socket.io-client/package.json [deleted file]
node/node_modules/socket.io-client/support/should.js [deleted file]
node/node_modules/socket.io-client/support/test-runner/app.js [deleted file]
node/node_modules/socket.io-client/support/test-runner/index.jade [deleted file]
node/node_modules/socket.io-client/support/test-runner/public/javascript/jquery.js [deleted file]
node/node_modules/socket.io-client/support/test-runner/public/javascript/runner.js [deleted file]
node/node_modules/socket.io-client/support/test-runner/public/javascript/script.js [deleted file]
node/node_modules/socket.io-client/support/test-runner/public/stylesheets/main.css [deleted file]
node/node_modules/socket.io-client/support/test-runner/public/stylesheets/main.styl [deleted file]
node/node_modules/socket.io-client/test/events.test.js [deleted file]
node/node_modules/socket.io-client/test/io.test.js [deleted file]
node/node_modules/socket.io-client/test/node/builder.common.js [deleted file]
node/node_modules/socket.io-client/test/node/builder.test.js [deleted file]
node/node_modules/socket.io-client/test/parser.test.js [deleted file]
node/node_modules/socket.io-client/test/socket.test.js [deleted file]
node/node_modules/socket.io-client/test/util.test.js [deleted file]
node/node_modules/socket.io/.gitignore [deleted file]
node/node_modules/socket.io/.npmignore [deleted file]
node/node_modules/socket.io/History.md [deleted file]
node/node_modules/socket.io/Makefile [deleted file]
node/node_modules/socket.io/Readme.md [deleted file]
node/node_modules/socket.io/examples/chat/app.js [deleted file]
node/node_modules/socket.io/examples/chat/index.jade [deleted file]
node/node_modules/socket.io/examples/chat/package.json [deleted file]
node/node_modules/socket.io/examples/chat/public/stylesheets/mixins.styl [deleted file]
node/node_modules/socket.io/examples/chat/public/stylesheets/style.css [deleted file]
node/node_modules/socket.io/examples/chat/public/stylesheets/style.styl [deleted file]
node/node_modules/socket.io/examples/irc-output/app.js [deleted file]
node/node_modules/socket.io/examples/irc-output/index.jade [deleted file]
node/node_modules/socket.io/examples/irc-output/irc.js [deleted file]
node/node_modules/socket.io/examples/irc-output/package.json [deleted file]
node/node_modules/socket.io/examples/irc-output/public/stylesheets/style.styl [deleted file]
node/node_modules/socket.io/index.js [deleted file]
node/node_modules/socket.io/lib/logger.js [deleted file]
node/node_modules/socket.io/lib/manager.js [deleted file]
node/node_modules/socket.io/lib/namespace.js [deleted file]
node/node_modules/socket.io/lib/parser.js [deleted file]
node/node_modules/socket.io/lib/socket.io.js [deleted file]
node/node_modules/socket.io/lib/socket.js [deleted file]
node/node_modules/socket.io/lib/store.js [deleted file]
node/node_modules/socket.io/lib/stores/memory.js [deleted file]
node/node_modules/socket.io/lib/stores/redis.js [deleted file]
node/node_modules/socket.io/lib/transport.js [deleted file]
node/node_modules/socket.io/lib/transports/flashsocket.js [deleted file]
node/node_modules/socket.io/lib/transports/htmlfile.js [deleted file]
node/node_modules/socket.io/lib/transports/http-polling.js [deleted file]
node/node_modules/socket.io/lib/transports/http.js [deleted file]
node/node_modules/socket.io/lib/transports/index.js [deleted file]
node/node_modules/socket.io/lib/transports/jsonp-polling.js [deleted file]
node/node_modules/socket.io/lib/transports/websocket.js [deleted file]
node/node_modules/socket.io/lib/transports/websocket/default.js [deleted file]
node/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js [deleted file]
node/node_modules/socket.io/lib/transports/websocket/index.js [deleted file]
node/node_modules/socket.io/lib/transports/xhr-polling.js [deleted file]
node/node_modules/socket.io/lib/util.js [deleted file]
node/node_modules/socket.io/package.json [deleted file]
node/node_modules/socket.io/support/node-websocket-client/LICENSE [deleted file]
node/node_modules/socket.io/support/node-websocket-client/Makefile [deleted file]
node/node_modules/socket.io/support/node-websocket-client/README.md [deleted file]
node/node_modules/socket.io/support/node-websocket-client/examples/client-unix.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/examples/client.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/examples/server-unix.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/lib/websocket.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/package.json [deleted file]
node/node_modules/socket.io/support/node-websocket-client/test/test-basic.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/test/test-client-close.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/test/test-readonly-attrs.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/test/test-ready-state.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/test/test-server-close.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/test/test-unix-send-fd.js [deleted file]
node/node_modules/socket.io/support/node-websocket-client/test/test-unix-sockets.js [deleted file]
node/node_modules/socket.io/test/common.js [deleted file]
node/node_modules/socket.io/test/fixtures/cert.crt [deleted file]
node/node_modules/socket.io/test/fixtures/key.key [deleted file]
node/node_modules/socket.io/test/io.test.js [deleted file]
node/node_modules/socket.io/test/leaks/socket.leaktest.js [deleted file]
node/node_modules/socket.io/test/manager.test.js [deleted file]
node/node_modules/socket.io/test/namespace.test.js [deleted file]
node/node_modules/socket.io/test/parser.test.js [deleted file]
node/node_modules/socket.io/test/socket.js [deleted file]
node/node_modules/socket.io/test/stores.memory.test.js [deleted file]
node/node_modules/socket.io/test/stores.redis.test.js [deleted file]
node/node_modules/socket.io/test/transports.flashsocket.test.js [deleted file]
node/node_modules/socket.io/test/transports.htmlfile.test.js [deleted file]
node/node_modules/socket.io/test/transports.jsonp-polling.test.js [deleted file]
node/node_modules/socket.io/test/transports.websocket.hybi07-12.parser.test.js [deleted file]
node/node_modules/socket.io/test/transports.websocket.test.js [deleted file]
node/node_modules/socket.io/test/transports.xhr-polling.test.js [deleted file]
node/node_modules/uglify-js/.gitignore [deleted file]
node/node_modules/uglify-js/README.html [deleted file]
node/node_modules/uglify-js/README.org [deleted file]
node/node_modules/uglify-js/bin/uglifyjs [deleted file]
node/node_modules/uglify-js/docstyle.css [deleted file]
node/node_modules/uglify-js/lib/object-ast.js [deleted file]
node/node_modules/uglify-js/lib/parse-js.js [deleted file]
node/node_modules/uglify-js/lib/process.js [deleted file]
node/node_modules/uglify-js/lib/squeeze-more.js [deleted file]
node/node_modules/uglify-js/package.json [deleted file]
node/node_modules/uglify-js/test/beautify.js [deleted file]
node/node_modules/uglify-js/test/testparser.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/array1.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/array2.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/array3.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/array4.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/assignment.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/concatstring.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/const.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/forstatement.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/if.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue10.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue11.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue13.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue14.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue16.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue17.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue20.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue21.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue25.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue27.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue28.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue29.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue30.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue34.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue4.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue48.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue50.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue53.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue68.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue69.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/issue9.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/mangle.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/var.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/expected/with.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/array1.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/array2.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/array3.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/array4.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/assignment.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/concatstring.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/const.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/forstatement.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/if.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/ifreturn.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue10.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue11.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue13.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue14.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue16.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue17.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue20.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue21.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue25.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue27.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue28.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue29.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue30.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue34.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue4.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue48.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue50.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue53.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue54.1.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue68.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue69.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/issue9.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/mangle.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/strict-equals.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/var.js [deleted file]
node/node_modules/uglify-js/test/unit/compress/test/with.js [deleted file]
node/node_modules/uglify-js/test/unit/scripts.js [deleted file]
node/node_modules/uglify-js/tmp/hoist.js [deleted file]
node/node_modules/uglify-js/tmp/instrument.js [deleted file]
node/node_modules/uglify-js/tmp/instrument2.js [deleted file]
node/node_modules/uglify-js/tmp/test.js [deleted file]
node/node_modules/uglify-js/uglify-js.js [deleted file]

index 0a8929374c19fc19089bdcdc290668aeb96e28b6..6d95f8767ba786fcab56719bc9f0957d7b61dfc2 100644 (file)
@@ -1 +1,3 @@
-*.DS_*
\ No newline at end of file
+*.DS_*
+node/node_modules/
+node_modules/
diff --git a/README.md b/README.md
new file mode 100755 (executable)
index 0000000..518e502
--- /dev/null
+++ b/README.md
@@ -0,0 +1,27 @@
+# Installation\r
+\r
+*Install the dependencies\r
+    $npm install jade\r
+\r
+    $npm install node-static\r
+\r
+    $npm install uglify-js\r
+\r
+    $npm install socket.io\r
+\r
+    $npm install socket.io-client\r
+    \r
+*Edit the configuration file\r
+    $nano node/config.json\r
+    \r
+*If you're using SSL, create your certificate and key, place it in the node foder.\r
+\r
+# Running \r
+    $node node/kiwi.js\r
+\r
+# Bugs\r
+Report bugs using the issue tracker on github: https://github.com/prawnsalad/KiwiIRC/issues\r
+\r
+# Licence\r
+\r
+To be decided
\ No newline at end of file
diff --git a/node/node_modules/jade/.gitignore b/node/node_modules/jade/.gitignore
deleted file mode 100644 (file)
index 5eb48f0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-.DS_Store
-lib-cov
-testing
-node_modules
diff --git a/node/node_modules/jade/.gitmodules b/node/node_modules/jade/.gitmodules
deleted file mode 100644 (file)
index b5b4321..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-[submodule "support/expresso"]
-       path = support/expresso
-       url = git://github.com/visionmedia/expresso.git
-[submodule "support/sass"]
-       path = support/sass
-       url = git://github.com/visionmedia/sass.js.git
-[submodule "benchmarks/haml-js"]
-       path = benchmarks/haml-js
-       url = git://github.com/creationix/haml-js.git
-[submodule "benchmarks/ejs"]
-       path = benchmarks/ejs
-       url = git://github.com/visionmedia/ejs.git
-[submodule "benchmarks/haml"]
-       path = benchmarks/haml
-       url = git://github.com/visionmedia/haml.js.git
-[submodule "support/coffee-script"]
-       path = support/coffee-script
-       url = http://github.com/jashkenas/coffee-script.git
-[submodule "support/stylus"]
-       path = support/stylus
-       url = git://github.com/LearnBoost/stylus.git
diff --git a/node/node_modules/jade/.npmignore b/node/node_modules/jade/.npmignore
deleted file mode 100644 (file)
index 10fd0d4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-test
-support
-benchmarks
-examples
diff --git a/node/node_modules/jade/History.md b/node/node_modules/jade/History.md
deleted file mode 100644 (file)
index 790a98b..0000000
+++ /dev/null
@@ -1,437 +0,0 @@
-
-0.15.4 / 2011-09-05 
-==================
-
-  * Fixed script template html. Closes #316
-  * Revert "Fixed script() tag with trailing ".". Closes #314"
-
-0.15.3 / 2011-08-30 
-==================
-
-  * Added Makefile example. Closes #312
-  * Fixed script() tag with trailing ".". Closes #314
-
-0.15.2 / 2011-08-26 
-==================
-
-  * Fixed new conditional boundaries. Closes #307
-
-0.15.1 / 2011-08-26 
-==================
-
-  * Fixed jade(1) support due to `res.render()` removal
-  * Removed --watch support (use a makefile + watch...)
-
-0.15.0 / 2011-08-26 
-==================
-
-  * Added `client` option to reference runtime helpers
-  * Added `Array.isArray()` for runtime.js as well
-  * Added `Object.keys()` for the client-side runtime
-  * Added first-class `if`, `unless`, `else` and `else if` support
-  * Added first-class `each` / `for` support
-  * Added `make benchmark` for continuous-bench
-  * Removed `inline` option, SS helpers are no longer inlined either
-  * Removed `Parser#debug()`
-  * Removed `jade.render()` and `jade.renderFile()`
-  * Fixed runtime.js `escape()` bug causing window.escape to be used
-  * Fixed a bunch of tests
-
-0.14.2 / 2011-08-16 
-==================
-
-  * Added `include` support for non-jade files
-  * Fixed code indentation when followed by newline(s). Closes #295 [reported by masylum]
-
-0.14.1 / 2011-08-14 
-==================
-
-  * Added `colons` option for everyone stuck with ":". Closes #231
-  * Optimization: consecutive lines are merged in compiled js
-
-0.14.0 / 2011-08-08 
-==================
-
-  * Added array iteration with index example. Closes #276
-  * Added _runtime.js_
-  * Added `compileDebug` option to enable lineno instrumentation
-  * Added `inline` option to disable inlining of helpers (for client-side)
-
-0.13.0 / 2011-07-13 
-==================
-
-  * Added `mixin` support
-  * Added `include` support
-  * Added array support for the class attribute
-
-0.12.4 / 2011-06-23 
-==================
-
-  * Fixed filter indentation bug. Closes #243
-
-0.12.3 / 2011-06-21 
-==================
-
-  * Fixed empty strings support. Closes #223
-  * Fixed conditional comments documentation. Closes #245
-
-0.12.2 / 2011-06-16 
-==================
-
-  * Fixed `make test`
-  * Fixed block comments
-
-0.12.1 / 2011-06-04 
-==================
-
-  * Fixed attribute interpolation with double quotes. Fixes #232 [topaxi]
-
-0.12.0 / 2011-06-03 
-==================
-
-  * Added `doctype` as alias of `!!!`
-  * Added; doctype value is now case-insensitive
-  * Added attribute interpolation support
-  * Fixed; retain original indentation spaces in text blocks
-
-0.11.1 / 2011-06-01 
-==================
-
-  * Fixed text block indentation [Laszlo Bacsi]
-  * Changed; utilizing devDependencies
-  * Fixed try/catch issue with renderFile(). Closes #227
-  * Removed attribute ":" support, use "=" (option for ':' coming soon)
-
-0.11.0 / 2011-05-14 
-==================
-
-  * Added `self` object to avoid poor `with(){}` performance [masylum]
-  * Added `doctype` option [Jeremy Larkin]
-
-0.10.7 / 2011-05-04 
-==================
-
-  * expose Parser
-
-0.10.6 / 2011-04-29 
-==================
-
-  * Fixed CS `Object.keys()` [reported by robholland]
-
-0.10.5 / 2011-04-26 
-==================
-
-  * Added error context after the lineno
-  * Added; indicate failing lineno with ">"
-  * Added `Object.keys()` for the client-side
-  * Fixed attr strings when containing the opposite quote. Closes 207
-  * Fixed attr issue with js expressions within strings
-  * Fixed single-quote filter escape bug. Closes #196
-
-
-0.10.4 / 2011-04-05 
-==================
-
-  * Added `html` doctype, same as "5"
-  * Fixed `pre`, no longer text-only
-
-0.10.3 / 2011-03-30 
-==================
-
-  * Fixed support for quoted attribute keys ex `rss("xmlns:atom"="atom")`
-
-0.10.2 / 2011-03-30 
-==================
-
-  * Fixed pipeless text bug with missing outdent
-
-0.10.1 / 2011-03-28 
-==================
-
-  * Fixed `support/compile.js` to exclude browser js in node
-  * Fixes for IE [Patrick Pfeiffer]
-
-0.10.0 / 2011-03-25 
-==================
-
-  * Added AST-filter support back in the form of `<tag>[attrs]<:><block>`
-
-0.9.3 / 2011-03-24 
-==================
-
-  * Added `Block#unshift(node)`
-  * Added `jade.js` for the client-side to the repo
-  * Added `jade.min.js` for the client-side to the repo
-  * Removed need for pipes in filters. Closes #185
-    Note that this _will_ break filters used to
-    manipulate the AST, until we have a different
-    syntax for doing so.
-
-0.9.2 / 2011-03-23 
-==================
-
-  * Added jade `--version`
-  * Removed `${}` interpolation support, use `#{}`
-
-0.9.1 / 2011-03-16 
-==================
-
-  * Fixed invalid `.map()` call due to recent changes
-
-0.9.0 / 2011-03-16 
-==================
-
-  * Added client-side browser support via `make jade.js` and `make jade.min.js`.
-
-0.8.9 / 2011-03-15 
-==================
-
-  * Fixed preservation of newlines in text blocks
-
-0.8.8 / 2011-03-14 
-==================
-
-  * Fixed jade(1) stdio
-
-0.8.7  / 2011-03-14 
-==================
-
-  * Added `mkdirs()` to jade(1)
-  * Added jade(1) stdio support
-  * Added new features to jade(1), `--watch`, recursive compilation etc [khingebjerg]
-  * Fixed pipe-less text newlines
-  * Removed jade(1) `--pipe` flag
-
-0.8.6 / 2011-03-11 
-==================
-
-  * Fixed parenthesized expressions in attrs. Closes #170
-  * Changed; default interpolation values `== null` to ''. Closes #167
-
-0.8.5 / 2011-03-09 
-==================
-
-  * Added pipe-less text support with immediate ".". Closes #157
-  * Fixed object support in attrs
-  * Fixed array support for attrs
-
-0.8.4 / 2011-03-08 
-==================
-
-  * Fixed issue with expressions being evaluated several times. closes #162
-
-0.8.2 / 2011-03-07 
-==================
-
-  * Added markdown, discount, and markdown-js support to `:markdown`. Closes #160
-  * Removed `:discount`
-
-0.8.1 / 2011-03-04 
-==================
-
-  * Added `pre` pipe-less text support (and auto-escaping)
-
-0.8.0 / 2011-03-04 
-==================
-
-  * Added block-expansion support. Closes #74
-  * Added support for multi-line attrs without commas. Closes #65
-
-0.7.1 / 2011-03-04 
-==================
-
-  * Fixed `script()` etc pipe-less text with attrs
-
-0.7.0 / 2011-03-04 
-==================
-
-  * Removed `:javascript` filter (it doesn't really do anything special, use `script` tags)
-  * Added pipe-less text support. Tags that only accept text nodes (`script`, `textarea`, etc) do not require `|`. 
-  * Added `:text` filter for ad-hoc pipe-less 
-  * Added flexible indentation. Tabs, arbitrary number of spaces etc
-  * Added conditional-comment support. Closes #146
-  * Added block comment support
-  * Added rss example
-  * Added `:stylus` filter
-  * Added `:discount` filter
-  * Fixed; auto-detect xml and do not self-close tags. Closes #147
-  * Fixed whitespace issue. Closes #118
-  * Fixed attrs. `,`, `=`, and `:` within attr value strings are valid  Closes #133
-  * Fixed; only output "" when code == null. Ex: `span.name= user.name` when undefined or null will not output "undefined". Closes #130
-  * Fixed; throw on unexpected token instead of hanging
-
-0.6.3 / 2011-02-02 
-==================
-
-  * Added `each` support for Array-like objects [guillermo]
-
-0.6.2 / 2011-02-02 
-==================
-
-  * Added CSRF example, showing how you can transparently add inputs to a form
-  * Added link to vim-jade
-  * Fixed self-closing col support [guillermo]
-  * Fixed exception when getAttribute or removeAttribute run into removed attributes [Naitik Shah]
-
-0.6.0 / 2010-12-19 
-==================
-
-  * Added unescaped interpolation variant `!{code}`. Closes #124
-  * Changed; escape interpolated code by default `#{code}`
-
-0.5.7 / 2010-12-08 
-==================
-
-  * Fixed; hyphen in get `tag()`
-
-0.5.6 / 2010-11-24 
-==================
-
-  * Added `exports.compile(str, options)`
-  * Renamed internal `_` to `__`, since `_()` is commonly used for translation
-
-0.5.5 / 2010-10-30 
-==================
-
-  * Add _coffeescript_ filter [Michael Hampton]
-  * Added link to _slim_; a ruby implementation
-  * Fixed quoted attributes issue.
-
-  * Fixed attribute issue with over greedy regexp.
-    Previously "p(foo=(((('bar')))))= ((('baz')))"
-    would __fail__ for example since the regexp
-    would lookahead to far. Now we simply pair
-    the delimiters.
-
-0.5.4 / 2010-10-18 
-==================
-
-  * Adding newline when using tag code when preceding text
-  * Assume newline in tag text when preceding text
-  * Changed; retain leading text whitespace
-  * Fixed code block support to prevent multiple buffer openings [Jake Luer]
-  * Fixed nested filter support
-
-0.5.3 / 2010-10-06 
-==================
-
-  * Fixed bug when tags with code also have a block [reported by chrisirhc]
-
-0.5.2 / 2010-10-05 
-==================
-
-  * Added; Text introduces newlines to mimic the grammar.
-    Whitespace handling is a little tricky with this sort of grammar.
-    Jade will now mimic the written grammar, meaning that text blocks
-    using the "|" margin character will introduce a literal newline,
-    where as immediate tag text (ex "a(href='#') Link") will not.
-
-    This may not be ideal, but it makes more sense than what Jade was     
-    previously doing.
-
-  * Added `Tag#text` to disambiguate between immediate / block text
-  * Removed _pretty_ option (was kinda useless in the state it was in)
-  * Reverted ignoring of newlines. Closes #92.
-  * Fixed; `Parser#parse()` ignoring newlines
-
-0.5.1 / 2010-10-04 
-==================
-
-  * Added many examples
-  * Added; compiler api is now public
-  * Added; filters can accept / manipulate the parse tree
-  * Added filter attribute support. Closes #79
-  * Added LL(*) capabilities
-  * Performance; wrapping code blocks in {} instead of `(function(){}).call(this)`
-  * Performance; Optimized attribute buffering
-  * Fixed trailing newlines in blocks
-
-0.5.0 / 2010-09-11 
-==================
-
-  * __Major__ refactor. Logic now separated into lexer/parser/compiler for future extensibility.
-  * Added _pretty_ option
-  * Added parse tree output for _debug_ option
-  * Added new examples
-  * Removed _context_ option, use _scope_
-
-0.4.1 / 2010-09-09 
-==================
-
-  * Added support for arbitrary indentation for single-line comments. Closes #71
-  * Only strip first space in text (ex '|  foo' will buffer ' foo')
-
-0.4.0 / 2010-08-30 
-==================
-
-  * Added tab naive support (tabs are converted to a single indent, aka two spaces). Closes #24
-  * Added unbuffered comment support. Closes #62
-  * Added hyphen support for tag names, ex: "fb:foo-bar"
-  * Fixed bug with single quotes in comments. Closes #61
-  * Fixed comment whitespace issue, previously padding. Closes #55
-
-0.3.0 / 2010-08-04
-==================
-
-  * Added single line comment support. Closes #25
-  * Removed CDATA from _:javascript_ filter. Closes #47
-  * Removed _sys_ local
-  * Fixed code following tag
-
-0.2.4 / 2010-08-02
-==================
-
-  * Added Buffer support to `render()`
-  * Fixed filter text block exception reporting
-  * Fixed tag exception reporting
-
-0.2.3 / 2010-07-27
-==================
-
-  * Fixed newlines before block
-  * Fixed; tag text allowing arbitrary trailing whitespace
-
-0.2.2 / 2010-07-16
-==================
-
-  * Added support for `jade.renderFile()` to utilize primed cache
-  * Added link to [textmate bundle](http://github.com/miksago/jade-tmbundle)
-  * Fixed filter issue with single quotes
-  * Fixed hyphenated attr bug
-  * Fixed interpolation single quotes. Closes #28
-  * Fixed issue with comma in attrs
-
-0.2.1 / 2010-07-09
-==================
-
-  * Added support for node-discount and markdown-js
-    depending on which is available.
-
-  * Added support for tags to have blocks _and_ text.
-    this kinda fucks with arbitrary whitespace unfortunately,
-    but also fixes trailing spaces after tags _with_ blocks.
-
-  * Caching generated functions. Closes #46
-
-0.2.0 / 2010-07-08
-==================
-
-  * Added `- each` support for readable iteration
-  * Added [markdown-js](http://github.com/evilstreak/markdown-js) support (no compilation required)
-  * Removed node-discount support
-
-0.1.0 / 2010-07-05
-==================
-
-  * Added `${}` support for interpolation. Closes #45
-  * Added support for quoted attr keys: `label("for": 'something')` is allowed (_although not required_) [Guillermo]
-  * Added `:less` filter [jakeluer]
-
-0.0.2 / 2010-07-03
-==================
-
-  * Added `context` as synonym for `scope` option [Guillermo]
-  * Fixed attr splitting: `div(style:"color: red")` is now allowed
-  * Fixed issue with `(` and `)` within attrs: `a(class: (a ? 'a' : 'b'))` is now allowed
-  * Fixed issue with leading / trailing spaces in attrs: `a( href="#" )` is now allowed [Guillermo]
-
diff --git a/node/node_modules/jade/LICENSE b/node/node_modules/jade/LICENSE
deleted file mode 100644 (file)
index 8ad0e0d..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2009-2010 TJ Holowaychuk <tj@vision-media.ca>
-
-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.
\ No newline at end of file
diff --git a/node/node_modules/jade/Makefile b/node/node_modules/jade/Makefile
deleted file mode 100644 (file)
index ea4d5c6..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-
-TESTS = test/*.js
-SRC = $(shell find lib -name "*.js" -type f)
-UGLIFY_FLAGS = --no-mangle 
-
-all: jade.min.js runtime.min.js
-
-test:
-       @./node_modules/.bin/expresso \
-               -I node_modules \
-               $(TESTS)
-
-benchmark:
-       @node support/benchmark
-
-jade.js: $(SRC)
-       @node support/compile.js $^
-
-jade.min.js: jade.js
-       @uglifyjs $(UGLIFY_FLAGS) $< > $@ \
-               && du jade.min.js \
-               && du jade.js
-
-runtime.js: lib/runtime.js
-       @cat support/head.js $< support/foot.js > $@
-
-runtime.min.js: runtime.js
-       @uglifyjs $(UGLIFY_FLAGS) $< > $@ \
-         && du runtime.min.js \
-         && du runtime.js
-
-clean:
-       rm -f jade.js
-       rm -f jade.min.js
-       rm -f runtime.js
-       rm -f runtime.min.js
-
-.PHONY: test benchmark clean
diff --git a/node/node_modules/jade/Readme.md b/node/node_modules/jade/Readme.md
deleted file mode 100644 (file)
index fd5c42c..0000000
+++ /dev/null
@@ -1,869 +0,0 @@
-# Jade - template engine
-
- Jade is a high performance template engine heavily influenced by [Haml](http://haml-lang.com)
- and implemented with JavaScript for [node](http://nodejs.org).
-
-## Features
-
-  - client-side support
-  - great readability
-  - flexible indentation
-  - block-expansion
-  - mixins
-  - static includes
-  - attribute interpolation
-  - code is escaped by default for security
-  - contextual error reporting at compile &amp; run time
-  - executable for compiling jade templates via the command line
-  - html 5 mode (using the _!!! 5_ doctype)
-  - optional memory caching
-  - combine dynamic and static tag classes
-  - parse tree manipulation via _filters_
-  - supports [Express JS](http://expressjs.com) out of the box
-  - transparent iteration over objects, arrays, and even non-enumerables via `each`
-  - block comments
-  - no tag prefix
-  - AST filters
-  - filters
-    - :sass must have [sass.js](http://github.com/visionmedia/sass.js) installed
-    - :less must have [less.js](http://github.com/cloudhead/less.js) installed
-    - :markdown must have [markdown-js](http://github.com/evilstreak/markdown-js) installed or [node-discount](http://github.com/visionmedia/node-discount)
-    - :cdata
-    - :coffeescript must have [coffee-script](http://jashkenas.github.com/coffee-script/) installed
-  - [Vim Syntax](https://github.com/digitaltoad/vim-jade)
-  - [TextMate Bundle](http://github.com/miksago/jade-tmbundle)
-  - [Screencasts](http://tjholowaychuk.com/post/1004255394/jade-screencast-template-engine-for-nodejs)
-  - [html2jade](https://github.com/donpark/html2jade) converter
-
-## Implementations
-
-  - [php](http://github.com/everzet/jade.php)
-  - [scala](http://scalate.fusesource.org/versions/snapshot/documentation/scaml-reference.html)
-  - [ruby](http://github.com/stonean/slim)
-
-## Installation
-
-via npm:
-
-    npm install jade
-
-## Browser Support
-
- To compile jade to a single file compatible for client-side use simply execute:
-    $ make jade.js
-
- Alternatively, if uglifyjs is installed via npm (`npm install uglify-js`) you may execute the following which will create both files. However each release builds these for you.
-    $ make jade.min.js
-
-  By default Jade instruments templates with line number statements such as `__.lineno = 3` for debugging purposes. When used in a browser it's useful to minimize this boiler plate, you can do so by passing the option `{ compileDebug: false }`. The following template
-  
-    p Hello #{name}
-
- Can then be as small as the following generated function:
-
-```js
-function anonymous(locals, attrs, escape, rethrow) {
-  var buf = [];
-  with (locals || {}) {
-    var interp;
-    buf.push('\n<p>Hello ' + escape((interp = name) == null ? '' : interp) + '\n</p>');
-  }
-  return buf.join("");
-}
-```
-
-  Through the use of Jade's `./runtime.js` you may utilize these pre-compiled templates on the client-side _without_ Jade itself, all you need is the associated utility functions (in runtime.js), which are then available as `jade.attrs`, `jade.escape` etc. To enable this you should pass `{ client: true }` to `jade.compile()` to tell Jade to reference the helper functions
-  via `jade.attrs`, `jade.escape` etc.
-
-```js
-function anonymous(locals, attrs, escape, rethrow) {
-  var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow;
-  var buf = [];
-  with (locals || {}) {
-    var interp;
-    buf.push('\n<p>Hello ' + escape((interp = name) == null ? '' : interp) + '\n</p>');
-  }
-  return buf.join("");
-}
-```
-
-## Public API
-
-```javascript
-    var jade = require('jade');
-
-    // Compile a function
-    var fn = jade.compile('string of jade', options);
-    fn(locals);
-```
-
-### Options
-
- - `self`      Use a `self` namespace to hold the locals. _false by default_
- - `locals`    Local variable object
- - `filename`  Used in exceptions, and required when using includes
- - `debug`     Outputs tokens and function body generated
- - `compiler`  Compiler to replace jade's default
- - `compileDebug`  When `false` no debug instrumentation is compiled
-
-## Syntax
-
-### Line Endings
-
-**CRLF** and **CR** are converted to **LF** before parsing.
-
-### Tags
-
-A tag is simply a leading word:
-
-    html
-
-for example is converted to `<html></html>`
-
-tags can also have ids:
-
-    div#container
-
-which would render `<div id="container"></div>`
-
-how about some classes?
-
-    div.user-details
-
-renders `<div class="user-details"></div>`
-
-multiple classes? _and_ an id? sure:
-
-    div#foo.bar.baz
-
-renders `<div id="foo" class="bar baz"></div>`
-
-div div div sure is annoying, how about:
-
-    #foo
-    .bar
-
-which is syntactic sugar for what we have already been doing, and outputs:
-
-    `<div id="foo"></div><div class="bar"></div>`
-
-### Tag Text
-
-Simply place some content after the tag:
-
-    p wahoo!
-
-renders `<p>wahoo!</p>`.
-
-well cool, but how about large bodies of text:
-
-    p
-      | foo bar baz
-      | rawr rawr
-      | super cool
-      | go jade go
-
-renders `<p>foo bar baz rawr.....</p>`
-
-interpolation? yup! both types of text can utilize interpolation,
-if we passed `{ name: 'tj', email: 'tj@vision-media.ca' }` to the compiled function we can do the following:
-
-    #user #{name} &lt;#{email}&gt;
-
-outputs `<div id="user">tj &lt;tj@vision-media.ca&gt;</div>`
-
-Actually want `#{}` for some reason? escape it!
-
-    p \#{something}
-
-now we have `<p>#{something}</p>`
-
-We can also utilize the unescaped variant `!{html}`, so the following
-will result in a literal script tag:
-
-    - var html = "<script></script>"
-    | !{html}
-
-Nested tags that also contain text can optionally use a text block:
-
-    label
-      | Username:
-      input(name='user[name]')
-
-or immediate tag text:
-
-    label Username:
-      input(name='user[name]')
-
-Tags that accept _only_ text such as `script`, `style`, and `textarea` do not
-need the leading `|` character, for example:
-
-      html
-        head
-          title Example
-          script
-            if (foo) {
-              bar();
-            } else {
-              baz();
-            }
-
-Once again as an alternative, we may use a leading '.' to indicate a text block, for example:
-
-      p.
-        foo asdf
-        asdf
-         asdfasdfaf
-         asdf
-        asd.
-
-outputs:
-
-        <p>foo asdf
-        asdf
-          asdfasdfaf
-          asdf
-        asd
-        .
-        </p>
-
-This however differs from a leading '.' followed by a space, which although is ignored by the Jade parser, tells Jade that this period is a literal:
-
-    p .
-    
-outputs:
-
-    <p>.</p>
-
-
-It should be noted that text blocks should be doubled escaped.  For example if you desire the following output.
-
-    </p>foo\bar</p>
-
-use:
-
-    p.
-      foo\\bar
-
-### Comments
-
-Single line comments currently look the same as JavaScript comments,
-aka "//" and must be placed on their own line:
-
-    // just some paragraphs
-    p foo
-    p bar
-
-would output
-
-    <!-- just some paragraphs -->
-    <p>foo</p>
-    <p>bar</p>
-
-Jade also supports unbuffered comments, by simply adding a hyphen:
-
-    //- will not output within markup
-    p foo
-    p bar
-
-outputting
-
-    <p>foo</p>
-    <p>bar</p>
-
-### Block Comments
-
- A block comment is legal as well:
-
-      body
-        //
-          #content
-            h1 Example
-
-outputting
-
-    <body>
-      <!--
-      <div id="content">
-        <h1>Example</h1>
-      </div>
-      -->
-    </body>
-
-Jade supports conditional-comments as well, for example:
-
-    body
-      //if IE
-        a(href='http://www.mozilla.com/en-US/firefox/') Get Firefox
-
-outputs:
-
-    <body>
-      <!--[if IE]>
-        <a href="http://www.mozilla.com/en-US/firefox/">Get Firefox</a>
-      <![endif]-->
-    </body>
-
-
-### Nesting
-
- Jade supports nesting to define the tags in a natural way:
-
-    ul
-      li.first
-        a(href='#') foo
-      li
-        a(href='#') bar
-      li.last
-        a(href='#') baz
-
-### Block Expansion
-
- Block expansion allows you to create terse single-line nested tags,
- the following example is equivalent to the nesting example above.
-
-      ul
-        li.first: a(href='#') foo
-        li: a(href='#') bar
-        li.last: a(href='#') baz
-
-
-### Attributes
-
-Jade currently supports '(' and ')' as attribute delimiters.
-
-    a(href='/login', title='View login page') Login
-
-When a value is `undefined` or `null` the attribute is _not_ added,
-so this is fine, it will not compile 'something="null"'.
-
-    div(something=null)
-
-Boolean attributes are also supported:
-
-    input(type="checkbox", checked)
-
-Boolean attributes with code will only output the attribute when `true`:
-
-    input(type="checkbox", checked=someValue)
-    
-Multiple lines work too:
-
-    input(type='checkbox',
-      name='agreement',
-      checked)
-
-Multiple lines without the comma work fine:
-
-    input(type='checkbox'
-      name='agreement'
-      checked)
-
-Funky whitespace? fine:
-
-
-    input(
-      type='checkbox'
-      name='agreement'
-      checked)
-
-Colons work:
-
-    rss(xmlns:atom="atom")
-
-Suppose we have the `user` local `{ id: 12, name: 'tobi' }`
-and we wish to create an anchor tag with `href` pointing to "/user/12"
-we could use regular javascript concatenation:
-
-    a(href='/user/' + user.id)= user.name
-
-or we could use jade's interpolation, which I added because everyone
-using Ruby or CoffeeScript seems to think this is legal js..:
-
-   a(href='/user/#{user.id}')= user.name
-
-The `class` attribute is special-cased when an array is given,
-allowing you to pass an array such as `bodyClasses = ['user', 'authenticated']` directly:
-
-    body(class=bodyClasses)
-
-### HTML
-
- Inline html is fine, we can use the pipe syntax to 
- write arbitrary text, in this case some html:
-
-```
-html
-  body
-    | <h1>Title</h1>
-    | <p>foo bar baz</p>
-```
-
- Or we can use the trailing `.` to indicate to Jade that we
- only want text in this block, allowing us to omit the pipes:
-
-```
-html
-  body.
-    <h1>Title</h1>
-    <p>foo bar baz</p>
-```
-
- Both of these examples yield the same result:
-
-```
-<html><body><h1>Title</h1>
-<p>foo bar baz</p>
-</body></html>
-```
-
- The same rule applies for anywhere you can have text
- in jade, raw html is fine:
-
-```
-html
-  body
-    h1 User <em>#{name}</em>
-```
-
-### Doctypes
-
-To add a doctype simply use `!!!`, or `doctype` followed by an optional value:
-
-    !!!
-
-Will output the _transitional_ doctype, however:
-
-    !!! 5
-
-or
-
-    !!! html
-
-or
-
-    doctype html
-
-doctypes are case-insensitive, so the following are equivalent:
-
-    doctype Basic
-    doctype basic
-
-Will output the _html 5_ doctype. Below are the doctypes
-defined by default, which can easily be extended:
-
-```javascript
-    var doctypes = exports.doctypes = {
-           '5': '<!DOCTYPE html>',
-           'xml': '<?xml version="1.0" encoding="utf-8" ?>',
-           'default': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
-           'transitional': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
-           'strict': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
-           'frameset': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
-           '1.1': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
-           'basic': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',
-           'mobile': '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
-       };
-```
-
-To alter the default simply change:
-
-```javascript
-    jade.doctypes.default = 'whatever you want';
-```
-
-## Filters
-
-Filters are prefixed with `:`, for example `:markdown` and
-pass the following block of text to an arbitrary function for processing. View the _features_
-at the top of this document for available filters.
-
-    body
-      :markdown
-        Woah! jade _and_ markdown, very **cool**
-        we can even link to [stuff](http://google.com)
-
-Renders:
-
-       <body><p>Woah! jade <em>and</em> markdown, very <strong>cool</strong> we can even link to <a href="http://google.com">stuff</a></p></body>
-
-Filters may also manipulate the parse tree. For example perhaps I want to
-bake conditionals right into jade, we could do so with a filter named _conditionals_. Typically filters work on text blocks, however by passing a regular block our filter can do anything it wants with the tags nested within it.
-
-    body
-      conditionals:
-        if role == 'admin'
-          p You are amazing
-        else
-          p Not so amazing
-
-Not that we no longer prefix with "-" for these code blocks. Examples of 
-how to manipulate the parse tree can be found at _./examples/conditionals.js_ and _./examples/model.js_, basically we subclass and re-implement visitor methods as needed. There are several interesting use-cases for this functionality above what was shown above such as transparently aggregating / compressing assets to reduce the number of HTTP requests, transparent record error reporting, and more.
-
-## Code
-
-Jade currently supports three classifications of executable code. The first
-is prefixed by `-`, and is not buffered:
-
-    - var foo = 'bar';
-
-This can be used for conditionals, or iteration:
-
-    - for (var key in obj)
-      p= obj[key]
-
-Due to Jade's buffering techniques the following is valid as well:
-
-    - if (foo)
-      ul
-        li yay
-        li foo
-        li worked
-    - else
-      p oh no! didnt work
-
-Hell, even verbose iteration:
-
-    - if (items.length)
-      ul
-        - items.forEach(function(item){
-          li= item
-        - })
-
-Anything you want!
-
-Next up we have _escaped_ buffered code, which is used to
-buffer a return value, which is prefixed by `=`:
-
-    - var foo = 'bar'
-    = foo
-    h1= foo
-
-Which outputs `bar<h1>bar</h1>`. Code buffered by `=` is escaped 
-by default for security, however to output unescaped return values
-you may use `!=`:
-
-    p!= aVarContainingMoreHTML
-
-## Iteration
-
- Along with vanilla JavaScript Jade also supports a subset of
- constructs that allow you to create more designer-friendly templates,
- one of these constructs is `each`, taking the form:
-
-    each VAL[, KEY] in OBJ
-
-An example iterating over an array:
-
-    - var items = ["one", "two", "three"]
-    each item in items
-      li= item
-
-outputs:
-
-    <li>one</li>
-    <li>two</li>
-    <li>three</li>
-
-iterating an array with index:
-
-    - var items = ["one", "two", "three"]
-    each item, i in items
-      li #{item}: #{i}
-
-outputs:
-
-    <li>one: 0</li>
-    <li>two: 1</li>
-    <li>three: 2</li>
-
-iterating an object's keys and values:
-
-    - var obj = { foo: 'bar' }
-    each val, key in obj
-      li #{key}: #{val}
-
-would output `<li>foo: bar</li>`
-
-Internally Jade converts these statements to regular
-JavaScript loops such as `users.forEach(function(user){`,
-so lexical scope and nesting applies as it would with regular
-JavaScript:
-
-    each user in users
-      each role in user.roles
-        li= role
-
- You may also use `for` if you prefer:
-    for user in users
-      for role in user.roles
-        li= role
-
-## Conditionals
-
- Jade conditionals are equivalent to those using the code (`-`) prefix,
- however allow you to ditch parenthesis to become more designer friendly,
- however keep in mind the expression given is _regular_ JavaScript:
-
-    for user in users
-      if user.role == 'admin'
-        p #{user.name} is an admin
-      else
-        p= user.name
-
- is equivalent to the following using vanilla JavaScript literals:
-
-     for user in users
-       - if (user.role == 'admin')
-         p #{user.name} is an admin
-       - else
-         p= user.name
-
-  Jade also provides have `unless` which is equivalent to `if (!(expr))`:
-
-     for user in users
-       unless user.isAnonymous
-         p
-           | Click to view
-           a(href='/users/' + user.id)= user.name 
-
-## Includes
-
- Includes allow you to statically include chunks of Jade
- which lives in a separate file. The classical example is
- including a header and footer. Suppose we have the following
- directory structure:
-
-     ./layout.jade
-     ./includes/
-       ./head.jade
-       ./tail.jade
-
-and the following _layout.jade_:
-
-      html
-        include includes/head  
-        body
-          h1 My Site
-          p Welcome to my super amazing site.
-          include includes/foot
-
-both includes _includes/head_ and _includes/foot_ are
-read relative to the `filename` option given to _layout.jade_,
-which should be an absolute path to this file, however Express does this for you. Include then parses these files, and injects the AST produced to render what you would expect:
-
-```html
-<html>
-  <head>
-    <title>My Site</title>
-    <script src="/javascripts/jquery.js">
-    </script><script src="/javascripts/app.js"></script>
-  </head>
-  <body>
-    <h1>My Site</h1>
-    <p>Welcome to my super lame site.</p>
-    <div id="footer">
-      <p>Copyright>(c) foobar</p>
-    </div>
-  </body>
-</html>
-```
-
-## Mixins
-
- Mixins are converted to regular JavaScript functions in
- the compiled template that Jade constructs. Mixins may
- take arguments, though not required:
-
-      mixin list
-        ul
-          li foo
-          li bar
-          li baz
-
-  Utilizing a mixin without args looks similar, just without a block:
-  
-      h2 Groceries
-      mixin list
-
-  Mixins may take one or more arguments as well, the arguments
-  are regular javascripts expressions, so for example the following:
-
-      mixin pets(pets)
-        ul.pets
-          - each pet in pets
-            li= pet
-
-      mixin profile(user)
-        .user
-          h2= user.name
-          mixin pets(user.pets)
-
-   Would yield something similar to the following html:
-
-```html
-<div class="user">
-  <h2>tj</h2>
-  <ul class="pets">
-    <li>tobi</li>
-    <li>loki</li>
-    <li>jane</li>
-    <li>manny</li>
-  </ul>
-</div>
-```
-
-## Generated Output
-
- Suppose we have the following Jade:
-
-```
-- var title = 'yay'
-h1.title #{title}
-p Just an example
-```
-
- When the `compileDebug` option is not explicitly `false`, Jade
- will compile the function instrumented with `__.lineno = n;`, which
- in the event of an exception is passed to `rethrow()` which constructs
- a useful message relative to the initial Jade input.
-
-```js
-function anonymous(locals) {
-  var __ = { lineno: 1, input: "- var title = 'yay'\nh1.title #{title}\np Just an example", filename: "testing/test.js" };
-  var rethrow = jade.rethrow;
-  try {
-    var attrs = jade.attrs, escape = jade.escape;
-    var buf = [];
-    with (locals || {}) {
-      var interp;
-      __.lineno = 1;
-       var title = 'yay'
-      __.lineno = 2;
-      buf.push('<h1');
-      buf.push(attrs({ "class": ('title') }));
-      buf.push('>');
-      buf.push('' + escape((interp = title) == null ? '' : interp) + '');
-      buf.push('</h1>');
-      __.lineno = 3;
-      buf.push('<p>');
-      buf.push('Just an example');
-      buf.push('</p>');
-    }
-    return buf.join("");
-  } catch (err) {
-    rethrow(err, __.input, __.filename, __.lineno);
-  }
-}
-```
-
-When the `compileDebug` option _is_ explicitly `false`, this instrumentation
-is stripped, which is very helpful for light-weight client-side templates. Combining Jade's options with the `./runtime.js` file in this repo allows you
-to toString() compiled templates and avoid running the entire Jade library on
-the client, increasing performance, and decreasing the amount of JavaScript
-required.
-
-```js
-function anonymous(locals) {
-  var attrs = jade.attrs, escape = jade.escape;
-  var buf = [];
-  with (locals || {}) {
-    var interp;
-    var title = 'yay'
-    buf.push('<h1');
-    buf.push(attrs({ "class": ('title') }));
-    buf.push('>');
-    buf.push('' + escape((interp = title) == null ? '' : interp) + '');
-    buf.push('</h1>');
-    buf.push('<p>');
-    buf.push('Just an example');
-    buf.push('</p>');
-  }
-  return buf.join("");
-}
-```
-
-## Example Makefile
-
-  Below is an example Makefile used to compile _pages/*.jade_
-  into _pages/*.html_ files by simply executing `make`.
-```make
-JADE = $(shell find pages/*.jade)
-HTML = $(JADE:.jade=.html)
-
-all: $(HTML)
-       
-%.html: %.jade
-       jade < $< > $@
-
-clean:
-       rm -f $(HTML)
-
-.PHONY: clean
-```
-
-this can be combined with the `watch(1)` command to produce
-a watcher-like behaviour:
-
-     $ watch make
-
-## jade(1)
-
-```
-
-Usage: jade [options] [dir|file ...]
-
-Options:
-
-  -h, --help       output usage information
-  -v, --version    output the version number
-  -o, --obj <str>  javascript options object
-  -O, --out <dir>  output the compiled html to <dir>
-
-Examples:
-
-  # translate jade the templates dir
-  $ jade templates
-
-  # create {foo,bar}.html
-  $ jade {foo,bar}.jade
-
-  # jade over stdio
-  $ jade < my.jade > my.html
-
-  # jade over stdio
-  $ echo "h1 Jade!" | jade
-
-  # foo, bar dirs rendering to /tmp
-  $ jade foo bar --out /tmp 
-
-```
-
-## License 
-
-(The MIT License)
-
-Copyright (c) 2009-2010 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
-
-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.
diff --git a/node/node_modules/jade/bin/jade b/node/node_modules/jade/bin/jade
deleted file mode 100755 (executable)
index 2c39e06..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * Module dependencies.
- */
-
-var fs = require('fs')
-  , program = require('commander')
-  , path = require('path')
-  , basename = path.basename
-  , dirname = path.dirname
-  , resolve = path.resolve
-  , join = path.join
-  , mkdirp = require('mkdirp')
-  , jade = require('../');
-
-// jade options
-
-var options = {};
-
-// options
-
-program
-  .version(jade.version)
-  .usage('[options] [dir|file ...]')
-  .option('-o, --obj <str>', 'javascript options object')
-  .option('-O, --out <dir>', 'output the compiled html to <dir>')
-
-program.on('--help', function(){
-  console.log('  Examples:');
-  console.log('');
-  console.log('    # translate jade the templates dir');
-  console.log('    $ jade templates');
-  console.log('');
-  console.log('    # create {foo,bar}.html');
-  console.log('    $ jade {foo,bar}.jade');
-  console.log('');
-  console.log('    # jade over stdio');
-  console.log('    $ jade < my.jade > my.html');
-  console.log('');
-  console.log('    # jade over stdio');
-  console.log('    $ echo "h1 Jade!" | jade');
-  console.log('');
-  console.log('    # foo, bar dirs rendering to /tmp');
-  console.log('    $ jade foo bar --out /tmp ');
-  console.log('');
-});
-
-program.parse(process.argv);
-
-// options given, parse them
-
-if (program.obj) options = eval('(' + program.obj + ')');
-
-// left-over args are file paths
-
-var files = program.args;
-
-// compile files
-
-if (files.length) {
-  console.log();
-  files.forEach(renderFile);
-  process.on('exit', console.log);
-// stdio
-} else {
-  stdin();
-}
-
-/**
- * Compile from stdin.
- */
-
-function stdin() {
-  var buf = '';
-  process.stdin.setEncoding('utf8');
-  process.stdin.on('data', function(chunk){ buf += chunk; });
-  process.stdin.on('end', function(){
-    var fn = jade.compile(buf, options);
-    process.stdout.write(fn(options));
-  }).resume();
-}
-
-/**
- * Process the given path, compiling the jade files found.
- * Always walk the subdirectories.
- */
-
-function renderFile(path) {
-  var re = /\.jade$/;
-  fs.lstat(path, function(err, stat) {
-    if (err) throw err;
-    // Found jade file
-    if (stat.isFile() && re.test(path)) {
-      fs.readFile(path, 'utf8', function(err, str){
-        if (err) throw err;
-        var fn = jade.compile(str, options);
-        path = path.replace(re, '.html');
-        if (program.out) path = join(program.out, basename(path));
-        var dir = resolve(dirname(path));
-        mkdirp(dir, 0755, function(err){
-          if (err) throw err;
-          fs.writeFile(path, fn(options), function(err){
-            if (err) throw err;
-            console.log('  \033[90mrendered \033[36m%s\033[0m', path);
-          });
-        });
-      });
-    // Found directory
-    } else if (stat.isDirectory()) {
-      fs.readdir(path, function(err, files) {
-        if (err) throw err;
-        files.map(function(filename) {
-          return path + '/' + filename;
-        }).forEach(renderFile);
-      });
-    }
-  });
-}
diff --git a/node/node_modules/jade/examples/attributes.jade b/node/node_modules/jade/examples/attributes.jade
deleted file mode 100644 (file)
index b8d8ff4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-div#id.left(class='user user-' + name).container
-  h1.title= name
-  form
-    //- unbuffered comment :)
-    // An example of attributes.
-    input(type='text', name='user[name]', value=name)
-    input(checked, type='checkbox', name='user[blocked]')
-    input(type='submit', value='Update')
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/attributes.js b/node/node_modules/jade/examples/attributes.js
deleted file mode 100644 (file)
index c2d6ed8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-var options = { locals: { name: 'tj' }};
-jade.renderFile(__dirname + '/attributes.jade', options, function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/code.jade b/node/node_modules/jade/examples/code.jade
deleted file mode 100644 (file)
index 924a1ed..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-- var title = "Things"
-h1= title
-ul#users
-  - each user, name in users
-    - if (user.isA == "ferret")
-      li(class: 'user-' + name) #{name} is just a ferret
-    - else
-      li(class: 'user-' + name) #{name} #{user.email}
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/code.js b/node/node_modules/jade/examples/code.js
deleted file mode 100644 (file)
index dd1af86..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-var options = {
-    locals: {
-        users: {
-            tj: { age: 23, email: 'tj@vision-media.ca', isA: 'human' },
-            tobi: { age: 1, email: 'tobi@is-amazing.com', isA: 'ferret' }
-        }
-    }
-};
-
-jade.renderFile(__dirname + '/code.jade', options, function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/conditionals.jade b/node/node_modules/jade/examples/conditionals.jade
deleted file mode 100644 (file)
index 1b7b6e5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-conditionals:
-  if admin?
-    if name == 'tj'
-      p User is a wicked cool administrator
-    else
-      p User #{name} is an administrator
-  else
-    p User #{name} is a guest
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/conditionals.js b/node/node_modules/jade/examples/conditionals.js
deleted file mode 100644 (file)
index 1695786..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade')
-  , Compiler = jade.Compiler
-  , nodes = jade.nodes;
-
-var options = {
-  locals: {
-    name: 'tj',
-    email: 'tj@vision-media.ca',
-    admin: true
-  }
-};
-
-jade.renderFile(__dirname + '/conditionals.jade', options, function(err, html){
-  if (err) throw err;
-  console.log(html);
-});
-
-jade.filters.conditionals = function(block, compiler){
-  return new Visitor(block).compile();
-};
-
-function Visitor(node) {
-  this.node = node;
-}
-
-Visitor.prototype.__proto__ = Compiler.prototype;
-
-Visitor.prototype.visit = function(node){
-  if (node.name != 'else') this.line(node);
-  this.visitNode(node);
-};
-
-Visitor.prototype.visitTag = function(node){
-  switch (node.name) {
-    case 'if':
-      // First text -> line
-      var condition = node.text[0]
-        , block = node.block;
-      node = new nodes.Code('if (' + condition + ')');
-      node.block = block;
-      this.visit(node);
-      break;
-    case 'else':
-      var block = node.block;
-      node = new nodes.Code('else');
-      node.block = block;
-      node.instrumentLineNumber = false;
-      this.visit(node);
-      break;
-    default:
-      Compiler.prototype.visitTag.call(this, node);
-  }
-};
diff --git a/node/node_modules/jade/examples/csrf.jade b/node/node_modules/jade/examples/csrf.jade
deleted file mode 100644 (file)
index 283986b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-form(method='post', action='/')
-  input(type='text', name='user[name]')
-  input(type='text', name='user[email]')
-  input(type='submit', value='Submit')
diff --git a/node/node_modules/jade/examples/csrf.js b/node/node_modules/jade/examples/csrf.js
deleted file mode 100644 (file)
index 21abf60..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade'),
-    Compiler = jade.Compiler,
-    nodes = jade.nodes;
-
-var options = {
-    compiler: CSRF
-  , locals: {
-    csrf: 'WAHOOOOOO'
-  }
-};
-
-jade.renderFile(__dirname + '/csrf.jade', options, function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
-
-function CSRF(node, options) {
-  Compiler.call(this, node, options);
-}
-
-CSRF.prototype.__proto__ = Compiler.prototype;
-
-CSRF.prototype.visitTag = function(node){
-  var parent = Compiler.prototype.visitTag;
-  switch (node.name) {
-    case 'form':
-      if ("'post'" == node.getAttribute('method')) {
-        var tok = new nodes.Tag('input');
-        tok.setAttribute('type', '"hidden"');
-        tok.setAttribute('name', '"csrf"');
-        tok.setAttribute('value', 'csrf');
-        node.block.unshift(tok);
-      }
-  }
-  parent.call(this, node);
-};
diff --git a/node/node_modules/jade/examples/dynamicscript.jade b/node/node_modules/jade/examples/dynamicscript.jade
deleted file mode 100644 (file)
index a705899..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-html
-  head
-    title Dynamic Inline JavaScript
-    script
-      var users = !{JSON.stringify(users)}
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/dynamicscript.js b/node/node_modules/jade/examples/dynamicscript.js
deleted file mode 100644 (file)
index d2b3a0d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-var options = {
-    locals: {
-        users: {
-            tj: { age: 23, email: 'tj@vision-media.ca', isA: 'human' },
-            tobi: { age: 1, email: 'tobi@is-amazing.com', isA: 'ferret' }
-        }
-    }
-};
-
-jade.renderFile(__dirname + '/dynamicscript.jade', options, function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/each.jade b/node/node_modules/jade/examples/each.jade
deleted file mode 100644 (file)
index a972525..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ul#users
-  - each user, name in users
-    li(class: 'user-' + name) #{name} #{user.email}
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/each.js b/node/node_modules/jade/examples/each.js
deleted file mode 100644 (file)
index f2dadff..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-var options = {
-    locals: {
-        users: {
-            tj: { age: 23, email: 'tj@vision-media.ca', isA: 'human' },
-            tobi: { age: 1, email: 'tobi@is-amazing.com', isA: 'ferret' }
-        }
-    }
-};
-
-jade.renderFile(__dirname + '/each.jade', options, function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/form.jade b/node/node_modules/jade/examples/form.jade
deleted file mode 100644 (file)
index 894e095..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-form(method="post")
-  fieldset
-    legend General
-    p
-      label(for="user[name]") Username:
-        input(type="text", name="user[name]", value=user.name)
-    p
-      label(for="user[email]") Email:
-        input(type="text", name="user[email]", value=user.email)
-        .tip
-          | Enter a valid 
-          | email address 
-          | such as <em>tj@vision-media.ca</em>.
-  fieldset
-    legend Location
-    p
-      label(for="user[city]") City:
-        input(type="text", name="user[city]", value=user.city)
-    p
-      select(name="user[province]")
-        option(value="") -- Select Province --
-        option(value="AB") Alberta
-        option(value="BC") British Columbia
-        option(value="SK") Saskatchewan
-        option(value="MB") Manitoba
-        option(value="ON") Ontario
-        option(value="QC") Quebec
-  p.buttons
-    input(type="submit", value="Save")
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/form.js b/node/node_modules/jade/examples/form.js
deleted file mode 100644 (file)
index 302f5e5..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-var options = {
-    locals: {
-        user: {
-            name: 'TJ',
-            email: 'tj@vision-media.ca',
-            city: 'Victoria',
-            province: 'BC'
-        }
-    }
-};
-
-jade.renderFile(__dirname + '/form.jade', options, function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/includes.jade b/node/node_modules/jade/examples/includes.jade
deleted file mode 100644 (file)
index bd8c2dc..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-html
-  include includes/head  
-  body
-    h1 My Site
-    p Welcome to my super lame site.
-    include includes/foot
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/includes.js b/node/node_modules/jade/examples/includes.js
deleted file mode 100644 (file)
index a20e1ff..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-jade.renderFile(__dirname + '/includes.jade', function(err, html){
-  if (err) throw err;
-  console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/includes/foot.jade b/node/node_modules/jade/examples/includes/foot.jade
deleted file mode 100644 (file)
index b7f5889..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#footer
-  p Copyright (c) foobar
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/includes/head.jade b/node/node_modules/jade/examples/includes/head.jade
deleted file mode 100644 (file)
index 439f0fc..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-head
-  title My Site
-  include scripts
-  include style.css
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/includes/scripts.jade b/node/node_modules/jade/examples/includes/scripts.jade
deleted file mode 100644 (file)
index 2f478fc..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-script(src='/javascripts/jquery.js')
-script(src='/javascripts/app.js')
diff --git a/node/node_modules/jade/examples/includes/style.css b/node/node_modules/jade/examples/includes/style.css
deleted file mode 100644 (file)
index 950708e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<style>
-  body {
-    padding: 50px;
-  }
-</style>
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/layout-debug.js b/node/node_modules/jade/examples/layout-debug.js
deleted file mode 100644 (file)
index ca0d03b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-jade.renderFile(__dirname + '/layout.jade', { debug: true }, function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/layout.jade b/node/node_modules/jade/examples/layout.jade
deleted file mode 100644 (file)
index 45738bf..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-!!! 5
-html(lang="en")
-  head
-    title Example
-    script
-      if (foo) {
-        bar();
-      }
-  body
-    h1 Jade - node template engine
-    #container
-      :markdown
-        Jade is a _high performance_ template engine for [node](http://nodejs.org),
-        inspired by [haml](http://haml-lang.com/), and written by [TJ Holowaychuk](http://github.com/visionmedia).
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/layout.js b/node/node_modules/jade/examples/layout.js
deleted file mode 100644 (file)
index 490a39e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-jade.renderFile(__dirname + '/layout.jade', function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/mixins.jade b/node/node_modules/jade/examples/mixins.jade
deleted file mode 100644 (file)
index 49603a9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-include mixins/dialog
-include mixins/profile
-
-.one
-  mixin dialog
-
-.two
-  mixin dialog-title('Whoop')
-
-.three
-  mixin dialog-title-desc('Whoop', 'Just a mixin')
-
-
-#profile
-  mixin profile(user)
diff --git a/node/node_modules/jade/examples/mixins.js b/node/node_modules/jade/examples/mixins.js
deleted file mode 100644 (file)
index 9d6d6e2..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-var user = {
-    name: 'tj'
-  , pets: ['tobi', 'loki', 'jane', 'manny']
-};
-
-var options = { locals: { user: user }};
-
-jade.renderFile(__dirname + '/mixins.jade', options, function(err, html){
-  if (err) throw err;
-  console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/mixins/dialog.jade b/node/node_modules/jade/examples/mixins/dialog.jade
deleted file mode 100644 (file)
index ba2ec93..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-mixin dialog
-  .dialog
-    h1 Whoop
-    p stuff
-
-mixin dialog-title(title)
-  .dialog
-    h1= title
-    p stuff
-
-mixin dialog-title-desc(title, desc)
-  .dialog
-    h1= title
-    p= desc
diff --git a/node/node_modules/jade/examples/mixins/profile.jade b/node/node_modules/jade/examples/mixins/profile.jade
deleted file mode 100644 (file)
index b1542dd..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-mixin pets(pets)
-  ul.pets
-    - each pet in pets
-      li= pet
-
-mixin profile(user)
-  .user
-    h2= user.name
-    mixin pets(user.pets)
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/model.jade b/node/node_modules/jade/examples/model.jade
deleted file mode 100644 (file)
index 00cf248..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-model:
-  form(user)
-    p
-      field(name)
-    p
-      field(email)
-    p
-      field(summary, as: 'textarea')
-    buttons
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/model.js b/node/node_modules/jade/examples/model.js
deleted file mode 100644 (file)
index 145e01d..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade'),
-    Compiler = jade.Compiler,
-    nodes = jade.nodes;
-
-var options = {
-    locals: {
-        user: {
-            name: 'Tobi',
-            email: 'vision-media.ca',
-            summary: 'Tobi is a ferret, he is supes cool.',
-            errors: { email: 'Invalid email' },
-            new: false
-        }
-    }
-};
-
-jade.renderFile(__dirname + '/model.jade', options, function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
-
-// First define a filter named "model",
-// which accepts a node (a Block node),
-// and the parent Compiler
-
-jade.filters.model = function(block, compiler){
-    // pass the block / previous options to our new Visitor
-    return new Visitor(block, compiler.options).compile();
-};
-
-function Visitor(node, options) {
-    // "super" to the Compiler() constructor
-    Compiler.call(this, node, options);
-}
-
-// Inherit from Compiler
-
-Visitor.prototype.__proto__ = Compiler.prototype;
-
-// Overwrite visitTag method 
-
-Visitor.prototype.visitTag = function(node){
-    var parent = Compiler.prototype.visitTag;
-    switch (node.name) {
-        case 'form':
-            // Store the record variable name,
-            // in our case "user" is our first
-            // anonymous attribute
-            this.record = node.attrs[0].name;
-            // remove the record name attribute
-            node.removeAttribute(this.record);
-            node.setAttribute('id', '"' + this.record + '-model-form"');
-            node.setAttribute('method', '"post"');
-
-            // when the record is not new, we probably want a _method hidden
-            // field to tell our server to use PUT with frameworks like Express
-            var code = new nodes.Code('if (!' + this.record + '.new)');
-            var put = new nodes.Tag('input');
-            put.setAttribute('type', '"hidden"');
-            put.setAttribute('name', '"_method"');
-            put.setAttribute('value', '"put"');
-            code.block = new nodes.Block(put);
-            node.block.push(code);
-
-            parent.call(this, node);
-            break;
-        case 'field':
-            // Grab "as" attribute, defaulting it to "text"
-            // perform some surgery on it since it IS literal JavaScript
-            var name = node.attrs[0].name,
-                as = (node.getAttribute('as') || 'text').trim().replace(/'/g, ''),
-                capitalized = name.charAt(0).toUpperCase() + name.slice(1);
-
-            // Field label
-            var label = new nodes.Tag('label');
-            label.setAttribute('for', '"' + this.record + '[' + name + ']"');
-            label.block.push(new nodes.Text(capitalized + ':'));
-            parent.call(this, label);
-
-            // Field input
-            switch (as) {
-                case 'textarea':
-                    var code = new nodes.Code(this.record + '.' + name, true, true);
-                    node = new nodes.Tag('textarea');
-                    node.block.push(code);
-                    break;
-                case 'text':
-                    node = new nodes.Tag('input');
-                    node.setAttribute('type', '"text"');
-                    node.setAttribute('value', this.record + '.' + name);
-            }
-            node.setAttribute('name', '"' + this.record + '[' + name + ']"');
-            parent.call(this, node);
-
-            // Potential error tag
-            var err = this.record + '.errors.' + name;
-            node = new nodes.Code('if (' + err + ')');
-            node.block = new nodes.Block;
-            var p = new nodes.Tag('p', new nodes.Block(new nodes.Code(err, true, true)));
-            p.setAttribute('class', '"error"');
-            node.block.push(p);
-
-            Visitor.prototype.visitCode.call(this, node);
-            break;
-        case 'buttons':
-            // Generate context sensative buttons which
-            // check the record's state.
-            node = new nodes.Tag('input');
-            node.setAttribute('type', '"submit"');
-            node.setAttribute('value', this.record + '.new ? "Save" : "Update"');
-            var p = new nodes.Tag('p', new nodes.Block(node));
-            p.setAttribute('class', '"buttons"');
-            parent.call(this, p);
-            break;
-        default:
-            parent.call(this, node);
-    }
-};
diff --git a/node/node_modules/jade/examples/nested-filters.jade b/node/node_modules/jade/examples/nested-filters.jade
deleted file mode 100644 (file)
index 5ffc2d8..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-stylesheets:
-  stylesheet('/path/to/a.css')
-  stylesheet('/path/to/b.css')
-  stylesheet('/path/to/c.css')
-  javascripts:
-    js('/path/to/a.js')
-    js('/path/to/b.js')
-    js('/path/to/c.js')
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/nested-filters.js b/node/node_modules/jade/examples/nested-filters.js
deleted file mode 100644 (file)
index e7068b4..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade'),
-    nodes = jade.nodes,
-    Compiler = jade.Compiler;
-
-jade.renderFile(__dirname + '/nested-filters.jade', function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
-
-// :javascripts
-
-jade.filters.javascripts = function(block, compiler){
-    return new JavascriptsVisitor(block, compiler.options).compile();
-};
-
-function JavascriptsVisitor(node, options) {
-    Compiler.call(this, node, options);
-}
-
-// Inherit from Compiler
-
-JavascriptsVisitor.prototype.__proto__ = Compiler.prototype;
-
-// Overwrite visitTag method 
-
-JavascriptsVisitor.prototype.visitTag = function(node){
-    var parent = Compiler.prototype.visitTag;
-    switch (node.name) {
-        case 'js':
-            var script = new nodes.Tag('script');
-            script.setAttribute('type', "'text/javascript'");
-            script.setAttribute('src', "'" + node.attrs[0].name + "'")
-            parent.call(this, script);
-            break;
-        default:
-            parent.call(this, node);
-    }
-};
-
-// :stylesheets
-
-jade.filters.stylesheets = function(block, compiler){
-    return new StylesheetsVisitor(block, compiler.options).compile();
-};
-
-function StylesheetsVisitor(node, options) {
-    Compiler.call(this, node, options);
-}
-
-// Inherit from Compiler
-
-StylesheetsVisitor.prototype.__proto__ = Compiler.prototype;
-
-// Overwrite visitTag method 
-
-StylesheetsVisitor.prototype.visitTag = function(node){
-    var parent = Compiler.prototype.visitTag;
-    switch (node.name) {
-        case 'stylesheet':
-            var style = new nodes.Tag('link');
-            style.setAttribute('rel', "'stylesheet'");
-            style.setAttribute('href', "'" + node.attrs[0].name + "'")
-            parent.call(this, style);
-            break;
-        default:
-            parent.call(this, node);
-    }
-};
diff --git a/node/node_modules/jade/examples/rss.jade b/node/node_modules/jade/examples/rss.jade
deleted file mode 100644 (file)
index 3f5f03e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-!!! xml
-rss(version='2.0')
-channel
-  title RSS Title
-  description Some description here
-  link http://google.com
-  lastBuildDate Mon, 06 Sep 2010 00:01:00 +0000
-  pubDate Mon, 06 Sep 2009 16:45:00 +0000
-  
-  item
-    title Example entry
-    description Description here
-    link http://google.com/foobar
diff --git a/node/node_modules/jade/examples/rss.js b/node/node_modules/jade/examples/rss.js
deleted file mode 100644 (file)
index caec858..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-jade.renderFile(__dirname + '/rss.jade', function(err, xml){
-  if (err) throw err;
-  console.log(xml);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/text.jade b/node/node_modules/jade/examples/text.jade
deleted file mode 100644 (file)
index c18e7e0..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-| An example of an
-a(href='#') inline
-| link.
-
-form
-  label Username:
-    input(type='text', name='user[name]')
-    p
-      | Just an example of some text usage.
-      | You can have <em>inline</em> html,
-      | as well as
-      strong tags
-      | .
-
-      | Interpolation is also supported. The 
-      | username is currently "#{name}".
-
-  label Email:
-    input(type='text', name='user[email]')
-    p
-      | Email is currently
-      em= email
-      | .
-
-  // alternatively, if we plan on having only
-  // text or inline-html, we can use a trailing
-  // "." to let jade know we want to omit pipes
-  
-  label Username:
-    input(type='text')
-    p.
-      Just an example, like before
-      however now we can omit those
-      annoying pipes!.
-      
-      Wahoo.
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/text.js b/node/node_modules/jade/examples/text.js
deleted file mode 100644 (file)
index b1ef67f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade')
-  , str = require('fs').readFileSync(__dirname + '/text.jade', 'utf8')
-  , fn = jade.compile(str);
-
-console.log(fn({ name: 'tj', email: 'tj@vision-media.ca' }));
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/whitespace.jade b/node/node_modules/jade/examples/whitespace.jade
deleted file mode 100644 (file)
index 4851f92..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-- var js = '<script></script>'
-!!! 5
-html
-  head
-    title= "Some " + "JavaScript"
-    != js
-   
-   
-     
-  body    
\ No newline at end of file
diff --git a/node/node_modules/jade/examples/whitespace.js b/node/node_modules/jade/examples/whitespace.js
deleted file mode 100644 (file)
index 139d2f0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('./../lib/jade');
-
-jade.renderFile(__dirname + '/whitespace.jade', {debug:true},function(err, html){
-    if (err) throw err;
-    console.log(html);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/index.js b/node/node_modules/jade/index.js
deleted file mode 100644 (file)
index 857e431..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-module.exports = require('./lib/jade');
\ No newline at end of file
diff --git a/node/node_modules/jade/jade.js b/node/node_modules/jade/jade.js
deleted file mode 100644 (file)
index 667ce99..0000000
+++ /dev/null
@@ -1,2636 +0,0 @@
-
-// CommonJS require()
-
-function require(p){
-    var path = require.resolve(p)
-      , mod = require.modules[path];
-    if (!mod) throw new Error('failed to require "' + p + '"');
-    if (!mod.exports) {
-      mod.exports = {};
-      mod.call(mod.exports, mod, mod.exports, require.relative(path));
-    }
-    return mod.exports;
-  }
-
-require.modules = {};
-
-require.resolve = function (path){
-    var orig = path
-      , reg = path + '.js'
-      , index = path + '/index.js';
-    return require.modules[reg] && reg
-      || require.modules[index] && index
-      || orig;
-  };
-
-require.register = function (path, fn){
-    require.modules[path] = fn;
-  };
-
-require.relative = function (parent) {
-    return function(p){
-      if ('.' != p[0]) return require(p);
-      
-      var path = parent.split('/')
-        , segs = p.split('/');
-      path.pop();
-      
-      for (var i = 0; i < segs.length; i++) {
-        var seg = segs[i];
-        if ('..' == seg) path.pop();
-        else if ('.' != seg) path.push(seg);
-      }
-
-      return require(path.join('/'));
-    };
-  };
-
-
-require.register("compiler.js", function(module, exports, require){
-
-/*!
- * Jade - Compiler
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var nodes = require('./nodes')
-  , filters = require('./filters')
-  , doctypes = require('./doctypes')
-  , selfClosing = require('./self-closing')
-  , inlineTags = require('./inline-tags')
-  , utils = require('./utils');
-
- if (!Object.keys) {
-   Object.keys = function(obj){
-     var arr = [];
-     for (var key in obj) {
-       if (obj.hasOwnProperty(key)) {
-         arr.push(obj);
-       }
-     }
-     return arr;
-   } 
- }
- if (!String.prototype.trimLeft) {
-   String.prototype.trimLeft = function(){
-     return this.replace(/^\s+/, '');
-   }
- }
-
-
-
-/**
- * Initialize `Compiler` with the given `node`.
- *
- * @param {Node} node
- * @param {Object} options
- * @api public
- */
-
-var Compiler = module.exports = function Compiler(node, options) {
-  this.options = options = options || {};
-  this.node = node;
-  this.hasCompiledDoctype = false;
-  this.hasCompiledTag = false;
-  this.pp = options.pretty || false;
-  this.debug = false !== options.compileDebug;
-  this.indents = 0;
-  if (options.doctype) this.setDoctype(options.doctype);
-};
-
-/**
- * Compiler prototype.
- */
-
-Compiler.prototype = {
-  
-  /**
-   * Compile parse tree to JavaScript.
-   *
-   * @api public
-   */
-  
-  compile: function(){
-    this.buf = ['var interp;'];
-    this.lastBufferedIdx = -1
-    this.visit(this.node);
-    return this.buf.join('\n');
-  },
-
-  /**
-   * Sets the default doctype `name`. Sets terse mode to `true` when
-   * html 5 is used, causing self-closing tags to end with ">" vs "/>",
-   * and boolean attributes are not mirrored.
-   *
-   * @param {string} name
-   * @api public
-   */
-  
-  setDoctype: function(name){
-    var doctype = doctypes[(name || 'default').toLowerCase()];
-    if (!doctype) throw new Error('unknown doctype "' + name + '"');
-    this.doctype = doctype;
-    this.terse = '5' == name || 'html' == name;
-    this.xml = 0 == this.doctype.indexOf('<?xml');
-  },
-  
-  /**
-   * Buffer the given `str` optionally escaped.
-   *
-   * @param {String} str
-   * @param {Boolean} esc
-   * @api public
-   */
-  
-  buffer: function(str, esc){
-    if (esc) str = utils.escape(str);
-    
-    if (this.lastBufferedIdx == this.buf.length) {
-      this.lastBuffered += str;
-      this.buf[this.lastBufferedIdx - 1] = "buf.push('" + this.lastBuffered + "');"
-    } else {
-      this.buf.push("buf.push('" + str + "');");
-      this.lastBuffered = str;
-      this.lastBufferedIdx = this.buf.length;
-    }    
-  },
-  
-  /**
-   * Buffer the given `node`'s lineno.
-   *
-   * @param {Node} node
-   * @api public
-   */
-  
-  line: function(node){
-    if (false === node.instrumentLineNumber) return;
-    this.buf.push('__.lineno = ' + node.line + ';');
-  },
-  
-  /**
-   * Visit `node`.
-   *
-   * @param {Node} node
-   * @api public
-   */
-  
-  visit: function(node){
-    if (this.debug) this.line(node);
-    return this.visitNode(node);
-  },
-  
-  /**
-   * Visit `node`.
-   *
-   * @param {Node} node
-   * @api public
-   */
-  
-  visitNode: function(node){
-    var name = node.constructor.name
-      || node.constructor.toString().match(/function ([^(\s]+)()/)[1];
-    return this['visit' + name](node);
-  },
-
-  /**
-   * Visit literal `node`.
-   *
-   * @param {Literal} node
-   * @api public
-   */
-
-  visitLiteral: function(node){
-    var str = node.str.replace(/\n/g, '\\\\n');
-    this.buffer(str);
-  },
-
-  /**
-   * Visit all nodes in `block`.
-   *
-   * @param {Block} block
-   * @api public
-   */
-
-  visitBlock: function(block){
-    var len = block.nodes.length;
-    for (var i = 0; i < len; ++i) {
-      this.visit(block.nodes[i]);
-    }
-  },
-  
-  /**
-   * Visit `doctype`. Sets terse mode to `true` when html 5
-   * is used, causing self-closing tags to end with ">" vs "/>",
-   * and boolean attributes are not mirrored.
-   *
-   * @param {Doctype} doctype
-   * @api public
-   */
-  
-  visitDoctype: function(doctype){
-    if (doctype && (doctype.val || !this.doctype)) {
-      this.setDoctype(doctype.val || 'default');
-    }
-
-    if (this.doctype) this.buffer(this.doctype);
-    this.hasCompiledDoctype = true;
-  },
-
-  /**
-   * Visit `mixin`, generating a function that
-   * may be called within the template.
-   *
-   * @param {Mixin} mixin
-   * @api public
-   */
-
-  visitMixin: function(mixin){
-    var name = mixin.name.replace(/-/g, '_') + '_mixin'
-      , args = mixin.args || '';
-
-    if (mixin.block) {
-      this.buf.push('var ' + name + ' = function(' + args + '){');
-      this.visit(mixin.block);
-      this.buf.push('}');
-    } else {
-      this.buf.push(name + '(' + args + ');');
-    }
-  },
-
-  /**
-   * Visit `tag` buffering tag markup, generating
-   * attributes, visiting the `tag`'s code and block.
-   *
-   * @param {Tag} tag
-   * @api public
-   */
-  
-  visitTag: function(tag){
-    this.indents++;
-    var name = tag.name;
-
-    if (!this.hasCompiledTag) {
-      if (!this.hasCompiledDoctype && 'html' == name) {
-        this.visitDoctype();
-      }
-      this.hasCompiledTag = true;
-    }
-
-    // pretty print
-    if (this.pp && inlineTags.indexOf(name) == -1) {
-      this.buffer('\\n' + Array(this.indents).join('  '));
-    }
-
-    if (~selfClosing.indexOf(name) && !this.xml) {
-      this.buffer('<' + name);
-      this.visitAttributes(tag.attrs);
-      this.terse
-        ? this.buffer('>')
-        : this.buffer('/>');
-    } else {
-      // Optimize attributes buffering
-      if (tag.attrs.length) {
-        this.buffer('<' + name);
-        if (tag.attrs.length) this.visitAttributes(tag.attrs);
-        this.buffer('>');
-      } else {
-        this.buffer('<' + name + '>');
-      }
-      if (tag.code) this.visitCode(tag.code);
-      if (tag.text) this.buffer(utils.text(tag.text.nodes[0].trimLeft()));
-      this.escape = 'pre' == tag.name;
-      this.visit(tag.block);
-
-      // pretty print
-      if (this.pp && !~inlineTags.indexOf(name) && !tag.textOnly) {
-        this.buffer('\\n' + Array(this.indents).join('  '));
-      }
-
-      this.buffer('</' + name + '>');
-    }
-    this.indents--;
-  },
-  
-  /**
-   * Visit `filter`, throwing when the filter does not exist.
-   *
-   * @param {Filter} filter
-   * @api public
-   */
-  
-  visitFilter: function(filter){
-    var fn = filters[filter.name];
-
-    // unknown filter
-    if (!fn) {
-      if (filter.isASTFilter) {
-        throw new Error('unknown ast filter "' + filter.name + ':"');
-      } else {
-        throw new Error('unknown filter ":' + filter.name + '"');
-      }
-    }
-    if (filter.isASTFilter) {
-      this.buf.push(fn(filter.block, this, filter.attrs));
-    } else {
-      var text = filter.block.nodes.join('');
-      this.buffer(utils.text(fn(text, filter.attrs)));
-    }
-  },
-  
-  /**
-   * Visit `text` node.
-   *
-   * @param {Text} text
-   * @api public
-   */
-  
-  visitText: function(text){
-    text = utils.text(text.nodes.join(''));
-    if (this.escape) text = escape(text);
-    this.buffer(text);
-    this.buffer('\\n');
-  },
-  
-  /**
-   * Visit a `comment`, only buffering when the buffer flag is set.
-   *
-   * @param {Comment} comment
-   * @api public
-   */
-  
-  visitComment: function(comment){
-    if (!comment.buffer) return;
-    if (this.pp) this.buffer('\\n' + Array(this.indents + 1).join('  '));
-    this.buffer('<!--' + utils.escape(comment.val) + '-->');
-  },
-  
-  /**
-   * Visit a `BlockComment`.
-   *
-   * @param {Comment} comment
-   * @api public
-   */
-  
-  visitBlockComment: function(comment){
-    if (!comment.buffer) return;
-    if (0 == comment.val.indexOf('if')) {
-      this.buffer('<!--[' + comment.val + ']>');
-      this.visit(comment.block);
-      this.buffer('<![endif]-->');
-    } else {
-      this.buffer('<!--' + comment.val);
-      this.visit(comment.block);
-      this.buffer('-->');
-    }
-  },
-  
-  /**
-   * Visit `code`, respecting buffer / escape flags.
-   * If the code is followed by a block, wrap it in
-   * a self-calling function.
-   *
-   * @param {Code} code
-   * @api public
-   */
-  
-  visitCode: function(code){
-    // Wrap code blocks with {}.
-    // we only wrap unbuffered code blocks ATM
-    // since they are usually flow control
-
-    // Buffer code
-    if (code.buffer) {
-      var val = code.val.trimLeft();
-      this.buf.push('var __val__ = ' + val);
-      val = 'null == __val__ ? "" : __val__';
-      if (code.escape) val = 'escape(' + val + ')';
-      this.buf.push("buf.push(" + val + ");");
-    } else {
-      this.buf.push(code.val);
-    }
-
-    // Block support
-    if (code.block) {
-      if (!code.buffer) this.buf.push('{');
-      this.visit(code.block);
-      if (!code.buffer) this.buf.push('}');
-    }
-  },
-  
-  /**
-   * Visit `each` block.
-   *
-   * @param {Each} each
-   * @api public
-   */
-  
-  visitEach: function(each){
-    this.buf.push(''
-      + '// iterate ' + each.obj + '\n'
-      + '(function(){\n'
-      + '  if (\'number\' == typeof ' + each.obj + '.length) {\n'
-      + '    for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n'
-      + '      var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n');
-
-    this.visit(each.block);
-
-    this.buf.push(''
-      + '    }\n'
-      + '  } else {\n'
-      + '    for (var ' + each.key + ' in ' + each.obj + ') {\n'
-       + '      if (' + each.obj + '.hasOwnProperty(' + each.key + ')){'
-      + '      var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n');
-
-    this.visit(each.block);
-
-     this.buf.push('      }\n');
-
-    this.buf.push('   }\n  }\n}).call(this);\n');
-  },
-  
-  /**
-   * Visit `attrs`.
-   *
-   * @param {Array} attrs
-   * @api public
-   */
-  
-  visitAttributes: function(attrs){
-    var buf = []
-      , classes = [];
-
-    if (this.terse) buf.push('terse: true');
-
-    attrs.forEach(function(attr){
-      if (attr.name == 'class') {
-        classes.push('(' + attr.val + ')');
-      } else {
-        var pair = "'" + attr.name + "':(" + attr.val + ')';
-        buf.push(pair);
-      }
-    });
-
-    if (classes.length) {
-      classes = classes.join(" + ' ' + ");
-      buf.push("class: " + classes);
-    }
-
-    buf = buf.join(', ').replace('class:', '"class":');
-
-    this.buf.push("buf.push(attrs({ " + buf + " }));");
-  }
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-function escape(html){
-  return String(html)
-    .replace(/&(?!\w+;)/g, '&amp;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;')
-    .replace(/"/g, '&quot;');
-}
-
-}); // module: compiler.js
-
-require.register("doctypes.js", function(module, exports, require){
-
-/*!
- * Jade - doctypes
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-module.exports = {
-    '5': '<!DOCTYPE html>'
-  , 'html': '<!DOCTYPE html>'
-  , 'xml': '<?xml version="1.0" encoding="utf-8" ?>'
-  , 'default': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
-  , 'transitional': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
-  , 'strict': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
-  , 'frameset': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'
-  , '1.1': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
-  , 'basic': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">'
-  , 'mobile': '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
-};
-}); // module: doctypes.js
-
-require.register("filters.js", function(module, exports, require){
-
-/*!
- * Jade - filters
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-module.exports = {
-  
-  /**
-   * Wrap text with CDATA block.
-   */
-  
-  cdata: function(str){
-    return '<![CDATA[\\n' + str + '\\n]]>';
-  },
-  
-  /**
-   * Transform sass to css, wrapped in style tags.
-   */
-  
-  sass: function(str){
-    str = str.replace(/\\n/g, '\n');
-    var sass = require('sass').render(str).replace(/\n/g, '\\n');
-    return '<style>' + sass + '</style>'; 
-  },
-  
-  /**
-   * Transform stylus to css, wrapped in style tags.
-   */
-  
-  stylus: function(str, options){
-    var ret;
-    str = str.replace(/\\n/g, '\n');
-    var stylus = require('stylus');
-    stylus(str, options).render(function(err, css){
-      if (err) throw err;
-      ret = css.replace(/\n/g, '\\n');
-    });
-    return '<style>' + ret + '</style>'; 
-  },
-  
-  /**
-   * Transform sass to css, wrapped in style tags.
-   */
-  
-  less: function(str){
-    var ret;
-    str = str.replace(/\\n/g, '\n');
-    require('less').render(str, function(err, css){
-      if (err) throw err;
-      ret = '<style>' + css.replace(/\n/g, '\\n') + '</style>';  
-    });
-    return ret;
-  },
-  
-  /**
-   * Transform markdown to html.
-   */
-  
-  markdown: function(str){
-    var md;
-
-    // support markdown / discount
-    try {
-      md = require('markdown');
-    } catch (err){
-      try {
-        md = require('discount');
-      } catch (err) {
-        try {
-          md = require('markdown-js');
-        } catch (err) {
-          throw new Error('Cannot find markdown library, install markdown or discount');
-        }
-      }
-    }
-
-    str = str.replace(/\\n/g, '\n');
-    return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'&#39;');
-  },
-  
-  /**
-   * Transform coffeescript to javascript.
-   */
-
-  coffeescript: function(str){
-    str = str.replace(/\\n/g, '\n');
-    var js = require('coffee-script').compile(str).replace(/\n/g, '\\n');
-    return '<script type="text/javascript">\\n' + js + '</script>';
-  }
-};
-}); // module: filters.js
-
-require.register("inline-tags.js", function(module, exports, require){
-
-/*!
- * Jade - inline tags
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-module.exports = [
-    'a'
-  , 'abbr'
-  , 'acronym'
-  , 'b'
-  , 'br'
-  , 'code'
-  , 'em'
-  , 'font'
-  , 'i'
-  , 'img'
-  , 'ins'
-  , 'kbd'
-  , 'map'
-  , 'samp'
-  , 'small'
-  , 'span'
-  , 'strong'
-  , 'sub'
-  , 'sup'
-];
-}); // module: inline-tags.js
-
-require.register("jade.js", function(module, exports, require){
-
-/*!
- * Jade
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Parser = require('./parser')
-  , Compiler = require('./compiler')
-  , runtime = require('./runtime')
-
-/**
- * Library version.
- */
-
-exports.version = '0.15.4';
-
-/**
- * Intermediate JavaScript cache.
- */
-
-var cache = exports.cache = {};
-
-/**
- * Expose self closing tags.
- */
-
-exports.selfClosing = require('./self-closing');
-
-/**
- * Default supported doctypes.
- */
-
-exports.doctypes = require('./doctypes');
-
-/**
- * Text filters.
- */
-
-exports.filters = require('./filters');
-
-/**
- * Utilities.
- */
-
-exports.utils = require('./utils');
-
-/**
- * Expose `Compiler`.
- */
-
-exports.Compiler = Compiler;
-
-/**
- * Expose `Parser`.
- */
-
-exports.Parser = Parser;
-
-/**
- * Nodes.
- */
-
-exports.nodes = require('./nodes');
-
-/**
- * Jade runtime helpers.
- */
-
-exports.runtime = runtime;
-
-/**
- * Parse the given `str` of jade and return a function body.
- *
- * @param {String} str
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function parse(str, options){
-  var filename = options.filename;
-  
-  try {
-    // Parse
-    var parser = new Parser(str, filename, options);
-
-    // Compile
-    var compiler = new (options.compiler || Compiler)(parser.parse(), options)
-      , js = compiler.compile();
-
-    // Debug compiler
-    if (options.debug) {
-      console.log('\n\x1b[1mCompiled Function\x1b[0m:\n\n%s', js.replace(/^/gm, '  '));
-    }
-
-    try {
-      return ''
-        + 'var buf = [];\n'
-        + (options.self
-          ? 'var self = locals || {};\n' + js
-          : 'with (locals || {}) {\n' + js + '\n}\n')
-        + 'return buf.join("");';
-      
-    } catch (err) {
-      process.compile(js, filename || 'Jade');
-      return;
-    }
-  } catch (err) {
-    runtime.rethrow(err, str, filename, parser.lexer.lineno);
-  }
-}
-
-/**
- * Compile a `Function` representation of the given jade `str`.
- *
- * Options:
- * 
- *   - `compileDebug` when `false` debugging code is stripped from the compiled template
- *   - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()`
- *      for use with the Jade client-side runtime.js
- *
- * @param {String} str
- * @param {Options} options
- * @return {Function}
- * @api public
- */
-
-exports.compile = function(str, options){
-  var options = options || {}
-    , input = JSON.stringify(str)
-    , client = options.client
-    , filename = options.filename
-      ? JSON.stringify(options.filename)
-      : 'undefined'
-    , fn;
-
-  if (options.compileDebug !== false) {
-    fn = [
-        'var __ = { lineno: 1, input: ' + input + ', filename: ' + filename + ' };'
-      , 'try {'
-      , parse(String(str), options || {})
-      , '} catch (err) {'
-      , '  rethrow(err, __.input, __.filename, __.lineno);'
-      , '}'
-    ].join('\n');
-  } else {
-    fn = parse(String(str), options || {});
-  }
-
-  if (client) {
-    fn = 'var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow;\n' + fn;
-  }
-
-  fn = new Function('locals, attrs, escape, rethrow', fn);
-
-  if (client) return fn;
-
-  return function(locals){
-    return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow);
-  };
-};
-
-}); // module: jade.js
-
-require.register("lexer.js", function(module, exports, require){
-
-/*!
- * Jade - Lexer
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Initialize `Lexer` with the given `str`.
- *
- * Options:
- *
- *   - `colons` allow colons for attr delimiters
- *
- * @param {String} str
- * @param {Object} options
- * @api private
- */
-
-var Lexer = module.exports = function Lexer(str, options) {
-  options = options || {};
-  this.input = str.replace(/\r\n|\r/g, '\n');
-  this.colons = options.colons;
-  this.deferredTokens = [];
-  this.lastIndents = 0;
-  this.lineno = 1;
-  this.stash = [];
-  this.indentStack = [];
-  this.indentRe = null;
-  this.pipeless = false;
-};
-
-/**
- * Lexer prototype.
- */
-
-Lexer.prototype = {
-  
-  /**
-   * Construct a token with the given `type` and `val`.
-   *
-   * @param {String} type
-   * @param {String} val
-   * @return {Object}
-   * @api private
-   */
-  
-  tok: function(type, val){
-    return {
-        type: type
-      , line: this.lineno
-      , val: val
-    }
-  },
-  
-  /**
-   * Consume the given `len` of input.
-   *
-   * @param {Number} len
-   * @api private
-   */
-  
-  consume: function(len){
-    this.input = this.input.substr(len);
-  },
-  
-  /**
-   * Scan for `type` with the given `regexp`.
-   *
-   * @param {String} type
-   * @param {RegExp} regexp
-   * @return {Object}
-   * @api private
-   */
-  
-  scan: function(regexp, type){
-    var captures;
-    if (captures = regexp.exec(this.input)) {
-      this.consume(captures[0].length);
-      return this.tok(type, captures[1]);
-    }
-  },
-  
-  /**
-   * Defer the given `tok`.
-   *
-   * @param {Object} tok
-   * @api private
-   */
-  
-  defer: function(tok){
-    this.deferredTokens.push(tok);
-  },
-  
-  /**
-   * Lookahead `n` tokens.
-   *
-   * @param {Number} n
-   * @return {Object}
-   * @api private
-   */
-  
-  lookahead: function(n){
-    var fetch = n - this.stash.length;
-    while (fetch-- > 0) this.stash.push(this.next());
-    return this.stash[--n];
-  },
-  
-  /**
-   * Return the indexOf `start` / `end` delimiters.
-   *
-   * @param {String} start
-   * @param {String} end
-   * @return {Number}
-   * @api private
-   */
-  
-  indexOfDelimiters: function(start, end){
-    var str = this.input
-      , nstart = 0
-      , nend = 0
-      , pos = 0;
-    for (var i = 0, len = str.length; i < len; ++i) {
-      if (start == str[i]) {
-        ++nstart;
-      } else if (end == str[i]) {
-        if (++nend == nstart) {
-          pos = i;
-          break;
-        }
-      }
-    }
-    return pos;
-  },
-  
-  /**
-   * Stashed token.
-   */
-  
-  stashed: function() {
-    return this.stash.length
-      && this.stash.shift();
-  },
-  
-  /**
-   * Deferred token.
-   */
-  
-  deferred: function() {
-    return this.deferredTokens.length 
-      && this.deferredTokens.shift();
-  },
-  
-  /**
-   * end-of-source.
-   */
-  
-  eos: function() {
-    if (this.input.length) return;
-    if (this.indentStack.length) {
-      this.indentStack.shift();
-      return this.tok('outdent');
-    } else {
-      return this.tok('eos');
-    }
-  },
-
-  /**
-   * Comment.
-   */
-  
-  comment: function() {
-    var captures;
-    if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var tok = this.tok('comment', captures[2]);
-      tok.buffer = '-' != captures[1];
-      return tok;
-    }
-  },
-  
-  /**
-   * Tag.
-   */
-  
-  tag: function() {
-    var captures;
-    if (captures = /^(\w[-:\w]*)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var tok, name = captures[1];
-      if (':' == name[name.length - 1]) {
-        name = name.slice(0, -1);
-        tok = this.tok('tag', name);
-        this.deferredTokens.push(this.tok(':'));
-        while (' ' == this.input[0]) this.input = this.input.substr(1);
-      } else {
-        tok = this.tok('tag', name);
-      }
-      return tok;
-    }
-  },
-  
-  /**
-   * Filter.
-   */
-  
-  filter: function() {
-    return this.scan(/^:(\w+)/, 'filter');
-  },
-  
-  /**
-   * Doctype.
-   */
-  
-  doctype: function() {
-    return this.scan(/^(?:!!!|doctype) *(\w+)?/, 'doctype');
-  },
-
-  /**
-   * Id.
-   */
-  
-  id: function() {
-    return this.scan(/^#([\w-]+)/, 'id');
-  },
-  
-  /**
-   * Class.
-   */
-  
-  className: function() {
-    return this.scan(/^\.([\w-]+)/, 'class');
-  },
-  
-  /**
-   * Text.
-   */
-  
-  text: function() {
-    return this.scan(/^(?:\| ?)?([^\n]+)/, 'text');
-  },
-
-  /**
-   * Include.
-   */
-  
-  include: function() {
-    return this.scan(/^include +([^\n]+)/, 'include');
-  },
-
-  /**
-   * Mixin.
-   */
-
-  mixin: function(){
-    var captures;
-    if (captures = /^mixin +([-\w]+)(?:\(([^\)]+)\))?/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var tok = this.tok('mixin', captures[1]);
-      tok.args = captures[2];
-      return tok;
-    }
-  },
-
-  /**
-   * Conditional.
-   */
-  
-  conditional: function() {
-    var captures;
-    if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var type = captures[1]
-        , js = captures[2];
-
-      switch (type) {
-        case 'if': js = 'if (' + js + ')'; break;
-        case 'unless': js = 'if (!(' + js + '))'; break;
-        case 'else if': js = 'else if (' + js + ')'; break;
-        case 'else': js = 'else'; break;
-      }
-
-      return this.tok('code', js);
-    }
-  },
-
-  /**
-   * Each.
-   */
-  
-  each: function() {
-    var captures;
-    if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var tok = this.tok('each', captures[1]);
-      tok.key = captures[2] || 'index';
-      tok.code = captures[3];
-      return tok;
-    }
-  },
-  
-  /**
-   * Code.
-   */
-  
-  code: function() {
-    var captures;
-    if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var flags = captures[1];
-      captures[1] = captures[2];
-      var tok = this.tok('code', captures[1]);
-      tok.escape = flags[0] === '=';
-      tok.buffer = flags[0] === '=' || flags[1] === '=';
-      return tok;
-    }
-  },
-  
-  /**
-   * Attributes.
-   */
-  
-  attrs: function() {
-    if ('(' == this.input[0]) {
-      var index = this.indexOfDelimiters('(', ')')
-        , str = this.input.substr(1, index-1)
-        , tok = this.tok('attrs')
-        , len = str.length
-        , colons = this.colons
-        , states = ['key']
-        , key = ''
-        , val = ''
-        , quote
-        , c;
-
-      function state(){
-        return states[states.length - 1];
-      }
-
-      function interpolate(attr) {
-        return attr.replace(/#\{([^}]+)\}/g, function(_, expr){
-          return quote + " + (" + expr + ") + " + quote;
-        });
-      }
-
-      this.consume(index + 1);
-      tok.attrs = {};
-
-      function parse(c) {
-        var real = c;
-        // TODO: remove when people fix ":"
-        if (colons && ':' == c) c = '=';
-        switch (c) {
-          case ',':
-          case '\n':
-            switch (state()) {
-              case 'expr':
-              case 'array':
-              case 'string':
-              case 'object':
-                val += c;
-                break;
-              default:
-                states.push('key');
-                val = val.trim();
-                key = key.trim();
-                if ('' == key) return;
-                tok.attrs[key.replace(/^['"]|['"]$/g, '')] = '' == val
-                  ? true
-                  : interpolate(val);
-                key = val = '';
-            }
-            break;
-          case '=':
-            switch (state()) {
-              case 'key char':
-                key += real;
-                break;
-              case 'val':
-              case 'expr':
-              case 'array':
-              case 'string':
-              case 'object':
-                val += real;
-                break;
-              default:
-                states.push('val');
-            }
-            break;
-          case '(':
-            if ('val' == state()) states.push('expr');
-            val += c;
-            break;
-          case ')':
-            if ('expr' == state()) states.pop();
-            val += c;
-            break;
-          case '{':
-            if ('val' == state()) states.push('object');
-            val += c;
-            break;
-          case '}':
-            if ('object' == state()) states.pop();
-            val += c;
-            break;
-          case '[':
-            if ('val' == state()) states.push('array');
-            val += c;
-            break;
-          case ']':
-            if ('array' == state()) states.pop();
-            val += c;
-            break;
-          case '"':
-          case "'":
-            switch (state()) {
-              case 'key':
-                states.push('key char');
-                break;
-              case 'key char':
-                states.pop();
-                break;
-              case 'string':
-                if (c == quote) states.pop();
-                val += c;
-                break;
-              default:
-                states.push('string');
-                val += c;
-                quote = c;
-            }
-            break;
-          case '':
-            break;
-          default:
-            switch (state()) {
-              case 'key':
-              case 'key char':
-                key += c;
-                break;
-              default:
-                val += c;
-            }
-        }
-      }
-
-      for (var i = 0; i < len; ++i) {
-        parse(str[i]);
-      }
-
-      parse(',');
-
-      return tok;
-    }
-  },
-  
-  /**
-   * Indent | Outdent | Newline.
-   */
-  
-  indent: function() {
-    var captures, re;
-
-    // established regexp
-    if (this.indentRe) {
-      captures = this.indentRe.exec(this.input);
-    // determine regexp
-    } else {
-      // tabs
-      re = /^\n(\t*) */;
-      captures = re.exec(this.input);
-
-      // spaces
-      if (captures && !captures[1].length) {
-        re = /^\n( *)/;
-        captures = re.exec(this.input);
-      }
-
-      // established
-      if (captures && captures[1].length) this.indentRe = re;
-    }
-
-    if (captures) {
-      var tok
-        , indents = captures[1].length;
-
-      ++this.lineno;
-      this.consume(indents + 1);
-
-      if (' ' == this.input[0] || '\t' == this.input[0]) {
-        throw new Error('Invalid indentation, you can use tabs or spaces but not both');
-      }
-
-      // blank line
-      if ('\n' == this.input[0]) return this.tok('newline');
-
-      // outdent
-      if (this.indentStack.length && indents < this.indentStack[0]) {
-        while (this.indentStack.length && this.indentStack[0] > indents) {
-          this.stash.push(this.tok('outdent'));
-          this.indentStack.shift();
-        }
-        tok = this.stash.pop();
-      // indent
-      } else if (indents && indents != this.indentStack[0]) {
-        this.indentStack.unshift(indents);
-        tok = this.tok('indent', indents);
-      // newline
-      } else {
-        tok = this.tok('newline');
-      }
-
-      return tok;
-    }
-  },
-
-  /**
-   * Pipe-less text consumed only when 
-   * pipeless is true;
-   */
-
-  pipelessText: function() {
-    if (this.pipeless) {
-      if ('\n' == this.input[0]) return;
-      var i = this.input.indexOf('\n');
-      if (-1 == i) i = this.input.length;
-      var str = this.input.substr(0, i);
-      this.consume(str.length);
-      return this.tok('text', str);
-    }
-  },
-
-  /**
-   * ':'
-   */
-
-  colon: function() {
-    return this.scan(/^: */, ':');
-  },
-
-  /**
-   * Return the next token object, or those
-   * previously stashed by lookahead.
-   *
-   * @return {Object}
-   * @api private
-   */
-  
-  advance: function(){
-    return this.stashed()
-      || this.next();
-  },
-  
-  /**
-   * Return the next token object.
-   *
-   * @return {Object}
-   * @api private
-   */
-  
-  next: function() {
-    return this.deferred()
-      || this.eos()
-      || this.pipelessText()
-      || this.doctype()
-      || this.include()
-      || this.mixin()
-      || this.conditional()
-      || this.each()
-      || this.tag()
-      || this.filter()
-      || this.code()
-      || this.id()
-      || this.className()
-      || this.attrs()
-      || this.indent()
-      || this.comment()
-      || this.colon()
-      || this.text();
-  }
-};
-
-}); // module: lexer.js
-
-require.register("nodes/block-comment.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - BlockComment
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `BlockComment` with the given `block`.
- *
- * @param {String} val
- * @param {Block} block
- * @param {Boolean} buffer
- * @api public
- */
-
-var BlockComment = module.exports = function BlockComment(val, block, buffer) {
-  this.block = block;
-  this.val = val;
-  this.buffer = buffer;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-BlockComment.prototype = new Node;
-BlockComment.prototype.constructor = BlockComment;
-
-}); // module: nodes/block-comment.js
-
-require.register("nodes/block.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Block
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Block` with an optional `node`.
- *
- * @param {Node} node
- * @api public
- */
-
-var Block = module.exports = function Block(node){
-  this.nodes = [];
-  if (node) this.push(node);
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Block.prototype = new Node;
-Block.prototype.constructor = Block;
-
-
-/**
- * Pust the given `node`.
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Block.prototype.push = function(node){
-  return this.nodes.push(node);
-};
-
-/**
- * Unshift the given `node`.
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Block.prototype.unshift = function(node){
-  return this.nodes.unshift(node);
-};
-
-}); // module: nodes/block.js
-
-require.register("nodes/code.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Code
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Code` node with the given code `val`.
- * Code may also be optionally buffered and escaped.
- *
- * @param {String} val
- * @param {Boolean} buffer
- * @param {Boolean} escape
- * @api public
- */
-
-var Code = module.exports = function Code(val, buffer, escape) {
-  this.val = val;
-  this.buffer = buffer;
-  this.escape = escape;
-  if (/^ *else/.test(val)) this.instrumentLineNumber = false;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Code.prototype = new Node;
-Code.prototype.constructor = Code;
-
-}); // module: nodes/code.js
-
-require.register("nodes/comment.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Comment
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Comment` with the given `val`, optionally `buffer`,
- * otherwise the comment may render in the output.
- *
- * @param {String} val
- * @param {Boolean} buffer
- * @api public
- */
-
-var Comment = module.exports = function Comment(val, buffer) {
-  this.val = val;
-  this.buffer = buffer;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Comment.prototype = new Node;
-Comment.prototype.constructor = Comment;
-
-}); // module: nodes/comment.js
-
-require.register("nodes/doctype.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Doctype
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Doctype` with the given `val`. 
- *
- * @param {String} val
- * @api public
- */
-
-var Doctype = module.exports = function Doctype(val) {
-  this.val = val;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Doctype.prototype = new Node;
-Doctype.prototype.constructor = Doctype;
-
-}); // module: nodes/doctype.js
-
-require.register("nodes/each.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Each
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize an `Each` node, representing iteration
- *
- * @param {String} obj
- * @param {String} val
- * @param {String} key
- * @param {Block} block
- * @api public
- */
-
-var Each = module.exports = function Each(obj, val, key, block) {
-  this.obj = obj;
-  this.val = val;
-  this.key = key;
-  this.block = block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Each.prototype = new Node;
-Each.prototype.constructor = Each;
-
-}); // module: nodes/each.js
-
-require.register("nodes/filter.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Filter
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , Block = require('./block');
-
-/**
- * Initialize a `Filter` node with the given 
- * filter `name` and `block`.
- *
- * @param {String} name
- * @param {Block|Node} block
- * @api public
- */
-
-var Filter = module.exports = function Filter(name, block, attrs) {
-  this.name = name;
-  this.block = block;
-  this.attrs = attrs;
-  this.isASTFilter = block instanceof Block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Filter.prototype = new Node;
-Filter.prototype.constructor = Filter;
-
-}); // module: nodes/filter.js
-
-require.register("nodes/index.js", function(module, exports, require){
-
-/*!
- * Jade - nodes
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-exports.Node = require('./node');
-exports.Tag = require('./tag');
-exports.Code = require('./code');
-exports.Each = require('./each');
-exports.Text = require('./text');
-exports.Block = require('./block');
-exports.Mixin = require('./mixin');
-exports.Filter = require('./filter');
-exports.Comment = require('./comment');
-exports.Literal = require('./literal');
-exports.BlockComment = require('./block-comment');
-exports.Doctype = require('./doctype');
-
-}); // module: nodes/index.js
-
-require.register("nodes/literal.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Literal
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Literal` node with the given `str.
- *
- * @param {String} str
- * @api public
- */
-
-var Literal = module.exports = function Literal(str) {
-  this.str = str;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Literal.prototype = new Node;
-Literal.prototype.constructor = Literal;
-
-
-}); // module: nodes/literal.js
-
-require.register("nodes/mixin.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Mixin
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Mixin` with `name` and `block`.
- *
- * @param {String} name
- * @param {String} args
- * @param {Block} block
- * @api public
- */
-
-var Mixin = module.exports = function Mixin(name, args, block){
-  this.name = name;
-  this.args = args;
-  this.block = block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Mixin.prototype = new Node;
-Mixin.prototype.constructor = Mixin;
-
-
-
-}); // module: nodes/mixin.js
-
-require.register("nodes/node.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Node
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Initialize a `Node`.
- *
- * @api public
- */
-
-var Node = module.exports = function Node(){};
-}); // module: nodes/node.js
-
-require.register("nodes/tag.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Tag
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node'),
-    Block = require('./block');
-
-/**
- * Initialize a `Tag` node with the given tag `name` and optional `block`.
- *
- * @param {String} name
- * @param {Block} block
- * @api public
- */
-
-var Tag = module.exports = function Tag(name, block) {
-  this.name = name;
-  this.attrs = [];
-  this.block = block || new Block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Tag.prototype = new Node;
-Tag.prototype.constructor = Tag;
-
-
-/**
- * Set attribute `name` to `val`, keep in mind these become
- * part of a raw js object literal, so to quote a value you must
- * '"quote me"', otherwise or example 'user.name' is literal JavaScript.
- *
- * @param {String} name
- * @param {String} val
- * @return {Tag} for chaining
- * @api public
- */
-
-Tag.prototype.setAttribute = function(name, val){
-  this.attrs.push({ name: name, val: val });
-  return this;
-};
-
-/**
- * Remove attribute `name` when present.
- *
- * @param {String} name
- * @api public
- */
-
-Tag.prototype.removeAttribute = function(name){
-  for (var i = 0, len = this.attrs.length; i < len; ++i) {
-    if (this.attrs[i] && this.attrs[i].name == name) {
-      delete this.attrs[i];
-    }
-  }
-};
-
-/**
- * Get attribute value by `name`.
- *
- * @param {String} name
- * @return {String}
- * @api public
- */
-
-Tag.prototype.getAttribute = function(name){
-  for (var i = 0, len = this.attrs.length; i < len; ++i) {
-    if (this.attrs[i] && this.attrs[i].name == name) {
-      return this.attrs[i].val;
-    }
-  }
-};
-
-}); // module: nodes/tag.js
-
-require.register("nodes/text.js", function(module, exports, require){
-
-/*!
- * Jade - nodes - Text
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Text` node with optional `line`.
- *
- * @param {String} line
- * @api public
- */
-
-var Text = module.exports = function Text(line) {
-  this.nodes = [];
-  if ('string' == typeof line) this.push(line);
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Text.prototype = new Node;
-Text.prototype.constructor = Text;
-
-
-/**
- * Push the given `node.`
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Text.prototype.push = function(node){
-  return this.nodes.push(node);
-};
-
-}); // module: nodes/text.js
-
-require.register("parser.js", function(module, exports, require){
-
-/*!
- * Jade - Parser
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Lexer = require('./lexer')
-  , nodes = require('./nodes');
-
-/**
- * Initialize `Parser` with the given input `str` and `filename`.
- *
- * @param {String} str
- * @param {String} filename
- * @param {Object} options
- * @api public
- */
-
-var Parser = exports = module.exports = function Parser(str, filename, options){
-  this.input = str;
-  this.lexer = new Lexer(str, options);
-  this.filename = filename;
-};
-
-/**
- * Tags that may not contain tags.
- */
-
-var textOnly = exports.textOnly = ['code', 'script', 'textarea', 'style', 'title'];
-
-/**
- * Parser prototype.
- */
-
-Parser.prototype = {
-  
-  /**
-   * Return the next token object.
-   *
-   * @return {Object}
-   * @api private
-   */
-
-  advance: function(){
-    return this.lexer.advance();
-  },
-
-  /**
-   * Skip `n` tokens.
-   *
-   * @param {Number} n
-   * @api private
-   */
-
-  skip: function(n){
-    while (n--) this.advance();
-  },
-  
-  /**
-   * Single token lookahead.
-   *
-   * @return {Object}
-   * @api private
-   */
-  
-  peek: function() {
-    return this.lookahead(1);
-  },
-  
-  /**
-   * Return lexer lineno.
-   *
-   * @return {Number}
-   * @api private
-   */
-  
-  line: function() {
-    return this.lexer.lineno;
-  },
-  
-  /**
-   * `n` token lookahead.
-   *
-   * @param {Number} n
-   * @return {Object}
-   * @api private
-   */
-  
-  lookahead: function(n){
-    return this.lexer.lookahead(n);
-  },
-  
-  /**
-   * Parse input returning a string of js for evaluation.
-   *
-   * @return {String}
-   * @api public
-   */
-  
-  parse: function(){
-    var block = new nodes.Block;
-    block.line = this.line();
-    while ('eos' != this.peek().type) {
-      if ('newline' == this.peek().type) {
-        this.advance();
-      } else {
-        block.push(this.parseExpr());
-      }
-    }
-    return block;
-  },
-  
-  /**
-   * Expect the given type, or throw an exception.
-   *
-   * @param {String} type
-   * @api private
-   */
-  
-  expect: function(type){
-    if (this.peek().type === type) {
-      return this.advance();
-    } else {
-      throw new Error('expected "' + type + '", but got "' + this.peek().type + '"');
-    }
-  },
-  
-  /**
-   * Accept the given `type`.
-   *
-   * @param {String} type
-   * @api private
-   */
-  
-  accept: function(type){
-    if (this.peek().type === type) {
-      return this.advance();
-    }
-  },
-  
-  /**
-   *   tag
-   * | doctype
-   * | mixin
-   * | include
-   * | filter
-   * | comment
-   * | text
-   * | each
-   * | code
-   * | id
-   * | class
-   */
-  
-  parseExpr: function(){
-    switch (this.peek().type) {
-      case 'tag':
-        return this.parseTag();
-      case 'mixin':
-        return this.parseMixin();
-      case 'include':
-        return this.parseInclude();
-      case 'doctype':
-        return this.parseDoctype();
-      case 'filter':
-        return this.parseFilter();
-      case 'comment':
-        return this.parseComment();
-      case 'text':
-        return this.parseText();
-      case 'each':
-        return this.parseEach();
-      case 'code':
-        return this.parseCode();
-      case 'id':
-      case 'class':
-        var tok = this.advance();
-        this.lexer.defer(this.lexer.tok('tag', 'div'));
-        this.lexer.defer(tok);
-        return this.parseExpr();
-      default:
-        throw new Error('unexpected token "' + this.peek().type + '"');
-    }
-  },
-  
-  /**
-   * Text
-   */
-  
-  parseText: function(){
-    var tok = this.expect('text')
-      , node = new nodes.Text(tok.val);
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * code
-   */
-  
-  parseCode: function(){
-    var tok = this.expect('code')
-      , node = new nodes.Code(tok.val, tok.buffer, tok.escape)
-      , block
-      , i = 1;
-    node.line = this.line();
-    while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i;
-    block = 'indent' == this.lookahead(i).type;
-    if (block) {
-      this.skip(i-1);
-      node.block = this.parseBlock();
-    }
-    return node;
-  },
-  
-  /**
-   * comment
-   */
-  
-  parseComment: function(){
-    var tok = this.expect('comment')
-      , node;
-
-    if ('indent' == this.peek().type) {
-      node = new nodes.BlockComment(tok.val, this.parseBlock(), tok.buffer);
-    } else {
-      node = new nodes.Comment(tok.val, tok.buffer);
-    }
-
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * doctype
-   */
-  
-  parseDoctype: function(){
-    var tok = this.expect('doctype')
-      , node = new nodes.Doctype(tok.val);
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * filter attrs? text-block
-   */
-  
-  parseFilter: function(){
-    var block
-      , tok = this.expect('filter')
-      , attrs = this.accept('attrs');
-
-    this.lexer.pipeless = true;
-    block = this.parseTextBlock();
-    this.lexer.pipeless = false;
-
-    var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs);
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * tag ':' attrs? block
-   */
-  
-  parseASTFilter: function(){
-    var block
-      , tok = this.expect('tag')
-      , attrs = this.accept('attrs');
-
-    this.expect(':');
-    block = this.parseBlock();
-
-    var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs);
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * each block
-   */
-  
-  parseEach: function(){
-    var tok = this.expect('each')
-      , node = new nodes.Each(tok.code, tok.val, tok.key, this.parseBlock());
-    node.line = this.line();
-    return node;
-  },
-
-  /**
-   * include
-   */
-
-  parseInclude: function(){
-    var path = require('path')
-      , fs = require('fs')
-      , dirname = path.dirname
-      , basename = path.basename
-      , join = path.join;
-
-    if (!this.filename)
-      throw new Error('the "filename" option is required to use includes');
-
-    var path = name = this.expect('include').val.trim()
-      , dir = dirname(this.filename);
-
-    // non-jade
-    if (~basename(path).indexOf('.')) {
-      var path = join(dir, path)
-        , str = fs.readFileSync(path, 'utf8');
-      return new nodes.Literal(str);
-    }
-
-    var path = join(dir, path + '.jade')
-      , str = fs.readFileSync(path, 'utf8')
-      , parser = new Parser(str, path)
-      , ast = parser.parse();
-
-    return ast;
-  },
-
-  /**
-   * mixin block
-   */
-
-  parseMixin: function(){
-    var tok = this.expect('mixin')
-      , name = tok.val
-      , args = tok.args;
-    var block = 'indent' == this.peek().type
-      ? this.parseBlock()
-      : null;
-    return new nodes.Mixin(name, args, block);
-  },
-
-  /**
-   * indent (text | newline)* outdent
-   */
-
-  parseTextBlock: function(){
-    var text = new nodes.Text;
-    text.line = this.line();
-    var spaces = this.expect('indent').val;
-    if (null == this._spaces) this._spaces = spaces;
-    var indent = Array(spaces - this._spaces + 1).join(' ');
-    while ('outdent' != this.peek().type) {
-      switch (this.peek().type) {
-        case 'newline':
-          text.push('\\n');
-          this.advance();
-          break;
-        case 'indent':
-          text.push('\\n');
-          this.parseTextBlock().nodes.forEach(function(node){
-            text.push(node);
-          });
-          text.push('\\n');
-          break;
-        default:
-          text.push(indent + this.advance().val);
-      }
-    }
-
-    if (spaces == this._spaces) this._spaces = null;
-    this.expect('outdent');
-    return text;
-  },
-
-  /**
-   * indent expr* outdent
-   */
-  
-  parseBlock: function(){
-    var block = new nodes.Block;
-    block.line = this.line();
-    this.expect('indent');
-    while ('outdent' != this.peek().type) {
-      if ('newline' == this.peek().type) {
-        this.advance();
-      } else {
-        block.push(this.parseExpr());
-      }
-    }
-    this.expect('outdent');
-    return block;
-  },
-
-  /**
-   * tag (attrs | class | id)* (text | code | ':')? newline* block?
-   */
-  
-  parseTag: function(){
-    // ast-filter look-ahead
-    var i = 2;
-    if ('attrs' == this.lookahead(i).type) ++i;
-    if (':' == this.lookahead(i).type) {
-      if ('indent' == this.lookahead(++i).type) {
-        return this.parseASTFilter();
-      }
-    }
-
-    var name = this.advance().val
-      , tag = new nodes.Tag(name)
-      , dot;
-
-    tag.line = this.line();
-
-    // (attrs | class | id)*
-    out:
-      while (true) {
-        switch (this.peek().type) {
-          case 'id':
-          case 'class':
-            var tok = this.advance();
-            tag.setAttribute(tok.type, "'" + tok.val + "'");
-            continue;
-          case 'attrs':
-            var obj = this.advance().attrs
-              , names = Object.keys(obj);
-            for (var i = 0, len = names.length; i < len; ++i) {
-              var name = names[i]
-                , val = obj[name];
-              tag.setAttribute(name, val);
-            }
-            continue;
-          default:
-            break out;
-        }
-      }
-
-    // check immediate '.'
-    if ('.' == this.peek().val) {
-      dot = tag.textOnly = true;
-      this.advance();
-    }
-
-    // (text | code | ':')?
-    switch (this.peek().type) {
-      case 'text':
-        tag.text = this.parseText();
-        break;
-      case 'code':
-        tag.code = this.parseCode();
-        break;
-      case ':':
-        this.advance();
-        tag.block = new nodes.Block;
-        tag.block.push(this.parseTag());
-        break;
-    }
-
-    // newline*
-    while ('newline' == this.peek().type) this.advance();
-
-    tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name);
-
-    // script special-case
-    if ('script' == tag.name) {
-      var type = tag.getAttribute('type');
-      if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) {
-        tag.textOnly = false;
-      }
-    }
-
-    // block?
-    if ('indent' == this.peek().type) {
-      if (tag.textOnly) {
-        this.lexer.pipeless = true;
-        tag.block = this.parseTextBlock();
-        this.lexer.pipeless = false;
-      } else {
-        var block = this.parseBlock();
-        if (tag.block) {
-          for (var i = 0, len = block.nodes.length; i < len; ++i) {
-            tag.block.push(block.nodes[i]);
-          }
-        } else {
-          tag.block = block;
-        }
-      }
-    }
-    
-    return tag;
-  }
-};
-
-}); // module: parser.js
-
-require.register("runtime.js", function(module, exports, require){
-
-/*!
- * Jade - runtime
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Lame Array.isArray() polyfill for now.
- */
-
-if (!Array.isArray) {
-  Array.isArray = function(arr){
-    return '[object Array]' == toString.call(arr);
-  };
-}
-
-/**
- * Lame Object.keys() polyfill for now.
- */
-
-if (!Object.keys) {
-  Object.keys = function(obj){
-    var arr = [];
-    for (var key in obj) {
-      if (obj.hasOwnProperty(key)) {
-        arr.push(obj);
-      }
-    }
-    return arr;
-  } 
-}
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @return {String}
- * @api private
- */
-
-exports.attrs = function attrs(obj){
-  var buf = []
-    , terse = obj.terse;
-  delete obj.terse;
-  var keys = Object.keys(obj)
-    , len = keys.length;
-  if (len) {
-    buf.push('');
-    for (var i = 0; i < len; ++i) {
-      var key = keys[i]
-        , val = obj[key];
-      if ('boolean' == typeof val || null == val) {
-        if (val) {
-          terse
-            ? buf.push(key)
-            : buf.push(key + '="' + key + '"');
-        }
-      } else if ('class' == key && Array.isArray(val)) {
-        buf.push(key + '="' + exports.escape(val.join(' ')) + '"');
-      } else {
-        buf.push(key + '="' + exports.escape(val) + '"');
-      }
-    }
-  }
-  return buf.join(' ');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-exports.escape = function escape(html){
-  return String(html)
-    .replace(/&(?!\w+;)/g, '&amp;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;')
-    .replace(/"/g, '&quot;');
-};
-
-/**
- * Re-throw the given `err` in context to the
- * `str` of jade, `filename`, and `lineno`.
- *
- * @param {Error} err
- * @param {String} str
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, str, filename, lineno){
-  var context = 3
-    , lines = str.split('\n')
-    , start = Math.max(lineno - context, 0)
-    , end = Math.min(lines.length, lineno + context); 
-
-  // Error context
-  var context = lines.slice(start, end).map(function(line, i){
-    var curr = i + start + 1;
-    return (curr == lineno ? '  > ' : '    ')
-      + curr
-      + '| '
-      + line;
-  }).join('\n');
-
-  // Alter exception message
-  err.path = filename;
-  err.message = (filename || 'Jade') + ':' + lineno 
-    + '\n' + context + '\n\n' + err.message;
-  throw err;
-};
-
-}); // module: runtime.js
-
-require.register("self-closing.js", function(module, exports, require){
-
-/*!
- * Jade - self closing tags
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-module.exports = [
-    'meta'
-  , 'img'
-  , 'link'
-  , 'input'
-  , 'area'
-  , 'base'
-  , 'col'
-  , 'br'
-  , 'hr'
-];
-}); // module: self-closing.js
-
-require.register("utils.js", function(module, exports, require){
-
-/*!
- * Jade - utils
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Convert interpolation in the given string to JavaScript.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var interpolate = exports.interpolate = function(str){
-  return str.replace(/(\\)?([#!]){(.*?)}/g, function(str, escape, flag, code){
-    return escape
-      ? str
-      : "' + "
-        + ('!' == flag ? '' : 'escape')
-        + "((interp = " + code.replace(/\\'/g, "'")
-        + ") == null ? '' : interp) + '";
-  });
-};
-
-/**
- * Escape single quotes in `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var escape = exports.escape = function(str) {
-  return str.replace(/'/g, "\\'");
-};
-
-/**
- * Interpolate, and escape the given `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-exports.text = function(str){
-  return interpolate(escape(str));
-};
-}); // module: utils.js
diff --git a/node/node_modules/jade/jade.min.js b/node/node_modules/jade/jade.min.js
deleted file mode 100644 (file)
index ffe1773..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-// CommonJS require()
-function require(p){var path=require.resolve(p),mod=require.modules[path];if(!mod)throw new Error('failed to require "'+p+'"');mod.exports||(mod.exports={},mod.call(mod.exports,mod,mod.exports,require.relative(path)));return mod.exports}require.modules={},require.resolve=function(path){var orig=path,reg=path+".js",index=path+"/index.js";return require.modules[reg]&&reg||require.modules[index]&&index||orig},require.register=function(path,fn){require.modules[path]=fn},require.relative=function(parent){return function(p){if("."!=p[0])return require(p);var path=parent.split("/"),segs=p.split("/");path.pop();for(var i=0;i<segs.length;i++){var seg=segs[i];".."==seg?path.pop():"."!=seg&&path.push(seg)}return require(path.join("/"))}},require.register("compiler.js",function(module,exports,require){var nodes=require("./nodes"),filters=require("./filters"),doctypes=require("./doctypes"),selfClosing=require("./self-closing"),inlineTags=require("./inline-tags"),utils=require("./utils");Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(obj);return arr}),String.prototype.trimLeft||(String.prototype.trimLeft=function(){return this.replace(/^\s+/,"")});var Compiler=module.exports=function Compiler(node,options){this.options=options=options||{},this.node=node,this.hasCompiledDoctype=!1,this.hasCompiledTag=!1,this.pp=options.pretty||!1,this.debug=!1!==options.compileDebug,this.indents=0,options.doctype&&this.setDoctype(options.doctype)};Compiler.prototype={compile:function(){this.buf=["var interp;"],this.lastBufferedIdx=-1,this.visit(this.node);return this.buf.join("\n")},setDoctype:function(name){var doctype=doctypes[(name||"default").toLowerCase()];if(!doctype)throw new Error('unknown doctype "'+name+'"');this.doctype=doctype,this.terse="5"==name||"html"==name,this.xml=0==this.doctype.indexOf("<?xml")},buffer:function(str,esc){esc&&(str=utils.escape(str)),this.lastBufferedIdx==this.buf.length?(this.lastBuffered+=str,this.buf[this.lastBufferedIdx-1]="buf.push('"+this.lastBuffered+"');"):(this.buf.push("buf.push('"+str+"');"),this.lastBuffered=str,this.lastBufferedIdx=this.buf.length)},line:function(node){!1!==node.instrumentLineNumber&&this.buf.push("__.lineno = "+node.line+";")},visit:function(node){this.debug&&this.line(node);return this.visitNode(node)},visitNode:function(node){var name=node.constructor.name||node.constructor.toString().match(/function ([^(\s]+)()/)[1];return this["visit"+name](node)},visitLiteral:function(node){var str=node.str.replace(/\n/g,"\\\\n");this.buffer(str)},visitBlock:function(block){var len=block.nodes.length;for(var i=0;i<len;++i)this.visit(block.nodes[i])},visitDoctype:function(doctype){doctype&&(doctype.val||!this.doctype)&&this.setDoctype(doctype.val||"default"),this.doctype&&this.buffer(this.doctype),this.hasCompiledDoctype=!0},visitMixin:function(mixin){var name=mixin.name.replace(/-/g,"_")+"_mixin",args=mixin.args||"";mixin.block?(this.buf.push("var "+name+" = function("+args+"){"),this.visit(mixin.block),this.buf.push("}")):this.buf.push(name+"("+args+");")},visitTag:function(tag){this.indents++;var name=tag.name;this.hasCompiledTag||(!this.hasCompiledDoctype&&"html"==name&&this.visitDoctype(),this.hasCompiledTag=!0),this.pp&&inlineTags.indexOf(name)==-1&&this.buffer("\\n"+Array(this.indents).join("  ")),~selfClosing.indexOf(name)&&!this.xml?(this.buffer("<"+name),this.visitAttributes(tag.attrs),this.terse?this.buffer(">"):this.buffer("/>")):(tag.attrs.length?(this.buffer("<"+name),tag.attrs.length&&this.visitAttributes(tag.attrs),this.buffer(">")):this.buffer("<"+name+">"),tag.code&&this.visitCode(tag.code),tag.text&&this.buffer(utils.text(tag.text.nodes[0].trimLeft())),this.escape="pre"==tag.name,this.visit(tag.block),this.pp&&!~inlineTags.indexOf(name)&&!tag.textOnly&&this.buffer("\\n"+Array(this.indents).join("  ")),this.buffer("</"+name+">")),this.indents--},visitFilter:function(filter){var fn=filters[filter.name];if(!fn)throw filter.isASTFilter?new Error('unknown ast filter "'+filter.name+':"'):new Error('unknown filter ":'+filter.name+'"');if(filter.isASTFilter)this.buf.push(fn(filter.block,this,filter.attrs));else{var text=filter.block.nodes.join("");this.buffer(utils.text(fn(text,filter.attrs)))}},visitText:function(text){text=utils.text(text.nodes.join("")),this.escape&&(text=escape(text)),this.buffer(text),this.buffer("\\n")},visitComment:function(comment){!comment.buffer||(this.pp&&this.buffer("\\n"+Array(this.indents+1).join("  ")),this.buffer("<!--"+utils.escape(comment.val)+"-->"))},visitBlockComment:function(comment){!comment.buffer||(0==comment.val.indexOf("if")?(this.buffer("<!--["+comment.val+"]>"),this.visit(comment.block),this.buffer("<![endif]-->")):(this.buffer("<!--"+comment.val),this.visit(comment.block),this.buffer("-->")))},visitCode:function(code){if(code.buffer){var val=code.val.trimLeft();this.buf.push("var __val__ = "+val),val='null == __val__ ? "" : __val__',code.escape&&(val="escape("+val+")"),this.buf.push("buf.push("+val+");")}else this.buf.push(code.val);code.block&&(code.buffer||this.buf.push("{"),this.visit(code.block),code.buffer||this.buf.push("}"))},visitEach:function(each){this.buf.push("// iterate "+each.obj+"\n"+"(function(){\n"+"  if ('number' == typeof "+each.obj+".length) {\n"+"    for (var "+each.key+" = 0, $$l = "+each.obj+".length; "+each.key+" < $$l; "+each.key+"++) {\n"+"      var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push("    }\n  } else {\n    for (var "+each.key+" in "+each.obj+") {\n"+"      if ("+each.obj+".hasOwnProperty("+each.key+")){"+"      var "+each.val+" = "+each.obj+"["+each.key+"];\n"),this.visit(each.block),this.buf.push("      }\n"),this.buf.push("   }\n  }\n}).call(this);\n")},visitAttributes:function(attrs){var buf=[],classes=[];this.terse&&buf.push("terse: true"),attrs.forEach(function(attr){if(attr.name=="class")classes.push("("+attr.val+")");else{var pair="'"+attr.name+"':("+attr.val+")";buf.push(pair)}}),classes.length&&(classes=classes.join(" + ' ' + "),buf.push("class: "+classes)),buf=buf.join(", ").replace("class:",'"class":'),this.buf.push("buf.push(attrs({ "+buf+" }));")}};function escape(html){return String(html).replace(/&(?!\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}}),require.register("doctypes.js",function(module,exports,require){module.exports={5:"<!DOCTYPE html>",html:"<!DOCTYPE html>",xml:'<?xml version="1.0" encoding="utf-8" ?>',"default":'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',transitional:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',strict:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',frameset:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',1.1:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',basic:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',mobile:'<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'}}),require.register("filters.js",function(module,exports,require){module.exports={cdata:function(str){return"<![CDATA[\\n"+str+"\\n]]>"},sass:function(str){str=str.replace(/\\n/g,"\n");var sass=require("sass").render(str).replace(/\n/g,"\\n");return"<style>"+sass+"</style>"},stylus:function(str,options){var ret;str=str.replace(/\\n/g,"\n");var stylus=require("stylus");stylus(str,options).render(function(err,css){if(err)throw err;ret=css.replace(/\n/g,"\\n")});return"<style>"+ret+"</style>"},less:function(str){var ret;str=str.replace(/\\n/g,"\n"),require("less").render(str,function(err,css){if(err)throw err;ret="<style>"+css.replace(/\n/g,"\\n")+"</style>"});return ret},markdown:function(str){var md;try{md=require("markdown")}catch(err){try{md=require("discount")}catch(err){try{md=require("markdown-js")}catch(err){throw new Error("Cannot find markdown library, install markdown or discount")}}}str=str.replace(/\\n/g,"\n");return md.parse(str).replace(/\n/g,"\\n").replace(/'/g,"&#39;")},coffeescript:function(str){str=str.replace(/\\n/g,"\n");var js=require("coffee-script").compile(str).replace(/\n/g,"\\n");return'<script type="text/javascript">\\n'+js+"</script>"}}}),require.register("inline-tags.js",function(module,exports,require){module.exports=["a","abbr","acronym","b","br","code","em","font","i","img","ins","kbd","map","samp","small","span","strong","sub","sup"]}),require.register("jade.js",function(module,exports,require){var Parser=require("./parser"),Compiler=require("./compiler"),runtime=require("./runtime");exports.version="0.15.4";var cache=exports.cache={};exports.selfClosing=require("./self-closing"),exports.doctypes=require("./doctypes"),exports.filters=require("./filters"),exports.utils=require("./utils"),exports.Compiler=Compiler,exports.Parser=Parser,exports.nodes=require("./nodes"),exports.runtime=runtime;function parse(str,options){var filename=options.filename;try{var parser=new Parser(str,filename,options),compiler=new(options.compiler||Compiler)(parser.parse(),options),js=compiler.compile();options.debug&&console.log("\n\e[1mCompiled Function\e[0m:\n\n%s",js.replace(/^/gm,"  "));try{return"var buf = [];\n"+(options.self?"var self = locals || {};\n"+js:"with (locals || {}) {\n"+js+"\n}\n")+'return buf.join("");'}catch(err){process.compile(js,filename||"Jade");return}}catch(err){runtime.rethrow(err,str,filename,parser.lexer.lineno)}}exports.compile=function(str,options){var options=options||{},input=JSON.stringify(str),client=options.client,filename=options.filename?JSON.stringify(options.filename):"undefined",fn;options.compileDebug!==!1?fn=["var __ = { lineno: 1, input: "+input+", filename: "+filename+" };","try {",parse(String(str),options||{}),"} catch (err) {","  rethrow(err, __.input, __.filename, __.lineno);","}"].join("\n"):fn=parse(String(str),options||{}),client&&(fn="var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow;\n"+fn),fn=new Function("locals, attrs, escape, rethrow",fn);if(client)return fn;return function(locals){return fn(locals,runtime.attrs,runtime.escape,runtime.rethrow)}}}),require.register("lexer.js",function(module,exports,require){var Lexer=module.exports=function Lexer(str,options){options=options||{},this.input=str.replace(/\r\n|\r/g,"\n"),this.colons=options.colons,this.deferredTokens=[],this.lastIndents=0,this.lineno=1,this.stash=[],this.indentStack=[],this.indentRe=null,this.pipeless=!1};Lexer.prototype={tok:function(type,val){return{type:type,line:this.lineno,val:val}},consume:function(len){this.input=this.input.substr(len)},scan:function(regexp,type){var captures;if(captures=regexp.exec(this.input)){this.consume(captures[0].length);return this.tok(type,captures[1])}},defer:function(tok){this.deferredTokens.push(tok)},lookahead:function(n){var fetch=n-this.stash.length;while(fetch-->0)this.stash.push(this.next());return this.stash[--n]},indexOfDelimiters:function(start,end){var str=this.input,nstart=0,nend=0,pos=0;for(var i=0,len=str.length;i<len;++i)if(start==str[i])++nstart;else if(end==str[i]&&++nend==nstart){pos=i;break}return pos},stashed:function(){return this.stash.length&&this.stash.shift()},deferred:function(){return this.deferredTokens.length&&this.deferredTokens.shift()},eos:function(){if(!this.input.length){if(this.indentStack.length){this.indentStack.shift();return this.tok("outdent")}return this.tok("eos")}},comment:function(){var captures;if(captures=/^ *\/\/(-)?([^\n]*)/.exec(this.input)){this.consume(captures[0].length);var tok=this.tok("comment",captures[2]);tok.buffer="-"!=captures[1];return tok}},tag:function(){var captures;if(captures=/^(\w[-:\w]*)/.exec(this.input)){this.consume(captures[0].length);var tok,name=captures[1];if(":"==name[name.length-1]){name=name.slice(0,-1),tok=this.tok("tag",name),this.deferredTokens.push(this.tok(":"));while(" "==this.input[0])this.input=this.input.substr(1)}else tok=this.tok("tag",name);return tok}},filter:function(){return this.scan(/^:(\w+)/,"filter")},doctype:function(){return this.scan(/^(?:!!!|doctype) *(\w+)?/,"doctype")},id:function(){return this.scan(/^#([\w-]+)/,"id")},className:function(){return this.scan(/^\.([\w-]+)/,"class")},text:function(){return this.scan(/^(?:\| ?)?([^\n]+)/,"text")},include:function(){return this.scan(/^include +([^\n]+)/,"include")},mixin:function(){var captures;if(captures=/^mixin +([-\w]+)(?:\(([^\)]+)\))?/.exec(this.input)){this.consume(captures[0].length);var tok=this.tok("mixin",captures[1]);tok.args=captures[2];return tok}},conditional:function(){var captures;if(captures=/^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)){this.consume(captures[0].length);var type=captures[1],js=captures[2];switch(type){case"if":js="if ("+js+")";break;case"unless":js="if (!("+js+"))";break;case"else if":js="else if ("+js+")";break;case"else":js="else"}return this.tok("code",js)}},each:function(){var captures;if(captures=/^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)){this.consume(captures[0].length);var tok=this.tok("each",captures[1]);tok.key=captures[2]||"index",tok.code=captures[3];return tok}},code:function(){var captures;if(captures=/^(!?=|-)([^\n]+)/.exec(this.input)){this.consume(captures[0].length);var flags=captures[1];captures[1]=captures[2];var tok=this.tok("code",captures[1]);tok.escape=flags[0]==="=",tok.buffer=flags[0]==="="||flags[1]==="=";return tok}},attrs:function(){if("("==this.input[0]){var index=this.indexOfDelimiters("(",")"),str=this.input.substr(1,index-1),tok=this.tok("attrs"),len=str.length,colons=this.colons,states=["key"],key="",val="",quote,c;function state(){return states[states.length-1]}function interpolate(attr){return attr.replace(/#\{([^}]+)\}/g,function(_,expr){return quote+" + ("+expr+") + "+quote})}this.consume(index+1),tok.attrs={};function parse(c){var real=c;colons&&":"==c&&(c="=");switch(c){case",":case"\n":switch(state()){case"expr":case"array":case"string":case"object":val+=c;break;default:states.push("key"),val=val.trim(),key=key.trim();if(""==key)return;tok.attrs[key.replace(/^['"]|['"]$/g,"")]=""==val?!0:interpolate(val),key=val=""}break;case"=":switch(state()){case"key char":key+=real;break;case"val":case"expr":case"array":case"string":case"object":val+=real;break;default:states.push("val")}break;case"(":"val"==state()&&states.push("expr"),val+=c;break;case")":"expr"==state()&&states.pop(),val+=c;break;case"{":"val"==state()&&states.push("object"),val+=c;break;case"}":"object"==state()&&states.pop(),val+=c;break;case"[":"val"==state()&&states.push("array"),val+=c;break;case"]":"array"==state()&&states.pop(),val+=c;break;case'"':case"'":switch(state()){case"key":states.push("key char");break;case"key char":states.pop();break;case"string":c==quote&&states.pop(),val+=c;break;default:states.push("string"),val+=c,quote=c}break;case"":break;default:switch(state()){case"key":case"key char":key+=c;break;default:val+=c}}}for(var i=0;i<len;++i)parse(str[i]);parse(",");return tok}},indent:function(){var captures,re;this.indentRe?captures=this.indentRe.exec(this.input):(re=/^\n(\t*) */,captures=re.exec(this.input),captures&&!captures[1].length&&(re=/^\n( *)/,captures=re.exec(this.input)),captures&&captures[1].length&&(this.indentRe=re));if(captures){var tok,indents=captures[1].length;++this.lineno,this.consume(indents+1);if(" "==this.input[0]||"\t"==this.input[0])throw new Error("Invalid indentation, you can use tabs or spaces but not both");if("\n"==this.input[0])return this.tok("newline");if(this.indentStack.length&&indents<this.indentStack[0]){while(this.indentStack.length&&this.indentStack[0]>indents)this.stash.push(this.tok("outdent")),this.indentStack.shift();tok=this.stash.pop()}else indents&&indents!=this.indentStack[0]?(this.indentStack.unshift(indents),tok=this.tok("indent",indents)):tok=this.tok("newline");return tok}},pipelessText:function(){if(this.pipeless){if("\n"==this.input[0])return;var i=this.input.indexOf("\n");-1==i&&(i=this.input.length);var str=this.input.substr(0,i);this.consume(str.length);return this.tok("text",str)}},colon:function(){return this.scan(/^: */,":")},advance:function(){return this.stashed()||this.next()},next:function(){return this.deferred()||this.eos()||this.pipelessText()||this.doctype()||this.include()||this.mixin()||this.conditional()||this.each()||this.tag()||this.filter()||this.code()||this.id()||this.className()||this.attrs()||this.indent()||this.comment()||this.colon()||this.text()}}}),require.register("nodes/block-comment.js",function(module,exports,require){var Node=require("./node"),BlockComment=module.exports=function BlockComment(val,block,buffer){this.block=block,this.val=val,this.buffer=buffer};BlockComment.prototype=new Node,BlockComment.prototype.constructor=BlockComment}),require.register("nodes/block.js",function(module,exports,require){var Node=require("./node"),Block=module.exports=function Block(node){this.nodes=[],node&&this.push(node)};Block.prototype=new Node,Block.prototype.constructor=Block,Block.prototype.push=function(node){return this.nodes.push(node)},Block.prototype.unshift=function(node){return this.nodes.unshift(node)}}),require.register("nodes/code.js",function(module,exports,require){var Node=require("./node"),Code=module.exports=function Code(val,buffer,escape){this.val=val,this.buffer=buffer,this.escape=escape,/^ *else/.test(val)&&(this.instrumentLineNumber=!1)};Code.prototype=new Node,Code.prototype.constructor=Code}),require.register("nodes/comment.js",function(module,exports,require){var Node=require("./node"),Comment=module.exports=function Comment(val,buffer){this.val=val,this.buffer=buffer};Comment.prototype=new Node,Comment.prototype.constructor=Comment}),require.register("nodes/doctype.js",function(module,exports,require){var Node=require("./node"),Doctype=module.exports=function Doctype(val){this.val=val};Doctype.prototype=new Node,Doctype.prototype.constructor=Doctype}),require.register("nodes/each.js",function(module,exports,require){var Node=require("./node"),Each=module.exports=function Each(obj,val,key,block){this.obj=obj,this.val=val,this.key=key,this.block=block};Each.prototype=new Node,Each.prototype.constructor=Each}),require.register("nodes/filter.js",function(module,exports,require){var Node=require("./node"),Block=require("./block"),Filter=module.exports=function Filter(name,block,attrs){this.name=name,this.block=block,this.attrs=attrs,this.isASTFilter=block instanceof Block};Filter.prototype=new Node,Filter.prototype.constructor=Filter}),require.register("nodes/index.js",function(module,exports,require){exports.Node=require("./node"),exports.Tag=require("./tag"),exports.Code=require("./code"),exports.Each=require("./each"),exports.Text=require("./text"),exports.Block=require("./block"),exports.Mixin=require("./mixin"),exports.Filter=require("./filter"),exports.Comment=require("./comment"),exports.Literal=require("./literal"),exports.BlockComment=require("./block-comment"),exports.Doctype=require("./doctype")}),require.register("nodes/literal.js",function(module,exports,require){var Node=require("./node"),Literal=module.exports=function Literal(str){this.str=str};Literal.prototype=new Node,Literal.prototype.constructor=Literal}),require.register("nodes/mixin.js",function(module,exports,require){var Node=require("./node"),Mixin=module.exports=function Mixin(name,args,block){this.name=name,this.args=args,this.block=block};Mixin.prototype=new Node,Mixin.prototype.constructor=Mixin}),require.register("nodes/node.js",function(module,exports,require){var Node=module.exports=function(){}}),require.register("nodes/tag.js",function(module,exports,require){var Node=require("./node"),Block=require("./block"),Tag=module.exports=function Tag(name,block){this.name=name,this.attrs=[],this.block=block||new Block};Tag.prototype=new Node,Tag.prototype.constructor=Tag,Tag.prototype.setAttribute=function(name,val){this.attrs.push({name:name,val:val});return this},Tag.prototype.removeAttribute=function(name){for(var i=0,len=this.attrs.length;i<len;++i)this.attrs[i]&&this.attrs[i].name==name&&delete this.attrs[i]},Tag.prototype.getAttribute=function(name){for(var i=0,len=this.attrs.length;i<len;++i)if(this.attrs[i]&&this.attrs[i].name==name)return this.attrs[i].val}}),require.register("nodes/text.js",function(module,exports,require){var Node=require("./node"),Text=module.exports=function Text(line){this.nodes=[],"string"==typeof line&&this.push(line)};Text.prototype=new Node,Text.prototype.constructor=Text,Text.prototype.push=function(node){return this.nodes.push(node)}}),require.register("parser.js",function(module,exports,require){var Lexer=require("./lexer"),nodes=require("./nodes"),Parser=exports=module.exports=function Parser(str,filename,options){this.input=str,this.lexer=new Lexer(str,options),this.filename=filename},textOnly=exports.textOnly=["code","script","textarea","style","title"];Parser.prototype={advance:function(){return this.lexer.advance()},skip:function(n){while(n--)this.advance()},peek:function(){return this.lookahead(1)},line:function(){return this.lexer.lineno},lookahead:function(n){return this.lexer.lookahead(n)},parse:function(){var block=new nodes.Block;block.line=this.line();while("eos"!=this.peek().type)"newline"==this.peek().type?this.advance():block.push(this.parseExpr());return block},expect:function(type){if(this.peek().type===type)return this.advance();throw new Error('expected "'+type+'", but got "'+this.peek().type+'"')},accept:function(type){if(this.peek().type===type)return this.advance()},parseExpr:function(){switch(this.peek().type){case"tag":return this.parseTag();case"mixin":return this.parseMixin();case"include":return this.parseInclude();case"doctype":return this.parseDoctype();case"filter":return this.parseFilter();case"comment":return this.parseComment();case"text":return this.parseText();case"each":return this.parseEach();case"code":return this.parseCode();case"id":case"class":var tok=this.advance();this.lexer.defer(this.lexer.tok("tag","div")),this.lexer.defer(tok);return this.parseExpr();default:throw new Error('unexpected token "'+this.peek().type+'"')}},parseText:function(){var tok=this.expect("text"),node=new nodes.Text(tok.val);node.line=this.line();return node},parseCode:function(){var tok=this.expect("code"),node=new nodes.Code(tok.val,tok.buffer,tok.escape),block,i=1;node.line=this.line();while(this.lookahead(i)&&"newline"==this.lookahead(i).type)++i;block="indent"==this.lookahead(i).type,block&&(this.skip(i-1),node.block=this.parseBlock());return node},parseComment:function(){var tok=this.expect("comment"),node;"indent"==this.peek().type?node=new nodes.BlockComment(tok.val,this.parseBlock(),tok.buffer):node=new nodes.Comment(tok.val,tok.buffer),node.line=this.line();return node},parseDoctype:function(){var tok=this.expect("doctype"),node=new nodes.Doctype(tok.val);node.line=this.line();return node},parseFilter:function(){var block,tok=this.expect("filter"),attrs=this.accept("attrs");this.lexer.pipeless=!0,block=this.parseTextBlock(),this.lexer.pipeless=!1;var node=new nodes.Filter(tok.val,block,attrs&&attrs.attrs);node.line=this.line();return node},parseASTFilter:function(){var block,tok=this.expect("tag"),attrs=this.accept("attrs");this.expect(":"),block=this.parseBlock();var node=new nodes.Filter(tok.val,block,attrs&&attrs.attrs);node.line=this.line();return node},parseEach:function(){var tok=this.expect("each"),node=new nodes.Each(tok.code,tok.val,tok.key,this.parseBlock());node.line=this.line();return node},parseInclude:function(){var path=require("path"),fs=require("fs"),dirname=path.dirname,basename=path.basename,join=path.join;if(!this.filename)throw new Error('the "filename" option is required to use includes');var path=name=this.expect("include").val.trim(),dir=dirname(this.filename);if(~basename(path).indexOf(".")){var path=join(dir,path),str=fs.readFileSync(path,"utf8");return new nodes.Literal(str)}var path=join(dir,path+".jade"),str=fs.readFileSync(path,"utf8"),parser=new Parser(str,path),ast=parser.parse();return ast},parseMixin:function(){var tok=this.expect("mixin"),name=tok.val,args=tok.args,block="indent"==this.peek().type?this.parseBlock():null;return new nodes.Mixin(name,args,block)},parseTextBlock:function(){var text=new nodes.Text;text.line=this.line();var spaces=this.expect("indent").val;null==this._spaces&&(this._spaces=spaces);var indent=Array(spaces-this._spaces+1).join(" ");while("outdent"!=this.peek().type)switch(this.peek().type){case"newline":text.push("\\n"),this.advance();break;case"indent":text.push("\\n"),this.parseTextBlock().nodes.forEach(function(node){text.push(node)}),text.push("\\n");break;default:text.push(indent+this.advance().val)}spaces==this._spaces&&(this._spaces=null),this.expect("outdent");return text},parseBlock:function(){var block=new nodes.Block;block.line=this.line(),this.expect("indent");while("outdent"!=this.peek().type)"newline"==this.peek().type?this.advance():block.push(this.parseExpr());this.expect("outdent");return block},parseTag:function(){var i=2;"attrs"==this.lookahead(i).type&&++i;if(":"==this.lookahead(i).type&&"indent"==this.lookahead(++i).type)return this.parseASTFilter();var name=this.advance().val,tag=new nodes.Tag(name),dot;tag.line=this.line();out:for(;;)switch(this.peek().type){case"id":case"class":var tok=this.advance();tag.setAttribute(tok.type,"'"+tok.val+"'");continue;case"attrs":var obj=this.advance().attrs,names=Object.keys(obj);for(var i=0,len=names.length;i<len;++i){var name=names[i],val=obj[name];tag.setAttribute(name,val)}continue;default:break out}"."==this.peek().val&&(dot=tag.textOnly=!0,this.advance());switch(this.peek().type){case"text":tag.text=this.parseText();break;case"code":tag.code=this.parseCode();break;case":":this.advance(),tag.block=new nodes.Block,tag.block.push(this.parseTag())}while("newline"==this.peek().type)this.advance();tag.textOnly=tag.textOnly||~textOnly.indexOf(tag.name);if("script"==tag.name){var type=tag.getAttribute("type");!dot&&type&&"text/javascript"!=type.replace(/^['"]|['"]$/g,"")&&(tag.textOnly=!1)}if("indent"==this.peek().type)if(tag.textOnly)this.lexer.pipeless=!0,tag.block=this.parseTextBlock(),this.lexer.pipeless=!1;else{var block=this.parseBlock();if(tag.block)for(var i=0,len=block.nodes.length;i<len;++i)tag.block.push(block.nodes[i]);else tag.block=block}return tag}}}),require.register("runtime.js",function(module,exports,require){Array.isArray||(Array.isArray=function(arr){return"[object Array]"==toString.call(arr)}),Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(obj);return arr}),exports.attrs=function(obj){var buf=[],terse=obj.terse;delete obj.terse;var keys=Object.keys(obj),len=keys.length;if(len){buf.push("");for(var i=0;i<len;++i){var key=keys[i],val=obj[key];"boolean"==typeof val||null==val?val&&(terse?buf.push(key):buf.push(key+'="'+key+'"')):"class"==key&&Array.isArray(val)?buf.push(key+'="'+exports.escape(val.join(" "))+'"'):buf.push(key+'="'+exports.escape(val)+'"')}}return buf.join(" ")},exports.escape=function(html){return String(html).replace(/&(?!\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},exports.rethrow=function(err,str,filename,lineno){var context=3,lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?"  > ":"    ")+curr+"| "+line}).join("\n");err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message;throw err}}),require.register("self-closing.js",function(module,exports,require){module.exports=["meta","img","link","input","area","base","col","br","hr"]}),require.register("utils.js",function(module,exports,require){var interpolate=exports.interpolate=function(str){return str.replace(/(\\)?([#!]){(.*?)}/g,function(str,escape,flag,code){return escape?str:"' + "+("!"==flag?"":"escape")+"((interp = "+code.replace(/\\'/g,"'")+") == null ? '' : interp) + '"})},escape=exports.escape=function(str){return str.replace(/'/g,"\\'")};exports.text=function(str){return interpolate(escape(str))}})
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/compiler.js b/node/node_modules/jade/lib/compiler.js
deleted file mode 100644 (file)
index 342e1f4..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-
-/*!
- * Jade - Compiler
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var nodes = require('./nodes')
-  , filters = require('./filters')
-  , doctypes = require('./doctypes')
-  , selfClosing = require('./self-closing')
-  , inlineTags = require('./inline-tags')
-  , utils = require('./utils');
-
-// if browser
-// 
-// if (!Object.keys) {
-//   Object.keys = function(obj){
-//     var arr = [];
-//     for (var key in obj) {
-//       if (obj.hasOwnProperty(key)) {
-//         arr.push(obj);
-//       }
-//     }
-//     return arr;
-//   } 
-// }
-// 
-// if (!String.prototype.trimLeft) {
-//   String.prototype.trimLeft = function(){
-//     return this.replace(/^\s+/, '');
-//   }
-// }
-//
-// end
-
-
-/**
- * Initialize `Compiler` with the given `node`.
- *
- * @param {Node} node
- * @param {Object} options
- * @api public
- */
-
-var Compiler = module.exports = function Compiler(node, options) {
-  this.options = options = options || {};
-  this.node = node;
-  this.hasCompiledDoctype = false;
-  this.hasCompiledTag = false;
-  this.pp = options.pretty || false;
-  this.debug = false !== options.compileDebug;
-  this.indents = 0;
-  if (options.doctype) this.setDoctype(options.doctype);
-};
-
-/**
- * Compiler prototype.
- */
-
-Compiler.prototype = {
-  
-  /**
-   * Compile parse tree to JavaScript.
-   *
-   * @api public
-   */
-  
-  compile: function(){
-    this.buf = ['var interp;'];
-    this.lastBufferedIdx = -1
-    this.visit(this.node);
-    return this.buf.join('\n');
-  },
-
-  /**
-   * Sets the default doctype `name`. Sets terse mode to `true` when
-   * html 5 is used, causing self-closing tags to end with ">" vs "/>",
-   * and boolean attributes are not mirrored.
-   *
-   * @param {string} name
-   * @api public
-   */
-  
-  setDoctype: function(name){
-    var doctype = doctypes[(name || 'default').toLowerCase()];
-    if (!doctype) throw new Error('unknown doctype "' + name + '"');
-    this.doctype = doctype;
-    this.terse = '5' == name || 'html' == name;
-    this.xml = 0 == this.doctype.indexOf('<?xml');
-  },
-  
-  /**
-   * Buffer the given `str` optionally escaped.
-   *
-   * @param {String} str
-   * @param {Boolean} esc
-   * @api public
-   */
-  
-  buffer: function(str, esc){
-    if (esc) str = utils.escape(str);
-    
-    if (this.lastBufferedIdx == this.buf.length) {
-      this.lastBuffered += str;
-      this.buf[this.lastBufferedIdx - 1] = "buf.push('" + this.lastBuffered + "');"
-    } else {
-      this.buf.push("buf.push('" + str + "');");
-      this.lastBuffered = str;
-      this.lastBufferedIdx = this.buf.length;
-    }    
-  },
-  
-  /**
-   * Buffer the given `node`'s lineno.
-   *
-   * @param {Node} node
-   * @api public
-   */
-  
-  line: function(node){
-    if (false === node.instrumentLineNumber) return;
-    this.buf.push('__.lineno = ' + node.line + ';');
-  },
-  
-  /**
-   * Visit `node`.
-   *
-   * @param {Node} node
-   * @api public
-   */
-  
-  visit: function(node){
-    if (this.debug) this.line(node);
-    return this.visitNode(node);
-  },
-  
-  /**
-   * Visit `node`.
-   *
-   * @param {Node} node
-   * @api public
-   */
-  
-  visitNode: function(node){
-    var name = node.constructor.name
-      || node.constructor.toString().match(/function ([^(\s]+)()/)[1];
-    return this['visit' + name](node);
-  },
-
-  /**
-   * Visit literal `node`.
-   *
-   * @param {Literal} node
-   * @api public
-   */
-
-  visitLiteral: function(node){
-    var str = node.str.replace(/\n/g, '\\\\n');
-    this.buffer(str);
-  },
-
-  /**
-   * Visit all nodes in `block`.
-   *
-   * @param {Block} block
-   * @api public
-   */
-
-  visitBlock: function(block){
-    var len = block.nodes.length;
-    for (var i = 0; i < len; ++i) {
-      this.visit(block.nodes[i]);
-    }
-  },
-  
-  /**
-   * Visit `doctype`. Sets terse mode to `true` when html 5
-   * is used, causing self-closing tags to end with ">" vs "/>",
-   * and boolean attributes are not mirrored.
-   *
-   * @param {Doctype} doctype
-   * @api public
-   */
-  
-  visitDoctype: function(doctype){
-    if (doctype && (doctype.val || !this.doctype)) {
-      this.setDoctype(doctype.val || 'default');
-    }
-
-    if (this.doctype) this.buffer(this.doctype);
-    this.hasCompiledDoctype = true;
-  },
-
-  /**
-   * Visit `mixin`, generating a function that
-   * may be called within the template.
-   *
-   * @param {Mixin} mixin
-   * @api public
-   */
-
-  visitMixin: function(mixin){
-    var name = mixin.name.replace(/-/g, '_') + '_mixin'
-      , args = mixin.args || '';
-
-    if (mixin.block) {
-      this.buf.push('var ' + name + ' = function(' + args + '){');
-      this.visit(mixin.block);
-      this.buf.push('}');
-    } else {
-      this.buf.push(name + '(' + args + ');');
-    }
-  },
-
-  /**
-   * Visit `tag` buffering tag markup, generating
-   * attributes, visiting the `tag`'s code and block.
-   *
-   * @param {Tag} tag
-   * @api public
-   */
-  
-  visitTag: function(tag){
-    this.indents++;
-    var name = tag.name;
-
-    if (!this.hasCompiledTag) {
-      if (!this.hasCompiledDoctype && 'html' == name) {
-        this.visitDoctype();
-      }
-      this.hasCompiledTag = true;
-    }
-
-    // pretty print
-    if (this.pp && inlineTags.indexOf(name) == -1) {
-      this.buffer('\\n' + Array(this.indents).join('  '));
-    }
-
-    if (~selfClosing.indexOf(name) && !this.xml) {
-      this.buffer('<' + name);
-      this.visitAttributes(tag.attrs);
-      this.terse
-        ? this.buffer('>')
-        : this.buffer('/>');
-    } else {
-      // Optimize attributes buffering
-      if (tag.attrs.length) {
-        this.buffer('<' + name);
-        if (tag.attrs.length) this.visitAttributes(tag.attrs);
-        this.buffer('>');
-      } else {
-        this.buffer('<' + name + '>');
-      }
-      if (tag.code) this.visitCode(tag.code);
-      if (tag.text) this.buffer(utils.text(tag.text.nodes[0].trimLeft()));
-      this.escape = 'pre' == tag.name;
-      this.visit(tag.block);
-
-      // pretty print
-      if (this.pp && !~inlineTags.indexOf(name) && !tag.textOnly) {
-        this.buffer('\\n' + Array(this.indents).join('  '));
-      }
-
-      this.buffer('</' + name + '>');
-    }
-    this.indents--;
-  },
-  
-  /**
-   * Visit `filter`, throwing when the filter does not exist.
-   *
-   * @param {Filter} filter
-   * @api public
-   */
-  
-  visitFilter: function(filter){
-    var fn = filters[filter.name];
-
-    // unknown filter
-    if (!fn) {
-      if (filter.isASTFilter) {
-        throw new Error('unknown ast filter "' + filter.name + ':"');
-      } else {
-        throw new Error('unknown filter ":' + filter.name + '"');
-      }
-    }
-    if (filter.isASTFilter) {
-      this.buf.push(fn(filter.block, this, filter.attrs));
-    } else {
-      var text = filter.block.nodes.join('');
-      this.buffer(utils.text(fn(text, filter.attrs)));
-    }
-  },
-  
-  /**
-   * Visit `text` node.
-   *
-   * @param {Text} text
-   * @api public
-   */
-  
-  visitText: function(text){
-    text = utils.text(text.nodes.join(''));
-    if (this.escape) text = escape(text);
-    this.buffer(text);
-    this.buffer('\\n');
-  },
-  
-  /**
-   * Visit a `comment`, only buffering when the buffer flag is set.
-   *
-   * @param {Comment} comment
-   * @api public
-   */
-  
-  visitComment: function(comment){
-    if (!comment.buffer) return;
-    if (this.pp) this.buffer('\\n' + Array(this.indents + 1).join('  '));
-    this.buffer('<!--' + utils.escape(comment.val) + '-->');
-  },
-  
-  /**
-   * Visit a `BlockComment`.
-   *
-   * @param {Comment} comment
-   * @api public
-   */
-  
-  visitBlockComment: function(comment){
-    if (!comment.buffer) return;
-    if (0 == comment.val.indexOf('if')) {
-      this.buffer('<!--[' + comment.val + ']>');
-      this.visit(comment.block);
-      this.buffer('<![endif]-->');
-    } else {
-      this.buffer('<!--' + comment.val);
-      this.visit(comment.block);
-      this.buffer('-->');
-    }
-  },
-  
-  /**
-   * Visit `code`, respecting buffer / escape flags.
-   * If the code is followed by a block, wrap it in
-   * a self-calling function.
-   *
-   * @param {Code} code
-   * @api public
-   */
-  
-  visitCode: function(code){
-    // Wrap code blocks with {}.
-    // we only wrap unbuffered code blocks ATM
-    // since they are usually flow control
-
-    // Buffer code
-    if (code.buffer) {
-      var val = code.val.trimLeft();
-      this.buf.push('var __val__ = ' + val);
-      val = 'null == __val__ ? "" : __val__';
-      if (code.escape) val = 'escape(' + val + ')';
-      this.buf.push("buf.push(" + val + ");");
-    } else {
-      this.buf.push(code.val);
-    }
-
-    // Block support
-    if (code.block) {
-      if (!code.buffer) this.buf.push('{');
-      this.visit(code.block);
-      if (!code.buffer) this.buf.push('}');
-    }
-  },
-  
-  /**
-   * Visit `each` block.
-   *
-   * @param {Each} each
-   * @api public
-   */
-  
-  visitEach: function(each){
-    this.buf.push(''
-      + '// iterate ' + each.obj + '\n'
-      + '(function(){\n'
-      + '  if (\'number\' == typeof ' + each.obj + '.length) {\n'
-      + '    for (var ' + each.key + ' = 0, $$l = ' + each.obj + '.length; ' + each.key + ' < $$l; ' + each.key + '++) {\n'
-      + '      var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n');
-
-    this.visit(each.block);
-
-    this.buf.push(''
-      + '    }\n'
-      + '  } else {\n'
-      + '    for (var ' + each.key + ' in ' + each.obj + ') {\n'
-      // if browser
-      // + '      if (' + each.obj + '.hasOwnProperty(' + each.key + ')){'
-      // end
-      + '      var ' + each.val + ' = ' + each.obj + '[' + each.key + '];\n');
-
-    this.visit(each.block);
-
-    // if browser
-    // this.buf.push('      }\n');
-    // end
-
-    this.buf.push('   }\n  }\n}).call(this);\n');
-  },
-  
-  /**
-   * Visit `attrs`.
-   *
-   * @param {Array} attrs
-   * @api public
-   */
-  
-  visitAttributes: function(attrs){
-    var buf = []
-      , classes = [];
-
-    if (this.terse) buf.push('terse: true');
-
-    attrs.forEach(function(attr){
-      if (attr.name == 'class') {
-        classes.push('(' + attr.val + ')');
-      } else {
-        var pair = "'" + attr.name + "':(" + attr.val + ')';
-        buf.push(pair);
-      }
-    });
-
-    if (classes.length) {
-      classes = classes.join(" + ' ' + ");
-      buf.push("class: " + classes);
-    }
-
-    buf = buf.join(', ').replace('class:', '"class":');
-
-    this.buf.push("buf.push(attrs({ " + buf + " }));");
-  }
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-function escape(html){
-  return String(html)
-    .replace(/&(?!\w+;)/g, '&amp;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;')
-    .replace(/"/g, '&quot;');
-}
diff --git a/node/node_modules/jade/lib/doctypes.js b/node/node_modules/jade/lib/doctypes.js
deleted file mode 100644 (file)
index b9dc26b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*!
- * Jade - doctypes
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-module.exports = {
-    '5': '<!DOCTYPE html>'
-  , 'html': '<!DOCTYPE html>'
-  , 'xml': '<?xml version="1.0" encoding="utf-8" ?>'
-  , 'default': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
-  , 'transitional': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
-  , 'strict': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
-  , 'frameset': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'
-  , '1.1': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'
-  , 'basic': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">'
-  , 'mobile': '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/filters.js b/node/node_modules/jade/lib/filters.js
deleted file mode 100644 (file)
index a67655c..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-
-/*!
- * Jade - filters
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-module.exports = {
-  
-  /**
-   * Wrap text with CDATA block.
-   */
-  
-  cdata: function(str){
-    return '<![CDATA[\\n' + str + '\\n]]>';
-  },
-  
-  /**
-   * Transform sass to css, wrapped in style tags.
-   */
-  
-  sass: function(str){
-    str = str.replace(/\\n/g, '\n');
-    var sass = require('sass').render(str).replace(/\n/g, '\\n');
-    return '<style>' + sass + '</style>'; 
-  },
-  
-  /**
-   * Transform stylus to css, wrapped in style tags.
-   */
-  
-  stylus: function(str, options){
-    var ret;
-    str = str.replace(/\\n/g, '\n');
-    var stylus = require('stylus');
-    stylus(str, options).render(function(err, css){
-      if (err) throw err;
-      ret = css.replace(/\n/g, '\\n');
-    });
-    return '<style>' + ret + '</style>'; 
-  },
-  
-  /**
-   * Transform sass to css, wrapped in style tags.
-   */
-  
-  less: function(str){
-    var ret;
-    str = str.replace(/\\n/g, '\n');
-    require('less').render(str, function(err, css){
-      if (err) throw err;
-      ret = '<style>' + css.replace(/\n/g, '\\n') + '</style>';  
-    });
-    return ret;
-  },
-  
-  /**
-   * Transform markdown to html.
-   */
-  
-  markdown: function(str){
-    var md;
-
-    // support markdown / discount
-    try {
-      md = require('markdown');
-    } catch (err){
-      try {
-        md = require('discount');
-      } catch (err) {
-        try {
-          md = require('markdown-js');
-        } catch (err) {
-          throw new Error('Cannot find markdown library, install markdown or discount');
-        }
-      }
-    }
-
-    str = str.replace(/\\n/g, '\n');
-    return md.parse(str).replace(/\n/g, '\\n').replace(/'/g,'&#39;');
-  },
-  
-  /**
-   * Transform coffeescript to javascript.
-   */
-
-  coffeescript: function(str){
-    str = str.replace(/\\n/g, '\n');
-    var js = require('coffee-script').compile(str).replace(/\n/g, '\\n');
-    return '<script type="text/javascript">\\n' + js + '</script>';
-  }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/index.js b/node/node_modules/jade/lib/index.js
deleted file mode 120000 (symlink)
index 6a783c2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-jade.js
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/inline-tags.js b/node/node_modules/jade/lib/inline-tags.js
deleted file mode 100644 (file)
index 491de0b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-/*!
- * Jade - inline tags
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-module.exports = [
-    'a'
-  , 'abbr'
-  , 'acronym'
-  , 'b'
-  , 'br'
-  , 'code'
-  , 'em'
-  , 'font'
-  , 'i'
-  , 'img'
-  , 'ins'
-  , 'kbd'
-  , 'map'
-  , 'samp'
-  , 'small'
-  , 'span'
-  , 'strong'
-  , 'sub'
-  , 'sup'
-];
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/jade.js b/node/node_modules/jade/lib/jade.js
deleted file mode 100644 (file)
index b210255..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-
-/*!
- * Jade
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Parser = require('./parser')
-  , Compiler = require('./compiler')
-  , runtime = require('./runtime')
-// if node
-  , fs = require('fs');
-// end
-
-/**
- * Library version.
- */
-
-exports.version = '0.15.4';
-
-/**
- * Intermediate JavaScript cache.
- */
-
-var cache = exports.cache = {};
-
-/**
- * Expose self closing tags.
- */
-
-exports.selfClosing = require('./self-closing');
-
-/**
- * Default supported doctypes.
- */
-
-exports.doctypes = require('./doctypes');
-
-/**
- * Text filters.
- */
-
-exports.filters = require('./filters');
-
-/**
- * Utilities.
- */
-
-exports.utils = require('./utils');
-
-/**
- * Expose `Compiler`.
- */
-
-exports.Compiler = Compiler;
-
-/**
- * Expose `Parser`.
- */
-
-exports.Parser = Parser;
-
-/**
- * Nodes.
- */
-
-exports.nodes = require('./nodes');
-
-/**
- * Jade runtime helpers.
- */
-
-exports.runtime = runtime;
-
-/**
- * Parse the given `str` of jade and return a function body.
- *
- * @param {String} str
- * @param {Object} options
- * @return {String}
- * @api private
- */
-
-function parse(str, options){
-  var filename = options.filename;
-  
-  try {
-    // Parse
-    var parser = new Parser(str, filename, options);
-
-    // Compile
-    var compiler = new (options.compiler || Compiler)(parser.parse(), options)
-      , js = compiler.compile();
-
-    // Debug compiler
-    if (options.debug) {
-      console.log('\n\x1b[1mCompiled Function\x1b[0m:\n\n%s', js.replace(/^/gm, '  '));
-    }
-
-    try {
-      return ''
-        + 'var buf = [];\n'
-        + (options.self
-          ? 'var self = locals || {};\n' + js
-          : 'with (locals || {}) {\n' + js + '\n}\n')
-        + 'return buf.join("");';
-      
-    } catch (err) {
-      process.compile(js, filename || 'Jade');
-      return;
-    }
-  } catch (err) {
-    runtime.rethrow(err, str, filename, parser.lexer.lineno);
-  }
-}
-
-/**
- * Compile a `Function` representation of the given jade `str`.
- *
- * Options:
- * 
- *   - `compileDebug` when `false` debugging code is stripped from the compiled template
- *   - `client` when `true` the helper functions `escape()` etc will reference `jade.escape()`
- *      for use with the Jade client-side runtime.js
- *
- * @param {String} str
- * @param {Options} options
- * @return {Function}
- * @api public
- */
-
-exports.compile = function(str, options){
-  var options = options || {}
-    , input = JSON.stringify(str)
-    , client = options.client
-    , filename = options.filename
-      ? JSON.stringify(options.filename)
-      : 'undefined'
-    , fn;
-
-  if (options.compileDebug !== false) {
-    fn = [
-        'var __ = { lineno: 1, input: ' + input + ', filename: ' + filename + ' };'
-      , 'try {'
-      , parse(String(str), options || {})
-      , '} catch (err) {'
-      , '  rethrow(err, __.input, __.filename, __.lineno);'
-      , '}'
-    ].join('\n');
-  } else {
-    fn = parse(String(str), options || {});
-  }
-
-  if (client) {
-    fn = 'var attrs = jade.attrs, escape = jade.escape, rethrow = jade.rethrow;\n' + fn;
-  }
-
-  fn = new Function('locals, attrs, escape, rethrow', fn);
-
-  if (client) return fn;
-
-  return function(locals){
-    return fn(locals, runtime.attrs, runtime.escape, runtime.rethrow);
-  };
-};
diff --git a/node/node_modules/jade/lib/lexer.js b/node/node_modules/jade/lib/lexer.js
deleted file mode 100644 (file)
index fb4d7c3..0000000
+++ /dev/null
@@ -1,581 +0,0 @@
-
-/*!
- * Jade - Lexer
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Initialize `Lexer` with the given `str`.
- *
- * Options:
- *
- *   - `colons` allow colons for attr delimiters
- *
- * @param {String} str
- * @param {Object} options
- * @api private
- */
-
-var Lexer = module.exports = function Lexer(str, options) {
-  options = options || {};
-  this.input = str.replace(/\r\n|\r/g, '\n');
-  this.colons = options.colons;
-  this.deferredTokens = [];
-  this.lastIndents = 0;
-  this.lineno = 1;
-  this.stash = [];
-  this.indentStack = [];
-  this.indentRe = null;
-  this.pipeless = false;
-};
-
-/**
- * Lexer prototype.
- */
-
-Lexer.prototype = {
-  
-  /**
-   * Construct a token with the given `type` and `val`.
-   *
-   * @param {String} type
-   * @param {String} val
-   * @return {Object}
-   * @api private
-   */
-  
-  tok: function(type, val){
-    return {
-        type: type
-      , line: this.lineno
-      , val: val
-    }
-  },
-  
-  /**
-   * Consume the given `len` of input.
-   *
-   * @param {Number} len
-   * @api private
-   */
-  
-  consume: function(len){
-    this.input = this.input.substr(len);
-  },
-  
-  /**
-   * Scan for `type` with the given `regexp`.
-   *
-   * @param {String} type
-   * @param {RegExp} regexp
-   * @return {Object}
-   * @api private
-   */
-  
-  scan: function(regexp, type){
-    var captures;
-    if (captures = regexp.exec(this.input)) {
-      this.consume(captures[0].length);
-      return this.tok(type, captures[1]);
-    }
-  },
-  
-  /**
-   * Defer the given `tok`.
-   *
-   * @param {Object} tok
-   * @api private
-   */
-  
-  defer: function(tok){
-    this.deferredTokens.push(tok);
-  },
-  
-  /**
-   * Lookahead `n` tokens.
-   *
-   * @param {Number} n
-   * @return {Object}
-   * @api private
-   */
-  
-  lookahead: function(n){
-    var fetch = n - this.stash.length;
-    while (fetch-- > 0) this.stash.push(this.next());
-    return this.stash[--n];
-  },
-  
-  /**
-   * Return the indexOf `start` / `end` delimiters.
-   *
-   * @param {String} start
-   * @param {String} end
-   * @return {Number}
-   * @api private
-   */
-  
-  indexOfDelimiters: function(start, end){
-    var str = this.input
-      , nstart = 0
-      , nend = 0
-      , pos = 0;
-    for (var i = 0, len = str.length; i < len; ++i) {
-      if (start == str[i]) {
-        ++nstart;
-      } else if (end == str[i]) {
-        if (++nend == nstart) {
-          pos = i;
-          break;
-        }
-      }
-    }
-    return pos;
-  },
-  
-  /**
-   * Stashed token.
-   */
-  
-  stashed: function() {
-    return this.stash.length
-      && this.stash.shift();
-  },
-  
-  /**
-   * Deferred token.
-   */
-  
-  deferred: function() {
-    return this.deferredTokens.length 
-      && this.deferredTokens.shift();
-  },
-  
-  /**
-   * end-of-source.
-   */
-  
-  eos: function() {
-    if (this.input.length) return;
-    if (this.indentStack.length) {
-      this.indentStack.shift();
-      return this.tok('outdent');
-    } else {
-      return this.tok('eos');
-    }
-  },
-
-  /**
-   * Comment.
-   */
-  
-  comment: function() {
-    var captures;
-    if (captures = /^ *\/\/(-)?([^\n]*)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var tok = this.tok('comment', captures[2]);
-      tok.buffer = '-' != captures[1];
-      return tok;
-    }
-  },
-  
-  /**
-   * Tag.
-   */
-  
-  tag: function() {
-    var captures;
-    if (captures = /^(\w[-:\w]*)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var tok, name = captures[1];
-      if (':' == name[name.length - 1]) {
-        name = name.slice(0, -1);
-        tok = this.tok('tag', name);
-        this.deferredTokens.push(this.tok(':'));
-        while (' ' == this.input[0]) this.input = this.input.substr(1);
-      } else {
-        tok = this.tok('tag', name);
-      }
-      return tok;
-    }
-  },
-  
-  /**
-   * Filter.
-   */
-  
-  filter: function() {
-    return this.scan(/^:(\w+)/, 'filter');
-  },
-  
-  /**
-   * Doctype.
-   */
-  
-  doctype: function() {
-    return this.scan(/^(?:!!!|doctype) *(\w+)?/, 'doctype');
-  },
-
-  /**
-   * Id.
-   */
-  
-  id: function() {
-    return this.scan(/^#([\w-]+)/, 'id');
-  },
-  
-  /**
-   * Class.
-   */
-  
-  className: function() {
-    return this.scan(/^\.([\w-]+)/, 'class');
-  },
-  
-  /**
-   * Text.
-   */
-  
-  text: function() {
-    return this.scan(/^(?:\| ?)?([^\n]+)/, 'text');
-  },
-
-  /**
-   * Include.
-   */
-  
-  include: function() {
-    return this.scan(/^include +([^\n]+)/, 'include');
-  },
-
-  /**
-   * Mixin.
-   */
-
-  mixin: function(){
-    var captures;
-    if (captures = /^mixin +([-\w]+)(?:\(([^\)]+)\))?/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var tok = this.tok('mixin', captures[1]);
-      tok.args = captures[2];
-      return tok;
-    }
-  },
-
-  /**
-   * Conditional.
-   */
-  
-  conditional: function() {
-    var captures;
-    if (captures = /^(if|unless|else if|else)\b([^\n]*)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var type = captures[1]
-        , js = captures[2];
-
-      switch (type) {
-        case 'if': js = 'if (' + js + ')'; break;
-        case 'unless': js = 'if (!(' + js + '))'; break;
-        case 'else if': js = 'else if (' + js + ')'; break;
-        case 'else': js = 'else'; break;
-      }
-
-      return this.tok('code', js);
-    }
-  },
-
-  /**
-   * Each.
-   */
-  
-  each: function() {
-    var captures;
-    if (captures = /^(?:- *)?(?:each|for) +(\w+)(?: *, *(\w+))? * in *([^\n]+)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var tok = this.tok('each', captures[1]);
-      tok.key = captures[2] || 'index';
-      tok.code = captures[3];
-      return tok;
-    }
-  },
-  
-  /**
-   * Code.
-   */
-  
-  code: function() {
-    var captures;
-    if (captures = /^(!?=|-)([^\n]+)/.exec(this.input)) {
-      this.consume(captures[0].length);
-      var flags = captures[1];
-      captures[1] = captures[2];
-      var tok = this.tok('code', captures[1]);
-      tok.escape = flags[0] === '=';
-      tok.buffer = flags[0] === '=' || flags[1] === '=';
-      return tok;
-    }
-  },
-  
-  /**
-   * Attributes.
-   */
-  
-  attrs: function() {
-    if ('(' == this.input[0]) {
-      var index = this.indexOfDelimiters('(', ')')
-        , str = this.input.substr(1, index-1)
-        , tok = this.tok('attrs')
-        , len = str.length
-        , colons = this.colons
-        , states = ['key']
-        , key = ''
-        , val = ''
-        , quote
-        , c;
-
-      function state(){
-        return states[states.length - 1];
-      }
-
-      function interpolate(attr) {
-        return attr.replace(/#\{([^}]+)\}/g, function(_, expr){
-          return quote + " + (" + expr + ") + " + quote;
-        });
-      }
-
-      this.consume(index + 1);
-      tok.attrs = {};
-
-      function parse(c) {
-        var real = c;
-        // TODO: remove when people fix ":"
-        if (colons && ':' == c) c = '=';
-        switch (c) {
-          case ',':
-          case '\n':
-            switch (state()) {
-              case 'expr':
-              case 'array':
-              case 'string':
-              case 'object':
-                val += c;
-                break;
-              default:
-                states.push('key');
-                val = val.trim();
-                key = key.trim();
-                if ('' == key) return;
-                tok.attrs[key.replace(/^['"]|['"]$/g, '')] = '' == val
-                  ? true
-                  : interpolate(val);
-                key = val = '';
-            }
-            break;
-          case '=':
-            switch (state()) {
-              case 'key char':
-                key += real;
-                break;
-              case 'val':
-              case 'expr':
-              case 'array':
-              case 'string':
-              case 'object':
-                val += real;
-                break;
-              default:
-                states.push('val');
-            }
-            break;
-          case '(':
-            if ('val' == state()) states.push('expr');
-            val += c;
-            break;
-          case ')':
-            if ('expr' == state()) states.pop();
-            val += c;
-            break;
-          case '{':
-            if ('val' == state()) states.push('object');
-            val += c;
-            break;
-          case '}':
-            if ('object' == state()) states.pop();
-            val += c;
-            break;
-          case '[':
-            if ('val' == state()) states.push('array');
-            val += c;
-            break;
-          case ']':
-            if ('array' == state()) states.pop();
-            val += c;
-            break;
-          case '"':
-          case "'":
-            switch (state()) {
-              case 'key':
-                states.push('key char');
-                break;
-              case 'key char':
-                states.pop();
-                break;
-              case 'string':
-                if (c == quote) states.pop();
-                val += c;
-                break;
-              default:
-                states.push('string');
-                val += c;
-                quote = c;
-            }
-            break;
-          case '':
-            break;
-          default:
-            switch (state()) {
-              case 'key':
-              case 'key char':
-                key += c;
-                break;
-              default:
-                val += c;
-            }
-        }
-      }
-
-      for (var i = 0; i < len; ++i) {
-        parse(str[i]);
-      }
-
-      parse(',');
-
-      return tok;
-    }
-  },
-  
-  /**
-   * Indent | Outdent | Newline.
-   */
-  
-  indent: function() {
-    var captures, re;
-
-    // established regexp
-    if (this.indentRe) {
-      captures = this.indentRe.exec(this.input);
-    // determine regexp
-    } else {
-      // tabs
-      re = /^\n(\t*) */;
-      captures = re.exec(this.input);
-
-      // spaces
-      if (captures && !captures[1].length) {
-        re = /^\n( *)/;
-        captures = re.exec(this.input);
-      }
-
-      // established
-      if (captures && captures[1].length) this.indentRe = re;
-    }
-
-    if (captures) {
-      var tok
-        , indents = captures[1].length;
-
-      ++this.lineno;
-      this.consume(indents + 1);
-
-      if (' ' == this.input[0] || '\t' == this.input[0]) {
-        throw new Error('Invalid indentation, you can use tabs or spaces but not both');
-      }
-
-      // blank line
-      if ('\n' == this.input[0]) return this.tok('newline');
-
-      // outdent
-      if (this.indentStack.length && indents < this.indentStack[0]) {
-        while (this.indentStack.length && this.indentStack[0] > indents) {
-          this.stash.push(this.tok('outdent'));
-          this.indentStack.shift();
-        }
-        tok = this.stash.pop();
-      // indent
-      } else if (indents && indents != this.indentStack[0]) {
-        this.indentStack.unshift(indents);
-        tok = this.tok('indent', indents);
-      // newline
-      } else {
-        tok = this.tok('newline');
-      }
-
-      return tok;
-    }
-  },
-
-  /**
-   * Pipe-less text consumed only when 
-   * pipeless is true;
-   */
-
-  pipelessText: function() {
-    if (this.pipeless) {
-      if ('\n' == this.input[0]) return;
-      var i = this.input.indexOf('\n');
-      if (-1 == i) i = this.input.length;
-      var str = this.input.substr(0, i);
-      this.consume(str.length);
-      return this.tok('text', str);
-    }
-  },
-
-  /**
-   * ':'
-   */
-
-  colon: function() {
-    return this.scan(/^: */, ':');
-  },
-
-  /**
-   * Return the next token object, or those
-   * previously stashed by lookahead.
-   *
-   * @return {Object}
-   * @api private
-   */
-  
-  advance: function(){
-    return this.stashed()
-      || this.next();
-  },
-  
-  /**
-   * Return the next token object.
-   *
-   * @return {Object}
-   * @api private
-   */
-  
-  next: function() {
-    return this.deferred()
-      || this.eos()
-      || this.pipelessText()
-      || this.doctype()
-      || this.include()
-      || this.mixin()
-      || this.conditional()
-      || this.each()
-      || this.tag()
-      || this.filter()
-      || this.code()
-      || this.id()
-      || this.className()
-      || this.attrs()
-      || this.indent()
-      || this.comment()
-      || this.colon()
-      || this.text();
-  }
-};
diff --git a/node/node_modules/jade/lib/nodes/block-comment.js b/node/node_modules/jade/lib/nodes/block-comment.js
deleted file mode 100644 (file)
index 4f41e4a..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/*!
- * Jade - nodes - BlockComment
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `BlockComment` with the given `block`.
- *
- * @param {String} val
- * @param {Block} block
- * @param {Boolean} buffer
- * @api public
- */
-
-var BlockComment = module.exports = function BlockComment(val, block, buffer) {
-  this.block = block;
-  this.val = val;
-  this.buffer = buffer;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-BlockComment.prototype.__proto__ = Node.prototype;
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/nodes/block.js b/node/node_modules/jade/lib/nodes/block.js
deleted file mode 100644 (file)
index dc62c24..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*!
- * Jade - nodes - Block
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Block` with an optional `node`.
- *
- * @param {Node} node
- * @api public
- */
-
-var Block = module.exports = function Block(node){
-  this.nodes = [];
-  if (node) this.push(node);
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Block.prototype.__proto__ = Node.prototype;
-
-/**
- * Pust the given `node`.
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Block.prototype.push = function(node){
-  return this.nodes.push(node);
-};
-
-/**
- * Unshift the given `node`.
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Block.prototype.unshift = function(node){
-  return this.nodes.unshift(node);
-};
diff --git a/node/node_modules/jade/lib/nodes/code.js b/node/node_modules/jade/lib/nodes/code.js
deleted file mode 100644 (file)
index f3d7308..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-/*!
- * Jade - nodes - Code
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Code` node with the given code `val`.
- * Code may also be optionally buffered and escaped.
- *
- * @param {String} val
- * @param {Boolean} buffer
- * @param {Boolean} escape
- * @api public
- */
-
-var Code = module.exports = function Code(val, buffer, escape) {
-  this.val = val;
-  this.buffer = buffer;
-  this.escape = escape;
-  if (/^ *else/.test(val)) this.instrumentLineNumber = false;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Code.prototype.__proto__ = Node.prototype;
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/nodes/comment.js b/node/node_modules/jade/lib/nodes/comment.js
deleted file mode 100644 (file)
index 2e1469e..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-
-/*!
- * Jade - nodes - Comment
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Comment` with the given `val`, optionally `buffer`,
- * otherwise the comment may render in the output.
- *
- * @param {String} val
- * @param {Boolean} buffer
- * @api public
- */
-
-var Comment = module.exports = function Comment(val, buffer) {
-  this.val = val;
-  this.buffer = buffer;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Comment.prototype.__proto__ = Node.prototype;
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/nodes/doctype.js b/node/node_modules/jade/lib/nodes/doctype.js
deleted file mode 100644 (file)
index b8f33e5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-/*!
- * Jade - nodes - Doctype
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Doctype` with the given `val`. 
- *
- * @param {String} val
- * @api public
- */
-
-var Doctype = module.exports = function Doctype(val) {
-  this.val = val;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Doctype.prototype.__proto__ = Node.prototype;
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/nodes/each.js b/node/node_modules/jade/lib/nodes/each.js
deleted file mode 100644 (file)
index f54101f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-/*!
- * Jade - nodes - Each
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize an `Each` node, representing iteration
- *
- * @param {String} obj
- * @param {String} val
- * @param {String} key
- * @param {Block} block
- * @api public
- */
-
-var Each = module.exports = function Each(obj, val, key, block) {
-  this.obj = obj;
-  this.val = val;
-  this.key = key;
-  this.block = block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Each.prototype.__proto__ = Node.prototype;
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/nodes/filter.js b/node/node_modules/jade/lib/nodes/filter.js
deleted file mode 100644 (file)
index 5a0a237..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-/*!
- * Jade - nodes - Filter
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , Block = require('./block');
-
-/**
- * Initialize a `Filter` node with the given 
- * filter `name` and `block`.
- *
- * @param {String} name
- * @param {Block|Node} block
- * @api public
- */
-
-var Filter = module.exports = function Filter(name, block, attrs) {
-  this.name = name;
-  this.block = block;
-  this.attrs = attrs;
-  this.isASTFilter = block instanceof Block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Filter.prototype.__proto__ = Node.prototype;
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/nodes/index.js b/node/node_modules/jade/lib/nodes/index.js
deleted file mode 100644 (file)
index 869d01a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*!
- * Jade - nodes
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-exports.Node = require('./node');
-exports.Tag = require('./tag');
-exports.Code = require('./code');
-exports.Each = require('./each');
-exports.Text = require('./text');
-exports.Block = require('./block');
-exports.Mixin = require('./mixin');
-exports.Filter = require('./filter');
-exports.Comment = require('./comment');
-exports.Literal = require('./literal');
-exports.BlockComment = require('./block-comment');
-exports.Doctype = require('./doctype');
diff --git a/node/node_modules/jade/lib/nodes/literal.js b/node/node_modules/jade/lib/nodes/literal.js
deleted file mode 100644 (file)
index a8a02a2..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-/*!
- * Jade - nodes - Literal
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Literal` node with the given `str.
- *
- * @param {String} str
- * @api public
- */
-
-var Literal = module.exports = function Literal(str) {
-  this.str = str;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Literal.prototype.__proto__ = Node.prototype;
diff --git a/node/node_modules/jade/lib/nodes/mixin.js b/node/node_modules/jade/lib/nodes/mixin.js
deleted file mode 100644 (file)
index f007c84..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-/*!
- * Jade - nodes - Mixin
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Mixin` with `name` and `block`.
- *
- * @param {String} name
- * @param {String} args
- * @param {Block} block
- * @api public
- */
-
-var Mixin = module.exports = function Mixin(name, args, block){
-  this.name = name;
-  this.args = args;
-  this.block = block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Mixin.prototype.__proto__ = Node.prototype;
-
diff --git a/node/node_modules/jade/lib/nodes/node.js b/node/node_modules/jade/lib/nodes/node.js
deleted file mode 100644 (file)
index 0669e67..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-/*!
- * Jade - nodes - Node
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Initialize a `Node`.
- *
- * @api public
- */
-
-var Node = module.exports = function Node(){};
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/nodes/tag.js b/node/node_modules/jade/lib/nodes/tag.js
deleted file mode 100644 (file)
index 35993c9..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-
-/*!
- * Jade - nodes - Tag
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node'),
-    Block = require('./block');
-
-/**
- * Initialize a `Tag` node with the given tag `name` and optional `block`.
- *
- * @param {String} name
- * @param {Block} block
- * @api public
- */
-
-var Tag = module.exports = function Tag(name, block) {
-  this.name = name;
-  this.attrs = [];
-  this.block = block || new Block;
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Tag.prototype.__proto__ = Node.prototype;
-
-/**
- * Set attribute `name` to `val`, keep in mind these become
- * part of a raw js object literal, so to quote a value you must
- * '"quote me"', otherwise or example 'user.name' is literal JavaScript.
- *
- * @param {String} name
- * @param {String} val
- * @return {Tag} for chaining
- * @api public
- */
-
-Tag.prototype.setAttribute = function(name, val){
-  this.attrs.push({ name: name, val: val });
-  return this;
-};
-
-/**
- * Remove attribute `name` when present.
- *
- * @param {String} name
- * @api public
- */
-
-Tag.prototype.removeAttribute = function(name){
-  for (var i = 0, len = this.attrs.length; i < len; ++i) {
-    if (this.attrs[i] && this.attrs[i].name == name) {
-      delete this.attrs[i];
-    }
-  }
-};
-
-/**
- * Get attribute value by `name`.
- *
- * @param {String} name
- * @return {String}
- * @api public
- */
-
-Tag.prototype.getAttribute = function(name){
-  for (var i = 0, len = this.attrs.length; i < len; ++i) {
-    if (this.attrs[i] && this.attrs[i].name == name) {
-      return this.attrs[i].val;
-    }
-  }
-};
diff --git a/node/node_modules/jade/lib/nodes/text.js b/node/node_modules/jade/lib/nodes/text.js
deleted file mode 100644 (file)
index 3baff4b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*!
- * Jade - nodes - Text
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a `Text` node with optional `line`.
- *
- * @param {String} line
- * @api public
- */
-
-var Text = module.exports = function Text(line) {
-  this.nodes = [];
-  if ('string' == typeof line) this.push(line);
-};
-
-/**
- * Inherit from `Node`.
- */
-
-Text.prototype.__proto__ = Node.prototype;
-
-/**
- * Push the given `node.`
- *
- * @param {Node} node
- * @return {Number}
- * @api public
- */
-
-Text.prototype.push = function(node){
-  return this.nodes.push(node);
-};
diff --git a/node/node_modules/jade/lib/parser.js b/node/node_modules/jade/lib/parser.js
deleted file mode 100644 (file)
index 25f1601..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-
-/*!
- * Jade - Parser
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Lexer = require('./lexer')
-  , nodes = require('./nodes');
-
-/**
- * Initialize `Parser` with the given input `str` and `filename`.
- *
- * @param {String} str
- * @param {String} filename
- * @param {Object} options
- * @api public
- */
-
-var Parser = exports = module.exports = function Parser(str, filename, options){
-  this.input = str;
-  this.lexer = new Lexer(str, options);
-  this.filename = filename;
-};
-
-/**
- * Tags that may not contain tags.
- */
-
-var textOnly = exports.textOnly = ['code', 'script', 'textarea', 'style', 'title'];
-
-/**
- * Parser prototype.
- */
-
-Parser.prototype = {
-  
-  /**
-   * Return the next token object.
-   *
-   * @return {Object}
-   * @api private
-   */
-
-  advance: function(){
-    return this.lexer.advance();
-  },
-
-  /**
-   * Skip `n` tokens.
-   *
-   * @param {Number} n
-   * @api private
-   */
-
-  skip: function(n){
-    while (n--) this.advance();
-  },
-  
-  /**
-   * Single token lookahead.
-   *
-   * @return {Object}
-   * @api private
-   */
-  
-  peek: function() {
-    return this.lookahead(1);
-  },
-  
-  /**
-   * Return lexer lineno.
-   *
-   * @return {Number}
-   * @api private
-   */
-  
-  line: function() {
-    return this.lexer.lineno;
-  },
-  
-  /**
-   * `n` token lookahead.
-   *
-   * @param {Number} n
-   * @return {Object}
-   * @api private
-   */
-  
-  lookahead: function(n){
-    return this.lexer.lookahead(n);
-  },
-  
-  /**
-   * Parse input returning a string of js for evaluation.
-   *
-   * @return {String}
-   * @api public
-   */
-  
-  parse: function(){
-    var block = new nodes.Block;
-    block.line = this.line();
-    while ('eos' != this.peek().type) {
-      if ('newline' == this.peek().type) {
-        this.advance();
-      } else {
-        block.push(this.parseExpr());
-      }
-    }
-    return block;
-  },
-  
-  /**
-   * Expect the given type, or throw an exception.
-   *
-   * @param {String} type
-   * @api private
-   */
-  
-  expect: function(type){
-    if (this.peek().type === type) {
-      return this.advance();
-    } else {
-      throw new Error('expected "' + type + '", but got "' + this.peek().type + '"');
-    }
-  },
-  
-  /**
-   * Accept the given `type`.
-   *
-   * @param {String} type
-   * @api private
-   */
-  
-  accept: function(type){
-    if (this.peek().type === type) {
-      return this.advance();
-    }
-  },
-  
-  /**
-   *   tag
-   * | doctype
-   * | mixin
-   * | include
-   * | filter
-   * | comment
-   * | text
-   * | each
-   * | code
-   * | id
-   * | class
-   */
-  
-  parseExpr: function(){
-    switch (this.peek().type) {
-      case 'tag':
-        return this.parseTag();
-      case 'mixin':
-        return this.parseMixin();
-      case 'include':
-        return this.parseInclude();
-      case 'doctype':
-        return this.parseDoctype();
-      case 'filter':
-        return this.parseFilter();
-      case 'comment':
-        return this.parseComment();
-      case 'text':
-        return this.parseText();
-      case 'each':
-        return this.parseEach();
-      case 'code':
-        return this.parseCode();
-      case 'id':
-      case 'class':
-        var tok = this.advance();
-        this.lexer.defer(this.lexer.tok('tag', 'div'));
-        this.lexer.defer(tok);
-        return this.parseExpr();
-      default:
-        throw new Error('unexpected token "' + this.peek().type + '"');
-    }
-  },
-  
-  /**
-   * Text
-   */
-  
-  parseText: function(){
-    var tok = this.expect('text')
-      , node = new nodes.Text(tok.val);
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * code
-   */
-  
-  parseCode: function(){
-    var tok = this.expect('code')
-      , node = new nodes.Code(tok.val, tok.buffer, tok.escape)
-      , block
-      , i = 1;
-    node.line = this.line();
-    while (this.lookahead(i) && 'newline' == this.lookahead(i).type) ++i;
-    block = 'indent' == this.lookahead(i).type;
-    if (block) {
-      this.skip(i-1);
-      node.block = this.parseBlock();
-    }
-    return node;
-  },
-  
-  /**
-   * comment
-   */
-  
-  parseComment: function(){
-    var tok = this.expect('comment')
-      , node;
-
-    if ('indent' == this.peek().type) {
-      node = new nodes.BlockComment(tok.val, this.parseBlock(), tok.buffer);
-    } else {
-      node = new nodes.Comment(tok.val, tok.buffer);
-    }
-
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * doctype
-   */
-  
-  parseDoctype: function(){
-    var tok = this.expect('doctype')
-      , node = new nodes.Doctype(tok.val);
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * filter attrs? text-block
-   */
-  
-  parseFilter: function(){
-    var block
-      , tok = this.expect('filter')
-      , attrs = this.accept('attrs');
-
-    this.lexer.pipeless = true;
-    block = this.parseTextBlock();
-    this.lexer.pipeless = false;
-
-    var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs);
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * tag ':' attrs? block
-   */
-  
-  parseASTFilter: function(){
-    var block
-      , tok = this.expect('tag')
-      , attrs = this.accept('attrs');
-
-    this.expect(':');
-    block = this.parseBlock();
-
-    var node = new nodes.Filter(tok.val, block, attrs && attrs.attrs);
-    node.line = this.line();
-    return node;
-  },
-  
-  /**
-   * each block
-   */
-  
-  parseEach: function(){
-    var tok = this.expect('each')
-      , node = new nodes.Each(tok.code, tok.val, tok.key, this.parseBlock());
-    node.line = this.line();
-    return node;
-  },
-
-  /**
-   * include
-   */
-
-  parseInclude: function(){
-    var path = require('path')
-      , fs = require('fs')
-      , dirname = path.dirname
-      , basename = path.basename
-      , join = path.join;
-
-    if (!this.filename)
-      throw new Error('the "filename" option is required to use includes');
-
-    var path = name = this.expect('include').val.trim()
-      , dir = dirname(this.filename);
-
-    // non-jade
-    if (~basename(path).indexOf('.')) {
-      var path = join(dir, path)
-        , str = fs.readFileSync(path, 'utf8');
-      return new nodes.Literal(str);
-    }
-
-    var path = join(dir, path + '.jade')
-      , str = fs.readFileSync(path, 'utf8')
-      , parser = new Parser(str, path)
-      , ast = parser.parse();
-
-    return ast;
-  },
-
-  /**
-   * mixin block
-   */
-
-  parseMixin: function(){
-    var tok = this.expect('mixin')
-      , name = tok.val
-      , args = tok.args;
-    var block = 'indent' == this.peek().type
-      ? this.parseBlock()
-      : null;
-    return new nodes.Mixin(name, args, block);
-  },
-
-  /**
-   * indent (text | newline)* outdent
-   */
-
-  parseTextBlock: function(){
-    var text = new nodes.Text;
-    text.line = this.line();
-    var spaces = this.expect('indent').val;
-    if (null == this._spaces) this._spaces = spaces;
-    var indent = Array(spaces - this._spaces + 1).join(' ');
-    while ('outdent' != this.peek().type) {
-      switch (this.peek().type) {
-        case 'newline':
-          text.push('\\n');
-          this.advance();
-          break;
-        case 'indent':
-          text.push('\\n');
-          this.parseTextBlock().nodes.forEach(function(node){
-            text.push(node);
-          });
-          text.push('\\n');
-          break;
-        default:
-          text.push(indent + this.advance().val);
-      }
-    }
-
-    if (spaces == this._spaces) this._spaces = null;
-    this.expect('outdent');
-    return text;
-  },
-
-  /**
-   * indent expr* outdent
-   */
-  
-  parseBlock: function(){
-    var block = new nodes.Block;
-    block.line = this.line();
-    this.expect('indent');
-    while ('outdent' != this.peek().type) {
-      if ('newline' == this.peek().type) {
-        this.advance();
-      } else {
-        block.push(this.parseExpr());
-      }
-    }
-    this.expect('outdent');
-    return block;
-  },
-
-  /**
-   * tag (attrs | class | id)* (text | code | ':')? newline* block?
-   */
-  
-  parseTag: function(){
-    // ast-filter look-ahead
-    var i = 2;
-    if ('attrs' == this.lookahead(i).type) ++i;
-    if (':' == this.lookahead(i).type) {
-      if ('indent' == this.lookahead(++i).type) {
-        return this.parseASTFilter();
-      }
-    }
-
-    var name = this.advance().val
-      , tag = new nodes.Tag(name)
-      , dot;
-
-    tag.line = this.line();
-
-    // (attrs | class | id)*
-    out:
-      while (true) {
-        switch (this.peek().type) {
-          case 'id':
-          case 'class':
-            var tok = this.advance();
-            tag.setAttribute(tok.type, "'" + tok.val + "'");
-            continue;
-          case 'attrs':
-            var obj = this.advance().attrs
-              , names = Object.keys(obj);
-            for (var i = 0, len = names.length; i < len; ++i) {
-              var name = names[i]
-                , val = obj[name];
-              tag.setAttribute(name, val);
-            }
-            continue;
-          default:
-            break out;
-        }
-      }
-
-    // check immediate '.'
-    if ('.' == this.peek().val) {
-      dot = tag.textOnly = true;
-      this.advance();
-    }
-
-    // (text | code | ':')?
-    switch (this.peek().type) {
-      case 'text':
-        tag.text = this.parseText();
-        break;
-      case 'code':
-        tag.code = this.parseCode();
-        break;
-      case ':':
-        this.advance();
-        tag.block = new nodes.Block;
-        tag.block.push(this.parseTag());
-        break;
-    }
-
-    // newline*
-    while ('newline' == this.peek().type) this.advance();
-
-    tag.textOnly = tag.textOnly || ~textOnly.indexOf(tag.name);
-
-    // script special-case
-    if ('script' == tag.name) {
-      var type = tag.getAttribute('type');
-      if (!dot && type && 'text/javascript' != type.replace(/^['"]|['"]$/g, '')) {
-        tag.textOnly = false;
-      }
-    }
-
-    // block?
-    if ('indent' == this.peek().type) {
-      if (tag.textOnly) {
-        this.lexer.pipeless = true;
-        tag.block = this.parseTextBlock();
-        this.lexer.pipeless = false;
-      } else {
-        var block = this.parseBlock();
-        if (tag.block) {
-          for (var i = 0, len = block.nodes.length; i < len; ++i) {
-            tag.block.push(block.nodes[i]);
-          }
-        } else {
-          tag.block = block;
-        }
-      }
-    }
-    
-    return tag;
-  }
-};
diff --git a/node/node_modules/jade/lib/runtime.js b/node/node_modules/jade/lib/runtime.js
deleted file mode 100644 (file)
index b826252..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-
-/*!
- * Jade - runtime
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Lame Array.isArray() polyfill for now.
- */
-
-if (!Array.isArray) {
-  Array.isArray = function(arr){
-    return '[object Array]' == toString.call(arr);
-  };
-}
-
-/**
- * Lame Object.keys() polyfill for now.
- */
-
-if (!Object.keys) {
-  Object.keys = function(obj){
-    var arr = [];
-    for (var key in obj) {
-      if (obj.hasOwnProperty(key)) {
-        arr.push(obj);
-      }
-    }
-    return arr;
-  } 
-}
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @return {String}
- * @api private
- */
-
-exports.attrs = function attrs(obj){
-  var buf = []
-    , terse = obj.terse;
-  delete obj.terse;
-  var keys = Object.keys(obj)
-    , len = keys.length;
-  if (len) {
-    buf.push('');
-    for (var i = 0; i < len; ++i) {
-      var key = keys[i]
-        , val = obj[key];
-      if ('boolean' == typeof val || null == val) {
-        if (val) {
-          terse
-            ? buf.push(key)
-            : buf.push(key + '="' + key + '"');
-        }
-      } else if ('class' == key && Array.isArray(val)) {
-        buf.push(key + '="' + exports.escape(val.join(' ')) + '"');
-      } else {
-        buf.push(key + '="' + exports.escape(val) + '"');
-      }
-    }
-  }
-  return buf.join(' ');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-exports.escape = function escape(html){
-  return String(html)
-    .replace(/&(?!\w+;)/g, '&amp;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;')
-    .replace(/"/g, '&quot;');
-};
-
-/**
- * Re-throw the given `err` in context to the
- * `str` of jade, `filename`, and `lineno`.
- *
- * @param {Error} err
- * @param {String} str
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, str, filename, lineno){
-  var context = 3
-    , lines = str.split('\n')
-    , start = Math.max(lineno - context, 0)
-    , end = Math.min(lines.length, lineno + context); 
-
-  // Error context
-  var context = lines.slice(start, end).map(function(line, i){
-    var curr = i + start + 1;
-    return (curr == lineno ? '  > ' : '    ')
-      + curr
-      + '| '
-      + line;
-  }).join('\n');
-
-  // Alter exception message
-  err.path = filename;
-  err.message = (filename || 'Jade') + ':' + lineno 
-    + '\n' + context + '\n\n' + err.message;
-  throw err;
-};
diff --git a/node/node_modules/jade/lib/self-closing.js b/node/node_modules/jade/lib/self-closing.js
deleted file mode 100644 (file)
index 293e7f8..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*!
- * Jade - self closing tags
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-module.exports = [
-    'meta'
-  , 'img'
-  , 'link'
-  , 'input'
-  , 'area'
-  , 'base'
-  , 'col'
-  , 'br'
-  , 'hr'
-];
\ No newline at end of file
diff --git a/node/node_modules/jade/lib/utils.js b/node/node_modules/jade/lib/utils.js
deleted file mode 100644 (file)
index ff46d02..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-
-/*!
- * Jade - utils
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Convert interpolation in the given string to JavaScript.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var interpolate = exports.interpolate = function(str){
-  return str.replace(/(\\)?([#!]){(.*?)}/g, function(str, escape, flag, code){
-    return escape
-      ? str
-      : "' + "
-        + ('!' == flag ? '' : 'escape')
-        + "((interp = " + code.replace(/\\'/g, "'")
-        + ") == null ? '' : interp) + '";
-  });
-};
-
-/**
- * Escape single quotes in `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-var escape = exports.escape = function(str) {
-  return str.replace(/'/g, "\\'");
-};
-
-/**
- * Interpolate, and escape the given `str`.
- *
- * @param {String} str
- * @return {String}
- * @api private
- */
-
-exports.text = function(str){
-  return interpolate(escape(str));
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/package.json b/node/node_modules/jade/package.json
deleted file mode 100644 (file)
index 2dedf7b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "name": "jade",
-  "description": "Jade template engine",
-  "version": "0.15.4",
-  "author": "TJ Holowaychuk <tj@vision-media.ca>",
-  "repository": "git://github.com/visionmedia/jade",
-  "main": "./index.js",
-  "bin": { "jade": "./bin/jade" },
-  "dependencies": {
-    "commander": "0.1.0",
-    "mkdirp": "0.0.6"
-  },
-  "devDependencies": {
-    "expresso": "0.6.4",
-    "coffee-script": ">= 0.0.1",
-    "sass": ">= 0.0.1",
-    "less": ">= 0.0.1",
-    "markdown": ">= 0.0.1",
-    "stylus": ">= 0.0.1",
-    "uubench": "0.0.1"
-  },
-  "scripts" : { "prepublish" : "npm prune" },
-  "engines": { "node": ">= 0.1.98" }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/runtime.js b/node/node_modules/jade/runtime.js
deleted file mode 100644 (file)
index b7f5fba..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-
-var jade = (function(exports){
-/*!
- * Jade - runtime
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Lame Array.isArray() polyfill for now.
- */
-
-if (!Array.isArray) {
-  Array.isArray = function(arr){
-    return '[object Array]' == toString.call(arr);
-  };
-}
-
-/**
- * Lame Object.keys() polyfill for now.
- */
-
-if (!Object.keys) {
-  Object.keys = function(obj){
-    var arr = [];
-    for (var key in obj) {
-      if (obj.hasOwnProperty(key)) {
-        arr.push(obj);
-      }
-    }
-    return arr;
-  } 
-}
-
-/**
- * Render the given attributes object.
- *
- * @param {Object} obj
- * @return {String}
- * @api private
- */
-
-exports.attrs = function attrs(obj){
-  var buf = []
-    , terse = obj.terse;
-  delete obj.terse;
-  var keys = Object.keys(obj)
-    , len = keys.length;
-  if (len) {
-    buf.push('');
-    for (var i = 0; i < len; ++i) {
-      var key = keys[i]
-        , val = obj[key];
-      if ('boolean' == typeof val || null == val) {
-        if (val) {
-          terse
-            ? buf.push(key)
-            : buf.push(key + '="' + key + '"');
-        }
-      } else if ('class' == key && Array.isArray(val)) {
-        buf.push(key + '="' + exports.escape(val.join(' ')) + '"');
-      } else {
-        buf.push(key + '="' + exports.escape(val) + '"');
-      }
-    }
-  }
-  return buf.join(' ');
-};
-
-/**
- * Escape the given string of `html`.
- *
- * @param {String} html
- * @return {String}
- * @api private
- */
-
-exports.escape = function escape(html){
-  return String(html)
-    .replace(/&(?!\w+;)/g, '&amp;')
-    .replace(/</g, '&lt;')
-    .replace(/>/g, '&gt;')
-    .replace(/"/g, '&quot;');
-};
-
-/**
- * Re-throw the given `err` in context to the
- * `str` of jade, `filename`, and `lineno`.
- *
- * @param {Error} err
- * @param {String} str
- * @param {String} filename
- * @param {String} lineno
- * @api private
- */
-
-exports.rethrow = function rethrow(err, str, filename, lineno){
-  var context = 3
-    , lines = str.split('\n')
-    , start = Math.max(lineno - context, 0)
-    , end = Math.min(lines.length, lineno + context); 
-
-  // Error context
-  var context = lines.slice(start, end).map(function(line, i){
-    var curr = i + start + 1;
-    return (curr == lineno ? '  > ' : '    ')
-      + curr
-      + '| '
-      + line;
-  }).join('\n');
-
-  // Alter exception message
-  err.path = filename;
-  err.message = (filename || 'Jade') + ':' + lineno 
-    + '\n' + context + '\n\n' + err.message;
-  throw err;
-};
-
-  return exports;
-
-})({});
\ No newline at end of file
diff --git a/node/node_modules/jade/runtime.min.js b/node/node_modules/jade/runtime.min.js
deleted file mode 100644 (file)
index 6e1efc9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var jade=function(exports){Array.isArray||(Array.isArray=function(arr){return"[object Array]"==toString.call(arr)}),Object.keys||(Object.keys=function(obj){var arr=[];for(var key in obj)obj.hasOwnProperty(key)&&arr.push(obj);return arr}),exports.attrs=function(obj){var buf=[],terse=obj.terse;delete obj.terse;var keys=Object.keys(obj),len=keys.length;if(len){buf.push("");for(var i=0;i<len;++i){var key=keys[i],val=obj[key];"boolean"==typeof val||null==val?val&&(terse?buf.push(key):buf.push(key+'="'+key+'"')):"class"==key&&Array.isArray(val)?buf.push(key+'="'+exports.escape(val.join(" "))+'"'):buf.push(key+'="'+exports.escape(val)+'"')}}return buf.join(" ")},exports.escape=function(html){return String(html).replace(/&(?!\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},exports.rethrow=function(err,str,filename,lineno){var context=3,lines=str.split("\n"),start=Math.max(lineno-context,0),end=Math.min(lines.length,lineno+context),context=lines.slice(start,end).map(function(line,i){var curr=i+start+1;return(curr==lineno?"  > ":"    ")+curr+"| "+line}).join("\n");err.path=filename,err.message=(filename||"Jade")+":"+lineno+"\n"+context+"\n\n"+err.message;throw err};return exports}({})
\ No newline at end of file
diff --git a/node/node_modules/jade/support/benchmark.js b/node/node_modules/jade/support/benchmark.js
deleted file mode 100644 (file)
index 85c2f3f..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var uubench = require('uubench')
-  , jade = require('../');
-
-
-var suite = new uubench.Suite({
-  min: 200,
-  result: function(name, stats){
-    var persec = 1000 / stats.elapsed
-      , ops = stats.iterations * persec;
-    console.log('%s: %d', name, ops | 0);
-  }
-});
-
-var str = 'html\n  body\n    h1 Title'
-  , fn = jade.compile(str);
-
-suite.bench('tiny', function(next){
-  fn();
-  next();
-});
-
-str = '\
-html\n\
-  body\n\
-    h1 Title\n\
-    ul#menu\n\
-      li: a(href="#") Home\n\
-      li: a(href="#") About Us\n\
-      li: a(href="#") Store\n\
-      li: a(href="#") FAQ\n\
-      li: a(href="#") Contact\n\
-';
-
-var fn2 = jade.compile(str);
-
-suite.bench('small', function(next){
-  fn2();
-  next();
-});
-
-str = '\
-html\n\
-  body\n\
-    h1 #{title}\n\
-    ul#menu\n\
-      - each link in links\r\n\
-        li: a(href="#")= link\r\n\
-';
-
-var fn3 = jade.compile(str);
-
-suite.bench('small locals', function(next){
-  fn3({ title: 'Title', links: ['Home', 'About Us', 'Store', 'FAQ', 'Contact'] });
-  next();
-});
-
-suite.run();
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/.gitignore b/node/node_modules/jade/support/coffee-script/.gitignore
deleted file mode 100644 (file)
index 529b521..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-raw
-presentation
-test.coffee
-parser.output
-test/fixtures/underscore
-test/*.js
-examples/beautiful_code/parse.coffee
-*.gem
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/Cakefile b/node/node_modules/jade/support/coffee-script/Cakefile
deleted file mode 100644 (file)
index 552d598..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-fs            = require 'fs'
-helpers       = require './lib/helpers'
-CoffeeScript  = require './lib/coffee-script'
-{spawn, exec} = require 'child_process'
-path          = require 'path'
-
-# ANSI Terminal Colors.
-red   = '\033[0;31m'
-green = '\033[0;32m'
-reset = '\033[0m'
-
-# Run a CoffeeScript through our node/coffee interpreter.
-run = (args) ->
-  proc =         spawn 'bin/coffee', args
-  proc.stderr.on 'data', (buffer) -> puts buffer.toString()
-  proc.on        'exit', (status) -> process.exit(1) if status != 0
-
-# Log a message with a color.
-log = (message, color, explanation) ->
-  puts color + message + reset + ' ' + (explanation or '')
-
-option '-p', '--prefix [DIR]', 'set the installation prefix for `cake install`'
-
-task 'install', 'install CoffeeScript into /usr/local (or --prefix)', (options) ->
-  base = options.prefix or '/usr/local'
-  lib  = "#{base}/lib/coffee-script"
-  bin  = "#{base}/bin"
-  node = "~/.node_libraries/coffee-script"
-  puts   "Installing CoffeeScript to #{lib}"
-  puts   "Linking to #{node}"
-  puts   "Linking 'coffee' to #{bin}/coffee"
-  exec([
-    "mkdir -p #{lib} #{bin}"
-    "cp -rf bin lib LICENSE README package.json src #{lib}"
-    "ln -sf #{lib}/bin/coffee #{bin}/coffee"
-    "ln -sf #{lib}/bin/cake #{bin}/cake"
-    "mkdir -p ~/.node_libraries"
-    "ln -sf #{lib}/lib #{node}"
-  ].join(' && '), (err, stdout, stderr) ->
-    if err then print stderr else log 'done', green
-  )
-
-
-task 'build', 'build the CoffeeScript language from source', ->
-  files = fs.readdirSync 'src'
-  files = 'src/' + file for file in files when file.match(/\.coffee$/)
-  run ['-c', '-o', 'lib'].concat(files)
-
-
-task 'build:full', 'rebuild the source twice, and run the tests', ->
-  exec 'bin/cake build && bin/cake build && bin/cake test', (err, stdout, stderr) ->
-    print stdout if stdout
-    print stderr if stderr
-    throw err    if err
-
-
-task 'build:parser', 'rebuild the Jison parser (run build first)', ->
-  require 'jison'
-  parser = require('./lib/grammar').parser
-  js = parser.generate()
-  # TODO: Remove this when the Jison patch is released.
-  js = js.replace 'if (require.main === module)', "if (typeof module !== 'undefined' && require.main === module)"
-  fs.writeFile 'lib/parser.js', js
-
-
-task 'build:ultraviolet', 'build and install the Ultraviolet syntax highlighter', ->
-  exec 'plist2syntax ../coffee-script-tmbundle/Syntaxes/CoffeeScript.tmLanguage', (err) ->
-    throw err if err
-    exec 'sudo mv coffeescript.yaml /usr/local/lib/ruby/gems/1.8/gems/ultraviolet-0.10.2/syntax/coffeescript.syntax'
-
-
-task 'build:browser', 'rebuild the merged script for inclusion in the browser', ->
-  exec 'rake browser', (err) ->
-    throw err if err
-
-
-task 'doc:site', 'watch and continually rebuild the documentation for the website', ->
-  exec 'rake doc'
-
-
-task 'doc:source', 'rebuild the internal documentation', ->
-  exec 'docco src/*.coffee && cp -rf docs documentation && rm -r docs', (err) ->
-    throw err if err
-
-
-task 'doc:underscore', 'rebuild the Underscore.coffee documentation page', ->
-  exec 'docco examples/underscore.coffee && cp -rf docs documentation && rm -r docs', (err) ->
-    throw err if err
-
-task 'bench', 'quick benchmark of compilation time (of everything in src)', ->
-  exec 'time bin/coffee -p src/ > /dev/null', (err, stdout, stderr) ->
-    print stderr
-
-task 'loc', 'count the lines of source code in the CoffeeScript compiler', ->
-  sources = ['src/coffee-script.coffee', 'src/grammar.coffee', 'src/helpers.coffee', 'src/lexer.coffee', 'src/nodes.coffee', 'src/rewriter.coffee', 'src/scope.coffee']
-  exec "cat #{ sources.join(' ') } | grep -v '^\\( *#\\|\\s*$\\)' | wc -l | tr -s ' '", (err, stdout) ->
-    print stdout
-
-
-runTests = (CoffeeScript) ->
-  startTime = Date.now()
-  passedTests = failedTests = 0
-  for all name, func of require 'assert'
-    global[name] = -> ++passedTests; func arguments...
-  global.eq = global.strictEqual
-  global.CoffeeScript = CoffeeScript
-  process.on 'exit', ->
-    time = ((Date.now() - startTime) / 1000).toFixed(2)
-    message = "passed #{passedTests} tests in #{time} seconds#{reset}"
-    if failedTests
-      log "failed #{failedTests} and #{message}", red
-    else
-      log message, green
-  fs.readdir 'test', (err, files) ->
-    files.forEach (file) ->
-      return unless file.match(/\.coffee$/i)
-      fileName = path.join 'test', file
-      fs.readFile fileName, (err, code) ->
-        try
-          CoffeeScript.run code.toString(), {fileName}
-        catch err
-          failedTests += 1
-          log "failed #{fileName}", red, '\n' + err.stack.toString()
-
-
-task 'test', 'run the CoffeeScript language test suite', ->
-  runTests CoffeeScript
-
-
-task 'test:browser', 'run the test suite against the merged browser script', ->
-  source = fs.readFileSync 'extras/coffee-script.js', 'utf-8'
-  result = {}
-  (-> eval source).call result
-  runTests result.CoffeeScript
diff --git a/node/node_modules/jade/support/coffee-script/LICENSE b/node/node_modules/jade/support/coffee-script/LICENSE
deleted file mode 100644 (file)
index 38e580c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2010 Jeremy Ashkenas
-
-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.
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/README b/node/node_modules/jade/support/coffee-script/README
deleted file mode 100644 (file)
index 70ce760..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-=                              
-            {                   
-         }   }   {              
-        {   {  }  }             
-         }   }{  {               
-        {  }{  }  }                    _____       __  __           
-       ( }{ }{  { )                   / ____|     / _|/ _|          
-     .- { { }  { }} -.               | |     ___ | |_| |_ ___  ___ 
-    (  ( } { } { } }  )              | |    / _ \|  _|  _/ _ \/ _ \ 
-    |`-..________ ..-'|              | |___| (_) | | | ||  __/  __/ 
-    |                 |               \_____\___/|_| |_| \___|\___|
-    |                 ;--.           
-    |                (__  \            _____           _       _   
-    |                 | )  )          / ____|         (_)     | |  
-    |                 |/  /          | (___   ___ _ __ _ _ __ | |_ 
-    |                 (  /            \___ \ / __| '__| | '_ \| __|
-    |                 |/              ____) | (__| |  | | |_) | |_ 
-    |                 |              |_____/ \___|_|  |_| .__/ \__|
-     `-.._________..-'                                  | |        
-                                                        |_|
-                  
-                                                        
-  CoffeeScript is a little language that compiles into JavaScript.
-  
-  Install Node.js, and then the CoffeeScript compiler:
-  sudo bin/cake install
-  
-  Or, if you have the Node Package Manager installed:
-  sudo npm install coffee-script
-  
-  Compile a script:
-  coffee /path/to/script.coffee
-  
-  For documentation, usage, and examples, see:
-  http://coffeescript.org/
-  
-  To suggest a feature, report a bug, or general discussion:
-  http://github.com/jashkenas/coffee-script/issues/
-  
-  If you'd like to chat, drop by #coffeescript on Freenode IRC,
-  or on webchat.freenode.net.
-
-  The source repository:
-  git://github.com/jashkenas/coffee-script.git
-  
-  All contributors are listed here:
-  http://github.com/jashkenas/coffee-script/contributors
-  
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/Rakefile b/node/node_modules/jade/support/coffee-script/Rakefile
deleted file mode 100644 (file)
index b88fc44..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-require 'erb'
-require 'fileutils'
-require 'rake/testtask'
-require 'rubygems'
-require 'yui/compressor'
-
-HEADER = <<-EOS
-/**
- * CoffeeScript Compiler v0.9.4
- * http://coffeescript.org
- *
- * Copyright 2010, Jeremy Ashkenas
- * Released under the MIT License
- */
-EOS
-
-desc "Build the documentation page"
-task :doc do
-  source = 'documentation/index.html.erb'
-  child = fork { exec "bin/coffee -bcw -o documentation/js documentation/coffee/*.coffee" }
-  at_exit { Process.kill("INT", child) }
-  Signal.trap("INT") { exit }
-  loop do
-    mtime = File.stat(source).mtime
-    if !@mtime || mtime > @mtime
-      rendered = ERB.new(File.read(source)).result(binding)
-      File.open('index.html', 'w+') {|f| f.write(rendered) }
-    end
-    @mtime = mtime
-    sleep 1
-  end
-end
-
-desc "Build the single concatenated and minified script for the browser"
-task :browser do
-  sources = %w(helpers rewriter lexer parser scope nodes coffee-script browser)
-  code = sources.inject '' do |js, name|
-    js << <<-"JS"
-      require['./#{name}'] = new function(){
-        var exports = this;
-        #{ File.read "lib/#{name}.js" }
-      }
-    JS
-  end
-  code = YUI::JavaScriptCompressor.new.compress(<<-"JS")
-    this.CoffeeScript = function(){
-      function require(path){ return require[path] }
-      #{ code }
-      return require['./coffee-script']
-    }()
-  JS
-  File.open('extras/coffee-script.js', 'wb+') {|f| f.write(HEADER + code) }
-end
diff --git a/node/node_modules/jade/support/coffee-script/bin/cake b/node/node_modules/jade/support/coffee-script/bin/cake
deleted file mode 100755 (executable)
index aa7475a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env node
-
-var path = require('path');
-var fs   = require('fs');
-var lib  = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
-
-require(lib + '/helpers').extend(global, require('sys'));
-require(lib + '/cake').run();
diff --git a/node/node_modules/jade/support/coffee-script/bin/coffee b/node/node_modules/jade/support/coffee-script/bin/coffee
deleted file mode 100755 (executable)
index c6dc359..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env node
-
-var path = require('path');
-var fs   = require('fs');
-var lib  = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
-
-require(lib + '/helpers').extend(global, require('sys'));
-require(lib + '/command').run();
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/aliases.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/aliases.coffee
deleted file mode 100644 (file)
index 9301fe8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-launch() if ignition is on
-
-volume = 10 if band isnt SpinalTap
-
-letTheWildRumpusBegin() unless answer is no
-
-if car.speed < limit then accelerate()
-
-winner = yes if pick in [47, 92, 13]
-
-print inspect "My name is " + @name
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/array_comprehensions.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/array_comprehensions.coffee
deleted file mode 100644 (file)
index b9d9e16..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# Eat lunch.
-lunch = eat food for food in ['toast', 'cheese', 'wine']
-
-# Naive collision detection.
-for roid, pos in asteroids
-  for roid2 in asteroids when roid isnt roid2
-    roid.explode() if roid.overlaps roid2
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/block_comment.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/block_comment.coffee
deleted file mode 100644 (file)
index 3cfd9e9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-###
-CoffeeScript Compiler v0.9.4
-Released under the MIT License
-###
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/cake_tasks.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/cake_tasks.coffee
deleted file mode 100644 (file)
index 780337f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-fs = require 'fs'
-
-option '-o', '--output [DIR]', 'directory for compiled code'
-
-task 'build:parser', 'rebuild the Jison parser', (options) ->
-  require 'jison'
-  code = require('./lib/grammar').parser.generate()
-  dir  = options.output or 'lib'
-  fs.writeFile "#{dir}/parser.js", code
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/classes.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/classes.coffee
deleted file mode 100644 (file)
index 6794518..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-class Animal
-  constructor: (@name) ->
-
-  move: (meters) ->
-    alert @name + " moved " + meters + "m."
-
-class Snake extends Animal
-  move: ->
-    alert "Slithering..."
-    super 5
-
-class Horse extends Animal
-  move: ->
-    alert "Galloping..."
-    super 45
-
-sam = new Snake "Sammy the Python"
-tom = new Horse "Tommy the Palomino"
-
-sam.move()
-tom.move()
-
-
-
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/comparisons.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/comparisons.coffee
deleted file mode 100644 (file)
index 6cac549..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-cholesterol = 127
-
-healthy = 200 > cholesterol > 60
-
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/conditionals.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/conditionals.coffee
deleted file mode 100644 (file)
index 7aa329b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-mood = greatlyImproved if singing
-
-if happy and knowsIt
-  clapsHands()
-  chaChaCha()
-else
-  showIt()
-
-date = if friday then sue else jill
-
-options or= defaults
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/embedded.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/embedded.coffee
deleted file mode 100644 (file)
index bb16b79..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-hi = `function() {
-  return [document.title, "Hello JavaScript"].join(": ");
-}`
-
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/existence.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/existence.coffee
deleted file mode 100644 (file)
index d4405e3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-solipsism = true if mind? and not world?
-
-speed ?= 140
-
-
-
-
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/expressions.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/expressions.coffee
deleted file mode 100644 (file)
index f4e59c4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-grade = (student) ->
-  if student.excellentWork
-    "A+"
-  else if student.okayStuff
-    if student.triedHard then "B" else "B-"
-  else
-    "C"
-
-eldest = if 24 > 21 then "Liz" else "Ike"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_assignment.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_assignment.coffee
deleted file mode 100644 (file)
index 0ba0daa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-six = (one = 1) + (two = 2) + (three = 3)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_comprehension.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_comprehension.coffee
deleted file mode 100644 (file)
index 0af075d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# The first ten global properties.
-
-globals = (name for name of window)[0...10]
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_try.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/expressions_try.coffee
deleted file mode 100644 (file)
index 13fdfec..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-alert(
-  try
-    nonexistent / undefined
-  catch error
-    "And the error is ... " + error
-)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/fat_arrow.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/fat_arrow.coffee
deleted file mode 100644 (file)
index 836eb7a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Account = (customer, cart) ->
-  @customer = customer
-  @cart = cart
-
-  $('.shopping_cart').bind 'click', (event) =>
-    @customer.purchase @cart
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/functions.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/functions.coffee
deleted file mode 100644 (file)
index 60cc7ca..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-square = (x) -> x * x
-cube   = (x) -> square(x) * x
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/heredocs.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/heredocs.coffee
deleted file mode 100644 (file)
index ec76c14..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-html = '''
-       <strong>
-         cup of coffeescript
-       </strong>
-       '''
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/interpolation.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/interpolation.coffee
deleted file mode 100644 (file)
index de02de4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-author = "Wittgenstein"
-quote  = "A picture is a fact. -- #{author}"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/interpolation_expression.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/interpolation_expression.coffee
deleted file mode 100644 (file)
index 49332cd..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-sentence = "#{ 22 / 7 } is a decent approximation of π"
-
-sep   = "[.\\/\\- ]"
-dates = /\d+#{sep}\d+#{sep}\d+/g
-
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/multiple_return_values.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/multiple_return_values.coffee
deleted file mode 100644 (file)
index ec350ba..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-weatherReport = (location) ->
-  # Make an Ajax request to fetch the weather...
-  [location, 72, "Mostly Sunny"]
-
-[city, temp, forecast] = weatherReport "Berkeley, CA"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/object_comprehensions.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/object_comprehensions.coffee
deleted file mode 100644 (file)
index f5e2ce8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-yearsOld = max: 10, ida: 9, tim: 11
-
-ages = for child, age of yearsOld
-  child + " is " + age
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/object_extraction.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/object_extraction.coffee
deleted file mode 100644 (file)
index d3625d6..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-futurists =
-  sculptor: "Umberto Boccioni"
-  painter:  "Vladimir Burliuk"
-  poet:
-    name:   "F.T. Marinetti"
-    address: [
-      "Via Roma 42R"
-      "Bellagio, Italy 22021"
-    ]
-
-{poet: {name, address: [street, city]}} = futurists
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/objects_and_arrays.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/objects_and_arrays.coffee
deleted file mode 100644 (file)
index d98be8b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-song = ["do", "re", "mi", "fa", "so"]
-
-singers = {Jagger: "Rock", Elvis: "Roll"}
-
-matrix = [
-  1, 0, 1
-  0, 0, 1
-  1, 1, 0
-]
-
-kids =
-  brother:
-    name: "Max"
-    age:  11
-  sister:
-    name: "Ida"
-    age:  9
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/objects_reserved.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/objects_reserved.coffee
deleted file mode 100644 (file)
index 492b80a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-$('.account').css class: 'active'
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/overview.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/overview.coffee
deleted file mode 100644 (file)
index 7ab4e71..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Assignment:
-number   = 42
-opposite = true
-
-# Conditions:
-number = -42 if opposite
-
-# Functions:
-square = (x) -> x * x
-
-# Arrays:
-list = [1, 2, 3, 4, 5]
-
-# Objects:
-math =
-  root:   Math.sqrt
-  square: square
-  cube:   (x) -> x * square x
-
-# Splats:
-race = (winner, runners...) ->
-  print winner, runners
-
-# Existence:
-alert "I knew it!" if elvis?
-
-# Array comprehensions:
-cubes = math.cube num for num in list
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/parallel_assignment.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/parallel_assignment.coffee
deleted file mode 100644 (file)
index bbe03a8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-theBait   = 1000
-theSwitch = 0
-
-[theBait, theSwitch] = [theSwitch, theBait]
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/patterns_and_splats.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/patterns_and_splats.coffee
deleted file mode 100644 (file)
index 12eb818..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-tag = "<impossible>"
-
-[open, contents..., close] = tag.split("")
-
-
-
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/prototypes.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/prototypes.coffee
deleted file mode 100644 (file)
index ebefb17..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-String::dasherize = ->
-  this.replace /_/g, "-"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/range_comprehensions.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/range_comprehensions.coffee
deleted file mode 100644 (file)
index d5e0b68..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-countdown = num for num in [10..1]
-
-deliverEggs = ->
-  for i in [0...eggs.length] by 12
-    dozen = eggs[i...i+12]
-    deliver new eggCarton dozen
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/scope.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/scope.coffee
deleted file mode 100644 (file)
index d0a5f1e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-outer = 1
-changeNumbers = ->
-  inner = -1
-  outer = 10
-inner = changeNumbers()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/slices.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/slices.coffee
deleted file mode 100644 (file)
index 794e8e0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-threeToSix = numbers[3..6]
-
-copy = numbers[0...numbers.length]
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/soaks.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/soaks.coffee
deleted file mode 100644 (file)
index 16b2350..0000000
+++ /dev/null
@@ -1 +0,0 @@
-lottery.drawWinner?().address?.zipcode
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/splats.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/splats.coffee
deleted file mode 100644 (file)
index c48a3cd..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-gold = silver = rest = "unknown"
-
-awardMedals = (first, second, others...) ->
-  gold   = first
-  silver = second
-  rest   = others
-
-contenders = [
-  "Michael Phelps"
-  "Liu Xiang"
-  "Yao Ming"
-  "Allyson Felix"
-  "Shawn Johnson"
-  "Roman Sebrle"
-  "Guo Jingjing"
-  "Tyson Gay"
-  "Asafa Powell"
-  "Usain Bolt"
-]
-
-awardMedals contenders...
-
-alert "Gold: " + gold
-alert "Silver: " + silver
-alert "The Field: " + rest
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/splices.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/splices.coffee
deleted file mode 100644 (file)
index ecf9d57..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-numbers[3..6] = [-3, -4, -5, -6]
-
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/strings.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/strings.coffee
deleted file mode 100644 (file)
index 3fc27a4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-mobyDick = "Call me Ishmael. Some years ago --
- never mind how long precisely -- having little
- or no money in my purse, and nothing particular
- to interest me on shore, I thought I would sail
- about a little and see the watery part of the
- world..."
-
-
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/switch.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/switch.coffee
deleted file mode 100644 (file)
index 12a66f4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-switch day
-  when "Mon" then go work
-  when "Tue" then go relax
-  when "Thu" then go iceFishing
-  when "Fri", "Sat"
-    if day is bingoDay
-      go bingo
-      go dancing
-  when "Sun" then go church
-  else go work
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/try.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/try.coffee
deleted file mode 100644 (file)
index d424495..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-try
-  allHellBreaksLoose()
-  catsAndDogsLivingTogether()
-catch error
-  print error
-finally
-  cleanUp()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/coffee/while.coffee b/node/node_modules/jade/support/coffee-script/documentation/coffee/while.coffee
deleted file mode 100644 (file)
index 81b12cb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Econ 101
-if this.studyingEconomics
-  buy()  while supply > demand
-  sell() until supply > demand
-
-# Nursery Rhyme
-num = 6
-lyrics = while num -= 1
-  num + " little monkeys, jumping on the bed.
-    One fell out and bumped his head."
diff --git a/node/node_modules/jade/support/coffee-script/documentation/css/docs.css b/node/node_modules/jade/support/coffee-script/documentation/css/docs.css
deleted file mode 100644 (file)
index b47c1ff..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-body {
-  font-size: 13px;
-  line-height: 20px;
-  color: #191933;
-  font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, sans-serif !important;
-}
-.container {
-  width: 950px;
-  margin: 0;
-  padding: 80px 0px 50px 50px;
-}
-p, li {
-  width: 625px;
-}
-a {
-  color: #000055;
-}
-h1, h2, h3, h4, h5, h6 {
-  margin-top: 50px;
-}
-br.clear {
-  height: 0;
-  clear: both;
-}
-ul {
-  padding-left: 20px;
-}
-b.header {
-  color: #000055;
-  display: block;
-  margin: 40px 0 5px 0;
-  font-size: 16px;
-}
-li {
-  margin-bottom: 10px;
-}
-table {
-  margin: 16px 0 0 13px; padding: 0;
-  width: 625px;
-}
-  tr, td {
-    margin: 0; padding: 0;
-  }
-    td {
-      padding: 9px 15px 9px 0;
-    }
-code, pre, tt, textarea {
-  font-family: Monaco, Consolas, "Lucida Console", monospace;
-  font-size: 12px;
-  line-height: 18px;
-  color: #191955;
-  white-space: pre-wrap;
-  word-wrap: break-word;
-}
-  tt {
-    background: #f8f8ff;
-    border: 1px solid #dedede;
-    font-size: 85%;
-    padding: 0px 0.2em;
-  }
-  pre {
-    border-left: 6px solid #222255;
-    margin-left: 13px;
-    padding: 3px 0 3px 12px;
-    font-size: 12px;
-  }
-    pre.no_bar {
-      border-left: 0;
-      margin-left: 0;
-      padding-left: 0;
-    }
-div.code {
-  position: relative;
-  border: 1px solid #cacaca;
-  background: #fafaff;
-  padding: 7px 0 10px 0;
-  -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px;
-  -webkit-box-shadow: 0px 0px 7px #cacaca;
-  zoom: 1;
-}
-  div.code button {
-    position: absolute;
-    right: 8px; bottom: 8px;
-  }
-  div.code pre, div.code textarea {
-    float: left;
-    width: 450px;
-    background: #fafaff;
-    border-left: 1px dotted #559;
-    padding: 0 0 0 12px;
-    margin: 0;
-  }
-    div.code pre:first-child {
-      border-left: 0;
-    }
-
-#fadeout {
-  z-index: 50;
-  position: fixed;
-  left: 0; top: 0; right: 0;
-  height: 100px;
-  background: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 255)), to(rgba(255, 255, 255, 0)));
-  background: -moz-linear-gradient(top, rgba(255, 255, 255, 255), rgba(255, 255, 255, 0));
-}
-
-#flybar {
-  position: fixed;
-  z-index: 100;
-  height: 50px;
-  min-width: 490px;
-  left: 40px; right: 40px; top: 25px;
-  padding-left: 235px;
-  background: #eee;
-  background: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#d0d0d0));
-  background: -moz-linear-gradient(top, #f5f5f5, #d0d0d0);
-  border: 1px solid #aaa;
-  -webkit-border-radius: 20px; -moz-border-radius: 20px; border-radius: 20px;
-  -webkit-box-shadow: 0 0 7px #aaa; -moz-box-shadow: 0 0 7px #aaa;
-}
-  #logo {
-    display: block;
-    width: 215px; height: 50px;
-    background: url('../images/logo.png');
-    position: absolute;
-    top: 0px; left: 10px;
-  }
-  #error {
-    position: absolute;
-    -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px;
-    right: 15px; top: 15px; left: 730px;
-    height: 15px;
-    padding: 2px 5px;
-    background: #fdcdcc;
-    color: #864544;
-    border: 1px solid #864544;
-    font-size: 10px;
-    line-height: 15px;
-    overflow: hidden;
-    text-transform: uppercase;
-  }
-  .navigation {
-    height: 50px;
-    font-size: 11px;
-    line-height: 50px;
-    text-transform: uppercase;
-    position: relative;
-    float: left;
-    padding: 0 20px;
-    border: 1px solid #bbb;
-    border-top: 0; border-bottom: 0; border-left-width: 0;
-    cursor: pointer;
-  }
-    body.full_screen .navigation {
-      position: static;
-    }
-    .navigation.toc {
-      border-left-width: 1px;
-    }
-    .navigation:hover,
-    .navigation.active {
-      background: #eee;
-      background: -webkit-gradient(linear, left top, left bottom, from(#f0f0f0), to(#c0c0c0));
-      background: -moz-linear-gradient(top, #f0f0f0, #c0c0c0);
-    }
-    .navigation .button {
-      font-weight: bold;
-    }
-    .navigation .contents {
-      display: none;
-      position: absolute;
-      background: #fff;
-      top: 51px; left: 0;
-      padding: 5px 0;
-      margin-left: -1px;
-      border: 1px solid #aaa; border-top: 0;
-      -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px;
-      -webkit-border-top-left-radius: 0; -moz-border-radius-topleft: 0;
-      -webkit-border-top-right-radius: 0; -moz-border-radius-topright: 0;
-      -webkit-box-shadow: 0 5px 10px #999; -moz-box-shadow: 0 5px 10px #999;
-    }
-      .navigation.active .contents {
-        display: block;
-      }
-        .navigation .contents.repl_wrapper {
-          left: -162px;
-          width: 700px;
-          padding: 0;
-        }
-          body.full_screen .navigation .contents.repl_wrapper {
-            position: fixed;
-            width: auto; height: auto;
-            left: 60px; top: 77px; right: 60px; bottom: 30px;
-          }
-          .navigation .contents.repl_wrapper .code {
-            -webkit-box-shadow: none; -moz-box-shadow: none;
-            background: transparent;
-            border: 0;
-            position: static;
-          }
-            body.full_screen .navigation .contents.repl_wrapper .code {
-              height: 100%;
-              padding: 0; margin: 0;
-            }
-          .navigation .code button {
-            bottom: 10px;
-            text-transform: none;
-            line-height: 14px;
-            left: auto; right: auto;
-          }
-          .navigation .code .run {
-            width: 40px;
-            right: 10px;
-          }
-          .navigation .code .full_screen, .navigation .code .minimize {
-            left: 10px;
-            display: none;
-            width: 90px;
-          }
-            body.minimized .code .full_screen, body.full_screen .code .minimize {
-              display: inline;
-            }
-      .navigation .contents a {
-        display: block;
-        width: 290px;
-        text-transform: none;
-        text-decoration: none;
-        font-weight: normal;
-        height: 12px;
-        line-height: 12px;
-        padding: 4px 10px;
-      }
-        .navigation .contents a:hover {
-          background: #f0f0f0;
-        }
-
-.bookmark {
-  display: block;
-  width: 0; height: 0;
-  position: relative;
-  top: -90px;
-}
-
-#repl_source, #repl_results {
-  background: transparent;
-  outline: none;
-  margin: 5px 0 20px;
-}
-  #repl_source_wrap {
-    margin-left: 5px;
-    height: 250px;
-    width: 307px;
-    position: relative;
-    float: left;
-  }
-    #repl_source {
-      width: 96%;
-      height: 250px;
-      border: 0;
-      resize: none;
-    }
-  #repl_results {
-    font-family: Monaco, Consolas, "Lucida Console", monospace;
-    text-transform: none;
-    font-weight: normal;
-    height: 260px;
-    margin-bottom: 25px;
-    overflow-y: auto;
-    width: 370px;
-  }
-    body.full_screen #repl_results, body.full_screen #repl_source_wrap {
-      width: auto; height: auto;
-      position: absolute;
-      margin-bottom: 0;
-      top: 10px; left: 10px; right: 10px; bottom: 40px;
-    }
-      body.full_screen #repl_source {
-        height: 100%;
-      }
-      body.full_screen #repl_source_wrap {
-        right: 50%;
-      }
-      body.full_screen #repl_results {
-        left: 50%;
-      }
diff --git a/node/node_modules/jade/support/coffee-script/documentation/css/idle.css b/node/node_modules/jade/support/coffee-script/documentation/css/idle.css
deleted file mode 100644 (file)
index e1e8a1a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-pre.idle .InheritedClass {
-}
-pre.idle .TypeName {
-   color: #21439C;
-}
-pre.idle .Number {
-}
-pre.idle .LibraryVariable {
-   color: #A535AE;
-}
-pre.idle .Storage {
-   color: #FF5600;
-}
-pre.idle .line-numbers {
-   background-color: #BAD6FD;
-   color: #000000;
-}
-pre.idle {
-   background-color: #FFFFFF;
-   color: #000000;
-}
-pre.idle .StringInterpolation {
-   color: #990000;
-}
-pre.idle .TagName {
-}
-pre.idle .LibraryConstant {
-   color: #A535AE;
-}
-pre.idle .FunctionArgument {
-   color: #0076ad;
-}
-pre.idle .BuiltInConstant {
-   color: #A535AE;
-}
-pre.idle .Invalid {
-   background-color: #990000;
-   color: #FFFFFF;
-}
-pre.idle .LibraryClassType {
-   color: #A535AE;
-}
-pre.idle .LibraryFunction {
-   color: #A535AE;
-}
-pre.idle .TagAttribute {
-}
-pre.idle .Keyword {
-   color: #FF5600;
-}
-pre.idle .UserDefinedConstant {
-}
-pre.idle .String {
-   color: #00A33F;
-}
-pre.idle .FunctionName {
-   color: #21439C;
-}
-pre.idle .Variable {
-  color: #A535AE;
-}
-pre.idle .Comment {
-   color: #919191;
-}
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/browser.html b/node/node_modules/jade/support/coffee-script/documentation/docs/browser.html
deleted file mode 100644 (file)
index 54d4861..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>browser.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               browser.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>Override exported methods for non-Node.js engines.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">CoffeeScript = </span><span class="nx">require</span> <span class="s1">&#39;./coffee-script&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>Use standard JavaScript <code>eval</code> to eval code.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">CoffeeScript.eval = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nb">eval</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">code</span><span class="p">,</span> <span class="nx">options</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>Running code does not provide access to this scope.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">CoffeeScript.run = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="p">(</span><span class="nb">Function</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)()</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>If we're not in a browser environment, we're finished with the public API.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="k">return</span> <span class="nx">unless</span> <span class="nb">window</span><span class="o">?</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Load a remote script from the current domain via XHR.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">CoffeeScript.load = </span><span class="p">(</span><span class="nx">url</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">xhr = </span><span class="k">new</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">ActiveXObject</span> <span class="o">or</span> <span class="nx">XMLHttpRequest</span><span class="p">)(</span><span class="s1">&#39;Microsoft.XMLHTTP&#39;</span><span class="p">)</span>
-  <span class="nx">xhr</span><span class="p">.</span><span class="nx">open</span> <span class="s1">&#39;GET&#39;</span><span class="p">,</span> <span class="nx">url</span><span class="p">,</span> <span class="kc">true</span>
-  <span class="nx">xhr</span><span class="p">.</span><span class="nx">overrideMimeType</span> <span class="s1">&#39;text/plain&#39;</span> <span class="k">if</span> <span class="s1">&#39;overrideMimeType&#39;</span> <span class="k">of</span> <span class="nx">xhr</span>
-  <span class="nv">xhr.onreadystatechange = </span><span class="o">-&gt;</span>
-    <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">run</span> <span class="nx">xhr</span><span class="p">.</span><span class="nx">responseText</span><span class="p">,</span> <span class="nx">options</span> <span class="k">if</span> <span class="nx">xhr</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">is</span> <span class="mi">4</span>
-  <span class="nx">xhr</span><span class="p">.</span><span class="nx">send</span> <span class="kc">null</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Activate CoffeeScript in the browser by having it compile and evaluate
-all script tags with a content-type of <code>text/coffeescript</code>.
-This happens on page load.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">processScripts = </span><span class="o">-&gt;</span>
-  <span class="k">for</span> <span class="nx">script</span> <span class="k">in</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span> <span class="s1">&#39;script&#39;</span>
-    <span class="k">if</span> <span class="nx">script</span><span class="p">.</span><span class="nx">type</span> <span class="o">is</span> <span class="s1">&#39;text/coffeescript&#39;</span>
-      <span class="k">if</span> <span class="nx">script</span><span class="p">.</span><span class="nx">src</span>
-        <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">load</span> <span class="nx">script</span><span class="p">.</span><span class="nx">src</span>
-      <span class="k">else</span>
-        <span class="nx">setTimeout</span> <span class="o">-&gt;</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">run</span> <span class="nx">script</span><span class="p">.</span><span class="nx">innerHTML</span>
-  <span class="kc">null</span>
-<span class="k">if</span> <span class="nb">window</span><span class="p">.</span><span class="nx">addEventListener</span>
-  <span class="nx">addEventListener</span> <span class="s1">&#39;DOMContentLoaded&#39;</span><span class="p">,</span> <span class="nx">processScripts</span><span class="p">,</span> <span class="kc">false</span>
-<span class="k">else</span>
-  <span class="nx">attachEvent</span> <span class="s1">&#39;onload&#39;</span><span class="p">,</span> <span class="nx">processScripts</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/cake.html b/node/node_modules/jade/support/coffee-script/documentation/docs/cake.html
deleted file mode 100644 (file)
index 7189e51..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>cake.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               cake.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p><code>cake</code> is a simplified version of <a href="http://www.gnu.org/software/make/">Make</a>
-(<a href="http://rake.rubyforge.org/">Rake</a>, <a href="http://github.com/280north/jake">Jake</a>)
-for CoffeeScript. You define tasks with names and descriptions in a Cakefile,
-and can call them from the command line, or invoke them from other tasks.</p>
-
-<p>Running <code>cake</code> with no arguments will print out a list of all the tasks in the
-current directory's Cakefile.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>External dependencies.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">fs           = </span><span class="nx">require</span> <span class="s1">&#39;fs&#39;</span>
-<span class="nv">path         = </span><span class="nx">require</span> <span class="s1">&#39;path&#39;</span>
-<span class="nv">helpers      = </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./helpers&#39;</span><span class="p">).</span><span class="nx">helpers</span>
-<span class="nv">optparse     = </span><span class="nx">require</span> <span class="s1">&#39;./optparse&#39;</span>
-<span class="nv">CoffeeScript = </span><span class="nx">require</span> <span class="s1">&#39;./coffee-script&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>Keep track of the list of defined tasks, the accepted options, and so on.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">tasks     = </span><span class="p">{}</span>
-<span class="nv">options   = </span><span class="p">{}</span>
-<span class="nv">switches  = </span><span class="p">[]</span>
-<span class="nv">oparse    = </span><span class="kc">null</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Mixin the top-level Cake functions for Cakefiles to use directly.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nx">helpers</span><span class="p">.</span><span class="nx">extend</span> <span class="nx">global</span><span class="p">,</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Define a Cake task with a short name, an optional sentence description,
-and the function to run as the action itself.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">task</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">description</span><span class="p">,</span> <span class="nx">action</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[</span><span class="nx">action</span><span class="p">,</span> <span class="nx">description</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">description</span><span class="p">,</span> <span class="nx">action</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">action</span>
-    <span class="nx">tasks</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="nx">name</span><span class="p">,</span> <span class="nx">description</span><span class="p">,</span> <span class="nx">action</span><span class="p">}</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Define an option that the Cakefile accepts. The parsed options hash,
-containing all of the command-line options passed, will be made available
-as the first argument to the action.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">option</span><span class="o">:</span> <span class="p">(</span><span class="nx">letter</span><span class="p">,</span> <span class="nx">flag</span><span class="p">,</span> <span class="nx">description</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">switches</span><span class="p">.</span><span class="nx">push</span> <span class="p">[</span><span class="nx">letter</span><span class="p">,</span> <span class="nx">flag</span><span class="p">,</span> <span class="nx">description</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>Invoke another task in the current Cakefile.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">invoke</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">missingTask</span> <span class="nx">name</span> <span class="nx">unless</span> <span class="nx">tasks</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span>
-    <span class="nx">tasks</span><span class="p">[</span><span class="nx">name</span><span class="p">].</span><span class="nx">action</span> <span class="nx">options</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Run <code>cake</code>. Executes all of the tasks you pass, in order. Note that Node's
-asynchrony may cause tasks to execute in a different order than you'd expect.
-If no tasks are passed, print the help screen.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.run = </span><span class="o">-&gt;</span>
-  <span class="nx">path</span><span class="p">.</span><span class="nx">exists</span> <span class="s1">&#39;Cakefile&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">exists</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">&quot;Cakefile not found in #{process.cwd()}&quot;</span><span class="p">)</span> <span class="nx">unless</span> <span class="nx">exists</span>
-    <span class="nv">args = </span><span class="nx">process</span><span class="p">.</span><span class="nx">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">...</span><span class="nx">process</span><span class="p">.</span><span class="nx">argv</span><span class="p">.</span><span class="nx">length</span><span class="p">]</span>
-    <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">run</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">readFileSync</span><span class="p">(</span><span class="s1">&#39;Cakefile&#39;</span><span class="p">).</span><span class="nx">toString</span><span class="p">(),</span> <span class="nx">fileName</span><span class="o">:</span> <span class="s1">&#39;Cakefile&#39;</span>
-    <span class="nv">oparse = </span><span class="k">new</span> <span class="nx">optparse</span><span class="p">.</span><span class="nx">OptionParser</span> <span class="nx">switches</span>
-    <span class="k">return</span> <span class="nx">printTasks</span><span class="p">()</span> <span class="nx">unless</span> <span class="nx">args</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nv">options = </span><span class="nx">oparse</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">args</span><span class="p">)</span>
-    <span class="nx">invoke</span> <span class="nx">arg</span> <span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">options</span><span class="p">.</span><span class="nx">arguments</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Display the list of Cake tasks in a format similar to <code>rake -T</code></p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">printTasks = </span><span class="o">-&gt;</span>
-  <span class="nx">puts</span> <span class="s1">&#39;&#39;</span>
-  <span class="k">for</span> <span class="nx">all</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">task</span> <span class="k">of</span> <span class="nx">tasks</span>
-    <span class="nv">spaces = </span><span class="mi">20</span> <span class="o">-</span> <span class="nx">name</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nv">spaces = </span><span class="k">if</span> <span class="nx">spaces</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">then</span> <span class="nb">Array</span><span class="p">(</span><span class="nx">spaces</span> <span class="o">+</span> <span class="mi">1</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">desc   = </span><span class="k">if</span> <span class="nx">task</span><span class="p">.</span><span class="nx">description</span> <span class="k">then</span> <span class="s2">&quot;# #{task.description}&quot;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nx">puts</span> <span class="s2">&quot;cake #{name}#{spaces} #{desc}&quot;</span>
-  <span class="nx">puts</span> <span class="nx">oparse</span><span class="p">.</span><span class="nx">help</span><span class="p">()</span> <span class="k">if</span> <span class="nx">switches</span><span class="p">.</span><span class="nx">length</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>Print an error and exit when attempting to all an undefined task.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">missingTask = </span><span class="p">(</span><span class="nx">task</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nx">puts</span> <span class="s2">&quot;No such task: \&quot;#{task}\&quot;&quot;</span>
-  <span class="nx">process</span><span class="p">.</span><span class="nx">exit</span> <span class="mi">1</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/coffee-script.html b/node/node_modules/jade/support/coffee-script/documentation/docs/coffee-script.html
deleted file mode 100644 (file)
index 36b3849..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>coffee-script.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               coffee-script.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>CoffeeScript can be used both on the server, as a command-line compiler based
-on Node.js/V8, or to run CoffeeScripts directly in the browser. This module
-contains the main entry functions for tokenzing, parsing, and compiling source
-CoffeeScript into JavaScript.</p>
-
-<p>If included on a webpage, it will automatically sniff out, compile, and
-execute all scripts present in <code>text/coffeescript</code> tags.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">path      = </span><span class="nx">require</span> <span class="s1">&#39;path&#39;</span>
-<span class="p">{</span><span class="nx">Lexer</span><span class="p">}</span>   <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;./lexer&#39;</span>
-<span class="p">{</span><span class="nx">parser</span><span class="p">}</span>  <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;./parser&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>TODO: Remove registerExtension when fully deprecated</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="k">if</span> <span class="nx">require</span><span class="p">.</span><span class="nx">extensions</span>
-  <span class="nv">fs = </span><span class="nx">require</span> <span class="s1">&#39;fs&#39;</span>
-  <span class="nx">require</span><span class="p">.</span><span class="nx">extensions</span><span class="p">[</span><span class="s1">&#39;.coffee&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="nx">module</span><span class="p">,</span> <span class="nx">filename</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">content = </span><span class="nx">compile</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">readFileSync</span> <span class="nx">filename</span><span class="p">,</span> <span class="s1">&#39;utf8&#39;</span>
-    <span class="nv">module.filename = </span><span class="s2">&quot;#{filename} (compiled)&quot;</span>
-    <span class="nx">module</span><span class="p">.</span><span class="nx">_compile</span> <span class="nx">content</span><span class="p">,</span> <span class="nx">module</span><span class="p">.</span><span class="nx">filename</span>
-<span class="k">else</span> <span class="k">if</span> <span class="nx">require</span><span class="p">.</span><span class="nx">registerExtension</span>
-  <span class="nx">require</span><span class="p">.</span><span class="nx">registerExtension</span> <span class="s1">&#39;.coffee&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">content</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">compile</span> <span class="nx">content</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>The current CoffeeScript version number.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.VERSION = </span><span class="s1">&#39;0.9.4&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison
-compiler.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.compile = compile = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
-  <span class="k">try</span>
-    <span class="p">(</span><span class="nx">parser</span><span class="p">.</span><span class="nx">parse</span> <span class="nx">lexer</span><span class="p">.</span><span class="nx">tokenize</span> <span class="nx">code</span><span class="p">).</span><span class="nx">compile</span> <span class="nx">options</span>
-  <span class="k">catch</span> <span class="nx">err</span>
-    <span class="nv">err.message = </span><span class="s2">&quot;In #{options.fileName}, #{err.message}&quot;</span> <span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">fileName</span>
-    <span class="k">throw</span> <span class="nx">err</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Tokenize a string of CoffeeScript code, and return the array of tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.tokens = </span><span class="p">(</span><span class="nx">code</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nx">lexer</span><span class="p">.</span><span class="nx">tokenize</span> <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Tokenize and parse a string of CoffeeScript code, and return the AST. You can
-then compile it by calling <code>.compile()</code> on the root, or traverse it by using
-<code>.traverse()</code> with a callback.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.nodes = </span><span class="p">(</span><span class="nx">code</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nx">parser</span><span class="p">.</span><span class="nx">parse</span> <span class="nx">lexer</span><span class="p">.</span><span class="nx">tokenize</span> <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>Compile and execute a string of CoffeeScript (on the server), correctly
-setting <code>__filename</code>, <code>__dirname</code>, and relative <code>require()</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.run = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>We want the root module.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">root = </span><span class="nx">module</span>
-  <span class="k">while</span> <span class="nx">root</span><span class="p">.</span><span class="nx">parent</span>
-    <span class="nv">root = </span><span class="nx">root</span><span class="p">.</span><span class="nx">parent</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Set the filename</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">root.filename = __filename = </span><span class="s2">&quot;#{options.fileName} (compiled)&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>Clear the module cache</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">root.moduleCache = </span><span class="p">{}</span> <span class="k">if</span> <span class="nx">root</span><span class="p">.</span><span class="nx">moduleCache</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>Compile</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">root</span><span class="p">.</span><span class="nx">_compile</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">),</span> <span class="nx">root</span><span class="p">.</span><span class="nx">filename</span></pre></div>             </td>           </tr>                               <tr id="section-12">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-12">#</a>               </div>               <p>Compile and evaluate a string of CoffeeScript (in a Node.js-like environment).
-The CoffeeScript REPL uses this to run the input.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.eval = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">__filename = </span><span class="nx">options</span><span class="p">.</span><span class="nx">fileName</span>
-  <span class="nv">__dirname  = </span><span class="nx">path</span><span class="p">.</span><span class="nx">dirname</span> <span class="nx">__filename</span>
-  <span class="nb">eval</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-13">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-13">#</a>               </div>               <p>Instantiate a Lexer for our use here.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">lexer = </span><span class="k">new</span> <span class="nx">Lexer</span></pre></div>             </td>           </tr>                               <tr id="section-14">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-14">#</a>               </div>               <p>The real Lexer produces a generic stream of tokens. This object provides a
-thin wrapper around it, compatible with the Jison API. We can then pass it
-directly as a "Jison lexer".</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">parser.lexer =</span>
-  <span class="nx">lex</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">token = </span><span class="nx">@tokens</span><span class="p">[</span><span class="nx">@pos</span><span class="p">]</span> <span class="o">or</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
-    <span class="nx">@pos</span> <span class="o">+=</span> <span class="mi">1</span>
-    <span class="k">this</span><span class="p">.</span><span class="nv">yylineno = </span><span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-    <span class="k">this</span><span class="p">.</span><span class="nv">yytext   = </span><span class="nx">token</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-    <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-  <span class="nx">setInput</span><span class="o">:</span> <span class="p">(</span><span class="nx">tokens</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="vi">@tokens = </span><span class="nx">tokens</span>
-    <span class="vi">@pos    = </span><span class="mi">0</span>
-  <span class="nx">upcomingInput</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="s2">&quot;&quot;</span>
-
-<span class="nv">parser.yy = </span><span class="nx">require</span> <span class="s1">&#39;./nodes&#39;</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/command.html b/node/node_modules/jade/support/coffee-script/documentation/docs/command.html
deleted file mode 100644 (file)
index d870c91..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>command.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               command.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>The <code>coffee</code> utility. Handles command-line compilation of CoffeeScript
-into various forms: saved into <code>.js</code> files or printed to stdout, piped to
-<a href="http://javascriptlint.com/">JSLint</a> or recompiled every time the source is
-saved, printed as a token stream or as the syntax tree, or launch an
-interactive REPL.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>External dependencies.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">fs             = </span><span class="nx">require</span> <span class="s1">&#39;fs&#39;</span>
-<span class="nv">path           = </span><span class="nx">require</span> <span class="s1">&#39;path&#39;</span>
-<span class="nv">optparse       = </span><span class="nx">require</span> <span class="s1">&#39;./optparse&#39;</span>
-<span class="nv">CoffeeScript   = </span><span class="nx">require</span> <span class="s1">&#39;./coffee-script&#39;</span>
-<span class="p">{</span><span class="nx">helpers</span><span class="p">}</span>      <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;./helpers&#39;</span>
-<span class="p">{</span><span class="nx">spawn</span><span class="p">,</span> <span class="nx">exec</span><span class="p">}</span>  <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;child_process&#39;</span>
-<span class="p">{</span><span class="nx">EventEmitter</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;events&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>Allow CoffeeScript to emit Node.js events, and add it to global scope.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nx">helpers</span><span class="p">.</span><span class="nx">extend</span> <span class="nx">CoffeeScript</span><span class="p">,</span> <span class="k">new</span> <span class="nx">EventEmitter</span>
-<span class="nv">global.CoffeeScript = </span><span class="nx">CoffeeScript</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>The help banner that is printed when <code>coffee</code> is called without arguments.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">BANNER = </span><span class="s1">&#39;&#39;&#39;</span>
-<span class="s1">  coffee compiles CoffeeScript source files into JavaScript.</span>
-
-<span class="s1">  Usage:</span>
-<span class="s1">    coffee path/to/script.coffee</span>
-<span class="s1">         &#39;&#39;&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>The list of all the valid option flags that <code>coffee</code> knows how to handle.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">SWITCHES = </span><span class="p">[</span>
-  <span class="p">[</span><span class="s1">&#39;-c&#39;</span><span class="p">,</span> <span class="s1">&#39;--compile&#39;</span><span class="p">,</span>         <span class="s1">&#39;compile to JavaScript and save as .js files&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-i&#39;</span><span class="p">,</span> <span class="s1">&#39;--interactive&#39;</span><span class="p">,</span>     <span class="s1">&#39;run an interactive CoffeeScript REPL&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-o&#39;</span><span class="p">,</span> <span class="s1">&#39;--output [DIR]&#39;</span><span class="p">,</span>    <span class="s1">&#39;set the directory for compiled JavaScript&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-w&#39;</span><span class="p">,</span> <span class="s1">&#39;--watch&#39;</span><span class="p">,</span>           <span class="s1">&#39;watch scripts for changes, and recompile&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-p&#39;</span><span class="p">,</span> <span class="s1">&#39;--print&#39;</span><span class="p">,</span>           <span class="s1">&#39;print the compiled JavaScript to stdout&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-l&#39;</span><span class="p">,</span> <span class="s1">&#39;--lint&#39;</span><span class="p">,</span>            <span class="s1">&#39;pipe the compiled JavaScript through JSLint&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-s&#39;</span><span class="p">,</span> <span class="s1">&#39;--stdio&#39;</span><span class="p">,</span>           <span class="s1">&#39;listen for and compile scripts over stdio&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-e&#39;</span><span class="p">,</span> <span class="s1">&#39;--eval&#39;</span><span class="p">,</span>            <span class="s1">&#39;compile a string from the command line&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-r&#39;</span><span class="p">,</span> <span class="s1">&#39;--require [FILE*]&#39;</span><span class="p">,</span> <span class="s1">&#39;require a library before executing your script&#39;</span><span class="p">]</span>
-  <span class="p">[</span>      <span class="s1">&#39;--no-wrap&#39;</span><span class="p">,</span>         <span class="s1">&#39;compile without the top-level function wrapper&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-t&#39;</span><span class="p">,</span> <span class="s1">&#39;--tokens&#39;</span><span class="p">,</span>          <span class="s1">&#39;print the tokens that the lexer produces&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-n&#39;</span><span class="p">,</span> <span class="s1">&#39;--nodes&#39;</span><span class="p">,</span>           <span class="s1">&#39;print the parse tree that Jison produces&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-v&#39;</span><span class="p">,</span> <span class="s1">&#39;--version&#39;</span><span class="p">,</span>         <span class="s1">&#39;display CoffeeScript version&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s1">&#39;-h&#39;</span><span class="p">,</span> <span class="s1">&#39;--help&#39;</span><span class="p">,</span>            <span class="s1">&#39;display this help message&#39;</span><span class="p">]</span>
-<span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Top-level objects shared by all the functions.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">opts         = </span><span class="p">{}</span>
-<span class="nv">sources      = </span><span class="p">[]</span>
-<span class="nv">optionParser = </span><span class="kc">null</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>Run <code>coffee</code> by parsing passed options and determining what action to take.
-Many flags cause us to divert before compiling anything. Flags passed after
-<code>--</code> will be passed verbatim to your script as arguments in <code>process.argv</code></p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.run = </span><span class="o">-&gt;</span>
-  <span class="nx">parseOptions</span><span class="p">()</span>
-  <span class="k">return</span> <span class="nx">usage</span><span class="p">()</span>                              <span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">help</span>
-  <span class="k">return</span> <span class="nx">version</span><span class="p">()</span>                            <span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">version</span>
-  <span class="k">return</span> <span class="nx">require</span> <span class="s1">&#39;./repl&#39;</span>                     <span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">interactive</span>
-  <span class="k">return</span> <span class="nx">compileStdio</span><span class="p">()</span>                       <span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">stdio</span>
-  <span class="k">return</span> <span class="nx">compileScript</span> <span class="s1">&#39;console&#39;</span><span class="p">,</span> <span class="nx">sources</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>  <span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nb">eval</span>
-  <span class="k">return</span> <span class="nx">require</span> <span class="s1">&#39;./repl&#39;</span>                     <span class="nx">unless</span> <span class="nx">sources</span><span class="p">.</span><span class="nx">length</span>
-  <span class="nv">separator = </span><span class="nx">sources</span><span class="p">.</span><span class="nx">indexOf</span> <span class="s1">&#39;--&#39;</span>
-  <span class="nv">flags = </span><span class="p">[]</span>
-  <span class="k">if</span> <span class="nx">separator</span> <span class="o">&gt;=</span> <span class="mi">0</span>
-    <span class="nv">flags   = </span><span class="nx">sources</span><span class="p">[(</span><span class="nx">separator</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)...</span><span class="nx">sources</span><span class="p">.</span><span class="nx">length</span><span class="p">]</span>
-    <span class="nv">sources = </span><span class="nx">sources</span><span class="p">[</span><span class="mi">0</span><span class="p">...</span><span class="nx">separator</span><span class="p">]</span>
-  <span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">run</span>
-    <span class="nv">flags   = </span><span class="nx">sources</span><span class="p">[</span><span class="mi">1</span><span class="p">..</span><span class="nx">sources</span><span class="p">.</span><span class="nx">length</span><span class="p">].</span><span class="nx">concat</span> <span class="nx">flags</span>
-    <span class="nv">sources = </span><span class="p">[</span><span class="nx">sources</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
-  <span class="nv">process.ARGV = process.argv = </span><span class="nx">flags</span>
-  <span class="nx">compileScripts</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Asynchronously read in each CoffeeScript in a list of source files and
-compile them. If a directory is passed, recursively compile all
-'.coffee' extension source files in it and all subdirectories.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">compileScripts = </span><span class="o">-&gt;</span>
-  <span class="k">for</span> <span class="nx">source</span> <span class="k">in</span> <span class="nx">sources</span>
-    <span class="nv">base = </span><span class="nx">source</span>
-    <span class="nv">compile = </span><span class="p">(</span><span class="nx">source</span><span class="p">,</span> <span class="nx">topLevel</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">path</span><span class="p">.</span><span class="nx">exists</span> <span class="nx">source</span><span class="p">,</span> <span class="p">(</span><span class="nx">exists</span><span class="p">)</span> <span class="o">-&gt;</span>
-        <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;File not found: #{source}&quot;</span> <span class="nx">unless</span> <span class="nx">exists</span>
-        <span class="nx">fs</span><span class="p">.</span><span class="nx">stat</span> <span class="nx">source</span><span class="p">,</span> <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">stats</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="k">if</span> <span class="nx">stats</span><span class="p">.</span><span class="nx">isDirectory</span><span class="p">()</span>
-            <span class="nx">fs</span><span class="p">.</span><span class="nx">readdir</span> <span class="nx">source</span><span class="p">,</span> <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">files</span><span class="p">)</span> <span class="o">-&gt;</span>
-              <span class="k">for</span> <span class="nx">file</span> <span class="k">in</span> <span class="nx">files</span>
-                <span class="nx">compile</span> <span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="nx">source</span><span class="p">,</span> <span class="nx">file</span><span class="p">)</span>
-          <span class="k">else</span> <span class="k">if</span> <span class="nx">topLevel</span> <span class="o">or</span> <span class="nx">path</span><span class="p">.</span><span class="nx">extname</span><span class="p">(</span><span class="nx">source</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;.coffee&#39;</span>
-            <span class="nx">fs</span><span class="p">.</span><span class="nx">readFile</span> <span class="nx">source</span><span class="p">,</span> <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">code</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">compileScript</span><span class="p">(</span><span class="nx">source</span><span class="p">,</span> <span class="nx">code</span><span class="p">.</span><span class="nx">toString</span><span class="p">(),</span> <span class="nx">base</span><span class="p">)</span>
-            <span class="nx">watch</span> <span class="nx">source</span><span class="p">,</span> <span class="nx">base</span> <span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">watch</span>
-    <span class="nx">compile</span> <span class="nx">source</span><span class="p">,</span> <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Compile a single source script, containing the given code, according to the
-requested options. If evaluating the script directly sets <code>__filename</code>,
-<code>__dirname</code> and <code>module.filename</code> to be correct relative to the script's path.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">compileScript = </span><span class="p">(</span><span class="nx">file</span><span class="p">,</span> <span class="nx">input</span><span class="p">,</span> <span class="nx">base</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">o = </span><span class="nx">opts</span>
-  <span class="nv">options = </span><span class="nx">compileOptions</span> <span class="nx">file</span>
-  <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">require</span>
-    <span class="nx">require</span><span class="p">(</span><span class="k">if</span> <span class="nx">helpers</span><span class="p">.</span><span class="nx">starts</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="s1">&#39;.&#39;</span><span class="p">)</span> <span class="k">then</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">realpathSync</span><span class="p">(</span><span class="nx">req</span><span class="p">)</span> <span class="k">else</span> <span class="nx">req</span><span class="p">)</span> <span class="k">for</span> <span class="nx">req</span> <span class="k">in</span> <span class="nx">o</span><span class="p">.</span><span class="nx">require</span>
-  <span class="k">try</span>
-    <span class="nv">t = task = </span><span class="p">{</span><span class="nx">file</span><span class="p">,</span> <span class="nx">input</span><span class="p">,</span> <span class="nx">options</span><span class="p">}</span>
-    <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">emit</span> <span class="s1">&#39;compile&#39;</span><span class="p">,</span> <span class="nx">task</span>
-    <span class="k">if</span>      <span class="nx">o</span><span class="p">.</span><span class="nx">tokens</span>      <span class="k">then</span> <span class="nx">printTokens</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">tokens</span> <span class="nx">t</span><span class="p">.</span><span class="nx">input</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">nodes</span>       <span class="k">then</span> <span class="nx">puts</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">nodes</span><span class="p">(</span><span class="nx">t</span><span class="p">.</span><span class="nx">input</span><span class="p">).</span><span class="nx">toString</span><span class="p">()</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">run</span>         <span class="k">then</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">run</span> <span class="nx">t</span><span class="p">.</span><span class="nx">input</span><span class="p">,</span> <span class="nx">t</span><span class="p">.</span><span class="nx">options</span>
-    <span class="k">else</span>
-      <span class="nv">t.output = </span><span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">t</span><span class="p">.</span><span class="nx">input</span><span class="p">,</span> <span class="nx">t</span><span class="p">.</span><span class="nx">options</span>
-      <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">emit</span> <span class="s1">&#39;success&#39;</span><span class="p">,</span> <span class="nx">task</span>
-      <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">print</span>          <span class="k">then</span> <span class="nx">print</span> <span class="nx">t</span><span class="p">.</span><span class="nx">output</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">compile</span>   <span class="k">then</span> <span class="nx">writeJs</span> <span class="nx">t</span><span class="p">.</span><span class="nx">file</span><span class="p">,</span> <span class="nx">t</span><span class="p">.</span><span class="nx">output</span><span class="p">,</span> <span class="nx">base</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">lint</span>      <span class="k">then</span> <span class="nx">lint</span> <span class="nx">t</span><span class="p">.</span><span class="nx">output</span>
-  <span class="k">catch</span> <span class="nx">err</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>Avoid using 'error' as it is a special event -- if there is no handler,
-node will print a stack trace and exit the program.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">emit</span> <span class="s1">&#39;failure&#39;</span><span class="p">,</span> <span class="nx">err</span><span class="p">,</span> <span class="nx">task</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">listeners</span><span class="p">(</span><span class="s1">&#39;failure&#39;</span><span class="p">).</span><span class="nx">length</span>
-    <span class="k">return</span> <span class="nx">puts</span> <span class="nx">err</span><span class="p">.</span><span class="nx">message</span> <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">watch</span>
-    <span class="nx">error</span> <span class="nx">err</span><span class="p">.</span><span class="nx">stack</span>
-    <span class="nx">process</span><span class="p">.</span><span class="nx">exit</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>Attach the appropriate listeners to compile scripts incoming over <strong>stdin</strong>,
-and write them back to <strong>stdout</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">compileStdio = </span><span class="o">-&gt;</span>
-  <span class="nv">code = </span><span class="s1">&#39;&#39;</span>
-  <span class="nv">stdin = </span><span class="nx">process</span><span class="p">.</span><span class="nx">openStdin</span><span class="p">()</span>
-  <span class="nx">stdin</span><span class="p">.</span><span class="kc">on</span> <span class="s1">&#39;data&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">buffer</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">code</span> <span class="o">+=</span> <span class="nx">buffer</span><span class="p">.</span><span class="nx">toString</span><span class="p">()</span> <span class="k">if</span> <span class="nx">buffer</span>
-  <span class="nx">stdin</span><span class="p">.</span><span class="kc">on</span> <span class="s1">&#39;end&#39;</span><span class="p">,</span> <span class="o">-&gt;</span>
-    <span class="nx">compileScript</span> <span class="s1">&#39;stdio&#39;</span><span class="p">,</span> <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-12">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-12">#</a>               </div>               <p>Watch a source CoffeeScript file using <code>fs.watchFile</code>, recompiling it every
-time the file is updated. May be used in combination with other options,
-such as <code>--lint</code> or <code>--print</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">watch = </span><span class="p">(</span><span class="nx">source</span><span class="p">,</span> <span class="nx">base</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nx">fs</span><span class="p">.</span><span class="nx">watchFile</span> <span class="nx">source</span><span class="p">,</span> <span class="p">{</span><span class="nx">persistent</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">interval</span><span class="o">:</span> <span class="mi">500</span><span class="p">},</span> <span class="p">(</span><span class="nx">curr</span><span class="p">,</span> <span class="nx">prev</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">curr</span><span class="p">.</span><span class="nx">size</span> <span class="o">is</span> <span class="nx">prev</span><span class="p">.</span><span class="nx">size</span> <span class="o">and</span> <span class="nx">curr</span><span class="p">.</span><span class="nx">mtime</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="o">is</span> <span class="nx">prev</span><span class="p">.</span><span class="nx">mtime</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span>
-    <span class="nx">fs</span><span class="p">.</span><span class="nx">readFile</span> <span class="nx">source</span><span class="p">,</span> <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">code</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">throw</span> <span class="nx">err</span> <span class="k">if</span> <span class="nx">err</span>
-      <span class="nx">compileScript</span><span class="p">(</span><span class="nx">source</span><span class="p">,</span> <span class="nx">code</span><span class="p">.</span><span class="nx">toString</span><span class="p">(),</span> <span class="nx">base</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-13">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-13">#</a>               </div>               <p>Write out a JavaScript source file with the compiled code. By default, files
-are written out in <code>cwd</code> as <code>.js</code> files with the same name, but the output
-directory can be customized with <code>--output</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">writeJs = </span><span class="p">(</span><span class="nx">source</span><span class="p">,</span> <span class="nx">js</span><span class="p">,</span> <span class="nx">base</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">filename  = </span><span class="nx">path</span><span class="p">.</span><span class="nx">basename</span><span class="p">(</span><span class="nx">source</span><span class="p">,</span> <span class="nx">path</span><span class="p">.</span><span class="nx">extname</span><span class="p">(</span><span class="nx">source</span><span class="p">))</span> <span class="o">+</span> <span class="s1">&#39;.js&#39;</span>
-  <span class="nv">srcDir    = </span><span class="nx">path</span><span class="p">.</span><span class="nx">dirname</span> <span class="nx">source</span>
-  <span class="nv">baseDir   = </span><span class="nx">srcDir</span><span class="p">.</span><span class="nx">substring</span> <span class="nx">base</span><span class="p">.</span><span class="nx">length</span>
-  <span class="nv">dir       = </span><span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">output</span> <span class="k">then</span> <span class="nx">path</span><span class="p">.</span><span class="nx">join</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">output</span><span class="p">,</span> <span class="nx">baseDir</span> <span class="k">else</span> <span class="nx">srcDir</span>
-  <span class="nv">jsPath    = </span><span class="nx">path</span><span class="p">.</span><span class="nx">join</span> <span class="nx">dir</span><span class="p">,</span> <span class="nx">filename</span>
-  <span class="nv">compile   = </span><span class="o">-&gt;</span>
-    <span class="nv">js = </span><span class="s1">&#39; &#39;</span> <span class="k">if</span> <span class="nx">js</span><span class="p">.</span><span class="nx">length</span> <span class="o">&lt;=</span> <span class="mi">0</span>
-    <span class="nx">fs</span><span class="p">.</span><span class="nx">writeFile</span> <span class="nx">jsPath</span><span class="p">,</span> <span class="nx">js</span><span class="p">,</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">puts</span> <span class="s2">&quot;Compiled #{source}&quot;</span> <span class="k">if</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">compile</span> <span class="o">and</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">watch</span>
-  <span class="nx">path</span><span class="p">.</span><span class="nx">exists</span> <span class="nx">dir</span><span class="p">,</span> <span class="p">(</span><span class="nx">exists</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">exists</span> <span class="k">then</span> <span class="nx">compile</span><span class="p">()</span> <span class="k">else</span> <span class="nx">exec</span> <span class="s2">&quot;mkdir -p #{dir}&quot;</span><span class="p">,</span> <span class="nx">compile</span></pre></div>             </td>           </tr>                               <tr id="section-14">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-14">#</a>               </div>               <p>Pipe compiled JS through JSLint (requires a working <code>jsl</code> command), printing
-any errors or warnings that arise.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">lint = </span><span class="p">(</span><span class="nx">js</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">printIt = </span><span class="p">(</span><span class="nx">buffer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">puts</span> <span class="nx">buffer</span><span class="p">.</span><span class="nx">toString</span><span class="p">().</span><span class="nx">trim</span><span class="p">()</span>
-  <span class="nv">conf = </span><span class="nx">__dirname</span> <span class="o">+</span> <span class="s1">&#39;/../extras/jsl.conf&#39;</span>
-  <span class="nv">jsl = </span><span class="nx">spawn</span> <span class="s1">&#39;jsl&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;-nologo&#39;</span><span class="p">,</span> <span class="s1">&#39;-stdin&#39;</span><span class="p">,</span> <span class="s1">&#39;-conf&#39;</span><span class="p">,</span> <span class="nx">conf</span><span class="p">]</span>
-  <span class="nx">jsl</span><span class="p">.</span><span class="nx">stdout</span><span class="p">.</span><span class="kc">on</span> <span class="s1">&#39;data&#39;</span><span class="p">,</span> <span class="nx">printIt</span>
-  <span class="nx">jsl</span><span class="p">.</span><span class="nx">stderr</span><span class="p">.</span><span class="kc">on</span> <span class="s1">&#39;data&#39;</span><span class="p">,</span> <span class="nx">printIt</span>
-  <span class="nx">jsl</span><span class="p">.</span><span class="nx">stdin</span><span class="p">.</span><span class="nx">write</span> <span class="nx">js</span>
-  <span class="nx">jsl</span><span class="p">.</span><span class="nx">stdin</span><span class="p">.</span><span class="nx">end</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-15">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-15">#</a>               </div>               <p>Pretty-print a stream of tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">printTokens = </span><span class="p">(</span><span class="nx">tokens</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">strings = </span><span class="k">for</span> <span class="nx">token</span> <span class="k">in</span> <span class="nx">tokens</span>
-    <span class="p">[</span><span class="nx">tag</span><span class="p">,</span> <span class="nx">value</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">token</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">toString</span><span class="p">().</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\n/</span><span class="p">,</span> <span class="s1">&#39;\\n&#39;</span><span class="p">)]</span>
-    <span class="s2">&quot;[#{tag} #{value}]&quot;</span>
-  <span class="nx">puts</span> <span class="nx">strings</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-16">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-16">#</a>               </div>               <p>Use the <a href="optparse.html">OptionParser module</a> to extract all options from
-<code>process.argv</code> that are specified in <code>SWITCHES</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">parseOptions = </span><span class="o">-&gt;</span>
-  <span class="nv">optionParser  = </span><span class="k">new</span> <span class="nx">optparse</span><span class="p">.</span><span class="nx">OptionParser</span> <span class="nx">SWITCHES</span><span class="p">,</span> <span class="nx">BANNER</span>
-  <span class="nv">o = opts      = </span><span class="nx">optionParser</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">process</span><span class="p">.</span><span class="nx">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">...</span><span class="nx">process</span><span class="p">.</span><span class="nx">argv</span><span class="p">.</span><span class="nx">length</span><span class="p">])</span>
-  <span class="nx">o</span><span class="p">.</span><span class="nx">compile</span>     <span class="o">or=</span>  <span class="o">!!</span><span class="nx">o</span><span class="p">.</span><span class="nx">output</span>
-  <span class="nv">o.run         = </span><span class="o">not</span> <span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">compile</span> <span class="o">or</span> <span class="nx">o</span><span class="p">.</span><span class="nx">print</span> <span class="o">or</span> <span class="nx">o</span><span class="p">.</span><span class="nx">lint</span><span class="p">)</span>
-  <span class="nv">o.print       = </span><span class="o">!!</span>  <span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">print</span> <span class="o">or</span> <span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nb">eval</span> <span class="o">or</span> <span class="nx">o</span><span class="p">.</span><span class="nx">stdio</span> <span class="o">and</span> <span class="nx">o</span><span class="p">.</span><span class="nx">compile</span><span class="p">))</span>
-  <span class="nv">sources       = </span><span class="nx">o</span><span class="p">.</span><span class="nx">arguments</span></pre></div>             </td>           </tr>                               <tr id="section-17">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-17">#</a>               </div>               <p>The compile-time options to pass to the CoffeeScript compiler.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">compileOptions = </span><span class="p">(</span><span class="nx">fileName</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">o = </span><span class="p">{</span><span class="nx">fileName</span><span class="p">}</span>
-  <span class="nv">o.noWrap = </span><span class="nx">opts</span><span class="p">[</span><span class="s1">&#39;no-wrap&#39;</span><span class="p">]</span>
-  <span class="nx">o</span></pre></div>             </td>           </tr>                               <tr id="section-18">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-18">#</a>               </div>               <p>Print the <code>--help</code> usage message and exit.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">usage = </span><span class="o">-&gt;</span>
-  <span class="nx">puts</span> <span class="nx">optionParser</span><span class="p">.</span><span class="nx">help</span><span class="p">()</span>
-  <span class="nx">process</span><span class="p">.</span><span class="nx">exit</span> <span class="mi">0</span></pre></div>             </td>           </tr>                               <tr id="section-19">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-19">#</a>               </div>               <p>Print the <code>--version</code> message and exit.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">version = </span><span class="o">-&gt;</span>
-  <span class="nx">puts</span> <span class="s2">&quot;CoffeeScript version #{CoffeeScript.VERSION}&quot;</span>
-  <span class="nx">process</span><span class="p">.</span><span class="nx">exit</span> <span class="mi">0</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/docco.css b/node/node_modules/jade/support/coffee-script/documentation/docs/docco.css
deleted file mode 100644 (file)
index 1ddec89..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*--------------------- Layout and Typography ----------------------------*/
-body {
-  font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
-  font-size: 16px;
-  line-height: 24px;
-  color: #252519;
-  margin: 0; padding: 0;
-}
-a {
-  color: #261a3b;
-}
-  a:visited {
-    color: #261a3b;
-  }
-p {
-  margin: 0 0 15px 0;
-}
-h1, h2, h3, h4, h5, h6 {
-  margin: 40px 0 15px 0;
-}
-  h3, h4, h5, h6 {
-    margin-top: 20px;
-  }
-#container {
-  position: relative;
-}
-#background {
-  position: fixed;
-  top: 0; left: 575px; right: 0; bottom: 0;
-  background: #f5f5ff;
-  border-left: 1px solid #e5e5ee;
-  z-index: -1;
-}
-#jump_to, #jump_page {
-  background: white;
-  -webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777;
-  -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px;
-  font: 10px Arial;
-  text-transform: uppercase;
-  cursor: pointer;
-  text-align: right;
-}
-#jump_to, #jump_wrapper {
-  position: fixed;
-  right: 0; top: 0;
-  padding: 5px 10px;
-}
-  #jump_wrapper {
-    padding: 0;
-    display: none;
-  }
-    #jump_to:hover #jump_wrapper {
-      display: block;
-    }
-    #jump_page {
-      padding: 5px 0 3px;
-      margin: 0 0 25px 25px;
-    }
-      #jump_page .source {
-        display: block;
-        padding: 5px 10px;
-        text-decoration: none;
-        border-top: 1px solid #eee;
-      }
-        #jump_page .source:hover {
-          background: #f5f5ff;
-        }
-        #jump_page .source:first-child {
-        }
-table td {
-  border: 0;
-  outline: 0;
-}
-  td.docs, th.docs {
-    max-width: 500px;
-    min-width: 500px;
-    min-height: 5px;
-    padding: 10px 25px 1px 50px;
-    vertical-align: top;
-    text-align: left;
-  }
-    .docs pre {
-      margin: 15px 0 15px;
-      padding-left: 15px;
-    }
-    .docs p tt, .docs p code {
-      background: #f8f8ff;
-      border: 1px solid #dedede;
-      font-size: 12px;
-      padding: 0 0.2em;
-    }
-    .octowrap {
-      position: relative;
-    }
-      .octothorpe {
-        font: 12px Arial;
-        text-decoration: none;
-        color: #454545;
-        position: absolute;
-        top: 3px; left: -20px;
-        padding: 1px 2px;
-        opacity: 0;
-        -webkit-transition: opacity 0.2s linear;
-      }
-        td.docs:hover .octothorpe {
-          opacity: 1;
-        }
-  td.code, th.code {
-    padding: 14px 15px 16px 50px;
-    width: 100%;
-    vertical-align: top;
-    background: #f5f5ff;
-    border-left: 1px solid #e5e5ee;
-  }
-    pre, tt, code {
-      font-size: 12px; line-height: 18px;
-      font-family: Monaco, Consolas, "Lucida Console", monospace;
-      margin: 0; padding: 0;
-    }
-
-
-/*---------------------- Syntax Highlighting -----------------------------*/
-td.linenos { background-color: #f0f0f0; padding-right: 10px; }
-span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
-body .hll { background-color: #ffffcc }
-body .c { color: #408080; font-style: italic }  /* Comment */
-body .err { border: 1px solid #FF0000 }         /* Error */
-body .k { color: #954121 }                      /* Keyword */
-body .o { color: #666666 }                      /* Operator */
-body .cm { color: #408080; font-style: italic } /* Comment.Multiline */
-body .cp { color: #BC7A00 }                     /* Comment.Preproc */
-body .c1 { color: #408080; font-style: italic } /* Comment.Single */
-body .cs { color: #408080; font-style: italic } /* Comment.Special */
-body .gd { color: #A00000 }                     /* Generic.Deleted */
-body .ge { font-style: italic }                 /* Generic.Emph */
-body .gr { color: #FF0000 }                     /* Generic.Error */
-body .gh { color: #000080; font-weight: bold }  /* Generic.Heading */
-body .gi { color: #00A000 }                     /* Generic.Inserted */
-body .go { color: #808080 }                     /* Generic.Output */
-body .gp { color: #000080; font-weight: bold }  /* Generic.Prompt */
-body .gs { font-weight: bold }                  /* Generic.Strong */
-body .gu { color: #800080; font-weight: bold }  /* Generic.Subheading */
-body .gt { color: #0040D0 }                     /* Generic.Traceback */
-body .kc { color: #954121 }                     /* Keyword.Constant */
-body .kd { color: #954121; font-weight: bold }  /* Keyword.Declaration */
-body .kn { color: #954121; font-weight: bold }  /* Keyword.Namespace */
-body .kp { color: #954121 }                     /* Keyword.Pseudo */
-body .kr { color: #954121; font-weight: bold }  /* Keyword.Reserved */
-body .kt { color: #B00040 }                     /* Keyword.Type */
-body .m { color: #666666 }                      /* Literal.Number */
-body .s { color: #219161 }                      /* Literal.String */
-body .na { color: #7D9029 }                     /* Name.Attribute */
-body .nb { color: #954121 }                     /* Name.Builtin */
-body .nc { color: #0000FF; font-weight: bold }  /* Name.Class */
-body .no { color: #880000 }                     /* Name.Constant */
-body .nd { color: #AA22FF }                     /* Name.Decorator */
-body .ni { color: #999999; font-weight: bold }  /* Name.Entity */
-body .ne { color: #D2413A; font-weight: bold }  /* Name.Exception */
-body .nf { color: #0000FF }                     /* Name.Function */
-body .nl { color: #A0A000 }                     /* Name.Label */
-body .nn { color: #0000FF; font-weight: bold }  /* Name.Namespace */
-body .nt { color: #954121; font-weight: bold }  /* Name.Tag */
-body .nv { color: #19469D }                     /* Name.Variable */
-body .ow { color: #AA22FF; font-weight: bold }  /* Operator.Word */
-body .w { color: #bbbbbb }                      /* Text.Whitespace */
-body .mf { color: #666666 }                     /* Literal.Number.Float */
-body .mh { color: #666666 }                     /* Literal.Number.Hex */
-body .mi { color: #666666 }                     /* Literal.Number.Integer */
-body .mo { color: #666666 }                     /* Literal.Number.Oct */
-body .sb { color: #219161 }                     /* Literal.String.Backtick */
-body .sc { color: #219161 }                     /* Literal.String.Char */
-body .sd { color: #219161; font-style: italic } /* Literal.String.Doc */
-body .s2 { color: #219161 }                     /* Literal.String.Double */
-body .se { color: #BB6622; font-weight: bold }  /* Literal.String.Escape */
-body .sh { color: #219161 }                     /* Literal.String.Heredoc */
-body .si { color: #BB6688; font-weight: bold }  /* Literal.String.Interpol */
-body .sx { color: #954121 }                     /* Literal.String.Other */
-body .sr { color: #BB6688 }                     /* Literal.String.Regex */
-body .s1 { color: #219161 }                     /* Literal.String.Single */
-body .ss { color: #19469D }                     /* Literal.String.Symbol */
-body .bp { color: #954121 }                     /* Name.Builtin.Pseudo */
-body .vc { color: #19469D }                     /* Name.Variable.Class */
-body .vg { color: #19469D }                     /* Name.Variable.Global */
-body .vi { color: #19469D }                     /* Name.Variable.Instance */
-body .il { color: #666666 }                     /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/grammar.html b/node/node_modules/jade/support/coffee-script/documentation/docs/grammar.html
deleted file mode 100644 (file)
index 0154097..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>grammar.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               grammar.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>The CoffeeScript parser is generated by <a href="http://github.com/zaach/jison">Jison</a>
-from this grammar file. Jison is a bottom-up parser generator, similar in
-style to <a href="http://www.gnu.org/software/bison">Bison</a>, implemented in JavaScript.
-It can recognize <a href="http://en.wikipedia.org/wiki/LR_grammar">LALR(1), LR(0), SLR(1), and LR(1)</a>
-type grammars. To create the Jison parser, we list the pattern to match
-on the left-hand side, and the action to take (usually the creation of syntax
-tree nodes) on the right. As the parser runs, it
-shifts tokens from our token stream, from left to right, and
-<a href="http://en.wikipedia.org/wiki/Bottom-up_parsing">attempts to match</a>
-the token sequence against the rules below. When a match can be made, it
-reduces into the <a href="http://en.wikipedia.org/wiki/Terminal_and_nonterminal_symbols">nonterminal</a>
-(the enclosing name at the top), and we proceed from there.</p>
-
-<p>If you run the <code>cake build:parser</code> command, Jison constructs a parse table
-from our rules and saves it into <code>lib/parser.js</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>The only dependency is on the <strong>Jison.Parser</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">Parser = </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;jison&#39;</span><span class="p">).</span><span class="nx">Parser</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <h2>Jison DSL</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Since we're going to be wrapped in a function by Jison in any case, if our
-action immediately returns a value, we can optimize by removing the function
-wrapper and just returning the value directly.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">unwrap = </span><span class="sr">/function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Our handy DSL for Jison grammar generation, thanks to
-<a href="http://github.com/creationix">Tim Caswell</a>. For every rule in the grammar,
-we pass the pattern-defining string, the action to run, and extra options,
-optionally. If no action is specified, we simply pass the value of the
-previous nonterminal.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">o = </span><span class="p">(</span><span class="nx">patternString</span><span class="p">,</span> <span class="nx">action</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="k">return</span> <span class="p">[</span><span class="nx">patternString</span><span class="p">,</span> <span class="s1">&#39;$$ = $1;&#39;</span><span class="p">,</span> <span class="nx">options</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">action</span>
-  <span class="nv">action = </span><span class="k">if</span> <span class="nv">match = </span><span class="p">(</span><span class="nx">action</span> <span class="o">+</span> <span class="s1">&#39;&#39;</span><span class="p">).</span><span class="nx">match</span><span class="p">(</span><span class="nx">unwrap</span><span class="p">)</span> <span class="k">then</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;(#{action}())&quot;</span>
-  <span class="nv">action = </span><span class="nx">action</span><span class="p">.</span><span class="nx">replace</span> <span class="sr">/\b(?:[A-Z][a-z]+Node|Expressions)\b/g</span><span class="p">,</span> <span class="s1">&#39;yy.$&amp;&#39;</span>
-  <span class="p">[</span><span class="nx">patternString</span><span class="p">,</span> <span class="s2">&quot;$$ = #{action};&quot;</span><span class="p">,</span> <span class="nx">options</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <h2>Grammatical Rules</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>In all of the rules that follow, you'll see the name of the nonterminal as
-the key to a list of alternative matches. With each match's action, the
-dollar-sign variables are provided by Jison as references to the value of
-their numeric position, so in this rule:</p>
-
-<pre><code>"Expression UNLESS Expression"
-</code></pre>
-
-<p><code>$1</code> would be the value of the first <code>Expression</code>, <code>$2</code> would be the token
-for the <code>UNLESS</code> terminal, and <code>$3</code> would be the value of the second
-<code>Expression</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">grammar =</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>The <strong>Root</strong> is the top-level node in the syntax tree. Since we parse bottom-up,
-all parsing must end here.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Root</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>                                       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">Expressions</span>
-    <span class="nx">o</span> <span class="s2">&quot;TERMINATOR&quot;</span><span class="p">,</span>                             <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">Expressions</span>
-    <span class="nx">o</span> <span class="s2">&quot;Body&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Block TERMINATOR&quot;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Any list of statements and expressions, seperated by line breaks or semicolons.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Body</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Line&quot;</span><span class="p">,</span>                                   <span class="o">-&gt;</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;Body TERMINATOR Line&quot;</span><span class="p">,</span>                   <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">push</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Body TERMINATOR&quot;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>Expressions and statements, which make up a line in a body.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Line</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Statement&quot;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>Pure statements which cannot be expressions.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Statement</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Return&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Throw&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;BREAK&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;CONTINUE&quot;</span><span class="p">,</span>                               <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;DEBUGGER&quot;</span><span class="p">,</span>                               <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-12">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-12">#</a>               </div>               <p>All the different types of expressions in our language. The basic unit of
-CoffeeScript is the <strong>Expression</strong> -- everything that can be an expression
-is one. Expressions serve as the building blocks of many other rules, making
-them somewhat circular.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Expression</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Value&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Call&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Code&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Operation&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Assign&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;If&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Try&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;While&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;For&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Switch&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Extends&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Class&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Existence&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Comment&quot;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-13">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-13">#</a>               </div>               <p>An indented block of expressions. Note that the <a href="rewriter.html">Rewriter</a>
-will convert some postfix forms into blocks for us, by adjusting the
-token stream.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Block</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDENT Body OUTDENT&quot;</span><span class="p">,</span>                    <span class="o">-&gt;</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDENT OUTDENT&quot;</span><span class="p">,</span>                         <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">Expressions</span>
-    <span class="nx">o</span> <span class="s2">&quot;TERMINATOR Comment&quot;</span><span class="p">,</span>                     <span class="o">-&gt;</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span> <span class="p">[</span><span class="nx">$2</span><span class="p">]</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-14">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-14">#</a>               </div>               <p>A literal identifier, a variable name or property.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Identifier</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;IDENTIFIER&quot;</span><span class="p">,</span>                             <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-15">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-15">#</a>               </div>               <p>Alphanumerics are separated from the other <strong>Literal</strong> matchers because
-they can also serve as keys in object literals.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">AlphaNumeric</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;NUMBER&quot;</span><span class="p">,</span>                                 <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;STRING&quot;</span><span class="p">,</span>                                 <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-16">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-16">#</a>               </div>               <p>All of our immediate values. These can (in general), be passed straight
-through and printed to JavaScript.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Literal</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;AlphaNumeric&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;JS&quot;</span><span class="p">,</span>                                     <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;REGEX&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;TRUE&quot;</span><span class="p">,</span>                                   <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;FALSE&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="kc">false</span>
-    <span class="nx">o</span> <span class="s2">&quot;YES&quot;</span><span class="p">,</span>                                    <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span>                                     <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="kc">false</span>
-    <span class="nx">o</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span>                                     <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;OFF&quot;</span><span class="p">,</span>                                    <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="kc">false</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-17">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-17">#</a>               </div>               <p>Assignment of a variable, property, or index to a value.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Assign</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Assignable = Expression&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Assignable = INDENT Expression OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$4</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-18">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-18">#</a>               </div>               <p>Assignment when it happens within an object literal. The difference from
-the ordinary <strong>Assign</strong> is that these allow numbers and strings as keys.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">AssignObj</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Identifier&quot;</span><span class="p">,</span>                             <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;AlphaNumeric&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Identifier : Expression&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$3</span><span class="p">,</span> <span class="s1">&#39;object&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;AlphaNumeric : Expression&quot;</span><span class="p">,</span>              <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$3</span><span class="p">,</span> <span class="s1">&#39;object&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Identifier : INDENT Expression OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$4</span><span class="p">,</span> <span class="s1">&#39;object&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;AlphaNumeric : INDENT Expression OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$4</span><span class="p">,</span> <span class="s1">&#39;object&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Comment&quot;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-19">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-19">#</a>               </div>               <p>A return statement from a function body.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Return</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;RETURN Expression&quot;</span><span class="p">,</span>                      <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ReturnNode</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;RETURN&quot;</span><span class="p">,</span>                                 <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ReturnNode</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="s1">&#39;null&#39;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-20">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-20">#</a>               </div>               <p>A block comment.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Comment</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;HERECOMMENT&quot;</span><span class="p">,</span>                            <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">CommentNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-21">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-21">#</a>               </div>               <p><a href="http://jashkenas.github.com/coffee-script/#existence">The existential operator</a>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Existence</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression ?&quot;</span><span class="p">,</span>                           <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ExistenceNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-22">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-22">#</a>               </div>               <p>The <strong>Code</strong> node is the function literal. It's defined by an indented block
-of <strong>Expressions</strong> preceded by a function arrow, with an optional parameter
-list.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Code</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;PARAM_START ParamList PARAM_END FuncGlyph Block&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">CodeNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$5</span><span class="p">,</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;FuncGlyph Block&quot;</span><span class="p">,</span>                        <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">CodeNode</span> <span class="p">[],</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-23">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-23">#</a>               </div>               <p>CoffeeScript has two different symbols for functions. <code>-&gt;</code> is for ordinary
-functions, and <code>=&gt;</code> is for functions bound to the current value of <em>this</em>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">FuncGlyph</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">,</span>                                     <span class="o">-&gt;</span> <span class="s1">&#39;func&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">,</span>                                     <span class="o">-&gt;</span> <span class="s1">&#39;boundfunc&#39;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-24">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-24">#</a>               </div>               <p>An optional, trailing comma.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">OptComma</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s1">&#39;&#39;</span>
-    <span class="nx">o</span> <span class="s1">&#39;,&#39;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-25">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-25">#</a>               </div>               <p>The list of parameters that a function accepts can be of any length.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ParamList</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>                                       <span class="o">-&gt;</span> <span class="p">[]</span>
-    <span class="nx">o</span> <span class="s2">&quot;Param&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ParamList , Param&quot;</span><span class="p">,</span>                      <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="p">[</span><span class="nx">$3</span><span class="p">]</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-26">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-26">#</a>               </div>               <p>A single parameter in a function definition can be ordinary, or a splat
-that hoovers up the remaining arguments.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Param</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;PARAM&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;@ PARAM&quot;</span><span class="p">,</span>                                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ParamNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;PARAM . . .&quot;</span><span class="p">,</span>                            <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ParamNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;@ PARAM . . .&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ParamNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="kc">true</span><span class="p">,</span> <span class="kc">true</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-27">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-27">#</a>               </div>               <p>A splat that occurs outside of a parameter list.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Splat</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression . . .&quot;</span><span class="p">,</span>                       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">SplatNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-28">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-28">#</a>               </div>               <p>Variables and properties that can be assigned to.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">SimpleAssignable</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Identifier&quot;</span><span class="p">,</span>                             <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;Value Accessor&quot;</span><span class="p">,</span>                         <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">push</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;Invocation Accessor&quot;</span><span class="p">,</span>                    <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="p">[</span><span class="nx">$2</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ThisProperty&quot;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-29">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-29">#</a>               </div>               <p>Everything that can be assigned to.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Assignable</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;SimpleAssignable&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;Object&quot;</span><span class="p">,</span>                                 <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-30">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-30">#</a>               </div>               <p>The types of things that can be treated as values -- assigned to, invoked
-as functions, indexed into, named as a class, etc.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Value</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Assignable&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Literal&quot;</span><span class="p">,</span>                                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;Parenthetical&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;Range&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;This&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span>                                   <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="s1">&#39;null&#39;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-31">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-31">#</a>               </div>               <p>The general group of accessors into an object, by property, by prototype
-or by array index or slice.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Accessor</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;PROPERTY_ACCESS Identifier&quot;</span><span class="p">,</span>             <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AccessorNode</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;PROTOTYPE_ACCESS Identifier&quot;</span><span class="p">,</span>            <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AccessorNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="s1">&#39;prototype&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;::&quot;</span><span class="p">,</span>                                     <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="k">new</span> <span class="nx">LiteralNode</span><span class="p">(</span><span class="s1">&#39;prototype&#39;</span><span class="p">))</span>
-    <span class="nx">o</span> <span class="s2">&quot;SOAK_ACCESS Identifier&quot;</span><span class="p">,</span>                 <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AccessorNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="s1">&#39;soak&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Index&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Slice&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">SliceNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-32">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-32">#</a>               </div>               <p>Indexing into an object or array using bracket notation.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Index</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDEX_START Expression INDEX_END&quot;</span><span class="p">,</span>       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">IndexNode</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDEX_SOAK Index&quot;</span><span class="p">,</span>                       <span class="o">-&gt;</span> <span class="nv">$2.soakNode = </span><span class="kc">yes</span><span class="p">;</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDEX_PROTO Index&quot;</span><span class="p">,</span>                      <span class="o">-&gt;</span> <span class="nv">$2.proto = </span><span class="kc">yes</span><span class="p">;</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-33">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-33">#</a>               </div>               <p>In CoffeeScript, an object literal is simply a list of assignments.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nb">Object</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;{ AssignList OptComma }&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ObjectNode</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-34">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-34">#</a>               </div>               <p>Assignment of properties within an object literal can be separated by
-comma, as in JavaScript, or simply by newline.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">AssignList</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>                                       <span class="o">-&gt;</span> <span class="p">[]</span>
-    <span class="nx">o</span> <span class="s2">&quot;AssignObj&quot;</span><span class="p">,</span>                              <span class="o">-&gt;</span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;AssignList , AssignObj&quot;</span><span class="p">,</span>                 <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="p">[</span><span class="nx">$3</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;AssignList OptComma TERMINATOR AssignObj&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="p">[</span><span class="nx">$4</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;AssignList OptComma INDENT AssignList OptComma OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">$4</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-35">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-35">#</a>               </div>               <p>Class definitions have optional bodies of prototype property assignments,
-and optional references to the superclass.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Class</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;CLASS SimpleAssignable&quot;</span><span class="p">,</span>                 <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ClassNode</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;CLASS SimpleAssignable EXTENDS Value&quot;</span><span class="p">,</span>   <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ClassNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;CLASS SimpleAssignable INDENT ClassBody OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ClassNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;CLASS SimpleAssignable EXTENDS Value INDENT ClassBody OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ClassNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$4</span><span class="p">,</span> <span class="nx">$6</span>
-    <span class="nx">o</span> <span class="s2">&quot;CLASS INDENT ClassBody OUTDENT&quot;</span><span class="p">,</span>         <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ClassNode</span> <span class="s1">&#39;__temp__&#39;</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">$3</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-36">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-36">#</a>               </div>               <p>Assignments that can happen directly inside a class declaration.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ClassAssign</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;AssignObj&quot;</span><span class="p">,</span>                              <span class="o">-&gt;</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;ThisProperty : Expression&quot;</span><span class="p">,</span>              <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$3</span><span class="p">,</span> <span class="s1">&#39;this&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;ThisProperty : INDENT Expression OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$4</span><span class="p">,</span> <span class="s1">&#39;this&#39;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-37">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-37">#</a>               </div>               <p>A list of assignments to a class.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ClassBody</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>                                       <span class="o">-&gt;</span> <span class="p">[]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ClassAssign&quot;</span><span class="p">,</span>                            <span class="o">-&gt;</span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ClassBody TERMINATOR ClassAssign&quot;</span><span class="p">,</span>       <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;{ ClassBody }&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-38">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-38">#</a>               </div>               <p>The two flavors of function call: normal, and object instantiation with <code>new</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Call</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Invocation&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;NEW Invocation&quot;</span><span class="p">,</span>                         <span class="o">-&gt;</span> <span class="nx">$2</span><span class="p">.</span><span class="nx">newInstance</span><span class="p">()</span>
-    <span class="nx">o</span> <span class="s2">&quot;NEW Value&quot;</span><span class="p">,</span>                              <span class="o">-&gt;</span> <span class="p">(</span><span class="k">new</span> <span class="nx">CallNode</span><span class="p">(</span><span class="nx">$2</span><span class="p">,</span> <span class="p">[])).</span><span class="nx">newInstance</span><span class="p">()</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-39">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-39">#</a>               </div>               <p>Extending an object by setting its prototype chain to reference a parent
-object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Extends</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;SimpleAssignable EXTENDS Value&quot;</span><span class="p">,</span>         <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ExtendsNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-40">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-40">#</a>               </div>               <p>Ordinary function invocation, or a chained series of calls.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Invocation</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Value OptFuncExist Arguments&quot;</span><span class="p">,</span>           <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">CallNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;Invocation OptFuncExist Arguments&quot;</span><span class="p">,</span>      <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">CallNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;SUPER&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">CallNode</span> <span class="s1">&#39;super&#39;</span><span class="p">,</span> <span class="p">[</span><span class="k">new</span> <span class="nx">SplatNode</span><span class="p">(</span><span class="k">new</span> <span class="nx">LiteralNode</span><span class="p">(</span><span class="s1">&#39;arguments&#39;</span><span class="p">))]</span>
-    <span class="nx">o</span> <span class="s2">&quot;SUPER Arguments&quot;</span><span class="p">,</span>                        <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">CallNode</span> <span class="s1">&#39;super&#39;</span><span class="p">,</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-41">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-41">#</a>               </div>               <p>An optional existence check on a function.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">OptFuncExist</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>                                       <span class="o">-&gt;</span> <span class="kc">no</span>
-    <span class="nx">o</span> <span class="s2">&quot;FUNC_EXIST&quot;</span><span class="p">,</span>                             <span class="o">-&gt;</span> <span class="kc">yes</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-42">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-42">#</a>               </div>               <p>The list of arguments to a function call.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Arguments</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;CALL_START CALL_END&quot;</span><span class="p">,</span>                    <span class="o">-&gt;</span> <span class="p">[]</span>
-    <span class="nx">o</span> <span class="s2">&quot;CALL_START ArgList OptComma CALL_END&quot;</span><span class="p">,</span>   <span class="o">-&gt;</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-43">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-43">#</a>               </div>               <p>A reference to the <em>this</em> current object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">This</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;THIS&quot;</span><span class="p">,</span>                                   <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="s1">&#39;this&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;@&quot;</span><span class="p">,</span>                                      <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="s1">&#39;this&#39;</span>
-  <span class="p">]</span>
-
-  <span class="nx">RangeDots</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;. .&quot;</span><span class="p">,</span>                                    <span class="o">-&gt;</span> <span class="s1">&#39;inclusive&#39;</span>
-    <span class="nx">o</span> <span class="s2">&quot;. . .&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="s1">&#39;exclusive&#39;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-44">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-44">#</a>               </div>               <p>A reference to a property on <em>this</em>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ThisProperty</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;@ Identifier&quot;</span><span class="p">,</span>                           <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="k">new</span> <span class="nx">LiteralNode</span><span class="p">(</span><span class="s1">&#39;this&#39;</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">$2</span><span class="p">)]</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-45">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-45">#</a>               </div>               <p>The CoffeeScript range literal.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Range</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;[ Expression RangeDots Expression ]&quot;</span><span class="p">,</span>    <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">RangeNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$4</span><span class="p">,</span> <span class="nx">$3</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-46">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-46">#</a>               </div>               <p>The slice literal.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Slice</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDEX_START Expression RangeDots Expression INDEX_END&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">RangeNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$4</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDEX_START Expression RangeDots INDEX_END&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">RangeNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDEX_START RangeDots Expression INDEX_END&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">RangeNode</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-47">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-47">#</a>               </div>               <p>The array literal.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nb">Array</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;[ ]&quot;</span><span class="p">,</span>                                    <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ArrayNode</span> <span class="p">[]</span>
-    <span class="nx">o</span> <span class="s2">&quot;[ ArgList OptComma ]&quot;</span><span class="p">,</span>                   <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ArrayNode</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-48">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-48">#</a>               </div>               <p>The <strong>ArgList</strong> is both the list of objects passed into a function call,
-as well as the contents of an array literal
-(i.e. comma-separated expressions). Newlines work as well.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ArgList</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Arg&quot;</span><span class="p">,</span>                                    <span class="o">-&gt;</span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ArgList , Arg&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="p">[</span><span class="nx">$3</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ArgList OptComma TERMINATOR Arg&quot;</span><span class="p">,</span>        <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="p">[</span><span class="nx">$4</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;INDENT ArgList OptComma OUTDENT&quot;</span><span class="p">,</span>        <span class="o">-&gt;</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;ArgList OptComma INDENT ArgList OptComma OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">$4</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-49">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-49">#</a>               </div>               <p>Valid arguments are Expressions or Splats.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Arg</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Splat&quot;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-50">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-50">#</a>               </div>               <p>Just simple, comma-separated, required arguments (no fancy syntax). We need
-this to be separate from the <strong>ArgList</strong> for use in <strong>Switch</strong> blocks, where
-having the newlines wouldn't make sense.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">SimpleArgs</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;SimpleArgs , Expression&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span>
-      <span class="k">if</span> <span class="nx">$1</span> <span class="k">instanceof</span> <span class="nb">Array</span> <span class="k">then</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span><span class="p">([</span><span class="nx">$3</span><span class="p">])</span> <span class="k">else</span> <span class="p">[</span><span class="nx">$1</span><span class="p">].</span><span class="nx">concat</span><span class="p">([</span><span class="nx">$3</span><span class="p">])</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-51">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-51">#</a>               </div>               <p>The variants of <em>try/catch/finally</em> exception handling blocks.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Try</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;TRY Block Catch&quot;</span><span class="p">,</span>                        <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">TryNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$3</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">$3</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;TRY Block FINALLY Block&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">TryNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;TRY Block Catch FINALLY Block&quot;</span><span class="p">,</span>          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">TryNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$3</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">$3</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="nx">$5</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-52">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-52">#</a>               </div>               <p>A catch clause names its error and runs a block of code.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Catch</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;CATCH Identifier Block&quot;</span><span class="p">,</span>                 <span class="o">-&gt;</span> <span class="p">[</span><span class="nx">$2</span><span class="p">,</span> <span class="nx">$3</span><span class="p">]</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-53">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-53">#</a>               </div>               <p>Throw an exception object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Throw</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;THROW Expression&quot;</span><span class="p">,</span>                       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ThrowNode</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-54">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-54">#</a>               </div>               <p>Parenthetical expressions. Note that the <strong>Parenthetical</strong> is a <strong>Value</strong>,
-not an <strong>Expression</strong>, so if you need to use an expression in a place
-where only values are accepted, wrapping it in parentheses will always do
-the trick.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Parenthetical</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;( Line )&quot;</span><span class="p">,</span>                               <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;( )&quot;</span><span class="p">,</span>                                    <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="k">new</span> <span class="nx">LiteralNode</span> <span class="s1">&#39;&#39;</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-55">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-55">#</a>               </div>               <p>The condition portion of a while loop.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">WhileSource</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;WHILE Expression&quot;</span><span class="p">,</span>                       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">WhileNode</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;WHILE Expression WHEN Expression&quot;</span><span class="p">,</span>       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">WhileNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">guard</span><span class="o">:</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;UNTIL Expression&quot;</span><span class="p">,</span>                       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">WhileNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">invert</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;UNTIL Expression WHEN Expression&quot;</span><span class="p">,</span>       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">WhileNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">invert</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">guard</span><span class="o">:</span> <span class="nx">$4</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-56">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-56">#</a>               </div>               <p>The while loop can either be normal, with a block of expressions to execute,
-or postfix, with a single expression. There is no do..while.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">While</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;WhileSource Block&quot;</span><span class="p">,</span>                      <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">addBody</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;Statement WhileSource&quot;</span><span class="p">,</span>                  <span class="o">-&gt;</span> <span class="nx">$2</span><span class="p">.</span><span class="nx">addBody</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression WhileSource&quot;</span><span class="p">,</span>                 <span class="o">-&gt;</span> <span class="nx">$2</span><span class="p">.</span><span class="nx">addBody</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;Loop&quot;</span><span class="p">,</span>                                   <span class="o">-&gt;</span> <span class="nx">$1</span>
-  <span class="p">]</span>
-
-  <span class="nx">Loop</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;LOOP Block&quot;</span><span class="p">,</span>                             <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">WhileNode</span><span class="p">(</span><span class="k">new</span> <span class="nx">LiteralNode</span> <span class="s1">&#39;true&#39;</span><span class="p">).</span><span class="nx">addBody</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;LOOP Expression&quot;</span><span class="p">,</span>                        <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">WhileNode</span><span class="p">(</span><span class="k">new</span> <span class="nx">LiteralNode</span> <span class="s1">&#39;true&#39;</span><span class="p">).</span><span class="nx">addBody</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span> <span class="p">[</span><span class="nx">$2</span><span class="p">]</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-57">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-57">#</a>               </div>               <p>Array, object, and range comprehensions, at the most generic level.
-Comprehensions can either be normal, with a block of expressions to execute,
-or postfix, with a single expression.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">For</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Statement ForBody&quot;</span><span class="p">,</span>                      <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ForNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$2</span><span class="p">.</span><span class="nx">vars</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">$2</span><span class="p">.</span><span class="nx">vars</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression ForBody&quot;</span><span class="p">,</span>                     <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ForNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$2</span><span class="p">.</span><span class="nx">vars</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">$2</span><span class="p">.</span><span class="nx">vars</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ForBody Block&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ForNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">vars</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">vars</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-  <span class="p">]</span>
-
-  <span class="nx">ForBody</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;FOR Range&quot;</span><span class="p">,</span>                              <span class="o">-&gt;</span> <span class="nx">source</span><span class="o">:</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$2</span><span class="p">),</span> <span class="nx">vars</span><span class="o">:</span> <span class="p">[]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ForStart ForSource&quot;</span><span class="p">,</span>                     <span class="o">-&gt;</span> <span class="nv">$2.raw = </span><span class="nx">$1</span><span class="p">.</span><span class="nx">raw</span><span class="p">;</span> <span class="nv">$2.vars = </span><span class="nx">$1</span><span class="p">;</span> <span class="nx">$2</span>
-  <span class="p">]</span>
-
-  <span class="nx">ForStart</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;FOR ForVariables&quot;</span><span class="p">,</span>                       <span class="o">-&gt;</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;FOR ALL ForVariables&quot;</span><span class="p">,</span>                   <span class="o">-&gt;</span> <span class="nv">$3.raw = </span><span class="kc">true</span><span class="p">;</span> <span class="nx">$3</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-58">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-58">#</a>               </div>               <p>An array of all accepted values for a variable inside the loop. This
-enables support for pattern matching.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ForValue</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;Identifier&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Array&quot;</span><span class="p">,</span>                                  <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-    <span class="nx">o</span> <span class="s2">&quot;Object&quot;</span><span class="p">,</span>                                 <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">$1</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-59">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-59">#</a>               </div>               <p>An array or range comprehension has variables for the current element and
-(optional) reference to the current index. Or, <em>key, value</em>, in the case
-of object comprehensions.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ForVariables</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;ForValue&quot;</span><span class="p">,</span>                               <span class="o">-&gt;</span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
-    <span class="nx">o</span> <span class="s2">&quot;ForValue , ForValue&quot;</span><span class="p">,</span>                    <span class="o">-&gt;</span> <span class="p">[</span><span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span><span class="p">]</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-60">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-60">#</a>               </div>               <p>The source of a comprehension is an array or object with an optional guard
-clause. If it's an array comprehension, you can also choose to step through
-in fixed-size increments.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ForSource</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;IN Expression&quot;</span><span class="p">,</span>                               <span class="o">-&gt;</span> <span class="nx">source</span><span class="o">:</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;OF Expression&quot;</span><span class="p">,</span>                               <span class="o">-&gt;</span> <span class="nx">source</span><span class="o">:</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">object</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;IN Expression WHEN Expression&quot;</span><span class="p">,</span>               <span class="o">-&gt;</span> <span class="nx">source</span><span class="o">:</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">guard</span><span class="o">:</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;OF Expression WHEN Expression&quot;</span><span class="p">,</span>               <span class="o">-&gt;</span> <span class="nx">source</span><span class="o">:</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">guard</span><span class="o">:</span> <span class="nx">$4</span><span class="p">,</span> <span class="nx">object</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;IN Expression BY Expression&quot;</span><span class="p">,</span>                 <span class="o">-&gt;</span> <span class="nx">source</span><span class="o">:</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">step</span><span class="o">:</span>  <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;IN Expression WHEN Expression BY Expression&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="nx">source</span><span class="o">:</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">guard</span><span class="o">:</span> <span class="nx">$4</span><span class="p">,</span> <span class="nx">step</span><span class="o">:</span>   <span class="nx">$6</span>
-    <span class="nx">o</span> <span class="s2">&quot;IN Expression BY Expression WHEN Expression&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="nx">source</span><span class="o">:</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">step</span><span class="o">:</span>  <span class="nx">$4</span><span class="p">,</span> <span class="nx">guard</span><span class="o">:</span> <span class="nx">$6</span>
-  <span class="p">]</span>
-
-  <span class="nx">Switch</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;SWITCH Expression INDENT Whens OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">SwitchNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;SWITCH Expression INDENT Whens ELSE Block OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">SwitchNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$4</span><span class="p">,</span> <span class="nx">$6</span>
-    <span class="nx">o</span> <span class="s2">&quot;SWITCH INDENT Whens OUTDENT&quot;</span><span class="p">,</span>            <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">SwitchNode</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;SWITCH INDENT Whens ELSE Block OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">SwitchNode</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">$5</span>
-  <span class="p">]</span>
-
-  <span class="nx">Whens</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;When&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Whens When&quot;</span><span class="p">,</span>                             <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">$2</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-61">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-61">#</a>               </div>               <p>An individual <strong>When</strong> clause, with action.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">When</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;LEADING_WHEN SimpleArgs Block&quot;</span><span class="p">,</span>            <span class="o">-&gt;</span> <span class="p">[[</span><span class="nx">$2</span><span class="p">,</span> <span class="nx">$3</span><span class="p">]]</span>
-    <span class="nx">o</span> <span class="s2">&quot;LEADING_WHEN SimpleArgs Block TERMINATOR&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="p">[[</span><span class="nx">$2</span><span class="p">,</span> <span class="nx">$3</span><span class="p">]]</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-62">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-62">#</a>               </div>               <p>The most basic form of <em>if</em> is a condition and an action. The following
-if-related rules are broken up along these lines in order to avoid
-ambiguity.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">IfBlock</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;IF Expression Block&quot;</span><span class="p">,</span>                    <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">IfNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;UNLESS Expression Block&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">IfNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">invert</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;IfBlock ELSE IF Expression Block&quot;</span><span class="p">,</span>       <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">addElse</span> <span class="p">(</span><span class="k">new</span> <span class="nx">IfNode</span><span class="p">(</span><span class="nx">$4</span><span class="p">,</span> <span class="nx">$5</span><span class="p">)).</span><span class="nx">forceStatement</span><span class="p">()</span>
-    <span class="nx">o</span> <span class="s2">&quot;IfBlock ELSE Block&quot;</span><span class="p">,</span>                     <span class="o">-&gt;</span> <span class="nx">$1</span><span class="p">.</span><span class="nx">addElse</span> <span class="nx">$3</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-63">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-63">#</a>               </div>               <p>The full complement of <em>if</em> expressions, including postfix one-liner
-<em>if</em> and <em>unless</em>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">If</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;IfBlock&quot;</span>
-    <span class="nx">o</span> <span class="s2">&quot;Statement POST_IF Expression&quot;</span><span class="p">,</span>           <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">IfNode</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">$1</span><span class="p">]),</span> <span class="nx">statement</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression POST_IF Expression&quot;</span><span class="p">,</span>          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">IfNode</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">$1</span><span class="p">]),</span> <span class="nx">statement</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;Statement POST_UNLESS Expression&quot;</span><span class="p">,</span>       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">IfNode</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">$1</span><span class="p">]),</span> <span class="nx">statement</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">invert</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression POST_UNLESS Expression&quot;</span><span class="p">,</span>      <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">IfNode</span> <span class="nx">$3</span><span class="p">,</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">$1</span><span class="p">]),</span> <span class="nx">statement</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">invert</span><span class="o">:</span> <span class="kc">true</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-64">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-64">#</a>               </div>               <p>Arithmetic and logical operators, working on one or more operands.
-Here they are grouped by order of precedence. The actual precedence rules
-are defined at the bottom of the page. It would be shorter if we could
-combine most of these rules into a single generic <em>Operand OpSymbol Operand</em>
--type rule, but in order to make the precedence binding possible, separate
-rules are necessary.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">Operation</span><span class="o">:</span> <span class="p">[</span>
-    <span class="nx">o</span> <span class="s2">&quot;UNARY Expression&quot;</span><span class="p">,</span>                       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$2</span>
-    <span class="nx">o</span><span class="p">(</span><span class="s2">&quot;- Expression&quot;</span><span class="p">,</span>                           <span class="p">(</span><span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span><span class="p">(</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="nx">$2</span><span class="p">)),</span> <span class="p">{</span><span class="nx">prec</span><span class="o">:</span> <span class="s1">&#39;UNARY&#39;</span><span class="p">})</span>
-    <span class="nx">o</span><span class="p">(</span><span class="s2">&quot;+ Expression&quot;</span><span class="p">,</span>                           <span class="p">(</span><span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span><span class="p">(</span><span class="s1">&#39;+&#39;</span><span class="p">,</span> <span class="nx">$2</span><span class="p">)),</span> <span class="p">{</span><span class="nx">prec</span><span class="o">:</span> <span class="s1">&#39;UNARY&#39;</span><span class="p">})</span>
-
-    <span class="nx">o</span> <span class="s2">&quot;-- Expression&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;++ Expression&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;++&#39;</span><span class="p">,</span> <span class="nx">$2</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression --&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="kc">true</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression ++&quot;</span><span class="p">,</span>                          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;++&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="kc">true</span>
-
-    <span class="nx">o</span> <span class="s2">&quot;Expression ? Expression&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;?&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression + Expression&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;+&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression - Expression&quot;</span><span class="p">,</span>                <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression == Expression&quot;</span><span class="p">,</span>               <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;==&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression != Expression&quot;</span><span class="p">,</span>               <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;!=&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-
-    <span class="nx">o</span> <span class="s2">&quot;Expression MATH Expression&quot;</span><span class="p">,</span>             <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression SHIFT Expression&quot;</span><span class="p">,</span>            <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression COMPARE Expression&quot;</span><span class="p">,</span>          <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression LOGIC Expression&quot;</span><span class="p">,</span>            <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Value COMPOUND_ASSIGN Expression&quot;</span><span class="p">,</span>       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Value COMPOUND_ASSIGN INDENT Expression OUTDENT&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$4</span>
-
-    <span class="nx">o</span> <span class="s2">&quot;Expression IN Expression&quot;</span><span class="p">,</span>               <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">InNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression OF Expression&quot;</span><span class="p">,</span>               <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;in&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression INSTANCEOF Expression&quot;</span><span class="p">,</span>       <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;instanceof&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$3</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression UNARY IN Expression&quot;</span><span class="p">,</span>         <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="k">new</span> <span class="nx">InNode</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression UNARY OF Expression&quot;</span><span class="p">,</span>         <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;in&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$4</span>
-    <span class="nx">o</span> <span class="s2">&quot;Expression UNARY INSTANCEOF Expression&quot;</span><span class="p">,</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="nx">$2</span><span class="p">,</span> <span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;instanceof&#39;</span><span class="p">,</span> <span class="nx">$1</span><span class="p">,</span> <span class="nx">$4</span>
-  <span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-65">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-65">#</a>               </div>               <h2>Precedence</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-66">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-66">#</a>               </div>               <p>Operators at the top of this list have higher precedence than the ones lower
-down. Following these rules is what makes <code>2 + 3 * 4</code> parse as:</p>
-
-<pre><code>2 + (3 * 4)
-</code></pre>
-
-<p>And not:</p>
-
-<pre><code>(2 + 3) * 4
-</code></pre>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">operators = </span><span class="p">[</span>
-  <span class="p">[</span><span class="s2">&quot;right&quot;</span><span class="p">,</span>     <span class="s1">&#39;?&#39;</span><span class="p">,</span> <span class="s1">&#39;NEW&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;CALL_START&#39;</span><span class="p">,</span> <span class="s1">&#39;CALL_END&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;nonassoc&quot;</span><span class="p">,</span>  <span class="s1">&#39;++&#39;</span><span class="p">,</span> <span class="s1">&#39;--&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;right&quot;</span><span class="p">,</span>     <span class="s1">&#39;UNARY&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;MATH&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;+&#39;</span><span class="p">,</span> <span class="s1">&#39;-&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;SHIFT&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;COMPARE&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;INSTANCEOF&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;==&#39;</span><span class="p">,</span> <span class="s1">&#39;!=&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;LOGIC&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;right&quot;</span><span class="p">,</span>     <span class="s1">&#39;COMPOUND_ASSIGN&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>      <span class="s1">&#39;.&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;nonassoc&quot;</span><span class="p">,</span>  <span class="s1">&#39;INDENT&#39;</span><span class="p">,</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;right&quot;</span><span class="p">,</span>     <span class="s1">&#39;WHEN&#39;</span><span class="p">,</span> <span class="s1">&#39;LEADING_WHEN&#39;</span><span class="p">,</span> <span class="s1">&#39;IN&#39;</span><span class="p">,</span> <span class="s1">&#39;OF&#39;</span><span class="p">,</span> <span class="s1">&#39;BY&#39;</span><span class="p">,</span> <span class="s1">&#39;THROW&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;right&quot;</span><span class="p">,</span>     <span class="s1">&#39;IF&#39;</span><span class="p">,</span> <span class="s1">&#39;UNLESS&#39;</span><span class="p">,</span> <span class="s1">&#39;ELSE&#39;</span><span class="p">,</span> <span class="s1">&#39;FOR&#39;</span><span class="p">,</span> <span class="s1">&#39;WHILE&#39;</span><span class="p">,</span> <span class="s1">&#39;UNTIL&#39;</span><span class="p">,</span> <span class="s1">&#39;LOOP&#39;</span><span class="p">,</span> <span class="s1">&#39;SUPER&#39;</span><span class="p">,</span> <span class="s1">&#39;CLASS&#39;</span><span class="p">,</span> <span class="s1">&#39;EXTENDS&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;right&quot;</span><span class="p">,</span>     <span class="s1">&#39;=&#39;</span><span class="p">,</span> <span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="s1">&#39;RETURN&#39;</span><span class="p">]</span>
-  <span class="p">[</span><span class="s2">&quot;right&quot;</span><span class="p">,</span>     <span class="s1">&#39;-&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;=&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;UNLESS&#39;</span><span class="p">,</span> <span class="s1">&#39;POST_IF&#39;</span><span class="p">,</span> <span class="s1">&#39;POST_UNLESS&#39;</span><span class="p">]</span>
-<span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-67">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-67">#</a>               </div>               <h2>Wrapping Up</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-68">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-68">#</a>               </div>               <p>Finally, now what we have our <strong>grammar</strong> and our <strong>operators</strong>, we can create
-our <strong>Jison.Parser</strong>. We do this by processing all of our rules, recording all
-terminals (every symbol which does not appear as the name of a rule above)
-as "tokens".</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">tokens = </span><span class="p">[]</span>
-<span class="k">for</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">alternatives</span> <span class="k">of</span> <span class="nx">grammar</span>
-  <span class="nx">grammar</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="k">for</span> <span class="nx">alt</span> <span class="k">in</span> <span class="nx">alternatives</span>
-    <span class="k">for</span> <span class="nx">token</span> <span class="k">in</span> <span class="nx">alt</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">split</span> <span class="s1">&#39; &#39;</span>
-      <span class="nx">tokens</span><span class="p">.</span><span class="nx">push</span> <span class="nx">token</span> <span class="nx">unless</span> <span class="nx">grammar</span><span class="p">[</span><span class="nx">token</span><span class="p">]</span>
-    <span class="nx">alt</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;return #{alt[1]}&quot;</span> <span class="k">if</span> <span class="nx">name</span> <span class="o">is</span> <span class="s1">&#39;Root&#39;</span>
-    <span class="nx">alt</span></pre></div>             </td>           </tr>                               <tr id="section-69">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-69">#</a>               </div>               <p>Initialize the <strong>Parser</strong> with our list of terminal <strong>tokens</strong>, our <strong>grammar</strong>
-rules, and the name of the root. Reverse the operators because Jison orders
-precedence from low to high, and we have it high to low
-(as in <a href="http://dinosaur.compilertools.net/yacc/index.html">Yacc</a>).</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.parser = </span><span class="k">new</span> <span class="nx">Parser</span>
-  <span class="nx">tokens</span><span class="o">:</span>       <span class="nx">tokens</span><span class="p">.</span><span class="nx">join</span> <span class="s1">&#39; &#39;</span>
-  <span class="nx">bnf</span><span class="o">:</span>          <span class="nx">grammar</span>
-  <span class="nx">operators</span><span class="o">:</span>    <span class="nx">operators</span><span class="p">.</span><span class="nx">reverse</span><span class="p">()</span>
-  <span class="nx">startSymbol</span><span class="o">:</span>  <span class="s1">&#39;Root&#39;</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/helpers.html b/node/node_modules/jade/support/coffee-script/documentation/docs/helpers.html
deleted file mode 100644 (file)
index d3bc7ad..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>helpers.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               helpers.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>This file contains the common helper functions that we'd like to share among
-the <strong>Lexer</strong>, <strong>Rewriter</strong>, and the <strong>Nodes</strong>. Merge objects, flatten
-arrays, count characters, that sort of thing.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers = exports.helpers = </span><span class="p">{}</span></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>Cross-browser indexOf, so that IE can join the party.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.indexOf = indexOf = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">item</span><span class="p">,</span> <span class="nx">from</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="k">return</span> <span class="nx">array</span><span class="p">.</span><span class="nx">indexOf</span> <span class="nx">item</span><span class="p">,</span> <span class="nx">from</span> <span class="k">if</span> <span class="nx">array</span><span class="p">.</span><span class="nx">indexOf</span>
-  <span class="k">for</span> <span class="nx">other</span><span class="p">,</span> <span class="nx">index</span> <span class="k">in</span> <span class="nx">array</span>
-    <span class="k">if</span> <span class="nx">other</span> <span class="o">is</span> <span class="nx">item</span> <span class="o">and</span> <span class="p">(</span><span class="o">not</span> <span class="nx">from</span> <span class="o">or</span> <span class="p">(</span><span class="nx">from</span> <span class="o">&lt;=</span> <span class="nx">index</span><span class="p">))</span>
-      <span class="k">return</span> <span class="nx">index</span>
-  <span class="o">-</span><span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>Does a list include a value?</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.include = include = </span><span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nx">indexOf</span><span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Peek at the beginning of a given string to see if it matches a sequence.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.starts = starts = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">literal</span><span class="p">,</span> <span class="nx">start</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nx">string</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="p">(</span><span class="nx">start</span> <span class="o">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">is</span> <span class="nx">literal</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Peek at the end of a given string to see if it matches a sequence.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.ends = ends = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">literal</span><span class="p">,</span> <span class="nx">back</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">start = </span><span class="nx">string</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="p">(</span><span class="nx">back</span> <span class="o">?</span> <span class="mi">0</span><span class="p">)</span>
-  <span class="nx">string</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="nx">start</span> <span class="o">+</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">is</span> <span class="nx">literal</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Trim out all falsy values from an array.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.compact = compact = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">item</span> <span class="k">for</span> <span class="nx">item</span> <span class="k">in</span> <span class="nx">array</span> <span class="k">when</span> <span class="nx">item</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>Count the number of occurences of a character in a string.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.count = count = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">num = </span><span class="mi">0</span>
-  <span class="nv">pos = </span><span class="nx">indexOf</span> <span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span>
-  <span class="k">while</span> <span class="nx">pos</span> <span class="o">isnt</span> <span class="o">-</span><span class="mi">1</span>
-    <span class="nx">num</span> <span class="o">+=</span> <span class="mi">1</span>
-    <span class="nv">pos = </span><span class="nx">indexOf</span> <span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span><span class="p">,</span> <span class="nx">pos</span> <span class="o">+</span> <span class="mi">1</span>
-  <span class="nx">num</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Merge objects, returning a fresh copy with attributes from both sides.
-Used every time <code>BaseNode#compile</code> is called, to allow properties in the
-options hash to propagate down the tree without polluting other branches.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.merge = merge = </span><span class="p">(</span><span class="nx">options</span><span class="p">,</span> <span class="nx">overrides</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">fresh = </span><span class="p">{}</span>
-  <span class="p">(</span><span class="nx">fresh</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">options</span>
-  <span class="p">(</span><span class="nx">fresh</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">overrides</span> <span class="k">if</span> <span class="nx">overrides</span>
-  <span class="nx">fresh</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Extend a source object with the properties of another object (shallow copy).
-We use this to simulate Node's deprecated <code>process.mixin</code></p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.extend = extend = </span><span class="p">(</span><span class="nx">object</span><span class="p">,</span> <span class="nx">properties</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="p">(</span><span class="nx">object</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">properties</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>Return a completely flattened version of an array. Handy for getting a
-list of <code>children</code> from the nodes.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.flatten = flatten = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">memo = </span><span class="p">[]</span>
-  <span class="k">for</span> <span class="nx">item</span> <span class="k">in</span> <span class="nx">array</span>
-    <span class="k">if</span> <span class="nx">item</span> <span class="k">instanceof</span> <span class="nb">Array</span> <span class="k">then</span> <span class="nv">memo = </span><span class="nx">memo</span><span class="p">.</span><span class="nx">concat</span><span class="p">(</span><span class="nx">item</span><span class="p">)</span> <span class="k">else</span> <span class="nx">memo</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">item</span><span class="p">)</span>
-  <span class="nx">memo</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>Delete a key from an object, returning the value. Useful when a node is
-looking for a particular method in an options hash.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">helpers.del = del = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">val = </span><span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span>
-  <span class="k">delete</span> <span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span>
-  <span class="nx">val</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/index.html b/node/node_modules/jade/support/coffee-script/documentation/docs/index.html
deleted file mode 100644 (file)
index 4dcd19c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>index.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               index.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>Loader for CoffeeScript as a Node.js library.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="p">(</span><span class="nx">exports</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">require</span> <span class="s1">&#39;./coffee-script&#39;</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/lexer.html b/node/node_modules/jade/support/coffee-script/documentation/docs/lexer.html
deleted file mode 100644 (file)
index fc3d1f5..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>lexer.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               lexer.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>The CoffeeScript Lexer. Uses a series of token-matching regexes to attempt
-matches against the beginning of the source code. When a match is found,
-a token is produced, we consume the match, and start again. Tokens are in the
-form:</p>
-
-<pre><code>[tag, value, lineNumber]
-</code></pre>
-
-<p>Which is a format that can be fed directly into <a href="http://github.com/zaach/jison">Jison</a>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="p">{</span><span class="nx">Rewriter</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;./rewriter&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>Import the helpers we need.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="p">{</span><span class="nx">include</span><span class="p">,</span> <span class="nx">count</span><span class="p">,</span> <span class="nx">starts</span><span class="p">,</span> <span class="nx">compact</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./helpers&#39;</span><span class="p">).</span><span class="nx">helpers</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <h2>The Lexer Class</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>The Lexer class reads a stream of CoffeeScript and divvys it up into tagged
-tokens. Some potential ambiguity in the grammar has been avoided by
-pushing some extra smarts into the Lexer.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.Lexer = </span><span class="nx">class</span> <span class="nx">Lexer</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p><strong>tokenize</strong> is the Lexer's main method. Scan by attempting to match tokens
-one at a time, using a regular expression anchored at the start of the
-remaining code, or a custom recursive token-matching method
-(for interpolations). When the next token has been recorded, we move forward
-within the code past the token, and begin again.</p>
-
-<p>Each tokenizing method is responsible for incrementing <code>@i</code> by the number of
-characters it has consumed. <code>@i</code> can be thought of as our finger on the page
-of source.</p>
-
-<p>Before returning the token stream, run it through the <a href="rewriter.html">Rewriter</a>
-unless explicitly asked not to.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">tokenize</span><span class="o">:</span> <span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">code     = </span><span class="nx">code</span><span class="p">.</span><span class="nx">replace</span> <span class="sr">/(\r|\s+$)/g</span><span class="p">,</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">o        = </span><span class="nx">options</span> <span class="o">or</span> <span class="p">{}</span>
-    <span class="vi">@code    = </span><span class="nx">code</span>         <span class="c1"># The remainder of the source code.</span>
-    <span class="vi">@i       = </span><span class="mi">0</span>            <span class="c1"># Current character position we&#39;re parsing.</span>
-    <span class="vi">@line    = </span><span class="nx">o</span><span class="p">.</span><span class="nx">line</span> <span class="o">or</span> <span class="mi">0</span>  <span class="c1"># The current line.</span>
-    <span class="vi">@indent  = </span><span class="mi">0</span>            <span class="c1"># The current indentation level.</span>
-    <span class="vi">@indebt  = </span><span class="mi">0</span>            <span class="c1"># The over-indentation at the current level.</span>
-    <span class="vi">@outdebt = </span><span class="mi">0</span>            <span class="c1"># The under-outdentation at the current level.</span>
-    <span class="vi">@indents = </span><span class="p">[]</span>           <span class="c1"># The stack of all current indentation levels.</span>
-    <span class="vi">@tokens  = </span><span class="p">[]</span>           <span class="c1"># Stream of parsed tokens in the form [&#39;TYPE&#39;, value, line]</span>
-    <span class="k">while</span> <span class="nx">@i</span> <span class="o">&lt;</span> <span class="nx">@code</span><span class="p">.</span><span class="nx">length</span>
-      <span class="vi">@chunk = </span><span class="nx">@code</span><span class="p">[</span><span class="nx">@i</span><span class="p">..]</span>
-      <span class="nx">@extractNextToken</span><span class="p">()</span>
-    <span class="nx">@closeIndentation</span><span class="p">()</span>
-    <span class="k">return</span> <span class="nx">@tokens</span> <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">rewrite</span> <span class="o">is</span> <span class="kc">off</span>
-    <span class="p">(</span><span class="k">new</span> <span class="nx">Rewriter</span><span class="p">).</span><span class="nx">rewrite</span> <span class="nx">@tokens</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>At every position, run through this list of attempted matches,
-short-circuiting if any of them succeed. Their order determines precedence:
-<code>@literalToken</code> is the fallback catch-all.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">extractNextToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@identifierToken</span><span class="p">()</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@commentToken</span><span class="p">()</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@whitespaceToken</span><span class="p">()</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@lineToken</span><span class="p">()</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@heredocToken</span><span class="p">()</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@stringToken</span><span class="p">()</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@numberToken</span><span class="p">()</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@regexToken</span><span class="p">()</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@jsToken</span><span class="p">()</span>
-    <span class="k">return</span>    <span class="nx">@literalToken</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <h2>Tokenizers</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Matches identifying literals: variables, keywords, method names, etc.
-Check to ensure that JavaScript reserved words aren't being used as
-identifiers. Because CoffeeScript reserves a handful of keywords that are
-allowed in JavaScript, we're careful not to tag them as keywords when
-referenced as property names here, so you can still do <code>jQuery.is()</code> even
-though <code>is</code> means <code>===</code> otherwise.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">identifierToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">id = </span><span class="nx">@match</span> <span class="nx">IDENTIFIER</span><span class="p">,</span> <span class="mi">1</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">id</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nv">forcedIdentifier = </span><span class="nx">@tagAccessor</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@match</span> <span class="nx">ASSIGNED</span><span class="p">,</span> <span class="mi">1</span>
-    <span class="nv">tag = </span><span class="s1">&#39;IDENTIFIER&#39;</span>
-    <span class="nv">tag = </span><span class="nx">id</span><span class="p">.</span><span class="nx">toUpperCase</span><span class="p">()</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">JS_KEYWORDS</span><span class="p">,</span> <span class="nx">id</span><span class="p">)</span> <span class="o">or</span> <span class="p">(</span><span class="o">not</span> <span class="nx">forcedIdentifier</span> <span class="o">and</span> <span class="nx">include</span><span class="p">(</span><span class="nx">COFFEE_KEYWORDS</span><span class="p">,</span> <span class="nx">id</span><span class="p">))</span>
-    <span class="nv">tag = </span><span class="s1">&#39;LEADING_WHEN&#39;</span>   <span class="k">if</span> <span class="nx">tag</span> <span class="o">is</span> <span class="s1">&#39;WHEN&#39;</span> <span class="o">and</span> <span class="nx">include</span> <span class="nx">LINE_BREAK</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">()</span>
-    <span class="nv">tag = </span><span class="s1">&#39;ALL&#39;</span>            <span class="k">if</span> <span class="nx">id</span> <span class="o">is</span> <span class="s1">&#39;all&#39;</span> <span class="o">and</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">is</span> <span class="s1">&#39;FOR&#39;</span>
-    <span class="nv">tag = </span><span class="s1">&#39;UNARY&#39;</span>          <span class="k">if</span> <span class="nx">include</span> <span class="nx">UNARY</span><span class="p">,</span> <span class="nx">tag</span>
-    <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">JS_FORBIDDEN</span><span class="p">,</span> <span class="nx">id</span><span class="p">)</span>
-      <span class="k">if</span> <span class="nx">forcedIdentifier</span>
-        <span class="nv">tag = </span><span class="s1">&#39;STRING&#39;</span>
-        <span class="nv">id  = </span><span class="s2">&quot;\&quot;#{id}\&quot;&quot;</span>
-        <span class="k">if</span> <span class="nx">forcedIdentifier</span> <span class="o">is</span> <span class="s1">&#39;accessor&#39;</span>
-          <span class="nv">close_index = </span><span class="kc">true</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">isnt</span> <span class="s1">&#39;@&#39;</span>
-          <span class="nx">@token</span> <span class="s1">&#39;INDEX_START&#39;</span><span class="p">,</span> <span class="s1">&#39;[&#39;</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">RESERVED</span><span class="p">,</span> <span class="nx">id</span><span class="p">)</span>
-        <span class="nx">@identifierError</span> <span class="nx">id</span>
-    <span class="nx">unless</span> <span class="nx">forcedIdentifier</span>
-      <span class="nv">tag = id = </span><span class="nx">CONVERSIONS</span><span class="p">[</span><span class="nx">id</span><span class="p">]</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">COFFEE_ALIASES</span><span class="p">,</span> <span class="nx">id</span>
-      <span class="nv">tag = </span><span class="s1">&#39;LOGIC&#39;</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">LOGIC</span><span class="p">,</span> <span class="nx">id</span>
-      <span class="nv">tag = </span><span class="s1">&#39;UNARY&#39;</span> <span class="k">if</span> <span class="nx">id</span> <span class="o">is</span> <span class="s1">&#39;!&#39;</span>
-    <span class="nx">@token</span> <span class="nx">tag</span><span class="p">,</span> <span class="nx">id</span>
-    <span class="nx">@token</span> <span class="s1">&#39;]&#39;</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span> <span class="k">if</span> <span class="nx">close_index</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Matches numbers, including decimals, hex, and exponential notation.
-Be careful not to interfere with ranges-in-progress.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">numberToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">number = </span><span class="nx">@match</span> <span class="nx">NUMBER</span><span class="p">,</span> <span class="mi">1</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">is</span> <span class="s1">&#39;.&#39;</span> <span class="o">and</span> <span class="nx">starts</span> <span class="nx">number</span><span class="p">,</span> <span class="s1">&#39;.&#39;</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">number</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nx">@token</span> <span class="s1">&#39;NUMBER&#39;</span><span class="p">,</span> <span class="nx">number</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>Matches strings, including multi-line strings. Ensures that quotation marks
-are balanced within the string's contents, and within nested interpolations.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">stringToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nx">starts</span><span class="p">(</span><span class="nx">@chunk</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">)</span> <span class="o">or</span> <span class="nx">starts</span><span class="p">(</span><span class="nx">@chunk</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">string =</span>
-      <span class="nx">@balancedToken</span><span class="p">([</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;#{&#39;</span><span class="p">,</span> <span class="s1">&#39;}&#39;</span><span class="p">])</span> <span class="o">or</span>
-      <span class="nx">@balancedToken</span> <span class="p">[</span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">]</span>
-    <span class="nx">@interpolateString</span> <span class="nx">string</span><span class="p">.</span><span class="nx">replace</span> <span class="sr">/\n/g</span><span class="p">,</span> <span class="s1">&#39;\\\n&#39;</span>
-    <span class="nx">@line</span> <span class="o">+=</span> <span class="nx">count</span> <span class="nx">string</span><span class="p">,</span> <span class="s2">&quot;\n&quot;</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">string</span><span class="p">.</span><span class="nx">length</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>Matches heredocs, adjusting indentation to the correct level, as heredocs
-preserve whitespace, but ignore indentation to the left.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">heredocToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">match = </span><span class="nx">@chunk</span><span class="p">.</span><span class="nx">match</span> <span class="nx">HEREDOC</span>
-    <span class="nv">quote = </span><span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">substr</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
-    <span class="nv">doc = </span><span class="nx">@sanitizeHeredoc</span> <span class="nx">match</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">or</span> <span class="nx">match</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">or</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="p">{</span><span class="nx">quote</span><span class="p">}</span>
-    <span class="nx">@interpolateString</span> <span class="nx">quote</span> <span class="o">+</span> <span class="nx">doc</span> <span class="o">+</span> <span class="nx">quote</span><span class="p">,</span> <span class="nx">heredoc</span><span class="o">:</span> <span class="kc">yes</span>
-    <span class="nx">@line</span> <span class="o">+=</span> <span class="nx">count</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;\n&quot;</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">length</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-12">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-12">#</a>               </div>               <p>Matches and consumes comments.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">commentToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">match = </span><span class="nx">@chunk</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">COMMENT</span><span class="p">)</span>
-    <span class="nx">@line</span> <span class="o">+=</span> <span class="nx">count</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="s2">&quot;\n&quot;</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">length</span>
-    <span class="k">if</span> <span class="nx">match</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-      <span class="nx">@token</span> <span class="s1">&#39;HERECOMMENT&#39;</span><span class="p">,</span> <span class="nx">@sanitizeHeredoc</span> <span class="nx">match</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
-        <span class="nx">herecomment</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">indent</span><span class="o">:</span> <span class="nb">Array</span><span class="p">(</span><span class="nx">@indent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
-      <span class="nx">@token</span> <span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s1">&#39;\n&#39;</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-13">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-13">#</a>               </div>               <p>Matches JavaScript interpolated directly into the source via backticks.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">jsToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nx">starts</span> <span class="nx">@chunk</span><span class="p">,</span> <span class="s1">&#39;`&#39;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">script = </span><span class="nx">@balancedToken</span> <span class="p">[</span><span class="s1">&#39;`&#39;</span><span class="p">,</span> <span class="s1">&#39;`&#39;</span><span class="p">]</span>
-    <span class="nx">@token</span> <span class="s1">&#39;JS&#39;</span><span class="p">,</span> <span class="nx">script</span><span class="p">.</span><span class="nx">replace</span> <span class="nx">JS_CLEANER</span><span class="p">,</span> <span class="s1">&#39;&#39;</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">script</span><span class="p">.</span><span class="nx">length</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-14">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-14">#</a>               </div>               <p>Matches regular expression literals. Lexing regular expressions is difficult
-to distinguish from division, so we borrow some basic heuristics from
-JavaScript and Ruby, borrow slash balancing from <code>@balancedToken</code>, and
-borrow interpolation from <code>@interpolateString</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">regexToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">first = </span><span class="nx">@chunk</span><span class="p">.</span><span class="nx">match</span> <span class="nx">REGEX_START</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="nx">first</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39; &#39;</span> <span class="o">and</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">not</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;CALL_START&#39;</span><span class="p">,</span> <span class="s1">&#39;=&#39;</span><span class="p">]</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span>     <span class="nx">include</span> <span class="nx">NOT_REGEX</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">()</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">regex = </span><span class="nx">@balancedToken</span> <span class="p">[</span><span class="s1">&#39;/&#39;</span><span class="p">,</span> <span class="s1">&#39;/&#39;</span><span class="p">]</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">end = </span><span class="nx">@chunk</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="nx">regex</span><span class="p">.</span><span class="nx">length</span><span class="p">).</span><span class="nx">match</span> <span class="nx">REGEX_END</span>
-    <span class="nx">regex</span> <span class="o">+=</span> <span class="nv">flags = </span><span class="nx">end</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="nx">end</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-    <span class="k">if</span> <span class="nx">regex</span><span class="p">.</span><span class="nx">match</span> <span class="nx">REGEX_INTERPOLATION</span>
-      <span class="nv">str = </span><span class="nx">regex</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="nx">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-      <span class="nv">str = </span><span class="nx">str</span><span class="p">.</span><span class="nx">replace</span> <span class="nx">REGEX_ESCAPE</span><span class="p">,</span> <span class="p">(</span><span class="nx">escaped</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="s1">&#39;\\&#39;</span> <span class="o">+</span> <span class="nx">escaped</span>
-      <span class="vi">@tokens = </span><span class="nx">@tokens</span><span class="p">.</span><span class="nx">concat</span> <span class="p">[[</span><span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="s1">&#39;(&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;NEW&#39;</span><span class="p">,</span> <span class="s1">&#39;new&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;IDENTIFIER&#39;</span><span class="p">,</span> <span class="s1">&#39;RegExp&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;CALL_START&#39;</span><span class="p">,</span> <span class="s1">&#39;(&#39;</span><span class="p">]]</span>
-      <span class="nx">@interpolateString</span> <span class="s2">&quot;\&quot;#{str}\&quot;&quot;</span><span class="p">,</span> <span class="nx">escapeQuotes</span><span class="o">:</span> <span class="kc">yes</span>
-      <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">@tokens</span><span class="p">.</span><span class="nx">length</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;,&#39;</span><span class="p">,</span> <span class="s1">&#39;,&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="s2">&quot;\&quot;#{flags}\&quot;&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="nx">flags</span>
-      <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">@tokens</span><span class="p">.</span><span class="nx">length</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">]</span>
-    <span class="k">else</span>
-      <span class="nx">@token</span> <span class="s1">&#39;REGEX&#39;</span><span class="p">,</span> <span class="nx">regex</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">regex</span><span class="p">.</span><span class="nx">length</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-15">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-15">#</a>               </div>               <p>Matches a token in which which the passed delimiter pairs must be correctly
-balanced (ie. strings, JS literals).</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">balancedToken</span><span class="o">:</span> <span class="p">(</span><span class="nx">delimited</span><span class="p">...)</span> <span class="o">-&gt;</span>
-    <span class="nx">@balancedString</span> <span class="nx">@chunk</span><span class="p">,</span> <span class="nx">delimited</span></pre></div>             </td>           </tr>                               <tr id="section-16">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-16">#</a>               </div>               <p>Matches newlines, indents, and outdents, and determines which is which.
-If we can detect that the current line is continued onto the the next line,
-then the newline is suppressed:</p>
-
-<pre><code>elements
-  .each( ... )
-  .map( ... )
-</code></pre>
-
-<p>Keeps track of the level of indentation, because a single outdent token
-can close multiple indents, so we need to know how far in we happen to be.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">lineToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">indent = </span><span class="nx">@match</span> <span class="nx">MULTI_DENT</span><span class="p">,</span> <span class="mi">1</span>
-    <span class="nx">@line</span> <span class="o">+=</span> <span class="nx">count</span> <span class="nx">indent</span><span class="p">,</span> <span class="s2">&quot;\n&quot;</span>
-    <span class="nx">@i</span>    <span class="o">+=</span> <span class="nx">indent</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nv">prev = </span><span class="nx">@prev</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-    <span class="nv">size = </span><span class="nx">indent</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">LAST_DENTS</span><span class="p">).</span><span class="nx">reverse</span><span class="p">()[</span><span class="mi">0</span><span class="p">].</span><span class="nx">match</span><span class="p">(</span><span class="nx">LAST_DENT</span><span class="p">)[</span><span class="mi">1</span><span class="p">].</span><span class="nx">length</span>
-    <span class="nv">nextCharacter = </span><span class="nx">@match</span> <span class="nx">NEXT_CHARACTER</span><span class="p">,</span> <span class="mi">1</span>
-    <span class="nv">noNewlines = </span><span class="nx">nextCharacter</span> <span class="o">is</span> <span class="s1">&#39;.&#39;</span> <span class="o">or</span> <span class="nx">nextCharacter</span> <span class="o">is</span> <span class="s1">&#39;,&#39;</span> <span class="o">or</span> <span class="nx">@unfinished</span><span class="p">()</span>
-    <span class="k">if</span> <span class="nx">size</span> <span class="o">-</span> <span class="nx">@indebt</span> <span class="o">is</span> <span class="nx">@indent</span>
-      <span class="k">return</span> <span class="nx">@suppressNewlines</span><span class="p">()</span> <span class="k">if</span> <span class="nx">noNewlines</span>
-      <span class="k">return</span> <span class="nx">@newlineToken</span> <span class="nx">indent</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">size</span> <span class="o">&gt;</span> <span class="nx">@indent</span>
-      <span class="k">if</span> <span class="nx">noNewlines</span>
-        <span class="vi">@indebt = </span><span class="nx">size</span> <span class="o">-</span> <span class="nx">@indent</span>
-        <span class="k">return</span> <span class="nx">@suppressNewlines</span><span class="p">()</span>
-      <span class="nv">diff = </span><span class="nx">size</span> <span class="o">-</span> <span class="nx">@indent</span> <span class="o">+</span> <span class="nx">@outdebt</span>
-      <span class="nx">@token</span> <span class="s1">&#39;INDENT&#39;</span><span class="p">,</span> <span class="nx">diff</span>
-      <span class="nx">@indents</span><span class="p">.</span><span class="nx">push</span> <span class="nx">diff</span>
-      <span class="vi">@outdebt = @indebt = </span><span class="mi">0</span>
-    <span class="k">else</span>
-      <span class="vi">@indebt = </span><span class="mi">0</span>
-      <span class="nx">@outdentToken</span> <span class="nx">@indent</span> <span class="o">-</span> <span class="nx">size</span><span class="p">,</span> <span class="nx">noNewlines</span>
-    <span class="vi">@indent = </span><span class="nx">size</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-17">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-17">#</a>               </div>               <p>Record an outdent token or multiple tokens, if we happen to be moving back
-inwards past several recorded indents.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">outdentToken</span><span class="o">:</span> <span class="p">(</span><span class="nx">moveOut</span><span class="p">,</span> <span class="nx">noNewlines</span><span class="p">,</span> <span class="nx">close</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">while</span> <span class="nx">moveOut</span> <span class="o">&gt;</span> <span class="mi">0</span>
-      <span class="nv">len = </span><span class="nx">@indents</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-      <span class="k">if</span> <span class="nx">@indents</span><span class="p">[</span><span class="nx">len</span><span class="p">]</span> <span class="o">is</span> <span class="kc">undefined</span>
-        <span class="nv">moveOut = </span><span class="mi">0</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">@indents</span><span class="p">[</span><span class="nx">len</span><span class="p">]</span> <span class="o">is</span> <span class="nx">@outdebt</span>
-        <span class="nx">moveOut</span> <span class="o">-=</span> <span class="nx">@outdebt</span>
-        <span class="vi">@outdebt = </span><span class="mi">0</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">@indents</span><span class="p">[</span><span class="nx">len</span><span class="p">]</span> <span class="o">&lt;</span> <span class="nx">@outdebt</span>
-        <span class="nx">@outdebt</span> <span class="o">-=</span> <span class="nx">@indents</span><span class="p">[</span><span class="nx">len</span><span class="p">]</span>
-        <span class="nx">moveOut</span> <span class="o">-=</span> <span class="nx">@indents</span><span class="p">[</span><span class="nx">len</span><span class="p">]</span>
-      <span class="k">else</span>
-        <span class="nv">dent = </span><span class="nx">@indents</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span>
-        <span class="nx">dent</span> <span class="o">-=</span> <span class="nx">@outdebt</span>
-        <span class="nx">moveOut</span> <span class="o">-=</span> <span class="nx">dent</span>
-        <span class="vi">@outdebt = </span><span class="mi">0</span>
-        <span class="nx">@token</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">,</span> <span class="nx">dent</span>
-    <span class="nx">@outdebt</span> <span class="o">-=</span> <span class="nx">moveOut</span> <span class="k">if</span> <span class="nx">dent</span>
-    <span class="nx">@token</span> <span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s2">&quot;\n&quot;</span> <span class="nx">unless</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">is</span> <span class="s1">&#39;TERMINATOR&#39;</span> <span class="o">or</span> <span class="nx">noNewlines</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-18">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-18">#</a>               </div>               <p>Matches and consumes non-meaningful whitespace. Tag the previous token
-as being "spaced", because there are some cases where it makes a difference.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">whitespaceToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">space = </span><span class="nx">@match</span> <span class="nx">WHITESPACE</span><span class="p">,</span> <span class="mi">1</span>
-    <span class="nv">prev = </span><span class="nx">@prev</span><span class="p">()</span>
-    <span class="nv">prev.spaced = </span><span class="kc">true</span> <span class="k">if</span> <span class="nx">prev</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">space</span><span class="p">.</span><span class="nx">length</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-19">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-19">#</a>               </div>               <p>Generate a newline token. Consecutive newlines get merged together.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">newlineToken</span><span class="o">:</span> <span class="p">(</span><span class="nx">newlines</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@token</span> <span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s2">&quot;\n&quot;</span> <span class="nx">unless</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">is</span> <span class="s1">&#39;TERMINATOR&#39;</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-20">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-20">#</a>               </div>               <p>Use a <code>\</code> at a line-ending to suppress the newline.
-The slash is removed here once its job is done.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">suppressNewlines</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@tokens</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@value</span><span class="p">()</span> <span class="o">is</span> <span class="s2">&quot;\\&quot;</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-21">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-21">#</a>               </div>               <p>We treat all other single characters as a token. Eg.: <code>( ) , . !</code>
-Multi-character operators are also literal tokens, so that Jison can assign
-the proper order of operations. There are some symbols that we tag specially
-here. <code>;</code> and newlines are both treated as a <code>TERMINATOR</code>, we distinguish
-parentheses that indicate a method call from regular parentheses, and so on.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">literalToken</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">match = </span><span class="nx">@chunk</span><span class="p">.</span><span class="nx">match</span> <span class="nx">OPERATOR</span>
-    <span class="nv">value = </span><span class="nx">match</span> <span class="o">and</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-    <span class="nv">space = </span><span class="nx">match</span> <span class="o">and</span> <span class="nx">match</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
-    <span class="nx">@tagParameters</span><span class="p">()</span> <span class="k">if</span> <span class="nx">value</span> <span class="o">and</span> <span class="nx">value</span><span class="p">.</span><span class="nx">match</span> <span class="nx">CODE</span>
-    <span class="nx">value</span> <span class="o">or=</span> <span class="nx">@chunk</span><span class="p">.</span><span class="nx">substr</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
-    <span class="nx">@i</span> <span class="o">+=</span> <span class="nx">value</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nv">spaced = </span><span class="p">(</span><span class="nv">prev = </span><span class="nx">@prev</span><span class="p">())</span> <span class="o">and</span> <span class="nx">prev</span><span class="p">.</span><span class="nx">spaced</span>
-    <span class="nv">tag = </span><span class="nx">value</span>
-    <span class="k">if</span> <span class="nx">value</span> <span class="o">is</span> <span class="s1">&#39;=&#39;</span>
-      <span class="nx">@assignmentError</span><span class="p">()</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">JS_FORBIDDEN</span><span class="p">,</span> <span class="nx">@value</span><span class="p">()</span>
-      <span class="k">if</span> <span class="nx">@value</span><span class="p">()</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;or&#39;</span><span class="p">,</span> <span class="s1">&#39;and&#39;</span><span class="p">]</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="nx">@tokens</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;COMPOUND_ASSIGN&#39;</span><span class="p">,</span> <span class="nx">CONVERSIONS</span><span class="p">[</span><span class="nx">@value</span><span class="p">()]</span> <span class="o">+</span> <span class="s1">&#39;=&#39;</span><span class="p">,</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">2</span><span class="p">]])</span>
-        <span class="k">return</span> <span class="kc">true</span>
-    <span class="k">if</span> <span class="nx">value</span> <span class="o">is</span> <span class="s1">&#39;;&#39;</span>                         <span class="k">then</span> <span class="nv">tag = </span><span class="s1">&#39;TERMINATOR&#39;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">LOGIC</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>           <span class="k">then</span> <span class="nv">tag = </span><span class="s1">&#39;LOGIC&#39;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">MATH</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>            <span class="k">then</span> <span class="nv">tag = </span><span class="s1">&#39;MATH&#39;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">COMPARE</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>         <span class="k">then</span> <span class="nv">tag = </span><span class="s1">&#39;COMPARE&#39;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">COMPOUND_ASSIGN</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="k">then</span> <span class="nv">tag = </span><span class="s1">&#39;COMPOUND_ASSIGN&#39;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">UNARY</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>           <span class="k">then</span> <span class="nv">tag = </span><span class="s1">&#39;UNARY&#39;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">SHIFT</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span>           <span class="k">then</span> <span class="nv">tag = </span><span class="s1">&#39;SHIFT&#39;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">CALLABLE</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">())</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">spaced</span>
-      <span class="k">if</span> <span class="nx">value</span> <span class="o">is</span> <span class="s1">&#39;(&#39;</span>
-        <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;FUNC_EXIST&#39;</span> <span class="k">if</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;?&#39;</span>
-        <span class="nv">tag = </span><span class="s1">&#39;CALL_START&#39;</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">value</span> <span class="o">is</span> <span class="s1">&#39;[&#39;</span>
-        <span class="nv">tag = </span><span class="s1">&#39;INDEX_START&#39;</span>
-        <span class="nx">@tag</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;INDEX_SOAK&#39;</span>  <span class="k">if</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">is</span> <span class="s1">&#39;?&#39;</span>
-        <span class="nx">@tag</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;INDEX_PROTO&#39;</span> <span class="k">if</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">is</span> <span class="s1">&#39;::&#39;</span>
-    <span class="nx">@token</span> <span class="nx">tag</span><span class="p">,</span> <span class="nx">value</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-22">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-22">#</a>               </div>               <h2>Token Manipulators</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-23">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-23">#</a>               </div>               <p>As we consume a new <code>IDENTIFIER</code>, look at the previous token to determine
-if it's a special kind of accessor. Return <code>true</code> if any type of accessor
-is the previous token.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">tagAccessor</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="p">(</span><span class="o">not</span> <span class="nv">prev = </span><span class="nx">@prev</span><span class="p">())</span> <span class="o">or</span> <span class="p">(</span><span class="nx">prev</span> <span class="o">and</span> <span class="nx">prev</span><span class="p">.</span><span class="nx">spaced</span><span class="p">)</span>
-    <span class="nv">accessor = </span><span class="k">if</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;::&#39;</span>
-      <span class="nx">@tag</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;PROTOTYPE_ACCESS&#39;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;.&#39;</span> <span class="o">and</span> <span class="o">not</span> <span class="p">(</span><span class="nx">@value</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;.&#39;</span><span class="p">)</span>
-      <span class="k">if</span> <span class="nx">@tag</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;?&#39;</span>
-        <span class="nx">@tag</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;SOAK_ACCESS&#39;</span><span class="p">)</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-      <span class="k">else</span>
-        <span class="nx">@tag</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;PROPERTY_ACCESS&#39;</span>
-    <span class="k">else</span>
-      <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;@&#39;</span>
-    <span class="k">if</span> <span class="nx">accessor</span> <span class="k">then</span> <span class="s1">&#39;accessor&#39;</span> <span class="k">else</span> <span class="kc">false</span></pre></div>             </td>           </tr>                               <tr id="section-24">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-24">#</a>               </div>               <p>Sanitize a heredoc or herecomment by escaping internal double quotes and
-erasing all external indentation on the left-hand side.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">sanitizeHeredoc</span><span class="o">:</span> <span class="p">(</span><span class="nx">doc</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">indent = </span><span class="nx">options</span><span class="p">.</span><span class="nx">indent</span>
-    <span class="k">return</span> <span class="nx">doc</span> <span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">herecomment</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">include</span> <span class="nx">doc</span><span class="p">,</span> <span class="s1">&#39;\n&#39;</span>
-    <span class="nx">unless</span> <span class="nx">options</span><span class="p">.</span><span class="nx">herecomment</span>
-      <span class="k">while</span> <span class="p">(</span><span class="nv">match = </span><span class="nx">HEREDOC_INDENT</span><span class="p">.</span><span class="nx">exec</span><span class="p">(</span><span class="nx">doc</span><span class="p">))</span> <span class="o">isnt</span> <span class="kc">null</span>
-        <span class="nv">attempt = </span><span class="k">if</span> <span class="nx">match</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">?</span> <span class="k">then</span> <span class="nx">match</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">else</span> <span class="nx">match</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
-        <span class="nv">indent = </span><span class="nx">attempt</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">indent</span><span class="o">?</span> <span class="o">or</span> <span class="nx">attempt</span><span class="p">.</span><span class="nx">length</span> <span class="o">&lt;</span> <span class="nx">indent</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nx">indent</span> <span class="o">or=</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">doc = </span><span class="nx">doc</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">&quot;^&quot;</span> <span class="o">+</span> <span class="nx">indent</span><span class="p">,</span> <span class="s1">&#39;gm&#39;</span><span class="p">),</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
-    <span class="k">return</span> <span class="nx">doc</span> <span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">herecomment</span>
-    <span class="nv">doc = </span><span class="nx">doc</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/^\n/</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
-    <span class="nx">doc</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="nx">MULTILINER</span><span class="p">,</span> <span class="s2">&quot;\\n&quot;</span><span class="p">)</span>
-       <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="nx">options</span><span class="p">.</span><span class="nx">quote</span><span class="p">,</span> <span class="s1">&#39;g&#39;</span><span class="p">),</span> <span class="s2">&quot;\\#{options.quote}&quot;</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-25">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-25">#</a>               </div>               <p>A source of ambiguity in our grammar used to be parameter lists in function
-definitions versus argument lists in function calls. Walk backwards, tagging
-parameters specially in order to make things easier for the parser.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">tagParameters</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="k">if</span> <span class="nx">@tag</span><span class="p">()</span> <span class="o">isnt</span> <span class="s1">&#39;)&#39;</span>
-    <span class="nv">i = </span><span class="mi">0</span>
-    <span class="nx">loop</span>
-      <span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span>
-      <span class="nv">tok = </span><span class="nx">@prev</span> <span class="nx">i</span>
-      <span class="k">return</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">tok</span>
-      <span class="k">switch</span> <span class="nx">tok</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-        <span class="k">when</span> <span class="s1">&#39;IDENTIFIER&#39;</span>       <span class="k">then</span> <span class="nx">tok</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;PARAM&#39;</span>
-        <span class="k">when</span> <span class="s1">&#39;)&#39;</span>                <span class="k">then</span> <span class="nx">tok</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;PARAM_END&#39;</span>
-        <span class="k">when</span> <span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="s1">&#39;CALL_START&#39;</span>  <span class="k">then</span> <span class="k">return</span> <span class="nx">tok</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;PARAM_START&#39;</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-26">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-26">#</a>               </div>               <p>Close up all remaining open blocks at the end of the file.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">closeIndentation</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@outdentToken</span> <span class="nx">@indent</span></pre></div>             </td>           </tr>                               <tr id="section-27">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-27">#</a>               </div>               <p>The error for when you try to use a forbidden word in JavaScript as
-an identifier.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">identifierError</span><span class="o">:</span> <span class="p">(</span><span class="nx">word</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;SyntaxError: Reserved word \&quot;#{word}\&quot; on line #{@line + 1}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-28">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-28">#</a>               </div>               <p>The error for when you try to assign to a reserved word in JavaScript,
-like "function" or "default".</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">assignmentError</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;SyntaxError: Reserved word \&quot;#{@value()}\&quot; on line #{@line + 1} can&#39;t be assigned&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-29">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-29">#</a>               </div>               <p>Matches a balanced group such as a single or double-quoted string. Pass in
-a series of delimiters, all of which must be nested correctly within the
-contents of the string. This method allows us to have strings within
-interpolations within strings, ad infinitum.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">balancedString</span><span class="o">:</span> <span class="p">(</span><span class="nx">str</span><span class="p">,</span> <span class="nx">delimited</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
-    <span class="nv">slash = </span><span class="nx">delimited</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;/&#39;</span>
-    <span class="nv">levels = </span><span class="p">[]</span>
-    <span class="nv">i = </span><span class="mi">0</span>
-    <span class="k">while</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">str</span><span class="p">.</span><span class="nx">length</span>
-      <span class="k">if</span> <span class="nx">levels</span><span class="p">.</span><span class="nx">length</span> <span class="o">and</span> <span class="nx">starts</span> <span class="nx">str</span><span class="p">,</span> <span class="s1">&#39;\\&#39;</span><span class="p">,</span> <span class="nx">i</span>
-        <span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span>
-      <span class="k">else</span>
-        <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">delimited</span>
-          <span class="p">[</span><span class="nx">open</span><span class="p">,</span> <span class="nx">close</span><span class="p">]</span> <span class="o">=</span> <span class="nx">pair</span>
-          <span class="k">if</span> <span class="nx">levels</span><span class="p">.</span><span class="nx">length</span> <span class="o">and</span> <span class="nx">starts</span><span class="p">(</span><span class="nx">str</span><span class="p">,</span> <span class="nx">close</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">and</span> <span class="nx">levels</span><span class="p">[</span><span class="nx">levels</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">is</span> <span class="nx">pair</span>
-            <span class="nx">levels</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span>
-            <span class="nx">i</span> <span class="o">+=</span> <span class="nx">close</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-            <span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span> <span class="nx">unless</span> <span class="nx">levels</span><span class="p">.</span><span class="nx">length</span>
-            <span class="k">break</span>
-          <span class="k">else</span> <span class="k">if</span> <span class="nx">starts</span> <span class="nx">str</span><span class="p">,</span> <span class="nx">open</span><span class="p">,</span> <span class="nx">i</span>
-            <span class="nx">levels</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">pair</span><span class="p">)</span>
-            <span class="nx">i</span> <span class="o">+=</span> <span class="nx">open</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-            <span class="k">break</span>
-      <span class="k">break</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">levels</span><span class="p">.</span><span class="nx">length</span> <span class="o">or</span> <span class="nx">slash</span> <span class="o">and</span> <span class="nx">starts</span> <span class="nx">str</span><span class="p">,</span> <span class="s1">&#39;\n&#39;</span><span class="p">,</span> <span class="nx">i</span>
-      <span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span>
-    <span class="k">if</span> <span class="nx">levels</span><span class="p">.</span><span class="nx">length</span>
-      <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="nx">slash</span>
-      <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;SyntaxError: Unterminated #{levels.pop()[0]} starting on line #{@line + 1}&quot;</span>
-    <span class="k">if</span> <span class="o">not</span> <span class="nx">i</span> <span class="k">then</span> <span class="kc">false</span> <span class="k">else</span> <span class="nx">str</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-30">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-30">#</a>               </div>               <p>Expand variables and expressions inside double-quoted strings using
-<a href="http://wiki.ecmascript.org/doku.php?id=strawman:string_interpolation">ECMA Harmony's interpolation syntax</a>
-for substitution of bare variables as well as arbitrary expressions.</p>
-
-<pre><code>"Hello #{name.capitalize()}."
-</code></pre>
-
-<p>If it encounters an interpolation, this method will recursively create a
-new Lexer, tokenize the interpolated contents, and merge them into the
-token stream.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">interpolateString</span><span class="o">:</span> <span class="p">(</span><span class="nx">str</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
-    <span class="k">if</span> <span class="nx">str</span><span class="p">.</span><span class="nx">length</span> <span class="o">&lt;</span> <span class="mi">3</span> <span class="o">or</span> <span class="o">not</span> <span class="nx">starts</span> <span class="nx">str</span><span class="p">,</span> <span class="s1">&#39;&quot;&#39;</span>
-      <span class="nx">@token</span> <span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="nx">str</span>
-    <span class="k">else</span>
-      <span class="nv">lexer   = </span><span class="k">new</span> <span class="nx">Lexer</span>
-      <span class="nv">tokens  = </span><span class="p">[]</span>
-      <span class="nv">quote   = </span><span class="nx">str</span><span class="p">.</span><span class="nx">substring</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
-      <span class="p">[</span><span class="nx">i</span><span class="p">,</span> <span class="nx">pi</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
-      <span class="k">while</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">str</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-        <span class="k">if</span> <span class="nx">starts</span> <span class="nx">str</span><span class="p">,</span> <span class="s1">&#39;\\&#39;</span><span class="p">,</span> <span class="nx">i</span>
-          <span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span>
-        <span class="k">else</span> <span class="k">if</span> <span class="nv">expr = </span><span class="nx">@balancedString</span><span class="p">(</span><span class="nx">str</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">i</span><span class="p">),</span> <span class="p">[[</span><span class="s1">&#39;#{&#39;</span><span class="p">,</span> <span class="s1">&#39;}&#39;</span><span class="p">]])</span>
-          <span class="nx">tokens</span><span class="p">.</span><span class="nx">push</span> <span class="p">[</span><span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="nx">quote</span> <span class="o">+</span> <span class="nx">str</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">pi</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">+</span> <span class="nx">quote</span><span class="p">]</span> <span class="k">if</span> <span class="nx">pi</span> <span class="o">&lt;</span> <span class="nx">i</span>
-          <span class="nv">inner = </span><span class="nx">expr</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-          <span class="k">if</span> <span class="nx">inner</span><span class="p">.</span><span class="nx">length</span>
-            <span class="nv">inner = </span><span class="nx">inner</span><span class="p">.</span><span class="nx">replace</span> <span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s1">&#39;\\\\&#39;</span> <span class="o">+</span> <span class="nx">quote</span><span class="p">,</span> <span class="s1">&#39;g&#39;</span><span class="p">),</span> <span class="nx">quote</span> <span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">heredoc</span>
-            <span class="nv">nested = </span><span class="nx">lexer</span><span class="p">.</span><span class="nx">tokenize</span> <span class="s2">&quot;(#{inner})&quot;</span><span class="p">,</span> <span class="nx">line</span><span class="o">:</span> <span class="nx">@line</span>
-            <span class="p">(</span><span class="nx">tok</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;)&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="nx">tok</span><span class="p">,</span> <span class="nx">idx</span> <span class="k">in</span> <span class="nx">nested</span> <span class="k">when</span> <span class="nx">tok</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;CALL_END&#39;</span>
-            <span class="nx">nested</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span>
-            <span class="nx">tokens</span><span class="p">.</span><span class="nx">push</span> <span class="p">[</span><span class="s1">&#39;TOKENS&#39;</span><span class="p">,</span> <span class="nx">nested</span><span class="p">]</span>
-          <span class="k">else</span>
-            <span class="nx">tokens</span><span class="p">.</span><span class="nx">push</span> <span class="p">[</span><span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="nx">quote</span> <span class="o">+</span> <span class="nx">quote</span><span class="p">]</span>
-          <span class="nx">i</span> <span class="o">+=</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-          <span class="nv">pi = </span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span>
-        <span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span>
-      <span class="nx">tokens</span><span class="p">.</span><span class="nx">push</span> <span class="p">[</span><span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="nx">quote</span> <span class="o">+</span> <span class="nx">str</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">pi</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">+</span> <span class="nx">quote</span><span class="p">]</span> <span class="k">if</span> <span class="nx">pi</span> <span class="o">&lt;</span> <span class="nx">i</span> <span class="o">and</span> <span class="nx">pi</span> <span class="o">&lt;</span> <span class="nx">str</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-      <span class="nx">tokens</span><span class="p">.</span><span class="nx">unshift</span> <span class="p">[</span><span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="s1">&#39;&quot;&quot;&#39;</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;STRING&#39;</span>
-      <span class="nv">interpolated = </span><span class="nx">tokens</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">1</span>
-      <span class="nx">@token</span> <span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="s1">&#39;(&#39;</span> <span class="k">if</span> <span class="nx">interpolated</span>
-      <span class="k">for</span> <span class="nx">token</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">tokens</span>
-        <span class="p">[</span><span class="nx">tag</span><span class="p">,</span> <span class="nx">value</span><span class="p">]</span> <span class="o">=</span> <span class="nx">token</span>
-        <span class="k">if</span> <span class="nx">tag</span> <span class="o">is</span> <span class="s1">&#39;TOKENS&#39;</span>
-          <span class="vi">@tokens = </span><span class="nx">@tokens</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">value</span>
-        <span class="k">else</span> <span class="k">if</span> <span class="nx">tag</span> <span class="o">is</span> <span class="s1">&#39;STRING&#39;</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">escapeQuotes</span>
-          <span class="nv">escaped = </span><span class="nx">value</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">value</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">).</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/&quot;/g</span><span class="p">,</span> <span class="s1">&#39;\\&quot;&#39;</span><span class="p">)</span>
-          <span class="nx">@token</span> <span class="nx">tag</span><span class="p">,</span> <span class="s2">&quot;\&quot;#{escaped}\&quot;&quot;</span>
-        <span class="k">else</span>
-          <span class="nx">@token</span> <span class="nx">tag</span><span class="p">,</span> <span class="nx">value</span>
-        <span class="nx">@token</span> <span class="s1">&#39;+&#39;</span><span class="p">,</span> <span class="s1">&#39;+&#39;</span> <span class="k">if</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">tokens</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-      <span class="nx">@token</span> <span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span> <span class="k">if</span> <span class="nx">interpolated</span>
-      <span class="nx">tokens</span></pre></div>             </td>           </tr>                               <tr id="section-31">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-31">#</a>               </div>               <h2>Helpers</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-32">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-32">#</a>               </div>               <p>Add a token to the results, taking note of the line number.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">token</span><span class="o">:</span> <span class="p">(</span><span class="nx">tag</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@tokens</span><span class="p">.</span><span class="nx">push</span> <span class="p">[</span><span class="nx">tag</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">@line</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-33">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-33">#</a>               </div>               <p>Peek at a tag in the current token stream.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">tag</span><span class="o">:</span> <span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="nx">newTag</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">unless</span> <span class="nv">tok = </span><span class="nx">@prev</span> <span class="nx">index</span>
-    <span class="k">return</span> <span class="nx">tok</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nx">newTag</span> <span class="k">if</span> <span class="nx">newTag</span><span class="o">?</span>
-    <span class="nx">tok</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-34">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-34">#</a>               </div>               <p>Peek at a value in the current token stream.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">value</span><span class="o">:</span> <span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="nx">val</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">unless</span> <span class="nv">tok = </span><span class="nx">@prev</span> <span class="nx">index</span>
-    <span class="k">return</span> <span class="nx">tok</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span> <span class="k">if</span> <span class="nx">val</span><span class="o">?</span>
-    <span class="nx">tok</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-35">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-35">#</a>               </div>               <p>Peek at a previous token, entire.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">prev</span><span class="o">:</span> <span class="p">(</span><span class="nx">index</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@tokens</span><span class="p">[</span><span class="nx">@tokens</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="p">(</span><span class="nx">index</span> <span class="o">or</span> <span class="mi">1</span><span class="p">)]</span></pre></div>             </td>           </tr>                               <tr id="section-36">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-36">#</a>               </div>               <p>Attempt to match a string against the current chunk, returning the indexed
-match if successful, and <code>false</code> otherwise.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">match</span><span class="o">:</span> <span class="p">(</span><span class="nx">regex</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="nx">unless</span> <span class="nv">m = </span><span class="nx">@chunk</span><span class="p">.</span><span class="nx">match</span> <span class="nx">regex</span>
-    <span class="k">if</span> <span class="nx">m</span> <span class="k">then</span> <span class="nx">m</span><span class="p">[</span><span class="nx">index</span><span class="p">]</span> <span class="k">else</span> <span class="kc">false</span></pre></div>             </td>           </tr>                               <tr id="section-37">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-37">#</a>               </div>               <p>Are we in the midst of an unfinished expression?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">unfinished</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">prev = </span><span class="nx">@prev</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-    <span class="nx">@value</span><span class="p">()</span> <span class="o">and</span> <span class="nx">@value</span><span class="p">().</span><span class="nx">match</span> <span class="o">and</span> <span class="nx">@value</span><span class="p">().</span><span class="nx">match</span><span class="p">(</span><span class="nx">NO_NEWLINE</span><span class="p">)</span> <span class="o">and</span>
-      <span class="nx">prev</span> <span class="o">and</span> <span class="p">(</span><span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">&#39;.&#39;</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@value</span><span class="p">().</span><span class="nx">match</span><span class="p">(</span><span class="nx">CODE</span><span class="p">)</span> <span class="o">and</span>
-      <span class="o">not</span> <span class="nx">@chunk</span><span class="p">.</span><span class="nx">match</span> <span class="nx">ASSIGNED</span></pre></div>             </td>           </tr>                               <tr id="section-38">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-38">#</a>               </div>               <h2>Constants</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-39">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-39">#</a>               </div>               <p>Keywords that CoffeeScript shares in common with JavaScript.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">JS_KEYWORDS = </span><span class="p">[</span>
-  <span class="s2">&quot;if&quot;</span><span class="p">,</span> <span class="s2">&quot;else&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;new&quot;</span><span class="p">,</span> <span class="s2">&quot;return&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;try&quot;</span><span class="p">,</span> <span class="s2">&quot;catch&quot;</span><span class="p">,</span> <span class="s2">&quot;finally&quot;</span><span class="p">,</span> <span class="s2">&quot;throw&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;break&quot;</span><span class="p">,</span> <span class="s2">&quot;continue&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;for&quot;</span><span class="p">,</span> <span class="s2">&quot;in&quot;</span><span class="p">,</span> <span class="s2">&quot;while&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;delete&quot;</span><span class="p">,</span> <span class="s2">&quot;instanceof&quot;</span><span class="p">,</span> <span class="s2">&quot;typeof&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;switch&quot;</span><span class="p">,</span> <span class="s2">&quot;super&quot;</span><span class="p">,</span> <span class="s2">&quot;extends&quot;</span><span class="p">,</span> <span class="s2">&quot;class&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="s2">&quot;null&quot;</span><span class="p">,</span> <span class="s2">&quot;debugger&quot;</span>
-<span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-40">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-40">#</a>               </div>               <p>CoffeeScript-only keywords, which we're more relaxed about allowing. They can't
-be used standalone, but you can reference them as an attached property.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">COFFEE_ALIASES = </span> <span class="p">[</span><span class="s2">&quot;and&quot;</span><span class="p">,</span> <span class="s2">&quot;or&quot;</span><span class="p">,</span> <span class="s2">&quot;is&quot;</span><span class="p">,</span> <span class="s2">&quot;isnt&quot;</span><span class="p">,</span> <span class="s2">&quot;not&quot;</span><span class="p">]</span>
-<span class="nv">COFFEE_KEYWORDS = </span><span class="nx">COFFEE_ALIASES</span><span class="p">.</span><span class="nx">concat</span> <span class="p">[</span>
-  <span class="s2">&quot;then&quot;</span><span class="p">,</span> <span class="s2">&quot;unless&quot;</span><span class="p">,</span> <span class="s2">&quot;until&quot;</span><span class="p">,</span> <span class="s2">&quot;loop&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;yes&quot;</span><span class="p">,</span> <span class="s2">&quot;no&quot;</span><span class="p">,</span> <span class="s2">&quot;on&quot;</span><span class="p">,</span> <span class="s2">&quot;off&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;of&quot;</span><span class="p">,</span> <span class="s2">&quot;by&quot;</span><span class="p">,</span> <span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="s2">&quot;when&quot;</span>
-<span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-41">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-41">#</a>               </div>               <p>The list of keywords that are reserved by JavaScript, but not used, or are
-used by CoffeeScript internally. We throw an error when these are encountered,
-to avoid having a JavaScript error at runtime.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">RESERVED = </span><span class="p">[</span>
-  <span class="s2">&quot;case&quot;</span><span class="p">,</span> <span class="s2">&quot;default&quot;</span><span class="p">,</span> <span class="s2">&quot;do&quot;</span><span class="p">,</span> <span class="s2">&quot;function&quot;</span><span class="p">,</span> <span class="s2">&quot;var&quot;</span><span class="p">,</span> <span class="s2">&quot;void&quot;</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;const&quot;</span><span class="p">,</span> <span class="s2">&quot;let&quot;</span><span class="p">,</span> <span class="s2">&quot;enum&quot;</span><span class="p">,</span> <span class="s2">&quot;export&quot;</span><span class="p">,</span> <span class="s2">&quot;import&quot;</span><span class="p">,</span> <span class="s2">&quot;native&quot;</span><span class="p">,</span>
-  <span class="s2">&quot;__hasProp&quot;</span><span class="p">,</span> <span class="s2">&quot;__extends&quot;</span><span class="p">,</span> <span class="s2">&quot;__slice&quot;</span>
-<span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-42">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-42">#</a>               </div>               <p>The superset of both JavaScript keywords and reserved words, none of which may
-be used as identifiers or properties.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">JS_FORBIDDEN = </span><span class="nx">JS_KEYWORDS</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">RESERVED</span></pre></div>             </td>           </tr>                               <tr id="section-43">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-43">#</a>               </div>               <p>Token matching regexes.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">IDENTIFIER    = </span><span class="sr">/^([a-zA-Z\$_](\w|\$)*)/</span>
-<span class="nv">NUMBER        = </span><span class="sr">/^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b/i</span>
-<span class="nv">HEREDOC       = </span><span class="sr">/^(&quot;{6}|&#39;{6}|&quot;{3}([\s\S]*?)\n?([ \t]*)&quot;{3}|&#39;{3}([\s\S]*?)\n?([ \t]*)&#39;{3})/</span>
-<span class="nv">OPERATOR      = </span><span class="sr">/^(-[\-=&gt;]?|\+[+=]?|[*&amp;|\/%=&lt;&gt;^:!?]+)([ \t]*)/</span>
-<span class="nv">WHITESPACE    = </span><span class="sr">/^([ \t]+)/</span>
-<span class="nv">COMMENT       = </span><span class="sr">/^(###([^#][\s\S]*?)(###[ \t]*\n|(###)?$)|(\s*#(?!##[^#])[^\n]*)+)/</span>
-<span class="nv">CODE          = </span><span class="sr">/^((-|=)&gt;)/</span>
-<span class="nv">MULTI_DENT    = </span><span class="sr">/^((\n([ \t]*))+)(\.)?/</span>
-<span class="nv">LAST_DENTS    = </span><span class="sr">/\n([ \t]*)/g</span>
-<span class="nv">LAST_DENT     = </span><span class="sr">/\n([ \t]*)/</span></pre></div>             </td>           </tr>                               <tr id="section-44">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-44">#</a>               </div>               <p>Regex-matching-regexes.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">REGEX_START         = </span><span class="sr">/^\/([^\/])/</span>
-<span class="nv">REGEX_INTERPOLATION = </span><span class="sr">/([^\\]#\{.*[^\\]\})/</span>
-<span class="nv">REGEX_END           = </span><span class="sr">/^(([imgy]{1,4})\b|\W|$)/</span>
-<span class="nv">REGEX_ESCAPE        = </span><span class="sr">/\\[^\$]/g</span></pre></div>             </td>           </tr>                               <tr id="section-45">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-45">#</a>               </div>               <p>Token cleaning regexes.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">JS_CLEANER      = </span><span class="sr">/(^`|`$)/g</span>
-<span class="nv">MULTILINER      = </span><span class="sr">/\n/g</span>
-<span class="nv">NO_NEWLINE      = </span><span class="sr">/^([+\*&amp;|\/\-%=&lt;&gt;!.\\][&lt;&gt;=&amp;|]*|and|or|is|isnt|not|delete|typeof|instanceof)$/</span>
-<span class="nv">HEREDOC_INDENT  = </span><span class="sr">/(\n+([ \t]*)|^([ \t]+))/g</span>
-<span class="nv">ASSIGNED        = </span><span class="sr">/^\s*(([a-zA-Z\$_@]\w*|[&quot;&#39;][^\r\n]+?[&quot;&#39;]|\d+)[ \t]*?[:=][^:=])/</span>
-<span class="nv">NEXT_CHARACTER  = </span><span class="sr">/^\s*(\S)/</span></pre></div>             </td>           </tr>                               <tr id="section-46">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-46">#</a>               </div>               <p>Compound assignment tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">COMPOUND_ASSIGN = </span><span class="p">[</span><span class="s1">&#39;-=&#39;</span><span class="p">,</span> <span class="s1">&#39;+=&#39;</span><span class="p">,</span> <span class="s1">&#39;/=&#39;</span><span class="p">,</span> <span class="s1">&#39;*=&#39;</span><span class="p">,</span> <span class="s1">&#39;%=&#39;</span><span class="p">,</span> <span class="s1">&#39;||=&#39;</span><span class="p">,</span> <span class="s1">&#39;&amp;&amp;=&#39;</span><span class="p">,</span> <span class="s1">&#39;?=&#39;</span><span class="p">,</span> <span class="s1">&#39;&lt;&lt;=&#39;</span><span class="p">,</span> <span class="s1">&#39;&gt;&gt;=&#39;</span><span class="p">,</span> <span class="s1">&#39;&gt;&gt;&gt;=&#39;</span><span class="p">,</span> <span class="s1">&#39;&amp;=&#39;</span><span class="p">,</span> <span class="s1">&#39;^=&#39;</span><span class="p">,</span> <span class="s1">&#39;|=&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-47">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-47">#</a>               </div>               <p>Unary tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">UNARY   = </span><span class="p">[</span><span class="s1">&#39;UMINUS&#39;</span><span class="p">,</span> <span class="s1">&#39;UPLUS&#39;</span><span class="p">,</span> <span class="s1">&#39;!&#39;</span><span class="p">,</span> <span class="s1">&#39;!!&#39;</span><span class="p">,</span> <span class="s1">&#39;~&#39;</span><span class="p">,</span> <span class="s1">&#39;TYPEOF&#39;</span><span class="p">,</span> <span class="s1">&#39;DELETE&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-48">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-48">#</a>               </div>               <p>Logical tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">LOGIC   = </span><span class="p">[</span><span class="s1">&#39;&amp;&#39;</span><span class="p">,</span> <span class="s1">&#39;|&#39;</span><span class="p">,</span> <span class="s1">&#39;^&#39;</span><span class="p">,</span> <span class="s1">&#39;&amp;&amp;&#39;</span><span class="p">,</span> <span class="s1">&#39;||&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-49">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-49">#</a>               </div>               <p>Bit-shifting tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">SHIFT   = </span><span class="p">[</span><span class="s1">&#39;&lt;&lt;&#39;</span><span class="p">,</span> <span class="s1">&#39;&gt;&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;&gt;&gt;&gt;&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-50">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-50">#</a>               </div>               <p>Comparison tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">COMPARE = </span><span class="p">[</span><span class="s1">&#39;&lt;=&#39;</span><span class="p">,</span> <span class="s1">&#39;&lt;&#39;</span><span class="p">,</span> <span class="s1">&#39;&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;&gt;=&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-51">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-51">#</a>               </div>               <p>Mathmatical tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">MATH    = </span><span class="p">[</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;/&#39;</span><span class="p">,</span> <span class="s1">&#39;%&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-52">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-52">#</a>               </div>               <p>Tokens which a regular expression will never immediately follow, but which
-a division operator might.</p>
-
-<p>See: http://www.mozilla.org/js/language/js20-2002-04/rationale/syntax.html#regular-expressions</p>
-
-<p>Our list is shorter, due to sans-parentheses method calls.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">NOT_REGEX = </span><span class="p">[</span><span class="s1">&#39;NUMBER&#39;</span><span class="p">,</span> <span class="s1">&#39;REGEX&#39;</span><span class="p">,</span> <span class="s1">&#39;++&#39;</span><span class="p">,</span> <span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="s1">&#39;FALSE&#39;</span><span class="p">,</span> <span class="s1">&#39;NULL&#39;</span><span class="p">,</span> <span class="s1">&#39;TRUE&#39;</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-53">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-53">#</a>               </div>               <p>Tokens which could legitimately be invoked or indexed. A opening
-parentheses or bracket following these tokens will be recorded as the start
-of a function invocation or indexing operation.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">CALLABLE = </span><span class="p">[</span><span class="s1">&#39;IDENTIFIER&#39;</span><span class="p">,</span> <span class="s1">&#39;SUPER&#39;</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span><span class="p">,</span> <span class="s1">&#39;}&#39;</span><span class="p">,</span> <span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="s1">&#39;@&#39;</span><span class="p">,</span> <span class="s1">&#39;THIS&#39;</span><span class="p">,</span> <span class="s1">&#39;?&#39;</span><span class="p">,</span> <span class="s1">&#39;::&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-54">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-54">#</a>               </div>               <p>Tokens that, when immediately preceding a <code>WHEN</code>, indicate that the <code>WHEN</code>
-occurs at the start of a line. We disambiguate these from trailing whens to
-avoid an ambiguity in the grammar.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">LINE_BREAK = </span><span class="p">[</span><span class="s1">&#39;INDENT&#39;</span><span class="p">,</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">,</span> <span class="s1">&#39;TERMINATOR&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-55">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-55">#</a>               </div>               <p>Conversions from CoffeeScript operators into JavaScript ones.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">CONVERSIONS =</span>
-  <span class="s1">&#39;and&#39;</span><span class="o">:</span>  <span class="s1">&#39;&amp;&amp;&#39;</span>
-  <span class="s1">&#39;or&#39;</span><span class="o">:</span>   <span class="s1">&#39;||&#39;</span>
-  <span class="s1">&#39;is&#39;</span><span class="o">:</span>   <span class="s1">&#39;==&#39;</span>
-  <span class="s1">&#39;isnt&#39;</span><span class="o">:</span> <span class="s1">&#39;!=&#39;</span>
-  <span class="s1">&#39;not&#39;</span><span class="o">:</span>  <span class="s1">&#39;!&#39;</span>
-  <span class="s1">&#39;===&#39;</span><span class="o">:</span>  <span class="s1">&#39;==&#39;</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/nodes.html b/node/node_modules/jade/support/coffee-script/documentation/docs/nodes.html
deleted file mode 100644 (file)
index 181e035..0000000
+++ /dev/null
@@ -1,1245 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>nodes.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               nodes.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p><code>nodes.coffee</code> contains all of the node classes for the syntax tree. Most
-nodes are created as the result of actions in the <a href="grammar.html">grammar</a>,
-but some are created by other nodes as a method of code generation. To convert
-the syntax tree into a string of JavaScript code, call <code>compile()</code> on the root.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="p">{</span><span class="nx">Scope</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">&#39;./scope&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>Import the helpers we plan to use.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="p">{</span><span class="nx">compact</span><span class="p">,</span> <span class="nx">flatten</span><span class="p">,</span> <span class="nx">merge</span><span class="p">,</span> <span class="nx">del</span><span class="p">,</span> <span class="nx">include</span><span class="p">,</span> <span class="nx">indexOf</span><span class="p">,</span> <span class="nx">starts</span><span class="p">,</span> <span class="nx">ends</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./helpers&#39;</span><span class="p">).</span><span class="nx">helpers</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <h3>BaseNode</h3>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>The <strong>BaseNode</strong> is the abstract base class for all nodes in the syntax tree.
-Each subclass implements the <code>compileNode</code> method, which performs the
-code generation for that node. To compile a node to JavaScript,
-call <code>compile</code> on it, which wraps <code>compileNode</code> in some generic extra smarts,
-to know when the generated code needs to be wrapped up in a closure.
-An options hash is passed and cloned throughout, containing information about
-the environment from higher in the tree (such as if a returned value is
-being requested by the surrounding function), information about the current
-scope, and indentation level.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.BaseNode = </span><span class="nx">class</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="vi">@tags = </span><span class="p">{}</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Common logic for determining whether to wrap this node in a closure before
-compiling it, or to compile directly. We need to wrap if this node is a
-<em>statement</em>, and it's not a <em>pureStatement</em>, and we're not at
-the top level of a block (which would be unnecessary), and we haven't
-already been asked to return the result (because statements know how to
-return results).</p>
-
-<p>If a Node is <em>topSensitive</em>, that means that it needs to compile differently
-depending on whether it's being used as part of a larger expression, or is a
-top-level statement within the function body.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compile</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="vi">@options = </span><span class="nx">merge</span> <span class="nx">o</span> <span class="o">or</span> <span class="p">{}</span>
-    <span class="vi">@tab     = </span><span class="nx">o</span><span class="p">.</span><span class="nx">indent</span>
-    <span class="nx">del</span> <span class="nx">@options</span><span class="p">,</span> <span class="s1">&#39;chainRoot&#39;</span> <span class="nx">unless</span> <span class="k">this</span> <span class="k">instanceof</span> <span class="nx">AccessorNode</span> <span class="o">or</span> <span class="k">this</span> <span class="k">instanceof</span> <span class="nx">IndexNode</span>
-    <span class="nv">top     = </span><span class="k">if</span> <span class="nx">@topSensitive</span><span class="p">()</span> <span class="k">then</span> <span class="nx">@options</span><span class="p">.</span><span class="nx">top</span> <span class="k">else</span> <span class="nx">del</span> <span class="nx">@options</span><span class="p">,</span> <span class="s1">&#39;top&#39;</span>
-    <span class="nv">closure = </span><span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@isPureStatement</span><span class="p">()</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">top</span> <span class="o">and</span>
-              <span class="o">not</span> <span class="nx">@options</span><span class="p">.</span><span class="nx">asStatement</span> <span class="o">and</span> <span class="k">this</span> <span class="o">not</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span> <span class="o">and</span>
-              <span class="o">not</span> <span class="nx">@containsPureStatement</span><span class="p">()</span>
-    <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">startLevel</span><span class="p">()</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">keepLevel</span>
-    <span class="nv">code = </span><span class="k">if</span> <span class="nx">closure</span> <span class="k">then</span> <span class="nx">@compileClosure</span><span class="p">(</span><span class="nx">@options</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@compileNode</span><span class="p">(</span><span class="nx">@options</span><span class="p">)</span>
-    <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">endLevel</span><span class="p">()</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">keepLevel</span>
-    <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Statements converted into expressions via closure-wrapping share a scope
-object with their parent closure, to preserve the expected lexical scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileClosure</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="vi">@tab = </span><span class="nx">o</span><span class="p">.</span><span class="nx">indent</span>
-    <span class="nv">o.sharedScope = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span>
-    <span class="nx">ClosureNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">compile</span> <span class="nx">o</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>If the code generation wishes to use the result of a complex expression
-in multiple places, ensure that the expression is only ever evaluated once,
-by assigning it to a temporary variable.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileReference</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
-    <span class="nv">pair = </span><span class="k">if</span> <span class="o">not</span> <span class="p">(</span><span class="nx">@containsType</span><span class="p">(</span><span class="nx">CallNode</span><span class="p">)</span> <span class="o">or</span>
-                  <span class="p">(</span><span class="k">this</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="p">(</span><span class="o">not</span> <span class="p">(</span><span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span><span class="p">)</span> <span class="o">or</span> <span class="nx">@hasProperties</span><span class="p">())))</span>
-      <span class="p">[</span><span class="k">this</span><span class="p">,</span> <span class="k">this</span><span class="p">]</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="k">this</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">assignment</span>
-      <span class="k">this</span><span class="p">.</span><span class="nx">cacheIndexes</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="k">else</span>
-      <span class="nv">reference = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;ref&#39;</span>
-      <span class="nv">compiled  = </span><span class="k">new</span> <span class="nx">AssignNode</span> <span class="nx">reference</span><span class="p">,</span> <span class="k">this</span>
-      <span class="p">[</span><span class="nx">compiled</span><span class="p">,</span> <span class="nx">reference</span><span class="p">]</span>
-    <span class="k">return</span> <span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span> <span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">precompile</span>
-    <span class="nx">pair</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Convenience method to grab the current indentation level, plus tabbing in.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">idt</span><span class="o">:</span> <span class="p">(</span><span class="nx">tabs</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">idt = </span><span class="nx">@tab</span> <span class="o">or</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">num = </span><span class="p">(</span><span class="nx">tabs</span> <span class="o">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
-    <span class="nx">idt</span> <span class="o">+=</span> <span class="nx">TAB</span> <span class="k">while</span> <span class="nx">num</span> <span class="o">-=</span> <span class="mi">1</span>
-    <span class="nx">idt</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Construct a node that returns the current node's result.
-Note that this is overridden for smarter behavior for
-many statement nodes (eg IfNode, ForNode)...</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">new</span> <span class="nx">ReturnNode</span> <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>Does this node, or any of its children, contain a node of a certain kind?
-Recursively traverses down the <em>children</em> of the nodes, yielding to a block
-and returning true when the block finds a match. <code>contains</code> does not cross
-scope boundaries.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">contains</span><span class="o">:</span> <span class="p">(</span><span class="nx">block</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">contains = </span><span class="kc">false</span>
-    <span class="nx">@traverseChildren</span> <span class="kc">false</span><span class="p">,</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">if</span> <span class="nx">block</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
-        <span class="nv">contains = </span><span class="kc">true</span>
-        <span class="k">return</span> <span class="kc">false</span>
-    <span class="nx">contains</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>Is this node of a certain type, or does it contain the type?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">containsType</span><span class="o">:</span> <span class="p">(</span><span class="nx">type</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">this</span> <span class="k">instanceof</span> <span class="nx">type</span> <span class="o">or</span> <span class="nx">@contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">type</span></pre></div>             </td>           </tr>                               <tr id="section-12">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-12">#</a>               </div>               <p>Convenience for the most common use of contains. Does the node contain
-a pure statement?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">containsPureStatement</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@isPureStatement</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">n</span><span class="p">.</span><span class="nx">isPureStatement</span> <span class="o">and</span> <span class="nx">n</span><span class="p">.</span><span class="nx">isPureStatement</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-13">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-13">#</a>               </div>               <p>Perform an in-order traversal of the AST. Crosses scope boundaries.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">traverse</span><span class="o">:</span> <span class="p">(</span><span class="nx">block</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">@traverseChildren</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">block</span></pre></div>             </td>           </tr>                               <tr id="section-14">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-14">#</a>               </div>               <p><code>toString</code> representation of the node, for inspecting the parse tree.
-This is what <code>coffee --nodes</code> prints out.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">,</span> <span class="nx">override</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">idt</span> <span class="o">or=</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">children = </span><span class="p">(</span><span class="nx">child</span><span class="p">.</span><span class="nx">toString</span> <span class="nx">idt</span> <span class="o">+</span> <span class="nx">TAB</span> <span class="k">for</span> <span class="nx">child</span> <span class="k">in</span> <span class="nx">@collectChildren</span><span class="p">()).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
-    <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">idt</span> <span class="o">+</span> <span class="p">(</span><span class="nx">override</span> <span class="o">or</span> <span class="nx">@class</span><span class="p">)</span> <span class="o">+</span> <span class="nx">children</span>
-
-  <span class="nx">eachChild</span><span class="o">:</span> <span class="p">(</span><span class="nx">func</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">unless</span> <span class="nx">@children</span>
-    <span class="k">for</span> <span class="nx">attr</span> <span class="k">in</span> <span class="nx">@children</span> <span class="k">when</span> <span class="k">this</span><span class="p">[</span><span class="nx">attr</span><span class="p">]</span>
-      <span class="k">for</span> <span class="nx">child</span> <span class="k">in</span> <span class="nx">flatten</span> <span class="p">[</span><span class="k">this</span><span class="p">[</span><span class="nx">attr</span><span class="p">]]</span>
-        <span class="k">return</span> <span class="k">if</span> <span class="nx">func</span><span class="p">(</span><span class="nx">child</span><span class="p">)</span> <span class="o">is</span> <span class="kc">false</span>
-
-  <span class="nx">collectChildren</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">nodes = </span><span class="p">[]</span>
-    <span class="nx">@eachChild</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">nodes</span><span class="p">.</span><span class="nx">push</span> <span class="nx">node</span>
-    <span class="nx">nodes</span>
-
-  <span class="nx">traverseChildren</span><span class="o">:</span> <span class="p">(</span><span class="nx">crossScope</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@eachChild</span> <span class="p">(</span><span class="nx">child</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">func</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">)</span>
-      <span class="nx">child</span><span class="p">.</span><span class="nx">traverseChildren</span><span class="p">(</span><span class="nx">crossScope</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="k">if</span> <span class="nx">child</span> <span class="k">instanceof</span> <span class="nx">BaseNode</span></pre></div>             </td>           </tr>                               <tr id="section-15">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-15">#</a>               </div>               <p>Default implementations of the common node properties and methods. Nodes
-will override these with custom logic, if needed.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">class</span><span class="o">:</span>    <span class="s1">&#39;BaseNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[]</span>
-
-  <span class="nx">unwrap</span>          <span class="o">:</span> <span class="o">-&gt;</span> <span class="k">this</span>
-  <span class="nx">isStatement</span>     <span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">no</span>
-  <span class="nx">isPureStatement</span> <span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">no</span>
-  <span class="nx">topSensitive</span>    <span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">no</span></pre></div>             </td>           </tr>                               <tr id="section-16">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-16">#</a>               </div>               <h3>Expressions</h3>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-17">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-17">#</a>               </div>               <p>The expressions body is the list of expressions that forms the body of an
-indented block of code -- the implementation of a function, a clause in an
-<code>if</code>, <code>switch</code>, or <code>try</code>, and so on...</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.Expressions = </span><span class="nx">class</span> <span class="nx">Expressions</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>        <span class="s1">&#39;Expressions&#39;</span>
-  <span class="nx">children</span><span class="o">:</span>     <span class="p">[</span><span class="s1">&#39;expressions&#39;</span><span class="p">]</span>
-  <span class="nx">isStatement</span><span class="o">:</span>  <span class="o">-&gt;</span> <span class="kc">yes</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">nodes</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="vi">@expressions = </span><span class="nx">compact</span> <span class="nx">flatten</span> <span class="nx">nodes</span> <span class="o">or</span> <span class="p">[]</span></pre></div>             </td>           </tr>                               <tr id="section-18">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-18">#</a>               </div>               <p>Tack an expression on to the end of this expression list.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">push</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@expressions</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-19">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-19">#</a>               </div>               <p>Add an expression at the beginning of this expression list.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">unshift</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@expressions</span><span class="p">.</span><span class="nx">unshift</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-20">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-20">#</a>               </div>               <p>If this Expressions consists of just a single node, unwrap it by pulling
-it back out.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">unwrap</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">1</span> <span class="k">then</span> <span class="nx">@expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">else</span> <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-21">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-21">#</a>               </div>               <p>Is this an empty block of code?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">empty</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">0</span></pre></div>             </td>           </tr>                               <tr id="section-22">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-22">#</a>               </div>               <p>An Expressions node does not return its entire body, rather it
-ensures that the final expression is returned.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">idx  = </span><span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-    <span class="nv">last = </span><span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span><span class="p">]</span>
-    <span class="nv">last = </span><span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span> <span class="o">-=</span> <span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nx">last</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span>
-    <span class="k">return</span> <span class="k">this</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">last</span> <span class="o">or</span> <span class="nx">last</span> <span class="k">instanceof</span> <span class="nx">ReturnNode</span>
-    <span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span><span class="p">]</span> <span class="o">=</span> <span class="nx">last</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-23">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-23">#</a>               </div>               <p>An <strong>Expressions</strong> is the only node that can serve as the root.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compile</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">o</span> <span class="o">or=</span> <span class="p">{}</span>
-    <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span> <span class="k">then</span> <span class="k">super</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@compileRoot</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">(</span><span class="nx">@compileExpression</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="k">for</span> <span class="nx">node</span> <span class="k">in</span> <span class="nx">@expressions</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">&quot;\n&quot;</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-24">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-24">#</a>               </div>               <p>If we happen to be the top-level <strong>Expressions</strong>, wrap everything in
-a safety closure, unless requested not to.
-It would be better not to generate them in the first place, but for now,
-clean up obvious double-parentheses.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileRoot</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">o.indent  = </span><span class="vi">@tab = </span><span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">noWrap</span> <span class="k">then</span> <span class="s1">&#39;&#39;</span> <span class="k">else</span> <span class="nx">TAB</span>
-    <span class="nv">o.scope   = </span><span class="k">new</span> <span class="nx">Scope</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="k">this</span><span class="p">,</span> <span class="kc">null</span><span class="p">)</span>
-    <span class="nv">code      = </span><span class="nx">@compileWithDeclarations</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nv">code      = </span><span class="nx">code</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="nx">TRAILING_WHITESPACE</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
-    <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">noWrap</span> <span class="k">then</span> <span class="nx">code</span> <span class="k">else</span> <span class="s2">&quot;(function() {\n#{code}\n}).call(this);\n&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-25">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-25">#</a>               </div>               <p>Compile the expressions body for the contents of a function, with
-declarations of all inner variables pushed up to the top.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileWithDeclarations</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">code = </span><span class="nx">@compileNode</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nv">code = </span><span class="s2">&quot;#{@tab}var #{o.scope.compiledAssignments()};\n#{code}&quot;</span>  <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">hasAssignments</span><span class="p">(</span><span class="k">this</span><span class="p">)</span>
-    <span class="nv">code = </span><span class="s2">&quot;#{@tab}var #{o.scope.compiledDeclarations()};\n#{code}&quot;</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">globals</span> <span class="o">and</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">hasDeclarations</span><span class="p">(</span><span class="k">this</span><span class="p">)</span>
-    <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-26">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-26">#</a>               </div>               <p>Compiles a single expression within the expressions body. If we need to
-return the result, and it's an expression, simply return it. If it's a
-statement, ask the statement to do so.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileExpression</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="vi">@tab = </span><span class="nx">o</span><span class="p">.</span><span class="nx">indent</span>
-    <span class="nv">compiledNode = </span><span class="nx">node</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="k">if</span> <span class="nx">node</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="nx">compiledNode</span> <span class="k">else</span> <span class="s2">&quot;#{@idt()}#{compiledNode};&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-27">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-27">#</a>               </div>               <p>Wrap up the given nodes as an <strong>Expressions</strong>, unless it already happens
-to be one.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">Expressions.wrap = </span><span class="p">(</span><span class="nx">nodes</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="k">return</span> <span class="nx">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nx">nodes</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">1</span> <span class="o">and</span> <span class="nx">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">Expressions</span>
-  <span class="k">new</span> <span class="nx">Expressions</span><span class="p">(</span><span class="nx">nodes</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-28">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-28">#</a>               </div>               <h3>LiteralNode</h3>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-29">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-29">#</a>               </div>               <p>Literals are static values that can be passed through directly into
-JavaScript without translation, such as: strings, numbers,
-<code>true</code>, <code>false</code>, <code>null</code>...</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.LiteralNode = </span><span class="nx">class</span> <span class="nx">LiteralNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span> <span class="s1">&#39;LiteralNode&#39;</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@value</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@isStatement</span><span class="p">()</span> <span class="k">then</span> <span class="k">this</span> <span class="k">else</span> <span class="k">super</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-30">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-30">#</a>               </div>               <p>Break and continue must be treated as pure statements -- they lose their
-meaning when wrapped in a closure.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@value</span> <span class="o">is</span> <span class="s1">&#39;break&#39;</span> <span class="o">or</span> <span class="nx">@value</span> <span class="o">is</span> <span class="s1">&#39;continue&#39;</span> <span class="o">or</span> <span class="nx">@value</span> <span class="o">is</span> <span class="s1">&#39;debugger&#39;</span>
-  <span class="nx">isPureStatement</span><span class="o">:</span> <span class="nx">LiteralNode</span><span class="o">::</span><span class="nx">isStatement</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">idt = </span><span class="k">if</span> <span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="nx">@idt</span><span class="p">()</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">end = </span><span class="k">if</span> <span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="s1">&#39;;&#39;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nx">idt</span> <span class="o">+</span> <span class="nx">@value</span> <span class="o">+</span> <span class="nx">end</span>
-
-  <span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="s1">&#39;&quot;&#39;</span> <span class="o">+</span> <span class="nx">@value</span> <span class="o">+</span> <span class="s1">&#39;&quot;&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-31">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-31">#</a>               </div>               <h3>ReturnNode</h3>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-32">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-32">#</a>               </div>               <p>A <code>return</code> is a <em>pureStatement</em> -- wrapping it in a closure wouldn't
-make sense.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ReturnNode = </span><span class="nx">class</span> <span class="nx">ReturnNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>            <span class="s1">&#39;ReturnNode&#39;</span>
-  <span class="nx">isStatement</span><span class="o">:</span>      <span class="o">-&gt;</span> <span class="kc">yes</span>
-  <span class="nx">isPureStatement</span><span class="o">:</span>  <span class="o">-&gt;</span> <span class="kc">yes</span>
-  <span class="nx">children</span><span class="o">:</span>         <span class="p">[</span><span class="s1">&#39;expression&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@expression</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">this</span>
-
-  <span class="nx">compile</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">expr = </span><span class="nx">@expression</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span>
-    <span class="k">return</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span> <span class="nx">unless</span> <span class="nx">expr</span> <span class="k">instanceof</span> <span class="nx">ReturnNode</span>
-    <span class="k">super</span> <span class="nx">o</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">o.asStatement = </span><span class="kc">true</span> <span class="k">if</span> <span class="nx">@expression</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="s2">&quot;#{@tab}return #{@expression.compile(o)};&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-33">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-33">#</a>               </div>               <h3>ValueNode</h3>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-34">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-34">#</a>               </div>               <p>A value, variable or literal or parenthesized, indexed or dotted into,
-or vanilla.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ValueNode = </span><span class="nx">class</span> <span class="nx">ValueNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;ValueNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;base&#39;</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-35">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-35">#</a>               </div>               <p>A <strong>ValueNode</strong> has a base and a list of property accesses.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@base</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="nx">@properties</span> <span class="o">or=</span> <span class="p">[]</span></pre></div>             </td>           </tr>                               <tr id="section-36">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-36">#</a>               </div>               <p>Add a property access to the list.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">push</span><span class="o">:</span> <span class="p">(</span><span class="nx">prop</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@properties</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">prop</span><span class="p">)</span>
-    <span class="k">this</span>
-
-  <span class="nx">hasProperties</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="o">!!</span><span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span></pre></div>             </td>           </tr>                               <tr id="section-37">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-37">#</a>               </div>               <p>Some boolean checks for the benefit of other nodes.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">isArray</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">ArrayNode</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@hasProperties</span><span class="p">()</span>
-
-  <span class="nx">isObject</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">ObjectNode</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@hasProperties</span><span class="p">()</span>
-
-  <span class="nx">isSplice</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@hasProperties</span><span class="p">()</span> <span class="o">and</span> <span class="nx">@properties</span><span class="p">[</span><span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">SliceNode</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@hasProperties</span><span class="p">()</span> <span class="k">then</span> <span class="k">super</span><span class="p">()</span> <span class="k">else</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-38">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-38">#</a>               </div>               <p>The value can be unwrapped as its inner node, if there are no attached
-properties.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">unwrap</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="k">this</span> <span class="k">else</span> <span class="nx">@base</span></pre></div>             </td>           </tr>                               <tr id="section-39">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-39">#</a>               </div>               <p>Values are considered to be statements if their base is a statement.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">isStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@base</span><span class="p">.</span><span class="nx">isStatement</span> <span class="o">and</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@hasProperties</span><span class="p">()</span>
-
-  <span class="nx">isNumber</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span> <span class="o">and</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">match</span> <span class="nx">NUMBER</span></pre></div>             </td>           </tr>                               <tr id="section-40">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-40">#</a>               </div>               <p>If the value node has indexes containing function calls, and the value node
-needs to be used twice, in compound assignment ... then we need to cache
-the value of the indexes.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">cacheIndexes</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">copy = </span><span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">@base</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">[</span><span class="mi">0</span><span class="p">..]</span>
-    <span class="k">if</span> <span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">CallNode</span>
-      <span class="p">[</span><span class="nx">@base</span><span class="p">,</span> <span class="nx">copy</span><span class="p">.</span><span class="nx">base</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span>
-    <span class="k">for</span> <span class="nx">prop</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">copy</span><span class="p">.</span><span class="nx">properties</span>
-      <span class="k">if</span> <span class="nx">prop</span> <span class="k">instanceof</span> <span class="nx">IndexNode</span> <span class="o">and</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">contains</span><span class="p">((</span><span class="nx">n</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">CallNode</span><span class="p">)</span>
-        <span class="p">[</span><span class="nx">index</span><span class="p">,</span> <span class="nx">indexVar</span><span class="p">]</span> <span class="o">=</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">index</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span>
-        <span class="k">this</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">IndexNode</span> <span class="nx">index</span>
-        <span class="nx">copy</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">IndexNode</span> <span class="nx">indexVar</span>
-    <span class="p">[</span><span class="k">this</span><span class="p">,</span> <span class="nx">copy</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-41">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-41">#</a>               </div>               <p>Override compile to unwrap the value when possible.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compile</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">top</span> <span class="o">or</span> <span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="k">super</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-42">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-42">#</a>               </div>               <p>We compile a value to JavaScript by compiling and joining each property.
-Things get much more insteresting if the chain of properties has <em>soak</em>
-operators <code>?.</code> interspersed. Then we have to take care not to accidentally
-evaluate a anything twice when building the soak chain.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">only        = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;onlyFirst&#39;</span>
-    <span class="nv">op          = </span><span class="nx">@tags</span><span class="p">.</span><span class="nx">operation</span>
-    <span class="nv">props       = </span><span class="k">if</span> <span class="nx">only</span> <span class="k">then</span> <span class="nx">@properties</span><span class="p">[</span><span class="mi">0</span><span class="p">...</span><span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="nx">@properties</span>
-    <span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span> <span class="o">or=</span> <span class="k">this</span>
-    <span class="k">for</span> <span class="nx">prop</span> <span class="k">in</span> <span class="nx">props</span>
-      <span class="nv">hasSoak = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">soakNode</span>
-    <span class="k">if</span> <span class="nx">hasSoak</span> <span class="o">and</span> <span class="nx">@containsType</span> <span class="nx">CallNode</span>
-      <span class="p">[</span><span class="nx">me</span><span class="p">,</span> <span class="nx">copy</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@cacheIndexes</span> <span class="nx">o</span>
-    <span class="vi">@base.parenthetical = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">@parenthetical</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">props</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nv">baseline    = </span><span class="nx">@base</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-    <span class="nv">baseline    = </span><span class="s2">&quot;(#{baseline})&quot;</span> <span class="k">if</span> <span class="nx">@hasProperties</span><span class="p">()</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">ObjectNode</span> <span class="o">or</span> <span class="nx">@isNumber</span><span class="p">())</span>
-    <span class="nv">complete    = </span><span class="vi">@last = </span><span class="nx">baseline</span>
-
-    <span class="k">for</span> <span class="nx">prop</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">props</span>
-      <span class="vi">@source = </span><span class="nx">baseline</span>
-      <span class="k">if</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">soakNode</span>
-        <span class="k">if</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">containsType</span><span class="p">(</span><span class="nx">CallNode</span><span class="p">)</span> <span class="o">and</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span>
-          <span class="nv">temp = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;ref&#39;</span>
-          <span class="nv">complete = </span><span class="s2">&quot;(#{ baseline = temp } = (#{complete}))&quot;</span>
-        <span class="nv">complete = </span><span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span>
-          <span class="s2">&quot;(typeof #{complete} === \&quot;undefined\&quot; || #{baseline} === null) ? undefined : &quot;</span>
-        <span class="k">else</span>
-          <span class="s2">&quot;#{complete} == null ? undefined : &quot;</span>
-        <span class="nx">complete</span> <span class="o">+=</span> <span class="p">(</span><span class="nx">baseline</span> <span class="o">+=</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span>
-      <span class="k">else</span>
-        <span class="nv">part = </span><span class="nx">prop</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-        <span class="k">if</span> <span class="nx">hasSoak</span> <span class="o">and</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">containsType</span> <span class="nx">CallNode</span>
-          <span class="nx">baseline</span> <span class="o">+=</span> <span class="nx">copy</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">compile</span> <span class="nx">o</span>
-        <span class="k">else</span>
-          <span class="nx">baseline</span> <span class="o">+=</span> <span class="nx">part</span>
-        <span class="nx">complete</span> <span class="o">+=</span> <span class="nx">part</span>
-        <span class="vi">@last = </span><span class="nx">part</span>
-
-    <span class="k">if</span> <span class="nx">op</span> <span class="o">and</span> <span class="nx">@wrapped</span> <span class="k">then</span> <span class="s2">&quot;(#{complete})&quot;</span> <span class="k">else</span> <span class="nx">complete</span></pre></div>             </td>           </tr>                               <tr id="section-43">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-43">#</a>               </div>               <h3>CommentNode</h3>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-44">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-44">#</a>               </div>               <p>CoffeeScript passes through block comments as JavaScript block comments
-at the same position.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.CommentNode = </span><span class="nx">class</span> <span class="nx">CommentNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span> <span class="s1">&#39;CommentNode&#39;</span>
-  <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">yes</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@comment</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">this</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@tab</span> <span class="o">+</span> <span class="s1">&#39;/*&#39;</span> <span class="o">+</span> <span class="nx">@comment</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\r?\n/g</span><span class="p">,</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">@tab</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;*/&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-45">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-45">#</a>               </div>               <h3>CallNode</h3>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-46">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-46">#</a>               </div>               <p>Node for a function invocation. Takes care of converting <code>super()</code> calls into
-calls against the prototype's function of the same name.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.CallNode = </span><span class="nx">class</span> <span class="nx">CallNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;CallNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;variable&#39;</span><span class="p">,</span> <span class="s1">&#39;args&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">variable</span><span class="p">,</span> <span class="nx">@args</span><span class="p">,</span> <span class="nx">@exist</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="vi">@isNew    = </span><span class="kc">false</span>
-    <span class="vi">@isSuper  = </span><span class="nx">variable</span> <span class="o">is</span> <span class="s1">&#39;super&#39;</span>
-    <span class="vi">@variable = </span><span class="k">if</span> <span class="nx">@isSuper</span> <span class="k">then</span> <span class="kc">null</span> <span class="k">else</span> <span class="nx">variable</span>
-    <span class="nx">@args</span>     <span class="o">or=</span> <span class="p">[]</span>
-    <span class="vi">@first = @last = </span><span class="s1">&#39;&#39;</span>
-    <span class="vi">@compileSplatArguments = </span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">SplatNode</span><span class="p">.</span><span class="nx">compileSplattedArray</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">@args</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-47">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-47">#</a>               </div>               <p>Tag this invocation as creating a new instance.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">newInstance</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="vi">@isNew = </span><span class="kc">true</span>
-    <span class="k">this</span>
-
-  <span class="nx">prefix</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@isNew</span> <span class="k">then</span> <span class="s1">&#39;new &#39;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-48">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-48">#</a>               </div>               <p>Grab the reference to the superclass' implementation of the current method.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">superReference</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;cannot call super outside of a function&quot;</span> <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span>
-    <span class="nv">methname = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span><span class="p">.</span><span class="nx">name</span>
-    <span class="nv">meth = </span><span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span><span class="p">.</span><span class="nx">proto</span>
-      <span class="s2">&quot;#{o.scope.method.proto}.__super__.#{methname}&quot;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">methname</span>
-      <span class="s2">&quot;#{methname}.__super__.constructor&quot;</span>
-    <span class="k">else</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;cannot call super on an anonymous function.&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-49">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-49">#</a>               </div>               <p>Compile a vanilla function call.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">o.chainRoot = </span><span class="k">this</span> <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span>
-    <span class="nv">op = </span><span class="nx">@tags</span><span class="p">.</span><span class="nx">operation</span>
-    <span class="k">if</span> <span class="nx">@exist</span>
-      <span class="k">if</span> <span class="nx">@variable</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">AccessorNode</span>
-        <span class="nv">methodAccessor = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span>
-        <span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">meth</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span>
-        <span class="vi">@first = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">first</span><span class="p">,</span> <span class="p">[</span><span class="nx">methodAccessor</span><span class="p">]).</span><span class="nx">compile</span> <span class="nx">o</span>
-        <span class="vi">@meth = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">meth</span><span class="p">,</span> <span class="p">[</span><span class="nx">methodAccessor</span><span class="p">]).</span><span class="nx">compile</span> <span class="nx">o</span>
-      <span class="k">else</span>
-        <span class="p">[</span><span class="nx">@first</span><span class="p">,</span> <span class="nx">@meth</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
-      <span class="vi">@first = </span><span class="s2">&quot;(typeof #{@first} === \&quot;function\&quot; ? &quot;</span>
-      <span class="vi">@last  = </span><span class="s2">&quot; : undefined)&quot;</span>
-    <span class="k">else</span> <span class="k">if</span> <span class="nx">@variable</span>
-      <span class="vi">@meth = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-    <span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">@args</span> <span class="k">when</span> <span class="nx">arg</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span>
-      <span class="nv">code = </span><span class="nx">@compileSplat</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="k">if</span> <span class="o">not</span> <span class="nx">code</span>
-      <span class="nv">args = </span><span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">@args</span>
-        <span class="nv">arg.parenthetical = </span><span class="kc">true</span>
-        <span class="nx">arg</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-      <span class="nv">code = </span><span class="k">if</span> <span class="nx">@isSuper</span>
-        <span class="nx">@compileSuper</span><span class="p">(</span><span class="nx">args</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;, &#39;</span><span class="p">),</span> <span class="nx">o</span><span class="p">)</span>
-      <span class="k">else</span>
-        <span class="s2">&quot;#{@first}#{@prefix()}#{@meth}(#{ args.join(&#39;, &#39;) })#{@last}&quot;</span>
-    <span class="k">if</span> <span class="nx">op</span> <span class="o">and</span> <span class="nx">@variable</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">wrapped</span> <span class="k">then</span> <span class="s2">&quot;(#{code})&quot;</span> <span class="k">else</span> <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-50">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-50">#</a>               </div>               <p><code>super()</code> is converted into a call against the superclass's implementation
-of the current function.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileSuper</span><span class="o">:</span> <span class="p">(</span><span class="nx">args</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="s2">&quot;#{@superReference(o)}.call(this#{ if args.length then &#39;, &#39; else &#39;&#39; }#{args})&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-51">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-51">#</a>               </div>               <p>If you call a function with a splat, it's converted into a JavaScript
-<code>.apply()</code> call to allow an array of arguments to be passed.
-If it's a constructor, then things get real tricky. We have to inject an
-inner constructor in order to be able to pass the varargs.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileSplat</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">meth = </span><span class="nx">@meth</span> <span class="o">or</span> <span class="nx">@superReference</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nv">obj  = </span><span class="nx">@variable</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">source</span> <span class="o">or</span> <span class="s1">&#39;this&#39;</span>
-    <span class="k">if</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="sr">/\(/</span><span class="p">)</span>
-      <span class="nv">temp = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;ref&#39;</span>
-      <span class="nv">obj  = </span><span class="nx">temp</span>
-      <span class="nv">meth = </span><span class="s2">&quot;(#{temp} = #{ @variable.source })#{ @variable.last }&quot;</span>
-    <span class="k">if</span> <span class="nx">@isNew</span>
-      <span class="nv">mentionsArgs = </span><span class="kc">no</span>
-      <span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">@args</span>
-        <span class="nx">arg</span><span class="p">.</span><span class="nx">contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">mentionsArgs</span> <span class="o">or=</span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span> <span class="o">and</span> <span class="p">(</span><span class="nx">n</span><span class="p">.</span><span class="nx">value</span> <span class="o">is</span> <span class="s1">&#39;arguments&#39;</span><span class="p">)</span>
-      <span class="nx">utility</span> <span class="s1">&#39;extends&#39;</span>
-      <span class="nv">a = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;ctor&#39;</span>
-      <span class="nv">b = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;ref&#39;</span>
-      <span class="nv">c = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;result&#39;</span>
-      <span class="s2">&quot;&quot;&quot;</span>
-
-<span class="s2">#DIVIDER</span>
-<span class="s2">      &quot;&quot;&quot;</span>
-    <span class="k">else</span>
-      <span class="s2">&quot;#{@first}#{@prefix()}#{meth}.apply(#{obj}, #{ @compileSplatArguments(o) })#{@last}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-52">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-52">#</a>               </div>               <p>{@first}(function() {
-{@idt(1)}var ctor = function(){};
-{@idt(1)}__extends(ctor, #{a} = #{meth});
-{@idt(1)}return typeof (#{c} = #{a}.apply(#{b} = new ctor, #{ @compileSplatArguments(o) })) === "object" ? #{c} : #{b};
-{@tab}}).#{ if mentionsArgs then 'apply(this, arguments)' else 'call(this)'}#{@last}</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-53">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-53">#</a>               </div>               <h3>ExtendsNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ExtendsNode = </span><span class="nx">class</span> <span class="nx">ExtendsNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;ExtendsNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;child&#39;</span><span class="p">,</span> <span class="s1">&#39;parent&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@child</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-54">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-54">#</a>               </div>               <p>Node to extend an object's prototype with an ancestor object.
-After <code>goog.inherits</code> from the
-<a href="http://closure-library.googlecode.com/svn/docs/closureGoogBase.js.html">Closure Library</a>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">ref = </span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">literal</span> <span class="nx">utility</span> <span class="s1">&#39;extends&#39;</span>
-    <span class="p">(</span><span class="k">new</span> <span class="nx">CallNode</span> <span class="nx">ref</span><span class="p">,</span> <span class="p">[</span><span class="nx">@child</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">]).</span><span class="nx">compile</span> <span class="nx">o</span></pre></div>             </td>           </tr>                               <tr id="section-55">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-55">#</a>               </div>               <p>Hooks one constructor into another's prototype chain.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-56">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-56">#</a>               </div>               <h3>AccessorNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.AccessorNode = </span><span class="nx">class</span> <span class="nx">AccessorNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;AccessorNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@name</span><span class="p">,</span> <span class="nx">tag</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="vi">@prototype = </span><span class="k">if</span> <span class="nx">tag</span> <span class="o">is</span> <span class="s1">&#39;prototype&#39;</span> <span class="k">then</span> <span class="s1">&#39;.prototype&#39;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="vi">@soakNode = </span><span class="nx">tag</span> <span class="o">is</span> <span class="s1">&#39;soak&#39;</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">name = </span><span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-    <span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span><span class="p">.</span><span class="nx">wrapped</span> <span class="o">or=</span> <span class="nx">@soakNode</span>
-    <span class="nv">namePart = </span><span class="k">if</span> <span class="nx">name</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">IS_STRING</span><span class="p">)</span> <span class="k">then</span> <span class="s2">&quot;[#{name}]&quot;</span> <span class="k">else</span> <span class="s2">&quot;.#{name}&quot;</span>
-    <span class="nx">@prototype</span> <span class="o">+</span> <span class="nx">namePart</span></pre></div>             </td>           </tr>                               <tr id="section-57">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-57">#</a>               </div>               <p>A <code>.</code> accessor into a property of a value, or the <code>::</code> shorthand for
-an accessor into the object's prototype.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-58">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-58">#</a>               </div>               <h3>IndexNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.IndexNode = </span><span class="nx">class</span> <span class="nx">IndexNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;IndexNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;index&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@index</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span><span class="p">.</span><span class="nx">wrapped</span> <span class="o">or=</span> <span class="nx">@soakNode</span>
-    <span class="nv">idx = </span><span class="nx">@index</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-    <span class="nv">prefix = </span><span class="k">if</span> <span class="nx">@proto</span> <span class="k">then</span> <span class="s1">&#39;.prototype&#39;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="s2">&quot;#{prefix}[#{idx}]&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-59">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-59">#</a>               </div>               <p>A <code>[ ... ]</code> indexed accessor into an array or object.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-60">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-60">#</a>               </div>               <h3>RangeNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.RangeNode = </span><span class="nx">class</span> <span class="nx">RangeNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;RangeNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;from&#39;</span><span class="p">,</span> <span class="s1">&#39;to&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@from</span><span class="p">,</span> <span class="nx">@to</span><span class="p">,</span> <span class="nx">tag</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="vi">@exclusive = </span><span class="nx">tag</span> <span class="o">is</span> <span class="s1">&#39;exclusive&#39;</span>
-    <span class="vi">@equals = </span><span class="k">if</span> <span class="nx">@exclusive</span> <span class="k">then</span> <span class="s1">&#39;&#39;</span> <span class="k">else</span> <span class="s1">&#39;=&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-61">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-61">#</a>               </div>               <p>A range literal. Ranges can be used to extract portions (slices) of arrays,
-to specify a range for comprehensions, or as a value, to be expanded into the
-corresponding array of integers at runtime.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileVariables</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">o = </span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">)</span>
-    <span class="p">[</span><span class="nx">@from</span><span class="p">,</span> <span class="nx">@fromVar</span><span class="p">]</span> <span class="o">=</span>  <span class="nx">@from</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
-    <span class="p">[</span><span class="nx">@to</span><span class="p">,</span> <span class="nx">@toVar</span><span class="p">]</span> <span class="o">=</span>      <span class="nx">@to</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
-    <span class="p">[</span><span class="nx">@fromNum</span><span class="p">,</span> <span class="nx">@toNum</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">@fromVar</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">SIMPLENUM</span><span class="p">),</span> <span class="nx">@toVar</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">SIMPLENUM</span><span class="p">)]</span>
-    <span class="nv">parts = </span><span class="p">[]</span>
-    <span class="nx">parts</span><span class="p">.</span><span class="nx">push</span> <span class="nx">@from</span> <span class="k">if</span> <span class="nx">@from</span> <span class="o">isnt</span> <span class="nx">@fromVar</span>
-    <span class="nx">parts</span><span class="p">.</span><span class="nx">push</span> <span class="nx">@to</span> <span class="k">if</span> <span class="nx">@to</span> <span class="o">isnt</span> <span class="nx">@toVar</span>
-    <span class="k">if</span> <span class="nx">parts</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="s2">&quot;#{parts.join(&#39;; &#39;)}; &quot;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-62">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-62">#</a>               </div>               <p>Compiles the range's source variables -- where it starts and where it ends.
-But only if they need to be cached to avoid double evaluation.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span>    <span class="nx">@compileArray</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>  <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">index</span>
-    <span class="k">return</span>    <span class="nx">@compileSimple</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span>
-    <span class="nv">idx      = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;index&#39;</span>
-    <span class="nv">step     = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;step&#39;</span>
-    <span class="nv">vars     = </span><span class="s2">&quot;#{idx} = #{@fromVar}&quot;</span>
-    <span class="nv">intro    = </span><span class="s2">&quot;(#{@fromVar} &lt;= #{@toVar} ? #{idx}&quot;</span>
-    <span class="nv">compare  = </span><span class="s2">&quot;#{intro} &lt;#{@equals} #{@toVar} : #{idx} &gt;#{@equals} #{@toVar})&quot;</span>
-    <span class="nv">stepPart = </span><span class="k">if</span> <span class="nx">step</span> <span class="k">then</span> <span class="nx">step</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;1&#39;</span>
-    <span class="nv">incr     = </span><span class="k">if</span> <span class="nx">step</span> <span class="k">then</span> <span class="s2">&quot;#{idx} += #{stepPart}&quot;</span> <span class="k">else</span> <span class="s2">&quot;#{intro} += #{stepPart} : #{idx} -= #{stepPart})&quot;</span>
-    <span class="s2">&quot;#{vars}; #{compare}; #{incr}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-63">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-63">#</a>               </div>               <p>When compiled normally, the range returns the contents of the <em>for loop</em>
-needed to iterate over the values in the range. Used by comprehensions.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileSimple</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[</span><span class="nx">from</span><span class="p">,</span> <span class="nx">to</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">@fromNum</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">@toNum</span><span class="p">,</span> <span class="mi">10</span><span class="p">)]</span>
-    <span class="nv">idx        = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;index&#39;</span>
-    <span class="nv">step       = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;step&#39;</span>
-    <span class="nx">step</span>       <span class="o">and=</span> <span class="s2">&quot;#{idx} += #{step.compile(o)}&quot;</span>
-    <span class="k">if</span> <span class="nx">from</span> <span class="o">&lt;=</span> <span class="nx">to</span>
-      <span class="s2">&quot;#{idx} = #{from}; #{idx} &lt;#{@equals} #{to}; #{step or &quot;</span><span class="c1">#{idx}++&quot;}&quot;</span>
-    <span class="k">else</span>
-      <span class="s2">&quot;#{idx} = #{from}; #{idx} &gt;#{@equals} #{to}; #{step or &quot;</span><span class="c1">#{idx}--&quot;}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-64">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-64">#</a>               </div>               <p>Compile a simple range comprehension, with integers.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileArray</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">idt    = </span><span class="nx">@idt</span> <span class="mi">1</span>
-    <span class="nv">vars   = </span><span class="nx">@compileVariables</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">indent</span><span class="o">:</span> <span class="nx">idt</span>
-    <span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span> <span class="o">and</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">abs</span><span class="p">(</span><span class="o">+</span><span class="nx">@fromNum</span> <span class="o">-</span> <span class="o">+</span><span class="nx">@toNum</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">20</span>
-      <span class="nv">range = </span><span class="p">[</span><span class="o">+</span><span class="nx">@fromNum</span><span class="p">..</span><span class="o">+</span><span class="nx">@toNum</span><span class="p">]</span>
-      <span class="nx">range</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@exclusive</span>
-      <span class="k">return</span> <span class="s2">&quot;[#{ range.join(&#39;, &#39;) }]&quot;</span>
-    <span class="nv">i = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;i&#39;</span>
-    <span class="nv">result = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;result&#39;</span>
-    <span class="nv">pre    = </span><span class="s2">&quot;\n#{idt}#{result} = []; #{vars}&quot;</span>
-    <span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span>
-      <span class="nv">o.index = </span><span class="nx">i</span>
-      <span class="nv">body = </span><span class="nx">@compileSimple</span> <span class="nx">o</span>
-    <span class="k">else</span>
-      <span class="nv">clause = </span><span class="s2">&quot;#{@fromVar} &lt;= #{@toVar} ?&quot;</span>
-      <span class="nv">body   = </span><span class="s2">&quot;var #{i} = #{@fromVar}; #{clause} #{i} &lt;#{@equals} #{@toVar} : #{i} &gt;#{@equals} #{@toVar}; #{clause} #{i} += 1 : #{i} -= 1&quot;</span>
-    <span class="nv">post   = </span><span class="s2">&quot;{ #{result}.push(#{i}); }\n#{idt}return #{result};\n#{o.indent}&quot;</span>
-    <span class="s2">&quot;(function() {#{pre}\n#{idt}for (#{body})#{post}}).call(this)&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-65">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-65">#</a>               </div>               <p>When used as a value, expand the range into the equivalent array.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-66">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-66">#</a>               </div>               <h3>SliceNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.SliceNode = </span><span class="nx">class</span> <span class="nx">SliceNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;SliceNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;range&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@range</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">from  = </span> <span class="k">if</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">from</span> <span class="k">then</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">from</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;0&#39;</span>
-    <span class="nv">to    = </span> <span class="k">if</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">to</span> <span class="k">then</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">to</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nx">to</span>    <span class="o">+=</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">to</span> <span class="o">or</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">exclusive</span> <span class="k">then</span> <span class="s1">&#39;&#39;</span> <span class="k">else</span> <span class="s1">&#39; + 1&#39;</span>
-    <span class="nv">to    = </span> <span class="s1">&#39;, &#39;</span> <span class="o">+</span> <span class="nx">to</span> <span class="k">if</span> <span class="nx">to</span>
-    <span class="s2">&quot;.slice(#{from}#{to})&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-67">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-67">#</a>               </div>               <p>An array slice literal. Unlike JavaScript's <code>Array#slice</code>, the second parameter
-specifies the index of the end of the slice, just as the first parameter
-is the index of the beginning.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-68">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-68">#</a>               </div>               <h3>ObjectNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ObjectNode = </span><span class="nx">class</span> <span class="nx">ObjectNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;ObjectNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;properties&#39;</span><span class="p">]</span>
-
-  <span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">true</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">props</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="vi">@objects = @properties = </span><span class="nx">props</span> <span class="o">or</span> <span class="p">[]</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">top = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;top&#39;</span>
-    <span class="nv">o.indent = </span><span class="nx">@idt</span> <span class="mi">1</span>
-    <span class="nv">nonComments = </span><span class="nx">prop</span> <span class="k">for</span> <span class="nx">prop</span> <span class="k">in</span> <span class="nx">@properties</span> <span class="k">when</span> <span class="p">(</span><span class="nx">prop</span> <span class="o">not</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span><span class="p">)</span>
-    <span class="nv">lastNoncom = </span> <span class="nx">nonComments</span><span class="p">[</span><span class="nx">nonComments</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-    <span class="nv">props = </span><span class="k">for</span> <span class="nx">prop</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">@properties</span>
-      <span class="nv">join   = </span><span class="s2">&quot;,\n&quot;</span>
-      <span class="nv">join   = </span><span class="s2">&quot;\n&quot;</span> <span class="k">if</span> <span class="p">(</span><span class="nx">prop</span> <span class="o">is</span> <span class="nx">lastNoncom</span><span class="p">)</span> <span class="o">or</span> <span class="p">(</span><span class="nx">prop</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span><span class="p">)</span>
-      <span class="nv">join   = </span><span class="s1">&#39;&#39;</span> <span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-      <span class="nv">indent = </span><span class="k">if</span> <span class="nx">prop</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span> <span class="k">then</span> <span class="s1">&#39;&#39;</span> <span class="k">else</span> <span class="nx">@idt</span> <span class="mi">1</span>
-      <span class="nv">prop   = </span><span class="k">new</span> <span class="nx">AssignNode</span> <span class="nx">prop</span><span class="p">,</span> <span class="nx">prop</span><span class="p">,</span> <span class="s1">&#39;object&#39;</span> <span class="nx">unless</span> <span class="nx">prop</span> <span class="k">instanceof</span> <span class="nx">AssignNode</span> <span class="o">or</span> <span class="nx">prop</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span>
-      <span class="nx">indent</span> <span class="o">+</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="nx">join</span>
-    <span class="nv">props = </span><span class="nx">props</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
-    <span class="nv">obj   = </span><span class="s1">&#39;{&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="k">if</span> <span class="nx">props</span> <span class="k">then</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">props</span> <span class="o">+</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">@idt</span><span class="p">()</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;}&#39;</span>
-    <span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="s2">&quot;(#{obj})&quot;</span> <span class="k">else</span> <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-69">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-69">#</a>               </div>               <p>An object literal, nothing fancy.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-70">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-70">#</a>               </div>               <h3>ArrayNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ArrayNode = </span><span class="nx">class</span> <span class="nx">ArrayNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;ArrayNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;objects&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@objects</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="nx">@objects</span> <span class="o">or=</span> <span class="p">[]</span>
-    <span class="vi">@compileSplatLiteral = </span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">SplatNode</span><span class="p">.</span><span class="nx">compileSplattedArray</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">@objects</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">o.indent = </span><span class="nx">@idt</span> <span class="mi">1</span>
-    <span class="nv">objects = </span><span class="p">[]</span>
-    <span class="k">for</span> <span class="nx">obj</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">@objects</span>
-      <span class="nv">code = </span><span class="nx">obj</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-      <span class="k">if</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span>
-        <span class="k">return</span> <span class="nx">@compileSplatLiteral</span> <span class="nx">o</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span>
-        <span class="nx">objects</span><span class="p">.</span><span class="nx">push</span> <span class="s2">&quot;\n#{code}\n#{o.indent}&quot;</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="nx">@objects</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
-        <span class="nx">objects</span><span class="p">.</span><span class="nx">push</span> <span class="nx">code</span>
-      <span class="k">else</span>
-        <span class="nx">objects</span><span class="p">.</span><span class="nx">push</span> <span class="s2">&quot;#{code}, &quot;</span>
-    <span class="nv">objects = </span><span class="nx">objects</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
-    <span class="k">if</span> <span class="nx">indexOf</span><span class="p">(</span><span class="nx">objects</span><span class="p">,</span> <span class="s1">&#39;\n&#39;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span>
-      <span class="s2">&quot;[\n#{@idt(1)}#{objects}\n#{@tab}]&quot;</span>
-    <span class="k">else</span>
-      <span class="s2">&quot;[#{objects}]&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-71">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-71">#</a>               </div>               <p>An array literal.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-72">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-72">#</a>               </div>               <h3>ClassNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ClassNode = </span><span class="nx">class</span> <span class="nx">ClassNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>        <span class="s1">&#39;ClassNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span>     <span class="p">[</span><span class="s1">&#39;variable&#39;</span><span class="p">,</span> <span class="s1">&#39;parent&#39;</span><span class="p">,</span> <span class="s1">&#39;properties&#39;</span><span class="p">]</span>
-  <span class="nx">isStatement</span><span class="o">:</span>  <span class="o">-&gt;</span> <span class="kc">yes</span></pre></div>             </td>           </tr>                               <tr id="section-73">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-73">#</a>               </div>               <p>The CoffeeScript class definition.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="nx">@properties</span> <span class="o">or=</span> <span class="p">[]</span>
-    <span class="vi">@returns    = </span><span class="kc">false</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="vi">@returns = </span><span class="kc">true</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-74">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-74">#</a>               </div>               <p>Initialize a <strong>ClassNode</strong> with its name, an optional superclass, and a
-list of prototype property assignments.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="vi">@variable  = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;ctor&#39;</span> <span class="k">if</span> <span class="nx">@variable</span> <span class="o">is</span> <span class="s1">&#39;__temp__&#39;</span>
-    <span class="nv">extension  = </span><span class="nx">@parent</span> <span class="o">and</span> <span class="k">new</span> <span class="nx">ExtendsNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">)</span>
-    <span class="nv">props      = </span><span class="k">new</span> <span class="nx">Expressions</span>
-    <span class="nv">o.top      = </span><span class="kc">true</span>
-    <span class="nv">me         = </span><span class="kc">null</span>
-    <span class="nv">className  = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-    <span class="nv">constScope = </span><span class="kc">null</span>
-
-    <span class="k">if</span> <span class="nx">@parent</span>
-      <span class="nv">applied = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">@parent</span><span class="p">,</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="s1">&#39;apply&#39;</span><span class="p">))])</span>
-      <span class="nv">constructor = </span><span class="k">new</span> <span class="nx">CodeNode</span><span class="p">([],</span> <span class="k">new</span> <span class="nx">Expressions</span><span class="p">([</span>
-        <span class="k">new</span> <span class="nx">CallNode</span><span class="p">(</span><span class="nx">applied</span><span class="p">,</span> <span class="p">[</span><span class="nx">literal</span><span class="p">(</span><span class="s1">&#39;this&#39;</span><span class="p">),</span> <span class="nx">literal</span><span class="p">(</span><span class="s1">&#39;arguments&#39;</span><span class="p">)])</span>
-      <span class="p">]))</span>
-    <span class="k">else</span>
-      <span class="nv">constructor = </span><span class="k">new</span> <span class="nx">CodeNode</span>
-
-    <span class="k">for</span> <span class="nx">prop</span> <span class="k">in</span> <span class="nx">@properties</span>
-      <span class="p">[</span><span class="nx">pvar</span><span class="p">,</span> <span class="nx">func</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">prop</span><span class="p">.</span><span class="nx">variable</span><span class="p">,</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">value</span><span class="p">]</span>
-      <span class="k">if</span> <span class="nx">pvar</span> <span class="o">and</span> <span class="nx">pvar</span><span class="p">.</span><span class="nx">base</span><span class="p">.</span><span class="nx">value</span> <span class="o">is</span> <span class="s1">&#39;constructor&#39;</span> <span class="o">and</span> <span class="nx">func</span> <span class="k">instanceof</span> <span class="nx">CodeNode</span>
-        <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;cannot define a constructor as a bound function.&quot;</span> <span class="k">if</span> <span class="nx">func</span><span class="p">.</span><span class="nx">bound</span>
-        <span class="nv">func.name = </span><span class="nx">className</span>
-        <span class="nx">func</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">push</span> <span class="k">new</span> <span class="nx">ReturnNode</span> <span class="nx">literal</span> <span class="s1">&#39;this&#39;</span>
-        <span class="vi">@variable = </span><span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">@variable</span>
-        <span class="vi">@variable.namespaced = </span><span class="nx">include</span> <span class="nx">func</span><span class="p">.</span><span class="nx">name</span><span class="p">,</span> <span class="s1">&#39;.&#39;</span>
-        <span class="nv">constructor = </span><span class="nx">func</span>
-        <span class="k">continue</span>
-      <span class="k">if</span> <span class="nx">func</span> <span class="k">instanceof</span> <span class="nx">CodeNode</span> <span class="o">and</span> <span class="nx">func</span><span class="p">.</span><span class="nx">bound</span>
-        <span class="k">if</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">context</span> <span class="o">is</span> <span class="s1">&#39;this&#39;</span>
-          <span class="nv">func.context = </span><span class="nx">className</span>
-        <span class="k">else</span>
-          <span class="nv">func.bound = </span><span class="kc">false</span>
-          <span class="nx">constScope</span> <span class="o">or=</span> <span class="k">new</span> <span class="nx">Scope</span><span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">,</span> <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">,</span> <span class="nx">constructor</span><span class="p">)</span>
-          <span class="nx">me</span> <span class="o">or=</span> <span class="nx">constScope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;this&#39;</span>
-          <span class="nv">pname = </span><span class="nx">pvar</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-          <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">push</span>    <span class="k">new</span> <span class="nx">ReturnNode</span> <span class="nx">literal</span> <span class="s1">&#39;this&#39;</span> <span class="k">if</span> <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">empty</span><span class="p">()</span>
-          <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">unshift</span> <span class="nx">literal</span> <span class="s2">&quot;this.#{pname} = function(){ return #{className}.prototype.#{pname}.apply(#{me}, arguments); }&quot;</span>
-      <span class="k">if</span> <span class="nx">pvar</span>
-        <span class="nv">access = </span><span class="k">if</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">context</span> <span class="o">is</span> <span class="s1">&#39;this&#39;</span> <span class="k">then</span> <span class="nx">pvar</span><span class="p">.</span><span class="nx">base</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">else</span> <span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">pvar</span><span class="p">,</span> <span class="s1">&#39;prototype&#39;</span><span class="p">)</span>
-        <span class="nv">val    = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="p">[</span><span class="nx">access</span><span class="p">])</span>
-        <span class="nv">prop   = </span><span class="k">new</span> <span class="nx">AssignNode</span><span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span>
-      <span class="nx">props</span><span class="p">.</span><span class="nx">push</span> <span class="nx">prop</span>
-
-    <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">unshift</span> <span class="nx">literal</span> <span class="s2">&quot;#{me} = this&quot;</span> <span class="k">if</span> <span class="nx">me</span>
-    <span class="nv">construct = </span><span class="nx">@idt</span><span class="p">()</span> <span class="o">+</span> <span class="p">(</span><span class="k">new</span> <span class="nx">AssignNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="nx">constructor</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">sharedScope</span><span class="o">:</span> <span class="nx">constScope</span><span class="p">})</span> <span class="o">+</span> <span class="s1">&#39;;&#39;</span>
-    <span class="nv">props     = </span><span class="k">if</span> <span class="o">!</span><span class="nx">props</span><span class="p">.</span><span class="nx">empty</span><span class="p">()</span> <span class="k">then</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">props</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>                     <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">extension = </span><span class="k">if</span> <span class="nx">extension</span>      <span class="k">then</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">@idt</span><span class="p">()</span> <span class="o">+</span> <span class="nx">extension</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;;&#39;</span>  <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">returns   = </span><span class="k">if</span> <span class="nx">@returns</span>       <span class="k">then</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nx">construct</span> <span class="o">+</span> <span class="nx">extension</span> <span class="o">+</span> <span class="nx">props</span> <span class="o">+</span> <span class="nx">returns</span></pre></div>             </td>           </tr>                               <tr id="section-75">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-75">#</a>               </div>               <p>Instead of generating the JavaScript string directly, we build up the
-equivalent syntax tree and compile that, in pieces. You can see the
-constructor, property assignments, and inheritance getting built out below.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-76">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-76">#</a>               </div>               <h3>AssignNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.AssignNode = </span><span class="nx">class</span> <span class="nx">AssignNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span></pre></div>             </td>           </tr>                               <tr id="section-77">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-77">#</a>               </div>               <p>The <strong>AssignNode</strong> is used to assign a local variable to value, or to set the
-property of an object -- including within object literals.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">PROTO_ASSIGN</span><span class="o">:</span> <span class="sr">/^(\S+)\.prototype/</span>
-  <span class="nx">LEADING_DOT</span><span class="o">:</span>  <span class="sr">/^\.(prototype\.)?/</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;AssignNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;variable&#39;</span><span class="p">,</span> <span class="s1">&#39;value&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="nx">@value</span><span class="p">,</span> <span class="nx">@context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="kc">true</span>
-
-  <span class="nx">isValue</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@variable</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@isStatement</span><span class="p">()</span>
-      <span class="k">return</span> <span class="k">new</span> <span class="nx">Expressions</span> <span class="p">[</span><span class="k">this</span><span class="p">,</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">)]</span>
-    <span class="k">else</span>
-      <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">isArray</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isObject</span><span class="p">())</span></pre></div>             </td>           </tr>                               <tr id="section-78">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-78">#</a>               </div>               <p>Matchers for detecting prototype assignments.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">top    = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;top&#39;</span>
-    <span class="k">return</span>   <span class="nx">@compilePatternMatch</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="k">return</span>   <span class="nx">@compileSplice</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isSplice</span><span class="p">()</span>
-    <span class="nv">stmt   = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;asStatement&#39;</span>
-    <span class="nv">name   = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nv">last   = </span><span class="k">if</span> <span class="nx">@isValue</span><span class="p">()</span> <span class="k">then</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">last</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="nx">@LEADING_DOT</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="k">else</span> <span class="nx">name</span>
-    <span class="nv">match  = </span><span class="nx">name</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">@PROTO_ASSIGN</span><span class="p">)</span>
-    <span class="nv">proto  = </span><span class="nx">match</span> <span class="o">and</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-    <span class="k">if</span> <span class="nx">@value</span> <span class="k">instanceof</span> <span class="nx">CodeNode</span>
-      <span class="vi">@value.name = </span> <span class="nx">last</span>  <span class="k">if</span> <span class="nx">last</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">IDENTIFIER</span><span class="p">)</span>
-      <span class="vi">@value.proto = </span><span class="nx">proto</span> <span class="k">if</span> <span class="nx">proto</span>
-    <span class="nv">val = </span><span class="nx">@value</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-    <span class="k">return</span> <span class="s2">&quot;#{name}: #{val}&quot;</span> <span class="k">if</span> <span class="nx">@context</span> <span class="o">is</span> <span class="s1">&#39;object&#39;</span>
-    <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span> <span class="nx">name</span> <span class="nx">unless</span> <span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">hasProperties</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">namespaced</span><span class="p">)</span>
-    <span class="nv">val = </span><span class="s2">&quot;#{name} = #{val}&quot;</span>
-    <span class="k">return</span> <span class="s2">&quot;#{@tab}#{val};&quot;</span> <span class="k">if</span> <span class="nx">stmt</span>
-    <span class="k">if</span> <span class="nx">top</span> <span class="o">or</span> <span class="nx">@parenthetical</span> <span class="k">then</span> <span class="nx">val</span> <span class="k">else</span> <span class="s2">&quot;(#{val})&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-79">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-79">#</a>               </div>               <p>Compile an assignment, delegating to <code>compilePatternMatch</code> or
-<code>compileSplice</code> if appropriate. Keep track of the name of the base object
-we've been assigned to, for correct internal references. If the variable
-has not been seen yet within the current scope, declare it.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compilePatternMatch</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">valVar        = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;ref&#39;</span>
-    <span class="nv">value         = </span><span class="k">if</span> <span class="nx">@value</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="nx">ClosureNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">@value</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@value</span>
-    <span class="nv">assigns       = </span><span class="p">[</span><span class="s2">&quot;#{@tab}#{valVar} = #{ value.compile(o) };&quot;</span><span class="p">]</span>
-    <span class="nv">o.top         = </span><span class="kc">true</span>
-    <span class="nv">o.asStatement = </span><span class="kc">true</span>
-    <span class="nv">splat         = </span><span class="kc">false</span>
-    <span class="k">for</span> <span class="nx">obj</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">base</span><span class="p">.</span><span class="nx">objects</span></pre></div>             </td>           </tr>                               <tr id="section-80">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-80">#</a>               </div>               <p>Brief implementation of recursive pattern matching, when assigning array or
-object literals to a value. Peeks at their properties to assign inner names.
-See the <a href="http://wiki.ecmascript.org/doku.php?id=harmony:destructuring">ECMAScript Harmony Wiki</a>
-for details.</p>             </td>             <td class="code">               <div class="highlight"><pre>      <span class="nv">idx = </span><span class="nx">i</span>
-      <span class="k">if</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isObject</span><span class="p">()</span>
-        <span class="k">if</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">AssignNode</span></pre></div>             </td>           </tr>                               <tr id="section-81">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-81">#</a>               </div>               <p>A regular array pattern-match.</p>             </td>             <td class="code">               <div class="highlight"><pre>          <span class="p">[</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">idx</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">obj</span><span class="p">.</span><span class="nx">value</span><span class="p">,</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">variable</span><span class="p">.</span><span class="nx">base</span><span class="p">]</span>
-        <span class="k">else</span></pre></div>             </td>           </tr>                               <tr id="section-82">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-82">#</a>               </div>               <p>A regular object pattern-match.</p>             </td>             <td class="code">               <div class="highlight"><pre>          <span class="nv">idx = </span><span class="nx">obj</span>
-      <span class="k">if</span> <span class="o">not</span> <span class="p">(</span><span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">or</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span><span class="p">)</span>
-        <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s1">&#39;pattern matching must use only identifiers on the left-hand side.&#39;</span>
-      <span class="nv">isString = </span><span class="nx">idx</span><span class="p">.</span><span class="nx">value</span> <span class="o">and</span> <span class="nx">idx</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">match</span> <span class="nx">IS_STRING</span>
-      <span class="nv">accessClass = </span><span class="k">if</span> <span class="nx">isString</span> <span class="o">or</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isArray</span><span class="p">()</span> <span class="k">then</span> <span class="nx">IndexNode</span> <span class="k">else</span> <span class="nx">AccessorNode</span>
-      <span class="k">if</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">splat</span>
-        <span class="nv">val = </span><span class="nx">literal</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">compileValue</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">valVar</span><span class="p">,</span>
-          <span class="p">(</span><span class="nv">oindex = </span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">base</span><span class="p">.</span><span class="nx">objects</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)),</span>
-          <span class="p">(</span><span class="nv">olength = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">base</span><span class="p">.</span><span class="nx">objects</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">-</span> <span class="nx">oindex</span> <span class="o">-</span> <span class="mi">1</span>
-        <span class="nv">splat = </span><span class="kc">true</span>
-      <span class="k">else</span>
-        <span class="nv">idx = </span><span class="nx">literal</span><span class="p">(</span><span class="k">if</span> <span class="nx">splat</span> <span class="k">then</span> <span class="s2">&quot;#{valVar}.length - #{olength - idx}&quot;</span> <span class="k">else</span> <span class="nx">idx</span><span class="p">)</span> <span class="k">if</span> <span class="k">typeof</span> <span class="nx">idx</span> <span class="o">isnt</span> <span class="s1">&#39;object&#39;</span>
-        <span class="nv">val = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">valVar</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">accessClass</span><span class="p">(</span><span class="nx">idx</span><span class="p">)])</span>
-      <span class="nx">assigns</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">new</span> <span class="nx">AssignNode</span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">val</span><span class="p">).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span>
-    <span class="nv">code = </span><span class="nx">assigns</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s2">&quot;\n&quot;</span><span class="p">)</span>
-    <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-83">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-83">#</a>               </div>               <p>A shorthand <code>{a, b, c} = val</code> pattern-match.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileSplice</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">name  = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">onlyFirst</span><span class="o">:</span> <span class="kc">true</span>
-    <span class="nv">l     = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nv">range = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">l</span> <span class="o">-</span> <span class="mi">1</span><span class="p">].</span><span class="nx">range</span>
-    <span class="nv">plus  = </span><span class="k">if</span> <span class="nx">range</span><span class="p">.</span><span class="nx">exclusive</span> <span class="k">then</span> <span class="s1">&#39;&#39;</span> <span class="k">else</span> <span class="s1">&#39; + 1&#39;</span>
-    <span class="nv">from  = </span><span class="k">if</span> <span class="nx">range</span><span class="p">.</span><span class="nx">from</span> <span class="k">then</span> <span class="nx">range</span><span class="p">.</span><span class="nx">from</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;0&#39;</span>
-    <span class="nv">to    = </span><span class="k">if</span> <span class="nx">range</span><span class="p">.</span><span class="nx">to</span> <span class="k">then</span> <span class="nx">range</span><span class="p">.</span><span class="nx">to</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; - &#39;</span> <span class="o">+</span> <span class="nx">from</span> <span class="o">+</span> <span class="nx">plus</span> <span class="k">else</span> <span class="s2">&quot;#{name}.length&quot;</span>
-    <span class="nv">val   = </span><span class="nx">@value</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="s2">&quot;#{name}.splice.apply(#{name}, [#{from}, #{to}].concat(#{val}))&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-84">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-84">#</a>               </div>               <p>Compile the assignment from an array splice literal, using JavaScript's
-<code>Array#splice</code> method.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-85">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-85">#</a>               </div>               <h3>CodeNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.CodeNode = </span><span class="nx">class</span> <span class="nx">CodeNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;CodeNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;params&#39;</span><span class="p">,</span> <span class="s1">&#39;body&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@params</span><span class="p">,</span> <span class="nx">@body</span><span class="p">,</span> <span class="nx">tag</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="nx">@params</span>   <span class="o">or=</span> <span class="p">[]</span>
-    <span class="nx">@body</span>     <span class="o">or=</span> <span class="k">new</span> <span class="nx">Expressions</span>
-    <span class="vi">@bound    = </span><span class="nx">tag</span> <span class="o">is</span> <span class="s1">&#39;boundfunc&#39;</span>
-    <span class="vi">@context  = </span><span class="s1">&#39;this&#39;</span> <span class="k">if</span> <span class="nx">@bound</span></pre></div>             </td>           </tr>                               <tr id="section-86">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-86">#</a>               </div>               <p>A function definition. This is the only node that creates a new Scope.
-When for the purposes of walking the contents of a function body, the CodeNode
-has no <em>children</em> -- they're within the inner scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">sharedScope = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;sharedScope&#39;</span>
-    <span class="nv">top         = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;top&#39;</span>
-    <span class="nv">o.scope     = </span><span class="nx">sharedScope</span> <span class="o">or</span> <span class="k">new</span> <span class="nx">Scope</span><span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">,</span> <span class="nx">@body</span><span class="p">,</span> <span class="k">this</span><span class="p">)</span>
-    <span class="nv">o.top       = </span><span class="kc">true</span>
-    <span class="nv">o.indent    = </span><span class="nx">@idt</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-    <span class="nv">empty       = </span><span class="nx">@body</span><span class="p">.</span><span class="nx">expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">0</span>
-    <span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;noWrap&#39;</span>
-    <span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;globals&#39;</span>
-    <span class="nv">splat = </span><span class="kc">undefined</span>
-    <span class="nv">params = </span><span class="p">[]</span>
-    <span class="k">for</span> <span class="nx">param</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">@params</span>
-      <span class="k">if</span> <span class="nx">splat</span>
-        <span class="k">if</span> <span class="nx">param</span><span class="p">.</span><span class="nx">attach</span>
-          <span class="nv">param.assign = </span><span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">literal</span><span class="p">(</span><span class="s1">&#39;this&#39;</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span> <span class="nx">param</span><span class="p">.</span><span class="nx">value</span><span class="p">]</span>
-          <span class="nx">@body</span><span class="p">.</span><span class="nx">expressions</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">splat</span><span class="p">.</span><span class="nx">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">param</span><span class="p">.</span><span class="nx">assign</span>
-        <span class="nx">splat</span><span class="p">.</span><span class="nx">trailings</span><span class="p">.</span><span class="nx">push</span> <span class="nx">param</span>
-      <span class="k">else</span>
-        <span class="k">if</span> <span class="nx">param</span><span class="p">.</span><span class="nx">attach</span>
-          <span class="p">{</span><span class="nx">value</span><span class="p">}</span> <span class="o">=</span> <span class="nx">param</span>
-          <span class="p">[</span><span class="nx">param</span><span class="p">,</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">literal</span><span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;arg&#39;</span><span class="p">),</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span><span class="p">]</span>
-          <span class="nx">@body</span><span class="p">.</span><span class="nx">unshift</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="s1">&#39;this&#39;</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span> <span class="nx">value</span><span class="p">]),</span> <span class="nx">param</span>
-        <span class="k">if</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span>
-          <span class="nv">splat           = </span><span class="k">new</span> <span class="nx">SplatNode</span> <span class="nx">param</span><span class="p">.</span><span class="nx">value</span>
-          <span class="nv">splat.index     = </span><span class="nx">i</span>
-          <span class="nv">splat.trailings = </span><span class="p">[]</span>
-          <span class="nv">splat.arglength = </span><span class="nx">@params</span><span class="p">.</span><span class="nx">length</span>
-          <span class="nx">@body</span><span class="p">.</span><span class="nx">unshift</span><span class="p">(</span><span class="nx">splat</span><span class="p">)</span>
-        <span class="k">else</span>
-          <span class="nx">params</span><span class="p">.</span><span class="nx">push</span> <span class="nx">param</span>
-    <span class="nv">params = </span><span class="p">(</span><span class="nx">param</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">for</span> <span class="nx">param</span> <span class="k">in</span> <span class="nx">params</span><span class="p">)</span>
-    <span class="nx">@body</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="nx">unless</span> <span class="nx">empty</span>
-    <span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">parameter</span><span class="p">(</span><span class="nx">param</span><span class="p">))</span> <span class="k">for</span> <span class="nx">param</span> <span class="k">in</span> <span class="nx">params</span>
-    <span class="nv">code = </span><span class="k">if</span> <span class="nx">@body</span><span class="p">.</span><span class="nx">expressions</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="s2">&quot;\n#{ @body.compileWithDeclarations(o) }\n&quot;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">func = </span><span class="s2">&quot;function(#{ params.join(&#39;, &#39;) }) {#{code}#{ code and @tab }}&quot;</span>
-    <span class="k">return</span> <span class="s2">&quot;#{utility(&#39;bind&#39;)}(#{func}, #{@context})&quot;</span> <span class="k">if</span> <span class="nx">@bound</span>
-    <span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="s2">&quot;(#{func})&quot;</span> <span class="k">else</span> <span class="nx">func</span>
-
-  <span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-87">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-87">#</a>               </div>               <p>Compilation creates a new scope unless explicitly asked to share with the
-outer scope. Handles splat parameters in the parameter list by peeking at
-the JavaScript <code>arguments</code> objects. If the function is bound with the <code>=&gt;</code>
-arrow, generates a wrapper that saves the current value of <code>this</code> through
-a closure.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">traverseChildren</span><span class="o">:</span> <span class="p">(</span><span class="nx">crossScope</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="k">super</span><span class="p">(</span><span class="nx">crossScope</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="k">if</span> <span class="nx">crossScope</span>
-
-  <span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">idt</span> <span class="o">or=</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">children = </span><span class="p">(</span><span class="nx">child</span><span class="p">.</span><span class="nx">toString</span><span class="p">(</span><span class="nx">idt</span> <span class="o">+</span> <span class="nx">TAB</span><span class="p">)</span> <span class="k">for</span> <span class="nx">child</span> <span class="k">in</span> <span class="nx">@collectChildren</span><span class="p">()).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
-    <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">idt</span> <span class="o">+</span> <span class="nx">children</span></pre></div>             </td>           </tr>                               <tr id="section-88">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-88">#</a>               </div>               <p>Short-circuit traverseChildren method to prevent it from crossing scope boundaries
-unless crossScope is true</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-89">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-89">#</a>               </div>               <h3>ParamNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ParamNode = </span><span class="nx">class</span> <span class="nx">ParamNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>    <span class="s1">&#39;ParamNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@name</span><span class="p">,</span> <span class="nx">@attach</span><span class="p">,</span> <span class="nx">@splat</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="vi">@value = </span><span class="nx">literal</span> <span class="nx">@name</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@value</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-
-  <span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@attach</span> <span class="k">then</span> <span class="p">(</span><span class="nx">literal</span> <span class="s1">&#39;@&#39;</span> <span class="o">+</span> <span class="nx">@name</span><span class="p">).</span><span class="nx">toString</span> <span class="nx">idt</span> <span class="k">else</span> <span class="nx">@value</span><span class="p">.</span><span class="nx">toString</span> <span class="nx">idt</span></pre></div>             </td>           </tr>                               <tr id="section-90">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-90">#</a>               </div>               <p>A parameter in a function definition. Beyond a typical Javascript parameter,
-these parameters can also attach themselves to the context of the function,
-as well as be a splat, gathering up a group of parameters into an array.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-91">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-91">#</a>               </div>               <h3>SplatNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.SplatNode = </span><span class="nx">class</span> <span class="nx">SplatNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;SplatNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="nv">name = </span><span class="nx">literal</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="nx">unless</span> <span class="nx">name</span><span class="p">.</span><span class="nx">compile</span>
-    <span class="vi">@name = </span><span class="nx">name</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@index</span><span class="o">?</span> <span class="k">then</span> <span class="nx">@compileParam</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-92">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-92">#</a>               </div>               <p>A splat, either as a parameter to a function, an argument to a call,
-or as part of a destructuring assignment.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileParam</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">name = </span><span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span> <span class="nx">name</span>
-    <span class="nv">end = </span><span class="s1">&#39;&#39;</span>
-    <span class="k">if</span> <span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span>
-      <span class="nv">len = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;len&#39;</span>
-      <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">len</span><span class="p">,</span> <span class="s2">&quot;arguments.length&quot;</span>
-      <span class="nv">variadic = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;result&#39;</span>
-      <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">variadic</span><span class="p">,</span> <span class="nx">len</span> <span class="o">+</span> <span class="s1">&#39; &gt;= &#39;</span> <span class="o">+</span> <span class="nx">@arglength</span>
-      <span class="nv">end = </span><span class="k">if</span> <span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="s2">&quot;, #{len} - #{@trailings.length}&quot;</span>
-      <span class="k">for</span> <span class="nx">trailing</span><span class="p">,</span> <span class="nx">idx</span> <span class="k">in</span> <span class="nx">@trailings</span>
-        <span class="k">if</span> <span class="nx">trailing</span><span class="p">.</span><span class="nx">attach</span>
-          <span class="nv">assign        = </span><span class="nx">trailing</span><span class="p">.</span><span class="nx">assign</span>
-          <span class="nv">trailing      = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;arg&#39;</span>
-          <span class="nv">assign.value  = </span><span class="nx">trailing</span>
-        <span class="nv">pos = </span><span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="nx">idx</span>
-        <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span><span class="p">(</span><span class="nx">trailing</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="s2">&quot;arguments[#{variadic} ? #{len} - #{pos} : #{@index + idx}]&quot;</span><span class="p">)</span>
-    <span class="s2">&quot;#{name} = #{utility(&#39;slice&#39;)}.call(arguments, #{@index}#{end})&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-93">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-93">#</a>               </div>               <p>Compiling a parameter splat means recovering the parameters that succeed
-the splat in the parameter list, by slicing the arguments object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileValue</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">trailings</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">trail = </span><span class="k">if</span> <span class="nx">trailings</span> <span class="k">then</span> <span class="s2">&quot;, #{name}.length - #{trailings}&quot;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="s2">&quot;#{utility &#39;slice&#39;}.call(#{name}, #{index}#{trail})&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-94">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-94">#</a>               </div>               <p>A compiling a splat as a destructuring assignment means slicing arguments
-from the right-hand-side's corresponding array.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">@compileSplattedArray</span><span class="o">:</span> <span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">args = </span><span class="p">[]</span>
-    <span class="k">for</span> <span class="nx">arg</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">list</span>
-      <span class="nv">code = </span><span class="nx">arg</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-      <span class="nv">prev = </span><span class="nx">args</span><span class="p">[</span><span class="nv">last = </span><span class="nx">args</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-      <span class="k">if</span> <span class="nx">arg</span> <span class="o">not</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span>
-        <span class="k">if</span> <span class="nx">prev</span> <span class="o">and</span> <span class="nx">starts</span><span class="p">(</span><span class="nx">prev</span><span class="p">,</span> <span class="s1">&#39;[&#39;</span><span class="p">)</span> <span class="o">and</span> <span class="nx">ends</span><span class="p">(</span><span class="nx">prev</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span><span class="p">)</span>
-          <span class="nx">args</span><span class="p">[</span><span class="nx">last</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;#{prev.substr(0, prev.length - 1)}, #{code}]&quot;</span>
-          <span class="k">continue</span>
-        <span class="k">else</span> <span class="k">if</span> <span class="nx">prev</span> <span class="o">and</span> <span class="nx">starts</span><span class="p">(</span><span class="nx">prev</span><span class="p">,</span> <span class="s1">&#39;.concat([&#39;</span><span class="p">)</span> <span class="o">and</span> <span class="nx">ends</span><span class="p">(</span><span class="nx">prev</span><span class="p">,</span> <span class="s1">&#39;])&#39;</span><span class="p">)</span>
-          <span class="nx">args</span><span class="p">[</span><span class="nx">last</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;#{prev.substr(0, prev.length - 2)}, #{code}])&quot;</span>
-          <span class="k">continue</span>
-        <span class="k">else</span>
-          <span class="nv">code = </span><span class="s2">&quot;[#{code}]&quot;</span>
-      <span class="nx">args</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span> <span class="k">then</span> <span class="nx">code</span> <span class="k">else</span> <span class="s2">&quot;.concat(#{code})&quot;</span><span class="p">)</span>
-    <span class="nx">args</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-95">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-95">#</a>               </div>               <p>Utility function that converts arbitrary number of elements, mixed with
-splats, to a proper array</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-96">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-96">#</a>               </div>               <h3>WhileNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.WhileNode = </span><span class="nx">class</span> <span class="nx">WhileNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>         <span class="s1">&#39;WhileNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span>     <span class="p">[</span><span class="s1">&#39;condition&#39;</span><span class="p">,</span> <span class="s1">&#39;guard&#39;</span><span class="p">,</span> <span class="s1">&#39;body&#39;</span><span class="p">]</span>
-  <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">yes</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">condition</span><span class="p">,</span> <span class="nx">opts</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="k">if</span> <span class="nx">opts</span> <span class="o">and</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">invert</span>
-      <span class="nv">condition = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="nx">condition</span> <span class="k">if</span> <span class="nx">condition</span> <span class="k">instanceof</span> <span class="nx">OpNode</span>
-      <span class="nv">condition = </span><span class="k">new</span> <span class="nx">OpNode</span><span class="p">(</span><span class="s1">&#39;!&#39;</span><span class="p">,</span> <span class="nx">condition</span><span class="p">)</span>
-    <span class="vi">@condition  = </span><span class="nx">condition</span>
-    <span class="vi">@guard = </span><span class="nx">opts</span> <span class="o">and</span> <span class="nx">opts</span><span class="p">.</span><span class="nx">guard</span>
-
-  <span class="nx">addBody</span><span class="o">:</span> <span class="p">(</span><span class="nx">body</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="vi">@body = </span><span class="nx">body</span>
-    <span class="k">this</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="vi">@returns = </span><span class="kc">true</span>
-    <span class="k">this</span>
-
-  <span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-97">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-97">#</a>               </div>               <p>A while loop, the only sort of low-level loop exposed by CoffeeScript. From
-it, all other loops can be manufactured. Useful in cases where you need more
-flexibility or more speed than a comprehension can provide.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">top      = </span> <span class="nx">del</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;top&#39;</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@returns</span>
-    <span class="nv">o.indent = </span> <span class="nx">@idt</span> <span class="mi">1</span>
-    <span class="nv">o.top    = </span> <span class="kc">true</span>
-    <span class="vi">@condition.parenthetical = </span><span class="kc">yes</span>
-    <span class="nv">cond     = </span> <span class="nx">@condition</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nv">set      = </span> <span class="s1">&#39;&#39;</span>
-    <span class="nx">unless</span> <span class="nx">top</span>
-      <span class="nv">rvar  = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;result&#39;</span>
-      <span class="nv">set   = </span><span class="s2">&quot;#{@tab}#{rvar} = [];\n&quot;</span>
-      <span class="vi">@body = </span><span class="nx">PushNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">rvar</span><span class="p">,</span> <span class="nx">@body</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@body</span>
-    <span class="nv">pre     = </span><span class="s2">&quot;#{set}#{@tab}while (#{cond})&quot;</span>
-    <span class="vi">@body   = </span><span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="k">new</span> <span class="nx">IfNode</span><span class="p">(</span><span class="nx">@guard</span><span class="p">,</span> <span class="nx">@body</span><span class="p">)])</span> <span class="k">if</span> <span class="nx">@guard</span>
-    <span class="k">if</span> <span class="nx">@returns</span>
-      <span class="nv">post = </span><span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">rvar</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">()))</span>
-    <span class="k">else</span>
-      <span class="nv">post = </span><span class="s1">&#39;&#39;</span>
-    <span class="s2">&quot;#{pre} {\n#{ @body.compile(o) }\n#{@tab}}#{post}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-98">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-98">#</a>               </div>               <p>The main difference from a JavaScript <em>while</em> is that the CoffeeScript
-<em>while</em> can be used as a part of a larger expression -- while loops may
-return an array containing the computed result of each iteration.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-99">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-99">#</a>               </div>               <h3>OpNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.OpNode = </span><span class="nx">class</span> <span class="nx">OpNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span></pre></div>             </td>           </tr>                               <tr id="section-100">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-100">#</a>               </div>               <p>Simple Arithmetic and logical operations. Performs some conversion from
-CoffeeScript operations into their JavaScript equivalents.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">CONVERSIONS</span><span class="o">:</span>
-    <span class="s1">&#39;==&#39;</span><span class="o">:</span> <span class="s1">&#39;===&#39;</span>
-    <span class="s1">&#39;!=&#39;</span><span class="o">:</span> <span class="s1">&#39;!==&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-101">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-101">#</a>               </div>               <p>The map of conversions from CoffeeScript to JavaScript symbols.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">INVERSIONS</span><span class="o">:</span>
-    <span class="s1">&#39;!==&#39;</span><span class="o">:</span> <span class="s1">&#39;===&#39;</span>
-    <span class="s1">&#39;===&#39;</span><span class="o">:</span> <span class="s1">&#39;!==&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-102">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-102">#</a>               </div>               <p>The map of invertible operators.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">CHAINABLE</span><span class="o">:</span>        <span class="p">[</span><span class="s1">&#39;&lt;&#39;</span><span class="p">,</span> <span class="s1">&#39;&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;&gt;=&#39;</span><span class="p">,</span> <span class="s1">&#39;&lt;=&#39;</span><span class="p">,</span> <span class="s1">&#39;===&#39;</span><span class="p">,</span> <span class="s1">&#39;!==&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-103">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-103">#</a>               </div>               <p>The list of operators for which we perform
-<a href="http://docs.python.org/reference/expressions.html#notin">Python-style comparison chaining</a>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ASSIGNMENT</span><span class="o">:</span>       <span class="p">[</span><span class="s1">&#39;||=&#39;</span><span class="p">,</span> <span class="s1">&#39;&amp;&amp;=&#39;</span><span class="p">,</span> <span class="s1">&#39;?=&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-104">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-104">#</a>               </div>               <p>Our assignment operators that have no JavaScript equivalent.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">PREFIX_OPERATORS</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;typeof&#39;</span><span class="p">,</span> <span class="s1">&#39;delete&#39;</span><span class="p">]</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;OpNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;first&#39;</span><span class="p">,</span> <span class="s1">&#39;second&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@operator</span><span class="p">,</span> <span class="nx">@first</span><span class="p">,</span> <span class="nx">@second</span><span class="p">,</span> <span class="nx">flip</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="vi">@operator = </span><span class="nx">@CONVERSIONS</span><span class="p">[</span><span class="nx">@operator</span><span class="p">]</span> <span class="o">or</span> <span class="nx">@operator</span>
-    <span class="vi">@flip     = </span><span class="o">!!</span><span class="nx">flip</span>
-    <span class="k">if</span> <span class="nx">@first</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">base</span> <span class="k">instanceof</span> <span class="nx">ObjectNode</span>
-      <span class="vi">@first = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="nx">@first</span>
-    <span class="vi">@first.tags.operation = </span><span class="kc">yes</span>
-    <span class="vi">@second.tags.operation = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">@second</span>
-
-  <span class="nx">isUnary</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="o">not</span> <span class="nx">@second</span>
-
-  <span class="nx">isInvertible</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="p">(</span><span class="nx">@operator</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;===&#39;</span><span class="p">,</span> <span class="s1">&#39;!==&#39;</span><span class="p">])</span> <span class="o">and</span>
-      <span class="o">not</span> <span class="p">(</span><span class="nx">@first</span> <span class="k">instanceof</span> <span class="nx">OpNode</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="p">(</span><span class="nx">@second</span> <span class="k">instanceof</span> <span class="nx">OpNode</span><span class="p">)</span>
-
-
-  <span class="nx">isMutator</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">ends</span><span class="p">(</span><span class="nx">@operator</span><span class="p">,</span> <span class="s1">&#39;=&#39;</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="p">(</span><span class="nx">@operator</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;===&#39;</span><span class="p">,</span> <span class="s1">&#39;!==&#39;</span><span class="p">])</span>
-
-  <span class="nx">isChainable</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">include</span><span class="p">(</span><span class="nx">@CHAINABLE</span><span class="p">,</span> <span class="nx">@operator</span><span class="p">)</span>
-
-  <span class="nx">invert</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="vi">@operator = </span><span class="nx">@INVERSIONS</span><span class="p">[</span><span class="nx">@operator</span><span class="p">]</span>
-
-  <span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">(</span><span class="nx">idt</span><span class="p">,</span> <span class="nx">@class</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="nx">@operator</span><span class="p">)</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">@compileChain</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>      <span class="k">if</span> <span class="nx">@isChainable</span><span class="p">()</span> <span class="o">and</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">()</span> <span class="k">instanceof</span> <span class="nx">OpNode</span> <span class="o">and</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">().</span><span class="nx">isChainable</span><span class="p">()</span>
-    <span class="k">return</span> <span class="nx">@compileAssignment</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">indexOf</span><span class="p">(</span><span class="nx">@ASSIGNMENT</span><span class="p">,</span> <span class="nx">@operator</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span>
-    <span class="k">return</span> <span class="nx">@compileUnary</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>      <span class="k">if</span> <span class="nx">@isUnary</span><span class="p">()</span>
-    <span class="k">return</span> <span class="nx">@compileExistence</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>  <span class="k">if</span> <span class="nx">@operator</span> <span class="o">is</span> <span class="s1">&#39;?&#39;</span>
-    <span class="vi">@first  = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="nx">@first</span><span class="p">)</span>  <span class="k">if</span> <span class="nx">@first</span> <span class="k">instanceof</span> <span class="nx">OpNode</span> <span class="o">and</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">isMutator</span><span class="p">()</span>
-    <span class="vi">@second = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="nx">@second</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@second</span> <span class="k">instanceof</span> <span class="nx">OpNode</span> <span class="o">and</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">isMutator</span><span class="p">()</span>
-    <span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">@operator</span><span class="p">,</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)].</span><span class="nx">join</span> <span class="s1">&#39; &#39;</span></pre></div>             </td>           </tr>                               <tr id="section-105">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-105">#</a>               </div>               <p>Operators must come before their operands with a space.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileChain</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">shared = </span><span class="nx">@first</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">().</span><span class="nx">second</span>
-    <span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">second</span><span class="p">,</span> <span class="nx">shared</span><span class="p">]</span> <span class="o">=</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">compileReference</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">containsType</span> <span class="nx">CallNode</span>
-    <span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">second</span><span class="p">,</span> <span class="nx">shared</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span>
-    <span class="s2">&quot;(#{first}) &amp;&amp; (#{shared} #{@operator} #{second})&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-106">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-106">#</a>               </div>               <p>Mimic Python's chained comparisons when multiple comparison operators are
-used sequentially. For example:</p>
-
-<pre><code>bin/coffee -e "puts 50 &lt; 65 &gt; 10"
-true
-</code></pre>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileAssignment</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">firstVar</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span><span class="p">,</span> <span class="nx">assignment</span><span class="o">:</span> <span class="kc">yes</span>
-    <span class="nv">second = </span><span class="nx">@second</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-    <span class="nv">second = </span><span class="s2">&quot;(#{second})&quot;</span> <span class="k">if</span> <span class="nx">@second</span> <span class="k">instanceof</span> <span class="nx">OpNode</span>
-    <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">first</span><span class="p">)</span> <span class="k">if</span> <span class="nx">first</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">IDENTIFIER</span><span class="p">)</span>
-    <span class="k">return</span> <span class="s2">&quot;#{first} = #{ ExistenceNode.compileTest(o, literal(firstVar))[0] } ? #{firstVar} : #{second}&quot;</span> <span class="k">if</span> <span class="nx">@operator</span> <span class="o">is</span> <span class="s1">&#39;?=&#39;</span>
-    <span class="s2">&quot;#{first} #{ @operator.substr(0, 2) } (#{firstVar} = #{second})&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-107">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-107">#</a>               </div>               <p>When compiling a conditional assignment, take care to ensure that the
-operands are only evaluated once, even though we have to reference them
-more than once.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileExistence</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[</span><span class="nx">test</span><span class="p">,</span> <span class="nx">ref</span><span class="p">]</span> <span class="o">=</span> <span class="nx">ExistenceNode</span><span class="p">.</span><span class="nx">compileTest</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">@first</span><span class="p">)</span>
-    <span class="s2">&quot;#{test} ? #{ref} : #{ @second.compile(o) }&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-108">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-108">#</a>               </div>               <p>If this is an existence operator, we delegate to <code>ExistenceNode.compileTest</code>
-to give us the safe references for the variables.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileUnary</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">space = </span><span class="k">if</span> <span class="nx">indexOf</span><span class="p">(</span><span class="nx">@PREFIX_OPERATORS</span><span class="p">,</span> <span class="nx">@operator</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="k">then</span> <span class="s1">&#39; &#39;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">parts = </span><span class="p">[</span><span class="nx">@operator</span><span class="p">,</span> <span class="nx">space</span><span class="p">,</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span>
-    <span class="nv">parts = </span><span class="nx">parts</span><span class="p">.</span><span class="nx">reverse</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@flip</span>
-    <span class="nx">parts</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-109">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-109">#</a>               </div>               <p>Compile a unary <strong>OpNode</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.InNode = </span><span class="nx">class</span> <span class="nx">InNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>    <span class="s1">&#39;InNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;object&#39;</span><span class="p">,</span> <span class="s1">&#39;array&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@object</span><span class="p">,</span> <span class="nx">@array</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">isArray</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@array</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="nx">@array</span><span class="p">.</span><span class="nx">isArray</span><span class="p">()</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[</span><span class="nx">@obj1</span><span class="p">,</span> <span class="nx">@obj2</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@object</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
-    <span class="k">if</span> <span class="nx">@isArray</span><span class="p">()</span> <span class="k">then</span> <span class="nx">@compileOrTest</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@compileLoopTest</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-
-  <span class="nx">compileOrTest</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">tests = </span><span class="k">for</span> <span class="nx">item</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">@array</span><span class="p">.</span><span class="nx">base</span><span class="p">.</span><span class="nx">objects</span>
-      <span class="s2">&quot;#{item.compile(o)} === #{if i then @obj2 else @obj1}&quot;</span>
-    <span class="s2">&quot;(#{tests.join(&#39; || &#39;)})&quot;</span>
-
-  <span class="nx">compileLoopTest</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[</span><span class="nx">@arr1</span><span class="p">,</span> <span class="nx">@arr2</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@array</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
-    <span class="p">[</span><span class="nx">i</span><span class="p">,</span> <span class="nx">l</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">(</span><span class="s1">&#39;i&#39;</span><span class="p">),</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">(</span><span class="s1">&#39;len&#39;</span><span class="p">)]</span>
-    <span class="nv">prefix = </span><span class="k">if</span> <span class="nx">@obj1</span> <span class="o">isnt</span> <span class="nx">@obj2</span> <span class="k">then</span> <span class="nx">@obj1</span> <span class="o">+</span> <span class="s1">&#39;; &#39;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="s2">&quot;(function(){ #{prefix}for (var #{i}=0, #{l}=#{@arr1}.length; #{i}&lt;#{l}; #{i}++) { if (#{@arr2}[#{i}] === #{@obj2}) return true; } return false; }).call(this)&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-110">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-110">#</a>               </div>               <h3>InNode</h3>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-111">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-111">#</a>               </div>               <h3>TryNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.TryNode = </span><span class="nx">class</span> <span class="nx">TryNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>        <span class="s1">&#39;TryNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span>     <span class="p">[</span><span class="s1">&#39;attempt&#39;</span><span class="p">,</span> <span class="s1">&#39;recovery&#39;</span><span class="p">,</span> <span class="s1">&#39;ensure&#39;</span><span class="p">]</span>
-  <span class="nx">isStatement</span><span class="o">:</span>  <span class="o">-&gt;</span> <span class="kc">yes</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@attempt</span><span class="p">,</span> <span class="nx">@error</span><span class="p">,</span> <span class="nx">@recovery</span><span class="p">,</span> <span class="nx">@ensure</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="vi">@attempt  = </span><span class="nx">@attempt</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@attempt</span>
-    <span class="vi">@recovery = </span><span class="nx">@recovery</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@recovery</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-112">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-112">#</a>               </div>               <p>A classic <em>try/catch/finally</em> block.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">o.indent    = </span><span class="nx">@idt</span> <span class="mi">1</span>
-    <span class="nv">o.top       = </span><span class="kc">true</span>
-    <span class="nv">attemptPart = </span><span class="nx">@attempt</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nv">errorPart   = </span><span class="k">if</span> <span class="nx">@error</span> <span class="k">then</span> <span class="s2">&quot; (#{ @error.compile(o) }) &quot;</span> <span class="k">else</span> <span class="s1">&#39; &#39;</span>
-    <span class="nv">catchPart   = </span><span class="k">if</span> <span class="nx">@recovery</span> <span class="k">then</span> <span class="s2">&quot; catch#{errorPart}{\n#{ @recovery.compile(o) }\n#{@tab}}&quot;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">finallyPart = </span><span class="p">(</span><span class="nx">@ensure</span> <span class="o">or</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">and</span> <span class="s1">&#39; finally {\n&#39;</span> <span class="o">+</span> <span class="nx">@ensure</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot;\n#{@tab}}&quot;</span>
-    <span class="s2">&quot;#{@tab}try {\n#{attemptPart}\n#{@tab}}#{catchPart}#{finallyPart}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-113">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-113">#</a>               </div>               <p>Compilation is more or less as you would expect -- the <em>finally</em> clause
-is optional, the <em>catch</em> is not.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-114">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-114">#</a>               </div>               <h3>ThrowNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ThrowNode = </span><span class="nx">class</span> <span class="nx">ThrowNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>         <span class="s1">&#39;ThrowNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span>     <span class="p">[</span><span class="s1">&#39;expression&#39;</span><span class="p">]</span>
-  <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">yes</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@expression</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-115">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-115">#</a>               </div>               <p>Simple node to throw an exception.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="k">this</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="s2">&quot;#{@tab}throw #{@expression.compile(o)};&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-116">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-116">#</a>               </div>               <p>A <strong>ThrowNode</strong> is already a return, of sorts...</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-117">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-117">#</a>               </div>               <h3>ExistenceNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ExistenceNode = </span><span class="nx">class</span> <span class="nx">ExistenceNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;ExistenceNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;expression&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@expression</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">test = </span><span class="nx">ExistenceNode</span><span class="p">.</span><span class="nx">compileTest</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">@expression</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-    <span class="k">if</span> <span class="nx">@parenthetical</span> <span class="k">then</span> <span class="nx">test</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">test</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="k">else</span> <span class="nx">test</span></pre></div>             </td>           </tr>                               <tr id="section-118">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-118">#</a>               </div>               <p>Checks a variable for existence -- not <em>null</em> and not <em>undefined</em>. This is
-similar to <code>.nil?</code> in Ruby, and avoids having to consult a JavaScript truth
-table.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">@compileTest</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">variable</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">second</span><span class="p">]</span> <span class="o">=</span> <span class="nx">variable</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
-    <span class="p">[</span><span class="s2">&quot;(typeof #{first} !== \&quot;undefined\&quot; &amp;&amp; #{second} !== null)&quot;</span><span class="p">,</span> <span class="nx">second</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-119">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-119">#</a>               </div>               <p>The meat of the <strong>ExistenceNode</strong> is in this static <code>compileTest</code> method
-because other nodes like to check the existence of their variables as well.
-Be careful not to double-evaluate anything.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-120">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-120">#</a>               </div>               <h3>ParentheticalNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ParentheticalNode = </span><span class="nx">class</span> <span class="nx">ParentheticalNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;ParentheticalNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;expression&#39;</span><span class="p">]</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@expression</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-
-  <span class="nx">isStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@expression</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@expression</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span>
-
-  <span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="kc">yes</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">top  = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;top&#39;</span>
-    <span class="vi">@expression.parenthetical = </span><span class="kc">true</span>
-    <span class="nv">code = </span><span class="nx">@expression</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="k">return</span> <span class="nx">code</span> <span class="k">if</span> <span class="nx">top</span> <span class="o">and</span> <span class="nx">@expression</span><span class="p">.</span><span class="nx">isPureStatement</span> <span class="nx">o</span>
-    <span class="k">if</span> <span class="nx">@parenthetical</span> <span class="o">or</span> <span class="nx">@isStatement</span> <span class="nx">o</span>
-      <span class="k">return</span> <span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="nx">@tab</span> <span class="o">+</span> <span class="nx">code</span> <span class="o">+</span> <span class="s1">&#39;;&#39;</span> <span class="k">else</span> <span class="nx">code</span>
-    <span class="s2">&quot;(#{code})&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-121">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-121">#</a>               </div>               <p>An extra set of parentheses, specified explicitly in the source. At one time
-we tried to clean up the results by detecting and removing redundant
-parentheses, but no longer -- you can put in as many as you please.</p>
-
-<p>Parentheses are a good way to force any statement to become an expression.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-122">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-122">#</a>               </div>               <h3>ForNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.ForNode = </span><span class="nx">class</span> <span class="nx">ForNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>         <span class="s1">&#39;ForNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span>     <span class="p">[</span><span class="s1">&#39;body&#39;</span><span class="p">,</span> <span class="s1">&#39;source&#39;</span><span class="p">,</span> <span class="s1">&#39;guard&#39;</span><span class="p">]</span>
-  <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">yes</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@body</span><span class="p">,</span> <span class="nx">source</span><span class="p">,</span> <span class="nx">@name</span><span class="p">,</span> <span class="nx">@index</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="nx">@index</span>  <span class="o">or=</span> <span class="kc">null</span>
-    <span class="vi">@source = </span><span class="nx">source</span><span class="p">.</span><span class="nx">source</span>
-    <span class="vi">@guard  = </span><span class="nx">source</span><span class="p">.</span><span class="nx">guard</span>
-    <span class="vi">@step   = </span><span class="nx">source</span><span class="p">.</span><span class="nx">step</span>
-    <span class="vi">@raw    = </span><span class="o">!!</span><span class="nx">source</span><span class="p">.</span><span class="nx">raw</span>
-    <span class="vi">@object = </span><span class="o">!!</span><span class="nx">source</span><span class="p">.</span><span class="nx">object</span>
-    <span class="p">[</span><span class="nx">@name</span><span class="p">,</span> <span class="nx">@index</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">@index</span><span class="p">,</span> <span class="nx">@name</span><span class="p">]</span> <span class="k">if</span> <span class="nx">@object</span>
-    <span class="vi">@pattern = </span><span class="nx">@name</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span>
-    <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">&#39;index cannot be a pattern matching expression&#39;</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@index</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span>
-    <span class="vi">@returns = </span><span class="kc">false</span>
-
-  <span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="kc">true</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="vi">@returns = </span><span class="kc">true</span>
-    <span class="k">this</span>
-
-  <span class="nx">compileReturnValue</span><span class="o">:</span> <span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">val</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@returns</span>
-    <span class="k">return</span> <span class="s1">&#39;\n&#39;</span> <span class="o">+</span> <span class="nx">val</span> <span class="k">if</span> <span class="nx">val</span>
-    <span class="s1">&#39;&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-123">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-123">#</a>               </div>               <p>CoffeeScript's replacement for the <em>for</em> loop is our array and object
-comprehensions, that compile into <em>for</em> loops here. They also act as an
-expression, able to return the result of each filtered iteration.</p>
-
-<p>Unlike Python array comprehensions, they can be multi-line, and you can pass
-the current index of the loop as a second parameter. Unlike Ruby blocks,
-you can map and filter in a single pass.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">topLevel      = </span><span class="nx">del</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;top&#39;</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@returns</span>
-    <span class="nv">range         = </span><span class="nx">@source</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="nx">@source</span><span class="p">.</span><span class="nx">base</span> <span class="k">instanceof</span> <span class="nx">RangeNode</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@source</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nv">source        = </span><span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">@source</span><span class="p">.</span><span class="nx">base</span> <span class="k">else</span> <span class="nx">@source</span>
-    <span class="nv">codeInBody    = </span><span class="nx">@body</span><span class="p">.</span><span class="nx">contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">CodeNode</span>
-    <span class="nv">scope         = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span>
-    <span class="nv">name          = </span><span class="p">(</span><span class="nx">@name</span> <span class="o">and</span> <span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="o">or</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;i&#39;</span>
-    <span class="nv">index         = </span><span class="nx">@index</span> <span class="o">and</span> <span class="nx">@index</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
-    <span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span>  <span class="nx">immediate</span><span class="o">:</span> <span class="kc">yes</span><span class="p">)</span> <span class="k">if</span> <span class="nx">name</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@pattern</span> <span class="o">and</span> <span class="p">(</span><span class="nx">range</span> <span class="o">or</span> <span class="o">not</span> <span class="nx">codeInBody</span><span class="p">)</span>
-    <span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="nx">immediate</span><span class="o">:</span> <span class="kc">yes</span><span class="p">)</span> <span class="k">if</span> <span class="nx">index</span>
-    <span class="nv">rvar          = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;result&#39;</span> <span class="nx">unless</span> <span class="nx">topLevel</span>
-    <span class="nv">ivar          = </span><span class="k">if</span> <span class="nx">codeInBody</span> <span class="k">then</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;i&#39;</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">name</span> <span class="k">else</span> <span class="nx">index</span> <span class="o">or</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;i&#39;</span>
-    <span class="nv">varPart       = </span><span class="s1">&#39;&#39;</span>
-    <span class="nv">guardPart     = </span><span class="s1">&#39;&#39;</span>
-    <span class="nv">body          = </span><span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">@body</span><span class="p">])</span>
-    <span class="k">if</span> <span class="nx">range</span>
-      <span class="nv">sourcePart  = </span><span class="nx">source</span><span class="p">.</span><span class="nx">compileVariables</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-      <span class="nv">forPart     = </span><span class="nx">source</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">index</span><span class="o">:</span> <span class="nx">ivar</span><span class="p">,</span> <span class="nx">step</span><span class="o">:</span> <span class="nx">@step</span>
-    <span class="k">else</span>
-      <span class="nv">svar        = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;ref&#39;</span>
-      <span class="nv">sourcePart  = </span><span class="s2">&quot;#{svar} = #{ @source.compile(o) };&quot;</span>
-      <span class="k">if</span> <span class="nx">@pattern</span>
-        <span class="nv">namePart  = </span><span class="k">new</span> <span class="nx">AssignNode</span><span class="p">(</span><span class="nx">@name</span><span class="p">,</span> <span class="nx">literal</span><span class="p">(</span><span class="s2">&quot;#{svar}[#{ivar}]&quot;</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">keepLevel</span><span class="o">:</span> <span class="kc">yes</span><span class="p">})</span> <span class="o">+</span> <span class="s1">&#39;\n&#39;</span>
-      <span class="k">else</span>
-        <span class="nv">namePart  = </span><span class="s2">&quot;#{name} = #{svar}[#{ivar}]&quot;</span> <span class="k">if</span> <span class="nx">name</span>
-      <span class="nx">unless</span> <span class="nx">@object</span>
-        <span class="nv">lvar      = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">&#39;len&#39;</span>
-        <span class="nv">stepPart  = </span><span class="k">if</span> <span class="nx">@step</span> <span class="k">then</span> <span class="s2">&quot;#{ivar} += #{ @step.compile(o) }&quot;</span> <span class="k">else</span> <span class="s2">&quot;#{ivar}++&quot;</span>
-        <span class="nv">forPart   = </span><span class="s2">&quot;#{ivar} = 0, #{lvar} = #{svar}.length; #{ivar} &lt; #{lvar}; #{stepPart}&quot;</span>
-    <span class="nv">sourcePart    = </span><span class="p">(</span><span class="k">if</span> <span class="nx">rvar</span> <span class="k">then</span> <span class="s2">&quot;#{rvar} = []; &quot;</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="nx">sourcePart</span>
-    <span class="nv">sourcePart    = </span><span class="k">if</span> <span class="nx">sourcePart</span> <span class="k">then</span> <span class="s2">&quot;#{@tab}#{sourcePart}\n#{@tab}&quot;</span> <span class="k">else</span> <span class="nx">@tab</span>
-    <span class="nv">returnResult  = </span><span class="nx">@compileReturnValue</span><span class="p">(</span><span class="nx">rvar</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span>
-
-    <span class="nv">body          = </span><span class="nx">PushNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">rvar</span><span class="p">,</span> <span class="nx">body</span><span class="p">)</span> <span class="nx">unless</span> <span class="nx">topLevel</span>
-    <span class="k">if</span> <span class="nx">@guard</span>
-      <span class="nv">body        = </span><span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="k">new</span> <span class="nx">IfNode</span><span class="p">(</span><span class="nx">@guard</span><span class="p">,</span> <span class="nx">body</span><span class="p">)])</span>
-    <span class="k">if</span> <span class="nx">codeInBody</span>
-      <span class="nx">body</span><span class="p">.</span><span class="nx">unshift</span>  <span class="nx">literal</span> <span class="s2">&quot;var #{name} = #{ivar}&quot;</span> <span class="k">if</span> <span class="nx">range</span>
-      <span class="nx">body</span><span class="p">.</span><span class="nx">unshift</span>  <span class="nx">literal</span> <span class="s2">&quot;var #{namePart}&quot;</span> <span class="k">if</span> <span class="nx">namePart</span>
-      <span class="nx">body</span><span class="p">.</span><span class="nx">unshift</span>  <span class="nx">literal</span> <span class="s2">&quot;var #{index} = #{ivar}&quot;</span> <span class="k">if</span> <span class="nx">index</span>
-      <span class="nv">body        = </span><span class="nx">ClosureNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">body</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span>
-    <span class="k">else</span>
-      <span class="nv">varPart     = </span><span class="p">(</span><span class="nx">namePart</span> <span class="o">or</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">and</span> <span class="p">(</span><span class="k">if</span> <span class="nx">@pattern</span> <span class="k">then</span> <span class="nx">namePart</span> <span class="k">else</span> <span class="s2">&quot;#{@idt(1)}#{namePart};\n&quot;</span><span class="p">)</span>
-    <span class="k">if</span> <span class="nx">@object</span>
-      <span class="nv">forPart     = </span><span class="s2">&quot;#{ivar} in #{svar}&quot;</span>
-      <span class="nv">guardPart   = </span><span class="s2">&quot;\n#{@idt(1)}if (!#{utility(&#39;hasProp&#39;)}.call(#{svar}, #{ivar})) continue;&quot;</span> <span class="nx">unless</span> <span class="nx">@raw</span>
-    <span class="nv">body          = </span><span class="nx">body</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">}))</span>
-    <span class="nv">vars          = </span><span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">name</span> <span class="k">else</span> <span class="s2">&quot;#{name}, #{ivar}&quot;</span>
-    <span class="s2">&quot;#{sourcePart}for (#{forPart}) {#{guardPart}\n#{varPart}#{body}\n#{@tab}}#{returnResult}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-124">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-124">#</a>               </div>               <p>Welcome to the hairiest method in all of CoffeeScript. Handles the inner
-loop, filtering, stepping, and result saving for array, object, and range
-comprehensions. Some of the generated code can be shared in common, and
-some cannot.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-125">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-125">#</a>               </div>               <h3>SwitchNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.SwitchNode = </span><span class="nx">class</span> <span class="nx">SwitchNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;SwitchNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;subject&#39;</span><span class="p">,</span> <span class="s1">&#39;cases&#39;</span><span class="p">,</span> <span class="s1">&#39;otherwise&#39;</span><span class="p">]</span>
-
-  <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">yes</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@subject</span><span class="p">,</span> <span class="nx">@cases</span><span class="p">,</span> <span class="nx">@otherwise</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">super</span><span class="p">()</span>
-    <span class="vi">@tags.subjectless = </span><span class="o">!</span><span class="nx">@subject</span>
-    <span class="nx">@subject</span> <span class="o">or=</span> <span class="nx">literal</span> <span class="s1">&#39;true&#39;</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">@cases</span>
-    <span class="nx">@otherwise</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@otherwise</span>
-    <span class="k">this</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">idt = o.indent = </span><span class="nx">@idt</span> <span class="mi">2</span>
-    <span class="nv">o.top = </span><span class="kc">yes</span>
-    <span class="nv">code = </span><span class="s2">&quot;#{ @tab }switch (#{ @subject.compile o }) {&quot;</span>
-    <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">@cases</span>
-      <span class="p">[</span><span class="nx">conditions</span><span class="p">,</span> <span class="nx">block</span><span class="p">]</span> <span class="o">=</span> <span class="nx">pair</span>
-      <span class="nv">exprs = </span><span class="nx">block</span><span class="p">.</span><span class="nx">expressions</span>
-      <span class="k">for</span> <span class="nx">condition</span> <span class="k">in</span> <span class="nx">flatten</span> <span class="p">[</span><span class="nx">conditions</span><span class="p">]</span>
-        <span class="nv">condition = </span><span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;!!&#39;</span><span class="p">,</span> <span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="nx">condition</span> <span class="k">if</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">subjectless</span>
-        <span class="nx">code</span> <span class="o">+=</span> <span class="s2">&quot;\n#{ @idt(1) }case #{ condition.compile o }:&quot;</span>
-      <span class="nx">code</span> <span class="o">+=</span> <span class="s2">&quot;\n#{ block.compile o }&quot;</span>
-      <span class="nx">code</span> <span class="o">+=</span> <span class="s2">&quot;\n#{ idt }break;&quot;</span> <span class="nx">unless</span> <span class="nx">exprs</span><span class="p">[</span><span class="nx">exprs</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">ReturnNode</span>
-    <span class="k">if</span> <span class="nx">@otherwise</span>
-      <span class="nx">code</span> <span class="o">+=</span> <span class="s2">&quot;\n#{ @idt(1) }default:\n#{ @otherwise.compile o }&quot;</span>
-    <span class="nx">code</span> <span class="o">+=</span> <span class="s2">&quot;\n#{ @tab }}&quot;</span>
-    <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-126">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-126">#</a>               </div>               <p>A JavaScript <em>switch</em> statement. Converts into a returnable expression on-demand.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-127">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-127">#</a>               </div>               <h3>IfNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.IfNode = </span><span class="nx">class</span> <span class="nx">IfNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
-
-  <span class="nx">class</span><span class="o">:</span>     <span class="s1">&#39;IfNode&#39;</span>
-  <span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">&#39;condition&#39;</span><span class="p">,</span> <span class="s1">&#39;body&#39;</span><span class="p">,</span> <span class="s1">&#39;elseBody&#39;</span><span class="p">,</span> <span class="s1">&#39;assigner&#39;</span><span class="p">]</span>
-
-  <span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="kc">true</span>
-
-  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@condition</span><span class="p">,</span> <span class="nx">@body</span><span class="p">,</span> <span class="nx">@tags</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@tags</span> <span class="o">or=</span> <span class="p">{}</span>
-    <span class="k">if</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">invert</span>
-      <span class="k">if</span> <span class="nx">@condition</span> <span class="k">instanceof</span> <span class="nx">OpNode</span> <span class="o">and</span> <span class="nx">@condition</span><span class="p">.</span><span class="nx">isInvertible</span><span class="p">()</span>
-        <span class="nx">@condition</span><span class="p">.</span><span class="nx">invert</span><span class="p">()</span>
-      <span class="k">else</span>
-        <span class="vi">@condition = </span><span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">&#39;!&#39;</span><span class="p">,</span> <span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="nx">@condition</span>
-    <span class="vi">@elseBody = </span><span class="kc">null</span>
-    <span class="vi">@isChain  = </span><span class="kc">false</span>
-
-  <span class="nx">bodyNode</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="nx">@body</span><span class="o">?</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">()</span>
-  <span class="nx">elseBodyNode</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="nx">@elseBody</span><span class="o">?</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">()</span>
-
-  <span class="nx">forceStatement</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="vi">@tags.statement = </span><span class="kc">true</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-128">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-128">#</a>               </div>               <p><em>If/else</em> statements. Acts as an expression by pushing down requested returns
-to the last line of each clause.</p>
-
-<p>Single-expression <strong>IfNodes</strong> are compiled into ternary operators if possible,
-because ternaries are already proper expressions, and don't need conversion.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">addElse</span><span class="o">:</span> <span class="p">(</span><span class="nx">elseBody</span><span class="p">,</span> <span class="nx">statement</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@isChain</span>
-      <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">addElse</span> <span class="nx">elseBody</span><span class="p">,</span> <span class="nx">statement</span>
-    <span class="k">else</span>
-      <span class="vi">@isChain = </span><span class="nx">elseBody</span> <span class="k">instanceof</span> <span class="nx">IfNode</span>
-      <span class="vi">@elseBody = </span><span class="nx">@ensureExpressions</span> <span class="nx">elseBody</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-129">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-129">#</a>               </div>               <p>Rewrite a chain of <strong>IfNodes</strong> to add a default case as the final <em>else</em>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">isStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@statement</span> <span class="o">or=</span> <span class="o">!!</span><span class="p">((</span><span class="nx">o</span> <span class="o">and</span> <span class="nx">o</span><span class="p">.</span><span class="nx">top</span><span class="p">)</span> <span class="o">or</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">statement</span> <span class="o">or</span> <span class="nx">@bodyNode</span><span class="p">().</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">or</span> <span class="p">(</span><span class="nx">@elseBody</span> <span class="o">and</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)))</span>
-
-  <span class="nx">compileCondition</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">conditions = </span><span class="nx">flatten</span> <span class="p">[</span><span class="nx">@condition</span><span class="p">]</span>
-    <span class="nx">conditions</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nv">parenthetical = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">conditions</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">1</span>
-    <span class="p">(</span><span class="nx">cond</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">for</span> <span class="nx">cond</span> <span class="k">in</span> <span class="nx">conditions</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39; || &#39;</span><span class="p">)</span>
-
-  <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="nx">@compileStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@compileTernary</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-
-  <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">@isStatement</span><span class="p">()</span>
-      <span class="nx">@body</span>     <span class="o">and=</span> <span class="nx">@ensureExpressions</span><span class="p">(</span><span class="nx">@body</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">())</span>
-      <span class="nx">@elseBody</span> <span class="o">and=</span> <span class="nx">@ensureExpressions</span><span class="p">(</span><span class="nx">@elseBody</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">())</span>
-      <span class="k">this</span>
-    <span class="k">else</span>
-      <span class="k">new</span> <span class="nx">ReturnNode</span> <span class="k">this</span>
-
-  <span class="nx">ensureExpressions</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">node</span> <span class="k">instanceof</span> <span class="nx">Expressions</span> <span class="k">then</span> <span class="nx">node</span> <span class="k">else</span> <span class="k">new</span> <span class="nx">Expressions</span> <span class="p">[</span><span class="nx">node</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-130">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-130">#</a>               </div>               <p>The <strong>IfNode</strong> only compiles into a statement if either of its bodies needs
-to be a statement. Otherwise a ternary is safe.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">top      = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;top&#39;</span>
-    <span class="nv">child    = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">&#39;chainChild&#39;</span>
-    <span class="nv">condO    = </span><span class="nx">merge</span> <span class="nx">o</span>
-    <span class="nv">o.indent = </span><span class="nx">@idt</span> <span class="mi">1</span>
-    <span class="nv">o.top    = </span><span class="kc">true</span>
-    <span class="nv">ifDent   = </span><span class="k">if</span> <span class="nx">child</span> <span class="o">or</span> <span class="p">(</span><span class="nx">top</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="k">then</span> <span class="s1">&#39;&#39;</span> <span class="k">else</span> <span class="nx">@idt</span><span class="p">()</span>
-    <span class="nv">comDent  = </span><span class="k">if</span> <span class="nx">child</span> <span class="k">then</span> <span class="nx">@idt</span><span class="p">()</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="nv">body     = </span><span class="nx">@body</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nv">ifPart   = </span><span class="s2">&quot;#{ifDent}if (#{ @compileCondition(condO) }) {\n#{body}\n#{@tab}}&quot;</span>
-    <span class="k">return</span> <span class="nx">ifPart</span> <span class="nx">unless</span> <span class="nx">@elseBody</span>
-    <span class="nv">elsePart = </span><span class="k">if</span> <span class="nx">@isChain</span>
-      <span class="s1">&#39; else &#39;</span> <span class="o">+</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(),</span> <span class="nx">chainChild</span><span class="o">:</span> <span class="kc">true</span><span class="p">}))</span>
-    <span class="k">else</span>
-      <span class="s2">&quot; else {\n#{ @elseBody.compile(o) }\n#{@tab}}&quot;</span>
-    <span class="s2">&quot;#{ifPart}#{elsePart}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-131">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-131">#</a>               </div>               <p>Compile the <strong>IfNode</strong> as a regular <em>if-else</em> statement. Flattened chains
-force inner <em>else</em> bodies into statement form.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compileTernary</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@bodyNode</span><span class="p">().</span><span class="nv">tags.operation = </span><span class="vi">@condition.tags.operation = </span><span class="kc">yes</span>
-    <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nv">tags.operation = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">@elseBody</span>
-    <span class="nv">ifPart      = </span><span class="nx">@condition</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; ? &#39;</span> <span class="o">+</span> <span class="nx">@bodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
-    <span class="nv">elsePart    = </span><span class="k">if</span> <span class="nx">@elseBody</span> <span class="k">then</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;null&#39;</span>
-    <span class="nv">code        = </span><span class="s2">&quot;#{ifPart} : #{elsePart}&quot;</span>
-    <span class="k">if</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">operation</span> <span class="k">then</span> <span class="s2">&quot;(#{code})&quot;</span> <span class="k">else</span> <span class="nx">code</span></pre></div>             </td>           </tr>                               <tr id="section-132">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-132">#</a>               </div>               <p>Compile the IfNode as a ternary operator.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-133">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-133">#</a>               </div>               <h2>Faux-Nodes</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-134">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-134">#</a>               </div>               <h3>PushNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">PushNode = exports.PushNode =</span>
-  <span class="nx">wrap</span><span class="o">:</span> <span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">expressions</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">expr = </span><span class="nx">expressions</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">()</span>
-    <span class="k">return</span> <span class="nx">expressions</span> <span class="k">if</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">isPureStatement</span><span class="p">()</span> <span class="o">or</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">containsPureStatement</span><span class="p">()</span>
-    <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="k">new</span> <span class="nx">CallNode</span><span class="p">(</span>
-      <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">array</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="s1">&#39;push&#39;</span><span class="p">))]),</span> <span class="p">[</span><span class="nx">expr</span><span class="p">]</span>
-    <span class="p">)])</span></pre></div>             </td>           </tr>                               <tr id="section-135">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-135">#</a>               </div>               <p>Faux-nodes are never created by the grammar, but are used during code
-generation to generate other combinations of nodes. The <strong>PushNode</strong> creates
-the tree for <code>array.push(value)</code>, which is helpful for recording the result
-arrays from comprehensions.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-136">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-136">#</a>               </div>               <h3>ClosureNode</h3>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">ClosureNode = exports.ClosureNode =</span></pre></div>             </td>           </tr>                               <tr id="section-137">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-137">#</a>               </div>               <p>A faux-node used to wrap an expressions body in a closure.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">wrap</span><span class="o">:</span> <span class="p">(</span><span class="nx">expressions</span><span class="p">,</span> <span class="nx">statement</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">expressions</span> <span class="k">if</span> <span class="nx">expressions</span><span class="p">.</span><span class="nx">containsPureStatement</span><span class="p">()</span>
-    <span class="nv">func = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="k">new</span> <span class="nx">CodeNode</span><span class="p">([],</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">expressions</span><span class="p">])))</span>
-    <span class="nv">args = </span><span class="p">[]</span>
-    <span class="nv">mentionsArgs = </span><span class="nx">expressions</span><span class="p">.</span><span class="nx">contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span> <span class="o">and</span> <span class="p">(</span><span class="nx">n</span><span class="p">.</span><span class="nx">value</span> <span class="o">is</span> <span class="s1">&#39;arguments&#39;</span><span class="p">)</span>
-    <span class="nv">mentionsThis = </span><span class="nx">expressions</span><span class="p">.</span><span class="nx">contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="p">(</span><span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span> <span class="o">and</span> <span class="p">(</span><span class="nx">n</span><span class="p">.</span><span class="nx">value</span> <span class="o">is</span> <span class="s1">&#39;this&#39;</span><span class="p">))</span> <span class="o">or</span>
-      <span class="p">(</span><span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">CodeNode</span> <span class="o">and</span> <span class="nx">n</span><span class="p">.</span><span class="nx">bound</span><span class="p">)</span>
-    <span class="k">if</span> <span class="nx">mentionsArgs</span> <span class="o">or</span> <span class="nx">mentionsThis</span>
-      <span class="nv">meth = </span><span class="nx">literal</span><span class="p">(</span><span class="k">if</span> <span class="nx">mentionsArgs</span> <span class="k">then</span> <span class="s1">&#39;apply&#39;</span> <span class="k">else</span> <span class="s1">&#39;call&#39;</span><span class="p">)</span>
-      <span class="nv">args = </span><span class="p">[</span><span class="nx">literal</span><span class="p">(</span><span class="s1">&#39;this&#39;</span><span class="p">)]</span>
-      <span class="nx">args</span><span class="p">.</span><span class="nx">push</span> <span class="nx">literal</span> <span class="s1">&#39;arguments&#39;</span> <span class="k">if</span> <span class="nx">mentionsArgs</span>
-      <span class="nv">func = </span><span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">func</span><span class="p">,</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">meth</span><span class="p">)]</span>
-    <span class="nv">call = </span><span class="k">new</span> <span class="nx">CallNode</span><span class="p">(</span><span class="nx">func</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span>
-    <span class="k">if</span> <span class="nx">statement</span> <span class="k">then</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">call</span><span class="p">])</span> <span class="k">else</span> <span class="nx">call</span></pre></div>             </td>           </tr>                               <tr id="section-138">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-138">#</a>               </div>               <p>Wrap the expressions body, unless it contains a pure statement,
-in which case, no dice. If the body mentions <code>this</code> or <code>arguments</code>,
-then make sure that the closure wrapper preserves the original values.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">UTILITIES =</span></pre></div>             </td>           </tr>                               <tr id="section-139">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-139">#</a>               </div>               <h2>Utility Functions</h2>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="k">extends</span><span class="o">:</span>  <span class="s2">&quot;&quot;&quot;</span>
-<span class="s2">            function(child, parent) {</span>
-<span class="s2">                var ctor = function(){};</span>
-<span class="s2">                ctor.prototype = parent.prototype;</span>
-<span class="s2">                child.prototype = new ctor();</span>
-<span class="s2">                child.prototype.constructor = child;</span>
-<span class="s2">                if (typeof parent.extended === &quot;</span><span class="nx">function</span><span class="s2">&quot;) parent.extended(child);</span>
-<span class="s2">                child.__super__ = parent.prototype;</span>
-<span class="s2">              }</span>
-<span class="s2">            &quot;&quot;&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-140">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-140">#</a>               </div>               <p>Correctly set up a prototype chain for inheritance, including a reference
-to the superclass for <code>super()</code> calls. See:
-<a href="http://closure-library.googlecode.com/svn/docs/closureGoogBase.js.source.html#line1206">goog.inherits</a>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">bind</span><span class="o">:</span> <span class="s2">&quot;&quot;&quot;</span>
-<span class="s2">        function(func, context) {</span>
-<span class="s2">            return function(){ return func.apply(context, arguments); };</span>
-<span class="s2">          }</span>
-<span class="s2">        &quot;&quot;&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-141">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-141">#</a>               </div>               <p>Create a function bound to the current value of "this".</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">hasProp</span><span class="o">:</span> <span class="s1">&#39;Object.prototype.hasOwnProperty&#39;</span>
-  <span class="nx">slice</span><span class="o">:</span>   <span class="s1">&#39;Array.prototype.slice&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-142">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-142">#</a>               </div>               <p>Shortcuts to speed up the lookup time for native functions.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-143">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-143">#</a>               </div>               <h2>Constants</h2>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">TAB = </span><span class="s1">&#39;  &#39;</span></pre></div>             </td>           </tr>                               <tr id="section-144">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-144">#</a>               </div>               <p>Tabs are two spaces for pretty printing.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">TRAILING_WHITESPACE = </span><span class="sr">/[ \t]+$/gm</span></pre></div>             </td>           </tr>                               <tr id="section-145">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-145">#</a>               </div>               <p>Trim out all trailing whitespace, so that the generated code plays nice
-with Git.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">IDENTIFIER = </span><span class="sr">/^[a-zA-Z\$_](\w|\$)*$/</span>
-<span class="nv">NUMBER     = </span><span class="sr">/^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b$/i</span>
-<span class="nv">SIMPLENUM  = </span><span class="sr">/^-?\d+$/</span></pre></div>             </td>           </tr>                               <tr id="section-146">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-146">#</a>               </div>               <p>Keep these identifier regexes in sync with the Lexer.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">IS_STRING = </span><span class="sr">/^[&#39;&quot;]/</span></pre></div>             </td>           </tr>                               <tr id="section-147">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-147">#</a>               </div>               <p>Is a literal value a string?</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-148">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-148">#</a>               </div>               <h2>Utility Functions</h2>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">literal = </span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="k">new</span> <span class="nx">LiteralNode</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-149">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-149">#</a>               </div>               <p>Handy helper for a generating LiteralNode.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">utility = </span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">ref = </span><span class="s2">&quot;__#{name}&quot;</span>
-  <span class="nx">Scope</span><span class="p">.</span><span class="nx">root</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">ref</span><span class="p">,</span> <span class="nx">UTILITIES</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span>
-  <span class="nx">ref</span>
-
-</pre></div>             </td>           </tr>                               <tr id="section-150">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-150">#</a>               </div>               <p>Helper for ensuring that utility functions are assigned at the top level.</p>             </td>             <td class="code">               <div class="highlight"><pre>undefined</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/optparse.html b/node/node_modules/jade/support/coffee-script/documentation/docs/optparse.html
deleted file mode 100644 (file)
index 8b59e3c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>optparse.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               optparse.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>A simple <strong>OptionParser</strong> class to parse option flags from the command-line.
-Use it like so:</p>
-
-<pre><code>parser  = new OptionParser switches, helpBanner
-options = parser.parse process.argv
-</code></pre>
-
-<p>The first non-option is considered to be the start of the file (and file
-option) list, and all subsequent arguments are left unparsed.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.OptionParser = </span><span class="nx">class</span> <span class="nx">OptionParser</span></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>Initialize with a list of valid options, in the form:</p>
-
-<pre><code>[short-flag, long-flag, description]
-</code></pre>
-
-<p>Along with an an optional banner for the usage help.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">rules</span><span class="p">,</span> <span class="nx">banner</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="vi">@banner = </span><span class="nx">banner</span>
-    <span class="vi">@rules  = </span><span class="nx">buildRules</span> <span class="nx">rules</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>Parse the list of arguments, populating an <code>options</code> object with all of the
-specified options, and returning it. <code>options.arguments</code> will be an array
-containing the remaning non-option arguments. This is a simpler API than
-many option parsers that allow you to attach callback actions for every
-flag. Instead, you're responsible for interpreting the options object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">parse</span><span class="o">:</span> <span class="p">(</span><span class="nx">args</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">options = </span><span class="nx">arguments</span><span class="o">:</span> <span class="p">[]</span>
-    <span class="nv">args    = </span><span class="nx">normalizeArguments</span> <span class="nx">args</span>
-    <span class="k">for</span> <span class="nx">arg</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">args</span>
-      <span class="nv">isOption = </span><span class="o">!!</span><span class="p">(</span><span class="nx">arg</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">LONG_FLAG</span><span class="p">)</span> <span class="o">or</span> <span class="nx">arg</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">SHORT_FLAG</span><span class="p">))</span>
-      <span class="nv">matchedRule = </span><span class="kc">no</span>
-      <span class="k">for</span> <span class="nx">rule</span> <span class="k">in</span> <span class="nx">@rules</span>
-        <span class="k">if</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">shortFlag</span> <span class="o">is</span> <span class="nx">arg</span> <span class="o">or</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">longFlag</span> <span class="o">is</span> <span class="nx">arg</span>
-          <span class="nv">value = </span><span class="k">if</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">hasArgument</span> <span class="k">then</span> <span class="nx">args</span><span class="p">[</span><span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="kc">true</span>
-          <span class="nx">options</span><span class="p">[</span><span class="nx">rule</span><span class="p">.</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="k">if</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">isList</span> <span class="k">then</span> <span class="p">(</span><span class="nx">options</span><span class="p">[</span><span class="nx">rule</span><span class="p">.</span><span class="nx">name</span><span class="p">]</span> <span class="o">or</span> <span class="p">[]).</span><span class="nx">concat</span> <span class="nx">value</span> <span class="k">else</span> <span class="nx">value</span>
-          <span class="nv">matchedRule = </span><span class="kc">yes</span>
-          <span class="k">break</span>
-      <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;unrecognized option: #{arg}&quot;</span> <span class="k">if</span> <span class="nx">isOption</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">matchedRule</span>
-      <span class="k">if</span> <span class="o">not</span> <span class="nx">isOption</span>
-        <span class="nv">options.arguments = </span><span class="nx">args</span><span class="p">[</span><span class="nx">i</span><span class="p">...</span><span class="nx">args</span><span class="p">.</span><span class="nx">length</span><span class="p">]</span>
-        <span class="k">break</span>
-    <span class="nx">options</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Return the help text for this <strong>OptionParser</strong>, listing and describing all
-of the valid options, for <code>--help</code> and such.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">help</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">lines = </span><span class="p">[</span><span class="s1">&#39;Available options:&#39;</span><span class="p">]</span>
-    <span class="nx">lines</span><span class="p">.</span><span class="nx">unshift</span> <span class="s2">&quot;#{@banner}\n&quot;</span> <span class="k">if</span> <span class="nx">@banner</span>
-    <span class="k">for</span> <span class="nx">rule</span> <span class="k">in</span> <span class="nx">@rules</span>
-      <span class="nv">spaces  = </span><span class="mi">15</span> <span class="o">-</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">longFlag</span><span class="p">.</span><span class="nx">length</span>
-      <span class="nv">spaces  = </span><span class="k">if</span> <span class="nx">spaces</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">then</span> <span class="nb">Array</span><span class="p">(</span><span class="nx">spaces</span> <span class="o">+</span> <span class="mi">1</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-      <span class="nv">letPart = </span><span class="k">if</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">shortFlag</span> <span class="k">then</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">shortFlag</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span> <span class="k">else</span> <span class="s1">&#39;    &#39;</span>
-      <span class="nx">lines</span><span class="p">.</span><span class="nx">push</span> <span class="s1">&#39;  &#39;</span> <span class="o">+</span> <span class="nx">letPart</span> <span class="o">+</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">longFlag</span> <span class="o">+</span> <span class="nx">spaces</span> <span class="o">+</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">description</span>
-    <span class="s2">&quot;\n#{ lines.join(&#39;\n&#39;) }\n&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <h2>Helpers</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Regex matchers for option flags.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">LONG_FLAG  = </span><span class="sr">/^(--\w[\w\-]+)/</span>
-<span class="nv">SHORT_FLAG = </span><span class="sr">/^(-\w)/</span>
-<span class="nv">MULTI_FLAG = </span><span class="sr">/^-(\w{2,})/</span>
-<span class="nv">OPTIONAL   = </span><span class="sr">/\[(\w+(\*?))\]/</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>Build and return the list of option rules. If the optional <em>short-flag</em> is
-unspecified, leave it out by padding with <code>null</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">buildRules = </span><span class="p">(</span><span class="nx">rules</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="k">for</span> <span class="nx">tuple</span> <span class="k">in</span> <span class="nx">rules</span>
-    <span class="nx">tuple</span><span class="p">.</span><span class="nx">unshift</span> <span class="kc">null</span> <span class="k">if</span> <span class="nx">tuple</span><span class="p">.</span><span class="nx">length</span> <span class="o">&lt;</span> <span class="mi">3</span>
-    <span class="nx">buildRule</span> <span class="nx">tuple</span><span class="p">...</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Build a rule from a <code>-o</code> short flag, a <code>--output [DIR]</code> long flag, and the
-description of what the option does.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">buildRule = </span><span class="p">(</span><span class="nx">shortFlag</span><span class="p">,</span> <span class="nx">longFlag</span><span class="p">,</span> <span class="nx">description</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">match     = </span><span class="nx">longFlag</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">OPTIONAL</span><span class="p">)</span>
-  <span class="nv">longFlag  = </span><span class="nx">longFlag</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">LONG_FLAG</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
-  <span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
-  <span class="p">{</span>
-    <span class="nx">name</span><span class="o">:</span>         <span class="nx">longFlag</span><span class="p">.</span><span class="nx">substr</span> <span class="mi">2</span>
-    <span class="nx">shortFlag</span><span class="o">:</span>    <span class="nx">shortFlag</span>
-    <span class="nx">longFlag</span><span class="o">:</span>     <span class="nx">longFlag</span>
-    <span class="nx">description</span><span class="o">:</span>  <span class="nx">description</span>
-    <span class="nx">hasArgument</span><span class="o">:</span>  <span class="o">!!</span><span class="p">(</span><span class="nx">match</span> <span class="o">and</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
-    <span class="nx">isList</span><span class="o">:</span>       <span class="o">!!</span><span class="p">(</span><span class="nx">match</span> <span class="o">and</span> <span class="nx">match</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
-  <span class="p">}</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Normalize arguments by expanding merged flags into multiple flags. This allows
-you to have <code>-wl</code> be the same as <code>--watch --lint</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">normalizeArguments = </span><span class="p">(</span><span class="nx">args</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="nv">args = </span><span class="nx">args</span><span class="p">.</span><span class="nx">slice</span> <span class="mi">0</span>
-  <span class="nv">result = </span><span class="p">[]</span>
-  <span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">args</span>
-    <span class="k">if</span> <span class="nv">match = </span><span class="nx">arg</span><span class="p">.</span><span class="nx">match</span> <span class="nx">MULTI_FLAG</span>
-      <span class="nx">result</span><span class="p">.</span><span class="nx">push</span> <span class="s1">&#39;-&#39;</span> <span class="o">+</span> <span class="nx">l</span> <span class="k">for</span> <span class="nx">l</span> <span class="k">in</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">split</span> <span class="s1">&#39;&#39;</span>
-    <span class="k">else</span>
-      <span class="nx">result</span><span class="p">.</span><span class="nx">push</span> <span class="nx">arg</span>
-  <span class="nx">result</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/repl.html b/node/node_modules/jade/support/coffee-script/documentation/docs/repl.html
deleted file mode 100644 (file)
index 3b64130..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>repl.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               repl.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>A very simple Read-Eval-Print-Loop. Compiles one line at a time to JavaScript
-and evaluates it. Good for simple tests, or poking around the <strong>Node.js</strong> API.
-Using it looks like this:</p>
-
-<pre><code>coffee&gt; puts "#{num} bottles of beer" for num in [99..1]
-</code></pre>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>Require the <strong>coffee-script</strong> module to get access to the compiler.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">CoffeeScript = </span><span class="nx">require</span> <span class="s1">&#39;./coffee-script&#39;</span>
-<span class="nv">helpers      = </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./helpers&#39;</span><span class="p">).</span><span class="nx">helpers</span>
-<span class="nv">readline     = </span><span class="nx">require</span> <span class="s1">&#39;readline&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>Start by opening up <strong>stdio</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">stdio = </span><span class="nx">process</span><span class="p">.</span><span class="nx">openStdin</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Quick alias for quitting the REPL.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nx">helpers</span><span class="p">.</span><span class="nx">extend</span> <span class="nx">global</span><span class="p">,</span> <span class="nx">quit</span><span class="o">:</span> <span class="o">-&gt;</span> <span class="nx">process</span><span class="p">.</span><span class="nx">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>The main REPL function. <strong>run</strong> is called every time a line of code is entered.
-Attempt to evaluate the command. If there's an exception, print it out instead
-of exiting.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">run = </span><span class="p">(</span><span class="nx">buffer</span><span class="p">)</span> <span class="o">-&gt;</span>
-  <span class="k">try</span>
-    <span class="nv">val = </span><span class="nx">CoffeeScript</span><span class="p">.</span><span class="nb">eval</span> <span class="nx">buffer</span><span class="p">.</span><span class="nx">toString</span><span class="p">(),</span> <span class="nx">noWrap</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">globals</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">fileName</span><span class="o">:</span> <span class="s1">&#39;repl&#39;</span>
-    <span class="nx">puts</span> <span class="nx">inspect</span> <span class="nx">val</span> <span class="k">if</span> <span class="nx">val</span> <span class="o">isnt</span> <span class="kc">undefined</span>
-  <span class="k">catch</span> <span class="nx">err</span>
-    <span class="nx">puts</span> <span class="nx">err</span><span class="p">.</span><span class="nx">stack</span> <span class="o">or</span> <span class="nx">err</span><span class="p">.</span><span class="nx">toString</span><span class="p">()</span>
-  <span class="nx">repl</span><span class="p">.</span><span class="nx">prompt</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Create the REPL by listening to <strong>stdin</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">repl = </span><span class="nx">readline</span><span class="p">.</span><span class="nx">createInterface</span> <span class="nx">stdio</span>
-<span class="nx">repl</span><span class="p">.</span><span class="nx">setPrompt</span> <span class="s1">&#39;coffee&gt; &#39;</span>
-<span class="nx">stdio</span><span class="p">.</span><span class="kc">on</span> <span class="s1">&#39;data&#39;</span><span class="p">,</span>   <span class="p">(</span><span class="nx">buffer</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">repl</span><span class="p">.</span><span class="nx">write</span> <span class="nx">buffer</span>
-<span class="nx">repl</span><span class="p">.</span><span class="kc">on</span>  <span class="s1">&#39;close&#39;</span><span class="p">,</span>  <span class="o">-&gt;</span> <span class="nx">stdio</span><span class="p">.</span><span class="nx">destroy</span><span class="p">()</span>
-<span class="nx">repl</span><span class="p">.</span><span class="kc">on</span>  <span class="s1">&#39;line&#39;</span><span class="p">,</span>   <span class="nx">run</span>
-<span class="nx">repl</span><span class="p">.</span><span class="nx">prompt</span><span class="p">()</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/rewriter.html b/node/node_modules/jade/support/coffee-script/documentation/docs/rewriter.html
deleted file mode 100644 (file)
index 40a9394..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>rewriter.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               rewriter.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>The CoffeeScript language has a good deal of optional syntax, implicit syntax,
-and shorthand syntax. This can greatly complicate a grammar and bloat
-the resulting parse table. Instead of making the parser handle it all, we take
-a series of passes over the token stream, using this <strong>Rewriter</strong> to convert
-shorthand into the unambiguous long form, add implicit indentation and
-parentheses, balance incorrect nestings, and generally clean things up.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>Import the helpers we need.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="p">{</span><span class="nx">include</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./helpers&#39;</span><span class="p">).</span><span class="nx">helpers</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>The <strong>Rewriter</strong> class is used by the <a href="lexer.html">Lexer</a>, directly against
-its internal array of tokens.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">exports.Rewriter = </span><span class="nx">class</span> <span class="nx">Rewriter</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Helpful snippet for debugging:
-    puts (t[0] + '/' + t[1] for t in @tokens).join ' '</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Rewrite the token stream in multiple passes, one logical filter at
-a time. This could certainly be changed into a single pass through the
-stream, with a big ol' efficient switch, but it's much nicer to work with
-like this. The order of these passes matters -- indentation must be
-corrected before implicit parentheses can be wrapped around blocks of code.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">rewrite</span><span class="o">:</span> <span class="p">(</span><span class="nx">tokens</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="vi">@tokens = </span><span class="nx">tokens</span>
-    <span class="nx">@adjustComments</span><span class="p">()</span>
-    <span class="nx">@removeLeadingNewlines</span><span class="p">()</span>
-    <span class="nx">@removeMidExpressionNewlines</span><span class="p">()</span>
-    <span class="nx">@closeOpenCalls</span><span class="p">()</span>
-    <span class="nx">@closeOpenIndexes</span><span class="p">()</span>
-    <span class="nx">@addImplicitIndentation</span><span class="p">()</span>
-    <span class="nx">@tagPostfixConditionals</span><span class="p">()</span>
-    <span class="nx">@addImplicitBraces</span><span class="p">()</span>
-    <span class="nx">@addImplicitParentheses</span><span class="p">()</span>
-    <span class="nx">@ensureBalance</span> <span class="nx">BALANCED_PAIRS</span>
-    <span class="nx">@rewriteClosingParens</span><span class="p">()</span>
-    <span class="nx">@tokens</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Rewrite the token stream, looking one token ahead and behind.
-Allow the return value of the block to tell us how many tokens to move
-forwards (or backwards) in the stream, to make sure we don't miss anything
-as tokens are inserted and removed, and the stream changes length under
-our feet.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">scanTokens</span><span class="o">:</span> <span class="p">(</span><span class="nx">block</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">i = </span><span class="mi">0</span>
-    <span class="nx">loop</span>
-      <span class="k">break</span> <span class="nx">unless</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span>
-      <span class="nv">move = </span><span class="nx">block</span><span class="p">.</span><span class="nx">call</span> <span class="k">this</span><span class="p">,</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">],</span> <span class="nx">i</span>
-      <span class="nx">i</span> <span class="o">+=</span> <span class="nx">move</span>
-    <span class="kc">true</span>
-
-  <span class="nx">detectEnd</span><span class="o">:</span> <span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">levels = </span><span class="mi">0</span>
-    <span class="nx">loop</span>
-      <span class="nv">token = </span><span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span>
-      <span class="k">return</span> <span class="nx">action</span><span class="p">.</span><span class="nx">call</span> <span class="k">this</span><span class="p">,</span> <span class="nx">token</span><span class="p">,</span> <span class="nx">i</span>     <span class="k">if</span> <span class="nx">levels</span> <span class="o">is</span> <span class="mi">0</span> <span class="o">and</span> <span class="nx">condition</span><span class="p">.</span><span class="nx">call</span> <span class="k">this</span><span class="p">,</span> <span class="nx">token</span><span class="p">,</span> <span class="nx">i</span>
-      <span class="k">return</span> <span class="nx">action</span><span class="p">.</span><span class="nx">call</span> <span class="k">this</span><span class="p">,</span> <span class="nx">token</span><span class="p">,</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">token</span> <span class="o">or</span> <span class="nx">levels</span> <span class="o">&lt;</span> <span class="mi">0</span>
-      <span class="nx">levels</span> <span class="o">+=</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_START</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-      <span class="nx">levels</span> <span class="o">-=</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_END</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-      <span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span>
-    <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>Massage newlines and indentations so that comments don't have to be
-correctly indented, or appear on a line of their own.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">adjustComments</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">return</span> <span class="mi">1</span> <span class="nx">unless</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;HERECOMMENT&#39;</span>
-      <span class="p">[</span><span class="nx">before</span><span class="p">,</span> <span class="nx">prev</span><span class="p">,</span> <span class="nx">post</span><span class="p">,</span> <span class="nx">after</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">],</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">],</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">]]</span>
-      <span class="k">if</span> <span class="nx">after</span> <span class="o">and</span> <span class="nx">after</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;INDENT&#39;</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span>
-        <span class="k">if</span> <span class="nx">before</span> <span class="o">and</span> <span class="nx">before</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;OUTDENT&#39;</span> <span class="o">and</span> <span class="nx">post</span> <span class="o">and</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="nx">post</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;TERMINATOR&#39;</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span>
-        <span class="k">else</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">after</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">prev</span> <span class="o">and</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">not</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s1">&#39;INDENT&#39;</span><span class="p">,</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">]</span>
-        <span class="k">if</span> <span class="nx">post</span> <span class="o">and</span> <span class="nx">post</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;TERMINATOR&#39;</span> <span class="o">and</span> <span class="nx">after</span> <span class="o">and</span> <span class="nx">after</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;OUTDENT&#39;</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="mi">2</span><span class="p">)...)</span>
-          <span class="k">if</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">&#39;TERMINATOR&#39;</span>
-            <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s2">&quot;\n&quot;</span><span class="p">,</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
-        <span class="k">else</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s2">&quot;\n&quot;</span><span class="p">,</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
-        <span class="k">return</span> <span class="mi">2</span>
-      <span class="k">return</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Leading newlines would introduce an ambiguity in the grammar, so we
-dispatch them here.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">removeLeadingNewlines</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@tokens</span><span class="p">.</span><span class="nx">shift</span><span class="p">()</span> <span class="k">while</span> <span class="nx">@tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;TERMINATOR&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Some blocks occur in the middle of expressions -- when we're expecting
-this, remove their trailing newlines.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">removeMidExpressionNewlines</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">return</span> <span class="mi">1</span> <span class="nx">unless</span> <span class="nx">include</span><span class="p">(</span><span class="nx">EXPRESSION_CLOSE</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span> <span class="o">and</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;TERMINATOR&#39;</span>
-      <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">1</span>
-      <span class="k">return</span> <span class="mi">0</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>The lexer has tagged the opening parenthesis of a method call. Match it with
-its paired close. We have the mis-nested outdent case included here for
-calls that close on the same line, just before their outdent.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">closeOpenCalls</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;CALL_START&#39;</span>
-        <span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="s1">&#39;CALL_END&#39;</span><span class="p">])</span> <span class="o">or</span> <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;OUTDENT&#39;</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;)&#39;</span><span class="p">)</span>
-        <span class="nv">action = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="nv">idx = </span><span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;OUTDENT&#39;</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">else</span> <span class="nx">i</span>
-          <span class="nx">@tokens</span><span class="p">[</span><span class="nx">idx</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;CALL_END&#39;</span>
-        <span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
-      <span class="k">return</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>The lexer has tagged the opening parenthesis of an indexing operation call.
-Match it with its paired close.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">closeOpenIndexes</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;INDEX_START&#39;</span>
-        <span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;]&#39;</span><span class="p">,</span> <span class="s1">&#39;INDEX_END&#39;</span><span class="p">]</span>
-        <span class="nv">action    = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;INDEX_END&#39;</span>
-        <span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
-      <span class="k">return</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-12">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-12">#</a>               </div>               <p>Object literals may be written with implicit braces, for simple cases.
-Insert the missing braces here, so that the parser doesn't have to.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">addImplicitBraces</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">stack = </span><span class="p">[]</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_START</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-        <span class="nx">stack</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">if</span> <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;INDENT&#39;</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;{&#39;</span><span class="p">))</span> <span class="k">then</span> <span class="s1">&#39;{&#39;</span> <span class="k">else</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-      <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_END</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-        <span class="nx">stack</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span>
-      <span class="nv">last = </span><span class="nx">stack</span><span class="p">[</span><span class="nx">stack</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-      <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;:&#39;</span> <span class="o">and</span> <span class="p">(</span><span class="o">not</span> <span class="nx">last</span> <span class="o">or</span> <span class="nx">last</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">&#39;{&#39;</span><span class="p">)</span>
-        <span class="nx">stack</span><span class="p">.</span><span class="nx">push</span> <span class="s1">&#39;{&#39;</span>
-        <span class="nv">idx = </span><span class="k">if</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;@&#39;</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span> <span class="k">else</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span>
-        <span class="nx">idx</span> <span class="o">-=</span> <span class="mi">2</span> <span class="k">if</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">idx</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;HERECOMMENT&#39;</span>
-        <span class="nv">tok = </span><span class="p">[</span><span class="s1">&#39;{&#39;</span><span class="p">,</span> <span class="s1">&#39;{&#39;</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
-        <span class="nv">tok.generated = </span><span class="kc">yes</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">idx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">tok</span>
-        <span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="p">[</span><span class="nx">one</span><span class="p">,</span> <span class="nx">two</span><span class="p">,</span> <span class="nx">three</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@tokens</span><span class="p">.</span><span class="nx">slice</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">4</span><span class="p">)</span>
-          <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="s1">&#39;HERECOMMENT&#39;</span> <span class="k">in</span> <span class="p">[</span><span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)]</span>
-          <span class="p">((</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">])</span> <span class="o">and</span> <span class="o">not</span> <span class="p">((</span><span class="nx">two</span> <span class="o">and</span> <span class="nx">two</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;:&#39;</span><span class="p">)</span> <span class="o">or</span> <span class="p">(</span><span class="nx">one</span> <span class="o">and</span> <span class="nx">one</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;@&#39;</span> <span class="o">and</span> <span class="nx">three</span> <span class="o">and</span> <span class="nx">three</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;:&#39;</span><span class="p">)))</span> <span class="o">or</span>
-            <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;,&#39;</span> <span class="o">and</span> <span class="nx">one</span> <span class="o">and</span> <span class="p">(</span><span class="nx">one</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">not</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;IDENTIFIER&#39;</span><span class="p">,</span> <span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="s1">&#39;@&#39;</span><span class="p">,</span> <span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">]))</span>
-        <span class="nv">action = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;}&#39;</span><span class="p">,</span> <span class="s1">&#39;}&#39;</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
-        <span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
-        <span class="k">return</span> <span class="mi">2</span>
-      <span class="k">return</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-13">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-13">#</a>               </div>               <p>Methods may be optionally called without parentheses, for simple cases.
-Insert the implicit parentheses here, so that the parser doesn't have to
-deal with them.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">addImplicitParentheses</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">classLine    = </span><span class="kc">no</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nv">classLine  = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;CLASS&#39;</span>
-      <span class="nv">prev       = </span><span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
-      <span class="nv">next       = </span><span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
-      <span class="nv">idx        = </span><span class="mi">1</span>
-      <span class="nv">callObject = </span><span class="o">not</span> <span class="nx">classLine</span> <span class="o">and</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;INDENT&#39;</span> <span class="o">and</span> <span class="nx">next</span> <span class="o">and</span> <span class="nx">next</span><span class="p">.</span><span class="nx">generated</span> <span class="o">and</span> <span class="nx">next</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;{&#39;</span> <span class="o">and</span> <span class="nx">prev</span> <span class="o">and</span> <span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_FUNC</span><span class="p">,</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-      <span class="nv">idx        = </span><span class="mi">2</span> <span class="k">if</span> <span class="nx">callObject</span>
-      <span class="nv">seenSingle = </span><span class="kc">no</span>
-      <span class="nv">classLine  = </span><span class="kc">no</span>  <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">LINEBREAKS</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-      <span class="nv">token.call = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">prev</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">prev</span><span class="p">.</span><span class="nx">spaced</span> <span class="o">and</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;?&#39;</span>
-      <span class="k">if</span> <span class="nx">prev</span> <span class="o">and</span> <span class="p">(</span><span class="nx">prev</span><span class="p">.</span><span class="nx">spaced</span> <span class="o">and</span> <span class="p">(</span><span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_FUNC</span><span class="p">,</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">or</span> <span class="nx">prev</span><span class="p">.</span><span class="nx">call</span><span class="p">)</span> <span class="o">and</span> <span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_CALL</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">and</span>
-          <span class="o">not</span> <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;UNARY&#39;</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;IN&#39;</span><span class="p">,</span> <span class="s1">&#39;OF&#39;</span><span class="p">,</span> <span class="s1">&#39;INSTANCEOF&#39;</span><span class="p">])))</span> <span class="o">or</span> <span class="nx">callObject</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;CALL_START&#39;</span><span class="p">,</span> <span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
-        <span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="k">return</span> <span class="kc">yes</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">seenSingle</span> <span class="o">and</span> <span class="nx">token</span><span class="p">.</span><span class="nx">fromThen</span>
-          <span class="nv">seenSingle = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;IF&#39;</span><span class="p">,</span> <span class="s1">&#39;ELSE&#39;</span><span class="p">,</span> <span class="s1">&#39;UNLESS&#39;</span><span class="p">,</span> <span class="s1">&#39;-&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;=&gt;&#39;</span><span class="p">]</span>
-          <span class="nv">post = </span><span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
-          <span class="p">(</span><span class="o">not</span> <span class="nx">token</span><span class="p">.</span><span class="nx">generated</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">&#39;,&#39;</span> <span class="o">and</span> <span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_END</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">and</span>
-            <span class="o">not</span> <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;INDENT&#39;</span> <span class="o">and</span> <span class="p">(</span><span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_BLOCK</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span> <span class="o">or</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;CLASS&#39;</span> <span class="o">or</span> <span class="p">(</span><span class="nx">post</span> <span class="o">and</span> <span class="nx">post</span><span class="p">.</span><span class="nx">generated</span> <span class="o">and</span> <span class="nx">post</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;{&#39;</span><span class="p">))))</span> <span class="o">or</span>
-            <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;PROPERTY_ACCESS&#39;</span> <span class="o">and</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;OUTDENT&#39;</span>
-        <span class="nv">action = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="nv">idx = </span><span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;OUTDENT&#39;</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">else</span> <span class="nx">i</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">idx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;CALL_END&#39;</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
-        <span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="nx">idx</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
-        <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;FUNC_EXIST&#39;</span> <span class="k">if</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;?&#39;</span>
-        <span class="k">return</span> <span class="mi">2</span>
-      <span class="k">return</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-14">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-14">#</a>               </div>               <p>Because our grammar is LALR(1), it can't handle some single-line
-expressions that lack ending delimiters. The <strong>Rewriter</strong> adds the implicit
-blocks, so it doesn't need to. ')' can close a single-line block,
-but we need to make sure it's balanced.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">addImplicitIndentation</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;ELSE&#39;</span> <span class="o">and</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">isnt</span> <span class="s1">&#39;OUTDENT&#39;</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">@indentation</span><span class="p">(</span><span class="nx">token</span><span class="p">)...</span>
-        <span class="k">return</span> <span class="mi">2</span>
-      <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;CATCH&#39;</span> <span class="o">and</span>
-          <span class="p">(</span><span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;TERMINATOR&#39;</span> <span class="o">or</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;FINALLY&#39;</span><span class="p">)</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">@indentation</span><span class="p">(</span><span class="nx">token</span><span class="p">)...</span>
-        <span class="k">return</span> <span class="mi">4</span>
-      <span class="k">if</span> <span class="nx">include</span><span class="p">(</span><span class="nx">SINGLE_LINERS</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">and</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">isnt</span> <span class="s1">&#39;INDENT&#39;</span> <span class="o">and</span>
-          <span class="o">not</span> <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;ELSE&#39;</span> <span class="o">and</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;IF&#39;</span><span class="p">)</span>
-        <span class="nv">starter = </span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-        <span class="p">[</span><span class="nx">indent</span><span class="p">,</span> <span class="nx">outdent</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@indentation</span> <span class="nx">token</span>
-        <span class="nv">indent.fromThen   = </span><span class="kc">true</span> <span class="k">if</span> <span class="nx">starter</span> <span class="o">is</span> <span class="s1">&#39;THEN&#39;</span>
-        <span class="nv">indent.generated  = outdent.generated = </span><span class="kc">true</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">indent</span>
-        <span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="p">(</span><span class="nx">include</span><span class="p">(</span><span class="nx">SINGLE_CLOSERS</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">and</span> <span class="nx">token</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">&#39;;&#39;</span><span class="p">)</span> <span class="o">and</span>
-            <span class="o">not</span> <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;ELSE&#39;</span> <span class="o">and</span> <span class="nx">starter</span> <span class="o">not</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;IF&#39;</span><span class="p">,</span> <span class="s1">&#39;THEN&#39;</span><span class="p">])</span>
-        <span class="nv">action = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="nv">idx = </span><span class="k">if</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;,&#39;</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">else</span> <span class="nx">i</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">idx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">outdent</span>
-        <span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
-        <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;THEN&#39;</span>
-        <span class="k">return</span> <span class="mi">2</span>
-      <span class="k">return</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-15">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-15">#</a>               </div>               <p>Tag postfix conditionals as such, so that we can parse them with a
-different precedence.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">tagPostfixConditionals</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;IF&#39;</span><span class="p">,</span> <span class="s1">&#39;UNLESS&#39;</span><span class="p">]</span>
-        <span class="nv">original  = </span><span class="nx">token</span>
-        <span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s1">&#39;INDENT&#39;</span><span class="p">]</span>
-        <span class="nv">action    = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-          <span class="nx">original</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;POST_&#39;</span> <span class="o">+</span> <span class="nx">original</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">&#39;INDENT&#39;</span>
-        <span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
-        <span class="k">return</span> <span class="mi">1</span>
-      <span class="k">return</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-16">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-16">#</a>               </div>               <p>Ensure that all listed pairs of tokens are correctly balanced throughout
-the course of the token stream.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">ensureBalance</span><span class="o">:</span> <span class="p">(</span><span class="nx">pairs</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">levels   = </span><span class="p">{}</span>
-    <span class="nv">openLine = </span><span class="p">{}</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">pairs</span>
-        <span class="p">[</span><span class="nx">open</span><span class="p">,</span> <span class="nx">close</span><span class="p">]</span> <span class="o">=</span> <span class="nx">pair</span>
-        <span class="nx">levels</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">or=</span> <span class="mi">0</span>
-        <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="nx">open</span>
-          <span class="nx">openLine</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">=</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="nx">levels</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span>
-          <span class="nx">levels</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
-        <span class="nx">levels</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="nx">close</span>
-        <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s2">&quot;too many #{token[1]} on line #{token[2] + 1}&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="nx">levels</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">0</span>
-      <span class="k">return</span> <span class="mi">1</span>
-    <span class="nv">unclosed = </span><span class="nx">key</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">value</span> <span class="k">of</span> <span class="nx">levels</span> <span class="k">when</span> <span class="nx">value</span> <span class="o">&gt;</span> <span class="mi">0</span>
-    <span class="k">if</span> <span class="nx">unclosed</span><span class="p">.</span><span class="nx">length</span>
-      <span class="nv">open = </span><span class="nx">unclosed</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-      <span class="nv">line = </span><span class="nx">openLine</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span>
-      <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">&quot;unclosed #{open} on line #{line}&quot;</span></pre></div>             </td>           </tr>                               <tr id="section-17">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-17">#</a>               </div>               <p>We'd like to support syntax like this:</p>
-
-<pre><code>el.click((event) -&gt;
-  el.hide())
-</code></pre>
-
-<p>In order to accomplish this, move outdents that follow closing parens
-inwards, safely. The steps to accomplish this are:</p>
-
-<ol>
-<li>Check that all paired tokens are balanced and in order.</li>
-<li>Rewrite the stream with a stack: if you see an <code>EXPRESSION_START</code>, add it
-to the stack. If you see an <code>EXPRESSION_END</code>, pop the stack and replace
-it with the inverse of what we've just popped.</li>
-<li>Keep track of "debt" for tokens that we manufacture, to make sure we end
-up balanced in the end.</li>
-<li>Be careful not to alter array or parentheses delimiters with overzealous
-rewriting.</li>
-</ol>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">rewriteClosingParens</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nv">stack = </span><span class="p">[]</span>
-    <span class="nv">debt  = </span><span class="p">{}</span>
-    <span class="p">(</span><span class="nx">debt</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">INVERSES</span>
-    <span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nv">tag = </span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-      <span class="nv">inv = </span><span class="nx">INVERSES</span><span class="p">[</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
-      <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_START</span><span class="p">,</span> <span class="nx">tag</span>
-        <span class="nx">stack</span><span class="p">.</span><span class="nx">push</span> <span class="nx">token</span>
-        <span class="k">return</span> <span class="mi">1</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_END</span><span class="p">,</span> <span class="nx">tag</span>
-        <span class="k">if</span> <span class="nx">debt</span><span class="p">[</span><span class="nx">inv</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span>
-          <span class="nx">debt</span><span class="p">[</span><span class="nx">inv</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">1</span>
-          <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">1</span>
-          <span class="k">return</span> <span class="mi">0</span>
-        <span class="k">else</span>
-          <span class="nv">match = </span><span class="nx">stack</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span>
-          <span class="nv">mtag  = </span><span class="nx">match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-          <span class="nv">oppos = </span><span class="nx">INVERSES</span><span class="p">[</span><span class="nx">mtag</span><span class="p">]</span>
-          <span class="k">return</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">tag</span> <span class="o">is</span> <span class="nx">oppos</span>
-          <span class="nx">debt</span><span class="p">[</span><span class="nx">mtag</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
-          <span class="nv">val = </span><span class="p">[</span><span class="nx">oppos</span><span class="p">,</span> <span class="k">if</span> <span class="nx">mtag</span> <span class="o">is</span> <span class="s1">&#39;INDENT&#39;</span> <span class="k">then</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="nx">oppos</span><span class="p">]</span>
-          <span class="k">if</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">]</span><span class="o">?</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="nx">mtag</span>
-            <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">val</span>
-            <span class="nx">stack</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">match</span><span class="p">)</span>
-          <span class="k">else</span>
-            <span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">val</span>
-          <span class="k">return</span> <span class="mi">1</span>
-      <span class="k">else</span>
-        <span class="k">return</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-18">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-18">#</a>               </div>               <p>Generate the indentation tokens, based on another token on the same line.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">indentation</span><span class="o">:</span> <span class="p">(</span><span class="nx">token</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[[</span><span class="s1">&#39;INDENT&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span> <span class="p">[</span><span class="s1">&#39;OUTDENT&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]]</span></pre></div>             </td>           </tr>                               <tr id="section-19">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-19">#</a>               </div>               <p>Look up a tag by token index.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">tag</span><span class="o">:</span> <span class="p">(</span><span class="nx">i</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-20">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-20">#</a>               </div>               <h2>Constants</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-21">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-21">#</a>               </div>               <p>List of the token pairs that must be balanced.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">BALANCED_PAIRS = </span><span class="p">[[</span><span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;[&#39;</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;{&#39;</span><span class="p">,</span> <span class="s1">&#39;}&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;INDENT&#39;</span><span class="p">,</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">],</span>
-  <span class="p">[</span><span class="s1">&#39;PARAM_START&#39;</span><span class="p">,</span> <span class="s1">&#39;PARAM_END&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;CALL_START&#39;</span><span class="p">,</span> <span class="s1">&#39;CALL_END&#39;</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;INDEX_START&#39;</span><span class="p">,</span> <span class="s1">&#39;INDEX_END&#39;</span><span class="p">]]</span></pre></div>             </td>           </tr>                               <tr id="section-22">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-22">#</a>               </div>               <p>The inverse mappings of <code>BALANCED_PAIRS</code> we're trying to fix up, so we can
-look things up from either end.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">INVERSES = </span><span class="p">{}</span>
-<span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span>
-  <span class="nx">INVERSES</span><span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-  <span class="nx">INVERSES</span><span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-23">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-23">#</a>               </div>               <p>The tokens that signal the start of a balanced pair.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">EXPRESSION_START = </span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span></pre></div>             </td>           </tr>                               <tr id="section-24">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-24">#</a>               </div>               <p>The tokens that signal the end of a balanced pair.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">EXPRESSION_END   = </span><span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span></pre></div>             </td>           </tr>                               <tr id="section-25">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-25">#</a>               </div>               <p>Tokens that indicate the close of a clause of an expression.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">EXPRESSION_CLOSE = </span><span class="p">[</span><span class="s1">&#39;CATCH&#39;</span><span class="p">,</span> <span class="s1">&#39;WHEN&#39;</span><span class="p">,</span> <span class="s1">&#39;ELSE&#39;</span><span class="p">,</span> <span class="s1">&#39;FINALLY&#39;</span><span class="p">].</span><span class="nx">concat</span> <span class="nx">EXPRESSION_END</span></pre></div>             </td>           </tr>                               <tr id="section-26">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-26">#</a>               </div>               <p>Tokens that, if followed by an <code>IMPLICIT_CALL</code>, indicate a function invocation.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">IMPLICIT_FUNC    = </span><span class="p">[</span><span class="s1">&#39;IDENTIFIER&#39;</span><span class="p">,</span> <span class="s1">&#39;SUPER&#39;</span><span class="p">,</span> <span class="s1">&#39;)&#39;</span><span class="p">,</span> <span class="s1">&#39;CALL_END&#39;</span><span class="p">,</span> <span class="s1">&#39;]&#39;</span><span class="p">,</span> <span class="s1">&#39;INDEX_END&#39;</span><span class="p">,</span> <span class="s1">&#39;@&#39;</span><span class="p">,</span> <span class="s1">&#39;THIS&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-27">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-27">#</a>               </div>               <p>If preceded by an <code>IMPLICIT_FUNC</code>, indicates a function invocation.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">IMPLICIT_CALL    = </span><span class="p">[</span>
-  <span class="s1">&#39;IDENTIFIER&#39;</span><span class="p">,</span> <span class="s1">&#39;NUMBER&#39;</span><span class="p">,</span> <span class="s1">&#39;STRING&#39;</span><span class="p">,</span> <span class="s1">&#39;JS&#39;</span><span class="p">,</span> <span class="s1">&#39;REGEX&#39;</span><span class="p">,</span> <span class="s1">&#39;NEW&#39;</span><span class="p">,</span> <span class="s1">&#39;PARAM_START&#39;</span><span class="p">,</span> <span class="s1">&#39;CLASS&#39;</span><span class="p">,</span>
-  <span class="s1">&#39;IF&#39;</span><span class="p">,</span> <span class="s1">&#39;UNLESS&#39;</span><span class="p">,</span> <span class="s1">&#39;TRY&#39;</span><span class="p">,</span> <span class="s1">&#39;SWITCH&#39;</span><span class="p">,</span> <span class="s1">&#39;THIS&#39;</span><span class="p">,</span> <span class="s1">&#39;NULL&#39;</span><span class="p">,</span> <span class="s1">&#39;UNARY&#39;</span>
-  <span class="s1">&#39;TRUE&#39;</span><span class="p">,</span> <span class="s1">&#39;FALSE&#39;</span><span class="p">,</span> <span class="s1">&#39;YES&#39;</span><span class="p">,</span> <span class="s1">&#39;NO&#39;</span><span class="p">,</span> <span class="s1">&#39;ON&#39;</span><span class="p">,</span> <span class="s1">&#39;OFF&#39;</span><span class="p">,</span>
-  <span class="s1">&#39;@&#39;</span><span class="p">,</span> <span class="s1">&#39;-&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;=&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;[&#39;</span><span class="p">,</span> <span class="s1">&#39;(&#39;</span><span class="p">,</span> <span class="s1">&#39;{&#39;</span>
-<span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-28">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-28">#</a>               </div>               <p>Tokens indicating that the implicit call must enclose a block of expressions.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">IMPLICIT_BLOCK   = </span><span class="p">[</span><span class="s1">&#39;-&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;=&gt;&#39;</span><span class="p">,</span> <span class="s1">&#39;{&#39;</span><span class="p">,</span> <span class="s1">&#39;[&#39;</span><span class="p">,</span> <span class="s1">&#39;,&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-29">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-29">#</a>               </div>               <p>Tokens that always mark the end of an implicit call for single-liners.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">IMPLICIT_END     = </span><span class="p">[</span><span class="s1">&#39;POST_IF&#39;</span><span class="p">,</span> <span class="s1">&#39;POST_UNLESS&#39;</span><span class="p">,</span> <span class="s1">&#39;FOR&#39;</span><span class="p">,</span> <span class="s1">&#39;WHILE&#39;</span><span class="p">,</span> <span class="s1">&#39;UNTIL&#39;</span><span class="p">,</span> <span class="s1">&#39;LOOP&#39;</span><span class="p">,</span> <span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s1">&#39;INDENT&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-30">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-30">#</a>               </div>               <p>Single-line flavors of block expressions that have unclosed endings.
-The grammar can't disambiguate them, so we insert the implicit indentation.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">SINGLE_LINERS    = </span><span class="p">[</span><span class="s1">&#39;ELSE&#39;</span><span class="p">,</span> <span class="s2">&quot;-&gt;&quot;</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">,</span> <span class="s1">&#39;TRY&#39;</span><span class="p">,</span> <span class="s1">&#39;FINALLY&#39;</span><span class="p">,</span> <span class="s1">&#39;THEN&#39;</span><span class="p">]</span>
-<span class="nv">SINGLE_CLOSERS   = </span><span class="p">[</span><span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s1">&#39;CATCH&#39;</span><span class="p">,</span> <span class="s1">&#39;FINALLY&#39;</span><span class="p">,</span> <span class="s1">&#39;ELSE&#39;</span><span class="p">,</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">,</span> <span class="s1">&#39;LEADING_WHEN&#39;</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-31">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-31">#</a>               </div>               <p>Tokens that end a line.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="nv">LINEBREAKS       = </span><span class="p">[</span><span class="s1">&#39;TERMINATOR&#39;</span><span class="p">,</span> <span class="s1">&#39;INDENT&#39;</span><span class="p">,</span> <span class="s1">&#39;OUTDENT&#39;</span><span class="p">]</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/scope.html b/node/node_modules/jade/support/coffee-script/documentation/docs/scope.html
deleted file mode 100644 (file)
index 661d5b3..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>scope.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>            <div id="jump_to">         Jump To &hellip;         <div id="jump_wrapper">           <div id="jump_page">                                           <a class="source" href="browser.html">                 browser.coffee               </a>                                           <a class="source" href="cake.html">                 cake.coffee               </a>                                           <a class="source" href="coffee-script.html">                 coffee-script.coffee               </a>                                           <a class="source" href="command.html">                 command.coffee               </a>                                           <a class="source" href="grammar.html">                 grammar.coffee               </a>                                           <a class="source" href="helpers.html">                 helpers.coffee               </a>                                           <a class="source" href="index.html">                 index.coffee               </a>                                           <a class="source" href="lexer.html">                 lexer.coffee               </a>                                           <a class="source" href="nodes.html">                 nodes.coffee               </a>                                           <a class="source" href="optparse.html">                 optparse.coffee               </a>                                           <a class="source" href="repl.html">                 repl.coffee               </a>                                           <a class="source" href="rewriter.html">                 rewriter.coffee               </a>                                           <a class="source" href="scope.html">                 scope.coffee               </a>                        </div>         </div>       </div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               scope.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>               <p>The <strong>Scope</strong> class regulates lexical scoping within CoffeeScript. As you
-generate code, you create a tree of scopes in the same shape as the nested
-function bodies. Each scope knows about the variables declared within it,
-and has a reference to its parent enclosing scope. In this way, we know which
-variables are new and need to be declared with <code>var</code>, and which are shared
-with the outside.</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p>Import the helpers we plan to use.</p>             </td>             <td class="code">               <div class="highlight"><pre><span class="p">{</span><span class="nx">extend</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./helpers&#39;</span><span class="p">).</span><span class="nx">helpers</span>
-
-<span class="nv">exports.Scope = </span><span class="nx">class</span> <span class="nx">Scope</span></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <p>The top-level <strong>Scope</strong> object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">@root</span><span class="o">:</span> <span class="kc">null</span></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Initialize a scope with its parent, for lookups up the chain,
-as well as a reference to the <strong>Expressions</strong> node is belongs to, which is
-where it should declare its variables, and a reference to the function that
-it wraps.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">parent</span><span class="p">,</span> <span class="nx">expressions</span><span class="p">,</span> <span class="nx">method</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">[</span><span class="nx">@parent</span><span class="p">,</span> <span class="nx">@expressions</span><span class="p">,</span> <span class="nx">@method</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">parent</span><span class="p">,</span> <span class="nx">expressions</span><span class="p">,</span> <span class="nx">method</span><span class="p">]</span>
-    <span class="vi">@variables = </span><span class="p">{}</span>
-    <span class="k">if</span> <span class="nx">@parent</span>
-      <span class="vi">@garbage = </span><span class="nx">@parent</span><span class="p">.</span><span class="nx">garbage</span>
-    <span class="k">else</span>
-      <span class="vi">@garbage   = </span><span class="p">[]</span>
-      <span class="nv">Scope.root = </span><span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Create a new garbage level</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">startLevel</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@garbage</span><span class="p">.</span><span class="nx">push</span> <span class="p">[]</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Return to the previous garbage level and erase referenced temporary
-variables in current level from scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">endLevel</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="p">(</span><span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;reuse&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="nx">name</span> <span class="k">in</span> <span class="nx">@garbage</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span> <span class="k">when</span> <span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">is</span> <span class="s1">&#39;var&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>Look up a variable name in lexical scope, and declare it if it does not
-already exist.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">find</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="kc">true</span> <span class="k">if</span> <span class="nx">@check</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">options</span>
-    <span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;var&#39;</span>
-    <span class="kc">false</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Test variables and return true the first time fn(v, k) returns true</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">any</span><span class="o">:</span> <span class="p">(</span><span class="nx">fn</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">for</span> <span class="nx">v</span><span class="p">,</span> <span class="nx">k</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">fn</span><span class="p">(</span><span class="nx">v</span><span class="p">,</span> <span class="nx">k</span><span class="p">)</span>
-      <span class="k">return</span> <span class="kc">true</span>
-    <span class="k">return</span> <span class="kc">false</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Reserve a variable name as originating from a function parameter for this
-scope. No <code>var</code> required for internal references.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">parameter</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;param&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>Just check to see if a variable has already been declared, without reserving,
-walks up to the root scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">check</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">immediate = </span><span class="nb">Object</span><span class="o">::</span><span class="nx">hasOwnProperty</span><span class="p">.</span><span class="nx">call</span> <span class="nx">@variables</span><span class="p">,</span> <span class="nx">name</span>
-    <span class="k">return</span> <span class="nx">immediate</span> <span class="k">if</span> <span class="nx">immediate</span> <span class="o">or</span> <span class="p">(</span><span class="nx">options</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">immediate</span><span class="p">)</span>
-    <span class="o">!!</span><span class="p">(</span><span class="nx">@parent</span> <span class="o">and</span> <span class="nx">@parent</span><span class="p">.</span><span class="nx">check</span><span class="p">(</span><span class="nx">name</span><span class="p">))</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>Generate a temporary variable name at the given index.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">temporary</span><span class="o">:</span> <span class="p">(</span><span class="nx">type</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">type</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">1</span>
-      <span class="s1">&#39;_&#39;</span> <span class="o">+</span> <span class="nx">type</span> <span class="o">+</span> <span class="k">if</span> <span class="nx">index</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">then</span> <span class="nx">index</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
-    <span class="k">else</span>
-      <span class="s1">&#39;_&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="nx">index</span> <span class="o">+</span> <span class="nb">parseInt</span> <span class="nx">type</span><span class="p">,</span> <span class="mi">36</span><span class="p">).</span><span class="nx">toString</span><span class="p">(</span><span class="mi">36</span><span class="p">).</span><span class="nx">replace</span> <span class="sr">/\d/g</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-12">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-12">#</a>               </div>               <p>If we need to store an intermediate result, find an available name for a
-compiler-generated variable. <code>_var</code>, <code>_var2</code>, and so on...</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">freeVariable</span><span class="o">:</span> <span class="p">(</span><span class="nx">type</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">index = </span><span class="mi">0</span>
-    <span class="nx">index</span><span class="o">++</span> <span class="k">while</span> <span class="nx">@check</span><span class="p">(</span><span class="nv">temp = </span><span class="nx">@temporary</span> <span class="nx">type</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="o">and</span> <span class="nx">@variables</span><span class="p">[</span><span class="nx">temp</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">&#39;reuse&#39;</span>
-    <span class="nx">@variables</span><span class="p">[</span><span class="nx">temp</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;var&#39;</span>
-    <span class="nx">@garbage</span><span class="p">[</span><span class="nx">@garbage</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">].</span><span class="nx">push</span> <span class="nx">temp</span> <span class="k">if</span> <span class="nx">@garbage</span><span class="p">.</span><span class="nx">length</span>
-    <span class="nx">temp</span></pre></div>             </td>           </tr>                               <tr id="section-13">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-13">#</a>               </div>               <p>Ensure that an assignment is made at the top of this scope
-(or at the top-level scope, if requested).</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">assign</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">assigned</span><span class="o">:</span> <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-14">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-14">#</a>               </div>               <p>Does this scope reference any variables that need to be declared in the
-given function body?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">hasDeclarations</span><span class="o">:</span> <span class="p">(</span><span class="nx">body</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">body</span> <span class="o">is</span> <span class="nx">@expressions</span> <span class="o">and</span> <span class="nx">@any</span> <span class="p">(</span><span class="nx">k</span><span class="p">,</span> <span class="nx">val</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">&#39;var&#39;</span> <span class="o">or</span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">&#39;reuse&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-15">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-15">#</a>               </div>               <p>Does this scope reference any assignments that need to be declared at the
-top of the given function body?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">hasAssignments</span><span class="o">:</span> <span class="p">(</span><span class="nx">body</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">body</span> <span class="o">is</span> <span class="nx">@expressions</span> <span class="o">and</span> <span class="nx">@any</span> <span class="p">(</span><span class="nx">k</span><span class="p">,</span> <span class="nx">val</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">val</span><span class="p">.</span><span class="nx">assigned</span></pre></div>             </td>           </tr>                               <tr id="section-16">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-16">#</a>               </div>               <p>Return the list of variables first declared in this scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">declaredVariables</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="p">(</span><span class="nx">key</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">&#39;var&#39;</span> <span class="o">or</span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">&#39;reuse&#39;</span><span class="p">).</span><span class="nx">sort</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-17">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-17">#</a>               </div>               <p>Return the list of assignments that are supposed to be made at the top
-of this scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">assignedVariables</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="s2">&quot;#{key} = #{val.value}&quot;</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">val</span><span class="p">.</span><span class="nx">assigned</span></pre></div>             </td>           </tr>                               <tr id="section-18">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-18">#</a>               </div>               <p>Compile the JavaScript for all of the variable declarations in this scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compiledDeclarations</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@declaredVariables</span><span class="p">().</span><span class="nx">join</span> <span class="s1">&#39;, &#39;</span></pre></div>             </td>           </tr>                               <tr id="section-19">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-19">#</a>               </div>               <p>Compile the JavaScript forall of the variable assignments in this scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">compiledAssignments</span><span class="o">:</span> <span class="o">-&gt;</span>
-    <span class="nx">@assignedVariables</span><span class="p">().</span><span class="nx">join</span> <span class="s1">&#39;, &#39;</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/docs/underscore.html b/node/node_modules/jade/support/coffee-script/documentation/docs/underscore.html
deleted file mode 100644 (file)
index d812711..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE html>  <html> <head>   <title>underscore.coffee</title>   <meta http-equiv="content-type" content="text/html; charset=UTF-8">   <link rel="stylesheet" media="all" href="docco.css" /> </head> <body>   <div id="container">     <div id="background"></div>          <table cellpadding="0" cellspacing="0">       <thead>         <tr>           <th class="docs">             <h1>               underscore.coffee             </h1>           </th>           <th class="code">           </th>         </tr>       </thead>       <tbody>                               <tr id="section-1">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-1">#</a>               </div>                            </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-2">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-2">#</a>               </div>               <p><strong>Underscore.coffee
-(c) 2010 Jeremy Ashkenas, DocumentCloud Inc.</strong>
-Underscore is freely distributable under the terms of the
-<a href="http://en.wikipedia.org/wiki/MIT_License">MIT license</a>.
-Portions of Underscore are inspired by or borrowed from
-<a href="http://prototypejs.org/api">Prototype.js</a>, Oliver Steele's
-<a href="http://osteele.com">Functional</a>, and John Resig's
-<a href="http://ejohn.com">Micro-Templating</a>.
-For all details and documentation:
-http://documentcloud.github.com/underscore/</p>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-3">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-3">#</a>               </div>               <h2>Baseline setup</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-4">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-4">#</a>               </div>               <p>Establish the root object, <code>window</code> in the browser, or <code>global</code> on the server.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">root = </span><span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-5">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-5">#</a>               </div>               <p>Save the previous value of the <code>_</code> variable.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">previousUnderscore = </span><span class="nx">root</span><span class="p">.</span><span class="nx">_</span></pre></div>             </td>           </tr>                               <tr id="section-6">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-6">#</a>               </div>               <p>Establish the object that gets thrown to break out of a loop iteration.
-<code>StopIteration</code> is SOP on Mozilla.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">breaker = </span><span class="k">if</span> <span class="k">typeof</span><span class="p">(</span><span class="nx">StopIteration</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;undefined&#39;</span> <span class="k">then</span> <span class="s1">&#39;__break__&#39;</span> <span class="k">else</span> <span class="nx">StopIteration</span></pre></div>             </td>           </tr>                               <tr id="section-7">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-7">#</a>               </div>               <p>Helper function to escape <strong>RegExp</strong> contents, because JS doesn't have one.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">escapeRegExp = </span><span class="p">(</span><span class="nx">string</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">string</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/([.*+?^${}()|[\]\/\\])/g</span><span class="p">,</span> <span class="s1">&#39;\\$1&#39;</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-8">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-8">#</a>               </div>               <p>Save bytes in the minified (but not gzipped) version:</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">ArrayProto           = </span><span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span>
-  <span class="nv">ObjProto             = </span><span class="nb">Object</span><span class="p">.</span><span class="nx">prototype</span></pre></div>             </td>           </tr>                               <tr id="section-9">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-9">#</a>               </div>               <p>Create quick reference variables for speed access to core prototypes.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">slice                = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">slice</span>
-  <span class="nv">unshift              = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">unshift</span>
-  <span class="nv">toString             = </span><span class="nx">ObjProto</span><span class="p">.</span><span class="nx">toString</span>
-  <span class="nv">hasOwnProperty       = </span><span class="nx">ObjProto</span><span class="p">.</span><span class="nx">hasOwnProperty</span>
-  <span class="nv">propertyIsEnumerable = </span><span class="nx">ObjProto</span><span class="p">.</span><span class="nx">propertyIsEnumerable</span></pre></div>             </td>           </tr>                               <tr id="section-10">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-10">#</a>               </div>               <p>All <strong>ECMA5</strong> native implementations we hope to use are declared here.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">nativeForEach        = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">forEach</span>
-  <span class="nv">nativeMap            = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">map</span>
-  <span class="nv">nativeReduce         = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">reduce</span>
-  <span class="nv">nativeReduceRight    = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">reduceRight</span>
-  <span class="nv">nativeFilter         = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">filter</span>
-  <span class="nv">nativeEvery          = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">every</span>
-  <span class="nv">nativeSome           = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">some</span>
-  <span class="nv">nativeIndexOf        = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">indexOf</span>
-  <span class="nv">nativeLastIndexOf    = </span><span class="nx">ArrayProto</span><span class="p">.</span><span class="nx">lastIndexOf</span>
-  <span class="nv">nativeIsArray        = </span><span class="nb">Array</span><span class="p">.</span><span class="nx">isArray</span>
-  <span class="nv">nativeKeys           = </span><span class="nb">Object</span><span class="p">.</span><span class="nx">keys</span></pre></div>             </td>           </tr>                               <tr id="section-11">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-11">#</a>               </div>               <p>Create a safe reference to the Underscore object for use below.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_ = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="k">new</span> <span class="nx">wrapper</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-12">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-12">#</a>               </div>               <p>Export the Underscore object for <strong>CommonJS</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="k">if</span> <span class="k">typeof</span><span class="p">(</span><span class="nx">exports</span><span class="p">)</span> <span class="o">!=</span> <span class="s1">&#39;undefined&#39;</span> <span class="k">then</span> <span class="nv">exports._ = </span><span class="nx">_</span></pre></div>             </td>           </tr>                               <tr id="section-13">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-13">#</a>               </div>               <p>Export Underscore to global scope.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">root._ = </span><span class="nx">_</span></pre></div>             </td>           </tr>                               <tr id="section-14">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-14">#</a>               </div>               <p>Current version.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.VERSION = </span><span class="s1">&#39;1.1.0&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-15">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-15">#</a>               </div>               <h2>Collection Functions</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-16">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-16">#</a>               </div>               <p>The cornerstone, an <strong>each</strong> implementation.
-Handles objects implementing <strong>forEach</strong>, arrays, and raw objects.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.each = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">try</span>
-      <span class="k">if</span> <span class="nx">nativeForEach</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">forEach</span> <span class="o">is</span> <span class="nx">nativeForEach</span>
-        <span class="nx">obj</span><span class="p">.</span><span class="nx">forEach</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span>
-      <span class="k">else</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isNumber</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">length</span>
-        <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span> <span class="nx">obj</span><span class="p">[</span><span class="nx">i</span><span class="p">],</span> <span class="nx">i</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">...</span><span class="nx">obj</span><span class="p">.</span><span class="nx">length</span><span class="p">]</span>
-      <span class="k">else</span>
-        <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span> <span class="nx">val</span><span class="p">,</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">obj</span>
-    <span class="k">catch</span> <span class="nx">e</span>
-      <span class="k">throw</span> <span class="nx">e</span> <span class="k">if</span> <span class="nx">e</span> <span class="o">isnt</span> <span class="nx">breaker</span>
-    <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-17">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-17">#</a>               </div>               <p>Return the results of applying the iterator to each element. Use JavaScript
-1.6's version of <strong>map</strong>, if possible.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.map = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="k">if</span> <span class="nx">nativeMap</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">map</span> <span class="o">is</span> <span class="nx">nativeMap</span>
-    <span class="nv">results = </span><span class="p">[]</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">results</span><span class="p">.</span><span class="nx">push</span> <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span> <span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span>
-    <span class="nx">results</span></pre></div>             </td>           </tr>                               <tr id="section-18">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-18">#</a>               </div>               <p><strong>Reduce</strong> builds up a single result from a list of values. Also known as
-<strong>inject</strong>, or <strong>foldl</strong>. Uses JavaScript 1.8's version of <strong>reduce</strong>, if possible.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.reduce = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">memo</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">nativeReduce</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">reduce</span> <span class="o">is</span> <span class="nx">nativeReduce</span>
-      <span class="nv">iterator = </span><span class="nx">_</span><span class="p">.</span><span class="nx">bind</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span> <span class="k">if</span> <span class="nx">context</span>
-      <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">reduce</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">memo</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nv">memo = </span><span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span> <span class="nx">context</span><span class="p">,</span> <span class="nx">memo</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span>
-    <span class="nx">memo</span></pre></div>             </td>           </tr>                               <tr id="section-19">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-19">#</a>               </div>               <p>The right-associative version of <strong>reduce</strong>, also known as <strong>foldr</strong>. Uses
-JavaScript 1.8's version of <strong>reduceRight</strong>, if available.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.reduceRight = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">memo</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">nativeReduceRight</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">reduceRight</span> <span class="o">is</span> <span class="nx">nativeReduceRight</span>
-      <span class="nv">iterator = </span><span class="nx">_</span><span class="p">.</span><span class="nx">bind</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span> <span class="k">if</span> <span class="nx">context</span>
-      <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">reduceRight</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">memo</span>
-    <span class="nv">reversed = </span><span class="nx">_</span><span class="p">.</span><span class="nx">clone</span><span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">toArray</span><span class="p">(</span><span class="nx">obj</span><span class="p">)).</span><span class="nx">reverse</span><span class="p">()</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">reduce</span> <span class="nx">reversed</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">memo</span><span class="p">,</span> <span class="nx">context</span></pre></div>             </td>           </tr>                               <tr id="section-20">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-20">#</a>               </div>               <p>Return the first value which passes a truth test.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.detect = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">result = </span><span class="kc">null</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">if</span> <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span> <span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span>
-        <span class="nv">result = </span><span class="nx">value</span>
-        <span class="nx">_</span><span class="p">.</span><span class="nx">breakLoop</span><span class="p">()</span>
-    <span class="nx">result</span></pre></div>             </td>           </tr>                               <tr id="section-21">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-21">#</a>               </div>               <p>Return all the elements that pass a truth test. Use JavaScript 1.6's
-<strong>filter</strong>, if it exists.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.filter = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">filter</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span> <span class="k">if</span> <span class="nx">nativeFilter</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">filter</span> <span class="o">is</span> <span class="nx">nativeFilter</span>
-    <span class="nv">results = </span><span class="p">[]</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">results</span><span class="p">.</span><span class="nx">push</span> <span class="nx">value</span> <span class="k">if</span> <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span> <span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span>
-    <span class="nx">results</span></pre></div>             </td>           </tr>                               <tr id="section-22">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-22">#</a>               </div>               <p>Return all the elements for which a truth test fails.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.reject = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">results = </span><span class="p">[]</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">results</span><span class="p">.</span><span class="nx">push</span> <span class="nx">value</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span> <span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span>
-    <span class="nx">results</span></pre></div>             </td>           </tr>                               <tr id="section-23">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-23">#</a>               </div>               <p>Determine whether all of the elements match a truth test. Delegate to
-JavaScript 1.6's <strong>every</strong>, if it is present.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.every = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">iterator</span> <span class="o">||=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">identity</span>
-    <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">every</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span> <span class="k">if</span> <span class="nx">nativeEvery</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">every</span> <span class="o">is</span> <span class="nx">nativeEvery</span>
-    <span class="nv">result = </span><span class="kc">true</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">_</span><span class="p">.</span><span class="nx">breakLoop</span><span class="p">()</span> <span class="nx">unless</span> <span class="p">(</span><span class="nv">result = </span><span class="nx">result</span> <span class="o">and</span> <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">))</span>
-    <span class="nx">result</span></pre></div>             </td>           </tr>                               <tr id="section-24">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-24">#</a>               </div>               <p>Determine if at least one element in the object matches a truth test. Use
-JavaScript 1.6's <strong>some</strong>, if it exists.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.some = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">iterator</span> <span class="o">||=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">identity</span>
-    <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">some</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span> <span class="k">if</span> <span class="nx">nativeSome</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">some</span> <span class="o">is</span> <span class="nx">nativeSome</span>
-    <span class="nv">result = </span><span class="kc">false</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">_</span><span class="p">.</span><span class="nx">breakLoop</span><span class="p">()</span> <span class="k">if</span> <span class="p">(</span><span class="nv">result = </span><span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">))</span>
-    <span class="nx">result</span></pre></div>             </td>           </tr>                               <tr id="section-25">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-25">#</a>               </div>               <p>Determine if a given value is included in the array or object,
-based on <code>===</code>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.include = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">target</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">_</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">target</span><span class="p">)</span> <span class="o">isnt</span> <span class="o">-</span><span class="mi">1</span> <span class="k">if</span> <span class="nx">nativeIndexOf</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">indexOf</span> <span class="o">is</span> <span class="nx">nativeIndexOf</span>
-    <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">obj</span>
-      <span class="k">return</span> <span class="kc">true</span> <span class="k">if</span> <span class="nx">val</span> <span class="o">is</span> <span class="nx">target</span>
-    <span class="kc">false</span></pre></div>             </td>           </tr>                               <tr id="section-26">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-26">#</a>               </div>               <p>Invoke a method with arguments on every item in a collection.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.invoke = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">method</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">args = </span><span class="nx">_</span><span class="p">.</span><span class="nx">rest</span> <span class="nx">arguments</span><span class="p">,</span> <span class="mi">2</span>
-    <span class="p">(</span><span class="k">if</span> <span class="nx">method</span> <span class="k">then</span> <span class="nx">val</span><span class="p">[</span><span class="nx">method</span><span class="p">]</span> <span class="k">else</span> <span class="nx">val</span><span class="p">).</span><span class="nx">apply</span><span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span> <span class="k">for</span> <span class="nx">val</span> <span class="k">in</span> <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-27">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-27">#</a>               </div>               <p>Convenience version of a common use case of <strong>map</strong>: fetching a property.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.pluck = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">val</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">val</span><span class="p">[</span><span class="nx">key</span><span class="p">])</span></pre></div>             </td>           </tr>                               <tr id="section-28">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-28">#</a>               </div>               <p>Return the maximum item or (item-based computation).</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.max = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">max</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="nb">Math</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">iterator</span> <span class="o">and</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span>
-    <span class="nv">result = </span><span class="nx">computed</span><span class="o">:</span> <span class="o">-</span><span class="kc">Infinity</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nv">computed = </span><span class="k">if</span> <span class="nx">iterator</span> <span class="k">then</span> <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="k">else</span> <span class="nx">value</span>
-      <span class="nx">computed</span> <span class="o">&gt;=</span> <span class="nx">result</span><span class="p">.</span><span class="nx">computed</span> <span class="o">and</span> <span class="p">(</span><span class="nv">result = </span><span class="p">{</span><span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">computed</span><span class="o">:</span> <span class="nx">computed</span><span class="p">})</span>
-    <span class="nx">result</span><span class="p">.</span><span class="nx">value</span></pre></div>             </td>           </tr>                               <tr id="section-29">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-29">#</a>               </div>               <p>Return the minimum element (or element-based computation).</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.min = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">min</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="nb">Math</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">iterator</span> <span class="o">and</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span>
-    <span class="nv">result = </span><span class="nx">computed</span><span class="o">:</span> <span class="kc">Infinity</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nv">computed = </span><span class="k">if</span> <span class="nx">iterator</span> <span class="k">then</span> <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="k">else</span> <span class="nx">value</span>
-      <span class="nx">computed</span> <span class="o">&lt;</span> <span class="nx">result</span><span class="p">.</span><span class="nx">computed</span> <span class="o">and</span> <span class="p">(</span><span class="nv">result = </span><span class="p">{</span><span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">computed</span><span class="o">:</span> <span class="nx">computed</span><span class="p">})</span>
-    <span class="nx">result</span><span class="p">.</span><span class="nx">value</span></pre></div>             </td>           </tr>                               <tr id="section-30">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-30">#</a>               </div>               <p>Sort the object's values by a criterion produced by an iterator.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.sortBy = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">pluck</span><span class="p">(((</span><span class="nx">_</span><span class="p">.</span><span class="nx">map</span> <span class="nx">obj</span><span class="p">,</span> <span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="p">{</span><span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">criteria</span><span class="o">:</span> <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">list</span><span class="p">)}</span>
-    <span class="p">).</span><span class="nx">sort</span><span class="p">((</span><span class="nx">left</span><span class="p">,</span> <span class="nx">right</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nv">a = </span><span class="nx">left</span><span class="p">.</span><span class="nx">criteria</span><span class="p">;</span> <span class="nv">b = </span><span class="nx">right</span><span class="p">.</span><span class="nx">criteria</span>
-      <span class="k">if</span> <span class="nx">a</span> <span class="o">&lt;</span> <span class="nx">b</span> <span class="k">then</span> <span class="o">-</span><span class="mi">1</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">a</span> <span class="o">&gt;</span> <span class="nx">b</span> <span class="k">then</span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">0</span>
-    <span class="p">)),</span> <span class="s1">&#39;value&#39;</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-31">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-31">#</a>               </div>               <p>Use a comparator function to figure out at what index an object should
-be inserted so as to maintain order. Uses binary search.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.sortedIndex = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">obj</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">iterator</span> <span class="o">||=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">identity</span>
-    <span class="nv">low = </span> <span class="mi">0</span>
-    <span class="nv">high = </span><span class="nx">array</span><span class="p">.</span><span class="nx">length</span>
-    <span class="k">while</span> <span class="nx">low</span> <span class="o">&lt;</span> <span class="nx">high</span>
-      <span class="nv">mid = </span><span class="p">(</span><span class="nx">low</span> <span class="o">+</span> <span class="nx">high</span><span class="p">)</span> <span class="o">&gt;&gt;</span> <span class="mi">1</span>
-      <span class="k">if</span> <span class="nx">iterator</span><span class="p">(</span><span class="nx">array</span><span class="p">[</span><span class="nx">mid</span><span class="p">])</span> <span class="o">&lt;</span> <span class="nx">iterator</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="k">then</span> <span class="nv">low = </span><span class="nx">mid</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">else</span> <span class="nv">high = </span><span class="nx">mid</span>
-    <span class="nx">low</span></pre></div>             </td>           </tr>                               <tr id="section-32">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-32">#</a>               </div>               <p>Convert anything iterable into a real, live array.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.toArray = </span><span class="p">(</span><span class="nx">iterable</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="p">[]</span>                   <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">iterable</span><span class="p">)</span>
-    <span class="k">return</span> <span class="nx">iterable</span><span class="p">.</span><span class="nx">toArray</span><span class="p">()</span>   <span class="k">if</span> <span class="p">(</span><span class="nx">iterable</span><span class="p">.</span><span class="nx">toArray</span><span class="p">)</span>
-    <span class="k">return</span> <span class="nx">iterable</span>             <span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span><span class="p">(</span><span class="nx">iterable</span><span class="p">))</span>
-    <span class="k">return</span> <span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">iterable</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">isArguments</span><span class="p">(</span><span class="nx">iterable</span><span class="p">))</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">values</span><span class="p">(</span><span class="nx">iterable</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-33">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-33">#</a>               </div>               <p>Return the number of elements in an object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.size = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">_</span><span class="p">.</span><span class="nx">toArray</span><span class="p">(</span><span class="nx">obj</span><span class="p">).</span><span class="nx">length</span></pre></div>             </td>           </tr>                               <tr id="section-34">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-34">#</a>               </div>               <h2>Array Functions</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-35">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-35">#</a>               </div>               <p>Get the first element of an array. Passing <code>n</code> will return the first N
-values in the array. Aliased as <strong>head</strong>. The <code>guard</code> check allows it to work
-with <strong>map</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.first = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">n</span><span class="p">,</span> <span class="nx">guard</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">n</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">guard</span> <span class="k">then</span> <span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">n</span><span class="p">)</span> <span class="k">else</span> <span class="nx">array</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-36">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-36">#</a>               </div>               <p>Returns everything but the first entry of the array. Aliased as <strong>tail</strong>.
-Especially useful on the arguments object. Passing an <code>index</code> will return
-the rest of the values in the array from that index onward. The <code>guard</code>
-check allows it to work with <strong>map</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.rest = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">guard</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">slice</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isUndefined</span><span class="p">(</span><span class="nx">index</span><span class="p">)</span> <span class="o">or</span> <span class="nx">guard</span> <span class="k">then</span> <span class="mi">1</span> <span class="k">else</span> <span class="nx">index</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-37">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-37">#</a>               </div>               <p>Get the last element of an array.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.last = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">array</span><span class="p">[</span><span class="nx">array</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-38">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-38">#</a>               </div>               <p>Trim out all falsy values from an array.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.compact = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">item</span> <span class="k">for</span> <span class="nx">item</span> <span class="k">in</span> <span class="nx">array</span> <span class="k">when</span> <span class="nx">item</span></pre></div>             </td>           </tr>                               <tr id="section-39">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-39">#</a>               </div>               <p>Return a completely flattened version of an array.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.flatten = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">reduce</span> <span class="nx">array</span><span class="p">,</span> <span class="p">(</span><span class="nx">memo</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="k">return</span> <span class="nx">memo</span><span class="p">.</span><span class="nx">concat</span><span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">flatten</span><span class="p">(</span><span class="nx">value</span><span class="p">))</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span> <span class="nx">value</span>
-      <span class="nx">memo</span><span class="p">.</span><span class="nx">push</span> <span class="nx">value</span>
-      <span class="nx">memo</span>
-    <span class="p">,</span> <span class="p">[]</span></pre></div>             </td>           </tr>                               <tr id="section-40">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-40">#</a>               </div>               <p>Return a version of the array that does not contain the specified value(s).</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.without = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">values = </span><span class="nx">_</span><span class="p">.</span><span class="nx">rest</span> <span class="nx">arguments</span>
-    <span class="nx">val</span> <span class="k">for</span> <span class="nx">val</span> <span class="k">in</span> <span class="nx">_</span><span class="p">.</span><span class="nx">toArray</span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="k">when</span> <span class="o">not</span> <span class="nx">_</span><span class="p">.</span><span class="nx">include</span> <span class="nx">values</span><span class="p">,</span> <span class="nx">val</span></pre></div>             </td>           </tr>                               <tr id="section-41">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-41">#</a>               </div>               <p>Produce a duplicate-free version of the array. If the array has already
-been sorted, you have the option of using a faster algorithm.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.uniq = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">isSorted</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">memo = </span><span class="p">[]</span>
-    <span class="k">for</span> <span class="nx">el</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">_</span><span class="p">.</span><span class="nx">toArray</span> <span class="nx">array</span>
-      <span class="nx">memo</span><span class="p">.</span><span class="nx">push</span> <span class="nx">el</span> <span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span> <span class="o">||</span> <span class="p">(</span><span class="k">if</span> <span class="nx">isSorted</span> <span class="o">is</span> <span class="kc">true</span> <span class="k">then</span> <span class="nx">_</span><span class="p">.</span><span class="nx">last</span><span class="p">(</span><span class="nx">memo</span><span class="p">)</span> <span class="o">isnt</span> <span class="nx">el</span> <span class="k">else</span> <span class="o">not</span> <span class="nx">_</span><span class="p">.</span><span class="nx">include</span><span class="p">(</span><span class="nx">memo</span><span class="p">,</span> <span class="nx">el</span><span class="p">))</span>
-    <span class="nx">memo</span></pre></div>             </td>           </tr>                               <tr id="section-42">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-42">#</a>               </div>               <p>Produce an array that contains every item shared between all the
-passed-in arrays.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.intersect = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">rest = </span><span class="nx">_</span><span class="p">.</span><span class="nx">rest</span> <span class="nx">arguments</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">select</span> <span class="nx">_</span><span class="p">.</span><span class="nx">uniq</span><span class="p">(</span><span class="nx">array</span><span class="p">),</span> <span class="p">(</span><span class="nx">item</span><span class="p">)</span> <span class="o">-&gt;</span>
-      <span class="nx">_</span><span class="p">.</span><span class="nx">all</span> <span class="nx">rest</span><span class="p">,</span> <span class="p">(</span><span class="nx">other</span><span class="p">)</span> <span class="o">-&gt;</span>
-        <span class="nx">_</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="nx">other</span><span class="p">,</span> <span class="nx">item</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span></pre></div>             </td>           </tr>                               <tr id="section-43">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-43">#</a>               </div>               <p>Zip together multiple lists into a single array -- elements that share
-an index go together.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.zip = </span><span class="o">-&gt;</span>
-    <span class="nv">length = </span> <span class="nx">_</span><span class="p">.</span><span class="nx">max</span> <span class="nx">_</span><span class="p">.</span><span class="nx">pluck</span> <span class="nx">arguments</span><span class="p">,</span> <span class="s1">&#39;length&#39;</span>
-    <span class="nv">results = </span><span class="k">new</span> <span class="nb">Array</span> <span class="nx">length</span>
-    <span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">...</span><span class="nx">length</span><span class="p">]</span>
-      <span class="nx">results</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">pluck</span> <span class="nx">arguments</span><span class="p">,</span> <span class="nb">String</span> <span class="nx">i</span>
-    <span class="nx">results</span></pre></div>             </td>           </tr>                               <tr id="section-44">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-44">#</a>               </div>               <p>If the browser doesn't supply us with <strong>indexOf</strong> (I'm looking at you, MSIE),
-we need this function. Return the position of the first occurence of an
-item in an array, or -1 if the item is not included in the array.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.indexOf = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">item</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">array</span><span class="p">.</span><span class="nx">indexOf</span> <span class="nx">item</span> <span class="k">if</span> <span class="nx">nativeIndexOf</span> <span class="o">and</span> <span class="nx">array</span><span class="p">.</span><span class="nx">indexOf</span> <span class="o">is</span> <span class="nx">nativeIndexOf</span>
-    <span class="nv">i = </span><span class="mi">0</span><span class="p">;</span> <span class="nv">l = </span><span class="nx">array</span><span class="p">.</span><span class="nx">length</span>
-    <span class="k">while</span> <span class="nx">l</span> <span class="o">-</span> <span class="nx">i</span>
-      <span class="k">if</span> <span class="nx">array</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">is</span> <span class="nx">item</span> <span class="k">then</span> <span class="k">return</span> <span class="nx">i</span> <span class="k">else</span> <span class="nx">i</span><span class="o">++</span>
-    <span class="o">-</span><span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-45">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-45">#</a>               </div>               <p>Provide JavaScript 1.6's <strong>lastIndexOf</strong>, delegating to the native function,
-if possible.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.lastIndexOf = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">item</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">array</span><span class="p">.</span><span class="nx">lastIndexOf</span><span class="p">(</span><span class="nx">item</span><span class="p">)</span> <span class="k">if</span> <span class="nx">nativeLastIndexOf</span> <span class="o">and</span> <span class="nx">array</span><span class="p">.</span><span class="nx">lastIndexOf</span> <span class="o">is</span> <span class="nx">nativeLastIndexOf</span>
-    <span class="nv">i = </span><span class="nx">array</span><span class="p">.</span><span class="nx">length</span>
-    <span class="k">while</span> <span class="nx">i</span>
-      <span class="k">if</span> <span class="nx">array</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">is</span> <span class="nx">item</span> <span class="k">then</span> <span class="k">return</span> <span class="nx">i</span> <span class="k">else</span> <span class="nx">i</span><span class="o">--</span>
-    <span class="o">-</span><span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-46">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-46">#</a>               </div>               <p>Generate an integer Array containing an arithmetic progression. A port of
-<a href="http://docs.python.org/library/functions.html#range">the native Python <strong>range</strong> function</a>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.range = </span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="nx">stop</span><span class="p">,</span> <span class="nx">step</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">a         = </span><span class="nx">arguments</span>
-    <span class="nv">solo      = </span><span class="nx">a</span><span class="p">.</span><span class="nx">length</span> <span class="o">&lt;=</span> <span class="mi">1</span>
-    <span class="nv">i = start = </span><span class="k">if</span> <span class="nx">solo</span> <span class="k">then</span> <span class="mi">0</span> <span class="k">else</span> <span class="nx">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-    <span class="nv">stop      = </span><span class="k">if</span> <span class="nx">solo</span> <span class="k">then</span> <span class="nx">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">else</span> <span class="nx">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
-    <span class="nv">step      = </span><span class="nx">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">or</span> <span class="mi">1</span>
-    <span class="nv">len       = </span><span class="nb">Math</span><span class="p">.</span><span class="nx">ceil</span><span class="p">((</span><span class="nx">stop</span> <span class="o">-</span> <span class="nx">start</span><span class="p">)</span> <span class="o">/</span> <span class="nx">step</span><span class="p">)</span>
-    <span class="k">return</span> <span class="p">[]</span>   <span class="k">if</span> <span class="nx">len</span> <span class="o">&lt;=</span> <span class="mi">0</span>
-    <span class="nv">range     = </span><span class="k">new</span> <span class="nb">Array</span> <span class="nx">len</span>
-    <span class="nv">idx       = </span><span class="mi">0</span>
-    <span class="nx">loop</span>
-      <span class="k">return</span> <span class="nx">range</span> <span class="k">if</span> <span class="p">(</span><span class="k">if</span> <span class="nx">step</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">-</span> <span class="nx">stop</span> <span class="k">else</span> <span class="nx">stop</span> <span class="o">-</span> <span class="nx">i</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span>
-      <span class="nx">range</span><span class="p">[</span><span class="nx">idx</span><span class="p">]</span> <span class="o">=</span> <span class="nx">i</span>
-      <span class="nx">idx</span><span class="o">++</span>
-      <span class="nx">i</span><span class="o">+=</span> <span class="nx">step</span></pre></div>             </td>           </tr>                               <tr id="section-47">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-47">#</a>               </div>               <h2>Function Functions</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-48">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-48">#</a>               </div>               <p>Create a function bound to a given object (assigning <code>this</code>, and arguments,
-optionally). Binding with arguments is also known as <strong>curry</strong>.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.bind = </span><span class="p">(</span><span class="nx">func</span><span class="p">,</span> <span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">args = </span><span class="nx">_</span><span class="p">.</span><span class="nx">rest</span> <span class="nx">arguments</span><span class="p">,</span> <span class="mi">2</span>
-    <span class="o">-&gt;</span> <span class="nx">func</span><span class="p">.</span><span class="nx">apply</span> <span class="nx">obj</span> <span class="o">or</span> <span class="nx">root</span><span class="p">,</span> <span class="nx">args</span><span class="p">.</span><span class="nx">concat</span> <span class="nx">arguments</span></pre></div>             </td>           </tr>                               <tr id="section-49">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-49">#</a>               </div>               <p>Bind all of an object's methods to that object. Useful for ensuring that
-all callbacks defined on an object belong to it.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.bindAll = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">funcs = </span><span class="k">if</span> <span class="nx">arguments</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">then</span> <span class="nx">_</span><span class="p">.</span><span class="nx">rest</span><span class="p">(</span><span class="nx">arguments</span><span class="p">)</span> <span class="k">else</span> <span class="nx">_</span><span class="p">.</span><span class="nx">functions</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="nx">funcs</span><span class="p">,</span> <span class="p">(</span><span class="nx">f</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">obj</span><span class="p">[</span><span class="nx">f</span><span class="p">]</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">bind</span> <span class="nx">obj</span><span class="p">[</span><span class="nx">f</span><span class="p">],</span> <span class="nx">obj</span>
-    <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-50">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-50">#</a>               </div>               <p>Delays a function for the given number of milliseconds, and then calls
-it with the arguments supplied.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.delay = </span><span class="p">(</span><span class="nx">func</span><span class="p">,</span> <span class="nx">wait</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">args = </span><span class="nx">_</span><span class="p">.</span><span class="nx">rest</span> <span class="nx">arguments</span><span class="p">,</span> <span class="mi">2</span>
-    <span class="nx">setTimeout</span><span class="p">((</span><span class="o">-&gt;</span> <span class="nx">func</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="nx">func</span><span class="p">,</span> <span class="nx">args</span><span class="p">)),</span> <span class="nx">wait</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-51">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-51">#</a>               </div>               <p>Memoize an expensive function by storing its results.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.memoize = </span><span class="p">(</span><span class="nx">func</span><span class="p">,</span> <span class="nx">hasher</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">memo = </span><span class="p">{}</span>
-    <span class="nx">hasher</span> <span class="o">or=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">identity</span>
-    <span class="o">-&gt;</span>
-      <span class="nv">key = </span><span class="nx">hasher</span><span class="p">.</span><span class="nx">apply</span> <span class="k">this</span><span class="p">,</span> <span class="nx">arguments</span>
-      <span class="k">return</span> <span class="nx">memo</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="k">if</span> <span class="nx">key</span> <span class="k">of</span> <span class="nx">memo</span>
-      <span class="nx">memo</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">func</span><span class="p">.</span><span class="nx">apply</span> <span class="k">this</span><span class="p">,</span> <span class="nx">arguments</span></pre></div>             </td>           </tr>                               <tr id="section-52">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-52">#</a>               </div>               <p>Defers a function, scheduling it to run after the current call stack has
-cleared.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.defer = </span><span class="p">(</span><span class="nx">func</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">delay</span><span class="p">.</span><span class="nx">apply</span> <span class="nx">_</span><span class="p">,</span> <span class="p">[</span><span class="nx">func</span><span class="p">,</span> <span class="mi">1</span><span class="p">].</span><span class="nx">concat</span> <span class="nx">_</span><span class="p">.</span><span class="nx">rest</span> <span class="nx">arguments</span></pre></div>             </td>           </tr>                               <tr id="section-53">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-53">#</a>               </div>               <p>Returns the first function passed as an argument to the second,
-allowing you to adjust arguments, run code before and after, and
-conditionally execute the original function.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.wrap = </span><span class="p">(</span><span class="nx">func</span><span class="p">,</span> <span class="nx">wrapper</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="o">-&gt;</span> <span class="nx">wrapper</span><span class="p">.</span><span class="nx">apply</span> <span class="nx">wrapper</span><span class="p">,</span> <span class="p">[</span><span class="nx">func</span><span class="p">].</span><span class="nx">concat</span> <span class="nx">arguments</span></pre></div>             </td>           </tr>                               <tr id="section-54">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-54">#</a>               </div>               <p>Returns a function that is the composition of a list of functions, each
-consuming the return value of the function that follows.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.compose = </span><span class="o">-&gt;</span>
-    <span class="nv">funcs = </span><span class="nx">arguments</span>
-    <span class="o">-&gt;</span>
-      <span class="nv">args = </span><span class="nx">arguments</span>
-      <span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[(</span><span class="nx">funcs</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)..</span><span class="mi">0</span><span class="p">]</span>
-        <span class="nv">args = </span><span class="p">[</span><span class="nx">funcs</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">apply</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">args</span><span class="p">)]</span>
-      <span class="nx">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-55">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-55">#</a>               </div>               <h2>Object Functions</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-56">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-56">#</a>               </div>               <p>Retrieve the names of an object's properties.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.keys = </span><span class="nx">nativeKeys</span> <span class="o">or</span> <span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">_</span><span class="p">.</span><span class="nx">range</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">length</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span>
-    <span class="nx">key</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-57">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-57">#</a>               </div>               <p>Retrieve the values of an object's properties.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.values = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">map</span> <span class="nx">obj</span><span class="p">,</span> <span class="nx">_</span><span class="p">.</span><span class="nx">identity</span></pre></div>             </td>           </tr>                               <tr id="section-58">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-58">#</a>               </div>               <p>Return a sorted list of the function names available in Underscore.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.functions = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">filter</span><span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">obj</span><span class="p">),</span> <span class="p">(</span><span class="nx">key</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isFunction</span><span class="p">(</span><span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">])).</span><span class="nx">sort</span><span class="p">()</span></pre></div>             </td>           </tr>                               <tr id="section-59">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-59">#</a>               </div>               <p>Extend a given object with all of the properties in a source object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.extend = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">for</span> <span class="nx">source</span> <span class="k">in</span> <span class="nx">_</span><span class="p">.</span><span class="nx">rest</span><span class="p">(</span><span class="nx">arguments</span><span class="p">)</span>
-      <span class="p">(</span><span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">source</span>
-    <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-60">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-60">#</a>               </div>               <p>Create a (shallow-cloned) duplicate of an object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.clone = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">slice</span> <span class="mi">0</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span> <span class="nx">obj</span>
-    <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span> <span class="p">{},</span> <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-61">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-61">#</a>               </div>               <p>Invokes interceptor with the obj, and then returns obj.
-The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.tap = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">interceptor</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">interceptor</span> <span class="nx">obj</span>
-    <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-62">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-62">#</a>               </div>               <p>Perform a deep comparison to check if two objects are equal.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isEqual = </span><span class="p">(</span><span class="nx">a</span><span class="p">,</span> <span class="nx">b</span><span class="p">)</span> <span class="o">-&gt;</span></pre></div>             </td>           </tr>                               <tr id="section-63">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-63">#</a>               </div>               <p>Check object identity.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="kc">true</span> <span class="k">if</span> <span class="nx">a</span> <span class="o">is</span> <span class="nx">b</span></pre></div>             </td>           </tr>                               <tr id="section-64">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-64">#</a>               </div>               <p>Different types?</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="nv">atype = </span><span class="k">typeof</span><span class="p">(</span><span class="nx">a</span><span class="p">);</span> <span class="nv">btype = </span><span class="k">typeof</span><span class="p">(</span><span class="nx">b</span><span class="p">)</span>
-    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="nx">atype</span> <span class="o">isnt</span> <span class="nx">btype</span></pre></div>             </td>           </tr>                               <tr id="section-65">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-65">#</a>               </div>               <p>Basic equality test (watch out for coercions).</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="kc">true</span> <span class="k">if</span> <span class="o">`</span><span class="nx">a</span> <span class="o">==</span> <span class="nx">b</span><span class="o">`</span></pre></div>             </td>           </tr>                               <tr id="section-66">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-66">#</a>               </div>               <p>One is falsy and the other truthy.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">a</span> <span class="o">and</span> <span class="nx">b</span><span class="p">)</span> <span class="o">or</span> <span class="p">(</span><span class="nx">a</span> <span class="o">and</span> <span class="o">!</span><span class="nx">b</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-67">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-67">#</a>               </div>               <p>One of them implements an <code>isEqual()</code>?</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="nx">a</span><span class="p">.</span><span class="nx">isEqual</span><span class="p">(</span><span class="nx">b</span><span class="p">)</span> <span class="k">if</span> <span class="nx">a</span><span class="p">.</span><span class="nx">isEqual</span></pre></div>             </td>           </tr>                               <tr id="section-68">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-68">#</a>               </div>               <p>Check dates' integer values.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="nx">a</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="o">is</span> <span class="nx">b</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isDate</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span> <span class="o">and</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isDate</span><span class="p">(</span><span class="nx">b</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-69">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-69">#</a>               </div>               <p>Both are NaN?</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nb">isNaN</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span> <span class="o">and</span> <span class="nx">_</span><span class="p">.</span><span class="nb">isNaN</span><span class="p">(</span><span class="nx">b</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-70">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-70">#</a>               </div>               <p>Compare regular expressions.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isRegExp</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span> <span class="o">and</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isRegExp</span><span class="p">(</span><span class="nx">b</span><span class="p">)</span>
-      <span class="k">return</span> <span class="nx">a</span><span class="p">.</span><span class="nx">source</span>     <span class="o">is</span> <span class="nx">b</span><span class="p">.</span><span class="nx">source</span> <span class="o">and</span>
-             <span class="nx">a</span><span class="p">.</span><span class="nx">global</span>     <span class="o">is</span> <span class="nx">b</span><span class="p">.</span><span class="nx">global</span> <span class="o">and</span>
-             <span class="nx">a</span><span class="p">.</span><span class="nx">ignoreCase</span> <span class="o">is</span> <span class="nx">b</span><span class="p">.</span><span class="nx">ignoreCase</span> <span class="o">and</span>
-             <span class="nx">a</span><span class="p">.</span><span class="nx">multiline</span>  <span class="o">is</span> <span class="nx">b</span><span class="p">.</span><span class="nx">multiline</span></pre></div>             </td>           </tr>                               <tr id="section-71">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-71">#</a>               </div>               <p>If a is not an object by this point, we can't handle it.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="nx">atype</span> <span class="o">isnt</span> <span class="s1">&#39;object&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-72">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-72">#</a>               </div>               <p>Check for different array lengths before comparing contents.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="nx">a</span><span class="p">.</span><span class="nx">length</span> <span class="o">and</span> <span class="p">(</span><span class="nx">a</span><span class="p">.</span><span class="nx">length</span> <span class="o">isnt</span> <span class="nx">b</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-73">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-73">#</a>               </div>               <p>Nothing else worked, deep compare the contents.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="nv">aKeys = </span><span class="nx">_</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">a</span><span class="p">);</span> <span class="nv">bKeys = </span><span class="nx">_</span><span class="p">.</span><span class="nx">keys</span><span class="p">(</span><span class="nx">b</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-74">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-74">#</a>               </div>               <p>Different object sizes?</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="k">return</span> <span class="kc">false</span> <span class="k">if</span> <span class="nx">aKeys</span><span class="p">.</span><span class="nx">length</span> <span class="o">isnt</span> <span class="nx">bKeys</span><span class="p">.</span><span class="nx">length</span></pre></div>             </td>           </tr>                               <tr id="section-75">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-75">#</a>               </div>               <p>Recursive comparison of contents.</p>             </td>             <td class="code">               <div class="highlight"><pre>    <span class="p">(</span><span class="k">return</span> <span class="kc">false</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">a</span> <span class="k">when</span> <span class="o">!</span><span class="p">(</span><span class="nx">key</span> <span class="k">of</span> <span class="nx">b</span><span class="p">)</span> <span class="o">or</span> <span class="o">!</span><span class="nx">_</span><span class="p">.</span><span class="nx">isEqual</span><span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">b</span><span class="p">[</span><span class="nx">key</span><span class="p">])</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-76">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-76">#</a>               </div>               <p>Is a given array or object empty?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isEmpty = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">0</span> <span class="k">if</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">or</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isString</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span>
-    <span class="p">(</span><span class="k">return</span> <span class="kc">false</span><span class="p">)</span> <span class="k">for</span> <span class="nx">key</span> <span class="k">of</span> <span class="nx">obj</span> <span class="k">when</span> <span class="nx">hasOwnProperty</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span>
-    <span class="kc">true</span></pre></div>             </td>           </tr>                               <tr id="section-77">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-77">#</a>               </div>               <p>Is a given value a DOM element?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isElement   = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">obj</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">nodeType</span> <span class="o">is</span> <span class="mi">1</span></pre></div>             </td>           </tr>                               <tr id="section-78">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-78">#</a>               </div>               <p>Is a given value an array?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isArray     = </span><span class="nx">nativeIsArray</span> <span class="o">or</span> <span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="o">!!</span><span class="p">(</span><span class="nx">obj</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">concat</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">unshift</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">callee</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-79">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-79">#</a>               </div>               <p>Is a given variable an arguments object?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isArguments = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">obj</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">callee</span></pre></div>             </td>           </tr>                               <tr id="section-80">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-80">#</a>               </div>               <p>Is the given value a function?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isFunction  = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="o">!!</span><span class="p">(</span><span class="nx">obj</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">constructor</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">call</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">apply</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-81">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-81">#</a>               </div>               <p>Is the given value a string?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isString    = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="o">!!</span><span class="p">(</span><span class="nx">obj</span> <span class="o">is</span> <span class="s1">&#39;&#39;</span> <span class="o">or</span> <span class="p">(</span><span class="nx">obj</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">charCodeAt</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">substr</span><span class="p">))</span></pre></div>             </td>           </tr>                               <tr id="section-82">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-82">#</a>               </div>               <p>Is a given value a number?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isNumber    = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span><span class="nx">obj</span> <span class="o">is</span> <span class="o">+</span><span class="nx">obj</span><span class="p">)</span> <span class="o">or</span> <span class="nx">toString</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">is</span> <span class="s1">&#39;[object Number]&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-83">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-83">#</a>               </div>               <p>Is a given value a boolean?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isBoolean   = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">obj</span> <span class="o">is</span> <span class="kc">true</span> <span class="o">or</span> <span class="nx">obj</span> <span class="o">is</span> <span class="kc">false</span></pre></div>             </td>           </tr>                               <tr id="section-84">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-84">#</a>               </div>               <p>Is a given value a Date?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isDate      = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="o">!!</span><span class="p">(</span><span class="nx">obj</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">getTimezoneOffset</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">setUTCFullYear</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-85">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-85">#</a>               </div>               <p>Is the given value a regular expression?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isRegExp    = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="o">!!</span><span class="p">(</span><span class="nx">obj</span> <span class="o">and</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">exec</span> <span class="o">and</span> <span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">ignoreCase</span> <span class="o">or</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">ignoreCase</span> <span class="o">is</span> <span class="kc">false</span><span class="p">))</span></pre></div>             </td>           </tr>                               <tr id="section-86">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-86">#</a>               </div>               <p>Is the given value NaN -- this one is interesting. <code>NaN != NaN</code>, and
-<code>isNaN(undefined) == true</code>, so we make sure it's a number first.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isNaN       = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isNumber</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">and</span> <span class="nb">window</span><span class="p">.</span><span class="nb">isNaN</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-87">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-87">#</a>               </div>               <p>Is a given value equal to null?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isNull      = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">obj</span> <span class="o">is</span> <span class="kc">null</span></pre></div>             </td>           </tr>                               <tr id="section-88">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-88">#</a>               </div>               <p>Is a given variable undefined?</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.isUndefined = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="k">typeof</span> <span class="nx">obj</span> <span class="o">is</span> <span class="s1">&#39;undefined&#39;</span></pre></div>             </td>           </tr>                               <tr id="section-89">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-89">#</a>               </div>               <h2>Utility Functions</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-90">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-90">#</a>               </div>               <p>Run Underscore.js in noConflict mode, returning the <code>_</code> variable to its
-previous owner. Returns a reference to the Underscore object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.noConflict = </span><span class="o">-&gt;</span>
-    <span class="nv">root._ = </span><span class="nx">previousUnderscore</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-91">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-91">#</a>               </div>               <p>Keep the identity function around for default iterators.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.identity = </span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nx">value</span></pre></div>             </td>           </tr>                               <tr id="section-92">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-92">#</a>               </div>               <p>Run a function <code>n</code> times.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.times = </span><span class="p">(</span><span class="nx">n</span><span class="p">,</span> <span class="nx">iterator</span><span class="p">,</span> <span class="nx">context</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">iterator</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">...</span><span class="nx">n</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-93">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-93">#</a>               </div>               <p>Break out of the middle of an iteration.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.breakLoop = </span><span class="o">-&gt;</span> <span class="k">throw</span> <span class="nx">breaker</span></pre></div>             </td>           </tr>                               <tr id="section-94">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-94">#</a>               </div>               <p>Add your own custom functions to the Underscore object, ensuring that
-they're correctly added to the OOP wrapper as well.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.mixin = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">for</span> <span class="nx">name</span> <span class="k">in</span> <span class="nx">_</span><span class="p">.</span><span class="nx">functions</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span>
-      <span class="nx">addToWrapper</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">_</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nx">obj</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span></pre></div>             </td>           </tr>                               <tr id="section-95">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-95">#</a>               </div>               <p>Generate a unique integer id (unique within the entire client session).
-Useful for temporary DOM ids.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">idCounter = </span><span class="mi">0</span>
-  <span class="nv">_.uniqueId = </span><span class="p">(</span><span class="nx">prefix</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="p">(</span><span class="nx">prefix</span> <span class="o">or</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="nx">idCounter</span><span class="o">++</span></pre></div>             </td>           </tr>                               <tr id="section-96">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-96">#</a>               </div>               <p>By default, Underscore uses <strong>ERB</strong>-style template delimiters, change the
-following template settings to use alternative delimiters.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.templateSettings = </span><span class="p">{</span>
-    <span class="nx">start</span><span class="o">:</span>        <span class="s1">&#39;&lt;%&#39;</span>
-    <span class="nx">end</span><span class="o">:</span>          <span class="s1">&#39;%&gt;&#39;</span>
-    <span class="nx">interpolate</span><span class="o">:</span>  <span class="sr">/&lt;%=(.+?)%&gt;/g</span>
-  <span class="p">}</span></pre></div>             </td>           </tr>                               <tr id="section-97">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-97">#</a>               </div>               <p>JavaScript templating a-la <strong>ERB</strong>, pilfered from John Resig's
-<em>Secrets of the JavaScript Ninja</em>, page 83.
-Single-quote fix from Rick Strahl.
-With alterations for arbitrary delimiters, and to preserve whitespace.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.template = </span><span class="p">(</span><span class="nx">str</span><span class="p">,</span> <span class="nx">data</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">c = </span><span class="nx">_</span><span class="p">.</span><span class="nx">templateSettings</span>
-    <span class="nv">endMatch = </span><span class="k">new</span> <span class="nb">RegExp</span><span class="p">(</span><span class="s2">&quot;&#39;(?=[^&quot;</span><span class="o">+</span><span class="nx">c</span><span class="p">.</span><span class="nx">end</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="s2">&quot;]*&quot;</span><span class="o">+</span><span class="nx">escapeRegExp</span><span class="p">(</span><span class="nx">c</span><span class="p">.</span><span class="nx">end</span><span class="p">)</span><span class="o">+</span><span class="s2">&quot;)&quot;</span><span class="p">,</span><span class="s2">&quot;g&quot;</span><span class="p">)</span>
-    <span class="nv">fn = </span><span class="k">new</span> <span class="nb">Function</span> <span class="s1">&#39;obj&#39;</span><span class="p">,</span>
-      <span class="s1">&#39;var p=[],print=function(){p.push.apply(p,arguments);};&#39;</span> <span class="o">+</span>
-      <span class="s1">&#39;with(obj||{}){p.push(\&#39;&#39;</span> <span class="o">+</span>
-      <span class="nx">str</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\r/g</span><span class="p">,</span> <span class="s1">&#39;\\r&#39;</span><span class="p">)</span>
-         <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\n/g</span><span class="p">,</span> <span class="s1">&#39;\\n&#39;</span><span class="p">)</span>
-         <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\t/g</span><span class="p">,</span> <span class="s1">&#39;\\t&#39;</span><span class="p">)</span>
-         <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="nx">endMatch</span><span class="p">,</span><span class="s2">&quot;✄&quot;</span><span class="p">)</span>
-         <span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">&quot;\\&#39;&quot;</span><span class="p">)</span>
-         <span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s2">&quot;✄&quot;</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
-         <span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="nx">c</span><span class="p">.</span><span class="nx">interpolate</span><span class="p">,</span> <span class="s2">&quot;&#39;,$1,&#39;&quot;</span><span class="p">)</span>
-         <span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="nx">c</span><span class="p">.</span><span class="nx">start</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">&quot;&#39;);&quot;</span><span class="p">)</span>
-         <span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="nx">c</span><span class="p">.</span><span class="nx">end</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">&quot;p.push(&#39;&quot;</span><span class="p">)</span> <span class="o">+</span>
-         <span class="s2">&quot;&#39;);}return p.join(&#39;&#39;);&quot;</span>
-    <span class="k">if</span> <span class="nx">data</span> <span class="k">then</span> <span class="nx">fn</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="k">else</span> <span class="nx">fn</span></pre></div>             </td>           </tr>                               <tr id="section-98">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-98">#</a>               </div>               <h2>Aliases</h2>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">_.forEach  = </span><span class="nx">_</span><span class="p">.</span><span class="nx">each</span>
-  <span class="nv">_.foldl    = _.inject = </span><span class="nx">_</span><span class="p">.</span><span class="nx">reduce</span>
-  <span class="nv">_.foldr    = </span><span class="nx">_</span><span class="p">.</span><span class="nx">reduceRight</span>
-  <span class="nv">_.select   = </span><span class="nx">_</span><span class="p">.</span><span class="nx">filter</span>
-  <span class="nv">_.all      = </span><span class="nx">_</span><span class="p">.</span><span class="nx">every</span>
-  <span class="nv">_.any      = </span><span class="nx">_</span><span class="p">.</span><span class="nx">some</span>
-  <span class="nv">_.contains = </span><span class="nx">_</span><span class="p">.</span><span class="nx">include</span>
-  <span class="nv">_.head     = </span><span class="nx">_</span><span class="p">.</span><span class="nx">first</span>
-  <span class="nv">_.tail     = </span><span class="nx">_</span><span class="p">.</span><span class="nx">rest</span>
-  <span class="nv">_.methods  = </span><span class="nx">_</span><span class="p">.</span><span class="nx">functions</span></pre></div>             </td>           </tr>                               <tr id="section-99">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-99">#</a>               </div>               <h2>Setup the OOP Wrapper</h2>             </td>             <td class="code">               <div class="highlight"><pre></pre></div>             </td>           </tr>                               <tr id="section-100">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-100">#</a>               </div>               <p>If Underscore is called as a function, it returns a wrapped object that
-can be used OO-style. This wrapper holds altered versions of all the
-underscore functions. Wrapped objects may be chained.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">wrapper = </span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">this</span><span class="p">.</span><span class="nv">_wrapped = </span><span class="nx">obj</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-101">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-101">#</a>               </div>               <p>Helper function to continue chaining intermediate results.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">result = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">chain</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="k">if</span> <span class="nx">chain</span> <span class="k">then</span> <span class="nx">_</span><span class="p">(</span><span class="nx">obj</span><span class="p">).</span><span class="nx">chain</span><span class="p">()</span> <span class="k">else</span> <span class="nx">obj</span></pre></div>             </td>           </tr>                               <tr id="section-102">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-102">#</a>               </div>               <p>A method to easily add functions to the OOP wrapper.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">addToWrapper = </span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nx">wrapper</span><span class="p">.</span><span class="nx">prototype</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="o">-&gt;</span>
-      <span class="nv">args = </span><span class="nx">_</span><span class="p">.</span><span class="nx">toArray</span> <span class="nx">arguments</span>
-      <span class="nx">unshift</span><span class="p">.</span><span class="nx">call</span> <span class="nx">args</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">_wrapped</span>
-      <span class="nx">result</span> <span class="nx">func</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="nx">_</span><span class="p">,</span> <span class="nx">args</span><span class="p">),</span> <span class="k">this</span><span class="p">.</span><span class="nx">_chain</span></pre></div>             </td>           </tr>                               <tr id="section-103">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-103">#</a>               </div>               <p>Add all of the Underscore functions to the wrapper object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">_</span><span class="p">.</span><span class="nx">mixin</span> <span class="nx">_</span></pre></div>             </td>           </tr>                               <tr id="section-104">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-104">#</a>               </div>               <p>Add all mutator Array functions to the wrapper.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="p">[</span><span class="s1">&#39;pop&#39;</span><span class="p">,</span> <span class="s1">&#39;push&#39;</span><span class="p">,</span> <span class="s1">&#39;reverse&#39;</span><span class="p">,</span> <span class="s1">&#39;shift&#39;</span><span class="p">,</span> <span class="s1">&#39;sort&#39;</span><span class="p">,</span> <span class="s1">&#39;splice&#39;</span><span class="p">,</span> <span class="s1">&#39;unshift&#39;</span><span class="p">],</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">method = </span><span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span>
-    <span class="nx">wrapper</span><span class="p">.</span><span class="nx">prototype</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="o">-&gt;</span>
-      <span class="nx">method</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">_wrapped</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">)</span>
-      <span class="nx">result</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">_wrapped</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">_chain</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-105">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-105">#</a>               </div>               <p>Add all accessor Array functions to the wrapper.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nx">_</span><span class="p">.</span><span class="nx">each</span> <span class="p">[</span><span class="s1">&#39;concat&#39;</span><span class="p">,</span> <span class="s1">&#39;join&#39;</span><span class="p">,</span> <span class="s1">&#39;slice&#39;</span><span class="p">],</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-&gt;</span>
-    <span class="nv">method = </span><span class="nb">Array</span><span class="p">.</span><span class="nx">prototype</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span>
-    <span class="nx">wrapper</span><span class="p">.</span><span class="nx">prototype</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="o">-&gt;</span>
-      <span class="nx">result</span><span class="p">(</span><span class="nx">method</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">_wrapped</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">),</span> <span class="k">this</span><span class="p">.</span><span class="nx">_chain</span><span class="p">)</span></pre></div>             </td>           </tr>                               <tr id="section-106">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-106">#</a>               </div>               <p>Start chaining a wrapped Underscore object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">wrapper::chain = </span><span class="o">-&gt;</span>
-    <span class="k">this</span><span class="p">.</span><span class="nv">_chain = </span><span class="kc">true</span>
-    <span class="k">this</span></pre></div>             </td>           </tr>                               <tr id="section-107">             <td class="docs">               <div class="octowrap">                 <a class="octothorpe" href="#section-107">#</a>               </div>               <p>Extracts the result from a wrapped and chained object.</p>             </td>             <td class="code">               <div class="highlight"><pre>  <span class="nv">wrapper::value = </span><span class="o">-&gt;</span> <span class="k">this</span><span class="p">.</span><span class="nx">_wrapped</span>
-
-</pre></div>             </td>           </tr>                </tbody>     </table>   </div> </body> </html> 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/images/favicon.ico b/node/node_modules/jade/support/coffee-script/documentation/images/favicon.ico
deleted file mode 100644 (file)
index ecf4a86..0000000
Binary files a/node/node_modules/jade/support/coffee-script/documentation/images/favicon.ico and /dev/null differ
diff --git a/node/node_modules/jade/support/coffee-script/documentation/images/logo.png b/node/node_modules/jade/support/coffee-script/documentation/images/logo.png
deleted file mode 100644 (file)
index 2b1e40a..0000000
Binary files a/node/node_modules/jade/support/coffee-script/documentation/images/logo.png and /dev/null differ
diff --git a/node/node_modules/jade/support/coffee-script/documentation/index.html.erb b/node/node_modules/jade/support/coffee-script/documentation/index.html.erb
deleted file mode 100644 (file)
index ad79164..0000000
+++ /dev/null
@@ -1,1364 +0,0 @@
-<%
-  require 'uv'
-  def code_for(file, executable=false)
-    return '' unless File.exists?("documentation/js/#{file}.js")
-    cs = File.read("documentation/coffee/#{file}.coffee")
-    js = File.read("documentation/js/#{file}.js")
-    cshtml = Uv.parse(cs, 'xhtml', 'coffeescript', false, 'idle', false)
-    jshtml = Uv.parse(js, 'xhtml', 'javascript', false, 'idle', false)
-    append = executable == true ? '' : "alert(#{executable});"
-    run    = executable == true ? 'run' : "run: #{executable}"
-    button = executable ? "<button onclick='javascript: #{js};#{append}'>#{run}</button>" : ''
-    "<div class='code'>#{cshtml}#{jshtml}#{button}<br class='clear' /></div>"
-  end
-%>
-
-
-<!DOCTYPE html>
-<html>
-<head>
-  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
-  <title>CoffeeScript</title>
-  <link rel="stylesheet" type="text/css" href="documentation/css/docs.css" />
-  <link rel="stylesheet" type="text/css" href="documentation/css/idle.css" />
-  <link rel="shortcut icon" href="documentation/images/favicon.ico" />
-</head>
-<body class="minimized">
-
-  <div id="fadeout"></div>
-
-  <div id="flybar">
-    <a id="logo" href="#top"> </a>
-    <div class="navigation toc">
-      <div class="button">
-        Table of Contents
-      </div>
-      <div class="contents">
-        <a href="#overview">Mini Overview</a>
-        <a href="#installation">Installation and Usage</a>
-        <a href="#language">Language Reference</a>
-        <a href="#whitespace">Significant Whitespace</a>
-        <a href="#functions">Functions and Invocation</a>
-        <a href="#objects_and_arrays">Objects and Arrays</a>
-        <a href="#lexical_scope">Lexical Scoping and Variable Safety</a>
-        <a href="#conditionals">If, Else, Unless, and Conditional Assignment</a>
-        <a href="#aliases">Aliases</a>
-        <a href="#splats">Splats...</a>
-        <a href="#while">While, Until, and Loop</a>
-        <a href="#comprehensions">Comprehensions (Arrays, Objects, and Ranges)</a>
-        <a href="#slice_splice">Array Slicing and Splicing with Ranges</a>
-        <a href="#expressions">Everything is an Expression</a>
-        <a href="#existence">The Existential Operator</a>
-        <a href="#classes">Classes, Inheritance, and Super</a>
-        <a href="#pattern_matching">Pattern Matching</a>
-        <a href="#fat_arrow">Function Binding</a>
-        <a href="#embedded">Embedded JavaScript</a>
-        <a href="#switch">The Switch Statement</a>
-        <a href="#try">Try/Catch/Finally</a>
-        <a href="#comparisons">Chained Comparisons</a>
-        <a href="#interpolation">String and RegExp Interpolation</a>
-        <a href="#heredocs">Multiline Strings, Heredocs, and Block Comments</a>
-        <a href="#cake">Cake, and Cakefiles</a>
-        <a href="#scripts">"text/coffeescript" Script Tags</a>
-        <a href="#resources">Resources</a>
-        <a href="#webchat">Web Chat (IRC)</a>
-        <a href="#change_log">Change Log</a>
-      </div>
-    </div>
-    <div class="navigation try">
-      <div class="button">
-        Try CoffeeScript
-      </div>
-      <div class="contents repl_wrapper">
-        <div class="code">
-          <div id="repl_source_wrap"><textarea id="repl_source" rows="100">alert "Hello CoffeeScript!"</textarea></div>
-          <pre id="repl_results"></pre>
-          <button class="full_screen">go full screen</button>
-          <button class="minimize">minimize</button>
-          <button class="run">run</button>
-          <br class="clear" />
-        </div>
-      </div>
-    </div>
-    <div class="navigation annotated">
-      <div class="button">
-        Annotated Source
-      </div>
-      <div class="contents">
-        <a href="documentation/docs/grammar.html">Grammar Rules &mdash; src/grammar</a>
-        <a href="documentation/docs/lexer.html">Lexing Tokens &mdash; src/lexer</a>
-        <a href="documentation/docs/rewriter.html">The Rewriter &mdash; src/rewriter</a>
-        <a href="documentation/docs/nodes.html">The Syntax Tree &mdash; src/nodes</a>
-        <a href="documentation/docs/scope.html">Lexical Scope &mdash; src/scope</a>
-        <a href="documentation/docs/helpers.html">Helpers &amp; Utility Functions &mdash; src/helpers</a>
-        <a href="documentation/docs/coffee-script.html">The CoffeeScript Module &mdash; src/coffee-script</a>
-        <a href="documentation/docs/cake.html">Cake &amp; Cakefiles &mdash; src/cake</a>
-        <a href="documentation/docs/command.html">"coffee" Command-Line Utility &mdash; src/command</a>
-        <a href="documentation/docs/optparse.html">Option Parsing &mdash; src/optparse</a>
-        <a href="documentation/docs/repl.html">Interactive REPL &mdash; src/repl</a>
-      </div>
-    </div>
-    <div id="error" style="display:none;"></div>
-  </div>
-
-  <div class="container">
-    <span class="bookmark" id="top"></span>
-
-    <p>
-      CoffeeScript is a little language that compiles into JavaScript. Think
-      of it as JavaScript's less ostentatious kid brother &mdash; the same genes,
-      roughly the same height, but a different sense of style. Apart from a handful of
-      bonus goodies, statements in CoffeeScript correspond one-to-one with their
-      equivalent in JavaScript, it's just another way of saying it.
-    </p>
-
-    <p>
-      <b>Disclaimer:</b>
-      CoffeeScript is just for fun. Until it reaches 1.0, <i>there are no guarantees
-      that the syntax won't change between versions.</i> That said,
-      it compiles into clean JavaScript (the good parts) that can use existing
-      JavaScript libraries seamlessly, and passes through
-      <a href="http://www.jslint.com/">JSLint</a> without warnings. The compiled
-      output is pretty-printed and quite readable.
-    </p>
-
-    <p>
-      <b>Latest Version:</b>
-      <a href="http://github.com/jashkenas/coffee-script/tarball/0.9.4">0.9.4</a>
-    </p>
-
-    <h2>
-      <span id="overview" class="bookmark"></span>
-      Mini Overview
-    </h2>
-
-    <p><i>CoffeeScript on the left, compiled JavaScript output on the right.</i></p>
-
-    <%= code_for('overview', 'cubes') %>
-
-    <p>
-      For a longer CoffeeScript example, check out
-      <a href="documentation/docs/underscore.html">Underscore.coffee</a>, a port
-      of the <a href="http://documentcloud.github.com/underscore/">Underscore.js</a>
-      library of helper functions. Underscore.coffee can pass the entire Underscore.js
-      test suite. The CoffeeScript version is faster than the original for a number
-      of methods (in general, due to the speed of CoffeeScript's array comprehensions), and
-      after being minified and gzipped, is only 241 bytes larger than the original
-      JavaScript version.
-      Additional examples are included in the source repository, inside the
-      <a href="http://github.com/jashkenas/coffee-script/tree/master/examples/">examples</a> folder.
-    </p>
-
-    <h2>
-      <span id="installation" class="bookmark"></span>
-      Installation and Usage
-    </h2>
-
-    <p>
-      The CoffeeScript compiler is written in pure CoffeeScript, using a
-      <a href="documentation/docs/grammar.html">small DSL</a>
-      on top of the <a href="http://github.com/zaach/jison">Jison parser generator</a>, and is available
-      as a <a href="http://nodejs.org/">Node.js</a> utility. The core compiler however,
-      does not depend on Node, and can be run in other server-side-JavaScript environments,
-      or in the browser (see "Try CoffeeScript", above).
-    </p>
-
-    <p>
-      To install, first make sure you have a working copy of the latest tagged version of
-      <a href="http://nodejs.org/">Node.js</a>, currently <b>0.1.102</b> or higher.
-      Then clone the CoffeeScript
-      <a href="http://github.com/jashkenas/coffee-script">source repository</a>
-      from GitHub, or download the latest
-      release: <a href="http://github.com/jashkenas/coffee-script/tarball/0.9.4">0.9.4</a>.
-      To install the CoffeeScript compiler system-wide
-      under <tt>/usr/local</tt>, open the directory and run:
-    </p>
-
-    <pre>
-sudo bin/cake install</pre>
-
-    <p>
-      Alternatively, if you already have the
-      <a href="http://npmjs.org/">Node Package Manager</a> installed,
-      you can use that to grab the latest CoffeeScript:
-    </p>
-
-    <pre>
-sudo npm install coffee-script</pre>
-
-    <p>
-      Both of these provide the <tt>coffee</tt> command, which will execute CoffeeScripts
-      under Node.js by default, but is also used to compile CoffeeScript
-      <tt>.coffee</tt> files into JavaScript, or to run an an interactive REPL.
-      When compiling to JavaScript, <tt>coffee</tt> writes the output
-      as <tt>.js</tt> files in the same directory by default, but output
-      can be customized with the following options:
-    </p>
-
-    <table>
-      <tr>
-        <td><code>-c, --compile</code></td>
-        <td>
-          Compile a <tt>.coffee</tt> script into a <tt>.js</tt> JavaScript file
-          of the same name.
-        </td>
-      </tr>
-      <tr>
-        <td width="25%"><code>-i, --interactive</code></td>
-        <td>
-          Launch an interactive CoffeeScript session to try short snippets.
-          More pleasant if wrapped with
-          <a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap.html">rlwrap</a>.
-        </td>
-      </tr>
-      <tr>
-        <td><code>-o, --output [DIR]</code></td>
-        <td>
-          Write out all compiled JavaScript files into the specified directory.
-          Use in conjunction with <tt>--compile</tt> or <tt>--watch</tt>.
-        </td>
-      </tr>
-      <tr>
-        <td><code>-w, --watch</code></td>
-        <td>
-          Watch the modification times of the coffee-scripts, recompiling as
-          soon as a change occurs.
-        </td>
-      </tr>
-      <tr>
-        <td><code>-p, --print</code></td>
-        <td>
-          Instead of writing out the JavaScript as a file, print it
-          directly to <b>stdout</b>.
-        </td>
-      </tr>
-      <tr>
-        <td><code>-l, --lint</code></td>
-        <td>
-          If the <tt>jsl</tt>
-          (<a href="http://www.javascriptlint.com/">JavaScript Lint</a>)
-          command is installed, use it
-          to check the compilation of a CoffeeScript file. (Handy in
-          conjunction with <br /> <tt>--watch</tt>)
-        </td>
-      </tr>
-      <tr>
-        <td><code>-s, --stdio</code></td>
-        <td>
-          Pipe in CoffeeScript to STDIN and get back JavaScript over STDOUT.
-          Good for use with processes written in other languages. An example:<br />
-          <tt>cat src/cake.coffee | coffee -sc</tt>
-        </td>
-      </tr>
-      <tr>
-        <td><code>-e, --eval</code></td>
-        <td>
-          Compile and print a little snippet of CoffeeScript directly from the
-          command line. For example:<br /><tt>coffee -e "puts num for num in [10..1]"</tt>
-        </td>
-      </tr>
-      <tr>
-        <td><code>-r, --require</code></td>
-        <td>
-          Load a library before compiling or executing your script. Can be used
-          to hook in to the compiler (to add Growl notifications, for example).
-        </td>
-      </tr>
-      <tr>
-        <td><code>-b, --bare</code></td>
-        <td>
-          Compile the JavaScript without the top-level function safety wrapper.
-          (Used for CoffeeScript as a Node.js module.)
-        </td>
-      </tr>
-      <tr>
-        <td><code>-t, --tokens</code></td>
-        <td>
-          Instead of parsing the CoffeeScript, just lex it, and print out the
-          token stream: <tt>[IDENTIFIER square] [ASSIGN =] [PARAM_START (]</tt> ...
-        </td>
-      </tr>
-      <tr>
-        <td><code>-n, --nodes</code></td>
-        <td>
-          Instead of compiling the CoffeeScript, just lex and parse it, and print
-          out the parse tree:
-<pre class="no_bar">
-Expressions
-  Assign
-    Value "square"
-    Code "x"
-      Op *
-        Value "x"
-        Value "x"</pre>
-        </td>
-      </tr>
-    </table>
-
-    <p>
-      <b>Examples:</b>
-    </p>
-
-    <pre>
-coffee -c path/to/script.coffee
-coffee --interactive
-coffee --watch --lint experimental.coffee
-coffee --print app/scripts/*.coffee > concatenation.js</pre>
-
-    <h2>
-      <span id="language" class="bookmark"></span>
-      Language Reference
-    </h2>
-
-    <p>
-      <i>
-        This reference is structured so that it can be read from top to bottom,
-        if you like. Later sections use ideas and syntax previously introduced.
-        Familiarity with JavaScript is assumed.
-        In all of the following examples, the source CoffeeScript is provided on
-        the left, and the direct compilation into JavaScript is on the right.
-      </i>
-    </p>
-
-    <p>
-      <i>
-        Many of the examples can be run (where it makes sense) by pressing the "run"
-        button towards the bottom right. You can also paste examples into
-        "Try CoffeeScript" in the toolbar, and play with them from there.
-      </i>
-    <p>
-      <span id="whitespace" class="bookmark"></span>
-      <b class="header">Significant Whitespace</b>
-      CoffeeScript uses Python-style significant whitespace: You don't need to
-      use semicolons <tt>;</tt> to terminate expressions, ending
-      the line will do just as well. Semicolons can still be used to fit
-      multiple expressions onto a single line. Instead of using curly braces
-      <tt>{ }</tt> to delimit blocks of code (like <a href="#functions">functions</a>,
-      <a href="#conditionals">if-statements</a>,
-      <a href="#switch">switch</a>, and <a href="#try">try/catch</a>),
-      use indentation.
-    </p>
-
-    <p>
-      You don't need to use parentheses to invoke a function if you're passing
-      arguments:<br /><tt>print "coffee"</tt>. Implicit parentheses wrap forwards
-      to the end of the line, or block expression.
-    </p>
-
-    <p>
-      You can use newlines to break up your expression into smaller pieces,
-      as long as CoffeeScript can determine that the line hasn't finished yet,
-      because it ends with an operator or a dot ... seen most commonly
-      in jQuery-chaining style JavaScript.
-    </p>
-
-    <p>
-      <span id="functions" class="bookmark"></span>
-      <b class="header">Functions and Invocation</b>
-      Functions are defined by a list of parameters, an arrow, and the
-      function body. The empty function looks like this: <tt>-></tt>
-    </p>
-    <%= code_for('functions', 'cube(5)') %>
-
-    <p>
-      <span id="objects_and_arrays" class="bookmark"></span>
-      <b class="header">Objects and Arrays</b>
-      Object and Array literals look very similar to their JavaScript cousins.
-      When you spread out each property on a separate line, the commas are
-      optional. Implicit objects may be created with indentation instead of
-      brackets, winding up looking quite similar to YAML.
-    </p>
-    <%= code_for('objects_and_arrays', 'song.join(",")') %>
-    <p>
-      In JavaScript, you can't use reserved words, like <tt>class</tt>, as properties
-      of an object, without quoting them as strings. CoffeeScript notices and quotes
-      them for you, so you don't have to worry about it (say, when using jQuery).
-    </p>
-    <%= code_for('objects_reserved') %>
-
-    <p>
-      <span id="lexical_scope" class="bookmark"></span>
-      <b class="header">Lexical Scoping and Variable Safety</b>
-      The CoffeeScript compiler takes care to make sure that all of your variables
-      are properly declared within lexical scope &mdash; you never need to write
-      <tt>var</tt> yourself.
-    </p>
-    <%= code_for('scope', 'inner') %>
-    <p>
-      Notice how all of the variable declarations have been pushed up to
-      the top of the closest scope, the first time they appear.
-      <b>outer</b> is not redeclared within the inner function, because it's
-      already in scope; <b>inner</b> within the function, on the other hand,
-      should not be able to change the value of the external variable of the same name, and
-      therefore has a declaration of its own.
-    </p>
-    <p>
-      This behavior is effectively identical to Ruby's scope for local variables.
-      Because you don't have direct access to the <tt>var</tt> keyword,
-      it's impossible to shadow an outer variable on purpose, you may only refer
-      to it. So be careful that you're not reusing the name of an external
-      variable accidentally, if you're writing a deeply nested function.
-    </p>
-    <p>
-      Although suppressed within this documentation for clarity, all
-      CoffeeScript output is wrapped in an anonymous function:
-      <tt>(function(){ ... })();</tt> This safety wrapper, combined with the
-      automatic generation of the <tt>var</tt> keyword, make it exceedingly difficult
-      to pollute the global namespace by accident.
-    </p>
-    <p>
-      If you'd like to create top-level variables for other scripts to use,
-      attach them as properties on <b>window</b>, or on the <b>exports</b>
-      object in CommonJS. The <b>existential operator</b> (covered below), gives you a
-      reliable way to figure out where to add them, if you're targeting both
-      CommonJS and the browser: <tt>root = exports ? this</tt>
-    </p>
-
-    <p>
-      <span id="conditionals" class="bookmark"></span>
-      <b class="header">If, Else, Unless, and Conditional Assignment</b>
-      <b>If/else</b> statements can be written without the use of parentheses and
-      curly brackets. As with functions and other block expressions,
-      multi-line conditionals are delimited by indentation. There's also a handy
-      postfix form, with the <tt>if</tt> or <tt>unless</tt> at the end.
-    </p>
-    <p>
-      CoffeeScript can compile <b>if</b> statements into JavaScript expressions,
-      using the ternary operator when possible, and closure wrapping otherwise. There
-      is no explicit ternary statement in CoffeeScript &mdash; you simply use
-      a regular <b>if</b> statement inline.
-    </p>
-    <%= code_for('conditionals') %>
-
-    <p>
-      <span id="aliases" class="bookmark"></span>
-      <b class="header">Aliases</b>
-      Because the <tt>==</tt> operator frequently causes undesirable coercion,
-      is intransitive, and has a different meaning than in other languages,
-      CoffeeScript compiles <tt>==</tt> into <tt>===</tt>, and <tt>!=</tt> into
-      <tt>!==</tt>.
-      In addition, <tt>is</tt> compiles into <tt>===</tt>,
-      and <tt>isnt</tt> into <tt>!==</tt>.
-    </p>
-    <p>
-      You can use <tt>not</tt> as an alias for <tt>!</tt>.
-    </p>
-    <p>
-      For logic, <tt>and</tt> compiles to <tt>&amp;&amp;</tt>, and <tt>or</tt>
-      into <tt>||</tt>.
-    </p>
-    <p>
-      Instead of a newline or semicolon, <tt>then</tt> can be used to separate
-      conditions from expressions, in <b>while</b>,
-      <b>if</b>/<b>else</b>, and <b>switch</b>/<b>when</b> statements.
-    </p>
-    <p>
-      As in <a href="http://yaml.org/">YAML</a>, <tt>on</tt> and <tt>yes</tt>
-      are the same as boolean <tt>true</tt>, while <tt>off</tt> and <tt>no</tt> are boolean <tt>false</tt>.
-    </p>
-    <p>
-      For single-line statements, <tt>unless</tt> can be used as the inverse of <tt>if</tt>.
-    </p>
-    <p>
-      As a shortcut for <tt>this.property</tt>, you can use <tt>@property</tt>.
-    </p>
-    <p>
-      You can use <tt>in</tt> to test for array presence, and <tt>of</tt> to
-      test for JavaScript object-key presence.
-    </p>
-    <%= code_for('aliases') %>
-
-    <p>
-      <span id="splats" class="bookmark"></span>
-      <b class="header">Splats...</b>
-      The JavaScript <b>arguments object</b> is a useful way to work with
-      functions that accept variable numbers of arguments. CoffeeScript provides
-      splats <tt>...</tt>, both for function definition as well as invocation,
-      making variable numbers of arguments a little bit more palatable.
-    </p>
-    <%= code_for('splats', true) %>
-
-    <p>
-      <span id="while" class="bookmark"></span>
-      <b class="header">While, Until, and Loop</b>
-      The only low-level loop that CoffeeScript provides is the <b>while</b> loop. The
-      main difference from JavaScript is that the <b>while</b> loop can be used
-      as an expression, returning an array containing the result of each iteration
-      through the loop.
-    </p>
-    <%= code_for('while', 'lyrics.join("\n")') %>
-    <p>
-      For readability, the <b>until</b> keyword is equivalent to <tt>while not</tt>,
-      and the <b>loop</b> keyword is equivalent to <tt>while true</tt>.
-      Other JavaScript loops, such as <b>for</b> loops and <b>do-while</b> loops
-      can be mimicked by variations on <b>loop</b>, but the hope is that you
-      won't need to do that with CoffeeScript, either because you're using
-      <b>each</b> (<b>forEach</b>) style iterators, or...
-    </p>
-
-    <p>
-      <span id="comprehensions" class="bookmark"></span>
-      <b class="header">Comprehensions (Arrays, Objects, and Ranges)</b>
-      For your looping needs, CoffeeScript provides array comprehensions
-      similar to Python's. They replace (and compile into) <b>for</b> loops, with
-      optional guard clauses and the value of the current array index.
-      Unlike for loops, array comprehensions are expressions, and can be returned
-      and assigned. They should be able to handle most places where you otherwise
-      would use a loop, <b>each</b>/<b>forEach</b>, <b>map</b>, or <b>select</b>/<b>filter</b>.
-    </p>
-    <%= code_for('array_comprehensions') %>
-    <p>
-      If you know the start and end of your loop, or would like to step through
-      in fixed-size increments, you can use a range to specify the start and
-      end of your comprehension.
-    </p>
-    <%= code_for('range_comprehensions', 'countdown') %>
-    <p>
-      Comprehensions can also be used to iterate over the keys and values in
-      an object. Use <tt>of</tt> to signal comprehension over the properties of
-      an object instead of the values in an array.
-    </p>
-    <%= code_for('object_comprehensions', 'ages.join(", ")') %>
-    <p>
-      By default, object comprehensions are safe, and use a <tt>hasOwnProperty</tt>
-      check to make sure that you're dealing with properties on the current
-      object. If you'd like the regular JavaScript <br /><tt>for (key in obj) ...</tt>
-      loop, for speed or for another reason, you can use <br />
-      <tt>for all key, value of object</tt> in CoffeeScript.
-    </p>
-
-    <p>
-      <span id="slice_splice" class="bookmark"></span>
-      <b class="header">Array Slicing and Splicing with Ranges</b>
-      CoffeeScript borrows Ruby's
-      <a href="http://ruby-doc.org/core/classes/Range.html">range syntax</a>
-      for extracting slices of arrays. With two dots (<tt>3..5</tt>), the range
-      is inclusive: the first argument is the index of the first element in
-      the slice, and the second is the index of the last one. Three dots signify
-      a range that excludes the end.
-    </p>
-    <%= code_for('slices', 'copy') %>
-    <p>
-      The same syntax can be used with assignment to replace a segment of an
-      array with new values (to splice it).
-    </p>
-    <%= code_for('splices', 'numbers') %>
-
-    <p>
-      <span id="expressions" class="bookmark"></span>
-      <b class="header">Everything is an Expression (at least, as much as possible)</b>
-      You might have noticed how even though we don't add return statements
-      to CoffeeScript functions, they nonetheless return their final value.
-      The CoffeeScript compiler tries to make sure that all statements in the
-      language can be used as expressions. Watch how the <tt>return</tt> gets
-      pushed down into each possible branch of execution, in the function
-      below.
-    </p>
-    <%= code_for('expressions', 'eldest') %>
-    <p>
-      Even though functions will always return their final value, it's both possible
-      and encouraged to return early from a function body writing out the explicit
-      return (<tt>return value</tt>), when you know that you're done.
-    </p>
-    <p>
-      Because variable declarations occur at the top of scope, assignment can
-      be used within expressions, even for variables that haven't been seen before:
-    </p>
-    <%= code_for('expressions_assignment', 'six') %>
-    <p>
-      Things that would otherwise be statements in JavaScript, when used
-      as part of an expression in CoffeeScript, are converted into expressions
-      by wrapping them in a closure. This lets you do useful things, like assign
-      the result of a comprehension to a variable:
-    </p>
-    <%= code_for('expressions_comprehension', 'globals') %>
-    <p>
-      As well as silly things, like passing a <b>try/catch</b> statement directly
-      into a function call:
-    </p>
-    <%= code_for('expressions_try', true) %>
-    <p>
-      There are a handful of statements in JavaScript that can't be meaningfully
-      converted into expressions, namely <tt>break</tt>, <tt>continue</tt>,
-      and <tt>return</tt>. If you make use of them within a block of code,
-      CoffeeScript won't try to perform the conversion.
-    </p>
-
-    <p>
-      <span id="existence" class="bookmark"></span>
-      <b class="header">The Existential Operator</b>
-      It's a little difficult to check for the existence of a variable in
-      JavaScript. <tt>if (variable) ...</tt> comes close, but fails for zero,
-      the empty string, and false. CoffeeScript's existential operator <tt>?</tt> returns true unless
-      a variable is <b>null</b> or <b>undefined</b>, which makes it analogous
-      to Ruby's <tt>nil?</tt>
-    </p>
-    <p>
-      It can also be used for safer conditional assignment than <tt>||=</tt>
-      provides, for cases where you may be handling numbers or strings.
-    </p>
-    <%= code_for('existence', 'speed') %>
-    <p>
-      The accessor variant of the existential operator <tt>?.</tt> can be used to soak
-      up null references in a chain of properties. Use it instead
-      of the dot accessor <tt>.</tt> in cases where the base value may be <b>null</b>
-      or <b>undefined</b>. If all of the properties exist then you'll get the expected
-      result, if the chain is broken, <b>undefined</b> is returned instead of
-      the <b>TypeError</b> that would be raised otherwise.
-    </p>
-    <%= code_for('soaks') %>
-    <p>
-      Soaking up nulls is similar to Ruby's
-      <a href="http://andand.rubyforge.org/">andand gem</a>, and to the
-      <a href="http://groovy.codehaus.org/Operators#Operators-SafeNavigationOperator%28%3F.%29">safe navigation operator</a>
-      in Groovy.
-    </p>
-
-    <p>
-      <span id="classes" class="bookmark"></span>
-      <b class="header">Classes, Inheritance, and Super</b>
-      JavaScript's prototypal inheritance has always been a bit of a
-      brain-bender, with a whole family tree of libraries that provide a cleaner
-      syntax for classical inheritance on top of JavaScript's prototypes:
-      <a href="http://code.google.com/p/base2/">Base2</a>,
-      <a href="http://prototypejs.org/">Prototype.js</a>,
-      <a href="http://jsclass.jcoglan.com/">JS.Class</a>, etc.
-      The libraries provide syntactic sugar, but the built-in inheritance would
-      be completely usable if it weren't for a couple of small exceptions:
-      it's awkward to call <b>super</b> (the prototype object's
-      implementation of the current function), and it's awkward to correctly
-      set the prototype chain.
-    </p>
-    <p>
-      Instead of repetitively attaching functions to a prototype, CoffeeScript
-      provides a basic <tt>class</tt> structure that allows you to name your class,
-      set the superclass, assign prototypal properties, and define the constructor,
-      in a single assignable expression.
-    </p>
-    <%= code_for('classes', true) %>
-    <p>
-      If structuring your prototypes classically isn't your cup of tea, CoffeeScript
-      provides a couple of lower-level conveniences. The <tt>extends</tt> operator
-      helps with proper prototype setup, <tt>::</tt> gives you
-      quick access to an object's prototype, and <tt>super()</tt>
-      is converted into a call against the immediate ancestor's method of the same name.
-    </p>
-    <%= code_for('prototypes', '"one_two".dasherize()') %>
-    <p>
-      Finally, you may assign Class-level (static) properties within a class
-      definition by using<br /><tt>@property: value</tt>
-    </p>
-
-    <p>
-      <span id="pattern_matching" class="bookmark"></span>
-      <b class="header">Pattern Matching (Destructuring Assignment)</b>
-      To make extracting values from complex arrays and objects more convenient,
-      CoffeeScript implements ECMAScript Harmony's proposed
-      <a href="http://wiki.ecmascript.org/doku.php?id=harmony:destructuring">destructuring assignment</a>
-      syntax. When you assign an array or object literal to a value, CoffeeScript
-      breaks up and matches both sides against each other, assigning the values
-      on the right to the variables on the left. In the simplest case, it can be
-      used for parallel assignment:
-    </p>
-    <%= code_for('parallel_assignment', 'theBait') %>
-    <p>
-      But it's also helpful for dealing with functions that return multiple
-      values.
-    </p>
-    <%= code_for('multiple_return_values', 'forecast') %>
-    <p>
-      Pattern matching can be used with any depth of array and object nesting,
-      to help pull out deeply nested properties.
-    </p>
-    <%= code_for('object_extraction', 'name + " — " + street') %>
-    <p>
-      Pattern matching can even be combined with splats.
-    </p>
-    <%= code_for('patterns_and_splats', 'contents.join("")') %>
-
-    <p>
-      <span id="fat_arrow" class="bookmark"></span>
-      <b class="header">Function binding</b>
-      In JavaScript, the <tt>this</tt> keyword is dynamically scoped to mean the
-      object that the current function is attached to. If you pass a function as
-      as callback, or attach it to a different object, the original value of <tt>this</tt>
-      will be lost. If you're not familiar with this behavior,
-      <a href="http://www.digital-web.com/articles/scope_in_javascript/">this Digital Web article</a>
-      gives a good overview of the quirks.
-    </p>
-    <p>
-      The fat arrow <tt>=&gt;</tt> can be used to both define a function, and to bind
-      it to the current value of <tt>this</tt>, right on the spot. This is helpful
-      when using callback-based libraries like Prototype or jQuery, for creating
-      iterator functions to pass to <tt>each</tt>, or event-handler functions
-      to use with <tt>bind</tt>. Functions created with the fat arrow are able to access
-      properties of the <tt>this</tt> where they're defined.
-    </p>
-    <%= code_for('fat_arrow') %>
-    <p>
-      If we had used <tt>-></tt> in the callback above, <tt>@customer</tt> would
-      have referred to the undefined "customer" property of the DOM element,
-      and trying to call <tt>purchase()</tt> on it would have raised an exception.
-    </p>
-
-    <p>
-      <span id="embedded" class="bookmark"></span>
-      <b class="header">Embedded JavaScript</b>
-      Hopefully, you'll never need to use it, but if you ever need to intersperse
-      snippets of JavaScript within your CoffeeScript, you can
-      use backticks to pass it straight through.
-    </p>
-    <%= code_for('embedded', 'hi()') %>
-
-    <p>
-      <span id="switch" class="bookmark"></span>
-      <b class="header">Switch/When/Else</b>
-      <b>Switch</b> statements in JavaScript are a bit awkward. You need to
-      remember to <b>break</b> at the end of every <b>case</b> statement to
-      avoid accidentally falling through to the default case.
-      CoffeeScript prevents accidental fall-through, and can convert the <tt>switch</tt>
-      into a returnable, assignable expression. The format is: <tt>switch</tt> condition,
-      <tt>when</tt> clauses, <tt>else</tt> the default case.
-    </p>
-    <p>
-      As in Ruby, <b>switch</b> statements in CoffeeScript can take multiple
-      values for each <b>when</b> clause. If any of the values match, the clause
-      runs.
-    </p>
-    <%= code_for('switch') %>
-
-    <p>
-      <span id="try" class="bookmark"></span>
-      <b class="header">Try/Catch/Finally</b>
-      Try/catch statements are just about the same as JavaScript (although
-      they work as expressions).
-    </p>
-    <%= code_for('try') %>
-
-    <p>
-      <span id="comparisons" class="bookmark"></span>
-      <b class="header">Chained Comparisons</b>
-      CoffeeScript borrows
-      <a href="http://docs.python.org/reference/expressions.html#notin">chained comparisons</a>
-      from Python &mdash; making it easy to test if a value falls within a
-      certain range.
-    </p>
-    <%= code_for('comparisons', 'healthy') %>
-
-    <p>
-      <span id="interpolation" class="bookmark"></span>
-      <b class="header">String and RegExp Interpolation</b>
-      Ruby-style string interpolation is included in CoffeeScript. Double-quoted
-      strings allow for interpolated values, while single-quoted strings are literal.
-    </p>
-    <%= code_for('interpolation', 'quote') %>
-    <p>
-      And arbitrary expressions can be interpolated by using brackets <tt>#{ ... }</tt><br />
-      Interpolation works the same way within regular expressions.
-    </p>
-    <%= code_for('interpolation_expression', 'sentence') %>
-
-    <p>
-      <span id="heredocs" class="bookmark"></span>
-      <b class="header">Multiline Strings, Heredocs, and Block Comments</b>
-      Multiline strings are allowed in CoffeeScript.
-    </p>
-    <%= code_for('strings', 'mobyDick') %>
-    <p>
-      Heredocs can be used to hold formatted or indentation-sensitive text
-      (or, if you just don't feel like escaping quotes and apostrophes). The
-      indentation level that begins the heredoc is maintained throughout, so
-      you can keep it all aligned with the body of your code.
-    </p>
-    <%= code_for('heredocs') %>
-    <p>
-      Double-quoted heredocs, like double-quoted strings, allow interpolation.
-    </p>
-    <p>
-      Sometimes you'd like to pass a block comment through to the generated
-      JavaScript. For example, when you need to embed a licensing header at
-      the top of a file. Block comments, which mirror the synax for heredocs,
-      are preserved in the generated code.
-    </p>
-    <%= code_for('block_comment') %>
-
-    <h2>
-      <span id="cake" class="bookmark"></span>
-      Cake, and Cakefiles
-    </h2>
-
-    <p>
-      CoffeeScript includes a simple build system similar to
-      <a href="http://www.gnu.org/software/make/">Make</a> and
-      <a href="http://rake.rubyforge.org/">Rake</a>. Naturally,
-      it's called Cake, and is used for the build and test tasks for the CoffeeScript
-      language itself. Tasks are defined in a file named <tt>Cakefile</tt>, and
-      can be invoked by running <tt>cake taskname</tt> from within the directory.
-      To print a list of all the tasks and options, just run <tt>cake</tt>.
-    </p>
-
-    <p>
-      Task definitions are written in CoffeeScript, so you can put arbitrary code
-      in your Cakefile. Define a task with a name, a long description, and the
-      function to invoke when the task is run. If your task takes a command-line
-      option, you can define the option with short and long flags, and it will
-      be made available in the <tt>options</tt> object. Here's a task that uses
-      the Node.js API to rebuild CoffeeScript's parser:
-    </p>
-    <%= code_for('cake_tasks') %>
-    <p>
-      If you need to invoke one task before another &mdash; for example, running
-      <tt>build</tt> before <tt>test</tt>, you can use the <tt>invoke</tt> function:
-      <tt>invoke 'build'</tt>
-    </p>
-
-    <h2>
-      <span id="scripts" class="bookmark"></span>
-      "text/coffeescript" Script Tags
-    </h2>
-
-    <p>
-      While it's not recommended for serious use, CoffeeScripts may be included
-      directly within the browser using <tt>&lt;script type="text/coffeescript"&gt;</tt>
-      tags. The source includes a compressed and minified version of the compiler
-      (<a href="extras/coffee-script.js">Download current version here, 43k when gzipped</a>)
-      as <tt>extras/coffee-script.js</tt>. Include this file on a page with
-      inline CoffeeScript tags, and it will compile and evaluate them in order.
-    </p>
-
-    <p>
-      In fact, the little bit of glue script that runs "Try CoffeeScript" above,
-      as well as jQuery for the menu, is implemented in just this way.
-      View source and look at the bottom of the page to see the example.
-      Including the script also gives you access to <tt>CoffeeScript.compile()</tt>
-      so you can pop open Firebug and try compiling some strings.
-    </p>
-
-    <p>
-      The usual caveats about CoffeeScript apply &mdash; your inline scripts will
-      run within a closure wrapper, so if you want to expose global variables or
-      functions, attach them to the <tt>window</tt> object.
-    </p>
-
-    <h2>
-      <span id="resources" class="bookmark"></span>
-      Resources
-    </h2>
-
-    <ul>
-      <li>
-        <a href="http://github.com/jashkenas/coffee-script/">Source Code</a><br />
-        Use <tt>bin/coffee</tt> to test your changes,<br />
-        <tt>bin/cake test</tt> to run the test suite,<br />
-        <tt>bin/cake build</tt> to rebuild the CoffeeScript compiler, and <br />
-        <tt>bin/cake build:parser</tt> to regenerate the Jison parser if you're
-        working on the grammar. <br /><br />
-        <tt>git checkout lib &amp;&amp; bin/cake build:full</tt> is a good command to run when you're working
-        on the core language. It'll refresh the lib directory
-        (in case you broke something), build your altered compiler, use that to
-        rebuild itself (a good sanity test) and then run all of the tests. If
-        they pass, there's a good chance you've made a successful change.
-      </li>
-      <li>
-        <a href="http://github.com/jashkenas/coffee-script/issues">CoffeeScript Issues</a><br />
-        Bugs reports, feature requests, and general discussion all belong here.
-      </li>
-      <li>
-        If you'd like to chat, stop by <tt>#coffeescript</tt> on Freenode in the
-        IRC client of your choice, or on
-        <a href="http://webchat.freenode.net/">webchat.freenode.net</a>.
-      </li>
-      <li>
-        <b>yeungda</b>'s <a href="http://github.com/yeungda/jcoffeescript">JCoffeeScript</a>
-        &mdash; A Java Library that uses Rhino to compile CoffeeScript, allowing
-        compilation within Java projects or on systems that Node.js doesn't support.
-      </li>
-      <li>
-        <b>defunkt</b>'s <a href="http://github.com/defunkt/coffee-mode">CoffeeScript Major Mode</a>
-        &mdash; a Emacs major mode that provides syntax highlighting, indentation
-        support, and some bonus commands.
-      </li>
-      <li>
-        <b>jashkenas</b>'s <a href="http://github.com/jashkenas/coffee-script-tmbundle">CoffeeScript TextMate Bundle</a>
-        &mdash; which provides syntax highlighting, snippet expansion, and the
-        ability to run bits of CoffeeScript from within TextMate itself.
-      </li>
-      <li>
-        <b>kchmck</b>'s <a href="http://github.com/kchmck/vim-coffee-script">Vim CoffeeScript</a>
-        &mdash; which adds Vim syntax highlighting and indentation support.
-      </li>
-      <li>
-        <b>wavded</b>'s <a href="http://github.com/wavded/gedit-coffeescript">gedit-coffeescript</a>
-        &mdash; a CoffeeScript syntax highlighter for the gedit text editor.
-      </li>
-      <li>
-        <b>yeungda</b>'s <a href="http://yeungda.github.com/coffeescript-idea/">coffeescript-idea</a>
-        &mdash; a plugin for IntelliJ IDEA and RubyMine providing syntax highlighting.
-      </li>
-      <li>
-        <b>mattly</b>'s <a href="http://github.com/mattly/rack-coffee">rack-coffee</a>
-        &mdash; a small Rack middleware for serving CoffeeScript files as
-        compiled JavaScript on the fly.
-      </li>
-      <li>
-        <b>jnicklas</b>'s <a href="http://github.com/jnicklas/bistro_car">BistroCar</a>
-        &mdash; a plugin that serves and bundles CoffeeScript from within your
-        Rails application.
-      </li>
-      <li>
-        <b>dsc</b>'s <a href="http://github.com/dsc/coffeecup">CoffeeCup</a>
-        &mdash; a Python WSGI middleware that compiles CoffeeScript to JavaScript
-        on-demand during development.
-      </li>
-      <li>
-        <b>sutto</b>'s <a href="http://github.com/Sutto/barista">Barista</a>
-        &mdash; a BistroCar alternative that integrates well with
-        <a href="http://documentcloud.github.com/jammit">Jammit</a> and Rails 3.
-      </li>
-      <li>
-        <b>inem</b> and <b>gerad</b>'s <a href="http://github.com/gerad/coffee-haml-filter">coffee-haml-filter</a>
-        &mdash; a custom filter for rendering CoffeeScript inline within
-        <a href="http://haml-lang.com/">HAML</a> templates.
-      </li>
-      <li>
-        <b>chrislloyd</b>'s <a href="http://github.com/chrislloyd/roast">Roast</a>
-        &mdash; a CoffeeScript compiler plug-in that allows you to include external
-        source files.
-      </li>
-      <li>
-        <b>andrzejsliwa</b>'s <a href="http://github.com/andrzejsliwa/coffeeapp">CoffeeApp</a>
-        &mdash; a CoffeeScript wrapper for CouchApps, web applications served
-        directly from CouchDB.
-      </li>
-      <li>
-        <b>mauricemach</b>'s <a href="http://github.com/mauricemach/coffeekup">CoffeeKup</a>
-        &mdash; Markup as CoffeeScript. After _why's
-        <a href="http://markaby.github.com/">Markaby</a>.
-      </li>
-      <li>
-        <b>jashkenas</b>'s <a href="http://jashkenas.github.com/docco/">Docco</a>
-        &mdash; a quick-and-dirty literate-programming-style documentation generator
-        for CoffeeScript. Used to produce the annotated source.
-      </li>
-    </ul>
-
-    <h2>
-      <span id="webchat" class="bookmark"></span>
-      Web Chat (IRC)
-    </h2>
-
-    <p>
-      Quick help and advice can usually be found in the CoffeeScript IRC room.
-      Join <tt>#coffeescript</tt> on <tt>irc.freenode.net</tt>, or click the
-      button below to open a webchat session on this page.
-    </p>
-
-    <p>
-      <button id="open_webchat">click to open #coffeescript</button>
-    </p>
-
-    <h2>
-      <span id="change_log" class="bookmark"></span>
-      Change Log
-    </h2>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.4</b>
-      CoffeeScript now uses appropriately-named temporary variables, and recycles
-      their references after use. Added <tt>require.extensions</tt> support for
-      <b>Node.js 0.3</b>. Loading CoffeeScript in the browser now adds just a
-      single <tt>CoffeeScript</tt> object to global scope.
-      Fixes for implicit object and block comment edge cases.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.3</b>
-      CoffeeScript <tt>switch</tt> statements now compile into JS <tt>switch</tt>
-      statements &mdash; they previously compiled into <tt>if/else</tt> chains
-      for JavaScript 1.3 compatibility.
-      Soaking a function invocation is now supported. Users of the RubyMine
-      editor should now be able to use <tt>--watch</tt> mode.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.2</b>
-      Specifying the start and end of a range literal is now optional, eg. <tt>array[3..]</tt>.
-      You can now say <tt>a not instanceof b</tt>.
-      Fixed important bugs with nested significant and non-significant indentation (Issue #637).
-      Added a <tt>--require</tt> flag that allows you to hook into the <tt>coffee</tt> command.
-      Added a custom <tt>jsl.conf</tt> file for our preferred JavaScriptLint setup.
-      Sped up Jison grammar compilation time by flattening rules for operations.
-      Block comments can now be used with JavaScript-minifier-friendly syntax.
-      Added JavaScript's compound assignment bitwise operators. Bugfixes to
-      implicit object literals with leading number and string keys, as the subject
-      of implicit calls, and as part of compound assignment.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.1</b>
-      Bugfix release for <b>0.9.1</b>. Greatly improves the handling of mixed
-      implicit objects, implicit function calls, and implicit indentation.
-      String and regex interpolation is now strictly <tt>#{ ... }</tt> (Ruby style).
-      The compiler now takes a <tt>--require</tt> flag, which specifies scripts
-      to run before compilation.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.0</b>
-      The CoffeeScript <b>0.9</b> series is considered to be a release candidate
-      for <b>1.0</b>; let's give her a shakedown cruise. <b>0.9.0</b> introduces a massive
-      backwards-incompatible change: Assignment now uses <tt>=</tt>, and object
-      literals use <tt>:</tt>, as in JavaScript. This allows us to have implicit
-      object literals, and YAML-style object definitions. Half assignments are
-      removed, in favor of <tt>+=</tt>, <tt>or=</tt>, and friends.
-      Interpolation now uses a hash mark <tt>#</tt> instead of the dollar sign
-      <tt>$</tt> &mdash; because dollar signs may be part of a valid JS identifier.
-      Downwards range comprehensions are now safe again, and are optimized to
-      straight for loops when created with integer endpoints.
-      A fast, unguarded form of object comprehension was added:
-      <tt>for all key, value of object</tt>. Mentioning the <tt>super</tt> keyword
-      with no arguments now forwards all arguments passed to the function,
-      as in Ruby. If you extend class <tt>B</tt> from parent class <tt>A</tt>, if
-      <tt>A</tt> has an <tt>extended</tt> method defined, it will be called, passing in <tt>B</tt> &mdash;
-      this enables static inheritance, among other things. Cleaner output for
-      functions bound with the fat arrow. <tt>@variables</tt> can now be used
-      in parameter lists, with the parameter being automatically set as a property
-      on the object &mdash; useful in constructors and setter functions.
-      Constructor functions can now take splats.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.7.2</b>
-      Quick bugfix (right after 0.7.1) for a problem that prevented <tt>coffee</tt>
-      command-line options from being parsed in some circumstances.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.7.1</b>
-      Block-style comments are now passed through and printed as JavaScript block
-      comments -- making them useful for licenses and copyright headers. Better
-      support for running coffee scripts standalone via hashbangs.
-      Improved syntax errors for tokens that are not in the grammar.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.7.0</b>
-      Official CoffeeScript variable style is now camelCase, as in JavaScript.
-      Reserved words are now allowed as object keys, and will be quoted for you.
-      Range comprehensions now generate cleaner code, but you have to specify <tt>by -1</tt>
-      if you'd like to iterate downward. Reporting of syntax errors is greatly
-      improved from the previous release. Running <tt>coffee</tt> with no arguments
-      now launches the REPL, with Readline support. The <tt>&lt;-</tt> bind operator
-      has been removed from CoffeeScript. The <tt>loop</tt> keyword was added,
-      which is equivalent to a <tt>while true</tt> loop. Comprehensions that contain
-      closures will now close over their variables, like the semantics of a <tt>forEach</tt>.
-      You can now use bound function in class definitions (bound to the instance).
-      For consistency, <tt>a in b</tt> is now an array presence check, and <tt>a of b</tt>
-      is an object-key check. Comments are no longer passed through to the generated
-      JavaScript.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.6.2</b>
-      The <tt>coffee</tt> command will now preserve directory structure when
-      compiling a directory full of scripts. Fixed two omissions that were preventing
-      the CoffeeScript compiler from running live within Internet Explorer.
-      There's now a syntax for block comments, similar in spirit to CoffeeScript's heredocs.
-      ECMA Harmony DRY-style pattern matching is now supported, where the name
-      of the property is the same as the name of the value: <tt>{name, length}: func</tt>.
-      Pattern matching is now allowed within comprehension variables. <tt>unless</tt>
-      is now allowed in block form. <tt>until</tt> loops were added, as the inverse
-      of <tt>while</tt> loops. <tt>switch</tt> statements are now allowed without
-      switch object clauses. Compatible
-      with Node.js <b>v0.1.95</b>.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.6.1</b>
-      Upgraded CoffeeScript for compatibility with the new Node.js <b>v0.1.90</b>
-      series.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.6.0</b>
-      Trailing commas are now allowed, a-la Python. Static
-      properties may be assigned directly within class definitions,
-      using <tt>@property</tt> notation.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.6</b>
-      Interpolation can now be used within regular expressions and heredocs, as well as
-      strings. Added the <tt>&lt;-</tt> bind operator.
-      Allowing assignment to half-expressions instead of special <tt>||=</tt>-style
-      operators. The arguments object is no longer automatically converted into
-      an array. After requiring <tt>coffee-script</tt>, Node.js can now directly
-      load <tt>.coffee</tt> files, thanks to <b>registerExtension</b>. Multiple
-      splats can now be used in function calls, arrays, and pattern matching.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.5</b>
-      String interpolation, contributed by
-      <a href="http://github.com/StanAngeloff">Stan Angeloff</a>.
-      Since <tt>--run</tt> has been the default since <b>0.5.3</b>, updating
-      <tt>--stdio</tt> and <tt>--eval</tt> to run by default, pass <tt>--compile</tt>
-      as well if you'd like to print the result.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.4</b>
-      Bugfix that corrects the Node.js global constants <tt>__filename</tt> and
-      <tt>__dirname</tt>. Tweaks for more flexible parsing of nested function
-      literals and improperly-indented comments. Updates for the latest Node.js API.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.3</b>
-      CoffeeScript now has a syntax for defining classes. Many of the core
-      components (Nodes, Lexer, Rewriter, Scope, Optparse) are using them.
-      Cakefiles can use <tt>optparse.coffee</tt> to define options for tasks.
-      <tt>--run</tt> is now the default flag for the <tt>coffee</tt> command,
-      use <tt>--compile</tt> to save JavaScripts. Bugfix for an ambiguity between
-      RegExp literals and chained divisions.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.2</b>
-      Added a compressed version of the compiler for inclusion in web pages as
-      <br  /><tt>extras/coffee-script.js</tt>. It'll automatically run any script tags
-      with type <tt>text/coffeescript</tt> for you. Added a <tt>--stdio</tt> option
-      to the <tt>coffee</tt> command, for piped-in compiles.
-    </p>
-
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.1</b>
-      Improvements to null soaking with the existential operator, including
-      soaks on indexed properties. Added conditions to <tt>while</tt> loops,
-      so you can use them as filters with <tt>when</tt>, in the same manner as
-      comprehensions.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.0</b>
-      CoffeeScript 0.5.0 is a major release, While there are no language changes,
-      the Ruby compiler has been removed in favor of a self-hosting
-      compiler written in pure CoffeeScript.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.3.2</b>
-      <tt>@property</tt> is now a shorthand for <tt>this.property</tt>.<br />
-      Switched the default JavaScript engine from Narwhal to Node.js. Pass
-      the <tt>--narwhal</tt> flag if you'd like to continue using it.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.3.0</b>
-      CoffeeScript 0.3 includes major syntax changes:
-      <br />
-      The function symbol was changed to
-      <tt>-></tt>, and the bound function symbol is now <tt>=></tt>.
-      <br />
-      Parameter lists in function definitions must now be wrapped in parentheses.
-      <br />
-      Added property soaking, with the <tt>?.</tt> operator.
-      <br />
-      Made parentheses optional, when invoking functions with arguments.
-      <br />
-      Removed the obsolete block literal syntax.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.6</b>
-      Added Python-style chained comparisons, the conditional existence
-      operator <tt>?=</tt>, and some examples from <i>Beautiful Code</i>.
-      Bugfixes relating to statement-to-expression conversion, arguments-to-array
-      conversion, and the TextMate syntax highlighter.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.5</b>
-      The conditions in switch statements can now take multiple values at once &mdash;
-      If any of them are true, the case will run. Added the long arrow <tt>==></tt>,
-      which defines and immediately binds a function to <tt>this</tt>. While loops can
-      now be used as expressions, in the same way that comprehensions can. Splats
-      can be used within pattern matches to soak up the rest of an array.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.4</b>
-      Added ECMAScript Harmony style destructuring assignment, for dealing with
-      extracting values from nested arrays and objects. Added indentation-sensitive
-      heredocs for nicely formatted strings or chunks of code.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.3</b>
-      Axed the unsatisfactory <tt>ino</tt> keyword, replacing it with <tt>of</tt> for
-      object comprehensions. They now look like: <tt>for prop, value of object</tt>.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.2</b>
-      When performing a comprehension over an object, use <tt>ino</tt>, instead
-      of <tt>in</tt>, which helps us generate smaller, more efficient code at
-      compile time.
-      <br />
-      Added <tt>::</tt> as a shorthand for saying <tt>.prototype.</tt>
-      <br />
-      The "splat" symbol has been changed from a prefix asterisk <tt>*</tt>, to
-      a postfix ellipsis <tt>...</tt>
-      <br />
-      Added JavaScript's <tt>in</tt> operator,
-      empty <tt>return</tt> statements, and empty <tt>while</tt> loops.
-      <br />
-      Constructor functions that start with capital letters now include a
-      safety check to make sure that the new instance of the object is returned.
-      <br />
-      The <tt>extends</tt> keyword now functions identically to <tt>goog.inherits</tt>
-      in Google's Closure Library.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.1</b>
-      Arguments objects are now converted into real arrays when referenced.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.0</b>
-      Major release. Significant whitespace. Better statement-to-expression
-      conversion. Splats. Splice literals. Object comprehensions. Blocks.
-      The existential operator. Many thanks to all the folks who posted issues,
-      with special thanks to
-      <a href="http://github.com/liamoc">Liam O'Connor-Davis</a> for whitespace
-      and expression help.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.6</b>
-      Bugfix for running <tt>coffee --interactive</tt> and <tt>--run</tt>
-      from outside of the CoffeeScript directory. Bugfix for nested
-      function/if-statements.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.5</b>
-      Array slice literals and array comprehensions can now both take Ruby-style
-      ranges to specify the start and end. JavaScript variable declaration is
-      now pushed up to the top of the scope, making all assignment statements into
-      expressions. You can use <tt>\</tt> to escape newlines.
-      The <tt>coffee-script</tt> command is now called <tt>coffee</tt>.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.4</b>
-      The official CoffeeScript extension is now <tt>.coffee</tt> instead of
-      <tt>.cs</tt>, which properly belongs to
-      <a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)">C#</a>.
-      Due to popular demand, you can now also use <tt>=</tt> to assign. Unlike
-      JavaScript, <tt>=</tt> can also be used within object literals, interchangeably
-      with <tt>:</tt>. Made a grammatical fix for chained function calls
-      like <tt>func(1)(2)(3)(4)</tt>. Inheritance and super no longer use
-      <tt>__proto__</tt>, so they should be IE-compatible now.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.3</b>
-      The <tt>coffee</tt> command now includes <tt>--interactive</tt>,
-      which launches an interactive CoffeeScript session, and <tt>--run</tt>,
-      which directly compiles and executes a script. Both options depend on a
-      working installation of Narwhal.
-      The <tt>aint</tt> keyword has been replaced by <tt>isnt</tt>, which goes
-      together a little smoother with <tt>is</tt>.
-      Quoted strings are now allowed as identifiers within object literals: eg.
-      <tt>{"5+5": 10}</tt>.
-      All assignment operators now use a colon: <tt>+:</tt>, <tt>-:</tt>,
-      <tt>*:</tt>, etc.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.2</b>
-      Fixed a bug with calling <tt>super()</tt> through more than one level of
-      inheritance, with the re-addition of the <tt>extends</tt> keyword.
-      Added experimental <a href="http://narwhaljs.org/">Narwhal</a>
-      support (as a Tusk package), contributed by
-      <a href="http://tlrobinson.net/">Tom Robinson</a>, including
-      <b>bin/cs</b> as a CoffeeScript REPL and interpreter.
-      New <tt>--no-wrap</tt> option to suppress the safety function
-      wrapper.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.1</b>
-      Added <tt>instanceof</tt> and <tt>typeof</tt> as operators.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.0</b>
-      Initial CoffeeScript release.
-    </p>
-
-  </div>
-
-  <script type="text/coffeescript">
-
-    # Set up the compilation function, to run when you stop typing.
-    compile_source = ->
-      source = $('#repl_source').val()
-      window.compiled_js = ''
-      try
-        window.compiled_js = CoffeeScript.compile source, bare: on
-        $('#repl_results').text window.compiled_js
-        $('#error').hide()
-      catch error
-        $('#error').text(error.message).show()
-
-    # Listen for keypresses and recompile.
-    $('#repl_source').keyup -> compile_source()
-
-    # Eval the compiled js.
-    $('button.run').click ->
-      try
-        eval window.compiled_js
-      catch error then alert error
-
-    current_nav = null
-
-    # Helper to hide the menus.
-    close_menus = ->
-      if current_nav
-        current_nav.removeClass 'active'
-        document.body.className = 'minimized'
-      current_nav = null
-
-    # Bind navigation buttons to open the menus.
-    $('.navigation').click (e) ->
-      return if e.target.tagName.toLowerCase() is 'a'
-      if this isnt (current_nav and current_nav[0])
-        close_menus()
-        current_nav = $(this)
-        current_nav.addClass 'active'
-      false
-
-    $(document.body).click -> close_menus()
-
-    $('.navigation .full_screen').click ->
-      document.body.className = 'full_screen'
-
-    $('.navigation .minimize').click ->
-      document.body.className = 'minimized'
-
-    $('#open_webchat').click ->
-      $(this).replaceWith $('<iframe src="http://webchat.freenode.net/?channels=coffeescript" width="625" height="400"></iframe>')
-
-    compile_source()
-
-  </script>
-
-  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
-  <script src="extras/coffee-script.js"></script>
-
-</body>
-</html>
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/aliases.js b/node/node_modules/jade/support/coffee-script/documentation/js/aliases.js
deleted file mode 100644 (file)
index a3675d6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-var volume, winner;
-if (ignition === true) {
-  launch();
-}
-if (band !== SpinalTap) {
-  volume = 10;
-}
-if (answer !== false) {
-  letTheWildRumpusBegin();
-}
-if (car.speed < limit) {
-  accelerate();
-}
-if ((47 === pick || 92 === pick || 13 === pick)) {
-  winner = true;
-}
-print(inspect("My name is " + this.name));
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/array_comprehensions.js b/node/node_modules/jade/support/coffee-script/documentation/js/array_comprehensions.js
deleted file mode 100644 (file)
index 2260db7..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-var _i, _len, _len2, _ref, _result, food, lunch, pos, roid, roid2;
-lunch = (function() {
-  _result = []; _ref = ['toast', 'cheese', 'wine'];
-  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
-    food = _ref[_i];
-    _result.push(eat(food));
-  }
-  return _result;
-})();
-for (pos = 0, _len = asteroids.length; pos < _len; pos++) {
-  roid = asteroids[pos];
-  for (_i = 0, _len2 = asteroids.length; _i < _len2; _i++) {
-    roid2 = asteroids[_i];
-    if (roid !== roid2) {
-      if (roid.overlaps(roid2)) {
-        roid.explode();
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/block_comment.js b/node/node_modules/jade/support/coffee-script/documentation/js/block_comment.js
deleted file mode 100644 (file)
index ae602e6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*
-CoffeeScript Compiler v0.9.4
-Released under the MIT License
-*/
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/cake_tasks.js b/node/node_modules/jade/support/coffee-script/documentation/js/cake_tasks.js
deleted file mode 100644 (file)
index b1c0914..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-var fs;
-fs = require('fs');
-option('-o', '--output [DIR]', 'directory for compiled code');
-task('build:parser', 'rebuild the Jison parser', function(options) {
-  var code, dir;
-  require('jison');
-  code = require('./lib/grammar').parser.generate();
-  dir = options.output || 'lib';
-  return fs.writeFile("" + dir + "/parser.js", code);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/classes.js b/node/node_modules/jade/support/coffee-script/documentation/js/classes.js
deleted file mode 100644 (file)
index 279885f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-var Animal, Horse, Snake, sam, tom;
-var __extends = function(child, parent) {
-  var ctor = function() {};
-  ctor.prototype = parent.prototype;
-  child.prototype = new ctor();
-  child.prototype.constructor = child;
-  if (typeof parent.extended === "function") parent.extended(child);
-  child.__super__ = parent.prototype;
-};
-Animal = (function() {
-  return function Animal(_arg) {
-    this.name = _arg;
-    return this;
-  };
-})();
-Animal.prototype.move = function(meters) {
-  return alert(this.name + " moved " + meters + "m.");
-};
-Snake = (function() {
-  return function Snake() {
-    return Animal.apply(this, arguments);
-  };
-})();
-__extends(Snake, Animal);
-Snake.prototype.move = function() {
-  alert("Slithering...");
-  return Snake.__super__.move.call(this, 5);
-};
-Horse = (function() {
-  return function Horse() {
-    return Animal.apply(this, arguments);
-  };
-})();
-__extends(Horse, Animal);
-Horse.prototype.move = function() {
-  alert("Galloping...");
-  return Horse.__super__.move.call(this, 45);
-};
-sam = new Snake("Sammy the Python");
-tom = new Horse("Tommy the Palomino");
-sam.move();
-tom.move();
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/comparisons.js b/node/node_modules/jade/support/coffee-script/documentation/js/comparisons.js
deleted file mode 100644 (file)
index e1ce0cc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var cholesterol, healthy;
-cholesterol = 127;
-healthy = (200 > cholesterol) && (cholesterol > 60);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/conditionals.js b/node/node_modules/jade/support/coffee-script/documentation/js/conditionals.js
deleted file mode 100644 (file)
index bee05fb..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-var date, mood, options;
-if (singing) {
-  mood = greatlyImproved;
-}
-if (happy && knowsIt) {
-  clapsHands();
-  chaChaCha();
-} else {
-  showIt();
-}
-date = friday ? sue : jill;
-options || (options = defaults);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/embedded.js b/node/node_modules/jade/support/coffee-script/documentation/js/embedded.js
deleted file mode 100644 (file)
index 3db2b0f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-var hi;
-hi = function() {
-  return [document.title, "Hello JavaScript"].join(": ");
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/existence.js b/node/node_modules/jade/support/coffee-script/documentation/js/existence.js
deleted file mode 100644 (file)
index 6fc021b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-var solipsism, speed;
-if ((typeof mind !== "undefined" && mind !== null) && !(typeof world !== "undefined" && world !== null)) {
-  solipsism = true;
-}
-(typeof speed !== "undefined" && speed !== null) ? speed : (speed = 140);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/expressions.js b/node/node_modules/jade/support/coffee-script/documentation/js/expressions.js
deleted file mode 100644 (file)
index 6ea42bc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-var eldest, grade;
-grade = function(student) {
-  return student.excellentWork ? "A+" : (student.okayStuff ? (student.triedHard ? "B" : "B-") : "C");
-};
-eldest = 24 > 21 ? "Liz" : "Ike";
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/expressions_assignment.js b/node/node_modules/jade/support/coffee-script/documentation/js/expressions_assignment.js
deleted file mode 100644 (file)
index e75323d..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-var one, six, three, two;
-six = (one = 1) + (two = 2) + (three = 3);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/expressions_comprehension.js b/node/node_modules/jade/support/coffee-script/documentation/js/expressions_comprehension.js
deleted file mode 100644 (file)
index 771e67f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-var _result, globals, name;
-var __hasProp = Object.prototype.hasOwnProperty;
-globals = (function() {
-  _result = [];
-  for (name in window) {
-    if (!__hasProp.call(window, name)) continue;
-    _result.push(name);
-  }
-  return _result;
-})().slice(0, 10);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/expressions_try.js b/node/node_modules/jade/support/coffee-script/documentation/js/expressions_try.js
deleted file mode 100644 (file)
index 19a9506..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-alert((function() {
-  try {
-    return nonexistent / undefined;
-  } catch (error) {
-    return "And the error is ... " + error;
-  }
-})());
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/fat_arrow.js b/node/node_modules/jade/support/coffee-script/documentation/js/fat_arrow.js
deleted file mode 100644 (file)
index 9f8f50d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-var Account;
-var __bind = function(func, context) {
-  return function() { return func.apply(context, arguments); };
-};
-Account = function(customer, cart) {
-  this.customer = customer;
-  this.cart = cart;
-  return $('.shopping_cart').bind('click', __bind(function(event) {
-    return this.customer.purchase(this.cart);
-  }, this));
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/functions.js b/node/node_modules/jade/support/coffee-script/documentation/js/functions.js
deleted file mode 100644 (file)
index ec38bc7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-var cube, square;
-square = function(x) {
-  return x * x;
-};
-cube = function(x) {
-  return square(x) * x;
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/heredocs.js b/node/node_modules/jade/support/coffee-script/documentation/js/heredocs.js
deleted file mode 100644 (file)
index 0cbcb2a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-var html;
-html = '<strong>\n  cup of coffeescript\n</strong>';
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/interpolation.js b/node/node_modules/jade/support/coffee-script/documentation/js/interpolation.js
deleted file mode 100644 (file)
index 6b4e124..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var author, quote;
-author = "Wittgenstein";
-quote = ("A picture is a fact. -- " + author);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/interpolation_expression.js b/node/node_modules/jade/support/coffee-script/documentation/js/interpolation_expression.js
deleted file mode 100644 (file)
index 166e08d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-var dates, sentence, sep;
-sentence = ("" + (22 / 7) + " is a decent approximation of π");
-sep = "[.\\/\\- ]";
-dates = /\d+#{sep}\d+#{sep}\d+/g;
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/multiple_return_values.js b/node/node_modules/jade/support/coffee-script/documentation/js/multiple_return_values.js
deleted file mode 100644 (file)
index e4bf1e6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-var _ref, city, forecast, temp, weatherReport;
-weatherReport = function(location) {
-  return [location, 72, "Mostly Sunny"];
-};
-_ref = weatherReport("Berkeley, CA"), city = _ref[0], temp = _ref[1], forecast = _ref[2];
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/object_comprehensions.js b/node/node_modules/jade/support/coffee-script/documentation/js/object_comprehensions.js
deleted file mode 100644 (file)
index 8d719ed..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-var _result, age, ages, child, yearsOld;
-var __hasProp = Object.prototype.hasOwnProperty;
-yearsOld = {
-  max: 10,
-  ida: 9,
-  tim: 11
-};
-ages = (function() {
-  _result = [];
-  for (child in yearsOld) {
-    if (!__hasProp.call(yearsOld, child)) continue;
-    age = yearsOld[child];
-    _result.push(child + " is " + age);
-  }
-  return _result;
-})();
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/object_extraction.js b/node/node_modules/jade/support/coffee-script/documentation/js/object_extraction.js
deleted file mode 100644 (file)
index 90eff3d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-var _ref, _ref2, city, futurists, name, street;
-futurists = {
-  sculptor: "Umberto Boccioni",
-  painter: "Vladimir Burliuk",
-  poet: {
-    name: "F.T. Marinetti",
-    address: ["Via Roma 42R", "Bellagio, Italy 22021"]
-  }
-};
-_ref = futurists.poet, name = _ref.name, _ref2 = _ref.address, street = _ref2[0], city = _ref2[1];
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/objects_and_arrays.js b/node/node_modules/jade/support/coffee-script/documentation/js/objects_and_arrays.js
deleted file mode 100644 (file)
index 57b544d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-var kids, matrix, singers, song;
-song = ["do", "re", "mi", "fa", "so"];
-singers = {
-  Jagger: "Rock",
-  Elvis: "Roll"
-};
-matrix = [1, 0, 1, 0, 0, 1, 1, 1, 0];
-kids = {
-  brother: {
-    name: "Max",
-    age: 11
-  },
-  sister: {
-    name: "Ida",
-    age: 9
-  }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/objects_reserved.js b/node/node_modules/jade/support/coffee-script/documentation/js/objects_reserved.js
deleted file mode 100644 (file)
index db54cf6..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-$('.account').css({
-  "class": 'active'
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/overview.js b/node/node_modules/jade/support/coffee-script/documentation/js/overview.js
deleted file mode 100644 (file)
index 5bdbffa..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-var _i, _len, _result, cubes, list, math, num, number, opposite, race, square;
-var __slice = Array.prototype.slice;
-number = 42;
-opposite = true;
-if (opposite) {
-  number = -42;
-}
-square = function(x) {
-  return x * x;
-};
-list = [1, 2, 3, 4, 5];
-math = {
-  root: Math.sqrt,
-  square: square,
-  cube: function(x) {
-    return x * square(x);
-  }
-};
-race = function(winner) {
-  var runners;
-  runners = __slice.call(arguments, 1);
-  return print(winner, runners);
-};
-if (typeof elvis !== "undefined" && elvis !== null) {
-  alert("I knew it!");
-}
-cubes = (function() {
-  _result = [];
-  for (_i = 0, _len = list.length; _i < _len; _i++) {
-    num = list[_i];
-    _result.push(math.cube(num));
-  }
-  return _result;
-})();
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/parallel_assignment.js b/node/node_modules/jade/support/coffee-script/documentation/js/parallel_assignment.js
deleted file mode 100644 (file)
index a24e7f6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-var _ref, theBait, theSwitch;
-theBait = 1000;
-theSwitch = 0;
-_ref = [theSwitch, theBait], theBait = _ref[0], theSwitch = _ref[1];
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/patterns_and_splats.js b/node/node_modules/jade/support/coffee-script/documentation/js/patterns_and_splats.js
deleted file mode 100644 (file)
index 46b2260..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-var _ref, close, contents, open, tag;
-var __slice = Array.prototype.slice;
-tag = "<impossible>";
-_ref = tag.split(""), open = _ref[0], contents = __slice.call(_ref, 1, _ref.length - 1), close = _ref[_ref.length - 1];
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/prototypes.js b/node/node_modules/jade/support/coffee-script/documentation/js/prototypes.js
deleted file mode 100644 (file)
index 418bc10..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-String.prototype.dasherize = function() {
-  return this.replace(/_/g, "-");
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/range_comprehensions.js b/node/node_modules/jade/support/coffee-script/documentation/js/range_comprehensions.js
deleted file mode 100644 (file)
index 220d689..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-var _result, countdown, deliverEggs, num;
-countdown = (function() {
-  _result = [];
-  for (num = 10; num >= 1; num--) {
-    _result.push(num);
-  }
-  return _result;
-})();
-deliverEggs = function() {
-  var _ref, _result2, dozen, i;
-  _result2 = []; _ref = eggs.length;
-  for (i = 0; (0 <= _ref ? i < _ref : i > _ref); i += 12) {
-    _result2.push((function() {
-      dozen = eggs.slice(i, i + 12);
-      return deliver(new eggCarton(dozen));
-    })());
-  }
-  return _result2;
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/scope.js b/node/node_modules/jade/support/coffee-script/documentation/js/scope.js
deleted file mode 100644 (file)
index 478badf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-var changeNumbers, inner, outer;
-outer = 1;
-changeNumbers = function() {
-  var inner;
-  inner = -1;
-  return (outer = 10);
-};
-inner = changeNumbers();
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/slices.js b/node/node_modules/jade/support/coffee-script/documentation/js/slices.js
deleted file mode 100644 (file)
index 064c502..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-var copy, numbers, threeToSix;
-numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
-threeToSix = numbers.slice(3, 6 + 1);
-copy = numbers.slice(0, numbers.length);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/soaks.js b/node/node_modules/jade/support/coffee-script/documentation/js/soaks.js
deleted file mode 100644 (file)
index 5cf887e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-var _ref, _ref2;
-(((_ref = lottery.drawWinner()) != null) ? (((_ref2 = _ref.address) != null) ? _ref2.zipcode : undefined) : undefined);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/splats.js b/node/node_modules/jade/support/coffee-script/documentation/js/splats.js
deleted file mode 100644 (file)
index 3f16b83..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-var awardMedals, contenders, gold, rest, silver;
-var __slice = Array.prototype.slice;
-gold = (silver = (rest = "unknown"));
-awardMedals = function(first, second) {
-  var others;
-  others = __slice.call(arguments, 2);
-  gold = first;
-  silver = second;
-  return (rest = others);
-};
-contenders = ["Michael Phelps", "Liu Xiang", "Yao Ming", "Allyson Felix", "Shawn Johnson", "Roman Sebrle", "Guo Jingjing", "Tyson Gay", "Asafa Powell", "Usain Bolt"];
-awardMedals.apply(awardMedals, contenders);
-alert("Gold: " + gold);
-alert("Silver: " + silver);
-alert("The Field: " + rest);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/splices.js b/node/node_modules/jade/support/coffee-script/documentation/js/splices.js
deleted file mode 100644 (file)
index 944f1e3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var _ref, numbers;
-numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
-([].splice.apply(numbers, [3, 6 - 3 + 1].concat(_ref = [-3, -4, -5, -6])), _ref);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/strings.js b/node/node_modules/jade/support/coffee-script/documentation/js/strings.js
deleted file mode 100644 (file)
index cfdf5d5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-var mobyDick;
-mobyDick = "Call me Ishmael. Some years ago -- never mind how long precisely -- having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world...";
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/switch.js b/node/node_modules/jade/support/coffee-script/documentation/js/switch.js
deleted file mode 100644 (file)
index 2449cb9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-switch (day) {
-  case "Mon":
-    go(work);
-    break;
-  case "Tue":
-    go(relax);
-    break;
-  case "Thu":
-    go(iceFishing);
-    break;
-  case "Fri":
-  case "Sat":
-    if (day === bingoDay) {
-      go(bingo);
-      go(dancing);
-    }
-    break;
-  case "Sun":
-    go(church);
-    break;
-  default:
-    go(work);
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/try.js b/node/node_modules/jade/support/coffee-script/documentation/js/try.js
deleted file mode 100644 (file)
index 97b089f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-try {
-  allHellBreaksLoose();
-  catsAndDogsLivingTogether();
-} catch (error) {
-  print(error);
-} finally {
-  cleanUp();
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/documentation/js/while.js b/node/node_modules/jade/support/coffee-script/documentation/js/while.js
deleted file mode 100644 (file)
index 910b839..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-var _result, lyrics, num;
-if (this.studyingEconomics) {
-  while (supply > demand) {
-    buy();
-  }
-  while (!(supply > demand)) {
-    sell();
-  }
-}
-num = 6;
-lyrics = (function() {
-  _result = [];
-  while (num -= 1) {
-    _result.push(num + " little monkeys, jumping on the bed.    One fell out and bumped his head.");
-  }
-  return _result;
-})();
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/examples/beautiful_code/binary_search.coffee b/node/node_modules/jade/support/coffee-script/examples/beautiful_code/binary_search.coffee
deleted file mode 100644 (file)
index 6ad42c8..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# Beautiful Code, Chapter 6.
-# The implementation of binary search that is tested.
-
-# Return the index of an element in a sorted list. (or -1, if not present)
-index = (list, target) ->
-  [low, high] = [0, list.length]
-  while low < high
-    mid = (low + high) >> 1
-    val = list[mid]
-    return mid if val is target
-    if val < target then low = mid + 1 else high = mid
-  return -1
-
-puts 2 is index [10, 20, 30, 40, 50], 30
-puts 4 is index [-97, 35, 67, 88, 1200], 1200
-puts 0 is index [0, 45, 70], 0
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/examples/beautiful_code/quicksort_runtime.coffee b/node/node_modules/jade/support/coffee-script/examples/beautiful_code/quicksort_runtime.coffee
deleted file mode 100644 (file)
index 27794f4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# Beautiful Code, Chapter 3.
-# Produces the expected runtime of Quicksort, for every integer from 1 to N.
-
-runtime = (N) ->
-  [sum, t] = [0, 0]
-  for n in [1..N]
-    sum += 2 * t
-    t = n - 1 + sum / n
-  t
-
-puts runtime(3) is 2.6666666666666665
-puts runtime(5) is 7.4
-puts runtime(8) is 16.92142857142857
diff --git a/node/node_modules/jade/support/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee b/node/node_modules/jade/support/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee
deleted file mode 100644 (file)
index 99ed0a1..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# Beautiful Code, Chapter 1.
-# Implements a regular expression matcher that supports character matches,
-# '.', '^', '$', and '*'.
-
-# Search for the regexp anywhere in the text.
-match = (regexp, text) ->
-  return match_here(regexp.slice(1), text) if regexp[0] is '^'
-  while text
-    return true if match_here(regexp, text)
-    text = text.slice(1)
-  false
-
-# Search for the regexp at the beginning of the text.
-match_here = (regexp, text) ->
-  [cur, next] = [regexp[0], regexp[1]]
-  if regexp.length is 0 then return true
-  if next is '*' then return match_star(cur, regexp.slice(2), text)
-  if cur is '$' and not next then return text.length is 0
-  if text and (cur is '.' or cur is text[0]) then return match_here(regexp.slice(1), text.slice(1))
-  false
-
-# Search for a kleene star match at the beginning of the text.
-match_star = (c, regexp, text) ->
-  loop
-    return true if match_here(regexp, text)
-    return false unless text and (text[0] is c or c is '.')
-    text = text.slice(1)
-
-puts match("ex", "some text")
-puts match("s..t", "spit")
-puts match("^..t", "buttercup")
-puts match("i..$", "cherries")
-puts match("o*m", "vrooooommm!")
-puts match("^hel*o$", "hellllllo")
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/examples/blocks.coffee b/node/node_modules/jade/support/coffee-script/examples/blocks.coffee
deleted file mode 100644 (file)
index f9e67ff..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# After wycats' http://yehudakatz.com/2010/02/07/the-building-blocks-of-ruby/
-
-# Sinatra.
-get '/hello', ->
-  'Hello World'
-
-
-# Append.
-append = (location, data) ->
-  path = new Pathname location
-  throw new Error("Location does not exist") unless path.exists()
-
-  File.open path, 'a', (file) ->
-    file.puts YAML.dump data
-
-  data
-
-
-# Rubinius' File.open implementation.
-File.open = (path, mode, block) ->
-  io = new File path, mode
-
-  return io unless block
-
-  try
-    block io
-  finally
-    io.close() unless io.closed()
-
-
-# Write.
-write = (location, data) ->
-  path = new Pathname location
-  raise "Location does not exist" unless path.exists()
-
-  File.open path, 'w', (file) ->
-    return false if Digest.MD5.hexdigest(file.read()) is data.hash()
-    file.puts YAML.dump data
-    true
-
-
-# Rails' respond_to.
-index = ->
-  people = Person.find 'all'
-
-  respond_to (format) ->
-    format.html()
-    format.xml -> render xml: people.xml()
-
-
-# Synchronization.
-synchronize = (block) ->
-  lock()
-  try block() finally unlock()
diff --git a/node/node_modules/jade/support/coffee-script/examples/code.coffee b/node/node_modules/jade/support/coffee-script/examples/code.coffee
deleted file mode 100644 (file)
index 255feba..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-# Functions:
-square = (x) -> x * x
-
-sum = (x, y) -> x + y
-
-odd = (x) -> x % 2 isnt 0
-
-even = (x) -> x % 2 is 0
-
-run_loop = ->
-  fire_events((e) -> e.stopPropagation())
-  listen()
-  wait()
-
-# Objects:
-dense_object_literal = {one: 1, two: 2, three: 3}
-
-spaced_out_multiline_object =
-  pi: 3.14159
-  list: [1, 2, 3, 4]
-  regex: /match[ing](every|thing|\/)/gi
-  three: new Idea
-
-  inner_obj:
-    freedom: -> _.freedom()
-
-# Arrays:
-stooges = [{moe: 45}, {curly: 43}, {larry: 46}]
-
-exponents = [((x) -> x), ((x) -> x * x), ((x) -> x * x * x)]
-
-empty = []
-
-multiline = [
-  'line one'
-  'line two'
-]
-
-# Conditionals and ternaries.
-if submarine.shields_up
-  full_speed_ahead()
-  fire_torpedos()
-else if submarine.sinking
-  abandon_ship()
-else
-  run_away()
-
-eldest = if 25 > 21 then liz else marge
-
-decoration = medal_of_honor if war_hero
-
-go_to_sleep() unless coffee
-
-# Returning early:
-race = ->
-  run()
-  walk()
-  crawl()
-  if tired then return sleep()
-  race()
-
-# Conditional assignment:
-good or= evil
-wine and= cheese
-
-# Nested property access and calls.
-((moon.turn(360))).shapes[3].move({x: 45, y: 30}).position['top'].offset('x')
-
-a = b = c = 5
-
-# Embedded JavaScript.
-callback(
-  `function(e) { e.stop(); }`
-)
-
-# Try/Catch/Finally/Throw.
-try
-  all_hell_breaks_loose()
-  dogs_and_cats_living_together()
-  throw "up"
-catch error
-  print(error)
-finally
-  clean_up()
-
-try all_hell_breaks_loose() catch error then print(error) finally clean_up()
-
-# While loops, break and continue.
-while demand > supply
-  sell()
-  restock()
-
-while supply > demand then buy()
-
-loop
-  break if broken
-  continue if continuing
-
-# Unary operators.
-!!true
-
-# Lexical scoping.
-v_1 = 5
-change_a_and_set_b = ->
-  v_1 = 10
-  v_2 = 15
-v_2 = 20
-
-# Array comprehensions.
-supper = food.capitalize() for food in ['toast', 'cheese', 'wine']
-
-drink bottle for bottle, i in ['soda', 'wine', 'lemonade'] when even i
-
-# Switch statements ("else" serves as a default).
-activity = switch day
-  when "Tuesday"   then eat_breakfast()
-  when "Sunday"    then go_to_church()
-  when "Saturday"  then go_to_the_park()
-  when "Wednesday"
-    if day is bingo_day
-      go_to_bingo()
-    else
-      eat_breakfast()
-      go_to_work()
-      eat_dinner()
-  else go_to_work()
-
-# Semicolons can optionally be used instead of newlines.
-wednesday = -> eat_breakfast(); go_to_work(); eat_dinner()
-
-# Array slice literals.
-zero_to_nine = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-three_to_six = zero_to_nine[3..6]
-
-# Multiline strings with inner quotes.
-story = "Lorem ipsum dolor \"sit\" amet, consectetuer adipiscing elit,
-sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna
-aliquam erat volutpat. Ut wisi enim ad."
-
-# Inheritance and calling super.
-class Animal
-  constructor: (@name) ->
-
-  move: (meters) ->
-    alert this.name + " moved " + meters + "m."
-
-class Snake extends Animal
-  move: ->
-    alert 'Slithering...'
-    super 5
-
-class Horse extends Animal
-  move: ->
-    alert 'Galloping...'
-    super 45
-
-sam = new Snake "Sammy the Snake"
-tom = new Horse "Tommy the Horse"
-
-sam.move()
-tom.move()
-
-# Numbers.
-a_googol =  1e100
-hex      =  0xff0000
-negative =  -1.0
-infinity =  Infinity
-nan      =  NaN
-
-# Deleting.
-delete secret.identity
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/examples/computer_science/README b/node/node_modules/jade/support/coffee-script/examples/computer_science/README
deleted file mode 100644 (file)
index 1046f9f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Ported from Nicholas Zakas' collection of computer science fundamentals, written
-in JavaScript. Originals available here:
-
-http://github.com/nzakas/computer-science-in-javascript
diff --git a/node/node_modules/jade/support/coffee-script/examples/computer_science/binary_search.coffee b/node/node_modules/jade/support/coffee-script/examples/computer_science/binary_search.coffee
deleted file mode 100644 (file)
index 69fc678..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Uses a binary search algorithm to locate a value in the specified array.
-binary_search = (items, value) ->
-
-  start = 0
-  stop  = items.length - 1
-  pivot = Math.floor (start + stop) / 2
-
-  while items[pivot] isnt value and start < stop
-
-    # Adjust the search area.
-    stop  = pivot - 1 if value < items[pivot]
-    start = pivot + 1 if value > items[pivot]
-
-    # Recalculate the pivot.
-    pivot = Math.floor (stop + start) / 2
-
-  # Make sure we've found the correct value.
-  if items[pivot] is value then pivot else -1
-
-
-# Test the function.
-puts 2 is binary_search [10, 20, 30, 40, 50], 30
-puts 4 is binary_search [-97, 35, 67, 88, 1200], 1200
-puts 0 is binary_search [0, 45, 70], 0
-puts(-1 is binary_search [0, 45, 70], 10)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/examples/computer_science/bubble_sort.coffee b/node/node_modules/jade/support/coffee-script/examples/computer_science/bubble_sort.coffee
deleted file mode 100644 (file)
index 4757c8e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# A bubble sort implementation, sorting the given array in-place.
-bubble_sort = (list) ->
-  for i in [0...list.length]
-    for j in [0...list.length - i]
-      [list[j], list[j+1]] = [list[j+1], list[j]] if list[j] > list[j+1]
-  list
-
-
-# Test the function.
-puts bubble_sort([3, 2, 1]).join(' ') is '1 2 3'
-puts bubble_sort([9, 2, 7, 0, 1]).join(' ') is '0 1 2 7 9'
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/examples/computer_science/linked_list.coffee b/node/node_modules/jade/support/coffee-script/examples/computer_science/linked_list.coffee
deleted file mode 100644 (file)
index 95bb2ef..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# "Classic" linked list implementation that doesn't keep track of its size.
-class LinkedList
-
-  constructor: ->
-    this._head = null # Pointer to the first item in the list.
-
-
-  # Appends some data to the end of the list. This method traverses the existing
-  # list and places the value at the end in a new node.
-  add: (data) ->
-
-    # Create a new node object to wrap the data.
-    node = data: data, next: null
-
-    current = this._head or= node
-
-    if this._head isnt node
-      (current = current.next) while current.next
-      current.next = node
-
-    this
-
-
-  # Retrieves the data at the given position in the list.
-  item: (index) ->
-
-    # Check for out-of-bounds values.
-    return null if index < 0
-
-    current = this._head or null
-    i = -1
-
-    # Advance through the list.
-    (current = current.next) while current and index > (i += 1)
-
-    # Return null if we've reached the end.
-    current and current.data
-
-
-  # Remove the item from the given location in the list.
-  remove: (index) ->
-
-    # Check for out-of-bounds values.
-    return null if index < 0
-
-    current = this._head or null
-    i = -1
-
-    # Special case: removing the first item.
-    if index is 0
-      this._head = current.next
-    else
-
-      # Find the right location.
-      ([previous, current] = [current, current.next]) while index > (i += 1)
-
-      # Skip over the item to remove.
-      previous.next = current.next
-
-    # Return the value.
-    current and current.data
-
-
-  # Calculate the number of items in the list.
-  size: ->
-    current = this._head
-    count = 0
-
-    while current
-      count += 1
-      current = current.next
-
-    count
-
-
-  # Convert the list into an array.
-  toArray: ->
-    result  = []
-    current = this._head
-
-    while current
-      result.push current.data
-      current = current.next
-
-    result
-
-
-  # The string representation of the linked list.
-  toString: -> this.toArray().toString()
-
-
-# Tests.
-list = new LinkedList
-
-list.add("Hi")
-puts list.size()  is 1
-puts list.item(0) is "Hi"
-puts list.item(1) is null
-
-list = new LinkedList
-list.add("zero").add("one").add("two")
-puts list.size()     is 3
-puts list.item(2)    is "two"
-puts list.remove(1)  is "one"
-puts list.item(0)    is "zero"
-puts list.item(1)    is "two"
-puts list.size()     is 2
-puts list.item(-10)  is null
diff --git a/node/node_modules/jade/support/coffee-script/examples/computer_science/luhn_algorithm.coffee b/node/node_modules/jade/support/coffee-script/examples/computer_science/luhn_algorithm.coffee
deleted file mode 100644 (file)
index db1c544..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# Use the Luhn algorithm to validate a numeric identifier, such as credit card
-# numbers, national insurance numbers, etc.
-# See: http://en.wikipedia.org/wiki/Luhn_algorithm
-
-is_valid_identifier = (identifier) ->
-
-  sum = 0
-  alt = false
-
-  for i in [(identifier.length - 1)..0]
-
-    # Get the next digit.
-    num = parseInt identifier.charAt(i), 10
-
-    # If it's not a valid number, abort.
-    return false if isNaN(num)
-
-    # If it's an alternate number...
-    if alt
-      num *= 2
-      num = (num % 10) + 1 if num > 9
-
-    # Flip the alternate bit.
-    alt = !alt
-
-    # Add to the rest of the sum.
-    sum += num
-
-  # Determine if it's valid.
-  sum % 10 is 0
-
-
-# Tests.
-puts is_valid_identifier("49927398716")      is true
-puts is_valid_identifier("4408041234567893") is true
-puts is_valid_identifier("4408041234567890") is false
diff --git a/node/node_modules/jade/support/coffee-script/examples/computer_science/merge_sort.coffee b/node/node_modules/jade/support/coffee-script/examples/computer_science/merge_sort.coffee
deleted file mode 100644 (file)
index 4fb6907..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# Sorts an array in ascending natural order using merge sort.
-merge_sort = (list) ->
-
-  return list if list.length is 1
-
-  result  = []
-  pivot   = Math.floor list.length / 2
-  left    = merge_sort list.slice 0, pivot
-  right   = merge_sort list.slice pivot
-
-  while left.length and right.length
-    result.push(if left[0] < right[0] then left.shift() else right.shift())
-
-  result.concat(left).concat(right)
-
-
-# Test the function.
-puts merge_sort([3, 2, 1]).join(' ') is '1 2 3'
-puts merge_sort([9, 2, 7, 0, 1]).join(' ') is '0 1 2 7 9'
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/examples/computer_science/selection_sort.coffee b/node/node_modules/jade/support/coffee-script/examples/computer_science/selection_sort.coffee
deleted file mode 100644 (file)
index 1e87d56..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# An in-place selection sort.
-selection_sort = (list) ->
-  len = list.length
-
-  # For each item in the list.
-  for i in [0...len]
-
-    # Set the minimum to this position.
-    min = i
-
-    # Check the rest of the array to see if anything is smaller.
-    (min = j if list[j] < list[min]) for j in [(i+1)...len]
-
-    # Swap if a smaller item has been found.
-    [list[i], list[min]] = [list[min], list[i]] if i isnt min
-
-  # The list is now sorted.
-  list
-
-
-# Test the function.
-puts selection_sort([3, 2, 1]).join(' ') is '1 2 3'
-puts selection_sort([9, 2, 7, 0, 1]).join(' ') is '0 1 2 7 9'
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/examples/poignant.coffee b/node/node_modules/jade/support/coffee-script/examples/poignant.coffee
deleted file mode 100644 (file)
index dc07ef8..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-# Examples from the Poignant Guide.
-
-# ['toast', 'cheese', 'wine'].each { |food| print food.capitalize }
-
-['toast', 'wine', 'cheese'].each (food) -> print food.capitalize()
-
-
-
-# class LotteryTicket
-#   def picks;           @picks;            end
-#   def picks=(var);     @picks = var;      end
-#   def purchased;       @purchased;        end
-#   def purchased=(var); @purchased = var;  end
-# end
-
-LotteryTicket =
-  get_picks:      -> @picks
-  set_picks:      (@picks) ->
-  get_purchased:  -> @purchase
-  set_purchased:  (@purchased) ->
-
-
-
-# class << LotteryDraw
-#   def play
-#     result = LotteryTicket.new_random
-#     winners = {}
-#     @@tickets.each do |buyer, ticket_list|
-#       ticket_list.each do |ticket|
-#         score = ticket.score( result )
-#         next if score.zero?
-#         winners[buyer] ||= []
-#         winners[buyer] << [ ticket, score ]
-#       end
-#     end
-#     @@tickets.clear
-#     winners
-#   end
-# end
-
-LotteryDraw =
-  play: ->
-    result  = LotteryTicket.new_random()
-    winners = {}
-    this.tickets.each (buyer, ticket_list) ->
-      ticket_list.each (ticket) ->
-        score = ticket.score result
-        return if score is 0
-        winners[buyer] or= []
-        winners[buyer].push [ticket, score]
-    this.tickets = {}
-    winners
-
-
-
-# module WishScanner
-#   def scan_for_a_wish
-#     wish = self.read.detect do |thought|
-#       thought.index( 'wish: ' ) == 0
-#     end
-#     wish.gsub( 'wish: ', '' )
-#   end
-# end
-
-WishScanner =
-  scan_for_a_wish: ->
-    wish = this.read().detect (thought) -> thought.index('wish: ') is 0
-    wish.replace 'wish: ', ''
-
-
-
-# class Creature
-#
-#   # This method applies a hit taken during a fight.
-#   def hit( damage )
-#     p_up = rand( charisma )
-#     if p_up % 9 == 7
-#       @life += p_up / 4
-#       puts "[#{ self.class } magick powers up #{ p_up }!]"
-#     end
-#     @life -= damage
-#     puts "[#{ self.class } has died.]" if @life <= 0
-#   end
-#
-#   # This method takes one turn in a fight.
-#   def fight( enemy, weapon )
-#     if life <= 0
-#       puts "[#{ self.class } is too dead to fight!]"
-#       return
-#     end
-#
-#     # Attack the opponent
-#     your_hit = rand( strength + weapon )
-#     puts "[You hit with #{ your_hit } points of damage!]"
-#     enemy.hit( your_hit )
-#
-#     # Retaliation
-#     p enemy
-#     if enemy.life > 0
-#       enemy_hit = rand( enemy.strength + enemy.weapon )
-#       puts "[Your enemy hit with #{ enemy_hit } points of damage!]"
-#       self.hit( enemy_hit )
-#     end
-#   end
-#
-# end
-
-Creature =
-
-  # This method applies a hit taken during a fight.
-  hit: (damage) ->
-    p_up = Math.rand this.charisma
-    if p_up % 9 is 7
-      this.life += p_up / 4
-      puts "[" + this.name + " magick powers up " + p_up + "!]"
-    this.life -= damage
-    if this.life <= 0 then puts "[" + this.name + " has died.]"
-
-  # This method takes one turn in a fight.
-  fight: (enemy, weapon) ->
-    if this.life <= 0 then return puts "[" + this.name + "is too dead to fight!]"
-
-    # Attack the opponent.
-    your_hit = Math.rand this.strength + weapon
-    puts "[You hit with " + your_hit + "points of damage!]"
-    enemy.hit your_hit
-
-    # Retaliation.
-    puts enemy
-    if enemy.life > 0
-      enemy_hit = Math.rand enemy.strength + enemy.weapon
-      puts "[Your enemy hit with " + enemy_hit + "points of damage!]"
-      this.hit enemy_hit
-
-
-
-# # Get evil idea and swap in code words
-# print "Enter your new idea: "
-# idea = gets
-# code_words.each do |real, code|
-#   idea.gsub!( real, code )
-# end
-#
-# # Save the jibberish to a new file
-# print "File encoded.  Please enter a name for this idea: "
-# idea_name = gets.strip
-# File::open( "idea-" + idea_name + ".txt", "w" ) do |f|
-#   f << idea
-# end
-
-# Get evil idea and swap in code words
-print "Enter your new idea: "
-idea = gets()
-code_words.each (real, code) -> idea.replace(real, code)
-
-# Save the jibberish to a new file
-print "File encoded. Please enter a name for this idea: "
-idea_name = gets().strip()
-File.open "idea-" + idea_name + '.txt', 'w', (file) -> file.write idea
-
-
-
-# def wipe_mutterings_from( sentence )
-#   unless sentence.respond_to? :include?
-#     raise ArgumentError,
-#       "cannot wipe mutterings from a #{ sentence.class }"
-#   end
-#   while sentence.include? '('
-#     open = sentence.index( '(' )
-#     close = sentence.index( ')', open )
-#     sentence[open..close] = '' if close
-#   end
-# end
-
-wipe_mutterings_from = (sentence) ->
-  throw new Error "cannot wipe mutterings" unless sentence.indexOf
-  while sentence.indexOf('(') >= 0
-    open     = sentence.indexOf('(') - 1
-    close    = sentence.indexOf(')') + 1
-    sentence = sentence[0..open] + sentence[close..sentence.length]
-    sentence
diff --git a/node/node_modules/jade/support/coffee-script/examples/potion.coffee b/node/node_modules/jade/support/coffee-script/examples/potion.coffee
deleted file mode 100644 (file)
index 66c126a..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-# Examples from _why's Potion, the Readme and "Potion: A Short Pamphlet".
-
-# 5 times: "Odelay!" print.
-
-print "Odelay!" for [1..5]
-
-
-# add = (x, y): x + y.
-# add(2, 4) string print
-
-add = (x, y) -> x + y
-print add 2, 4
-
-
-# loop: 'quaff' print.
-
-loop print 'quaff'
-
-
-# ('cheese', 'bread', 'mayo') at (1) print
-
-print ['cheese', 'bread', 'mayo'][1]
-
-
-# (language='Potion', pointless=true) at (key='language') print
-
-print {language: 'Potion', pointless: true}['language']
-
-
-# minus = (x, y): x - y.
-# minus (y=10, x=6)
-
-minus = (x, y) -> x - y
-minus 6, 10
-
-
-# foods = ('cheese', 'bread', 'mayo')
-# foods (2)
-
-foods = ['cheese', 'bread', 'mayo']
-foods[2]
-
-
-# (dog='canine', cat='feline', fox='vulpine') each (key, val):
-#   (key, ' is a ', val) join print.
-
-for key, val of {dog: 'canine', cat: 'feline', fox: 'vulpine'}
-  print key + ' is a ' + val
-
-
-# Person = class: /name, /age, /sex.
-# Person print = ():
-#   ('My name is ', /name, '.') join print.
-
-class Person
-  print: ->
-    print 'My name is ' + @name + '.'
-
-
-# p = Person ()
-# p /name string print
-
-p = new Person
-print p.name
-
-
-# Policeman = Person class (rank): /rank = rank.
-# Policeman print = ():
-#   ('My name is ', /name, ' and I'm a ', /rank, '.') join print.
-#
-# Policeman ('Constable') print
-
-class Policeman extends Person
-  constructor: (@rank) ->
-
-  print: ->
-    print 'My name is ' + @name + " and I'm a " + @rank + '.'
-
-print new Policeman 'Constable'
-
-
-# app = [window (width=200, height=400)
-#         [para 'Welcome.', button 'OK']]
-# app first name
-
-app =
-  window:
-    width: 200
-    height: 200
-  para:    'Welcome.'
-  button:  'OK'
-
-app.window
-
-
-# x = 1
-# y = 2
-#
-# x = 1, y = 2
-
-x = 1
-y = 2
-
-x = 1; y = 2
-
-
-# table = (language='Potion'
-#           pointless=true)
-
-table =
-  language: 'Potion'
-  pointless: yes
-
-
-# # this foul business...
-# String length = (): 10.
-
-# this foul business...
-String::length = -> 10
-
-
-# block = :
-#   'potion' print.
-
-block = ->
-  print 'potion'
-
-
-# if (age > 100): 'ancient'.
-
-if age > 100 then 'ancient'
-
-
-# author =
-#   if (title == 'Jonathan Strange & Mr. Norrell'):
-#     'Susanna Clarke'.
-#   elsif (title == 'The Star Diaries'):
-#     'Stanislaw Lem'.
-#   elsif (title == 'The Slynx'):
-#     'Tatyana Tolstaya'.
-#   else:
-#     '... probably Philip K. Dick'.
-
-switch author
-  when 'Jonathan Strange & Mr. Norrell'
-    'Susanna Clarke'
-  when 'The Star Diaries'
-    'Stanislaw Lem'
-  when 'The Slynx'
-    'Tatyana Tolstaya'
-  else
-    '... probably Philip K. Dick'
-
-
-# count = 8
-# while (count > 0):
-#   'quaff' print
-#   count--.
-
-count = 8
-while count > 0
-  print 'quaff'
-  count--
-
-
-# 1 to 5 (a):
-#   a string print.
-
-print a for a in [1..5]
-
-
-# if (3 ?gender):
-#   "Huh? Numbers are sexed? That's amazing." print.
-
-if (3).gender?
-  print "Huh? Numbers are sexed? That's amazing."
-
-
-# HomePage get = (url):
-#   session = url query ? at ('session').
-
-HomePage::get = (url) ->
-  session = url.query.session if url.query?
-
-
-# BTree = class: /left, /right.
-# b = BTree ()
-# b /left = BTree ()
-# b /right = BTree ()
-
-BTree   = ->
-b       = new BTree
-b.left  = new BTree
-b.right = new BTree
-
-
-# BTree = class: /left, /right.
-# b = BTree ()
-#
-# if (b ? /left):
-#   'left path found!' print.
-
-BTree = ->
-b = new BTree
-
-print 'left path found!' if b.left?
diff --git a/node/node_modules/jade/support/coffee-script/examples/underscore.coffee b/node/node_modules/jade/support/coffee-script/examples/underscore.coffee
deleted file mode 100644 (file)
index d6ef6b9..0000000
+++ /dev/null
@@ -1,684 +0,0 @@
-
-  # **Underscore.coffee
-  # (c) 2010 Jeremy Ashkenas, DocumentCloud Inc.**
-  # Underscore is freely distributable under the terms of the
-  # [MIT license](http://en.wikipedia.org/wiki/MIT_License).
-  # Portions of Underscore are inspired by or borrowed from
-  # [Prototype.js](http://prototypejs.org/api), Oliver Steele's
-  # [Functional](http://osteele.com), and John Resig's
-  # [Micro-Templating](http://ejohn.org).
-  # For all details and documentation:
-  # http://documentcloud.github.com/underscore/
-
-
-  # Baseline setup
-  # --------------
-
-  # Establish the root object, `window` in the browser, or `global` on the server.
-  root = this
-
-
-  # Save the previous value of the `_` variable.
-  previousUnderscore = root._
-
-
-  # Establish the object that gets thrown to break out of a loop iteration.
-  # `StopIteration` is SOP on Mozilla.
-  breaker = if typeof(StopIteration) is 'undefined' then '__break__' else StopIteration
-
-
-  # Helper function to escape **RegExp** contents, because JS doesn't have one.
-  escapeRegExp = (string) -> string.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1')
-
-
-  # Save bytes in the minified (but not gzipped) version:
-  ArrayProto           = Array.prototype
-  ObjProto             = Object.prototype
-
-
-  # Create quick reference variables for speed access to core prototypes.
-  slice                = ArrayProto.slice
-  unshift              = ArrayProto.unshift
-  toString             = ObjProto.toString
-  hasOwnProperty       = ObjProto.hasOwnProperty
-  propertyIsEnumerable = ObjProto.propertyIsEnumerable
-
-
-  # All **ECMA5** native implementations we hope to use are declared here.
-  nativeForEach        = ArrayProto.forEach
-  nativeMap            = ArrayProto.map
-  nativeReduce         = ArrayProto.reduce
-  nativeReduceRight    = ArrayProto.reduceRight
-  nativeFilter         = ArrayProto.filter
-  nativeEvery          = ArrayProto.every
-  nativeSome           = ArrayProto.some
-  nativeIndexOf        = ArrayProto.indexOf
-  nativeLastIndexOf    = ArrayProto.lastIndexOf
-  nativeIsArray        = Array.isArray
-  nativeKeys           = Object.keys
-
-
-  # Create a safe reference to the Underscore object for use below.
-  _ = (obj) -> new wrapper(obj)
-
-
-  # Export the Underscore object for **CommonJS**.
-  if typeof(exports) != 'undefined' then exports._ = _
-
-
-  # Export Underscore to global scope.
-  root._ = _
-
-
-  # Current version.
-  _.VERSION = '1.1.0'
-
-
-  # Collection Functions
-  # --------------------
-
-  # The cornerstone, an **each** implementation.
-  # Handles objects implementing **forEach**, arrays, and raw objects.
-  _.each = (obj, iterator, context) ->
-    try
-      if nativeForEach and obj.forEach is nativeForEach
-        obj.forEach iterator, context
-      else if _.isNumber obj.length
-        iterator.call(context, obj[i], i, obj) for i in [0...obj.length]
-      else
-        iterator.call(context, val, key, obj) for key, val of obj
-    catch e
-      throw e if e isnt breaker
-    obj
-
-
-  # Return the results of applying the iterator to each element. Use JavaScript
-  # 1.6's version of **map**, if possible.
-  _.map = (obj, iterator, context) ->
-    return obj.map(iterator, context) if nativeMap and obj.map is nativeMap
-    results = []
-    _.each obj, (value, index, list) ->
-      results.push iterator.call context, value, index, list
-    results
-
-
-  # **Reduce** builds up a single result from a list of values. Also known as
-  # **inject**, or **foldl**. Uses JavaScript 1.8's version of **reduce**, if possible.
-  _.reduce = (obj, iterator, memo, context) ->
-    if nativeReduce and obj.reduce is nativeReduce
-      iterator = _.bind iterator, context if context
-      return obj.reduce iterator, memo
-    _.each obj, (value, index, list) ->
-      memo = iterator.call context, memo, value, index, list
-    memo
-
-
-  # The right-associative version of **reduce**, also known as **foldr**. Uses
-  # JavaScript 1.8's version of **reduceRight**, if available.
-  _.reduceRight = (obj, iterator, memo, context) ->
-    if nativeReduceRight and obj.reduceRight is nativeReduceRight
-      iterator = _.bind iterator, context if context
-      return obj.reduceRight iterator, memo
-    reversed = _.clone(_.toArray(obj)).reverse()
-    _.reduce reversed, iterator, memo, context
-
-
-  # Return the first value which passes a truth test.
-  _.detect = (obj, iterator, context) ->
-    result = null
-    _.each obj, (value, index, list) ->
-      if iterator.call context, value, index, list
-        result = value
-        _.breakLoop()
-    result
-
-
-  # Return all the elements that pass a truth test. Use JavaScript 1.6's
-  # **filter**, if it exists.
-  _.filter = (obj, iterator, context) ->
-    return obj.filter iterator, context if nativeFilter and obj.filter is nativeFilter
-    results = []
-    _.each obj, (value, index, list) ->
-      results.push value if iterator.call context, value, index, list
-    results
-
-
-  # Return all the elements for which a truth test fails.
-  _.reject = (obj, iterator, context) ->
-    results = []
-    _.each obj, (value, index, list) ->
-      results.push value if not iterator.call context, value, index, list
-    results
-
-
-  # Determine whether all of the elements match a truth test. Delegate to
-  # JavaScript 1.6's **every**, if it is present.
-  _.every = (obj, iterator, context) ->
-    iterator ||= _.identity
-    return obj.every iterator, context if nativeEvery and obj.every is nativeEvery
-    result = true
-    _.each obj, (value, index, list) ->
-      _.breakLoop() unless (result = result and iterator.call(context, value, index, list))
-    result
-
-
-  # Determine if at least one element in the object matches a truth test. Use
-  # JavaScript 1.6's **some**, if it exists.
-  _.some = (obj, iterator, context) ->
-    iterator ||= _.identity
-    return obj.some iterator, context if nativeSome and obj.some is nativeSome
-    result = false
-    _.each obj, (value, index, list) ->
-      _.breakLoop() if (result = iterator.call(context, value, index, list))
-    result
-
-
-  # Determine if a given value is included in the array or object,
-  # based on `===`.
-  _.include = (obj, target) ->
-    return _.indexOf(obj, target) isnt -1 if nativeIndexOf and obj.indexOf is nativeIndexOf
-    for key, val of obj
-      return true if val is target
-    false
-
-
-  # Invoke a method with arguments on every item in a collection.
-  _.invoke = (obj, method) ->
-    args = _.rest arguments, 2
-    (if method then val[method] else val).apply(val, args) for val in obj
-
-
-  # Convenience version of a common use case of **map**: fetching a property.
-  _.pluck = (obj, key) ->
-    _.map(obj, (val) -> val[key])
-
-
-  # Return the maximum item or (item-based computation).
-  _.max = (obj, iterator, context) ->
-    return Math.max.apply(Math, obj) if not iterator and _.isArray(obj)
-    result = computed: -Infinity
-    _.each obj, (value, index, list) ->
-      computed = if iterator then iterator.call(context, value, index, list) else value
-      computed >= result.computed and (result = {value: value, computed: computed})
-    result.value
-
-
-  # Return the minimum element (or element-based computation).
-  _.min = (obj, iterator, context) ->
-    return Math.min.apply(Math, obj) if not iterator and _.isArray(obj)
-    result = computed: Infinity
-    _.each obj, (value, index, list) ->
-      computed = if iterator then iterator.call(context, value, index, list) else value
-      computed < result.computed and (result = {value: value, computed: computed})
-    result.value
-
-
-  # Sort the object's values by a criterion produced by an iterator.
-  _.sortBy = (obj, iterator, context) ->
-    _.pluck(((_.map obj, (value, index, list) ->
-      {value: value, criteria: iterator.call(context, value, index, list)}
-    ).sort((left, right) ->
-      a = left.criteria; b = right.criteria
-      if a < b then -1 else if a > b then 1 else 0
-    )), 'value')
-
-
-  # Use a comparator function to figure out at what index an object should
-  # be inserted so as to maintain order. Uses binary search.
-  _.sortedIndex = (array, obj, iterator) ->
-    iterator ||= _.identity
-    low =  0
-    high = array.length
-    while low < high
-      mid = (low + high) >> 1
-      if iterator(array[mid]) < iterator(obj) then low = mid + 1 else high = mid
-    low
-
-
-  # Convert anything iterable into a real, live array.
-  _.toArray = (iterable) ->
-    return []                   if (!iterable)
-    return iterable.toArray()   if (iterable.toArray)
-    return iterable             if (_.isArray(iterable))
-    return slice.call(iterable) if (_.isArguments(iterable))
-    _.values(iterable)
-
-
-  # Return the number of elements in an object.
-  _.size = (obj) -> _.toArray(obj).length
-
-
-  # Array Functions
-  # ---------------
-
-  # Get the first element of an array. Passing `n` will return the first N
-  # values in the array. Aliased as **head**. The `guard` check allows it to work
-  # with **map**.
-  _.first = (array, n, guard) ->
-    if n and not guard then slice.call(array, 0, n) else array[0]
-
-
-  # Returns everything but the first entry of the array. Aliased as **tail**.
-  # Especially useful on the arguments object. Passing an `index` will return
-  # the rest of the values in the array from that index onward. The `guard`
-  # check allows it to work with **map**.
-  _.rest = (array, index, guard) ->
-    slice.call(array, if _.isUndefined(index) or guard then 1 else index)
-
-
-  # Get the last element of an array.
-  _.last = (array) -> array[array.length - 1]
-
-
-  # Trim out all falsy values from an array.
-  _.compact = (array) -> item for item in array when item
-
-
-  # Return a completely flattened version of an array.
-  _.flatten = (array) ->
-    _.reduce array, (memo, value) ->
-      return memo.concat(_.flatten(value)) if _.isArray value
-      memo.push value
-      memo
-    , []
-
-
-  # Return a version of the array that does not contain the specified value(s).
-  _.without = (array) ->
-    values = _.rest arguments
-    val for val in _.toArray(array) when not _.include values, val
-
-
-  # Produce a duplicate-free version of the array. If the array has already
-  # been sorted, you have the option of using a faster algorithm.
-  _.uniq = (array, isSorted) ->
-    memo = []
-    for el, i in _.toArray array
-      memo.push el if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el))
-    memo
-
-
-  # Produce an array that contains every item shared between all the
-  # passed-in arrays.
-  _.intersect = (array) ->
-    rest = _.rest arguments
-    _.select _.uniq(array), (item) ->
-      _.all rest, (other) ->
-        _.indexOf(other, item) >= 0
-
-
-  # Zip together multiple lists into a single array -- elements that share
-  # an index go together.
-  _.zip = ->
-    length =  _.max _.pluck arguments, 'length'
-    results = new Array length
-    for i in [0...length]
-      results[i] = _.pluck arguments, String i
-    results
-
-
-  # If the browser doesn't supply us with **indexOf** (I'm looking at you, MSIE),
-  # we need this function. Return the position of the first occurence of an
-  # item in an array, or -1 if the item is not included in the array.
-  _.indexOf = (array, item) ->
-    return array.indexOf item if nativeIndexOf and array.indexOf is nativeIndexOf
-    i = 0; l = array.length
-    while l - i
-      if array[i] is item then return i else i++
-    -1
-
-
-  # Provide JavaScript 1.6's **lastIndexOf**, delegating to the native function,
-  # if possible.
-  _.lastIndexOf = (array, item) ->
-    return array.lastIndexOf(item) if nativeLastIndexOf and array.lastIndexOf is nativeLastIndexOf
-    i = array.length
-    while i
-      if array[i] is item then return i else i--
-    -1
-
-
-  # Generate an integer Array containing an arithmetic progression. A port of
-  # [the native Python **range** function](http://docs.python.org/library/functions.html#range).
-  _.range = (start, stop, step) ->
-    a         = arguments
-    solo      = a.length <= 1
-    i = start = if solo then 0 else a[0]
-    stop      = if solo then a[0] else a[1]
-    step      = a[2] or 1
-    len       = Math.ceil((stop - start) / step)
-    return []   if len <= 0
-    range     = new Array len
-    idx       = 0
-    loop
-      return range if (if step > 0 then i - stop else stop - i) >= 0
-      range[idx] = i
-      idx++
-      i+= step
-
-
-  # Function Functions
-  # ------------------
-
-  # Create a function bound to a given object (assigning `this`, and arguments,
-  # optionally). Binding with arguments is also known as **curry**.
-  _.bind = (func, obj) ->
-    args = _.rest arguments, 2
-    -> func.apply obj or root, args.concat arguments
-
-
-  # Bind all of an object's methods to that object. Useful for ensuring that
-  # all callbacks defined on an object belong to it.
-  _.bindAll = (obj) ->
-    funcs = if arguments.length > 1 then _.rest(arguments) else _.functions(obj)
-    _.each funcs, (f) -> obj[f] = _.bind obj[f], obj
-    obj
-
-
-  # Delays a function for the given number of milliseconds, and then calls
-  # it with the arguments supplied.
-  _.delay = (func, wait) ->
-    args = _.rest arguments, 2
-    setTimeout((-> func.apply(func, args)), wait)
-
-
-  # Memoize an expensive function by storing its results.
-  _.memoize = (func, hasher) ->
-    memo = {}
-    hasher or= _.identity
-    ->
-      key = hasher.apply this, arguments
-      return memo[key] if key of memo
-      memo[key] = func.apply this, arguments
-
-
-  # Defers a function, scheduling it to run after the current call stack has
-  # cleared.
-  _.defer = (func) ->
-    _.delay.apply _, [func, 1].concat _.rest arguments
-
-
-  # Returns the first function passed as an argument to the second,
-  # allowing you to adjust arguments, run code before and after, and
-  # conditionally execute the original function.
-  _.wrap = (func, wrapper) ->
-    -> wrapper.apply wrapper, [func].concat arguments
-
-
-  # Returns a function that is the composition of a list of functions, each
-  # consuming the return value of the function that follows.
-  _.compose = ->
-    funcs = arguments
-    ->
-      args = arguments
-      for i in [(funcs.length - 1)..0]
-        args = [funcs[i].apply(this, args)]
-      args[0]
-
-
-  # Object Functions
-  # ----------------
-
-  # Retrieve the names of an object's properties.
-  _.keys = nativeKeys or (obj) ->
-    return _.range 0, obj.length if _.isArray(obj)
-    key for key, val of obj
-
-
-  # Retrieve the values of an object's properties.
-  _.values = (obj) ->
-    _.map obj, _.identity
-
-
-  # Return a sorted list of the function names available in Underscore.
-  _.functions = (obj) ->
-    _.filter(_.keys(obj), (key) -> _.isFunction(obj[key])).sort()
-
-
-  # Extend a given object with all of the properties in a source object.
-  _.extend = (obj) ->
-    for source in _.rest(arguments)
-      (obj[key] = val) for key, val of source
-    obj
-
-
-  # Create a (shallow-cloned) duplicate of an object.
-  _.clone = (obj) ->
-    return obj.slice 0 if _.isArray obj
-    _.extend {}, obj
-
-
-  # Invokes interceptor with the obj, and then returns obj.
-  # The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.
-  _.tap = (obj, interceptor) ->
-    interceptor obj
-    obj
-
-
-  # Perform a deep comparison to check if two objects are equal.
-  _.isEqual = (a, b) ->
-    # Check object identity.
-    return true if a is b
-    # Different types?
-    atype = typeof(a); btype = typeof(b)
-    return false if atype isnt btype
-    # Basic equality test (watch out for coercions).
-    return true if `a == b`
-    # One is falsy and the other truthy.
-    return false if (!a and b) or (a and !b)
-    # One of them implements an `isEqual()`?
-    return a.isEqual(b) if a.isEqual
-    # Check dates' integer values.
-    return a.getTime() is b.getTime() if _.isDate(a) and _.isDate(b)
-    # Both are NaN?
-    return false if _.isNaN(a) and _.isNaN(b)
-    # Compare regular expressions.
-    if _.isRegExp(a) and _.isRegExp(b)
-      return a.source     is b.source and
-             a.global     is b.global and
-             a.ignoreCase is b.ignoreCase and
-             a.multiline  is b.multiline
-    # If a is not an object by this point, we can't handle it.
-    return false if atype isnt 'object'
-    # Check for different array lengths before comparing contents.
-    return false if a.length and (a.length isnt b.length)
-    # Nothing else worked, deep compare the contents.
-    aKeys = _.keys(a); bKeys = _.keys(b)
-    # Different object sizes?
-    return false if aKeys.length isnt bKeys.length
-    # Recursive comparison of contents.
-    (return false) for all key, val of a when !(key of b) or !_.isEqual(val, b[key])
-    true
-
-
-  # Is a given array or object empty?
-  _.isEmpty = (obj) ->
-    return obj.length is 0 if _.isArray(obj) or _.isString(obj)
-    (return false) for key of obj when hasOwnProperty.call(obj, key)
-    true
-
-
-  # Is a given value a DOM element?
-  _.isElement   = (obj) -> obj and obj.nodeType is 1
-
-
-  # Is a given value an array?
-  _.isArray     = nativeIsArray or (obj) -> !!(obj and obj.concat and obj.unshift and not obj.callee)
-
-
-  # Is a given variable an arguments object?
-  _.isArguments = (obj) -> obj and obj.callee
-
-
-  # Is the given value a function?
-  _.isFunction  = (obj) -> !!(obj and obj.constructor and obj.call and obj.apply)
-
-
-  # Is the given value a string?
-  _.isString    = (obj) -> !!(obj is '' or (obj and obj.charCodeAt and obj.substr))
-
-
-  # Is a given value a number?
-  _.isNumber    = (obj) -> (obj is +obj) or toString.call(obj) is '[object Number]'
-
-
-  # Is a given value a boolean?
-  _.isBoolean   = (obj) -> obj is true or obj is false
-
-
-  # Is a given value a Date?
-  _.isDate      = (obj) -> !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear)
-
-
-  # Is the given value a regular expression?
-  _.isRegExp    = (obj) -> !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false))
-
-
-  # Is the given value NaN -- this one is interesting. `NaN != NaN`, and
-  # `isNaN(undefined) == true`, so we make sure it's a number first.
-  _.isNaN       = (obj) -> _.isNumber(obj) and window.isNaN(obj)
-
-
-  # Is a given value equal to null?
-  _.isNull      = (obj) -> obj is null
-
-
-  # Is a given variable undefined?
-  _.isUndefined = (obj) -> typeof obj is 'undefined'
-
-
-  # Utility Functions
-  # -----------------
-
-  # Run Underscore.js in noConflict mode, returning the `_` variable to its
-  # previous owner. Returns a reference to the Underscore object.
-  _.noConflict = ->
-    root._ = previousUnderscore
-    this
-
-
-  # Keep the identity function around for default iterators.
-  _.identity = (value) -> value
-
-
-  # Run a function `n` times.
-  _.times = (n, iterator, context) ->
-    iterator.call(context, i) for i in [0...n]
-
-
-  # Break out of the middle of an iteration.
-  _.breakLoop = -> throw breaker
-
-
-  # Add your own custom functions to the Underscore object, ensuring that
-  # they're correctly added to the OOP wrapper as well.
-  _.mixin = (obj) ->
-    for name in _.functions(obj)
-      addToWrapper name, _[name] = obj[name]
-
-
-  # Generate a unique integer id (unique within the entire client session).
-  # Useful for temporary DOM ids.
-  idCounter = 0
-  _.uniqueId = (prefix) ->
-    (prefix or '') + idCounter++
-
-
-  # By default, Underscore uses **ERB**-style template delimiters, change the
-  # following template settings to use alternative delimiters.
-  _.templateSettings = {
-    start:        '<%'
-    end:          '%>'
-    interpolate:  /<%=(.+?)%>/g
-  }
-
-
-  # JavaScript templating a-la **ERB**, pilfered from John Resig's
-  # *Secrets of the JavaScript Ninja*, page 83.
-  # Single-quote fix from Rick Strahl.
-  # With alterations for arbitrary delimiters, and to preserve whitespace.
-  _.template = (str, data) ->
-    c = _.templateSettings
-    endMatch = new RegExp("'(?=[^"+c.end.substr(0, 1)+"]*"+escapeRegExp(c.end)+")","g")
-    fn = new Function 'obj',
-      'var p=[],print=function(){p.push.apply(p,arguments);};' +
-      'with(obj||{}){p.push(\'' +
-      str.replace(/\r/g, '\\r')
-         .replace(/\n/g, '\\n')
-         .replace(/\t/g, '\\t')
-         .replace(endMatch,"✄")
-         .split("'").join("\\'")
-         .split("✄").join("'")
-         .replace(c.interpolate, "',$1,'")
-         .split(c.start).join("');")
-         .split(c.end).join("p.push('") +
-         "');}return p.join('');"
-    if data then fn(data) else fn
-
-
-  # Aliases
-  # -------
-
-  _.forEach  = _.each
-  _.foldl    = _.inject = _.reduce
-  _.foldr    = _.reduceRight
-  _.select   = _.filter
-  _.all      = _.every
-  _.any      = _.some
-  _.contains = _.include
-  _.head     = _.first
-  _.tail     = _.rest
-  _.methods  = _.functions
-
-
-  # Setup the OOP Wrapper
-  # ---------------------
-
-  # If Underscore is called as a function, it returns a wrapped object that
-  # can be used OO-style. This wrapper holds altered versions of all the
-  # underscore functions. Wrapped objects may be chained.
-  wrapper = (obj) ->
-    this._wrapped = obj
-    this
-
-
-  # Helper function to continue chaining intermediate results.
-  result = (obj, chain) ->
-    if chain then _(obj).chain() else obj
-
-
-  # A method to easily add functions to the OOP wrapper.
-  addToWrapper = (name, func) ->
-    wrapper.prototype[name] = ->
-      args = _.toArray arguments
-      unshift.call args, this._wrapped
-      result func.apply(_, args), this._chain
-
-
-  # Add all of the Underscore functions to the wrapper object.
-  _.mixin _
-
-
-  # Add all mutator Array functions to the wrapper.
-  _.each ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], (name) ->
-    method = Array.prototype[name]
-    wrapper.prototype[name] = ->
-      method.apply(this._wrapped, arguments)
-      result(this._wrapped, this._chain)
-
-
-  # Add all accessor Array functions to the wrapper.
-  _.each ['concat', 'join', 'slice'], (name) ->
-    method = Array.prototype[name]
-    wrapper.prototype[name] = ->
-      result(method.apply(this._wrapped, arguments), this._chain)
-
-
-  # Start chaining a wrapped Underscore object.
-  wrapper::chain = ->
-    this._chain = true
-    this
-
-
-  # Extracts the result from a wrapped and chained object.
-  wrapper::value = -> this._wrapped
diff --git a/node/node_modules/jade/support/coffee-script/examples/web_server.coffee b/node/node_modules/jade/support/coffee-script/examples/web_server.coffee
deleted file mode 100644 (file)
index c2ee089..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# Contributed by Jason Huggins
-
-sys  = require 'sys'
-http = require 'http'
-
-server = http.createServer (req, res) ->
-  res.writeHeader 200, 'Content-Type': 'text/plain'
-  res.write 'Hello, World!'
-  res.end()
-
-server.listen 3000
-
-sys.puts "Server running at http://localhost:3000/"
diff --git a/node/node_modules/jade/support/coffee-script/extras/EXTRAS b/node/node_modules/jade/support/coffee-script/extras/EXTRAS
deleted file mode 100644 (file)
index 79ec413..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-EXTRAS:
-
-"extras/coffee-script.js" is a concatenated and compressed version of the 
-CoffeeScript compiler. To use it in the browser, include the script after any 
-inline script tags of type "text/coffeescript" on the page. It will compile
-and evaluate all of the scripts in order.
-
diff --git a/node/node_modules/jade/support/coffee-script/extras/coffee-script.js b/node/node_modules/jade/support/coffee-script/extras/coffee-script.js
deleted file mode 100644 (file)
index 71b8181..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * CoffeeScript Compiler v0.9.4
- * http://coffeescript.org
- *
- * Copyright 2010, Jeremy Ashkenas
- * Released under the MIT License
- */
-this.CoffeeScript=function(){function require(path){return require[path]}require["./helpers"]=new function(){var exports=this;(function(){var extend,flatten,indexOf;indexOf=(exports.indexOf=Array.indexOf||(Array.prototype.indexOf?function(array,item,from){return array.indexOf(item,from)}:function(array,item,from){var _len,index,other;for(index=0,_len=array.length;index<_len;index++){other=array[index];if(other===item&&(!from||(from<=index))){return index}}return -1}));exports.include=function(list,value){return indexOf(list,value)>=0};exports.starts=function(string,literal,start){return literal===string.substr(start,literal.length)};exports.ends=function(string,literal,back){var len;len=literal.length;return literal===string.substr(string.length-len-(back||0),len)};exports.compact=function(array){var _i,_len,_result,item;_result=[];for(_i=0,_len=array.length;_i<_len;_i++){item=array[_i];if(item){_result.push(item)}}return _result};exports.count=function(string,letter){var num,pos;num=(pos=0);while(pos=1+string.indexOf(letter,pos)){num++}return num};exports.merge=function(options,overrides){return extend(extend({},options),overrides)};extend=(exports.extend=function(object,properties){var key,val;for(key in properties){val=properties[key];object[key]=val}return object});exports.flatten=(flatten=function(array){var _i,_len,element,flattened;flattened=[];for(_i=0,_len=array.length;_i<_len;_i++){element=array[_i];if(element instanceof Array){flattened=flattened.concat(flatten(element))}else{flattened.push(element)}}return flattened});exports.del=function(obj,key){var val;val=obj[key];delete obj[key];return val};exports.last=function(array,back){return array[array.length-(back||0)-1]}}).call(this)};require["./rewriter"]=new function(){var exports=this;(function(){var BALANCED_PAIRS,EXPRESSION_CLOSE,EXPRESSION_END,EXPRESSION_START,IMPLICIT_BLOCK,IMPLICIT_CALL,IMPLICIT_END,IMPLICIT_FUNC,INVERSES,LINEBREAKS,SINGLE_CLOSERS,SINGLE_LINERS,_i,_len,_ref,include,left,rite;include=require("./helpers").include;exports.Rewriter=(function(){function Rewriter(){}return Rewriter})();exports.Rewriter.prototype.rewrite=function(_arg){this.tokens=_arg;this.adjustComments();this.removeLeadingNewlines();this.removeMidExpressionNewlines();this.closeOpenCalls();this.closeOpenIndexes();this.addImplicitIndentation();this.tagPostfixConditionals();this.addImplicitBraces();this.addImplicitParentheses();this.ensureBalance(BALANCED_PAIRS);this.rewriteClosingParens();return this.tokens};exports.Rewriter.prototype.scanTokens=function(block){var i,token,tokens;tokens=this.tokens;i=0;while(token=tokens[i]){i+=block.call(this,token,i,tokens)}return true};exports.Rewriter.prototype.detectEnd=function(i,condition,action){var levels,token,tokens;tokens=this.tokens;levels=0;while(token=tokens[i]){if(levels===0&&condition.call(this,token,i)){return action.call(this,token,i)}if(!token||levels<0){return action.call(this,token,i-1)}if(include(EXPRESSION_START,token[0])){levels+=1}else{if(include(EXPRESSION_END,token[0])){levels-=1}}i+=1}return i-1};exports.Rewriter.prototype.adjustComments=function(){return this.scanTokens(function(token,i,tokens){var _ref,after,before,post,prev;if(token[0]!=="HERECOMMENT"){return 1}before=tokens[i-2];prev=tokens[i-1];post=tokens[i+1];after=tokens[i+2];if(((after!=null)?after[0]:undefined)==="INDENT"){tokens.splice(i+2,1);if(((before!=null)?before[0]:undefined)==="OUTDENT"&&((post!=null)?post[0]:undefined)==="TERMINATOR"){tokens.splice(i-2,1)}else{tokens.splice(i,0,after)}}else{if(prev&&!((_ref=prev[0])==="TERMINATOR"||_ref==="INDENT"||_ref==="OUTDENT")){if(((post!=null)?post[0]:undefined)==="TERMINATOR"&&((after!=null)?after[0]:undefined)==="OUTDENT"){tokens.splice.apply(tokens,[i+2,0].concat(tokens.splice(i,2)));if(tokens[i+2][0]!=="TERMINATOR"){tokens.splice(i+2,0,["TERMINATOR","\n",prev[2]])}}else{tokens.splice(i,0,["TERMINATOR","\n",prev[2]])}return 2}}return 1})};exports.Rewriter.prototype.removeLeadingNewlines=function(){var _len,_ref,i,tag;for(i=0,_len=(_ref=this.tokens).length;i<_len;i++){tag=_ref[i][0];if(tag!=="TERMINATOR"){break}}return i?this.tokens.splice(0,i):undefined};exports.Rewriter.prototype.removeMidExpressionNewlines=function(){return this.scanTokens(function(token,i,tokens){if(!(token[0]==="TERMINATOR"&&include(EXPRESSION_CLOSE,this.tag(i+1)))){return 1}tokens.splice(i,1);return 0})};exports.Rewriter.prototype.closeOpenCalls=function(){var action,condition;condition=function(token,i){var _ref;return((_ref=token[0])===")"||_ref==="CALL_END")||token[0]==="OUTDENT"&&this.tag(i-1)===")"};action=function(token,i){return(this.tokens[token[0]==="OUTDENT"?i-1:i][0]="CALL_END")};return this.scanTokens(function(token,i){if(token[0]==="CALL_START"){this.detectEnd(i+1,condition,action)}return 1})};exports.Rewriter.prototype.closeOpenIndexes=function(){var action,condition;condition=function(token,i){var _ref;return((_ref=token[0])==="]"||_ref==="INDEX_END")};action=function(token,i){return(token[0]="INDEX_END")};return this.scanTokens(function(token,i){if(token[0]==="INDEX_START"){this.detectEnd(i+1,condition,action)}return 1})};exports.Rewriter.prototype.addImplicitBraces=function(){var action,condition,stack;stack=[];condition=function(token,i){var _ref,_ref2,one,tag,three,two;if(("HERECOMMENT"===this.tag(i+1)||"HERECOMMENT"===this.tag(i-1))){return false}_ref=this.tokens.slice(i+1,i+4),one=_ref[0],two=_ref[1],three=_ref[2];tag=token[0];return(tag==="TERMINATOR"||tag==="OUTDENT")&&!(((two!=null)?two[0]:undefined)===":"||((one!=null)?one[0]:undefined)==="@"&&((three!=null)?three[0]:undefined)===":")||tag===","&&!((_ref2=((one!=null)?one[0]:undefined))==="IDENTIFIER"||_ref2==="NUMBER"||_ref2==="STRING"||_ref2==="@"||_ref2==="TERMINATOR"||_ref2==="OUTDENT")};action=function(token,i){return this.tokens.splice(i,0,["}","}",token[2]])};return this.scanTokens(function(token,i,tokens){var idx,tag,tok;if(include(EXPRESSION_START,tag=token[0])){stack.push(tag==="INDENT"&&this.tag(i-1)==="{"?"{":tag);return 1}if(include(EXPRESSION_END,tag)){stack.pop();return 1}if(!(tag===":"&&stack[stack.length-1]!=="{")){return 1}stack.push("{");idx=this.tag(i-2)==="@"?i-2:i-1;if(this.tag(idx-2)==="HERECOMMENT"){idx-=2}tok=["{","{",token[2]];tok.generated=true;tokens.splice(idx,0,tok);this.detectEnd(i+2,condition,action);return 2})};exports.Rewriter.prototype.addImplicitParentheses=function(){var action,classLine;classLine=false;action=function(token,i){var idx;idx=token[0]==="OUTDENT"?i+1:i;return this.tokens.splice(idx,0,["CALL_END",")",token[2]])};return this.scanTokens(function(token,i,tokens){var callObject,next,prev,seenSingle,tag;tag=token[0];if(tag==="CLASS"){classLine=true}prev=tokens[i-1];next=tokens[i+1];callObject=!classLine&&tag==="INDENT"&&next&&next.generated&&next[0]==="{"&&prev&&include(IMPLICIT_FUNC,prev[0]);seenSingle=false;if(include(LINEBREAKS,tag)){classLine=false}if(prev&&!prev.spaced&&tag==="?"){token.call=true}if(!(callObject||((prev!=null)?prev.spaced:undefined)&&(prev.call||include(IMPLICIT_FUNC,prev[0]))&&include(IMPLICIT_CALL,tag))){return 1}tokens.splice(i,0,["CALL_START","(",token[2]]);this.detectEnd(i+(callObject?2:1),function(token,i){var post;if(!seenSingle&&token.fromThen){return true}tag=token[0];if((tag==="IF"||tag==="ELSE"||tag==="UNLESS"||tag==="->"||tag==="=>")){seenSingle=true}if(tag==="PROPERTY_ACCESS"&&this.tag(i-1)==="OUTDENT"){return true}return !token.generated&&this.tag(i-1)!==","&&include(IMPLICIT_END,tag)&&(tag!=="INDENT"||(this.tag(i-2)!=="CLASS"&&!include(IMPLICIT_BLOCK,this.tag(i-1))&&!((post=this.tokens[i+1])&&post.generated&&post[0]==="{")))},action);if(prev[0]==="?"){prev[0]="FUNC_EXIST"}return 2})};exports.Rewriter.prototype.addImplicitIndentation=function(){return this.scanTokens(function(token,i,tokens){var _ref,_ref2,action,condition,indent,outdent,starter,tag;tag=token[0];if(tag==="ELSE"&&this.tag(i-1)!=="OUTDENT"){tokens.splice.apply(tokens,[i,0].concat(this.indentation(token)));return 2}if(tag==="CATCH"&&((_ref=this.tag(i+2))==="TERMINATOR"||_ref==="FINALLY")){tokens.splice.apply(tokens,[i+2,0].concat(this.indentation(token)));return 4}if(include(SINGLE_LINERS,tag)&&this.tag(i+1)!=="INDENT"&&!(tag==="ELSE"&&this.tag(i+1)==="IF")){starter=tag;_ref2=this.indentation(token),indent=_ref2[0],outdent=_ref2[1];if(starter==="THEN"){indent.fromThen=true}indent.generated=(outdent.generated=true);tokens.splice(i+1,0,indent);condition=function(token,i){return token[1]!==";"&&include(SINGLE_CLOSERS,token[0])&&!(token[0]==="ELSE"&&!(starter==="IF"||starter==="THEN"))};action=function(token,i){return this.tokens.splice(this.tag(i-1)===","?i-1:i,0,outdent)};this.detectEnd(i+2,condition,action);if(tag==="THEN"){tokens.splice(i,1)}return 1}return 1})};exports.Rewriter.prototype.tagPostfixConditionals=function(){var condition;condition=function(token,i){var _ref;return((_ref=token[0])==="TERMINATOR"||_ref==="INDENT")};return this.scanTokens(function(token,i){var _ref,original;if(!((_ref=token[0])==="IF"||_ref==="UNLESS")){return 1}original=token;this.detectEnd(i+1,condition,function(token,i){return token[0]!=="INDENT"?(original[0]="POST_"+original[0]):undefined});return 1})};exports.Rewriter.prototype.ensureBalance=function(pairs){var _result,key,levels,open,openLine,unclosed,value;levels={};openLine={};this.scanTokens(function(token,i){var _i,_len,_ref,_ref2,close,open,tag;tag=token[0];for(_i=0,_len=(_ref=pairs).length;_i<_len;_i++){_ref2=_ref[_i],open=_ref2[0],close=_ref2[1];levels[open]|=0;if(tag===open){if(levels[open]===0){openLine[open]=token[2]}levels[open]+=1}else{if(tag===close){levels[open]-=1}}if(levels[open]<0){throw Error("too many "+(token[1])+" on line "+(token[2]+1))}}return 1});unclosed=(function(){_result=[];for(key in levels){value=levels[key];if(value>0){_result.push(key)}}return _result})();if(unclosed.length){throw Error("unclosed "+(open=unclosed[0])+" on line "+(openLine[open]+1))}};exports.Rewriter.prototype.rewriteClosingParens=function(){var debt,key,stack;stack=[];debt={};for(key in INVERSES){(debt[key]=0)}return this.scanTokens(function(token,i,tokens){var inv,match,mtag,oppos,tag,val;if(include(EXPRESSION_START,tag=token[0])){stack.push(token);return 1}if(!include(EXPRESSION_END,tag)){return 1}if(debt[(inv=INVERSES[tag])]>0){debt[inv]-=1;tokens.splice(i,1);return 0}match=stack.pop();mtag=match[0];oppos=INVERSES[mtag];if(tag===oppos){return 1}debt[mtag]+=1;val=[oppos,mtag==="INDENT"?match[1]:oppos];if(this.tag(i+2)===mtag){tokens.splice(i+3,0,val);stack.push(match)}else{tokens.splice(i,0,val)}return 1})};exports.Rewriter.prototype.indentation=function(token){return[["INDENT",2,token[2]],["OUTDENT",2,token[2]]]};exports.Rewriter.prototype.tag=function(i){var _ref;return(((_ref=this.tokens[i])!=null)?_ref[0]:undefined)};BALANCED_PAIRS=[["(",")"],["[","]"],["{","}"],["INDENT","OUTDENT"],["CALL_START","CALL_END"],["PARAM_START","PARAM_END"],["INDEX_START","INDEX_END"]];INVERSES={};EXPRESSION_START=[];EXPRESSION_END=[];for(_i=0,_len=BALANCED_PAIRS.length;_i<_len;_i++){_ref=BALANCED_PAIRS[_i],left=_ref[0],rite=_ref[1];EXPRESSION_START.push(INVERSES[rite]=left);EXPRESSION_END.push(INVERSES[left]=rite)}EXPRESSION_CLOSE=["CATCH","WHEN","ELSE","FINALLY"].concat(EXPRESSION_END);IMPLICIT_FUNC=["IDENTIFIER","SUPER",")","CALL_END","]","INDEX_END","@","THIS"];IMPLICIT_CALL=["IDENTIFIER","NUMBER","STRING","JS","REGEX","NEW","PARAM_START","CLASS","IF","UNLESS","TRY","SWITCH","THIS","BOOL","UNARY","@","->","=>","[","(","{"];IMPLICIT_BLOCK=["->","=>","{","[",","];IMPLICIT_END=["POST_IF","POST_UNLESS","FOR","WHILE","UNTIL","LOOP","TERMINATOR","INDENT"];SINGLE_LINERS=["ELSE","->","=>","TRY","FINALLY","THEN"];SINGLE_CLOSERS=["TERMINATOR","CATCH","FINALLY","ELSE","OUTDENT","LEADING_WHEN"];LINEBREAKS=["TERMINATOR","INDENT","OUTDENT"]}).call(this)};require["./lexer"]=new function(){var exports=this;(function(){var ASSIGNED,BOOL,CALLABLE,CODE,COFFEE_ALIASES,COFFEE_KEYWORDS,COMMENT,COMPARE,COMPOUND_ASSIGN,HEREDOC,HEREDOC_INDENT,HEREGEX,HEREGEX_OMIT,IDENTIFIER,INDEXABLE,JSTOKEN,JS_FORBIDDEN,JS_KEYWORDS,LEADING_SPACES,LINE_BREAK,LOGIC,Lexer,MATH,MULTILINER,MULTI_DENT,NEXT_CHARACTER,NEXT_ELLIPSIS,NOT_REGEX,NO_NEWLINE,NUMBER,OPERATOR,REGEX,RELATION,RESERVED,Rewriter,SHIFT,SIMPLESTR,TRAILING_SPACES,UNARY,WHITESPACE,_ref,compact,count,include,last,op,starts;Rewriter=require("./rewriter").Rewriter;_ref=require("./helpers"),include=_ref.include,count=_ref.count,starts=_ref.starts,compact=_ref.compact,last=_ref.last;exports.Lexer=(function(){Lexer=(function(){function Lexer(){}return Lexer})();Lexer.prototype.tokenize=function(code,options){var o;code=code.replace(/\r/g,"").replace(TRAILING_SPACES,"");o=options||{};this.code=code;this.i=0;this.line=o.line||0;this.indent=0;this.indebt=0;this.outdebt=0;this.seenFor=false;this.indents=[];this.tokens=[];while(this.chunk=code.slice(this.i)){this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.heredocToken()||this.stringToken()||this.numberToken()||this.regexToken()||this.jsToken()||this.literalToken()}this.closeIndentation();if(o.rewrite===false){return this.tokens}return(new Rewriter).rewrite(this.tokens)};Lexer.prototype.identifierToken=function(){var colon,forcedIdentifier,id,input,match,tag;if(!(match=IDENTIFIER.exec(this.chunk))){return false}input=match[0],id=match[1],colon=match[2];this.i+=input.length;if(id==="all"&&this.tag()==="FOR"){this.token("ALL",id);return true}forcedIdentifier=colon||this.tagAccessor();tag="IDENTIFIER";if(include(JS_KEYWORDS,id)||!forcedIdentifier&&include(COFFEE_KEYWORDS,id)){tag=id.toUpperCase();if(tag==="WHEN"&&include(LINE_BREAK,this.tag())){tag="LEADING_WHEN"}else{if(tag==="FOR"){this.seenFor=true}else{if(include(UNARY,tag)){tag="UNARY"}else{if(include(RELATION,tag)){if(tag!=="INSTANCEOF"&&this.seenFor){this.seenFor=false;tag="FOR"+tag}else{tag="RELATION";if(this.value()==="!"){this.tokens.pop();id="!"+id}}}}}}}if(include(JS_FORBIDDEN,id)){if(forcedIdentifier){tag="IDENTIFIER";id=new String(id);id.reserved=true}else{if(include(RESERVED,id)){this.identifierError(id)}}}if(!forcedIdentifier){if(COFFEE_ALIASES.hasOwnProperty(id)){tag=(id=COFFEE_ALIASES[id])}if(id==="!"){tag="UNARY"}else{if(include(LOGIC,id)){tag="LOGIC"}else{if(include(BOOL,tag)){id=tag.toLowerCase();tag="BOOL"}}}}this.token(tag,id);if(colon){this.token(":",":")}return true};Lexer.prototype.numberToken=function(){var match,number;if(!(match=NUMBER.exec(this.chunk))){return false}number=match[0];if(this.tag()==="."&&number.charAt(0)==="."){return false}this.i+=number.length;this.token("NUMBER",number);return true};Lexer.prototype.stringToken=function(){var match,string;switch(this.chunk.charAt(0)){case"'":if(!(match=SIMPLESTR.exec(this.chunk))){return false}this.token("STRING",(string=match[0]).replace(MULTILINER,"\\\n"));break;case'"':if(!(string=this.balancedString(this.chunk,[['"','"'],["#{","}"]]))){return false}if(0<string.indexOf("#{",1)){this.interpolateString(string.slice(1,-1))}else{this.token("STRING",this.escapeLines(string))}break;default:return false}this.line+=count(string,"\n");this.i+=string.length;return true};Lexer.prototype.heredocToken=function(){var doc,heredoc,match,quote;if(!(match=HEREDOC.exec(this.chunk))){return false}heredoc=match[0];quote=heredoc.charAt(0);doc=this.sanitizeHeredoc(match[2],{quote:quote,indent:null});if(quote==='"'&&(0<=doc.indexOf("#{"))){this.interpolateString(doc,{heredoc:true})}else{this.token("STRING",this.makeString(doc,quote,true))}this.line+=count(heredoc,"\n");this.i+=heredoc.length;return true};Lexer.prototype.commentToken=function(){var comment,here,match;if(!(match=this.chunk.match(COMMENT))){return false}comment=match[0],here=match[1];this.line+=count(comment,"\n");this.i+=comment.length;if(here){this.token("HERECOMMENT",this.sanitizeHeredoc(here,{herecomment:true,indent:Array(this.indent+1).join(" ")}));this.token("TERMINATOR","\n")}return true};Lexer.prototype.jsToken=function(){var match,script;if(!(this.chunk.charAt(0)==="`"&&(match=JSTOKEN.exec(this.chunk)))){return false}this.token("JS",(script=match[0]).slice(1,-1));this.i+=script.length;return true};Lexer.prototype.regexToken=function(){var match;if(this.chunk.charAt(0)!=="/"){return false}if(match=HEREGEX.exec(this.chunk)){return this.heregexToken(match)}if(include(NOT_REGEX,this.tag())){return false}if(!(match=REGEX.exec(this.chunk))){return false}this.token("REGEX",match[0]);this.i+=match[0].length;return true};Lexer.prototype.heregexToken=function(match){var _i,_len,_ref2,_ref3,_ref4,_this,body,flags,heregex,re,tag,tokens,value;heregex=match[0],body=match[1],flags=match[2];this.i+=heregex.length;if(0>body.indexOf("#{")){re=body.replace(HEREGEX_OMIT,"").replace(/\//g,"\\/");this.token("REGEX","/"+(re||"(?:)")+"/"+flags);return true}this.token("IDENTIFIER","RegExp");this.tokens.push(["CALL_START","("]);tokens=[];for(_i=0,_len=(_ref2=this.interpolateString(body,{regex:true})).length;_i<_len;_i++){_ref3=_ref2[_i],tag=_ref3[0],value=_ref3[1];if(tag==="TOKENS"){tokens.push.apply(tokens,value)}else{if(!(value=value.replace(HEREGEX_OMIT,""))){continue}value=value.replace(/\\/g,"\\\\");tokens.push(["STRING",this.makeString(value,'"',true)])}tokens.push(["+","+"])}tokens.pop();if((((_ref4=tokens[0])!=null)?_ref4[0]:undefined)!=="STRING"){this.tokens.push(["STRING",'""'],["+","+"])}(_this=this.tokens).push.apply(_this,tokens);if(flags){this.tokens.push([",",","],["STRING",'"'+flags+'"'])}this.token(")",")");return true};Lexer.prototype.lineToken=function(){var diff,indent,match,nextCharacter,noNewlines,prev,size;if(!(match=MULTI_DENT.exec(this.chunk))){return false}indent=match[0];this.line+=count(indent,"\n");this.i+=indent.length;prev=last(this.tokens,1);size=indent.length-1-indent.lastIndexOf("\n");nextCharacter=NEXT_CHARACTER.exec(this.chunk)[1];noNewlines=((nextCharacter==="."||nextCharacter===",")&&!NEXT_ELLIPSIS.test(this.chunk))||this.unfinished();if(size-this.indebt===this.indent){if(noNewlines){return this.suppressNewlines()}return this.newlineToken(indent)}else{if(size>this.indent){if(noNewlines){this.indebt=size-this.indent;return this.suppressNewlines()}diff=size-this.indent+this.outdebt;this.token("INDENT",diff);this.indents.push(diff);this.outdebt=(this.indebt=0)}else{this.indebt=0;this.outdentToken(this.indent-size,noNewlines)}}this.indent=size;return true};Lexer.prototype.outdentToken=function(moveOut,noNewlines,close){var dent,len;while(moveOut>0){len=this.indents.length-1;if(this.indents[len]===undefined){moveOut=0}else{if(this.indents[len]===this.outdebt){moveOut-=this.outdebt;this.outdebt=0}else{if(this.indents[len]<this.outdebt){this.outdebt-=this.indents[len];moveOut-=this.indents[len]}else{dent=this.indents.pop()-this.outdebt;moveOut-=dent;this.outdebt=0;this.token("OUTDENT",dent)}}}}if(dent){this.outdebt-=moveOut}if(!(this.tag()==="TERMINATOR"||noNewlines)){this.token("TERMINATOR","\n")}return true};Lexer.prototype.whitespaceToken=function(){var match,prev;if(!(match=WHITESPACE.exec(this.chunk))){return false}prev=last(this.tokens);if(prev){prev.spaced=true}this.i+=match[0].length;return true};Lexer.prototype.newlineToken=function(newlines){if(this.tag()!=="TERMINATOR"){this.token("TERMINATOR","\n")}return true};Lexer.prototype.suppressNewlines=function(){if(this.value()==="\\"){this.tokens.pop()}return true};Lexer.prototype.literalToken=function(){var _ref2,match,prev,tag,value;if(match=OPERATOR.exec(this.chunk)){value=match[0];if(CODE.test(value)){this.tagParameters()}}else{value=this.chunk.charAt(0)}this.i+=value.length;tag=value;prev=last(this.tokens);if(value==="="&&prev){if(!prev[1].reserved&&include(JS_FORBIDDEN,prev[1])){this.assignmentError()}if(((_ref2=prev[1])==="||"||_ref2==="&&")){prev[0]="COMPOUND_ASSIGN";prev[1]+="=";return true}}if(";"===value){tag="TERMINATOR"}else{if(include(LOGIC,value)){tag="LOGIC"}else{if(include(MATH,value)){tag="MATH"}else{if(include(COMPARE,value)){tag="COMPARE"}else{if(include(COMPOUND_ASSIGN,value)){tag="COMPOUND_ASSIGN"}else{if(include(UNARY,value)){tag="UNARY"}else{if(include(SHIFT,value)){tag="SHIFT"}else{if(value==="?"&&((prev!=null)?prev.spaced:undefined)){tag="LOGIC"}else{if(prev&&!prev.spaced){if(value==="("&&include(CALLABLE,prev[0])){if(prev[0]==="?"){prev[0]="FUNC_EXIST"}tag="CALL_START"}else{if(value==="["&&include(INDEXABLE,prev[0])){tag="INDEX_START";switch(prev[0]){case"?":prev[0]="INDEX_SOAK";break;case"::":prev[0]="INDEX_PROTO";break}}}}}}}}}}}}this.token(tag,value);return true};Lexer.prototype.tagAccessor=function(){var prev;if(!(prev=last(this.tokens))||prev.spaced){return false}if(prev[1]==="::"){this.tag(0,"PROTOTYPE_ACCESS")}else{if(prev[1]==="."&&this.value(1)!=="."){if(this.tag(1)==="?"){this.tag(0,"SOAK_ACCESS");this.tokens.splice(-2,1)}else{this.tag(0,"PROPERTY_ACCESS")}}else{return prev[0]==="@"}}return true};Lexer.prototype.sanitizeHeredoc=function(doc,options){var _ref2,attempt,herecomment,indent,match;indent=options.indent,herecomment=options.herecomment;if(herecomment&&0>doc.indexOf("\n")){return doc}if(!herecomment){while(match=HEREDOC_INDENT.exec(doc)){attempt=match[1];if(indent===null||(0<(_ref2=attempt.length))&&(_ref2<indent.length)){indent=attempt}}}if(indent){doc=doc.replace(RegExp("\\n"+indent,"g"),"\n")}if(!herecomment){doc=doc.replace(/^\n/,"")}return doc};Lexer.prototype.tagParameters=function(){var i,tok;if(this.tag()!==")"){return}i=this.tokens.length;while(tok=this.tokens[--i]){switch(tok[0]){case"IDENTIFIER":tok[0]="PARAM";break;case")":tok[0]="PARAM_END";break;case"(":case"CALL_START":tok[0]="PARAM_START";return true}}return true};Lexer.prototype.closeIndentation=function(){return this.outdentToken(this.indent)};Lexer.prototype.identifierError=function(word){throw SyntaxError('Reserved word "'+word+'" on line '+(this.line+1))};Lexer.prototype.assignmentError=function(){throw SyntaxError('Reserved word "'+(this.value())+'" on line '+(this.line+1)+" can't be assigned")};Lexer.prototype.balancedString=function(str,delimited,options){var _i,_len,close,i,levels,open,pair,slen;options||(options={});levels=[];i=0;slen=str.length;while(i<slen){if(levels.length&&str.charAt(i)==="\\"){i+=1}else{for(_i=0,_len=delimited.length;_i<_len;_i++){pair=delimited[_i];open=pair[0],close=pair[1];if(levels.length&&starts(str,close,i)&&last(levels)===pair){levels.pop();i+=close.length-1;if(!levels.length){i+=1}break}if(starts(str,open,i)){levels.push(pair);i+=open.length-1;break}}}if(!levels.length){break}i+=1}if(levels.length){throw SyntaxError("Unterminated "+(levels.pop()[0])+" starting on line "+(this.line+1))}return !i?false:str.slice(0,i)};Lexer.prototype.interpolateString=function(str,options){var _len,_ref2,_ref3,_this,expr,heredoc,i,inner,interpolated,letter,nested,pi,regex,tag,tokens,value;_ref2=options||(options={}),heredoc=_ref2.heredoc,regex=_ref2.regex;tokens=[];pi=0;i=-1;while(letter=str.charAt(i+=1)){if(letter==="\\"){i+=1;continue}if(!(letter==="#"&&str.charAt(i+1)==="{"&&(expr=this.balancedString(str.slice(i+1),[["{","}"]])))){continue}if(pi<i){tokens.push(["TO_BE_STRING",str.slice(pi,i)])}inner=expr.slice(1,-1).replace(LEADING_SPACES,"").replace(TRAILING_SPACES,"");if(inner.length){nested=new Lexer().tokenize(inner,{line:this.line,rewrite:false});nested.pop();if(nested.length>1){nested.unshift(["(","("]);nested.push([")",")"])}tokens.push(["TOKENS",nested])}i+=expr.length;pi=i+1}if((i>pi)&&(pi<str.length)){tokens.push(["TO_BE_STRING",str.slice(pi)])}if(regex){return tokens}if(!tokens.length){return this.token("STRING",'""')}if(tokens[0][0]!=="TO_BE_STRING"){tokens.unshift(["",""])}if(interpolated=tokens.length>1){this.token("(","(")}for(i=0,_len=tokens.length;i<_len;i++){_ref3=tokens[i],tag=_ref3[0],value=_ref3[1];if(i){this.token("+","+")}if(tag==="TOKENS"){(_this=this.tokens).push.apply(_this,value)}else{this.token("STRING",this.makeString(value,'"',heredoc))}}if(interpolated){this.token(")",")")}return tokens};Lexer.prototype.token=function(tag,value){return this.tokens.push([tag,value,this.line])};Lexer.prototype.tag=function(index,tag){var tok;return(tok=last(this.tokens,index))&&((tag!=null)?(tok[0]=tag):tok[0])};Lexer.prototype.value=function(index,val){var tok;return(tok=last(this.tokens,index))&&((val!=null)?(tok[1]=val):tok[1])};Lexer.prototype.unfinished=function(){var prev,value;return(prev=last(this.tokens,1))&&prev[0]!=="."&&(value=this.value())&&!value.reserved&&NO_NEWLINE.test(value)&&!CODE.test(value)&&!ASSIGNED.test(this.chunk)};Lexer.prototype.escapeLines=function(str,heredoc){return str.replace(MULTILINER,heredoc?"\\n":"")};Lexer.prototype.makeString=function(body,quote,heredoc){if(!body){return quote+quote}body=body.replace(/\\([\s\S])/g,function(match,contents){return(contents==="\n"||contents===quote)?contents:match});body=body.replace(RegExp(""+quote,"g"),"\\$&");return quote+this.escapeLines(body,heredoc)+quote};return Lexer})();JS_KEYWORDS=["true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","try","catch","finally","class","extends","super"];COFFEE_KEYWORDS=["then","unless","until","loop","of","by","when"];for(op in (COFFEE_ALIASES={and:"&&",or:"||",is:"==",isnt:"!=",not:"!",yes:"TRUE",no:"FALSE",on:"TRUE",off:"FALSE"})){COFFEE_KEYWORDS.push(op)}COFFEE_ALIASES["==="]="==";RESERVED=["case","default","do","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice"];JS_FORBIDDEN=JS_KEYWORDS.concat(RESERVED);IDENTIFIER=/^([$A-Za-z_][$\w]*)([^\n\S]*:(?!:))?/;NUMBER=/^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?/i;HEREDOC=/^("""|''')([\s\S]*?)(?:\n[ \t]*)?\1/;OPERATOR=/^(?:-[-=>]?|\+[+=]?|\.\.\.?|[*&|\/%=<>^:!?]+)/;WHITESPACE=/^[ \t]+/;COMMENT=/^###([^#][\s\S]*?)(?:###[ \t]*\n|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/;CODE=/^[-=]>/;MULTI_DENT=/^(?:\n[ \t]*)+/;SIMPLESTR=/^'[^\\']*(?:\\.[^\\']*)*'/;JSTOKEN=/^`[^\\`]*(?:\\.[^\\`]*)*`/;REGEX=/^\/(?!\s)(?:[^[\/\n\\]+|\\[\s\S]|\[([^\]\n\\]+|\\[\s\S])*])+\/[imgy]{0,4}(?![A-Za-z])/;HEREGEX=/^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?![A-Za-z])/;HEREGEX_OMIT=/\s+(?:#.*)?/g;MULTILINER=/\n/g;HEREDOC_INDENT=/\n+([ \t]*)/g;ASSIGNED=/^\s*@?[$A-Za-z_][$\w]*[ \t]*?[:=][^:=>]/;NEXT_CHARACTER=/^\s*(\S?)/;NEXT_ELLIPSIS=/^\s*\.\.\.?/;LEADING_SPACES=/^\s+/;TRAILING_SPACES=/\s+$/;NO_NEWLINE=/^(?:[-+*&|\/%=<>!.\\][<>=&|]*|and|or|is(?:nt)?|n(?:ot|ew)|delete|typeof|instanceof)$/;COMPOUND_ASSIGN=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="];UNARY=["UMINUS","UPLUS","!","!!","~","NEW","TYPEOF","DELETE"];LOGIC=["&","|","^","&&","||"];SHIFT=["<<",">>",">>>"];COMPARE=["<=","<",">",">="];MATH=["*","/","%"];RELATION=["IN","OF","INSTANCEOF"];BOOL=["TRUE","FALSE","NULL"];NOT_REGEX=["NUMBER","REGEX","BOOL","++","--","]"];CALLABLE=["IDENTIFIER","STRING","REGEX",")","]","}","?","::","@","THIS","SUPER"];INDEXABLE=CALLABLE.concat("NUMBER","BOOL");LINE_BREAK=["INDENT","OUTDENT","TERMINATOR"]}).call(this)};require["./parser"]=new function(){var exports=this;var parser=(function(){var parser={trace:function trace(){},yy:{},symbols_:{error:2,Root:3,TERMINATOR:4,Body:5,Block:6,Line:7,Expression:8,Statement:9,Return:10,Throw:11,BREAK:12,CONTINUE:13,DEBUGGER:14,Value:15,Invocation:16,Code:17,Operation:18,Assign:19,If:20,Try:21,While:22,For:23,Switch:24,Extends:25,Class:26,Existence:27,Comment:28,INDENT:29,OUTDENT:30,Identifier:31,IDENTIFIER:32,AlphaNumeric:33,NUMBER:34,STRING:35,Literal:36,JS:37,REGEX:38,BOOL:39,Assignable:40,"=":41,AssignObj:42,ThisProperty:43,":":44,RETURN:45,HERECOMMENT:46,"?":47,PARAM_START:48,ParamList:49,PARAM_END:50,FuncGlyph:51,"->":52,"=>":53,OptComma:54,",":55,Param:56,PARAM:57,"@":58,"...":59,Splat:60,SimpleAssignable:61,Accessor:62,Array:63,Object:64,Parenthetical:65,Range:66,This:67,PROPERTY_ACCESS:68,PROTOTYPE_ACCESS:69,"::":70,SOAK_ACCESS:71,Index:72,Slice:73,INDEX_START:74,INDEX_END:75,INDEX_SOAK:76,INDEX_PROTO:77,"{":78,AssignList:79,"}":80,CLASS:81,EXTENDS:82,ClassBody:83,ClassAssign:84,OptFuncExist:85,Arguments:86,SUPER:87,FUNC_EXIST:88,CALL_START:89,CALL_END:90,ArgList:91,THIS:92,RangeDots:93,"..":94,"[":95,"]":96,Arg:97,SimpleArgs:98,TRY:99,Catch:100,FINALLY:101,CATCH:102,THROW:103,"(":104,")":105,WhileSource:106,WHILE:107,WHEN:108,UNTIL:109,Loop:110,LOOP:111,ForBody:112,FOR:113,ForStart:114,ForSource:115,ForVariables:116,ALL:117,ForValue:118,FORIN:119,FOROF:120,BY:121,SWITCH:122,Whens:123,ELSE:124,When:125,LEADING_WHEN:126,IfBlock:127,IF:128,UNLESS:129,POST_IF:130,POST_UNLESS:131,UNARY:132,"-":133,"+":134,"--":135,"++":136,"==":137,"!=":138,MATH:139,SHIFT:140,COMPARE:141,LOGIC:142,COMPOUND_ASSIGN:143,RELATION:144,"$accept":0,"$end":1},terminals_:{"2":"error","4":"TERMINATOR","12":"BREAK","13":"CONTINUE","14":"DEBUGGER","29":"INDENT","30":"OUTDENT","32":"IDENTIFIER","34":"NUMBER","35":"STRING","37":"JS","38":"REGEX","39":"BOOL","41":"=","44":":","45":"RETURN","46":"HERECOMMENT","47":"?","48":"PARAM_START","50":"PARAM_END","52":"->","53":"=>","55":",","57":"PARAM","58":"@","59":"...","68":"PROPERTY_ACCESS","69":"PROTOTYPE_ACCESS","70":"::","71":"SOAK_ACCESS","74":"INDEX_START","75":"INDEX_END","76":"INDEX_SOAK","77":"INDEX_PROTO","78":"{","80":"}","81":"CLASS","82":"EXTENDS","87":"SUPER","88":"FUNC_EXIST","89":"CALL_START","90":"CALL_END","92":"THIS","94":"..","95":"[","96":"]","99":"TRY","101":"FINALLY","102":"CATCH","103":"THROW","104":"(","105":")","107":"WHILE","108":"WHEN","109":"UNTIL","111":"LOOP","113":"FOR","117":"ALL","119":"FORIN","120":"FOROF","121":"BY","122":"SWITCH","124":"ELSE","126":"LEADING_WHEN","128":"IF","129":"UNLESS","130":"POST_IF","131":"POST_UNLESS","132":"UNARY","133":"-","134":"+","135":"--","136":"++","137":"==","138":"!=","139":"MATH","140":"SHIFT","141":"COMPARE","142":"LOGIC","143":"COMPOUND_ASSIGN","144":"RELATION"},productions_:[0,[3,0],[3,1],[3,1],[3,2],[5,1],[5,3],[5,2],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[6,3],[6,2],[6,2],[31,1],[33,1],[33,1],[36,1],[36,1],[36,1],[36,1],[19,3],[19,5],[42,1],[42,1],[42,1],[42,3],[42,3],[42,5],[42,5],[42,1],[10,2],[10,1],[28,1],[27,2],[17,5],[17,2],[51,1],[51,1],[54,0],[54,1],[49,0],[49,1],[49,3],[56,1],[56,2],[56,2],[56,3],[60,2],[61,1],[61,2],[61,2],[61,1],[40,1],[40,1],[40,1],[15,1],[15,1],[15,1],[15,1],[15,1],[62,2],[62,2],[62,1],[62,2],[62,1],[62,1],[72,3],[72,2],[72,2],[64,4],[79,0],[79,1],[79,3],[79,4],[79,6],[26,2],[26,4],[26,5],[26,7],[26,4],[26,1],[26,3],[26,6],[84,1],[84,3],[84,5],[83,0],[83,1],[83,3],[83,3],[25,3],[16,3],[16,3],[16,1],[16,2],[85,0],[85,1],[86,2],[86,4],[67,1],[67,1],[93,1],[93,1],[43,2],[66,5],[73,5],[73,4],[73,4],[63,2],[63,4],[91,1],[91,3],[91,4],[91,4],[91,6],[97,1],[97,1],[98,1],[98,3],[21,2],[21,3],[21,4],[21,5],[100,3],[11,2],[65,3],[65,2],[106,2],[106,4],[106,2],[106,4],[22,2],[22,2],[22,2],[22,1],[110,2],[110,2],[23,2],[23,2],[23,2],[112,2],[112,2],[114,2],[114,3],[118,1],[118,1],[118,1],[116,1],[116,3],[115,2],[115,2],[115,4],[115,4],[115,4],[115,6],[115,6],[24,5],[24,7],[24,4],[24,6],[123,1],[123,2],[125,3],[125,4],[127,3],[127,3],[127,5],[127,3],[20,1],[20,3],[20,3],[20,3],[20,3],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,5],[18,3]],performAction:function anonymous(yytext,yyleng,yylineno,yy){var $$=arguments[5],$0=arguments[5].length;switch(arguments[4]){case 1:return this.$=new yy.Expressions;break;case 2:return this.$=new yy.Expressions;break;case 3:return this.$=$$[$0-1+1-1];break;case 4:return this.$=$$[$0-2+1-1];break;case 5:this.$=yy.Expressions.wrap([$$[$0-1+1-1]]);break;case 6:this.$=$$[$0-3+1-1].push($$[$0-3+3-1]);break;case 7:this.$=$$[$0-2+1-1];break;case 8:this.$=$$[$0-1+1-1];break;case 9:this.$=$$[$0-1+1-1];break;case 10:this.$=$$[$0-1+1-1];break;case 11:this.$=$$[$0-1+1-1];break;case 12:this.$=new yy.Literal($$[$0-1+1-1]);break;case 13:this.$=new yy.Literal($$[$0-1+1-1]);break;case 14:this.$=new yy.Literal($$[$0-1+1-1]);break;case 15:this.$=$$[$0-1+1-1];break;case 16:this.$=$$[$0-1+1-1];break;case 17:this.$=$$[$0-1+1-1];break;case 18:this.$=$$[$0-1+1-1];break;case 19:this.$=$$[$0-1+1-1];break;case 20:this.$=$$[$0-1+1-1];break;case 21:this.$=$$[$0-1+1-1];break;case 22:this.$=$$[$0-1+1-1];break;case 23:this.$=$$[$0-1+1-1];break;case 24:this.$=$$[$0-1+1-1];break;case 25:this.$=$$[$0-1+1-1];break;case 26:this.$=$$[$0-1+1-1];break;case 27:this.$=$$[$0-1+1-1];break;case 28:this.$=$$[$0-1+1-1];break;case 29:this.$=$$[$0-3+2-1];break;case 30:this.$=new yy.Expressions;break;case 31:this.$=yy.Expressions.wrap([$$[$0-2+2-1]]);break;case 32:this.$=new yy.Literal($$[$0-1+1-1]);break;case 33:this.$=new yy.Literal($$[$0-1+1-1]);break;case 34:this.$=new yy.Literal($$[$0-1+1-1]);break;case 35:this.$=$$[$0-1+1-1];break;case 36:this.$=new yy.Literal($$[$0-1+1-1]);break;case 37:this.$=new yy.Literal($$[$0-1+1-1]);break;case 38:this.$=new yy.Literal($$[$0-1+1-1]);break;case 39:this.$=new yy.Assign($$[$0-3+1-1],$$[$0-3+3-1]);break;case 40:this.$=new yy.Assign($$[$0-5+1-1],$$[$0-5+4-1]);break;case 41:this.$=new yy.Value($$[$0-1+1-1]);break;case 42:this.$=$$[$0-1+1-1];break;case 43:this.$=$$[$0-1+1-1];break;case 44:this.$=new yy.Assign(new yy.Value($$[$0-3+1-1]),$$[$0-3+3-1],"object");break;case 45:this.$=new yy.Assign(new yy.Value($$[$0-3+1-1]),$$[$0-3+3-1],"object");break;case 46:this.$=new yy.Assign(new yy.Value($$[$0-5+1-1]),$$[$0-5+4-1],"object");break;case 47:this.$=new yy.Assign(new yy.Value($$[$0-5+1-1]),$$[$0-5+4-1],"object");break;case 48:this.$=$$[$0-1+1-1];break;case 49:this.$=new yy.Return($$[$0-2+2-1]);break;case 50:this.$=new yy.Return;break;case 51:this.$=new yy.Comment($$[$0-1+1-1]);break;case 52:this.$=new yy.Existence($$[$0-2+1-1]);break;case 53:this.$=new yy.Code($$[$0-5+2-1],$$[$0-5+5-1],$$[$0-5+4-1]);break;case 54:this.$=new yy.Code([],$$[$0-2+2-1],$$[$0-2+1-1]);break;case 55:this.$="func";break;case 56:this.$="boundfunc";break;case 57:this.$=$$[$0-1+1-1];break;case 58:this.$=$$[$0-1+1-1];break;case 59:this.$=[];break;case 60:this.$=[$$[$0-1+1-1]];break;case 61:this.$=$$[$0-3+1-1].concat($$[$0-3+3-1]);break;case 62:this.$=new yy.Literal($$[$0-1+1-1]);break;case 63:this.$=new yy.Param($$[$0-2+2-1],true);break;case 64:this.$=new yy.Param($$[$0-2+1-1],false,true);break;case 65:this.$=new yy.Param($$[$0-3+2-1],true,true);break;case 66:this.$=new yy.Splat($$[$0-2+1-1]);break;case 67:this.$=new yy.Value($$[$0-1+1-1]);break;case 68:this.$=$$[$0-2+1-1].push($$[$0-2+2-1]);break;case 69:this.$=new yy.Value($$[$0-2+1-1],[$$[$0-2+2-1]]);break;case 70:this.$=$$[$0-1+1-1];break;case 71:this.$=$$[$0-1+1-1];break;case 72:this.$=new yy.Value($$[$0-1+1-1]);break;case 73:this.$=new yy.Value($$[$0-1+1-1]);break;case 74:this.$=$$[$0-1+1-1];break;case 75:this.$=new yy.Value($$[$0-1+1-1]);break;case 76:this.$=new yy.Value($$[$0-1+1-1]);break;case 77:this.$=new yy.Value($$[$0-1+1-1]);break;case 78:this.$=$$[$0-1+1-1];break;case 79:this.$=new yy.Accessor($$[$0-2+2-1]);break;case 80:this.$=new yy.Accessor($$[$0-2+2-1],"prototype");break;case 81:this.$=new yy.Accessor(new yy.Literal("prototype"));break;case 82:this.$=new yy.Accessor($$[$0-2+2-1],"soak");break;case 83:this.$=$$[$0-1+1-1];break;case 84:this.$=new yy.Slice($$[$0-1+1-1]);break;case 85:this.$=new yy.Index($$[$0-3+2-1]);break;case 86:this.$=(function(){$$[$0-2+2-1].soakNode=true;return $$[$0-2+2-1]}());break;case 87:this.$=(function(){$$[$0-2+2-1].proto=true;return $$[$0-2+2-1]}());break;case 88:this.$=new yy.ObjectLiteral($$[$0-4+2-1]);break;case 89:this.$=[];break;case 90:this.$=[$$[$0-1+1-1]];break;case 91:this.$=$$[$0-3+1-1].concat($$[$0-3+3-1]);break;case 92:this.$=$$[$0-4+1-1].concat($$[$0-4+4-1]);break;case 93:this.$=$$[$0-6+1-1].concat($$[$0-6+4-1]);break;case 94:this.$=new yy.Class($$[$0-2+2-1]);break;case 95:this.$=new yy.Class($$[$0-4+2-1],$$[$0-4+4-1]);break;case 96:this.$=new yy.Class($$[$0-5+2-1],null,$$[$0-5+4-1]);break;case 97:this.$=new yy.Class($$[$0-7+2-1],$$[$0-7+4-1],$$[$0-7+6-1]);break;case 98:this.$=new yy.Class("__temp__",null,$$[$0-4+3-1]);break;case 99:this.$=new yy.Class("__temp__",null,new yy.Expressions);break;case 100:this.$=new yy.Class("__temp__",$$[$0-3+3-1],new yy.Expressions);break;case 101:this.$=new yy.Class("__temp__",$$[$0-6+3-1],$$[$0-6+5-1]);break;case 102:this.$=$$[$0-1+1-1];break;case 103:this.$=new yy.Assign(new yy.Value($$[$0-3+1-1]),$$[$0-3+3-1],"this");break;case 104:this.$=new yy.Assign(new yy.Value($$[$0-5+1-1]),$$[$0-5+4-1],"this");break;case 105:this.$=[];break;case 106:this.$=[$$[$0-1+1-1]];break;case 107:this.$=$$[$0-3+1-1].concat($$[$0-3+3-1]);break;case 108:this.$=$$[$0-3+2-1];break;case 109:this.$=new yy.Extends($$[$0-3+1-1],$$[$0-3+3-1]);break;case 110:this.$=new yy.Call($$[$0-3+1-1],$$[$0-3+3-1],$$[$0-3+2-1]);break;case 111:this.$=new yy.Call($$[$0-3+1-1],$$[$0-3+3-1],$$[$0-3+2-1]);break;case 112:this.$=new yy.Call("super",[new yy.Splat(new yy.Literal("arguments"))]);break;case 113:this.$=new yy.Call("super",$$[$0-2+2-1]);break;case 114:this.$=false;break;case 115:this.$=true;break;case 116:this.$=[];break;case 117:this.$=$$[$0-4+2-1];break;case 118:this.$=new yy.Value(new yy.Literal("this"));break;case 119:this.$=new yy.Value(new yy.Literal("this"));break;case 120:this.$="inclusive";break;case 121:this.$="exclusive";break;case 122:this.$=new yy.Value(new yy.Literal("this"),[new yy.Accessor($$[$0-2+2-1])],"this");break;case 123:this.$=new yy.Range($$[$0-5+2-1],$$[$0-5+4-1],$$[$0-5+3-1]);break;case 124:this.$=new yy.Range($$[$0-5+2-1],$$[$0-5+4-1],$$[$0-5+3-1]);break;case 125:this.$=new yy.Range($$[$0-4+2-1],null,$$[$0-4+3-1]);break;case 126:this.$=new yy.Range(null,$$[$0-4+3-1],$$[$0-4+2-1]);break;case 127:this.$=new yy.ArrayLiteral([]);break;case 128:this.$=new yy.ArrayLiteral($$[$0-4+2-1]);break;case 129:this.$=[$$[$0-1+1-1]];break;case 130:this.$=$$[$0-3+1-1].concat($$[$0-3+3-1]);break;case 131:this.$=$$[$0-4+1-1].concat($$[$0-4+4-1]);break;case 132:this.$=$$[$0-4+2-1];break;case 133:this.$=$$[$0-6+1-1].concat($$[$0-6+4-1]);break;case 134:this.$=$$[$0-1+1-1];break;case 135:this.$=$$[$0-1+1-1];break;case 136:this.$=$$[$0-1+1-1];break;case 137:this.$=[].concat($$[$0-3+1-1],$$[$0-3+3-1]);break;case 138:this.$=new yy.Try($$[$0-2+2-1]);break;case 139:this.$=new yy.Try($$[$0-3+2-1],$$[$0-3+3-1][0],$$[$0-3+3-1][1]);break;case 140:this.$=new yy.Try($$[$0-4+2-1],null,null,$$[$0-4+4-1]);break;case 141:this.$=new yy.Try($$[$0-5+2-1],$$[$0-5+3-1][0],$$[$0-5+3-1][1],$$[$0-5+5-1]);break;case 142:this.$=[$$[$0-3+2-1],$$[$0-3+3-1]];break;case 143:this.$=new yy.Throw($$[$0-2+2-1]);break;case 144:this.$=new yy.Parens($$[$0-3+2-1]);break;case 145:this.$=new yy.Parens(new yy.Literal(""));break;case 146:this.$=new yy.While($$[$0-2+2-1]);break;case 147:this.$=new yy.While($$[$0-4+2-1],{guard:$$[$0-4+4-1]});break;case 148:this.$=new yy.While($$[$0-2+2-1],{invert:true});break;case 149:this.$=new yy.While($$[$0-4+2-1],{invert:true,guard:$$[$0-4+4-1]});break;case 150:this.$=$$[$0-2+1-1].addBody($$[$0-2+2-1]);break;case 151:this.$=$$[$0-2+2-1].addBody(yy.Expressions.wrap([$$[$0-2+1-1]]));break;case 152:this.$=$$[$0-2+2-1].addBody(yy.Expressions.wrap([$$[$0-2+1-1]]));break;case 153:this.$=$$[$0-1+1-1];break;case 154:this.$=new yy.While(new yy.Literal("true")).addBody($$[$0-2+2-1]);break;case 155:this.$=new yy.While(new yy.Literal("true")).addBody(yy.Expressions.wrap([$$[$0-2+2-1]]));break;case 156:this.$=new yy.For($$[$0-2+1-1],$$[$0-2+2-1],$$[$0-2+2-1].vars[0],$$[$0-2+2-1].vars[1]);break;case 157:this.$=new yy.For($$[$0-2+1-1],$$[$0-2+2-1],$$[$0-2+2-1].vars[0],$$[$0-2+2-1].vars[1]);break;case 158:this.$=new yy.For($$[$0-2+2-1],$$[$0-2+1-1],$$[$0-2+1-1].vars[0],$$[$0-2+1-1].vars[1]);break;case 159:this.$={source:new yy.Value($$[$0-2+2-1]),vars:[]};break;case 160:this.$=(function(){$$[$0-2+2-1].raw=$$[$0-2+1-1].raw;$$[$0-2+2-1].vars=$$[$0-2+1-1];return $$[$0-2+2-1]}());break;case 161:this.$=$$[$0-2+2-1];break;case 162:this.$=(function(){$$[$0-3+3-1].raw=true;return $$[$0-3+3-1]}());break;case 163:this.$=$$[$0-1+1-1];break;case 164:this.$=new yy.Value($$[$0-1+1-1]);break;case 165:this.$=new yy.Value($$[$0-1+1-1]);break;case 166:this.$=[$$[$0-1+1-1]];break;case 167:this.$=[$$[$0-3+1-1],$$[$0-3+3-1]];break;case 168:this.$={source:$$[$0-2+2-1]};break;case 169:this.$={source:$$[$0-2+2-1],object:true};break;case 170:this.$={source:$$[$0-4+2-1],guard:$$[$0-4+4-1]};break;case 171:this.$={source:$$[$0-4+2-1],guard:$$[$0-4+4-1],object:true};break;case 172:this.$={source:$$[$0-4+2-1],step:$$[$0-4+4-1]};break;case 173:this.$={source:$$[$0-6+2-1],guard:$$[$0-6+4-1],step:$$[$0-6+6-1]};break;case 174:this.$={source:$$[$0-6+2-1],step:$$[$0-6+4-1],guard:$$[$0-6+6-1]};break;case 175:this.$=new yy.Switch($$[$0-5+2-1],$$[$0-5+4-1]);break;case 176:this.$=new yy.Switch($$[$0-7+2-1],$$[$0-7+4-1],$$[$0-7+6-1]);break;case 177:this.$=new yy.Switch(null,$$[$0-4+3-1]);break;case 178:this.$=new yy.Switch(null,$$[$0-6+3-1],$$[$0-6+5-1]);break;case 179:this.$=$$[$0-1+1-1];break;case 180:this.$=$$[$0-2+1-1].concat($$[$0-2+2-1]);break;case 181:this.$=[[$$[$0-3+2-1],$$[$0-3+3-1]]];break;case 182:this.$=[[$$[$0-4+2-1],$$[$0-4+3-1]]];break;case 183:this.$=new yy.If($$[$0-3+2-1],$$[$0-3+3-1]);break;case 184:this.$=new yy.If($$[$0-3+2-1],$$[$0-3+3-1],{invert:true});break;case 185:this.$=$$[$0-5+1-1].addElse(new yy.If($$[$0-5+4-1],$$[$0-5+5-1]));break;case 186:this.$=$$[$0-3+1-1].addElse($$[$0-3+3-1]);break;case 187:this.$=$$[$0-1+1-1];break;case 188:this.$=new yy.If($$[$0-3+3-1],yy.Expressions.wrap([$$[$0-3+1-1]]),{statement:true});break;case 189:this.$=new yy.If($$[$0-3+3-1],yy.Expressions.wrap([$$[$0-3+1-1]]),{statement:true});break;case 190:this.$=new yy.If($$[$0-3+3-1],yy.Expressions.wrap([$$[$0-3+1-1]]),{statement:true,invert:true});break;case 191:this.$=new yy.If($$[$0-3+3-1],yy.Expressions.wrap([$$[$0-3+1-1]]),{statement:true,invert:true});break;case 192:this.$=new yy.Op($$[$0-2+1-1],$$[$0-2+2-1]);break;case 193:this.$=new yy.Op("-",$$[$0-2+2-1]);break;case 194:this.$=new yy.Op("+",$$[$0-2+2-1]);break;case 195:this.$=new yy.Op("--",$$[$0-2+2-1]);break;case 196:this.$=new yy.Op("++",$$[$0-2+2-1]);break;case 197:this.$=new yy.Op("--",$$[$0-2+1-1],null,true);break;case 198:this.$=new yy.Op("++",$$[$0-2+1-1],null,true);break;case 199:this.$=new yy.Op("+",$$[$0-3+1-1],$$[$0-3+3-1]);break;case 200:this.$=new yy.Op("-",$$[$0-3+1-1],$$[$0-3+3-1]);break;case 201:this.$=new yy.Op("==",$$[$0-3+1-1],$$[$0-3+3-1]);break;case 202:this.$=new yy.Op("!=",$$[$0-3+1-1],$$[$0-3+3-1]);break;case 203:this.$=new yy.Op($$[$0-3+2-1],$$[$0-3+1-1],$$[$0-3+3-1]);break;case 204:this.$=new yy.Op($$[$0-3+2-1],$$[$0-3+1-1],$$[$0-3+3-1]);break;case 205:this.$=new yy.Op($$[$0-3+2-1],$$[$0-3+1-1],$$[$0-3+3-1]);break;case 206:this.$=new yy.Op($$[$0-3+2-1],$$[$0-3+1-1],$$[$0-3+3-1]);break;case 207:this.$=new yy.Op($$[$0-3+2-1],$$[$0-3+1-1],$$[$0-3+3-1]);break;case 208:this.$=new yy.Op($$[$0-5+2-1],$$[$0-5+1-1],$$[$0-5+4-1]);break;case 209:this.$=$$[$0-3+2-1].charAt(0)==="!"?($$[$0-3+2-1]==="!in"?new yy.Op("!",new yy.In($$[$0-3+1-1],$$[$0-3+3-1])):new yy.Op("!",new yy.Parens(new yy.Op($$[$0-3+2-1].slice(1),$$[$0-3+1-1],$$[$0-3+3-1])))):($$[$0-3+2-1]==="in"?new yy.In($$[$0-3+1-1],$$[$0-3+3-1]):new yy.Op($$[$0-3+2-1],$$[$0-3+1-1],$$[$0-3+3-1]));break}},table:[{"1":[2,1],"3":1,"4":[1,2],"5":3,"6":4,"7":5,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,6],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[3]},{"1":[2,2],"28":77,"46":[1,49]},{"1":[2,3],"4":[1,78]},{"4":[1,79]},{"1":[2,5],"4":[2,5],"30":[2,5]},{"5":80,"7":5,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[1,81],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,8],"4":[2,8],"30":[2,8],"47":[1,97],"105":[2,8],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,9],"4":[2,9],"30":[2,9],"105":[2,9],"106":100,"107":[1,66],"109":[1,67],"112":101,"113":[1,69],"114":70,"130":[1,98],"131":[1,99]},{"1":[2,15],"4":[2,15],"29":[2,15],"30":[2,15],"47":[2,15],"55":[2,15],"59":[2,15],"62":104,"68":[1,106],"69":[1,107],"70":[1,108],"71":[1,109],"72":110,"73":111,"74":[1,112],"75":[2,15],"76":[1,113],"77":[1,114],"80":[2,15],"85":102,"88":[1,105],"89":[2,114],"90":[2,15],"94":[2,15],"96":[2,15],"105":[2,15],"107":[2,15],"108":[2,15],"109":[2,15],"113":[2,15],"121":[2,15],"130":[2,15],"131":[2,15],"133":[2,15],"134":[2,15],"135":[2,15],"136":[2,15],"137":[2,15],"138":[2,15],"139":[2,15],"140":[2,15],"141":[2,15],"142":[2,15],"143":[1,103],"144":[2,15]},{"1":[2,16],"4":[2,16],"29":[2,16],"30":[2,16],"47":[2,16],"55":[2,16],"59":[2,16],"62":116,"68":[1,106],"69":[1,107],"70":[1,108],"71":[1,109],"72":110,"73":111,"74":[1,112],"75":[2,16],"76":[1,113],"77":[1,114],"80":[2,16],"85":115,"88":[1,105],"89":[2,114],"90":[2,16],"94":[2,16],"96":[2,16],"105":[2,16],"107":[2,16],"108":[2,16],"109":[2,16],"113":[2,16],"121":[2,16],"130":[2,16],"131":[2,16],"133":[2,16],"134":[2,16],"135":[2,16],"136":[2,16],"137":[2,16],"138":[2,16],"139":[2,16],"140":[2,16],"141":[2,16],"142":[2,16],"144":[2,16]},{"1":[2,17],"4":[2,17],"29":[2,17],"30":[2,17],"47":[2,17],"55":[2,17],"59":[2,17],"75":[2,17],"80":[2,17],"90":[2,17],"94":[2,17],"96":[2,17],"105":[2,17],"107":[2,17],"108":[2,17],"109":[2,17],"113":[2,17],"121":[2,17],"130":[2,17],"131":[2,17],"133":[2,17],"134":[2,17],"135":[2,17],"136":[2,17],"137":[2,17],"138":[2,17],"139":[2,17],"140":[2,17],"141":[2,17],"142":[2,17],"144":[2,17]},{"1":[2,18],"4":[2,18],"29":[2,18],"30":[2,18],"47":[2,18],"55":[2,18],"59":[2,18],"75":[2,18],"80":[2,18],"90":[2,18],"94":[2,18],"96":[2,18],"105":[2,18],"107":[2,18],"108":[2,18],"109":[2,18],"113":[2,18],"121":[2,18],"130":[2,18],"131":[2,18],"133":[2,18],"134":[2,18],"135":[2,18],"136":[2,18],"137":[2,18],"138":[2,18],"139":[2,18],"140":[2,18],"141":[2,18],"142":[2,18],"144":[2,18]},{"1":[2,19],"4":[2,19],"29":[2,19],"30":[2,19],"47":[2,19],"55":[2,19],"59":[2,19],"75":[2,19],"80":[2,19],"90":[2,19],"94":[2,19],"96":[2,19],"105":[2,19],"107":[2,19],"108":[2,19],"109":[2,19],"113":[2,19],"121":[2,19],"130":[2,19],"131":[2,19],"133":[2,19],"134":[2,19],"135":[2,19],"136":[2,19],"137":[2,19],"138":[2,19],"139":[2,19],"140":[2,19],"141":[2,19],"142":[2,19],"144":[2,19]},{"1":[2,20],"4":[2,20],"29":[2,20],"30":[2,20],"47":[2,20],"55":[2,20],"59":[2,20],"75":[2,20],"80":[2,20],"90":[2,20],"94":[2,20],"96":[2,20],"105":[2,20],"107":[2,20],"108":[2,20],"109":[2,20],"113":[2,20],"121":[2,20],"130":[2,20],"131":[2,20],"133":[2,20],"134":[2,20],"135":[2,20],"136":[2,20],"137":[2,20],"138":[2,20],"139":[2,20],"140":[2,20],"141":[2,20],"142":[2,20],"144":[2,20]},{"1":[2,21],"4":[2,21],"29":[2,21],"30":[2,21],"47":[2,21],"55":[2,21],"59":[2,21],"75":[2,21],"80":[2,21],"90":[2,21],"94":[2,21],"96":[2,21],"105":[2,21],"107":[2,21],"108":[2,21],"109":[2,21],"113":[2,21],"121":[2,21],"130":[2,21],"131":[2,21],"133":[2,21],"134":[2,21],"135":[2,21],"136":[2,21],"137":[2,21],"138":[2,21],"139":[2,21],"140":[2,21],"141":[2,21],"142":[2,21],"144":[2,21]},{"1":[2,22],"4":[2,22],"29":[2,22],"30":[2,22],"47":[2,22],"55":[2,22],"59":[2,22],"75":[2,22],"80":[2,22],"90":[2,22],"94":[2,22],"96":[2,22],"105":[2,22],"107":[2,22],"108":[2,22],"109":[2,22],"113":[2,22],"121":[2,22],"130":[2,22],"131":[2,22],"133":[2,22],"134":[2,22],"135":[2,22],"136":[2,22],"137":[2,22],"138":[2,22],"139":[2,22],"140":[2,22],"141":[2,22],"142":[2,22],"144":[2,22]},{"1":[2,23],"4":[2,23],"29":[2,23],"30":[2,23],"47":[2,23],"55":[2,23],"59":[2,23],"75":[2,23],"80":[2,23],"90":[2,23],"94":[2,23],"96":[2,23],"105":[2,23],"107":[2,23],"108":[2,23],"109":[2,23],"113":[2,23],"121":[2,23],"130":[2,23],"131":[2,23],"133":[2,23],"134":[2,23],"135":[2,23],"136":[2,23],"137":[2,23],"138":[2,23],"139":[2,23],"140":[2,23],"141":[2,23],"142":[2,23],"144":[2,23]},{"1":[2,24],"4":[2,24],"29":[2,24],"30":[2,24],"47":[2,24],"55":[2,24],"59":[2,24],"75":[2,24],"80":[2,24],"90":[2,24],"94":[2,24],"96":[2,24],"105":[2,24],"107":[2,24],"108":[2,24],"109":[2,24],"113":[2,24],"121":[2,24],"130":[2,24],"131":[2,24],"133":[2,24],"134":[2,24],"135":[2,24],"136":[2,24],"137":[2,24],"138":[2,24],"139":[2,24],"140":[2,24],"141":[2,24],"142":[2,24],"144":[2,24]},{"1":[2,25],"4":[2,25],"29":[2,25],"30":[2,25],"47":[2,25],"55":[2,25],"59":[2,25],"75":[2,25],"80":[2,25],"90":[2,25],"94":[2,25],"96":[2,25],"105":[2,25],"107":[2,25],"108":[2,25],"109":[2,25],"113":[2,25],"121":[2,25],"130":[2,25],"131":[2,25],"133":[2,25],"134":[2,25],"135":[2,25],"136":[2,25],"137":[2,25],"138":[2,25],"139":[2,25],"140":[2,25],"141":[2,25],"142":[2,25],"144":[2,25]},{"1":[2,26],"4":[2,26],"29":[2,26],"30":[2,26],"47":[2,26],"55":[2,26],"59":[2,26],"75":[2,26],"80":[2,26],"90":[2,26],"94":[2,26],"96":[2,26],"105":[2,26],"107":[2,26],"108":[2,26],"109":[2,26],"113":[2,26],"121":[2,26],"130":[2,26],"131":[2,26],"133":[2,26],"134":[2,26],"135":[2,26],"136":[2,26],"137":[2,26],"138":[2,26],"139":[2,26],"140":[2,26],"141":[2,26],"142":[2,26],"144":[2,26]},{"1":[2,27],"4":[2,27],"29":[2,27],"30":[2,27],"47":[2,27],"55":[2,27],"59":[2,27],"75":[2,27],"80":[2,27],"90":[2,27],"94":[2,27],"96":[2,27],"105":[2,27],"107":[2,27],"108":[2,27],"109":[2,27],"113":[2,27],"121":[2,27],"130":[2,27],"131":[2,27],"133":[2,27],"134":[2,27],"135":[2,27],"136":[2,27],"137":[2,27],"138":[2,27],"139":[2,27],"140":[2,27],"141":[2,27],"142":[2,27],"144":[2,27]},{"1":[2,28],"4":[2,28],"29":[2,28],"30":[2,28],"47":[2,28],"55":[2,28],"59":[2,28],"75":[2,28],"80":[2,28],"90":[2,28],"94":[2,28],"96":[2,28],"105":[2,28],"107":[2,28],"108":[2,28],"109":[2,28],"113":[2,28],"121":[2,28],"130":[2,28],"131":[2,28],"133":[2,28],"134":[2,28],"135":[2,28],"136":[2,28],"137":[2,28],"138":[2,28],"139":[2,28],"140":[2,28],"141":[2,28],"142":[2,28],"144":[2,28]},{"1":[2,10],"4":[2,10],"30":[2,10],"105":[2,10],"107":[2,10],"109":[2,10],"113":[2,10],"130":[2,10],"131":[2,10]},{"1":[2,11],"4":[2,11],"30":[2,11],"105":[2,11],"107":[2,11],"109":[2,11],"113":[2,11],"130":[2,11],"131":[2,11]},{"1":[2,12],"4":[2,12],"30":[2,12],"105":[2,12],"107":[2,12],"109":[2,12],"113":[2,12],"130":[2,12],"131":[2,12]},{"1":[2,13],"4":[2,13],"30":[2,13],"105":[2,13],"107":[2,13],"109":[2,13],"113":[2,13],"130":[2,13],"131":[2,13]},{"1":[2,14],"4":[2,14],"30":[2,14],"105":[2,14],"107":[2,14],"109":[2,14],"113":[2,14],"130":[2,14],"131":[2,14]},{"1":[2,74],"4":[2,74],"29":[2,74],"30":[2,74],"41":[1,117],"47":[2,74],"55":[2,74],"59":[2,74],"68":[2,74],"69":[2,74],"70":[2,74],"71":[2,74],"74":[2,74],"75":[2,74],"76":[2,74],"77":[2,74],"80":[2,74],"88":[2,74],"89":[2,74],"90":[2,74],"94":[2,74],"96":[2,74],"105":[2,74],"107":[2,74],"108":[2,74],"109":[2,74],"113":[2,74],"121":[2,74],"130":[2,74],"131":[2,74],"133":[2,74],"134":[2,74],"135":[2,74],"136":[2,74],"137":[2,74],"138":[2,74],"139":[2,74],"140":[2,74],"141":[2,74],"142":[2,74],"143":[2,74],"144":[2,74]},{"1":[2,75],"4":[2,75],"29":[2,75],"30":[2,75],"47":[2,75],"55":[2,75],"59":[2,75],"68":[2,75],"69":[2,75],"70":[2,75],"71":[2,75],"74":[2,75],"75":[2,75],"76":[2,75],"77":[2,75],"80":[2,75],"88":[2,75],"89":[2,75],"90":[2,75],"94":[2,75],"96":[2,75],"105":[2,75],"107":[2,75],"108":[2,75],"109":[2,75],"113":[2,75],"121":[2,75],"130":[2,75],"131":[2,75],"133":[2,75],"134":[2,75],"135":[2,75],"136":[2,75],"137":[2,75],"138":[2,75],"139":[2,75],"140":[2,75],"141":[2,75],"142":[2,75],"143":[2,75],"144":[2,75]},{"1":[2,76],"4":[2,76],"29":[2,76],"30":[2,76],"47":[2,76],"55":[2,76],"59":[2,76],"68":[2,76],"69":[2,76],"70":[2,76],"71":[2,76],"74":[2,76],"75":[2,76],"76":[2,76],"77":[2,76],"80":[2,76],"88":[2,76],"89":[2,76],"90":[2,76],"94":[2,76],"96":[2,76],"105":[2,76],"107":[2,76],"108":[2,76],"109":[2,76],"113":[2,76],"121":[2,76],"130":[2,76],"131":[2,76],"133":[2,76],"134":[2,76],"135":[2,76],"136":[2,76],"137":[2,76],"138":[2,76],"139":[2,76],"140":[2,76],"141":[2,76],"142":[2,76],"143":[2,76],"144":[2,76]},{"1":[2,77],"4":[2,77],"29":[2,77],"30":[2,77],"47":[2,77],"55":[2,77],"59":[2,77],"68":[2,77],"69":[2,77],"70":[2,77],"71":[2,77],"74":[2,77],"75":[2,77],"76":[2,77],"77":[2,77],"80":[2,77],"88":[2,77],"89":[2,77],"90":[2,77],"94":[2,77],"96":[2,77],"105":[2,77],"107":[2,77],"108":[2,77],"109":[2,77],"113":[2,77],"121":[2,77],"130":[2,77],"131":[2,77],"133":[2,77],"134":[2,77],"135":[2,77],"136":[2,77],"137":[2,77],"138":[2,77],"139":[2,77],"140":[2,77],"141":[2,77],"142":[2,77],"143":[2,77],"144":[2,77]},{"1":[2,78],"4":[2,78],"29":[2,78],"30":[2,78],"47":[2,78],"55":[2,78],"59":[2,78],"68":[2,78],"69":[2,78],"70":[2,78],"71":[2,78],"74":[2,78],"75":[2,78],"76":[2,78],"77":[2,78],"80":[2,78],"88":[2,78],"89":[2,78],"90":[2,78],"94":[2,78],"96":[2,78],"105":[2,78],"107":[2,78],"108":[2,78],"109":[2,78],"113":[2,78],"121":[2,78],"130":[2,78],"131":[2,78],"133":[2,78],"134":[2,78],"135":[2,78],"136":[2,78],"137":[2,78],"138":[2,78],"139":[2,78],"140":[2,78],"141":[2,78],"142":[2,78],"143":[2,78],"144":[2,78]},{"1":[2,112],"4":[2,112],"29":[2,112],"30":[2,112],"47":[2,112],"55":[2,112],"59":[2,112],"68":[2,112],"69":[2,112],"70":[2,112],"71":[2,112],"74":[2,112],"75":[2,112],"76":[2,112],"77":[2,112],"80":[2,112],"86":118,"88":[2,112],"89":[1,119],"90":[2,112],"94":[2,112],"96":[2,112],"105":[2,112],"107":[2,112],"108":[2,112],"109":[2,112],"113":[2,112],"121":[2,112],"130":[2,112],"131":[2,112],"133":[2,112],"134":[2,112],"135":[2,112],"136":[2,112],"137":[2,112],"138":[2,112],"139":[2,112],"140":[2,112],"141":[2,112],"142":[2,112],"144":[2,112]},{"49":120,"50":[2,59],"55":[2,59],"56":121,"57":[1,122],"58":[1,123]},{"4":[1,125],"6":124,"29":[1,6]},{"8":126,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":128,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":129,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":130,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":131,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,187],"4":[2,187],"29":[2,187],"30":[2,187],"47":[2,187],"55":[2,187],"59":[2,187],"75":[2,187],"80":[2,187],"90":[2,187],"94":[2,187],"96":[2,187],"105":[2,187],"107":[2,187],"108":[2,187],"109":[2,187],"113":[2,187],"121":[2,187],"124":[1,132],"130":[2,187],"131":[2,187],"133":[2,187],"134":[2,187],"135":[2,187],"136":[2,187],"137":[2,187],"138":[2,187],"139":[2,187],"140":[2,187],"141":[2,187],"142":[2,187],"144":[2,187]},{"4":[1,125],"6":133,"29":[1,6]},{"4":[1,125],"6":134,"29":[1,6]},{"1":[2,153],"4":[2,153],"29":[2,153],"30":[2,153],"47":[2,153],"55":[2,153],"59":[2,153],"75":[2,153],"80":[2,153],"90":[2,153],"94":[2,153],"96":[2,153],"105":[2,153],"107":[2,153],"108":[2,153],"109":[2,153],"113":[2,153],"121":[2,153],"130":[2,153],"131":[2,153],"133":[2,153],"134":[2,153],"135":[2,153],"136":[2,153],"137":[2,153],"138":[2,153],"139":[2,153],"140":[2,153],"141":[2,153],"142":[2,153],"144":[2,153]},{"4":[1,125],"6":135,"29":[1,6]},{"8":136,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,137],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,71],"4":[2,71],"29":[2,71],"30":[2,71],"41":[2,71],"47":[2,71],"55":[2,71],"59":[2,71],"68":[2,71],"69":[2,71],"70":[2,71],"71":[2,71],"74":[2,71],"75":[2,71],"76":[2,71],"77":[2,71],"80":[2,71],"82":[1,138],"88":[2,71],"89":[2,71],"90":[2,71],"94":[2,71],"96":[2,71],"105":[2,71],"107":[2,71],"108":[2,71],"109":[2,71],"113":[2,71],"121":[2,71],"130":[2,71],"131":[2,71],"133":[2,71],"134":[2,71],"135":[2,71],"136":[2,71],"137":[2,71],"138":[2,71],"139":[2,71],"140":[2,71],"141":[2,71],"142":[2,71],"143":[2,71],"144":[2,71]},{"1":[2,99],"4":[2,99],"15":142,"16":143,"29":[1,140],"30":[2,99],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":144,"43":72,"47":[2,99],"55":[2,99],"58":[1,61],"59":[2,99],"61":139,"63":52,"64":53,"65":30,"66":31,"67":32,"75":[2,99],"78":[1,73],"80":[2,99],"82":[1,141],"87":[1,33],"90":[2,99],"92":[1,60],"94":[2,99],"95":[1,59],"96":[2,99],"104":[1,58],"105":[2,99],"107":[2,99],"108":[2,99],"109":[2,99],"113":[2,99],"121":[2,99],"130":[2,99],"131":[2,99],"133":[2,99],"134":[2,99],"135":[2,99],"136":[2,99],"137":[2,99],"138":[2,99],"139":[2,99],"140":[2,99],"141":[2,99],"142":[2,99],"144":[2,99]},{"1":[2,51],"4":[2,51],"29":[2,51],"30":[2,51],"47":[2,51],"55":[2,51],"59":[2,51],"75":[2,51],"80":[2,51],"90":[2,51],"94":[2,51],"96":[2,51],"101":[2,51],"102":[2,51],"105":[2,51],"107":[2,51],"108":[2,51],"109":[2,51],"113":[2,51],"121":[2,51],"124":[2,51],"126":[2,51],"130":[2,51],"131":[2,51],"133":[2,51],"134":[2,51],"135":[2,51],"136":[2,51],"137":[2,51],"138":[2,51],"139":[2,51],"140":[2,51],"141":[2,51],"142":[2,51],"144":[2,51]},{"1":[2,50],"4":[2,50],"8":145,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[2,50],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"105":[2,50],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"130":[2,50],"131":[2,50],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":146,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,72],"4":[2,72],"29":[2,72],"30":[2,72],"41":[2,72],"47":[2,72],"55":[2,72],"59":[2,72],"68":[2,72],"69":[2,72],"70":[2,72],"71":[2,72],"74":[2,72],"75":[2,72],"76":[2,72],"77":[2,72],"80":[2,72],"88":[2,72],"89":[2,72],"90":[2,72],"94":[2,72],"96":[2,72],"105":[2,72],"107":[2,72],"108":[2,72],"109":[2,72],"113":[2,72],"121":[2,72],"130":[2,72],"131":[2,72],"133":[2,72],"134":[2,72],"135":[2,72],"136":[2,72],"137":[2,72],"138":[2,72],"139":[2,72],"140":[2,72],"141":[2,72],"142":[2,72],"143":[2,72],"144":[2,72]},{"1":[2,73],"4":[2,73],"29":[2,73],"30":[2,73],"41":[2,73],"47":[2,73],"55":[2,73],"59":[2,73],"68":[2,73],"69":[2,73],"70":[2,73],"71":[2,73],"74":[2,73],"75":[2,73],"76":[2,73],"77":[2,73],"80":[2,73],"88":[2,73],"89":[2,73],"90":[2,73],"94":[2,73],"96":[2,73],"105":[2,73],"107":[2,73],"108":[2,73],"109":[2,73],"113":[2,73],"121":[2,73],"130":[2,73],"131":[2,73],"133":[2,73],"134":[2,73],"135":[2,73],"136":[2,73],"137":[2,73],"138":[2,73],"139":[2,73],"140":[2,73],"141":[2,73],"142":[2,73],"143":[2,73],"144":[2,73]},{"1":[2,35],"4":[2,35],"29":[2,35],"30":[2,35],"47":[2,35],"55":[2,35],"59":[2,35],"68":[2,35],"69":[2,35],"70":[2,35],"71":[2,35],"74":[2,35],"75":[2,35],"76":[2,35],"77":[2,35],"80":[2,35],"88":[2,35],"89":[2,35],"90":[2,35],"94":[2,35],"96":[2,35],"105":[2,35],"107":[2,35],"108":[2,35],"109":[2,35],"113":[2,35],"121":[2,35],"130":[2,35],"131":[2,35],"133":[2,35],"134":[2,35],"135":[2,35],"136":[2,35],"137":[2,35],"138":[2,35],"139":[2,35],"140":[2,35],"141":[2,35],"142":[2,35],"143":[2,35],"144":[2,35]},{"1":[2,36],"4":[2,36],"29":[2,36],"30":[2,36],"47":[2,36],"55":[2,36],"59":[2,36],"68":[2,36],"69":[2,36],"70":[2,36],"71":[2,36],"74":[2,36],"75":[2,36],"76":[2,36],"77":[2,36],"80":[2,36],"88":[2,36],"89":[2,36],"90":[2,36],"94":[2,36],"96":[2,36],"105":[2,36],"107":[2,36],"108":[2,36],"109":[2,36],"113":[2,36],"121":[2,36],"130":[2,36],"131":[2,36],"133":[2,36],"134":[2,36],"135":[2,36],"136":[2,36],"137":[2,36],"138":[2,36],"139":[2,36],"140":[2,36],"141":[2,36],"142":[2,36],"143":[2,36],"144":[2,36]},{"1":[2,37],"4":[2,37],"29":[2,37],"30":[2,37],"47":[2,37],"55":[2,37],"59":[2,37],"68":[2,37],"69":[2,37],"70":[2,37],"71":[2,37],"74":[2,37],"75":[2,37],"76":[2,37],"77":[2,37],"80":[2,37],"88":[2,37],"89":[2,37],"90":[2,37],"94":[2,37],"96":[2,37],"105":[2,37],"107":[2,37],"108":[2,37],"109":[2,37],"113":[2,37],"121":[2,37],"130":[2,37],"131":[2,37],"133":[2,37],"134":[2,37],"135":[2,37],"136":[2,37],"137":[2,37],"138":[2,37],"139":[2,37],"140":[2,37],"141":[2,37],"142":[2,37],"143":[2,37],"144":[2,37]},{"1":[2,38],"4":[2,38],"29":[2,38],"30":[2,38],"47":[2,38],"55":[2,38],"59":[2,38],"68":[2,38],"69":[2,38],"70":[2,38],"71":[2,38],"74":[2,38],"75":[2,38],"76":[2,38],"77":[2,38],"80":[2,38],"88":[2,38],"89":[2,38],"90":[2,38],"94":[2,38],"96":[2,38],"105":[2,38],"107":[2,38],"108":[2,38],"109":[2,38],"113":[2,38],"121":[2,38],"130":[2,38],"131":[2,38],"133":[2,38],"134":[2,38],"135":[2,38],"136":[2,38],"137":[2,38],"138":[2,38],"139":[2,38],"140":[2,38],"141":[2,38],"142":[2,38],"143":[2,38],"144":[2,38]},{"7":147,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"105":[1,148],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":149,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"91":151,"92":[1,60],"95":[1,59],"96":[1,150],"97":152,"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,118],"4":[2,118],"29":[2,118],"30":[2,118],"47":[2,118],"55":[2,118],"59":[2,118],"68":[2,118],"69":[2,118],"70":[2,118],"71":[2,118],"74":[2,118],"75":[2,118],"76":[2,118],"77":[2,118],"80":[2,118],"88":[2,118],"89":[2,118],"90":[2,118],"94":[2,118],"96":[2,118],"105":[2,118],"107":[2,118],"108":[2,118],"109":[2,118],"113":[2,118],"121":[2,118],"130":[2,118],"131":[2,118],"133":[2,118],"134":[2,118],"135":[2,118],"136":[2,118],"137":[2,118],"138":[2,118],"139":[2,118],"140":[2,118],"141":[2,118],"142":[2,118],"143":[2,118],"144":[2,118]},{"1":[2,119],"4":[2,119],"29":[2,119],"30":[2,119],"31":155,"32":[1,76],"47":[2,119],"55":[2,119],"59":[2,119],"68":[2,119],"69":[2,119],"70":[2,119],"71":[2,119],"74":[2,119],"75":[2,119],"76":[2,119],"77":[2,119],"80":[2,119],"88":[2,119],"89":[2,119],"90":[2,119],"94":[2,119],"96":[2,119],"105":[2,119],"107":[2,119],"108":[2,119],"109":[2,119],"113":[2,119],"121":[2,119],"130":[2,119],"131":[2,119],"133":[2,119],"134":[2,119],"135":[2,119],"136":[2,119],"137":[2,119],"138":[2,119],"139":[2,119],"140":[2,119],"141":[2,119],"142":[2,119],"143":[2,119],"144":[2,119]},{"4":[2,55],"29":[2,55]},{"4":[2,56],"29":[2,56]},{"8":156,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":157,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":158,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":159,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[1,125],"6":160,"8":161,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,6],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"31":166,"32":[1,76],"63":167,"64":168,"66":162,"78":[1,73],"95":[1,59],"116":163,"117":[1,164],"118":165},{"115":169,"119":[1,170],"120":[1,171]},{"1":[2,67],"4":[2,67],"29":[2,67],"30":[2,67],"41":[2,67],"47":[2,67],"55":[2,67],"59":[2,67],"68":[2,67],"69":[2,67],"70":[2,67],"71":[2,67],"74":[2,67],"75":[2,67],"76":[2,67],"77":[2,67],"80":[2,67],"82":[2,67],"88":[2,67],"89":[2,67],"90":[2,67],"94":[2,67],"96":[2,67],"105":[2,67],"107":[2,67],"108":[2,67],"109":[2,67],"113":[2,67],"121":[2,67],"130":[2,67],"131":[2,67],"133":[2,67],"134":[2,67],"135":[2,67],"136":[2,67],"137":[2,67],"138":[2,67],"139":[2,67],"140":[2,67],"141":[2,67],"142":[2,67],"143":[2,67],"144":[2,67]},{"1":[2,70],"4":[2,70],"29":[2,70],"30":[2,70],"41":[2,70],"47":[2,70],"55":[2,70],"59":[2,70],"68":[2,70],"69":[2,70],"70":[2,70],"71":[2,70],"74":[2,70],"75":[2,70],"76":[2,70],"77":[2,70],"80":[2,70],"82":[2,70],"88":[2,70],"89":[2,70],"90":[2,70],"94":[2,70],"96":[2,70],"105":[2,70],"107":[2,70],"108":[2,70],"109":[2,70],"113":[2,70],"121":[2,70],"130":[2,70],"131":[2,70],"133":[2,70],"134":[2,70],"135":[2,70],"136":[2,70],"137":[2,70],"138":[2,70],"139":[2,70],"140":[2,70],"141":[2,70],"142":[2,70],"143":[2,70],"144":[2,70]},{"4":[2,89],"28":177,"29":[2,89],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":173,"43":176,"46":[1,49],"55":[2,89],"58":[1,178],"79":172,"80":[2,89]},{"1":[2,33],"4":[2,33],"29":[2,33],"30":[2,33],"44":[2,33],"47":[2,33],"55":[2,33],"59":[2,33],"68":[2,33],"69":[2,33],"70":[2,33],"71":[2,33],"74":[2,33],"75":[2,33],"76":[2,33],"77":[2,33],"80":[2,33],"88":[2,33],"89":[2,33],"90":[2,33],"94":[2,33],"96":[2,33],"105":[2,33],"107":[2,33],"108":[2,33],"109":[2,33],"113":[2,33],"121":[2,33],"130":[2,33],"131":[2,33],"133":[2,33],"134":[2,33],"135":[2,33],"136":[2,33],"137":[2,33],"138":[2,33],"139":[2,33],"140":[2,33],"141":[2,33],"142":[2,33],"143":[2,33],"144":[2,33]},{"1":[2,34],"4":[2,34],"29":[2,34],"30":[2,34],"44":[2,34],"47":[2,34],"55":[2,34],"59":[2,34],"68":[2,34],"69":[2,34],"70":[2,34],"71":[2,34],"74":[2,34],"75":[2,34],"76":[2,34],"77":[2,34],"80":[2,34],"88":[2,34],"89":[2,34],"90":[2,34],"94":[2,34],"96":[2,34],"105":[2,34],"107":[2,34],"108":[2,34],"109":[2,34],"113":[2,34],"121":[2,34],"130":[2,34],"131":[2,34],"133":[2,34],"134":[2,34],"135":[2,34],"136":[2,34],"137":[2,34],"138":[2,34],"139":[2,34],"140":[2,34],"141":[2,34],"142":[2,34],"143":[2,34],"144":[2,34]},{"1":[2,32],"4":[2,32],"29":[2,32],"30":[2,32],"41":[2,32],"44":[2,32],"47":[2,32],"55":[2,32],"59":[2,32],"68":[2,32],"69":[2,32],"70":[2,32],"71":[2,32],"74":[2,32],"75":[2,32],"76":[2,32],"77":[2,32],"80":[2,32],"82":[2,32],"88":[2,32],"89":[2,32],"90":[2,32],"94":[2,32],"96":[2,32],"105":[2,32],"107":[2,32],"108":[2,32],"109":[2,32],"113":[2,32],"119":[2,32],"120":[2,32],"121":[2,32],"130":[2,32],"131":[2,32],"133":[2,32],"134":[2,32],"135":[2,32],"136":[2,32],"137":[2,32],"138":[2,32],"139":[2,32],"140":[2,32],"141":[2,32],"142":[2,32],"143":[2,32],"144":[2,32]},{"1":[2,31],"4":[2,31],"29":[2,31],"30":[2,31],"47":[2,31],"55":[2,31],"59":[2,31],"75":[2,31],"80":[2,31],"90":[2,31],"94":[2,31],"96":[2,31],"101":[2,31],"102":[2,31],"105":[2,31],"107":[2,31],"108":[2,31],"109":[2,31],"113":[2,31],"121":[2,31],"124":[2,31],"126":[2,31],"130":[2,31],"131":[2,31],"133":[2,31],"134":[2,31],"135":[2,31],"136":[2,31],"137":[2,31],"138":[2,31],"139":[2,31],"140":[2,31],"141":[2,31],"142":[2,31],"144":[2,31]},{"1":[2,7],"4":[2,7],"7":179,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[2,7],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,4]},{"4":[1,78],"30":[1,180]},{"1":[2,30],"4":[2,30],"29":[2,30],"30":[2,30],"47":[2,30],"55":[2,30],"59":[2,30],"75":[2,30],"80":[2,30],"90":[2,30],"94":[2,30],"96":[2,30],"101":[2,30],"102":[2,30],"105":[2,30],"107":[2,30],"108":[2,30],"109":[2,30],"113":[2,30],"121":[2,30],"124":[2,30],"126":[2,30],"130":[2,30],"131":[2,30],"133":[2,30],"134":[2,30],"135":[2,30],"136":[2,30],"137":[2,30],"138":[2,30],"139":[2,30],"140":[2,30],"141":[2,30],"142":[2,30],"144":[2,30]},{"1":[2,197],"4":[2,197],"29":[2,197],"30":[2,197],"47":[2,197],"55":[2,197],"59":[2,197],"75":[2,197],"80":[2,197],"90":[2,197],"94":[2,197],"96":[2,197],"105":[2,197],"107":[2,197],"108":[2,197],"109":[2,197],"113":[2,197],"121":[2,197],"130":[2,197],"131":[2,197],"133":[2,197],"134":[2,197],"135":[2,197],"136":[2,197],"137":[2,197],"138":[2,197],"139":[2,197],"140":[2,197],"141":[2,197],"142":[2,197],"144":[2,197]},{"1":[2,198],"4":[2,198],"29":[2,198],"30":[2,198],"47":[2,198],"55":[2,198],"59":[2,198],"75":[2,198],"80":[2,198],"90":[2,198],"94":[2,198],"96":[2,198],"105":[2,198],"107":[2,198],"108":[2,198],"109":[2,198],"113":[2,198],"121":[2,198],"130":[2,198],"131":[2,198],"133":[2,198],"134":[2,198],"135":[2,198],"136":[2,198],"137":[2,198],"138":[2,198],"139":[2,198],"140":[2,198],"141":[2,198],"142":[2,198],"144":[2,198]},{"8":181,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":182,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":183,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":184,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":185,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":186,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":187,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":188,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":189,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":190,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":191,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,152],"4":[2,152],"29":[2,152],"30":[2,152],"47":[2,152],"55":[2,152],"59":[2,152],"75":[2,152],"80":[2,152],"90":[2,152],"94":[2,152],"96":[2,152],"105":[2,152],"107":[2,152],"108":[2,152],"109":[2,152],"113":[2,152],"121":[2,152],"130":[2,152],"131":[2,152],"133":[2,152],"134":[2,152],"135":[2,152],"136":[2,152],"137":[2,152],"138":[2,152],"139":[2,152],"140":[2,152],"141":[2,152],"142":[2,152],"144":[2,152]},{"1":[2,157],"4":[2,157],"29":[2,157],"30":[2,157],"47":[2,157],"55":[2,157],"59":[2,157],"75":[2,157],"80":[2,157],"90":[2,157],"94":[2,157],"96":[2,157],"105":[2,157],"107":[2,157],"108":[2,157],"109":[2,157],"113":[2,157],"121":[2,157],"130":[2,157],"131":[2,157],"133":[2,157],"134":[2,157],"135":[2,157],"136":[2,157],"137":[2,157],"138":[2,157],"139":[2,157],"140":[2,157],"141":[2,157],"142":[2,157],"144":[2,157]},{"1":[2,52],"4":[2,52],"29":[2,52],"30":[2,52],"47":[2,52],"55":[2,52],"59":[2,52],"75":[2,52],"80":[2,52],"90":[2,52],"94":[2,52],"96":[2,52],"105":[2,52],"107":[2,52],"108":[2,52],"109":[2,52],"113":[2,52],"121":[2,52],"130":[2,52],"131":[2,52],"133":[2,52],"134":[2,52],"135":[2,52],"136":[2,52],"137":[2,52],"138":[2,52],"139":[2,52],"140":[2,52],"141":[2,52],"142":[2,52],"144":[2,52]},{"8":192,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":193,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,151],"4":[2,151],"29":[2,151],"30":[2,151],"47":[2,151],"55":[2,151],"59":[2,151],"75":[2,151],"80":[2,151],"90":[2,151],"94":[2,151],"96":[2,151],"105":[2,151],"107":[2,151],"108":[2,151],"109":[2,151],"113":[2,151],"121":[2,151],"130":[2,151],"131":[2,151],"133":[2,151],"134":[2,151],"135":[2,151],"136":[2,151],"137":[2,151],"138":[2,151],"139":[2,151],"140":[2,151],"141":[2,151],"142":[2,151],"144":[2,151]},{"1":[2,156],"4":[2,156],"29":[2,156],"30":[2,156],"47":[2,156],"55":[2,156],"59":[2,156],"75":[2,156],"80":[2,156],"90":[2,156],"94":[2,156],"96":[2,156],"105":[2,156],"107":[2,156],"108":[2,156],"109":[2,156],"113":[2,156],"121":[2,156],"130":[2,156],"131":[2,156],"133":[2,156],"134":[2,156],"135":[2,156],"136":[2,156],"137":[2,156],"138":[2,156],"139":[2,156],"140":[2,156],"141":[2,156],"142":[2,156],"144":[2,156]},{"86":194,"89":[1,119]},{"8":195,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,196],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,68],"4":[2,68],"29":[2,68],"30":[2,68],"41":[2,68],"47":[2,68],"55":[2,68],"59":[2,68],"68":[2,68],"69":[2,68],"70":[2,68],"71":[2,68],"74":[2,68],"75":[2,68],"76":[2,68],"77":[2,68],"80":[2,68],"82":[2,68],"88":[2,68],"89":[2,68],"90":[2,68],"94":[2,68],"96":[2,68],"105":[2,68],"107":[2,68],"108":[2,68],"109":[2,68],"113":[2,68],"121":[2,68],"130":[2,68],"131":[2,68],"133":[2,68],"134":[2,68],"135":[2,68],"136":[2,68],"137":[2,68],"138":[2,68],"139":[2,68],"140":[2,68],"141":[2,68],"142":[2,68],"143":[2,68],"144":[2,68]},{"89":[2,115]},{"31":197,"32":[1,76]},{"31":198,"32":[1,76]},{"1":[2,81],"4":[2,81],"29":[2,81],"30":[2,81],"41":[2,81],"47":[2,81],"55":[2,81],"59":[2,81],"68":[2,81],"69":[2,81],"70":[2,81],"71":[2,81],"74":[2,81],"75":[2,81],"76":[2,81],"77":[2,81],"80":[2,81],"82":[2,81],"88":[2,81],"89":[2,81],"90":[2,81],"94":[2,81],"96":[2,81],"105":[2,81],"107":[2,81],"108":[2,81],"109":[2,81],"113":[2,81],"121":[2,81],"130":[2,81],"131":[2,81],"133":[2,81],"134":[2,81],"135":[2,81],"136":[2,81],"137":[2,81],"138":[2,81],"139":[2,81],"140":[2,81],"141":[2,81],"142":[2,81],"143":[2,81],"144":[2,81]},{"31":199,"32":[1,76]},{"1":[2,83],"4":[2,83],"29":[2,83],"30":[2,83],"41":[2,83],"47":[2,83],"55":[2,83],"59":[2,83],"68":[2,83],"69":[2,83],"70":[2,83],"71":[2,83],"74":[2,83],"75":[2,83],"76":[2,83],"77":[2,83],"80":[2,83],"82":[2,83],"88":[2,83],"89":[2,83],"90":[2,83],"94":[2,83],"96":[2,83],"105":[2,83],"107":[2,83],"108":[2,83],"109":[2,83],"113":[2,83],"121":[2,83],"130":[2,83],"131":[2,83],"133":[2,83],"134":[2,83],"135":[2,83],"136":[2,83],"137":[2,83],"138":[2,83],"139":[2,83],"140":[2,83],"141":[2,83],"142":[2,83],"143":[2,83],"144":[2,83]},{"1":[2,84],"4":[2,84],"29":[2,84],"30":[2,84],"41":[2,84],"47":[2,84],"55":[2,84],"59":[2,84],"68":[2,84],"69":[2,84],"70":[2,84],"71":[2,84],"74":[2,84],"75":[2,84],"76":[2,84],"77":[2,84],"80":[2,84],"82":[2,84],"88":[2,84],"89":[2,84],"90":[2,84],"94":[2,84],"96":[2,84],"105":[2,84],"107":[2,84],"108":[2,84],"109":[2,84],"113":[2,84],"121":[2,84],"130":[2,84],"131":[2,84],"133":[2,84],"134":[2,84],"135":[2,84],"136":[2,84],"137":[2,84],"138":[2,84],"139":[2,84],"140":[2,84],"141":[2,84],"142":[2,84],"143":[2,84],"144":[2,84]},{"8":200,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"59":[1,203],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"93":201,"94":[1,202],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"72":204,"74":[1,205],"76":[1,113],"77":[1,114]},{"72":206,"74":[1,205],"76":[1,113],"77":[1,114]},{"86":207,"89":[1,119]},{"1":[2,69],"4":[2,69],"29":[2,69],"30":[2,69],"41":[2,69],"47":[2,69],"55":[2,69],"59":[2,69],"68":[2,69],"69":[2,69],"70":[2,69],"71":[2,69],"74":[2,69],"75":[2,69],"76":[2,69],"77":[2,69],"80":[2,69],"82":[2,69],"88":[2,69],"89":[2,69],"90":[2,69],"94":[2,69],"96":[2,69],"105":[2,69],"107":[2,69],"108":[2,69],"109":[2,69],"113":[2,69],"121":[2,69],"130":[2,69],"131":[2,69],"133":[2,69],"134":[2,69],"135":[2,69],"136":[2,69],"137":[2,69],"138":[2,69],"139":[2,69],"140":[2,69],"141":[2,69],"142":[2,69],"143":[2,69],"144":[2,69]},{"8":208,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,209],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,113],"4":[2,113],"29":[2,113],"30":[2,113],"47":[2,113],"55":[2,113],"59":[2,113],"68":[2,113],"69":[2,113],"70":[2,113],"71":[2,113],"74":[2,113],"75":[2,113],"76":[2,113],"77":[2,113],"80":[2,113],"88":[2,113],"89":[2,113],"90":[2,113],"94":[2,113],"96":[2,113],"105":[2,113],"107":[2,113],"108":[2,113],"109":[2,113],"113":[2,113],"121":[2,113],"130":[2,113],"131":[2,113],"133":[2,113],"134":[2,113],"135":[2,113],"136":[2,113],"137":[2,113],"138":[2,113],"139":[2,113],"140":[2,113],"141":[2,113],"142":[2,113],"144":[2,113]},{"8":212,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"90":[1,210],"91":211,"92":[1,60],"95":[1,59],"97":152,"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"50":[1,213],"55":[1,214]},{"50":[2,60],"55":[2,60]},{"50":[2,62],"55":[2,62],"59":[1,215]},{"57":[1,216]},{"1":[2,54],"4":[2,54],"29":[2,54],"30":[2,54],"47":[2,54],"55":[2,54],"59":[2,54],"75":[2,54],"80":[2,54],"90":[2,54],"94":[2,54],"96":[2,54],"105":[2,54],"107":[2,54],"108":[2,54],"109":[2,54],"113":[2,54],"121":[2,54],"130":[2,54],"131":[2,54],"133":[2,54],"134":[2,54],"135":[2,54],"136":[2,54],"137":[2,54],"138":[2,54],"139":[2,54],"140":[2,54],"141":[2,54],"142":[2,54],"144":[2,54]},{"28":77,"46":[1,49]},{"1":[2,192],"4":[2,192],"29":[2,192],"30":[2,192],"47":[1,97],"55":[2,192],"59":[2,192],"75":[2,192],"80":[2,192],"90":[2,192],"94":[2,192],"96":[2,192],"105":[2,192],"106":95,"107":[2,192],"108":[2,192],"109":[2,192],"112":96,"113":[2,192],"114":70,"121":[2,192],"130":[2,192],"131":[2,192],"133":[2,192],"134":[2,192],"135":[1,82],"136":[1,83],"137":[2,192],"138":[2,192],"139":[2,192],"140":[2,192],"141":[2,192],"142":[2,192],"144":[2,192]},{"106":100,"107":[1,66],"109":[1,67],"112":101,"113":[1,69],"114":70,"130":[1,98],"131":[1,99]},{"1":[2,193],"4":[2,193],"29":[2,193],"30":[2,193],"47":[1,97],"55":[2,193],"59":[2,193],"75":[2,193],"80":[2,193],"90":[2,193],"94":[2,193],"96":[2,193],"105":[2,193],"106":95,"107":[2,193],"108":[2,193],"109":[2,193],"112":96,"113":[2,193],"114":70,"121":[2,193],"130":[2,193],"131":[2,193],"133":[2,193],"134":[2,193],"135":[1,82],"136":[1,83],"137":[2,193],"138":[2,193],"139":[2,193],"140":[2,193],"141":[2,193],"142":[2,193],"144":[2,193]},{"1":[2,194],"4":[2,194],"29":[2,194],"30":[2,194],"47":[1,97],"55":[2,194],"59":[2,194],"75":[2,194],"80":[2,194],"90":[2,194],"94":[2,194],"96":[2,194],"105":[2,194],"106":95,"107":[2,194],"108":[2,194],"109":[2,194],"112":96,"113":[2,194],"114":70,"121":[2,194],"130":[2,194],"131":[2,194],"133":[2,194],"134":[2,194],"135":[1,82],"136":[1,83],"137":[2,194],"138":[2,194],"139":[2,194],"140":[2,194],"141":[2,194],"142":[2,194],"144":[2,194]},{"1":[2,195],"4":[2,195],"29":[2,195],"30":[2,195],"47":[2,195],"55":[2,195],"59":[2,195],"75":[2,195],"80":[2,195],"90":[2,195],"94":[2,195],"96":[2,195],"105":[2,195],"106":95,"107":[2,195],"108":[2,195],"109":[2,195],"112":96,"113":[2,195],"114":70,"121":[2,195],"130":[2,195],"131":[2,195],"133":[2,195],"134":[2,195],"137":[2,195],"138":[2,195],"139":[2,195],"140":[2,195],"141":[2,195],"142":[2,195],"144":[2,195]},{"1":[2,196],"4":[2,196],"29":[2,196],"30":[2,196],"47":[2,196],"55":[2,196],"59":[2,196],"75":[2,196],"80":[2,196],"90":[2,196],"94":[2,196],"96":[2,196],"105":[2,196],"106":95,"107":[2,196],"108":[2,196],"109":[2,196],"112":96,"113":[2,196],"114":70,"121":[2,196],"130":[2,196],"131":[2,196],"133":[2,196],"134":[2,196],"137":[2,196],"138":[2,196],"139":[2,196],"140":[2,196],"141":[2,196],"142":[2,196],"144":[2,196]},{"4":[1,125],"6":218,"29":[1,6],"128":[1,217]},{"1":[2,138],"4":[2,138],"29":[2,138],"30":[2,138],"47":[2,138],"55":[2,138],"59":[2,138],"75":[2,138],"80":[2,138],"90":[2,138],"94":[2,138],"96":[2,138],"100":219,"101":[1,220],"102":[1,221],"105":[2,138],"107":[2,138],"108":[2,138],"109":[2,138],"113":[2,138],"121":[2,138],"130":[2,138],"131":[2,138],"133":[2,138],"134":[2,138],"135":[2,138],"136":[2,138],"137":[2,138],"138":[2,138],"139":[2,138],"140":[2,138],"141":[2,138],"142":[2,138],"144":[2,138]},{"1":[2,150],"4":[2,150],"29":[2,150],"30":[2,150],"47":[2,150],"55":[2,150],"59":[2,150],"75":[2,150],"80":[2,150],"90":[2,150],"94":[2,150],"96":[2,150],"105":[2,150],"107":[2,150],"108":[2,150],"109":[2,150],"113":[2,150],"121":[2,150],"130":[2,150],"131":[2,150],"133":[2,150],"134":[2,150],"135":[2,150],"136":[2,150],"137":[2,150],"138":[2,150],"139":[2,150],"140":[2,150],"141":[2,150],"142":[2,150],"144":[2,150]},{"1":[2,158],"4":[2,158],"29":[2,158],"30":[2,158],"47":[2,158],"55":[2,158],"59":[2,158],"75":[2,158],"80":[2,158],"90":[2,158],"94":[2,158],"96":[2,158],"105":[2,158],"107":[2,158],"108":[2,158],"109":[2,158],"113":[2,158],"121":[2,158],"130":[2,158],"131":[2,158],"133":[2,158],"134":[2,158],"135":[2,158],"136":[2,158],"137":[2,158],"138":[2,158],"139":[2,158],"140":[2,158],"141":[2,158],"142":[2,158],"144":[2,158]},{"29":[1,222],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"123":223,"125":224,"126":[1,225]},{"15":226,"16":143,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":144,"43":72,"58":[1,61],"61":227,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"87":[1,33],"92":[1,60],"95":[1,59],"104":[1,58]},{"1":[2,94],"4":[2,94],"29":[1,229],"30":[2,94],"47":[2,94],"55":[2,94],"59":[2,94],"68":[2,71],"69":[2,71],"70":[2,71],"71":[2,71],"74":[2,71],"75":[2,94],"76":[2,71],"77":[2,71],"80":[2,94],"82":[1,228],"88":[2,71],"89":[2,71],"90":[2,94],"94":[2,94],"96":[2,94],"105":[2,94],"107":[2,94],"108":[2,94],"109":[2,94],"113":[2,94],"121":[2,94],"130":[2,94],"131":[2,94],"133":[2,94],"134":[2,94],"135":[2,94],"136":[2,94],"137":[2,94],"138":[2,94],"139":[2,94],"140":[2,94],"141":[2,94],"142":[2,94],"144":[2,94]},{"4":[2,105],"28":177,"30":[2,105],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"83":230,"84":231},{"15":235,"16":143,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":144,"43":72,"58":[1,61],"61":227,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"87":[1,33],"92":[1,60],"95":[1,59],"104":[1,58]},{"62":104,"68":[1,106],"69":[1,107],"70":[1,108],"71":[1,109],"72":110,"73":111,"74":[1,112],"76":[1,113],"77":[1,114],"85":102,"88":[1,105],"89":[2,114]},{"62":116,"68":[1,106],"69":[1,107],"70":[1,108],"71":[1,109],"72":110,"73":111,"74":[1,112],"76":[1,113],"77":[1,114],"85":115,"88":[1,105],"89":[2,114]},{"1":[2,74],"4":[2,74],"29":[2,74],"30":[2,74],"47":[2,74],"55":[2,74],"59":[2,74],"68":[2,74],"69":[2,74],"70":[2,74],"71":[2,74],"74":[2,74],"75":[2,74],"76":[2,74],"77":[2,74],"80":[2,74],"88":[2,74],"89":[2,74],"90":[2,74],"94":[2,74],"96":[2,74],"105":[2,74],"107":[2,74],"108":[2,74],"109":[2,74],"113":[2,74],"121":[2,74],"130":[2,74],"131":[2,74],"133":[2,74],"134":[2,74],"135":[2,74],"136":[2,74],"137":[2,74],"138":[2,74],"139":[2,74],"140":[2,74],"141":[2,74],"142":[2,74],"144":[2,74]},{"1":[2,49],"4":[2,49],"30":[2,49],"47":[1,97],"105":[2,49],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[2,49],"131":[2,49],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,143],"4":[2,143],"30":[2,143],"47":[1,97],"105":[2,143],"106":95,"107":[2,143],"109":[2,143],"112":96,"113":[2,143],"114":70,"130":[2,143],"131":[2,143],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"105":[1,236]},{"1":[2,145],"4":[2,145],"29":[2,145],"30":[2,145],"47":[2,145],"55":[2,145],"59":[2,145],"68":[2,145],"69":[2,145],"70":[2,145],"71":[2,145],"74":[2,145],"75":[2,145],"76":[2,145],"77":[2,145],"80":[2,145],"88":[2,145],"89":[2,145],"90":[2,145],"94":[2,145],"96":[2,145],"105":[2,145],"107":[2,145],"108":[2,145],"109":[2,145],"113":[2,145],"121":[2,145],"130":[2,145],"131":[2,145],"133":[2,145],"134":[2,145],"135":[2,145],"136":[2,145],"137":[2,145],"138":[2,145],"139":[2,145],"140":[2,145],"141":[2,145],"142":[2,145],"143":[2,145],"144":[2,145]},{"4":[2,134],"29":[2,134],"47":[1,97],"55":[2,134],"59":[1,238],"93":237,"94":[1,202],"96":[2,134],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,127],"4":[2,127],"29":[2,127],"30":[2,127],"41":[2,127],"47":[2,127],"55":[2,127],"59":[2,127],"68":[2,127],"69":[2,127],"70":[2,127],"71":[2,127],"74":[2,127],"75":[2,127],"76":[2,127],"77":[2,127],"80":[2,127],"88":[2,127],"89":[2,127],"90":[2,127],"94":[2,127],"96":[2,127],"105":[2,127],"107":[2,127],"108":[2,127],"109":[2,127],"113":[2,127],"119":[2,127],"120":[2,127],"121":[2,127],"130":[2,127],"131":[2,127],"133":[2,127],"134":[2,127],"135":[2,127],"136":[2,127],"137":[2,127],"138":[2,127],"139":[2,127],"140":[2,127],"141":[2,127],"142":[2,127],"143":[2,127],"144":[2,127]},{"4":[2,57],"29":[2,57],"54":239,"55":[1,240],"96":[2,57]},{"4":[2,129],"29":[2,129],"30":[2,129],"55":[2,129],"90":[2,129],"96":[2,129]},{"8":212,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"91":241,"92":[1,60],"95":[1,59],"97":152,"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,135],"29":[2,135],"30":[2,135],"55":[2,135],"90":[2,135],"96":[2,135]},{"1":[2,122],"4":[2,122],"29":[2,122],"30":[2,122],"41":[2,122],"44":[2,122],"47":[2,122],"55":[2,122],"59":[2,122],"68":[2,122],"69":[2,122],"70":[2,122],"71":[2,122],"74":[2,122],"75":[2,122],"76":[2,122],"77":[2,122],"80":[2,122],"82":[2,122],"88":[2,122],"89":[2,122],"90":[2,122],"94":[2,122],"96":[2,122],"105":[2,122],"107":[2,122],"108":[2,122],"109":[2,122],"113":[2,122],"121":[2,122],"130":[2,122],"131":[2,122],"133":[2,122],"134":[2,122],"135":[2,122],"136":[2,122],"137":[2,122],"138":[2,122],"139":[2,122],"140":[2,122],"141":[2,122],"142":[2,122],"143":[2,122],"144":[2,122]},{"4":[1,125],"6":242,"29":[1,6],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"4":[1,125],"6":243,"29":[1,6],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,146],"4":[2,146],"29":[2,146],"30":[2,146],"47":[1,97],"55":[2,146],"59":[2,146],"75":[2,146],"80":[2,146],"90":[2,146],"94":[2,146],"96":[2,146],"105":[2,146],"106":95,"107":[1,66],"108":[1,244],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,146],"130":[2,146],"131":[2,146],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,148],"4":[2,148],"29":[2,148],"30":[2,148],"47":[1,97],"55":[2,148],"59":[2,148],"75":[2,148],"80":[2,148],"90":[2,148],"94":[2,148],"96":[2,148],"105":[2,148],"106":95,"107":[1,66],"108":[1,245],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,148],"130":[2,148],"131":[2,148],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,154],"4":[2,154],"29":[2,154],"30":[2,154],"47":[2,154],"55":[2,154],"59":[2,154],"75":[2,154],"80":[2,154],"90":[2,154],"94":[2,154],"96":[2,154],"105":[2,154],"107":[2,154],"108":[2,154],"109":[2,154],"113":[2,154],"121":[2,154],"130":[2,154],"131":[2,154],"133":[2,154],"134":[2,154],"135":[2,154],"136":[2,154],"137":[2,154],"138":[2,154],"139":[2,154],"140":[2,154],"141":[2,154],"142":[2,154],"144":[2,154]},{"1":[2,155],"4":[2,155],"29":[2,155],"30":[2,155],"47":[1,97],"55":[2,155],"59":[2,155],"75":[2,155],"80":[2,155],"90":[2,155],"94":[2,155],"96":[2,155],"105":[2,155],"106":95,"107":[1,66],"108":[2,155],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,155],"130":[2,155],"131":[2,155],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,159],"4":[2,159],"29":[2,159],"30":[2,159],"47":[2,159],"55":[2,159],"59":[2,159],"75":[2,159],"80":[2,159],"90":[2,159],"94":[2,159],"96":[2,159],"105":[2,159],"107":[2,159],"108":[2,159],"109":[2,159],"113":[2,159],"121":[2,159],"130":[2,159],"131":[2,159],"133":[2,159],"134":[2,159],"135":[2,159],"136":[2,159],"137":[2,159],"138":[2,159],"139":[2,159],"140":[2,159],"141":[2,159],"142":[2,159],"144":[2,159]},{"119":[2,161],"120":[2,161]},{"31":166,"32":[1,76],"63":167,"64":168,"78":[1,73],"95":[1,247],"116":246,"118":165},{"55":[1,248],"119":[2,166],"120":[2,166]},{"55":[2,163],"119":[2,163],"120":[2,163]},{"55":[2,164],"119":[2,164],"120":[2,164]},{"55":[2,165],"119":[2,165],"120":[2,165]},{"1":[2,160],"4":[2,160],"29":[2,160],"30":[2,160],"47":[2,160],"55":[2,160],"59":[2,160],"75":[2,160],"80":[2,160],"90":[2,160],"94":[2,160],"96":[2,160],"105":[2,160],"107":[2,160],"108":[2,160],"109":[2,160],"113":[2,160],"121":[2,160],"130":[2,160],"131":[2,160],"133":[2,160],"134":[2,160],"135":[2,160],"136":[2,160],"137":[2,160],"138":[2,160],"139":[2,160],"140":[2,160],"141":[2,160],"142":[2,160],"144":[2,160]},{"8":249,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":250,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,57],"29":[2,57],"54":251,"55":[1,252],"80":[2,57]},{"4":[2,90],"29":[2,90],"30":[2,90],"55":[2,90],"80":[2,90]},{"4":[2,41],"29":[2,41],"30":[2,41],"44":[1,253],"55":[2,41],"80":[2,41]},{"4":[2,42],"29":[2,42],"30":[2,42],"44":[1,254],"55":[2,42],"80":[2,42]},{"4":[2,43],"29":[2,43],"30":[2,43],"55":[2,43],"80":[2,43]},{"4":[2,48],"29":[2,48],"30":[2,48],"55":[2,48],"80":[2,48]},{"31":155,"32":[1,76]},{"1":[2,6],"4":[2,6],"30":[2,6]},{"1":[2,29],"4":[2,29],"29":[2,29],"30":[2,29],"47":[2,29],"55":[2,29],"59":[2,29],"75":[2,29],"80":[2,29],"90":[2,29],"94":[2,29],"96":[2,29],"101":[2,29],"102":[2,29],"105":[2,29],"107":[2,29],"108":[2,29],"109":[2,29],"113":[2,29],"121":[2,29],"124":[2,29],"126":[2,29],"130":[2,29],"131":[2,29],"133":[2,29],"134":[2,29],"135":[2,29],"136":[2,29],"137":[2,29],"138":[2,29],"139":[2,29],"140":[2,29],"141":[2,29],"142":[2,29],"144":[2,29]},{"1":[2,199],"4":[2,199],"29":[2,199],"30":[2,199],"47":[1,97],"55":[2,199],"59":[2,199],"75":[2,199],"80":[2,199],"90":[2,199],"94":[2,199],"96":[2,199],"105":[2,199],"106":95,"107":[2,199],"108":[2,199],"109":[2,199],"112":96,"113":[2,199],"114":70,"121":[2,199],"130":[2,199],"131":[2,199],"133":[2,199],"134":[2,199],"135":[1,82],"136":[1,83],"137":[2,199],"138":[2,199],"139":[1,88],"140":[2,199],"141":[2,199],"142":[2,199],"144":[2,199]},{"1":[2,200],"4":[2,200],"29":[2,200],"30":[2,200],"47":[1,97],"55":[2,200],"59":[2,200],"75":[2,200],"80":[2,200],"90":[2,200],"94":[2,200],"96":[2,200],"105":[2,200],"106":95,"107":[2,200],"108":[2,200],"109":[2,200],"112":96,"113":[2,200],"114":70,"121":[2,200],"130":[2,200],"131":[2,200],"133":[2,200],"134":[2,200],"135":[1,82],"136":[1,83],"137":[2,200],"138":[2,200],"139":[1,88],"140":[2,200],"141":[2,200],"142":[2,200],"144":[2,200]},{"1":[2,201],"4":[2,201],"29":[2,201],"30":[2,201],"47":[1,97],"55":[2,201],"59":[2,201],"75":[2,201],"80":[2,201],"90":[2,201],"94":[2,201],"96":[2,201],"105":[2,201],"106":95,"107":[2,201],"108":[2,201],"109":[2,201],"112":96,"113":[2,201],"114":70,"121":[2,201],"130":[2,201],"131":[2,201],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[2,201],"138":[2,201],"139":[1,88],"140":[1,89],"141":[1,90],"142":[2,201],"144":[1,92]},{"1":[2,202],"4":[2,202],"29":[2,202],"30":[2,202],"47":[1,97],"55":[2,202],"59":[2,202],"75":[2,202],"80":[2,202],"90":[2,202],"94":[2,202],"96":[2,202],"105":[2,202],"106":95,"107":[2,202],"108":[2,202],"109":[2,202],"112":96,"113":[2,202],"114":70,"121":[2,202],"130":[2,202],"131":[2,202],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[2,202],"138":[2,202],"139":[1,88],"140":[1,89],"141":[1,90],"142":[2,202],"144":[1,92]},{"1":[2,203],"4":[2,203],"29":[2,203],"30":[2,203],"47":[1,97],"55":[2,203],"59":[2,203],"75":[2,203],"80":[2,203],"90":[2,203],"94":[2,203],"96":[2,203],"105":[2,203],"106":95,"107":[2,203],"108":[2,203],"109":[2,203],"112":96,"113":[2,203],"114":70,"121":[2,203],"130":[2,203],"131":[2,203],"133":[2,203],"134":[2,203],"135":[1,82],"136":[1,83],"137":[2,203],"138":[2,203],"139":[2,203],"140":[2,203],"141":[2,203],"142":[2,203],"144":[2,203]},{"1":[2,204],"4":[2,204],"29":[2,204],"30":[2,204],"47":[1,97],"55":[2,204],"59":[2,204],"75":[2,204],"80":[2,204],"90":[2,204],"94":[2,204],"96":[2,204],"105":[2,204],"106":95,"107":[2,204],"108":[2,204],"109":[2,204],"112":96,"113":[2,204],"114":70,"121":[2,204],"130":[2,204],"131":[2,204],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[2,204],"138":[2,204],"139":[1,88],"140":[2,204],"141":[2,204],"142":[2,204],"144":[2,204]},{"1":[2,205],"4":[2,205],"29":[2,205],"30":[2,205],"47":[1,97],"55":[2,205],"59":[2,205],"75":[2,205],"80":[2,205],"90":[2,205],"94":[2,205],"96":[2,205],"105":[2,205],"106":95,"107":[2,205],"108":[2,205],"109":[2,205],"112":96,"113":[2,205],"114":70,"121":[2,205],"130":[2,205],"131":[2,205],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[2,205],"138":[2,205],"139":[1,88],"140":[1,89],"141":[2,205],"142":[2,205],"144":[2,205]},{"1":[2,206],"4":[2,206],"29":[2,206],"30":[2,206],"47":[1,97],"55":[2,206],"59":[2,206],"75":[2,206],"80":[2,206],"90":[2,206],"94":[2,206],"96":[2,206],"105":[2,206],"106":95,"107":[2,206],"108":[2,206],"109":[2,206],"112":96,"113":[2,206],"114":70,"121":[2,206],"130":[2,206],"131":[2,206],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[2,206],"144":[1,92]},{"1":[2,209],"4":[2,209],"29":[2,209],"30":[2,209],"47":[1,97],"55":[2,209],"59":[2,209],"75":[2,209],"80":[2,209],"90":[2,209],"94":[2,209],"96":[2,209],"105":[2,209],"106":95,"107":[2,209],"108":[2,209],"109":[2,209],"112":96,"113":[2,209],"114":70,"121":[2,209],"130":[2,209],"131":[2,209],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[2,209],"138":[2,209],"139":[1,88],"140":[1,89],"141":[1,90],"142":[2,209],"144":[2,209]},{"1":[2,189],"4":[2,189],"29":[2,189],"30":[2,189],"47":[1,97],"55":[2,189],"59":[2,189],"75":[2,189],"80":[2,189],"90":[2,189],"94":[2,189],"96":[2,189],"105":[2,189],"106":95,"107":[1,66],"108":[2,189],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,189],"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,191],"4":[2,191],"29":[2,191],"30":[2,191],"47":[1,97],"55":[2,191],"59":[2,191],"75":[2,191],"80":[2,191],"90":[2,191],"94":[2,191],"96":[2,191],"105":[2,191],"106":95,"107":[1,66],"108":[2,191],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,191],"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,188],"4":[2,188],"29":[2,188],"30":[2,188],"47":[1,97],"55":[2,188],"59":[2,188],"75":[2,188],"80":[2,188],"90":[2,188],"94":[2,188],"96":[2,188],"105":[2,188],"106":95,"107":[1,66],"108":[2,188],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,188],"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,190],"4":[2,190],"29":[2,190],"30":[2,190],"47":[1,97],"55":[2,190],"59":[2,190],"75":[2,190],"80":[2,190],"90":[2,190],"94":[2,190],"96":[2,190],"105":[2,190],"106":95,"107":[1,66],"108":[2,190],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,190],"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,110],"4":[2,110],"29":[2,110],"30":[2,110],"47":[2,110],"55":[2,110],"59":[2,110],"68":[2,110],"69":[2,110],"70":[2,110],"71":[2,110],"74":[2,110],"75":[2,110],"76":[2,110],"77":[2,110],"80":[2,110],"88":[2,110],"89":[2,110],"90":[2,110],"94":[2,110],"96":[2,110],"105":[2,110],"107":[2,110],"108":[2,110],"109":[2,110],"113":[2,110],"121":[2,110],"130":[2,110],"131":[2,110],"133":[2,110],"134":[2,110],"135":[2,110],"136":[2,110],"137":[2,110],"138":[2,110],"139":[2,110],"140":[2,110],"141":[2,110],"142":[2,110],"144":[2,110]},{"1":[2,207],"4":[2,207],"29":[2,207],"30":[2,207],"47":[1,97],"55":[2,207],"59":[2,207],"75":[2,207],"80":[2,207],"90":[2,207],"94":[2,207],"96":[2,207],"105":[2,207],"106":95,"107":[2,207],"108":[2,207],"109":[2,207],"112":96,"113":[2,207],"114":70,"121":[2,207],"130":[2,207],"131":[2,207],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"8":255,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,79],"4":[2,79],"29":[2,79],"30":[2,79],"41":[2,79],"47":[2,79],"55":[2,79],"59":[2,79],"68":[2,79],"69":[2,79],"70":[2,79],"71":[2,79],"74":[2,79],"75":[2,79],"76":[2,79],"77":[2,79],"80":[2,79],"82":[2,79],"88":[2,79],"89":[2,79],"90":[2,79],"94":[2,79],"96":[2,79],"105":[2,79],"107":[2,79],"108":[2,79],"109":[2,79],"113":[2,79],"121":[2,79],"130":[2,79],"131":[2,79],"133":[2,79],"134":[2,79],"135":[2,79],"136":[2,79],"137":[2,79],"138":[2,79],"139":[2,79],"140":[2,79],"141":[2,79],"142":[2,79],"143":[2,79],"144":[2,79]},{"1":[2,80],"4":[2,80],"29":[2,80],"30":[2,80],"41":[2,80],"47":[2,80],"55":[2,80],"59":[2,80],"68":[2,80],"69":[2,80],"70":[2,80],"71":[2,80],"74":[2,80],"75":[2,80],"76":[2,80],"77":[2,80],"80":[2,80],"82":[2,80],"88":[2,80],"89":[2,80],"90":[2,80],"94":[2,80],"96":[2,80],"105":[2,80],"107":[2,80],"108":[2,80],"109":[2,80],"113":[2,80],"121":[2,80],"130":[2,80],"131":[2,80],"133":[2,80],"134":[2,80],"135":[2,80],"136":[2,80],"137":[2,80],"138":[2,80],"139":[2,80],"140":[2,80],"141":[2,80],"142":[2,80],"143":[2,80],"144":[2,80]},{"1":[2,82],"4":[2,82],"29":[2,82],"30":[2,82],"41":[2,82],"47":[2,82],"55":[2,82],"59":[2,82],"68":[2,82],"69":[2,82],"70":[2,82],"71":[2,82],"74":[2,82],"75":[2,82],"76":[2,82],"77":[2,82],"80":[2,82],"82":[2,82],"88":[2,82],"89":[2,82],"90":[2,82],"94":[2,82],"96":[2,82],"105":[2,82],"107":[2,82],"108":[2,82],"109":[2,82],"113":[2,82],"121":[2,82],"130":[2,82],"131":[2,82],"133":[2,82],"134":[2,82],"135":[2,82],"136":[2,82],"137":[2,82],"138":[2,82],"139":[2,82],"140":[2,82],"141":[2,82],"142":[2,82],"143":[2,82],"144":[2,82]},{"47":[1,97],"59":[1,203],"75":[1,256],"93":257,"94":[1,202],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"8":258,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"12":[2,120],"13":[2,120],"14":[2,120],"32":[2,120],"34":[2,120],"35":[2,120],"37":[2,120],"38":[2,120],"39":[2,120],"45":[2,120],"46":[2,120],"48":[2,120],"52":[2,120],"53":[2,120],"58":[2,120],"75":[2,120],"78":[2,120],"81":[2,120],"87":[2,120],"92":[2,120],"95":[2,120],"99":[2,120],"103":[2,120],"104":[2,120],"107":[2,120],"109":[2,120],"111":[2,120],"113":[2,120],"122":[2,120],"128":[2,120],"129":[2,120],"132":[2,120],"133":[2,120],"134":[2,120],"135":[2,120],"136":[2,120]},{"12":[2,121],"13":[2,121],"14":[2,121],"32":[2,121],"34":[2,121],"35":[2,121],"37":[2,121],"38":[2,121],"39":[2,121],"45":[2,121],"46":[2,121],"48":[2,121],"52":[2,121],"53":[2,121],"58":[2,121],"75":[2,121],"78":[2,121],"81":[2,121],"87":[2,121],"92":[2,121],"95":[2,121],"99":[2,121],"103":[2,121],"104":[2,121],"107":[2,121],"109":[2,121],"111":[2,121],"113":[2,121],"122":[2,121],"128":[2,121],"129":[2,121],"132":[2,121],"133":[2,121],"134":[2,121],"135":[2,121],"136":[2,121]},{"1":[2,86],"4":[2,86],"29":[2,86],"30":[2,86],"41":[2,86],"47":[2,86],"55":[2,86],"59":[2,86],"68":[2,86],"69":[2,86],"70":[2,86],"71":[2,86],"74":[2,86],"75":[2,86],"76":[2,86],"77":[2,86],"80":[2,86],"82":[2,86],"88":[2,86],"89":[2,86],"90":[2,86],"94":[2,86],"96":[2,86],"105":[2,86],"107":[2,86],"108":[2,86],"109":[2,86],"113":[2,86],"121":[2,86],"130":[2,86],"131":[2,86],"133":[2,86],"134":[2,86],"135":[2,86],"136":[2,86],"137":[2,86],"138":[2,86],"139":[2,86],"140":[2,86],"141":[2,86],"142":[2,86],"143":[2,86],"144":[2,86]},{"8":259,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,87],"4":[2,87],"29":[2,87],"30":[2,87],"41":[2,87],"47":[2,87],"55":[2,87],"59":[2,87],"68":[2,87],"69":[2,87],"70":[2,87],"71":[2,87],"74":[2,87],"75":[2,87],"76":[2,87],"77":[2,87],"80":[2,87],"82":[2,87],"88":[2,87],"89":[2,87],"90":[2,87],"94":[2,87],"96":[2,87],"105":[2,87],"107":[2,87],"108":[2,87],"109":[2,87],"113":[2,87],"121":[2,87],"130":[2,87],"131":[2,87],"133":[2,87],"134":[2,87],"135":[2,87],"136":[2,87],"137":[2,87],"138":[2,87],"139":[2,87],"140":[2,87],"141":[2,87],"142":[2,87],"143":[2,87],"144":[2,87]},{"1":[2,111],"4":[2,111],"29":[2,111],"30":[2,111],"47":[2,111],"55":[2,111],"59":[2,111],"68":[2,111],"69":[2,111],"70":[2,111],"71":[2,111],"74":[2,111],"75":[2,111],"76":[2,111],"77":[2,111],"80":[2,111],"88":[2,111],"89":[2,111],"90":[2,111],"94":[2,111],"96":[2,111],"105":[2,111],"107":[2,111],"108":[2,111],"109":[2,111],"113":[2,111],"121":[2,111],"130":[2,111],"131":[2,111],"133":[2,111],"134":[2,111],"135":[2,111],"136":[2,111],"137":[2,111],"138":[2,111],"139":[2,111],"140":[2,111],"141":[2,111],"142":[2,111],"144":[2,111]},{"1":[2,39],"4":[2,39],"29":[2,39],"30":[2,39],"47":[1,97],"55":[2,39],"59":[2,39],"75":[2,39],"80":[2,39],"90":[2,39],"94":[2,39],"96":[2,39],"105":[2,39],"106":95,"107":[1,66],"108":[2,39],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,39],"130":[2,39],"131":[2,39],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"8":260,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,116],"4":[2,116],"29":[2,116],"30":[2,116],"47":[2,116],"55":[2,116],"59":[2,116],"68":[2,116],"69":[2,116],"70":[2,116],"71":[2,116],"74":[2,116],"75":[2,116],"76":[2,116],"77":[2,116],"80":[2,116],"88":[2,116],"89":[2,116],"90":[2,116],"94":[2,116],"96":[2,116],"105":[2,116],"107":[2,116],"108":[2,116],"109":[2,116],"113":[2,116],"121":[2,116],"130":[2,116],"131":[2,116],"133":[2,116],"134":[2,116],"135":[2,116],"136":[2,116],"137":[2,116],"138":[2,116],"139":[2,116],"140":[2,116],"141":[2,116],"142":[2,116],"144":[2,116]},{"4":[2,57],"29":[2,57],"54":261,"55":[1,240],"90":[2,57]},{"4":[2,134],"29":[2,134],"30":[2,134],"47":[1,97],"55":[2,134],"59":[1,262],"90":[2,134],"96":[2,134],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"51":263,"52":[1,62],"53":[1,63]},{"56":264,"57":[1,122],"58":[1,123]},{"50":[2,64],"55":[2,64]},{"50":[2,63],"55":[2,63],"59":[1,265]},{"8":266,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,186],"4":[2,186],"29":[2,186],"30":[2,186],"47":[2,186],"55":[2,186],"59":[2,186],"75":[2,186],"80":[2,186],"90":[2,186],"94":[2,186],"96":[2,186],"105":[2,186],"107":[2,186],"108":[2,186],"109":[2,186],"113":[2,186],"121":[2,186],"124":[2,186],"130":[2,186],"131":[2,186],"133":[2,186],"134":[2,186],"135":[2,186],"136":[2,186],"137":[2,186],"138":[2,186],"139":[2,186],"140":[2,186],"141":[2,186],"142":[2,186],"144":[2,186]},{"1":[2,139],"4":[2,139],"29":[2,139],"30":[2,139],"47":[2,139],"55":[2,139],"59":[2,139],"75":[2,139],"80":[2,139],"90":[2,139],"94":[2,139],"96":[2,139],"101":[1,267],"105":[2,139],"107":[2,139],"108":[2,139],"109":[2,139],"113":[2,139],"121":[2,139],"130":[2,139],"131":[2,139],"133":[2,139],"134":[2,139],"135":[2,139],"136":[2,139],"137":[2,139],"138":[2,139],"139":[2,139],"140":[2,139],"141":[2,139],"142":[2,139],"144":[2,139]},{"4":[1,125],"6":268,"29":[1,6]},{"31":269,"32":[1,76]},{"123":270,"125":224,"126":[1,225]},{"30":[1,271],"124":[1,272],"125":273,"126":[1,225]},{"30":[2,179],"124":[2,179],"126":[2,179]},{"8":275,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"98":274,"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,109],"4":[2,109],"29":[2,109],"30":[2,109],"47":[2,109],"55":[2,109],"59":[2,109],"62":104,"68":[1,106],"69":[1,107],"70":[1,108],"71":[1,109],"72":110,"73":111,"74":[1,112],"75":[2,109],"76":[1,113],"77":[1,114],"80":[2,109],"85":102,"88":[1,105],"89":[2,114],"90":[2,109],"94":[2,109],"96":[2,109],"105":[2,109],"107":[2,109],"108":[2,109],"109":[2,109],"113":[2,109],"121":[2,109],"130":[2,109],"131":[2,109],"133":[2,109],"134":[2,109],"135":[2,109],"136":[2,109],"137":[2,109],"138":[2,109],"139":[2,109],"140":[2,109],"141":[2,109],"142":[2,109],"144":[2,109]},{"1":[2,71],"4":[2,71],"29":[2,71],"30":[2,71],"47":[2,71],"55":[2,71],"59":[2,71],"68":[2,71],"69":[2,71],"70":[2,71],"71":[2,71],"74":[2,71],"75":[2,71],"76":[2,71],"77":[2,71],"80":[2,71],"88":[2,71],"89":[2,71],"90":[2,71],"94":[2,71],"96":[2,71],"105":[2,71],"107":[2,71],"108":[2,71],"109":[2,71],"113":[2,71],"121":[2,71],"130":[2,71],"131":[2,71],"133":[2,71],"134":[2,71],"135":[2,71],"136":[2,71],"137":[2,71],"138":[2,71],"139":[2,71],"140":[2,71],"141":[2,71],"142":[2,71],"144":[2,71]},{"15":276,"16":143,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":144,"43":72,"58":[1,61],"61":227,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"87":[1,33],"92":[1,60],"95":[1,59],"104":[1,58]},{"4":[2,105],"28":177,"30":[2,105],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"83":277,"84":231},{"4":[1,279],"30":[1,278]},{"4":[2,106],"30":[2,106],"80":[2,106]},{"4":[2,105],"28":177,"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"80":[2,105],"83":280,"84":231},{"4":[2,102],"30":[2,102],"80":[2,102]},{"4":[2,43],"30":[2,43],"44":[1,281],"80":[2,43]},{"1":[2,100],"4":[2,100],"29":[1,282],"30":[2,100],"47":[2,100],"55":[2,100],"59":[2,100],"62":104,"68":[1,106],"69":[1,107],"70":[1,108],"71":[1,109],"72":110,"73":111,"74":[1,112],"75":[2,100],"76":[1,113],"77":[1,114],"80":[2,100],"85":102,"88":[1,105],"89":[2,114],"90":[2,100],"94":[2,100],"96":[2,100],"105":[2,100],"107":[2,100],"108":[2,100],"109":[2,100],"113":[2,100],"121":[2,100],"130":[2,100],"131":[2,100],"133":[2,100],"134":[2,100],"135":[2,100],"136":[2,100],"137":[2,100],"138":[2,100],"139":[2,100],"140":[2,100],"141":[2,100],"142":[2,100],"144":[2,100]},{"1":[2,144],"4":[2,144],"29":[2,144],"30":[2,144],"47":[2,144],"55":[2,144],"59":[2,144],"68":[2,144],"69":[2,144],"70":[2,144],"71":[2,144],"74":[2,144],"75":[2,144],"76":[2,144],"77":[2,144],"80":[2,144],"88":[2,144],"89":[2,144],"90":[2,144],"94":[2,144],"96":[2,144],"105":[2,144],"107":[2,144],"108":[2,144],"109":[2,144],"113":[2,144],"121":[2,144],"130":[2,144],"131":[2,144],"133":[2,144],"134":[2,144],"135":[2,144],"136":[2,144],"137":[2,144],"138":[2,144],"139":[2,144],"140":[2,144],"141":[2,144],"142":[2,144],"143":[2,144],"144":[2,144]},{"8":283,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,66],"12":[2,121],"13":[2,121],"14":[2,121],"29":[2,66],"32":[2,121],"34":[2,121],"35":[2,121],"37":[2,121],"38":[2,121],"39":[2,121],"45":[2,121],"46":[2,121],"48":[2,121],"52":[2,121],"53":[2,121],"55":[2,66],"58":[2,121],"78":[2,121],"81":[2,121],"87":[2,121],"92":[2,121],"95":[2,121],"96":[2,66],"99":[2,121],"103":[2,121],"104":[2,121],"107":[2,121],"109":[2,121],"111":[2,121],"113":[2,121],"122":[2,121],"128":[2,121],"129":[2,121],"132":[2,121],"133":[2,121],"134":[2,121],"135":[2,121],"136":[2,121]},{"4":[1,285],"29":[1,286],"96":[1,284]},{"4":[2,58],"8":212,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[2,58],"30":[2,58],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"90":[2,58],"92":[1,60],"95":[1,59],"96":[2,58],"97":287,"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,57],"29":[2,57],"30":[2,57],"54":288,"55":[1,240]},{"1":[2,183],"4":[2,183],"29":[2,183],"30":[2,183],"47":[2,183],"55":[2,183],"59":[2,183],"75":[2,183],"80":[2,183],"90":[2,183],"94":[2,183],"96":[2,183],"105":[2,183],"107":[2,183],"108":[2,183],"109":[2,183],"113":[2,183],"121":[2,183],"124":[2,183],"130":[2,183],"131":[2,183],"133":[2,183],"134":[2,183],"135":[2,183],"136":[2,183],"137":[2,183],"138":[2,183],"139":[2,183],"140":[2,183],"141":[2,183],"142":[2,183],"144":[2,183]},{"1":[2,184],"4":[2,184],"29":[2,184],"30":[2,184],"47":[2,184],"55":[2,184],"59":[2,184],"75":[2,184],"80":[2,184],"90":[2,184],"94":[2,184],"96":[2,184],"105":[2,184],"107":[2,184],"108":[2,184],"109":[2,184],"113":[2,184],"121":[2,184],"124":[2,184],"130":[2,184],"131":[2,184],"133":[2,184],"134":[2,184],"135":[2,184],"136":[2,184],"137":[2,184],"138":[2,184],"139":[2,184],"140":[2,184],"141":[2,184],"142":[2,184],"144":[2,184]},{"8":289,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":290,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"119":[2,162],"120":[2,162]},{"8":212,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"91":151,"92":[1,60],"95":[1,59],"96":[1,150],"97":152,"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"31":166,"32":[1,76],"63":167,"64":168,"78":[1,73],"95":[1,247],"118":291},{"1":[2,168],"4":[2,168],"29":[2,168],"30":[2,168],"47":[1,97],"55":[2,168],"59":[2,168],"75":[2,168],"80":[2,168],"90":[2,168],"94":[2,168],"96":[2,168],"105":[2,168],"106":95,"107":[2,168],"108":[1,292],"109":[2,168],"112":96,"113":[2,168],"114":70,"121":[1,293],"130":[2,168],"131":[2,168],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,169],"4":[2,169],"29":[2,169],"30":[2,169],"47":[1,97],"55":[2,169],"59":[2,169],"75":[2,169],"80":[2,169],"90":[2,169],"94":[2,169],"96":[2,169],"105":[2,169],"106":95,"107":[2,169],"108":[1,294],"109":[2,169],"112":96,"113":[2,169],"114":70,"121":[2,169],"130":[2,169],"131":[2,169],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"4":[1,296],"29":[1,297],"80":[1,295]},{"4":[2,58],"28":177,"29":[2,58],"30":[2,58],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":298,"43":176,"46":[1,49],"58":[1,178],"80":[2,58]},{"8":299,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,300],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":301,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,302],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"30":[1,303],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,85],"4":[2,85],"29":[2,85],"30":[2,85],"41":[2,85],"47":[2,85],"55":[2,85],"59":[2,85],"68":[2,85],"69":[2,85],"70":[2,85],"71":[2,85],"74":[2,85],"75":[2,85],"76":[2,85],"77":[2,85],"80":[2,85],"82":[2,85],"88":[2,85],"89":[2,85],"90":[2,85],"94":[2,85],"96":[2,85],"105":[2,85],"107":[2,85],"108":[2,85],"109":[2,85],"113":[2,85],"121":[2,85],"130":[2,85],"131":[2,85],"133":[2,85],"134":[2,85],"135":[2,85],"136":[2,85],"137":[2,85],"138":[2,85],"139":[2,85],"140":[2,85],"141":[2,85],"142":[2,85],"143":[2,85],"144":[2,85]},{"8":304,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"75":[1,305],"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"47":[1,97],"75":[1,306],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"47":[1,97],"75":[1,256],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"30":[1,307],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"4":[1,285],"29":[1,286],"90":[1,308]},{"4":[2,66],"29":[2,66],"30":[2,66],"55":[2,66],"90":[2,66],"96":[2,66]},{"4":[1,125],"6":309,"29":[1,6]},{"50":[2,61],"55":[2,61]},{"50":[2,65],"55":[2,65]},{"4":[1,125],"6":310,"29":[1,6],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"4":[1,125],"6":311,"29":[1,6]},{"1":[2,140],"4":[2,140],"29":[2,140],"30":[2,140],"47":[2,140],"55":[2,140],"59":[2,140],"75":[2,140],"80":[2,140],"90":[2,140],"94":[2,140],"96":[2,140],"105":[2,140],"107":[2,140],"108":[2,140],"109":[2,140],"113":[2,140],"121":[2,140],"130":[2,140],"131":[2,140],"133":[2,140],"134":[2,140],"135":[2,140],"136":[2,140],"137":[2,140],"138":[2,140],"139":[2,140],"140":[2,140],"141":[2,140],"142":[2,140],"144":[2,140]},{"4":[1,125],"6":312,"29":[1,6]},{"30":[1,313],"124":[1,314],"125":273,"126":[1,225]},{"1":[2,177],"4":[2,177],"29":[2,177],"30":[2,177],"47":[2,177],"55":[2,177],"59":[2,177],"75":[2,177],"80":[2,177],"90":[2,177],"94":[2,177],"96":[2,177],"105":[2,177],"107":[2,177],"108":[2,177],"109":[2,177],"113":[2,177],"121":[2,177],"130":[2,177],"131":[2,177],"133":[2,177],"134":[2,177],"135":[2,177],"136":[2,177],"137":[2,177],"138":[2,177],"139":[2,177],"140":[2,177],"141":[2,177],"142":[2,177],"144":[2,177]},{"4":[1,125],"6":315,"29":[1,6]},{"30":[2,180],"124":[2,180],"126":[2,180]},{"4":[1,125],"6":316,"29":[1,6],"55":[1,317]},{"4":[2,136],"29":[2,136],"47":[1,97],"55":[2,136],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,95],"4":[2,95],"29":[1,318],"30":[2,95],"47":[2,95],"55":[2,95],"59":[2,95],"62":104,"68":[1,106],"69":[1,107],"70":[1,108],"71":[1,109],"72":110,"73":111,"74":[1,112],"75":[2,95],"76":[1,113],"77":[1,114],"80":[2,95],"85":102,"88":[1,105],"89":[2,114],"90":[2,95],"94":[2,95],"96":[2,95],"105":[2,95],"107":[2,95],"108":[2,95],"109":[2,95],"113":[2,95],"121":[2,95],"130":[2,95],"131":[2,95],"133":[2,95],"134":[2,95],"135":[2,95],"136":[2,95],"137":[2,95],"138":[2,95],"139":[2,95],"140":[2,95],"141":[2,95],"142":[2,95],"144":[2,95]},{"4":[1,279],"30":[1,319]},{"1":[2,98],"4":[2,98],"29":[2,98],"30":[2,98],"47":[2,98],"55":[2,98],"59":[2,98],"75":[2,98],"80":[2,98],"90":[2,98],"94":[2,98],"96":[2,98],"105":[2,98],"107":[2,98],"108":[2,98],"109":[2,98],"113":[2,98],"121":[2,98],"130":[2,98],"131":[2,98],"133":[2,98],"134":[2,98],"135":[2,98],"136":[2,98],"137":[2,98],"138":[2,98],"139":[2,98],"140":[2,98],"141":[2,98],"142":[2,98],"144":[2,98]},{"28":177,"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"84":320},{"4":[1,279],"80":[1,321]},{"8":322,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,323],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,105],"28":177,"30":[2,105],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"83":324,"84":231},{"47":[1,97],"96":[1,325],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,128],"4":[2,128],"29":[2,128],"30":[2,128],"41":[2,128],"47":[2,128],"55":[2,128],"59":[2,128],"68":[2,128],"69":[2,128],"70":[2,128],"71":[2,128],"74":[2,128],"75":[2,128],"76":[2,128],"77":[2,128],"80":[2,128],"88":[2,128],"89":[2,128],"90":[2,128],"94":[2,128],"96":[2,128],"105":[2,128],"107":[2,128],"108":[2,128],"109":[2,128],"113":[2,128],"119":[2,128],"120":[2,128],"121":[2,128],"130":[2,128],"131":[2,128],"133":[2,128],"134":[2,128],"135":[2,128],"136":[2,128],"137":[2,128],"138":[2,128],"139":[2,128],"140":[2,128],"141":[2,128],"142":[2,128],"143":[2,128],"144":[2,128]},{"8":212,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"97":326,"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":212,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"91":327,"92":[1,60],"95":[1,59],"97":152,"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,130],"29":[2,130],"30":[2,130],"55":[2,130],"90":[2,130],"96":[2,130]},{"4":[1,285],"29":[1,286],"30":[1,328]},{"1":[2,147],"4":[2,147],"29":[2,147],"30":[2,147],"47":[1,97],"55":[2,147],"59":[2,147],"75":[2,147],"80":[2,147],"90":[2,147],"94":[2,147],"96":[2,147],"105":[2,147],"106":95,"107":[1,66],"108":[2,147],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,147],"130":[2,147],"131":[2,147],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,149],"4":[2,149],"29":[2,149],"30":[2,149],"47":[1,97],"55":[2,149],"59":[2,149],"75":[2,149],"80":[2,149],"90":[2,149],"94":[2,149],"96":[2,149],"105":[2,149],"106":95,"107":[1,66],"108":[2,149],"109":[1,67],"112":96,"113":[1,69],"114":70,"121":[2,149],"130":[2,149],"131":[2,149],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"119":[2,167],"120":[2,167]},{"8":329,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":330,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":331,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,88],"4":[2,88],"29":[2,88],"30":[2,88],"41":[2,88],"47":[2,88],"55":[2,88],"59":[2,88],"68":[2,88],"69":[2,88],"70":[2,88],"71":[2,88],"74":[2,88],"75":[2,88],"76":[2,88],"77":[2,88],"80":[2,88],"88":[2,88],"89":[2,88],"90":[2,88],"94":[2,88],"96":[2,88],"105":[2,88],"107":[2,88],"108":[2,88],"109":[2,88],"113":[2,88],"119":[2,88],"120":[2,88],"121":[2,88],"130":[2,88],"131":[2,88],"133":[2,88],"134":[2,88],"135":[2,88],"136":[2,88],"137":[2,88],"138":[2,88],"139":[2,88],"140":[2,88],"141":[2,88],"142":[2,88],"143":[2,88],"144":[2,88]},{"28":177,"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":332,"43":176,"46":[1,49],"58":[1,178]},{"4":[2,89],"28":177,"29":[2,89],"30":[2,89],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":173,"43":176,"46":[1,49],"55":[2,89],"58":[1,178],"79":333},{"4":[2,91],"29":[2,91],"30":[2,91],"55":[2,91],"80":[2,91]},{"4":[2,44],"29":[2,44],"30":[2,44],"47":[1,97],"55":[2,44],"80":[2,44],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"8":334,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,45],"29":[2,45],"30":[2,45],"47":[1,97],"55":[2,45],"80":[2,45],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"8":335,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,208],"4":[2,208],"29":[2,208],"30":[2,208],"47":[2,208],"55":[2,208],"59":[2,208],"75":[2,208],"80":[2,208],"90":[2,208],"94":[2,208],"96":[2,208],"105":[2,208],"107":[2,208],"108":[2,208],"109":[2,208],"113":[2,208],"121":[2,208],"130":[2,208],"131":[2,208],"133":[2,208],"134":[2,208],"135":[2,208],"136":[2,208],"137":[2,208],"138":[2,208],"139":[2,208],"140":[2,208],"141":[2,208],"142":[2,208],"144":[2,208]},{"47":[1,97],"75":[1,336],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,125],"4":[2,125],"29":[2,125],"30":[2,125],"41":[2,125],"47":[2,125],"55":[2,125],"59":[2,125],"68":[2,125],"69":[2,125],"70":[2,125],"71":[2,125],"74":[2,125],"75":[2,125],"76":[2,125],"77":[2,125],"80":[2,125],"82":[2,125],"88":[2,125],"89":[2,125],"90":[2,125],"94":[2,125],"96":[2,125],"105":[2,125],"107":[2,125],"108":[2,125],"109":[2,125],"113":[2,125],"121":[2,125],"130":[2,125],"131":[2,125],"133":[2,125],"134":[2,125],"135":[2,125],"136":[2,125],"137":[2,125],"138":[2,125],"139":[2,125],"140":[2,125],"141":[2,125],"142":[2,125],"143":[2,125],"144":[2,125]},{"1":[2,126],"4":[2,126],"29":[2,126],"30":[2,126],"41":[2,126],"47":[2,126],"55":[2,126],"59":[2,126],"68":[2,126],"69":[2,126],"70":[2,126],"71":[2,126],"74":[2,126],"75":[2,126],"76":[2,126],"77":[2,126],"80":[2,126],"82":[2,126],"88":[2,126],"89":[2,126],"90":[2,126],"94":[2,126],"96":[2,126],"105":[2,126],"107":[2,126],"108":[2,126],"109":[2,126],"113":[2,126],"121":[2,126],"130":[2,126],"131":[2,126],"133":[2,126],"134":[2,126],"135":[2,126],"136":[2,126],"137":[2,126],"138":[2,126],"139":[2,126],"140":[2,126],"141":[2,126],"142":[2,126],"143":[2,126],"144":[2,126]},{"1":[2,40],"4":[2,40],"29":[2,40],"30":[2,40],"47":[2,40],"55":[2,40],"59":[2,40],"75":[2,40],"80":[2,40],"90":[2,40],"94":[2,40],"96":[2,40],"105":[2,40],"107":[2,40],"108":[2,40],"109":[2,40],"113":[2,40],"121":[2,40],"130":[2,40],"131":[2,40],"133":[2,40],"134":[2,40],"135":[2,40],"136":[2,40],"137":[2,40],"138":[2,40],"139":[2,40],"140":[2,40],"141":[2,40],"142":[2,40],"144":[2,40]},{"1":[2,117],"4":[2,117],"29":[2,117],"30":[2,117],"47":[2,117],"55":[2,117],"59":[2,117],"68":[2,117],"69":[2,117],"70":[2,117],"71":[2,117],"74":[2,117],"75":[2,117],"76":[2,117],"77":[2,117],"80":[2,117],"88":[2,117],"89":[2,117],"90":[2,117],"94":[2,117],"96":[2,117],"105":[2,117],"107":[2,117],"108":[2,117],"109":[2,117],"113":[2,117],"121":[2,117],"130":[2,117],"131":[2,117],"133":[2,117],"134":[2,117],"135":[2,117],"136":[2,117],"137":[2,117],"138":[2,117],"139":[2,117],"140":[2,117],"141":[2,117],"142":[2,117],"144":[2,117]},{"1":[2,53],"4":[2,53],"29":[2,53],"30":[2,53],"47":[2,53],"55":[2,53],"59":[2,53],"75":[2,53],"80":[2,53],"90":[2,53],"94":[2,53],"96":[2,53],"105":[2,53],"107":[2,53],"108":[2,53],"109":[2,53],"113":[2,53],"121":[2,53],"130":[2,53],"131":[2,53],"133":[2,53],"134":[2,53],"135":[2,53],"136":[2,53],"137":[2,53],"138":[2,53],"139":[2,53],"140":[2,53],"141":[2,53],"142":[2,53],"144":[2,53]},{"1":[2,185],"4":[2,185],"29":[2,185],"30":[2,185],"47":[2,185],"55":[2,185],"59":[2,185],"75":[2,185],"80":[2,185],"90":[2,185],"94":[2,185],"96":[2,185],"105":[2,185],"107":[2,185],"108":[2,185],"109":[2,185],"113":[2,185],"121":[2,185],"124":[2,185],"130":[2,185],"131":[2,185],"133":[2,185],"134":[2,185],"135":[2,185],"136":[2,185],"137":[2,185],"138":[2,185],"139":[2,185],"140":[2,185],"141":[2,185],"142":[2,185],"144":[2,185]},{"1":[2,141],"4":[2,141],"29":[2,141],"30":[2,141],"47":[2,141],"55":[2,141],"59":[2,141],"75":[2,141],"80":[2,141],"90":[2,141],"94":[2,141],"96":[2,141],"105":[2,141],"107":[2,141],"108":[2,141],"109":[2,141],"113":[2,141],"121":[2,141],"130":[2,141],"131":[2,141],"133":[2,141],"134":[2,141],"135":[2,141],"136":[2,141],"137":[2,141],"138":[2,141],"139":[2,141],"140":[2,141],"141":[2,141],"142":[2,141],"144":[2,141]},{"1":[2,142],"4":[2,142],"29":[2,142],"30":[2,142],"47":[2,142],"55":[2,142],"59":[2,142],"75":[2,142],"80":[2,142],"90":[2,142],"94":[2,142],"96":[2,142],"101":[2,142],"105":[2,142],"107":[2,142],"108":[2,142],"109":[2,142],"113":[2,142],"121":[2,142],"130":[2,142],"131":[2,142],"133":[2,142],"134":[2,142],"135":[2,142],"136":[2,142],"137":[2,142],"138":[2,142],"139":[2,142],"140":[2,142],"141":[2,142],"142":[2,142],"144":[2,142]},{"1":[2,175],"4":[2,175],"29":[2,175],"30":[2,175],"47":[2,175],"55":[2,175],"59":[2,175],"75":[2,175],"80":[2,175],"90":[2,175],"94":[2,175],"96":[2,175],"105":[2,175],"107":[2,175],"108":[2,175],"109":[2,175],"113":[2,175],"121":[2,175],"130":[2,175],"131":[2,175],"133":[2,175],"134":[2,175],"135":[2,175],"136":[2,175],"137":[2,175],"138":[2,175],"139":[2,175],"140":[2,175],"141":[2,175],"142":[2,175],"144":[2,175]},{"4":[1,125],"6":337,"29":[1,6]},{"30":[1,338]},{"4":[1,339],"30":[2,181],"124":[2,181],"126":[2,181]},{"8":340,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,105],"28":177,"30":[2,105],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"83":341,"84":231},{"1":[2,96],"4":[2,96],"29":[2,96],"30":[2,96],"47":[2,96],"55":[2,96],"59":[2,96],"75":[2,96],"80":[2,96],"90":[2,96],"94":[2,96],"96":[2,96],"105":[2,96],"107":[2,96],"108":[2,96],"109":[2,96],"113":[2,96],"121":[2,96],"130":[2,96],"131":[2,96],"133":[2,96],"134":[2,96],"135":[2,96],"136":[2,96],"137":[2,96],"138":[2,96],"139":[2,96],"140":[2,96],"141":[2,96],"142":[2,96],"144":[2,96]},{"4":[2,107],"30":[2,107],"80":[2,107]},{"4":[2,108],"30":[2,108],"80":[2,108]},{"4":[2,103],"30":[2,103],"47":[1,97],"80":[2,103],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"8":342,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[1,279],"30":[1,343]},{"1":[2,123],"4":[2,123],"29":[2,123],"30":[2,123],"47":[2,123],"55":[2,123],"59":[2,123],"68":[2,123],"69":[2,123],"70":[2,123],"71":[2,123],"74":[2,123],"75":[2,123],"76":[2,123],"77":[2,123],"80":[2,123],"88":[2,123],"89":[2,123],"90":[2,123],"94":[2,123],"96":[2,123],"105":[2,123],"107":[2,123],"108":[2,123],"109":[2,123],"113":[2,123],"121":[2,123],"130":[2,123],"131":[2,123],"133":[2,123],"134":[2,123],"135":[2,123],"136":[2,123],"137":[2,123],"138":[2,123],"139":[2,123],"140":[2,123],"141":[2,123],"142":[2,123],"143":[2,123],"144":[2,123]},{"4":[2,131],"29":[2,131],"30":[2,131],"55":[2,131],"90":[2,131],"96":[2,131]},{"4":[2,57],"29":[2,57],"30":[2,57],"54":344,"55":[1,240]},{"4":[2,132],"29":[2,132],"30":[2,132],"55":[2,132],"90":[2,132],"96":[2,132]},{"1":[2,170],"4":[2,170],"29":[2,170],"30":[2,170],"47":[1,97],"55":[2,170],"59":[2,170],"75":[2,170],"80":[2,170],"90":[2,170],"94":[2,170],"96":[2,170],"105":[2,170],"106":95,"107":[2,170],"108":[2,170],"109":[2,170],"112":96,"113":[2,170],"114":70,"121":[1,345],"130":[2,170],"131":[2,170],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,172],"4":[2,172],"29":[2,172],"30":[2,172],"47":[1,97],"55":[2,172],"59":[2,172],"75":[2,172],"80":[2,172],"90":[2,172],"94":[2,172],"96":[2,172],"105":[2,172],"106":95,"107":[2,172],"108":[1,346],"109":[2,172],"112":96,"113":[2,172],"114":70,"121":[2,172],"130":[2,172],"131":[2,172],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,171],"4":[2,171],"29":[2,171],"30":[2,171],"47":[1,97],"55":[2,171],"59":[2,171],"75":[2,171],"80":[2,171],"90":[2,171],"94":[2,171],"96":[2,171],"105":[2,171],"106":95,"107":[2,171],"108":[2,171],"109":[2,171],"112":96,"113":[2,171],"114":70,"121":[2,171],"130":[2,171],"131":[2,171],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"4":[2,92],"29":[2,92],"30":[2,92],"55":[2,92],"80":[2,92]},{"4":[2,57],"29":[2,57],"30":[2,57],"54":347,"55":[1,252]},{"30":[1,348],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"30":[1,349],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,124],"4":[2,124],"29":[2,124],"30":[2,124],"41":[2,124],"47":[2,124],"55":[2,124],"59":[2,124],"68":[2,124],"69":[2,124],"70":[2,124],"71":[2,124],"74":[2,124],"75":[2,124],"76":[2,124],"77":[2,124],"80":[2,124],"82":[2,124],"88":[2,124],"89":[2,124],"90":[2,124],"94":[2,124],"96":[2,124],"105":[2,124],"107":[2,124],"108":[2,124],"109":[2,124],"113":[2,124],"121":[2,124],"130":[2,124],"131":[2,124],"133":[2,124],"134":[2,124],"135":[2,124],"136":[2,124],"137":[2,124],"138":[2,124],"139":[2,124],"140":[2,124],"141":[2,124],"142":[2,124],"143":[2,124],"144":[2,124]},{"30":[1,350]},{"1":[2,178],"4":[2,178],"29":[2,178],"30":[2,178],"47":[2,178],"55":[2,178],"59":[2,178],"75":[2,178],"80":[2,178],"90":[2,178],"94":[2,178],"96":[2,178],"105":[2,178],"107":[2,178],"108":[2,178],"109":[2,178],"113":[2,178],"121":[2,178],"130":[2,178],"131":[2,178],"133":[2,178],"134":[2,178],"135":[2,178],"136":[2,178],"137":[2,178],"138":[2,178],"139":[2,178],"140":[2,178],"141":[2,178],"142":[2,178],"144":[2,178]},{"30":[2,182],"124":[2,182],"126":[2,182]},{"4":[2,137],"29":[2,137],"47":[1,97],"55":[2,137],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"4":[1,279],"30":[1,351]},{"30":[1,352],"47":[1,97],"106":95,"107":[1,66],"109":[1,67],"112":96,"113":[1,69],"114":70,"130":[1,93],"131":[1,94],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,101],"4":[2,101],"29":[2,101],"30":[2,101],"47":[2,101],"55":[2,101],"59":[2,101],"75":[2,101],"80":[2,101],"90":[2,101],"94":[2,101],"96":[2,101],"105":[2,101],"107":[2,101],"108":[2,101],"109":[2,101],"113":[2,101],"121":[2,101],"130":[2,101],"131":[2,101],"133":[2,101],"134":[2,101],"135":[2,101],"136":[2,101],"137":[2,101],"138":[2,101],"139":[2,101],"140":[2,101],"141":[2,101],"142":[2,101],"144":[2,101]},{"4":[1,285],"29":[1,286],"30":[1,353]},{"8":354,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":355,"9":127,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":71,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":72,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":47,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,42],"103":[1,51],"104":[1,58],"106":43,"107":[1,66],"109":[1,67],"110":44,"111":[1,68],"112":45,"113":[1,69],"114":70,"122":[1,46],"127":41,"128":[1,64],"129":[1,65],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[1,296],"29":[1,297],"30":[1,356]},{"4":[2,46],"29":[2,46],"30":[2,46],"55":[2,46],"80":[2,46]},{"4":[2,47],"29":[2,47],"30":[2,47],"55":[2,47],"80":[2,47]},{"1":[2,176],"4":[2,176],"29":[2,176],"30":[2,176],"47":[2,176],"55":[2,176],"59":[2,176],"75":[2,176],"80":[2,176],"90":[2,176],"94":[2,176],"96":[2,176],"105":[2,176],"107":[2,176],"108":[2,176],"109":[2,176],"113":[2,176],"121":[2,176],"130":[2,176],"131":[2,176],"133":[2,176],"134":[2,176],"135":[2,176],"136":[2,176],"137":[2,176],"138":[2,176],"139":[2,176],"140":[2,176],"141":[2,176],"142":[2,176],"144":[2,176]},{"1":[2,97],"4":[2,97],"29":[2,97],"30":[2,97],"47":[2,97],"55":[2,97],"59":[2,97],"75":[2,97],"80":[2,97],"90":[2,97],"94":[2,97],"96":[2,97],"105":[2,97],"107":[2,97],"108":[2,97],"109":[2,97],"113":[2,97],"121":[2,97],"130":[2,97],"131":[2,97],"133":[2,97],"134":[2,97],"135":[2,97],"136":[2,97],"137":[2,97],"138":[2,97],"139":[2,97],"140":[2,97],"141":[2,97],"142":[2,97],"144":[2,97]},{"4":[2,104],"30":[2,104],"80":[2,104]},{"4":[2,133],"29":[2,133],"30":[2,133],"55":[2,133],"90":[2,133],"96":[2,133]},{"1":[2,173],"4":[2,173],"29":[2,173],"30":[2,173],"47":[1,97],"55":[2,173],"59":[2,173],"75":[2,173],"80":[2,173],"90":[2,173],"94":[2,173],"96":[2,173],"105":[2,173],"106":95,"107":[2,173],"108":[2,173],"109":[2,173],"112":96,"113":[2,173],"114":70,"121":[2,173],"130":[2,173],"131":[2,173],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"1":[2,174],"4":[2,174],"29":[2,174],"30":[2,174],"47":[1,97],"55":[2,174],"59":[2,174],"75":[2,174],"80":[2,174],"90":[2,174],"94":[2,174],"96":[2,174],"105":[2,174],"106":95,"107":[2,174],"108":[2,174],"109":[2,174],"112":96,"113":[2,174],"114":70,"121":[2,174],"130":[2,174],"131":[2,174],"133":[1,85],"134":[1,84],"135":[1,82],"136":[1,83],"137":[1,86],"138":[1,87],"139":[1,88],"140":[1,89],"141":[1,90],"142":[1,91],"144":[1,92]},{"4":[2,93],"29":[2,93],"30":[2,93],"55":[2,93],"80":[2,93]}],defaultActions:{"79":[2,4],"105":[2,115]},parseError:function parseError(str,hash){throw new Error(str)},parse:function parse(input){var self=this,stack=[0],vstack=[null],table=this.table,yytext="",yylineno=0,yyleng=0,shifts=0,reductions=0,recovering=0,TERROR=2,EOF=1;this.lexer.setInput(input);this.lexer.yy=this.yy;this.yy.lexer=this.lexer;var parseError=this.yy.parseError=typeof this.yy.parseError=="function"?this.yy.parseError:this.parseError;function popStack(n){stack.length=stack.length-2*n;vstack.length=vstack.length-n}function checkRecover(st){for(var p in table[st]){if(p==TERROR){return true}}return false}function lex(){var token;token=self.lexer.lex()||1;if(typeof token!=="number"){token=self.symbols_[token]||token}return token}var symbol,preErrorSymbol,state,action,a,r,yyval={},p,len,newState,expected,recovered=false;while(true){state=stack[stack.length-1];if(this.defaultActions[state]){action=this.defaultActions[state]}else{if(symbol==null){symbol=lex()}action=table[state]&&table[state][symbol]}if(typeof action==="undefined"||!action.length||!action[0]){if(!recovering){expected=[];for(p in table[state]){if(this.terminals_[p]&&p>2){expected.push("'"+this.terminals_[p]+"'")}}if(this.lexer.showPosition){parseError.call(this,"Parse error on line "+(yylineno+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+expected.join(", "),{text:this.lexer.match,token:this.terminals_[symbol]||symbol,line:this.lexer.yylineno,expected:expected})}else{parseError.call(this,"Parse error on line "+(yylineno+1)+": Unexpected '"+(this.terminals_[symbol]||symbol)+"'",{text:this.lexer.match,token:this.terminals_[symbol]||symbol,line:this.lexer.yylineno,expected:expected})}}if(recovering==3){if(symbol==EOF){throw"Parsing halted."}yyleng=this.lexer.yyleng;yytext=this.lexer.yytext;yylineno=this.lexer.yylineno;symbol=lex()}while(1){if(checkRecover(state)){break}if(state==0){throw"Parsing halted."}popStack(1);state=stack[stack.length-1]}preErrorSymbol=symbol;symbol=TERROR;state=stack[stack.length-1];action=table[state]&&table[state][TERROR];recovering=3}if(action[0] instanceof Array&&action.length>1){throw new Error("Parse Error: multiple actions possible at state: "+state+", token: "+symbol)}a=action;switch(a[0]){case 1:shifts++;stack.push(symbol);vstack.push(this.lexer.yytext);stack.push(a[1]);symbol=null;if(!preErrorSymbol){yyleng=this.lexer.yyleng;yytext=this.lexer.yytext;yylineno=this.lexer.yylineno;if(recovering>0){recovering--}}else{symbol=preErrorSymbol;preErrorSymbol=null}break;case 2:reductions++;len=this.productions_[a[1]][1];yyval.$=vstack[vstack.length-len];r=this.performAction.call(yyval,yytext,yyleng,yylineno,this.yy,a[1],vstack);if(typeof r!=="undefined"){return r}if(len){stack=stack.slice(0,-1*len*2);vstack=vstack.slice(0,-1*len)}stack.push(this.productions_[a[1]][0]);vstack.push(yyval.$);newState=table[stack[stack.length-2]][stack[stack.length-1]];stack.push(newState);break;case 3:this.reductionCount=reductions;this.shiftCount=shifts;return true}}return true}};return parser})();if(typeof require!=="undefined"){exports.parser=parser;exports.parse=function(){return parser.parse.apply(parser,arguments)};exports.main=function commonjsMain(args){if(!args[1]){throw new Error("Usage: "+args[0]+" FILE")}if(typeof process!=="undefined"){var source=require("fs").readFileSync(require("path").join(process.cwd(),args[1]),"utf8")}else{var cwd=require("file").path(require("file").cwd());var source=cwd.join(args[1]).read({charset:"utf-8"})}return exports.parser.parse(source)};if(typeof module!=="undefined"&&require.main===module){exports.main(typeof process!=="undefined"?process.argv.slice(1):require("system").args)}}};require["./scope"]=new function(){var exports=this;(function(){var Scope,_ref,extend,last;var __hasProp=Object.prototype.hasOwnProperty;_ref=require("./helpers"),extend=_ref.extend,last=_ref.last;exports.Scope=(function(){Scope=(function(){function Scope(_arg,_arg2,_arg3){this.method=_arg3;this.expressions=_arg2;this.parent=_arg;this.variables={"arguments":"arguments"};if(this.parent){this.garbage=this.parent.garbage}else{this.garbage=[];Scope.root=this}return this}return Scope})();Scope.root=null;Scope.prototype.startLevel=function(){return this.garbage.push([])};Scope.prototype.endLevel=function(){var _i,_len,_ref2,_result,name,vars;vars=this.variables;_result=[];for(_i=0,_len=(_ref2=this.garbage.pop()).length;_i<_len;_i++){name=_ref2[_i];if(vars[name]==="var"){_result.push(vars[name]="reuse")}}return _result};Scope.prototype.find=function(name,options){if(this.check(name,options)){return true}this.variables[name]="var";return false};Scope.prototype.any=function(fn){var _ref2,k,v;for(v in _ref2=this.variables){if(!__hasProp.call(_ref2,v)){continue}k=_ref2[v];if(fn(v,k)){return true}}return false};Scope.prototype.parameter=function(name){return(this.variables[name]="param")};Scope.prototype.check=function(name,options){var _ref2,immediate;immediate=Object.prototype.hasOwnProperty.call(this.variables,name);if(immediate||((options!=null)?options.immediate:undefined)){return immediate}return !!(((_ref2=this.parent)!=null)?_ref2.check(name):undefined)};Scope.prototype.temporary=function(type,index){return type.length>1?"_"+type+(index>1?index:""):"_"+(index+parseInt(type,36)).toString(36).replace(/\d/g,"a")};Scope.prototype.freeVariable=function(type){var index,temp;index=0;while(this.check(temp=this.temporary(type,index))&&this.variables[temp]!=="reuse"){index++}this.variables[temp]="var";if(this.garbage.length){last(this.garbage).push(temp)}return temp};Scope.prototype.assign=function(name,value){return(this.variables[name]={value:value,assigned:true})};Scope.prototype.hasDeclarations=function(body){return body===this.expressions&&this.any(function(k,val){return(val==="var"||val==="reuse")})};Scope.prototype.hasAssignments=function(body){return body===this.expressions&&this.any(function(k,val){return val.assigned})};Scope.prototype.declaredVariables=function(){var _ref2,_result,key,val;return(function(){_result=[];for(key in _ref2=this.variables){if(!__hasProp.call(_ref2,key)){continue}val=_ref2[key];if((val==="var"||val==="reuse")){_result.push(key)}}return _result}).call(this).sort()};Scope.prototype.assignedVariables=function(){var _ref2,_result,key,val;_result=[];for(key in _ref2=this.variables){if(!__hasProp.call(_ref2,key)){continue}val=_ref2[key];if(val.assigned){_result.push(""+key+" = "+(val.value))}}return _result};Scope.prototype.compiledDeclarations=function(){return this.declaredVariables().join(", ")};Scope.prototype.compiledAssignments=function(){return this.assignedVariables().join(", ")};return Scope}).call(this)}).call(this)};require["./nodes"]=new function(){var exports=this;(function(){var Accessor,ArrayLiteral,Assign,Base,Call,Class,Closure,Code,Comment,Existence,Expressions,Extends,For,IDENTIFIER,IS_STRING,If,In,Index,Literal,NO,NUMBER,ObjectLiteral,Op,Param,Parens,Push,Range,Return,SIMPLENUM,Scope,Slice,Splat,Switch,TAB,THIS,TRAILING_WHITESPACE,Throw,Try,UTILITIES,Value,While,YES,_ref,compact,del,ends,flatten,include,last,merge,starts,utility;var __extends=function(child,parent){function ctor(){this.constructor=child}ctor.prototype=parent.prototype;child.prototype=new ctor;if(typeof parent.extended==="function"){parent.extended(child)}child.__super__=parent.prototype};Scope=require("./scope").Scope;_ref=require("./helpers"),compact=_ref.compact,flatten=_ref.flatten,merge=_ref.merge,del=_ref.del,include=_ref.include,starts=_ref.starts,ends=_ref.ends,last=_ref.last;YES=function(){return true};NO=function(){return false};THIS=function(){return this};exports.Base=(function(){Base=(function(){function Base(){this.tags={};return this}return Base})();Base.prototype.compile=function(o){var closure,code,top;this.options=o?merge(o):{};this.tab=o.indent;top=this.topSensitive()?this.options.top:del(this.options,"top");closure=this.isStatement(o)&&!this.isPureStatement()&&!top&&!this.options.asStatement&&!(this instanceof Comment)&&!this.containsPureStatement();code=closure?this.compileClosure(this.options):this.compileNode(this.options);return code};Base.prototype.compileClosure=function(o){o.sharedScope=o.scope;return Closure.wrap(this).compile(o)};Base.prototype.compileReference=function(o,options){var _len,compiled,i,node,pair,reference;pair=(function(){if(!this.isComplex()){return[this,this]}else{reference=new Literal(o.scope.freeVariable("ref"));compiled=new Assign(reference,this);return[compiled,reference]}}).call(this);if(((options!=null)?options.precompile:undefined)){for(i=0,_len=pair.length;i<_len;i++){node=pair[i];(pair[i]=node.compile(o))}}return pair};Base.prototype.idt=function(tabs){var idt,num;idt=this.tab||"";num=(tabs||0)+1;while(num-=1){idt+=TAB}return idt};Base.prototype.makeReturn=function(){return new Return(this)};Base.prototype.contains=function(block){var contains;contains=false;this.traverseChildren(false,function(node){if(block(node)){contains=true;return false}});return contains};Base.prototype.containsType=function(type){return this instanceof type||this.contains(function(node){return node instanceof type})};Base.prototype.containsPureStatement=function(){return this.isPureStatement()||this.contains(function(node){return node.isPureStatement()})};Base.prototype.traverse=function(block){return this.traverseChildren(true,block)};Base.prototype.toString=function(idt,override){var _i,_len,_ref2,_result,child,children,klass;idt||(idt="");children=(function(){_result=[];for(_i=0,_len=(_ref2=this.collectChildren()).length;_i<_len;_i++){child=_ref2[_i];_result.push(child.toString(idt+TAB))}return _result}).call(this).join("");klass=override||this.constructor.name+(this.soakNode||this.exist?"?":"");return"\n"+idt+klass+children};Base.prototype.eachChild=function(func){var _i,_j,_len,_len2,_ref2,_ref3,_result,attr,child;if(!this.children){return}_result=[];for(_i=0,_len=(_ref2=this.children).length;_i<_len;_i++){attr=_ref2[_i];if(this[attr]){for(_j=0,_len2=(_ref3=flatten([this[attr]])).length;_j<_len2;_j++){child=_ref3[_j];if(func(child)===false){return}}}}return _result};Base.prototype.collectChildren=function(){var nodes;nodes=[];this.eachChild(function(node){return nodes.push(node)});return nodes};Base.prototype.traverseChildren=function(crossScope,func){return this.eachChild(function(child){if(func(child)===false){return false}return crossScope||!(child instanceof Code)?child.traverseChildren(crossScope,func):undefined})};Base.prototype.invert=function(){return new Op("!",this)};Base.prototype.children=[];Base.prototype.unwrap=THIS;Base.prototype.isStatement=NO;Base.prototype.isPureStatement=NO;Base.prototype.isComplex=YES;Base.prototype.topSensitive=NO;Base.prototype.assigns=NO;return Base})();exports.Expressions=(function(){Expressions=(function(){function Expressions(nodes){Expressions.__super__.constructor.call(this);this.expressions=compact(flatten(nodes||[]));return this}return Expressions})();__extends(Expressions,Base);Expressions.prototype.children=["expressions"];Expressions.prototype.isStatement=YES;Expressions.prototype.push=function(node){this.expressions.push(node);return this};Expressions.prototype.unshift=function(node){this.expressions.unshift(node);return this};Expressions.prototype.unwrap=function(){return this.expressions.length===1?this.expressions[0]:this};Expressions.prototype.empty=function(){return this.expressions.length===0};Expressions.prototype.makeReturn=function(){var end,idx;end=this.expressions[(idx=this.expressions.length-1)];if(end instanceof Comment){end=this.expressions[idx-=1]}if(end&&!(end instanceof Return)){this.expressions[idx]=end.makeReturn()}return this};Expressions.prototype.compile=function(o){o||(o={});return o.scope?Expressions.__super__.compile.call(this,o):this.compileRoot(o)};Expressions.prototype.compileNode=function(o){var _i,_len,_ref2,_result,node;return(function(){_result=[];for(_i=0,_len=(_ref2=this.expressions).length;_i<_len;_i++){node=_ref2[_i];_result.push(this.compileExpression(node,merge(o)))}return _result}).call(this).join("\n")};Expressions.prototype.compileRoot=function(o){var code;o.indent=(this.tab=o.bare?"":TAB);o.scope=new Scope(null,this,null);code=this.compileWithDeclarations(o);code=code.replace(TRAILING_WHITESPACE,"");return o.bare?code:("(function() {\n"+code+"\n}).call(this);\n")};Expressions.prototype.compileWithDeclarations=function(o){var code;code=this.compileNode(o);if(o.scope.hasAssignments(this)){code=(""+(this.tab)+"var "+(o.scope.compiledAssignments().replace(/\n/g,"$&"+this.tab))+";\n"+code)}if(!o.globals&&o.scope.hasDeclarations(this)){code=(""+(this.tab)+"var "+(o.scope.compiledDeclarations())+";\n"+code)}return code};Expressions.prototype.compileExpression=function(node,o){var compiledNode;this.tab=o.indent;node.tags.front=true;compiledNode=node.compile(merge(o,{top:true}));return node.isStatement(o)?compiledNode:(""+(this.idt())+compiledNode+";")};return Expressions})();Expressions.wrap=function(nodes){if(nodes.length===1&&nodes[0] instanceof Expressions){return nodes[0]}return new Expressions(nodes)};exports.Literal=(function(){Literal=(function(){function Literal(_arg){this.value=_arg;Literal.__super__.constructor.call(this);return this}return Literal})();__extends(Literal,Base);Literal.prototype.makeReturn=function(){return this.isStatement()?this:Literal.__super__.makeReturn.call(this)};Literal.prototype.isStatement=function(){var _ref2;return((_ref2=this.value)==="break"||_ref2==="continue"||_ref2==="debugger")};Literal.prototype.isPureStatement=Literal.prototype.isStatement;Literal.prototype.isComplex=NO;Literal.prototype.isReserved=function(){return !!this.value.reserved};Literal.prototype.assigns=function(name){return name===this.value};Literal.prototype.compileNode=function(o){var end,idt,val;idt=this.isStatement(o)?this.idt():"";end=this.isStatement(o)?";":"";val=this.isReserved()?('"'+(this.value)+'"'):this.value;return idt+val+end};Literal.prototype.toString=function(){return' "'+this.value+'"'};return Literal})();exports.Return=(function(){Return=(function(){function Return(_arg){this.expression=_arg;Return.__super__.constructor.call(this);return this}return Return})();__extends(Return,Base);Return.prototype.isStatement=YES;Return.prototype.isPureStatement=YES;Return.prototype.children=["expression"];Return.prototype.makeReturn=THIS;Return.prototype.compile=function(o){var _ref2,expr;expr=(((_ref2=this.expression)!=null)?_ref2.makeReturn():undefined);if(expr&&(!(expr instanceof Return))){return expr.compile(o)}return Return.__super__.compile.call(this,o)};Return.prototype.compileNode=function(o){var expr;expr="";if(this.expression){if(this.expression.isStatement(o)){o.asStatement=true}expr=" "+this.expression.compile(o)}return""+(this.tab)+"return"+expr+";"};return Return})();exports.Value=(function(){Value=(function(){function Value(_arg,_arg2,tag){this.properties=_arg2;this.base=_arg;Value.__super__.constructor.call(this);this.properties||(this.properties=[]);if(tag){this.tags[tag]=true}return this}return Value})();__extends(Value,Base);Value.prototype.children=["base","properties"];Value.prototype.push=function(prop){this.properties.push(prop);return this};Value.prototype.hasProperties=function(){return !!this.properties.length};Value.prototype.isArray=function(){return this.base instanceof ArrayLiteral&&!this.properties.length};Value.prototype.isObject=function(){return this.base instanceof ObjectLiteral&&!this.properties.length};Value.prototype.isSplice=function(){return last(this.properties) instanceof Slice};Value.prototype.isComplex=function(){return this.base.isComplex()||this.hasProperties()};Value.prototype.assigns=function(name){return !this.properties.length&&this.base.assigns(name)};Value.prototype.makeReturn=function(){return this.properties.length?Value.__super__.makeReturn.call(this):this.base.makeReturn()};Value.prototype.unwrap=function(){return this.properties.length?this:this.base};Value.prototype.isStatement=function(o){return this.base.isStatement(o)&&!this.properties.length};Value.prototype.isSimpleNumber=function(){return this.base instanceof Literal&&SIMPLENUM.test(this.base.value)};Value.prototype.cacheReference=function(o){var base,bref,name,nref;name=last(this.properties);if(!this.base.isComplex()&&this.properties.length<2&&!((name!=null)?name.isComplex():undefined)){return[this,this]}base=new Value(this.base,this.properties.slice(0,-1));if(base.isComplex()){bref=new Literal(o.scope.freeVariable("base"));base=new Value(new Parens(new Assign(bref,base)))}if(!name){return[base,bref]}if(name.isComplex()){nref=new Literal(o.scope.freeVariable("name"));name=new Index(new Assign(nref,name.index));nref=new Index(nref)}return[base.push(name),new Value(bref||base.base,[nref||name])]};Value.prototype.compile=function(o){this.base.tags.front=this.tags.front;return !o.top||this.properties.length?Value.__super__.compile.call(this,o):this.base.compile(o)};Value.prototype.compileNode=function(o){var _i,_len,code,ex,prop,props;if(ex=this.unfoldSoak(o)){return ex.compile(o)}props=this.properties;if(this.parenthetical&&!props.length){this.base.parenthetical=true}code=this.base.compile(o);if(props[0] instanceof Accessor&&this.isSimpleNumber()){code=("("+code+")")}for(_i=0,_len=props.length;_i<_len;_i++){prop=props[_i];(code+=prop.compile(o))}return code};Value.prototype.unfoldSoak=function(o){var _len,_ref2,fst,i,ifn,prop,ref,snd;if(this.base.soakNode){Array.prototype.push.apply(this.base.body.properties,this.properties);return this.base}for(i=0,_len=(_ref2=this.properties).length;i<_len;i++){prop=_ref2[i];if(prop.soakNode){prop.soakNode=false;fst=new Value(this.base,this.properties.slice(0,i));snd=new Value(this.base,this.properties.slice(i));if(fst.isComplex()){ref=new Literal(o.scope.freeVariable("ref"));fst=new Parens(new Assign(ref,fst));snd.base=ref}ifn=new If(new Existence(fst),snd,{operation:true});ifn.soakNode=true;return ifn}}return null};Value.unfoldSoak=function(o,parent,name){var ifnode,node;node=parent[name];if(node instanceof If&&node.soakNode){ifnode=node}else{if(node instanceof Value){ifnode=node.unfoldSoak(o)}}if(!ifnode){return}parent[name]=ifnode.body;ifnode.body=new Value(parent);return ifnode};return Value}).call(this);exports.Comment=(function(){Comment=(function(){function Comment(_arg){this.comment=_arg;Comment.__super__.constructor.call(this);return this}return Comment})();__extends(Comment,Base);Comment.prototype.isStatement=YES;Comment.prototype.makeReturn=THIS;Comment.prototype.compileNode=function(o){return this.tab+"/*"+this.comment.replace(/\n/g,"\n"+this.tab)+"*/"};return Comment})();exports.Call=(function(){Call=(function(){function Call(variable,_arg,_arg2){this.exist=_arg2;this.args=_arg;Call.__super__.constructor.call(this);this.isNew=false;this.isSuper=variable==="super";this.variable=this.isSuper?null:variable;this.args||(this.args=[]);return this}return Call})();__extends(Call,Base);Call.prototype.children=["variable","args"];Call.prototype.compileSplatArguments=function(o){return Splat.compileSplattedArray(this.args,o)};Call.prototype.newInstance=function(){this.isNew=true;return this};Call.prototype.prefix=function(){return this.isNew?"new ":""};Call.prototype.superReference=function(o){var method,name;method=o.scope.method;if(!method){throw Error("cannot call super outside of a function")}name=method.name;if(!name){throw Error("cannot call super on an anonymous function.")}return method.klass?(""+(method.klass)+".__super__."+name):(""+name+".__super__.constructor")};Call.prototype.unfoldSoak=function(o){var _i,_len,_ref2,call,list,node;call=this;list=[];while(true){if(call.variable instanceof Call){list.push(call);call=call.variable;continue}if(!(call.variable instanceof Value)){break}list.push(call);if(!((call=call.variable.base) instanceof Call)){break}}for(_i=0,_len=(_ref2=list.reverse()).length;_i<_len;_i++){call=_ref2[_i];if(node){if(call.variable instanceof Call){call.variable=node}else{call.variable.base=node}}node=Value.unfoldSoak(o,call,"variable")}return node};Call.prototype.compileNode=function(o){var _i,_j,_len,_len2,_ref2,_ref3,_ref4,_ref5,_result,arg,args,left,node,rite,val;if(node=this.unfoldSoak(o)){return node.compile(o)}(((_ref2=this.variable)!=null)?(_ref2.tags.front=this.tags.front):undefined);if(this.exist){if(val=this.variable){if(!(val instanceof Value)){val=new Value(val)}_ref3=val.cacheReference(o),left=_ref3[0],rite=_ref3[1];rite=new Call(rite,this.args)}else{left=new Literal(this.superReference(o));rite=new Call(new Value(left),this.args);rite.isNew=this.isNew}left=("typeof "+(left.compile(o))+' !== "function"');rite=rite.compile(o);return("("+left+" ? undefined : "+rite+")")}for(_i=0,_len=(_ref4=this.args).length;_i<_len;_i++){arg=_ref4[_i];if(arg instanceof Splat){return this.compileSplat(o)}}args=(function(){_result=[];for(_j=0,_len2=(_ref5=this.args).length;_j<_len2;_j++){arg=_ref5[_j];_result.push((arg.parenthetical=true)&&arg.compile(o))}return _result}).call(this).join(", ");return this.isSuper?this.compileSuper(args,o):(""+(this.prefix())+(this.variable.compile(o))+"("+args+")")};Call.prototype.compileSuper=function(args,o){return""+(this.superReference(o))+".call(this"+(args.length?", ":"")+args+")"};Call.prototype.compileSplat=function(o){var base,fun,idt,name,ref,splatargs;splatargs=this.compileSplatArguments(o);if(this.isSuper){return(""+(this.superReference(o))+".apply(this, "+splatargs+")")}if(!this.isNew){if(!((base=this.variable) instanceof Value)){base=new Value(base)}if((name=base.properties.pop())&&base.isComplex()){ref=o.scope.freeVariable("this");fun=("("+ref+" = "+(base.compile(o))+")"+(name.compile(o)))}else{fun=(ref=base.compile(o));if(name){fun+=name.compile(o)}}return(""+fun+".apply("+ref+", "+splatargs+")")}idt=this.idt(1);return"(function(func, args, ctor) {\n"+idt+"ctor.prototype = func.prototype;\n"+idt+"var child = new ctor, result = func.apply(child, args);\n"+idt+'return typeof result === "object" ? result : child;\n'+(this.tab)+"})("+(this.variable.compile(o))+", "+splatargs+", function() {})"};return Call})();exports.Extends=(function(){Extends=(function(){function Extends(_arg,_arg2){this.parent=_arg2;this.child=_arg;Extends.__super__.constructor.call(this);return this}return Extends})();__extends(Extends,Base);Extends.prototype.children=["child","parent"];Extends.prototype.compileNode=function(o){var ref;ref=new Value(new Literal(utility("extends")));return(new Call(ref,[this.child,this.parent])).compile(o)};return Extends})();exports.Accessor=(function(){Accessor=(function(){function Accessor(_arg,tag){this.name=_arg;Accessor.__super__.constructor.call(this);this.prototype=tag==="prototype"?".prototype":"";this.soakNode=tag==="soak";return this}return Accessor})();__extends(Accessor,Base);Accessor.prototype.children=["name"];Accessor.prototype.compileNode=function(o){var name,namePart;name=this.name.compile(o);namePart=name.match(IS_STRING)?("["+name+"]"):("."+name);return this.prototype+namePart};Accessor.prototype.isComplex=NO;return Accessor})();exports.Index=(function(){Index=(function(){function Index(_arg){this.index=_arg;Index.__super__.constructor.call(this);return this}return Index})();__extends(Index,Base);Index.prototype.children=["index"];Index.prototype.compileNode=function(o){var idx,prefix;idx=this.index.compile(o);prefix=this.proto?".prototype":"";return""+prefix+"["+idx+"]"};Index.prototype.isComplex=function(){return this.index.isComplex()};return Index})();exports.Range=(function(){Range=(function(){function Range(_arg,_arg2,tag){this.to=_arg2;this.from=_arg;Range.__super__.constructor.call(this);this.exclusive=tag==="exclusive";this.equals=this.exclusive?"":"=";return this}return Range})();__extends(Range,Base);Range.prototype.children=["from","to"];Range.prototype.compileVariables=function(o){var _ref2,_ref3,_ref4,parts;o=merge(o,{top:true});_ref2=this.from.compileReference(o,{precompile:true}),this.from=_ref2[0],this.fromVar=_ref2[1];_ref3=this.to.compileReference(o,{precompile:true}),this.to=_ref3[0],this.toVar=_ref3[1];_ref4=[this.fromVar.match(SIMPLENUM),this.toVar.match(SIMPLENUM)],this.fromNum=_ref4[0],this.toNum=_ref4[1];parts=[];if(this.from!==this.fromVar){parts.push(this.from)}return this.to!==this.toVar?parts.push(this.to):undefined};Range.prototype.compileNode=function(o){var compare,idx,incr,intro,step,stepPart,vars;this.compileVariables(o);if(!o.index){return this.compileArray(o)}if(this.fromNum&&this.toNum){return this.compileSimple(o)}idx=del(o,"index");step=del(o,"step");vars=(""+idx+" = "+(this.from))+(this.to!==this.toVar?(", "+(this.to)):"");intro=("("+(this.fromVar)+" <= "+(this.toVar)+" ? "+idx);compare=(""+intro+" <"+(this.equals)+" "+(this.toVar)+" : "+idx+" >"+(this.equals)+" "+(this.toVar)+")");stepPart=step?step.compile(o):"1";incr=step?(""+idx+" += "+stepPart):(""+intro+" += "+stepPart+" : "+idx+" -= "+stepPart+")");return""+vars+"; "+compare+"; "+incr};Range.prototype.compileSimple=function(o){var _ref2,from,idx,step,to;_ref2=[+this.fromNum,+this.toNum],from=_ref2[0],to=_ref2[1];idx=del(o,"index");step=del(o,"step");step&&(step=(""+idx+" += "+(step.compile(o))));return from<=to?(""+idx+" = "+from+"; "+idx+" <"+(this.equals)+" "+to+"; "+(step||(""+idx+"++"))):(""+idx+" = "+from+"; "+idx+" >"+(this.equals)+" "+to+"; "+(step||(""+idx+"--")))};Range.prototype.compileArray=function(o){var _i,_ref2,_ref3,_result,body,clause,i,idt,post,pre,range,result,vars;if(this.fromNum&&this.toNum&&(Math.abs(this.fromNum-this.toNum)<=20)){range=(function(){_result=[];for(var _i=_ref2=+this.fromNum,_ref3=+this.toNum;_ref2<=_ref3?_i<=_ref3:_i>=_ref3;_ref2<=_ref3?_i+=1:_i-=1){_result.push(_i)}return _result}).call(this);if(this.exclusive){range.pop()}return("["+(range.join(", "))+"]")}idt=this.idt(1);i=o.scope.freeVariable("i");result=o.scope.freeVariable("result");pre=("\n"+idt+result+" = [];");if(this.fromNum&&this.toNum){o.index=i;body=this.compileSimple(o)}else{vars=(""+i+" = "+(this.from))+(this.to!==this.toVar?(", "+(this.to)):"");clause=(""+(this.fromVar)+" <= "+(this.toVar)+" ?");body=("var "+vars+"; "+clause+" "+i+" <"+(this.equals)+" "+(this.toVar)+" : "+i+" >"+(this.equals)+" "+(this.toVar)+"; "+clause+" "+i+" += 1 : "+i+" -= 1")}post=("{ "+result+".push("+i+"); }\n"+idt+"return "+result+";\n"+(o.indent));return"(function() {"+pre+"\n"+idt+"for ("+body+")"+post+"}).call(this)"};return Range})();exports.Slice=(function(){Slice=(function(){function Slice(_arg){this.range=_arg;Slice.__super__.constructor.call(this);return this}return Slice})();__extends(Slice,Base);Slice.prototype.children=["range"];Slice.prototype.compileNode=function(o){var from,to;from=this.range.from?this.range.from.compile(o):"0";to=this.range.to?this.range.to.compile(o):"";to+=(!to||this.range.exclusive?"":" + 1");if(to){to=", "+to}return".slice("+from+to+")"};return Slice})();exports.ObjectLiteral=(function(){ObjectLiteral=(function(){function ObjectLiteral(props){ObjectLiteral.__super__.constructor.call(this);this.objects=(this.properties=props||[]);return this}return ObjectLiteral})();__extends(ObjectLiteral,Base);ObjectLiteral.prototype.children=["properties"];ObjectLiteral.prototype.compileNode=function(o){var _i,_len,_ref2,_result,i,indent,join,lastNoncom,nonComments,obj,prop,props,top;top=del(o,"top");o.indent=this.idt(1);nonComments=(function(){_result=[];for(_i=0,_len=(_ref2=this.properties).length;_i<_len;_i++){prop=_ref2[_i];if(!(prop instanceof Comment)){_result.push(prop)}}return _result}).call(this);lastNoncom=last(nonComments);props=(function(){_result=[];for(i=0,_len=(_ref2=this.properties).length;i<_len;i++){prop=_ref2[i];_result.push((function(){join=i===this.properties.length-1?"":(prop===lastNoncom||prop instanceof Comment?"\n":",\n");indent=prop instanceof Comment?"":this.idt(1);if(prop instanceof Value&&prop.tags["this"]){prop=new Assign(prop.properties[0].name,prop,"object")}else{if(!(prop instanceof Assign)&&!(prop instanceof Comment)){prop=new Assign(prop,prop,"object")}}return indent+prop.compile(o)+join}).call(this))}return _result}).call(this);props=props.join("");obj=("{"+(props?"\n"+props+"\n"+this.idt():"")+"}");return this.tags.front?("("+obj+")"):obj};ObjectLiteral.prototype.assigns=function(name){var _i,_len,_ref2,prop;for(_i=0,_len=(_ref2=this.properties).length;_i<_len;_i++){prop=_ref2[_i];if(prop.assigns(name)){return true}}return false};return ObjectLiteral})();exports.ArrayLiteral=(function(){ArrayLiteral=(function(){function ArrayLiteral(_arg){this.objects=_arg;ArrayLiteral.__super__.constructor.call(this);this.objects||(this.objects=[]);return this}return ArrayLiteral})();__extends(ArrayLiteral,Base);ArrayLiteral.prototype.children=["objects"];ArrayLiteral.prototype.compileSplatLiteral=function(o){return Splat.compileSplattedArray(this.objects,o)};ArrayLiteral.prototype.compileNode=function(o){var _i,_len,_len2,_ref2,_ref3,code,i,obj,objects;o.indent=this.idt(1);for(_i=0,_len=(_ref2=this.objects).length;_i<_len;_i++){obj=_ref2[_i];if(obj instanceof Splat){return this.compileSplatLiteral(o)}}objects=[];for(i=0,_len2=(_ref3=this.objects).length;i<_len2;i++){obj=_ref3[i];code=obj.compile(o);objects.push(obj instanceof Comment?("\n"+code+"\n"+(o.indent)):(i===this.objects.length-1?code:code+", "))}objects=objects.join("");return 0<objects.indexOf("\n")?("[\n"+(o.indent)+objects+"\n"+(this.tab)+"]"):("["+objects+"]")};ArrayLiteral.prototype.assigns=function(name){var _i,_len,_ref2,obj;for(_i=0,_len=(_ref2=this.objects).length;_i<_len;_i++){obj=_ref2[_i];if(obj.assigns(name)){return true}}return false};return ArrayLiteral})();exports.Class=(function(){Class=(function(){function Class(variable,_arg,_arg2){this.properties=_arg2;this.parent=_arg;Class.__super__.constructor.call(this);this.variable=variable==="__temp__"?new Literal(variable):variable;this.properties||(this.properties=[]);this.returns=false;return this}return Class})();__extends(Class,Base);Class.prototype.children=["variable","parent","properties"];Class.prototype.isStatement=YES;Class.prototype.makeReturn=function(){this.returns=true;return this};Class.prototype.compileNode=function(o){var _i,_len,_ref2,_ref3,_ref4,access,applied,apply,className,constScope,construct,constructor,extension,func,me,pname,prop,props,pvar,ref,returns,val,variable;variable=this.variable;if(variable.value==="__temp__"){variable=new Literal(o.scope.freeVariable("ctor"))}extension=this.parent&&new Extends(variable,this.parent);props=new Expressions;o.top=true;me=null;className=variable.compile(o);constScope=null;if(this.parent){applied=new Value(this.parent,[new Accessor(new Literal("apply"))]);constructor=new Code([],new Expressions([new Call(applied,[new Literal("this"),new Literal("arguments")])]))}else{constructor=new Code}for(_i=0,_len=(_ref2=this.properties).length;_i<_len;_i++){prop=_ref2[_i];_ref3=[prop.variable,prop.value],pvar=_ref3[0],func=_ref3[1];if(pvar&&pvar.base.value==="constructor"){if(!(func instanceof Code)){_ref4=func.compileReference(o),func=_ref4[0],ref=_ref4[1];if(func!==ref){props.push(func)}apply=new Call(new Value(ref,[new Accessor(new Literal("apply"))]),[new Literal("this"),new Literal("arguments")]);func=new Code([],new Expressions([apply]))}if(func.bound){throw new Error("cannot define a constructor as a bound function.")}func.name=className;func.body.push(new Return(new Literal("this")));variable=new Value(variable);variable.namespaced=0<className.indexOf(".");constructor=func;continue}if(func instanceof Code&&func.bound){if(prop.context==="this"){func.context=className}else{func.bound=false;constScope||(constScope=new Scope(o.scope,constructor.body,constructor));me||(me=constScope.freeVariable("this"));pname=pvar.compile(o);if(constructor.body.empty()){constructor.body.push(new Return(new Literal("this")))}constructor.body.unshift(new Literal("this."+pname+" = function(){ return "+className+".prototype."+pname+".apply("+me+", arguments); }"))}}if(pvar){access=prop.context==="this"?pvar.base.properties[0]:new Accessor(pvar,"prototype");val=new Value(variable,[access]);prop=new Assign(val,func)}props.push(prop)}constructor.className=className.match(/[\w\d\$_]+$/);if(me){constructor.body.unshift(new Literal(""+me+" = this"))}construct=this.idt()+new Assign(variable,constructor).compile(merge(o,{sharedScope:constScope}))+";";props=!props.empty()?"\n"+props.compile(o):"";extension=extension?"\n"+this.idt()+extension.compile(o)+";":"";returns=this.returns?"\n"+new Return(variable).compile(o):"";return construct+extension+props+returns};return Class})();exports.Assign=(function(){Assign=(function(){function Assign(_arg,_arg2,_arg3){this.context=_arg3;this.value=_arg2;this.variable=_arg;Assign.__super__.constructor.call(this);return this}return Assign})();__extends(Assign,Base);Assign.prototype.METHOD_DEF=/^(?:(\S+)\.prototype\.)?([$A-Za-z_][$\w]*)$/;Assign.prototype.children=["variable","value"];Assign.prototype.topSensitive=YES;Assign.prototype.isValue=function(){return this.variable instanceof Value};Assign.prototype.compileNode=function(o){var ifn,isValue,match,name,stmt,top,val;if(isValue=this.isValue()){if(this.variable.isArray()||this.variable.isObject()){return this.compilePatternMatch(o)}if(this.variable.isSplice()){return this.compileSplice(o)}if(ifn=Value.unfoldSoak(o,this,"variable")){delete o.top;return ifn.compile(o)}}top=del(o,"top");stmt=del(o,"asStatement");name=this.variable.compile(o);if(this.value instanceof Code&&(match=this.METHOD_DEF.exec(name))){this.value.name=match[2];this.value.klass=match[1]}val=this.value.compile(o);if(this.context==="object"){return(""+name+": "+val)}if(!(isValue&&(this.variable.hasProperties()||this.variable.namespaced))){o.scope.find(name)}val=(""+name+" = "+val);if(stmt){return(""+(this.tab)+val+";")}return top||this.parenthetical?val:("("+val+")")};Assign.prototype.compilePatternMatch=function(o){var _len,_ref2,_ref3,accessClass,assigns,code,i,idx,isObject,obj,objects,olength,otop,ref,splat,top,val,valVar,value;if((value=this.value).isStatement(o)){value=Closure.wrap(value)}objects=this.variable.base.objects;if(!(olength=objects.length)){return value.compile(o)}isObject=this.variable.isObject();if(o.top&&olength===1&&!((obj=objects[0]) instanceof Splat)){if(obj instanceof Assign){_ref2=obj,idx=_ref2.variable.base,obj=_ref2.value}else{idx=isObject?(obj.tags["this"]?obj.properties[0].name:obj):new Literal(0)}if(!(value instanceof Value)){value=new Value(value)}accessClass=IDENTIFIER.test(idx.value)?Accessor:Index;value.properties.push(new accessClass(idx));return new Assign(obj,value).compile(o)}top=del(o,"top");otop=merge(o,{top:true});valVar=value.compile(o);assigns=[];splat=false;if(!IDENTIFIER.test(valVar)||this.variable.assigns(valVar)){assigns.push(""+(ref=o.scope.freeVariable("ref"))+" = "+valVar);valVar=ref}for(i=0,_len=objects.length;i<_len;i++){obj=objects[i];idx=i;if(isObject){if(obj instanceof Assign){_ref3=obj,idx=_ref3.variable.base,obj=_ref3.value}else{idx=obj.tags["this"]?obj.properties[0].name:obj}}if(!(obj instanceof Value||obj instanceof Splat)){throw new Error("pattern matching must use only identifiers on the left-hand side.")}accessClass=isObject&&IDENTIFIER.test(idx.value)?Accessor:Index;if(!splat&&obj instanceof Splat){val=new Literal(obj.compileValue(o,valVar,i,olength-i-1));splat=true}else{if(typeof idx!=="object"){idx=new Literal(splat?(""+valVar+".length - "+(olength-idx)):idx)}val=new Value(new Literal(valVar),[new accessClass(idx)])}assigns.push(new Assign(obj,val).compile(otop))}if(!top){assigns.push(valVar)}code=assigns.join(", ");return top||this.parenthetical?code:("("+code+")")};Assign.prototype.compileSplice=function(o){var from,name,plus,range,ref,to,val;range=this.variable.properties.pop().range;name=this.variable.compile(o);plus=range.exclusive?"":" + 1";from=range.from?range.from.compile(o):"0";to=range.to?range.to.compile(o)+" - "+from+plus:(""+name+".length");ref=o.scope.freeVariable("ref");val=this.value.compile(o);return"([].splice.apply("+name+", ["+from+", "+to+"].concat("+ref+" = "+val+")), "+ref+")"};Assign.prototype.assigns=function(name){return this[this.context==="object"?"value":"variable"].assigns(name)};return Assign})();exports.Code=(function(){Code=(function(){function Code(_arg,_arg2,tag){this.body=_arg2;this.params=_arg;Code.__super__.constructor.call(this);this.params||(this.params=[]);this.body||(this.body=new Expressions);this.bound=tag==="boundfunc";if(this.bound){this.context="this"}return this}return Code})();__extends(Code,Base);Code.prototype.children=["params","body"];Code.prototype.compileNode=function(o){var _i,_len,_len2,_ref2,_ref3,_result,close,code,empty,func,i,open,param,params,sharedScope,splat,top,value;sharedScope=del(o,"sharedScope");top=del(o,"top");o.scope=sharedScope||new Scope(o.scope,this.body,this);o.top=true;o.indent=this.idt(1);empty=this.body.expressions.length===0;delete o.bare;delete o.globals;splat=undefined;params=[];for(i=0,_len=(_ref2=this.params).length;i<_len;i++){param=_ref2[i];if(splat){if(param.attach){param.assign=new Assign(new Value(new Literal("this"),[new Accessor(param.value)]));this.body.expressions.splice(splat.index+1,0,param.assign)}splat.trailings.push(param)}else{if(param.attach){value=param.value;_ref3=[new Literal(o.scope.freeVariable("arg")),param.splat],param=_ref3[0],param.splat=_ref3[1];this.body.unshift(new Assign(new Value(new Literal("this"),[new Accessor(value)]),param))}if(param.splat){splat=new Splat(param.value);splat.index=i;splat.trailings=[];splat.arglength=this.params.length;this.body.unshift(splat)}else{params.push(param)}}}o.scope.startLevel();params=(function(){_result=[];for(_i=0,_len2=params.length;_i<_len2;_i++){param=params[_i];_result.push(param.compile(o))}return _result})();if(!empty){this.body.makeReturn()}for(_i=0,_len2=params.length;_i<_len2;_i++){param=params[_i];(o.scope.parameter(param))}if(this.className){o.indent=this.idt(2)}code=this.body.expressions.length?("\n"+(this.body.compileWithDeclarations(o))+"\n"):"";open=this.className?("(function() {\n"+(this.idt(1))+"function "+(this.className)+"("):"function(";close=this.className?(""+(code&&this.idt(1))+"};\n"+(this.idt(1))+"return "+(this.className)+";\n"+(this.tab)+"})()"):(""+(code&&this.tab)+"}");func=(""+open+(params.join(", "))+") {"+code+close);o.scope.endLevel();if(this.bound){return(""+(utility("bind"))+"("+func+", "+(this.context)+")")}return this.tags.front?("("+func+")"):func};Code.prototype.traverseChildren=function(crossScope,func){return crossScope?Code.__super__.traverseChildren.call(this,crossScope,func):undefined};return Code})();exports.Param=(function(){Param=(function(){function Param(_arg,_arg2,_arg3){this.splat=_arg3;this.attach=_arg2;this.name=_arg;Param.__super__.constructor.call(this);this.value=new Literal(this.name);return this}return Param})();__extends(Param,Base);Param.prototype.children=["name"];Param.prototype.compileNode=function(o){return this.value.compile(o)};Param.prototype.toString=function(){var name;name=this.name;if(this.attach){name="@"+name}if(this.splat){name+="..."}return new Literal(name).toString()};return Param})();exports.Splat=(function(){Splat=(function(){function Splat(name){Splat.__super__.constructor.call(this);this.name=name.compile?name:new Literal(name);return this}return Splat})();__extends(Splat,Base);Splat.prototype.children=["name"];Splat.prototype.assigns=function(name){return this.name.assigns(name)};Splat.prototype.compileNode=function(o){return(this.index!=null)?this.compileParam(o):this.name.compile(o)};Splat.prototype.compileParam=function(o){var _len,_ref2,assign,end,idx,len,name,pos,trailing,variadic;name=this.name.compile(o);o.scope.find(name);end="";if(this.trailings.length){len=o.scope.freeVariable("len");o.scope.assign(len,"arguments.length");variadic=o.scope.freeVariable("result");o.scope.assign(variadic,len+" >= "+this.arglength);end=this.trailings.length?(", "+len+" - "+(this.trailings.length)):undefined;for(idx=0,_len=(_ref2=this.trailings).length;idx<_len;idx++){trailing=_ref2[idx];if(trailing.attach){assign=trailing.assign;trailing=new Literal(o.scope.freeVariable("arg"));assign.value=trailing}pos=this.trailings.length-idx;o.scope.assign(trailing.compile(o),"arguments["+variadic+" ? "+len+" - "+pos+" : "+(this.index+idx)+"]")}}return""+name+" = "+(utility("slice"))+".call(arguments, "+(this.index)+end+")"};Splat.prototype.compileValue=function(o,name,index,trailings){var trail;trail=trailings?(", "+name+".length - "+trailings):"";return""+(utility("slice"))+".call("+name+", "+index+trail+")"};Splat.compileSplattedArray=function(list,o){var _len,arg,args,code,end,i,prev;args=[];end=-1;for(i=0,_len=list.length;i<_len;i++){arg=list[i];code=arg.compile(o);prev=args[end];if(!(arg instanceof Splat)){if(prev&&starts(prev,"[")&&ends(prev,"]")){args[end]=(""+(prev.slice(0,-1))+", "+code+"]");continue}if(prev&&starts(prev,".concat([")&&ends(prev,"])")){args[end]=(""+(prev.slice(0,-2))+", "+code+"])");continue}code=("["+code+"]")}args[++end]=i===0?code:(".concat("+code+")")}return args.join("")};return Splat}).call(this);exports.While=(function(){While=(function(){function While(condition,opts){While.__super__.constructor.call(this);this.condition=((opts!=null)?opts.invert:undefined)?condition.invert():condition;this.guard=((opts!=null)?opts.guard:undefined);return this}return While})();__extends(While,Base);While.prototype.children=["condition","guard","body"];While.prototype.isStatement=YES;While.prototype.addBody=function(body){this.body=body;return this};While.prototype.makeReturn=function(){this.returns=true;return this};While.prototype.topSensitive=YES;While.prototype.compileNode=function(o){var cond,post,pre,rvar,set,top;top=del(o,"top")&&!this.returns;o.indent=this.idt(1);this.condition.parenthetical=true;cond=this.condition.compile(o);o.top=true;set="";if(!top){rvar=o.scope.freeVariable("result");set=(""+(this.tab)+rvar+" = [];\n");if(this.body){this.body=Push.wrap(rvar,this.body)}}pre=(""+set+(this.tab)+"while ("+cond+")");if(this.guard){this.body=Expressions.wrap([new If(this.guard,this.body)])}if(this.returns){post="\n"+new Return(new Literal(rvar)).compile(merge(o,{indent:this.idt()}))}else{post=""}return""+pre+" {\n"+(this.body.compile(o))+"\n"+(this.tab)+"}"+post};return While})();exports.Op=(function(){Op=(function(){function Op(op,first,second,flip){if(op==="new"){if(first instanceof Call){return first.newInstance()}if(first instanceof Code&&first.bound){first=new Parens(first)}}Op.__super__.constructor.call(this);this.operator=this.CONVERSIONS[op]||op;(this.first=first).tags.operation=true;if(second){(this.second=second).tags.operation=true}this.flip=!!flip;return this}return Op})();__extends(Op,Base);Op.prototype.CONVERSIONS={"==":"===","!=":"!==",of:"in"};Op.prototype.INVERSIONS={"!==":"===","===":"!=="};Op.prototype.CHAINABLE=["<",">",">=","<=","===","!=="];Op.prototype.ASSIGNMENT=["||=","&&=","?="];Op.prototype.PREFIX_OPERATORS=["new","typeof","delete"];Op.prototype.children=["first","second"];Op.prototype.isUnary=function(){return !this.second};Op.prototype.isComplex=function(){return this.operator!=="!"||this.first.isComplex()};Op.prototype.isMutator=function(){var _ref2;return ends(this.operator,"=")&&!((_ref2=this.operator)==="==="||_ref2==="!==")};Op.prototype.isChainable=function(){return include(this.CHAINABLE,this.operator)};Op.prototype.invert=function(){var _ref2;if(((_ref2=this.operator)==="==="||_ref2==="!==")){this.operator=this.INVERSIONS[this.operator];return this}else{return this.second?new Parens(this).invert():Op.__super__.invert.call(this)}};Op.prototype.toString=function(idt){return Op.__super__.toString.call(this,idt,this.constructor.name+" "+this.operator)};Op.prototype.compileNode=function(o){if(this.second){this.first.tags.front=this.tags.front}if(this.isChainable()&&this.first.unwrap() instanceof Op&&this.first.unwrap().isChainable()){return this.compileChain(o)}if(include(this.ASSIGNMENT,this.operator)){return this.compileAssignment(o)}if(this.isUnary()){return this.compileUnary(o)}if(this.operator==="?"){return this.compileExistence(o)}if(this.first instanceof Op&&this.first.isMutator()){this.first=new Parens(this.first)}if(this.second instanceof Op&&this.second.isMutator()){this.second=new Parens(this.second)}return[this.first.compile(o),this.operator,this.second.compile(o)].join(" ")};Op.prototype.compileChain=function(o){var _ref2,_ref3,first,second,shared;shared=this.first.unwrap().second;_ref2=shared.compileReference(o),this.first.second=_ref2[0],shared=_ref2[1];_ref3=[this.first.compile(o),this.second.compile(o),shared.compile(o)],first=_ref3[0],second=_ref3[1],shared=_ref3[2];return"("+first+") && ("+shared+" "+(this.operator)+" "+second+")"};Op.prototype.compileAssignment=function(o){var _ref2,left,rite;_ref2=this.first.cacheReference(o),left=_ref2[0],rite=_ref2[1];rite=new Assign(rite,this.second);return new Op(this.operator.slice(0,-1),left,rite).compile(o)};Op.prototype.compileExistence=function(o){var fst,ref;if(this.first.isComplex()){ref=o.scope.freeVariable("ref");fst=new Parens(new Assign(new Literal(ref),this.first))}else{fst=this.first;ref=fst.compile(o)}return new Existence(fst).compile(o)+(" ? "+ref+" : "+(this.second.compile(o)))};Op.prototype.compileUnary=function(o){var parts,space;space=include(this.PREFIX_OPERATORS,this.operator)?" ":"";parts=[this.operator,space,this.first.compile(o)];return(this.flip?parts.reverse():parts).join("")};return Op})();exports.In=(function(){In=(function(){function In(_arg,_arg2){this.array=_arg2;this.object=_arg;In.__super__.constructor.call(this);return this}return In})();__extends(In,Base);In.prototype.children=["object","array"];In.prototype.isArray=function(){return this.array instanceof Value&&this.array.isArray()};In.prototype.compileNode=function(o){var _ref2;_ref2=this.object.compileReference(o,{precompile:true}),this.obj1=_ref2[0],this.obj2=_ref2[1];return this.isArray()?this.compileOrTest(o):this.compileLoopTest(o)};In.prototype.compileOrTest=function(o){var _len,_ref2,_result,i,item,tests;tests=(function(){_result=[];for(i=0,_len=(_ref2=this.array.base.objects).length;i<_len;i++){item=_ref2[i];_result.push(""+(i?this.obj2:this.obj1)+" === "+(item.compile(o)))}return _result}).call(this);return"("+(tests.join(" || "))+")"};In.prototype.compileLoopTest=function(o){var _ref2,_ref3,i,l,prefix;_ref2=this.array.compileReference(o,{precompile:true}),this.arr1=_ref2[0],this.arr2=_ref2[1];_ref3=[o.scope.freeVariable("i"),o.scope.freeVariable("len")],i=_ref3[0],l=_ref3[1];prefix=this.obj1!==this.obj2?this.obj1+"; ":"";return"(function(){ "+prefix+"for (var "+i+"=0, "+l+"="+(this.arr1)+".length; "+i+"<"+l+"; "+i+"++) { if ("+(this.arr2)+"["+i+"] === "+(this.obj2)+") return true; } return false; }).call(this)"};return In})();exports.Try=(function(){Try=(function(){function Try(_arg,_arg2,_arg3,_arg4){this.ensure=_arg4;this.recovery=_arg3;this.error=_arg2;this.attempt=_arg;Try.__super__.constructor.call(this);return this}return Try})();__extends(Try,Base);Try.prototype.children=["attempt","recovery","ensure"];Try.prototype.isStatement=YES;Try.prototype.makeReturn=function(){if(this.attempt){this.attempt=this.attempt.makeReturn()}if(this.recovery){this.recovery=this.recovery.makeReturn()}return this};Try.prototype.compileNode=function(o){var attemptPart,catchPart,errorPart,finallyPart;o.indent=this.idt(1);o.top=true;attemptPart=this.attempt.compile(o);errorPart=this.error?(" ("+(this.error.compile(o))+") "):" ";catchPart=this.recovery?(" catch"+errorPart+"{\n"+(this.recovery.compile(o))+"\n"+(this.tab)+"}"):(!(this.ensure||this.recovery)?" catch (_e) {}":"");finallyPart=(this.ensure||"")&&" finally {\n"+this.ensure.compile(merge(o))+("\n"+(this.tab)+"}");return""+(this.tab)+"try {\n"+attemptPart+"\n"+(this.tab)+"}"+catchPart+finallyPart};return Try})();exports.Throw=(function(){Throw=(function(){function Throw(_arg){this.expression=_arg;Throw.__super__.constructor.call(this);return this}return Throw})();__extends(Throw,Base);Throw.prototype.children=["expression"];Throw.prototype.isStatement=YES;Throw.prototype.makeReturn=THIS;Throw.prototype.compileNode=function(o){return""+(this.tab)+"throw "+(this.expression.compile(o))+";"};return Throw})();exports.Existence=(function(){Existence=(function(){function Existence(_arg){this.expression=_arg;Existence.__super__.constructor.call(this);return this}return Existence})();__extends(Existence,Base);Existence.prototype.children=["expression"];Existence.prototype.compileNode=function(o){var code;code=this.expression.compile(o);code=IDENTIFIER.test(code)&&!o.scope.check(code)?("typeof "+code+' !== "undefined" && '+code+" !== null"):(""+code+" != null");return this.parenthetical?code:("("+code+")")};return Existence})();exports.Parens=(function(){Parens=(function(){function Parens(_arg){this.expression=_arg;Parens.__super__.constructor.call(this);return this}return Parens})();__extends(Parens,Base);Parens.prototype.children=["expression"];Parens.prototype.isStatement=function(o){return this.expression.isStatement(o)};Parens.prototype.isComplex=function(){return this.expression.isComplex()};Parens.prototype.topSensitive=YES;Parens.prototype.makeReturn=function(){return this.expression.makeReturn()};Parens.prototype.compileNode=function(o){var code,top;top=del(o,"top");this.expression.parenthetical=true;code=this.expression.compile(o);if(top&&this.expression.isPureStatement(o)){return code}if(this.parenthetical||this.isStatement(o)){return top?this.tab+code+";":code}return"("+code+")"};return Parens})();exports.For=(function(){For=(function(){function For(_arg,source,_arg2,_arg3){var _ref2;this.index=_arg3;this.name=_arg2;this.body=_arg;For.__super__.constructor.call(this);this.source=source.source,this.guard=source.guard,this.step=source.step;this.raw=!!source.raw;this.object=!!source.object;if(this.object){_ref2=[this.index,this.name],this.name=_ref2[0],this.index=_ref2[1]}this.pattern=this.name instanceof Value;if(this.index instanceof Value){throw new Error("index cannot be a pattern matching expression")}this.returns=false;return this}return For})();__extends(For,Base);For.prototype.children=["body","source","guard"];For.prototype.isStatement=YES;For.prototype.topSensitive=YES;For.prototype.makeReturn=function(){this.returns=true;return this};For.prototype.compileReturnValue=function(val,o){if(this.returns){return"\n"+new Return(new Literal(val)).compile(o)}if(val){return"\n"+val}return""};For.prototype.compileNode=function(o){var body,codeInBody,forPart,guardPart,idt1,index,ivar,lvar,name,namePart,range,ref,resultPart,returnResult,rvar,scope,source,sourcePart,stepPart,svar,topLevel,varPart,vars;topLevel=del(o,"top")&&!this.returns;range=this.source instanceof Value&&this.source.base instanceof Range&&!this.source.properties.length;source=range?this.source.base:this.source;codeInBody=this.body.contains(function(node){return node instanceof Code});scope=o.scope;name=this.name&&this.name.compile(o);index=this.index&&this.index.compile(o);if(name&&!this.pattern&&(range||!codeInBody)){scope.find(name,{immediate:true})}if(index){scope.find(index,{immediate:true})}if(!topLevel){rvar=scope.freeVariable("result")}ivar=range?name:index;if(!ivar||codeInBody){ivar=scope.freeVariable("i")}varPart="";guardPart="";body=Expressions.wrap([this.body]);idt1=this.idt(1);if(range){forPart=source.compile(merge(o,{index:ivar,step:this.step}))}else{svar=(sourcePart=this.source.compile(o));if((name||!this.raw)&&!(IDENTIFIER.test(svar)&&scope.check(svar,{immediate:true}))){sourcePart=(""+(ref=scope.freeVariable("ref"))+" = "+svar);if(!this.object){sourcePart=("("+sourcePart+")")}svar=ref}namePart=this.pattern?new Assign(this.name,new Literal(""+svar+"["+ivar+"]")).compile(merge(o,{top:true})):(name?(""+name+" = "+svar+"["+ivar+"]"):undefined);if(!this.object){lvar=scope.freeVariable("len");stepPart=this.step?(""+ivar+" += "+(this.step.compile(o))):(""+ivar+"++");forPart=(""+ivar+" = 0, "+lvar+" = "+sourcePart+".length; "+ivar+" < "+lvar+"; "+stepPart)}}resultPart=rvar?(""+(this.tab)+rvar+" = [];\n"):"";returnResult=this.compileReturnValue(rvar,o);if(!topLevel){body=Push.wrap(rvar,body)}if(this.guard){body=Expressions.wrap([new If(this.guard,body)])}if(codeInBody){if(range){body.unshift(new Literal("var "+name+" = "+ivar))}if(namePart){body.unshift(new Literal("var "+namePart))}if(index){body.unshift(new Literal("var "+index+" = "+ivar))}body=Closure.wrap(body,true)}else{if(namePart){varPart=(""+idt1+namePart+";\n")}}if(this.object){forPart=(""+ivar+" in "+sourcePart);if(!this.raw){guardPart=("\n"+idt1+"if (!"+(utility("hasProp"))+".call("+svar+", "+ivar+")) continue;")}}body=body.compile(merge(o,{indent:idt1,top:true}));vars=range?name:(""+name+", "+ivar);return""+resultPart+(this.tab)+"for ("+forPart+") {"+guardPart+"\n"+varPart+body+"\n"+(this.tab)+"}"+returnResult};return For})();exports.Switch=(function(){Switch=(function(){function Switch(_arg,_arg2,_arg3){this.otherwise=_arg3;this.cases=_arg2;this.subject=_arg;Switch.__super__.constructor.call(this);this.tags.subjectless=!this.subject;this.subject||(this.subject=new Literal("true"));return this}return Switch})();__extends(Switch,Base);Switch.prototype.children=["subject","cases","otherwise"];Switch.prototype.isStatement=YES;Switch.prototype.makeReturn=function(){var _i,_len,_ref2,pair;for(_i=0,_len=(_ref2=this.cases).length;_i<_len;_i++){pair=_ref2[_i];pair[1].makeReturn()}if(this.otherwise){this.otherwise.makeReturn()}return this};Switch.prototype.compileNode=function(o){var _i,_j,_len,_len2,_ref2,_ref3,block,code,condition,conditions,exprs,idt,pair;idt=(o.indent=this.idt(2));o.top=true;code=(""+(this.tab)+"switch ("+(this.subject.compile(o))+") {");for(_i=0,_len=(_ref2=this.cases).length;_i<_len;_i++){pair=_ref2[_i];conditions=pair[0],block=pair[1];exprs=block.expressions;for(_j=0,_len2=(_ref3=flatten([conditions])).length;_j<_len2;_j++){condition=_ref3[_j];if(this.tags.subjectless){condition=new Op("!!",new Parens(condition))}code+=("\n"+(this.idt(1))+"case "+(condition.compile(o))+":")}code+=("\n"+(block.compile(o)));if(!(last(exprs) instanceof Return)){code+=("\n"+idt+"break;")}}if(this.otherwise){code+=("\n"+(this.idt(1))+"default:\n"+(this.otherwise.compile(o)))}code+=("\n"+(this.tab)+"}");return code};return Switch})();exports.If=(function(){If=(function(){function If(condition,_arg,_arg2){this.tags=_arg2;this.body=_arg;this.tags||(this.tags={});this.condition=this.tags.invert?condition.invert():condition;this.elseBody=null;this.isChain=false;return this}return If})();__extends(If,Base);If.prototype.children=["condition","body","elseBody","assigner"];If.prototype.topSensitive=YES;If.prototype.bodyNode=function(){var _ref2;return(((_ref2=this.body)!=null)?_ref2.unwrap():undefined)};If.prototype.elseBodyNode=function(){var _ref2;return(((_ref2=this.elseBody)!=null)?_ref2.unwrap():undefined)};If.prototype.addElse=function(elseBody){if(this.isChain){this.elseBodyNode().addElse(elseBody)}else{this.isChain=elseBody instanceof If;this.elseBody=this.ensureExpressions(elseBody)}return this};If.prototype.isStatement=function(o){var _ref2;return this.statement||(this.statement=((o!=null)?o.top:undefined)||this.bodyNode().isStatement(o)||(((_ref2=this.elseBodyNode())!=null)?_ref2.isStatement(o):undefined))};If.prototype.compileCondition=function(o){this.condition.parenthetical=true;return this.condition.compile(o)};If.prototype.compileNode=function(o){return this.isStatement(o)?this.compileStatement(o):this.compileExpression(o)};If.prototype.makeReturn=function(){if(this.isStatement()){this.body&&(this.body=this.ensureExpressions(this.body.makeReturn()));this.elseBody&&(this.elseBody=this.ensureExpressions(this.elseBody.makeReturn()));return this}else{return new Return(this)}};If.prototype.ensureExpressions=function(node){return node instanceof Expressions?node:new Expressions([node])};If.prototype.compileStatement=function(o){var child,condO,ifPart,top;top=del(o,"top");child=del(o,"chainChild");condO=merge(o);o.indent=this.idt(1);o.top=true;ifPart=("if ("+(this.compileCondition(condO))+") {\n"+(this.body.compile(o))+"\n"+(this.tab)+"}");if(!child){ifPart=this.tab+ifPart}if(!this.elseBody){return ifPart}return ifPart+(this.isChain?" else "+this.elseBodyNode().compile(merge(o,{indent:this.tab,chainChild:true})):(" else {\n"+(this.elseBody.compile(o))+"\n"+(this.tab)+"}"))};If.prototype.compileExpression=function(o){var code,elsePart,ifPart;this.bodyNode().tags.operation=(this.condition.tags.operation=true);if(this.elseBody){this.elseBodyNode().tags.operation=true}ifPart=this.condition.compile(o)+" ? "+this.bodyNode().compile(o);elsePart=this.elseBody?this.elseBodyNode().compile(o):"undefined";code=(""+ifPart+" : "+elsePart);return this.tags.operation?("("+code+")"):code};return If})();Push={wrap:function(name,expressions){if(expressions.empty()||expressions.containsPureStatement()){return expressions}return Expressions.wrap([new Call(new Value(new Literal(name),[new Accessor(new Literal("push"))]),[expressions.unwrap()])])}};Closure={wrap:function(expressions,statement){var args,call,func,mentionsArgs,meth;if(expressions.containsPureStatement()){return expressions}func=new Parens(new Code([],Expressions.wrap([expressions])));args=[];if((mentionsArgs=expressions.contains(this.literalArgs))||(expressions.contains(this.literalThis))){meth=new Literal(mentionsArgs?"apply":"call");args=[new Literal("this")];if(mentionsArgs){args.push(new Literal("arguments"))}func=new Value(func,[new Accessor(meth)])}call=new Call(func,args);return statement?Expressions.wrap([call]):call},literalArgs:function(node){return node instanceof Literal&&node.value==="arguments"},literalThis:function(node){return node instanceof Literal&&node.value==="this"||node instanceof Code&&node.bound}};UTILITIES={"extends":'function(child, parent) {\n  function ctor() { this.constructor = child; }\n  ctor.prototype = parent.prototype;\n  child.prototype = new ctor;\n  if (typeof parent.extended === "function") parent.extended(child);\n  child.__super__ = parent.prototype;\n}',bind:"function(func, context) {\n  return function() { return func.apply(context, arguments); };\n}",hasProp:"Object.prototype.hasOwnProperty",slice:"Array.prototype.slice"};TAB="  ";TRAILING_WHITESPACE=/[ \t]+$/gm;IDENTIFIER=/^[$A-Za-z_][$\w]*$/;NUMBER=/^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?$/i;SIMPLENUM=/^[+-]?\d+$/;IS_STRING=/^['"]/;utility=function(name){var ref;ref=("__"+name);Scope.root.assign(ref,UTILITIES[name]);return ref}}).call(this)};require["./coffee-script"]=new function(){var exports=this;(function(){var Lexer,compile,fs,lexer,parser,path;path=require("path");Lexer=require("./lexer").Lexer;parser=require("./parser").parser;if(require.extensions){fs=require("fs");require.extensions[".coffee"]=function(module,filename){var content;content=compile(fs.readFileSync(filename,"utf8"));return module._compile(content,filename)}}else{if(require.registerExtension){require.registerExtension(".coffee",function(content){return compile(content)})}}exports.VERSION="0.9.4";exports.helpers=require("./helpers");exports.compile=(compile=function(code,options){options||(options={});try{return(parser.parse(lexer.tokenize(code))).compile(options)}catch(err){if(options.fileName){err.message=("In "+(options.fileName)+", "+(err.message))}throw err}});exports.tokens=function(code,options){return lexer.tokenize(code,options)};exports.nodes=function(code,options){return parser.parse(lexer.tokenize(code,options))};exports.run=function(code,options){var root;root=module;while(root.parent){root=root.parent}root.filename=options.fileName;if(root.moduleCache){root.moduleCache={}}return path.extname(root.filename)!==".coffee"||require.extensions?root._compile(exports.compile(code,options),root.filename):root._compile(code,root.filename)};exports.eval=function(code,options){var __dirname,__filename;__filename=options.fileName;__dirname=path.dirname(__filename);return eval(exports.compile(code,options))};lexer=new Lexer;parser.lexer={lex:function(){var token;token=this.tokens[this.pos]||[""];this.pos+=1;this.yylineno=token[2];this.yytext=token[1];return token[0]},setInput:function(tokens){this.tokens=tokens;return(this.pos=0)},upcomingInput:function(){return""}};parser.yy=require("./nodes")}).call(this)};require["./browser"]=new function(){var exports=this;(function(){var CoffeeScript,runScripts;CoffeeScript=require("./coffee-script");CoffeeScript.require=require;CoffeeScript.eval=function(code,options){return eval(CoffeeScript.compile(code,options))};CoffeeScript.run=function(code,options){((options!=null)?(options.bare=true):undefined);return Function(CoffeeScript.compile(code,options))()};if(!(typeof window!=="undefined"&&window!==null)){return}CoffeeScript.load=function(url,options){var xhr;xhr=new (window.ActiveXObject||XMLHttpRequest)("Microsoft.XMLHTTP");xhr.open("GET",url,true);if("overrideMimeType" in xhr){xhr.overrideMimeType("text/plain")}xhr.onreadystatechange=function(){return xhr.readyState===4?CoffeeScript.run(xhr.responseText,options):undefined};return xhr.send(null)};runScripts=function(){var _i,_len,_ref;for(_i=0,_len=(_ref=document.getElementsByTagName("script")).length;_i<_len;_i++){(function(){var script=_ref[_i];return script.type==="text/coffeescript"?(script.src?CoffeeScript.load(script.src):setTimeout(function(){return CoffeeScript.run(script.innerHTML)})):undefined})()}return null};if(window.addEventListener){addEventListener("DOMContentLoaded",runScripts,false)}else{attachEvent("onload",runScripts)}}).call(this)};return require["./coffee-script"]}();
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/extras/jsl.conf b/node/node_modules/jade/support/coffee-script/extras/jsl.conf
deleted file mode 100644 (file)
index fb41a61..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# JavaScriptLint configuration file for CoffeeScript.
-
-+no_return_value              # function {0} does not always return a value
-+duplicate_formal             # duplicate formal argument {0}
--equal_as_assign              # test for equality (==) mistyped as assignment (=)?{0}
-+var_hides_arg                # variable {0} hides argument
-+redeclared_var               # redeclaration of {0} {1}
--anon_no_return_value         # anonymous function does not always return a value
-+missing_semicolon            # missing semicolon
-+meaningless_block            # meaningless block; curly braces have no impact
--comma_separated_stmts        # multiple statements separated by commas (use semicolons?)
-+unreachable_code             # unreachable code
-+missing_break                # missing break statement
-+missing_break_for_last_case  # missing break statement for last case in switch
--comparison_type_conv         # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==)
--inc_dec_within_stmt          # increment (++) and decrement (--) operators used as part of greater statement
-+useless_void                 # use of the void type may be unnecessary (void is always undefined)
-+multiple_plus_minus          # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs
-+use_of_label                 # use of label
--block_without_braces         # block statement without curly braces
-+leading_decimal_point        # leading decimal point may indicate a number or an object member
-+trailing_decimal_point       # trailing decimal point may indicate a number or an object member
-+octal_number                 # leading zeros make an octal number
-+nested_comment               # nested comment
-+misplaced_regex              # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma
-+ambiguous_newline            # unexpected end of line; it is ambiguous whether these lines are part of the same statement
-+empty_statement              # empty statement or extra semicolon
--missing_option_explicit      # the "option explicit" control comment is missing
-+partial_option_explicit      # the "option explicit" control comment, if used, must be in the first script tag
-+dup_option_explicit          # duplicate "option explicit" control comment
-+useless_assign               # useless assignment
-+ambiguous_nested_stmt        # block statements containing block statements should use curly braces to resolve ambiguity
-+ambiguous_else_stmt          # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent)
--missing_default_case         # missing default case in switch statement
-+duplicate_case_in_switch     # duplicate case in switch statements
-+default_not_at_end           # the default case is not at the end of the switch statement
-+legacy_cc_not_understood     # couldn't understand control comment using /*@keyword@*/ syntax
-+jsl_cc_not_understood        # couldn't understand control comment using /*jsl:keyword*/ syntax
-+useless_comparison           # useless comparison; comparing identical expressions
-+with_statement               # with statement hides undeclared variables; use temporary variable instead
-+trailing_comma_in_array      # extra comma is not recommended in array initializers
-+assign_to_function_call      # assignment to a function call
-+parseint_missing_radix       # parseInt missing radix parameter
-+lambda_assign_requires_semicolon
diff --git a/node/node_modules/jade/support/coffee-script/index.html b/node/node_modules/jade/support/coffee-script/index.html
deleted file mode 100644 (file)
index 5b28b8b..0000000
+++ /dev/null
@@ -1,2225 +0,0 @@
-
-
-
-<!DOCTYPE html>
-<html>
-<head>
-  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
-  <title>CoffeeScript</title>
-  <link rel="stylesheet" type="text/css" href="documentation/css/docs.css" />
-  <link rel="stylesheet" type="text/css" href="documentation/css/idle.css" />
-  <link rel="shortcut icon" href="documentation/images/favicon.ico" />
-</head>
-<body class="minimized">
-
-  <div id="fadeout"></div>
-
-  <div id="flybar">
-    <a id="logo" href="#top"> </a>
-    <div class="navigation toc">
-      <div class="button">
-        Table of Contents
-      </div>
-      <div class="contents">
-        <a href="#overview">Mini Overview</a>
-        <a href="#installation">Installation and Usage</a>
-        <a href="#language">Language Reference</a>
-        <a href="#whitespace">Significant Whitespace</a>
-        <a href="#functions">Functions and Invocation</a>
-        <a href="#objects_and_arrays">Objects and Arrays</a>
-        <a href="#lexical_scope">Lexical Scoping and Variable Safety</a>
-        <a href="#conditionals">If, Else, Unless, and Conditional Assignment</a>
-        <a href="#aliases">Aliases</a>
-        <a href="#splats">Splats...</a>
-        <a href="#while">While, Until, and Loop</a>
-        <a href="#comprehensions">Comprehensions (Arrays, Objects, and Ranges)</a>
-        <a href="#slice_splice">Array Slicing and Splicing with Ranges</a>
-        <a href="#expressions">Everything is an Expression</a>
-        <a href="#existence">The Existential Operator</a>
-        <a href="#classes">Classes, Inheritance, and Super</a>
-        <a href="#pattern_matching">Pattern Matching</a>
-        <a href="#fat_arrow">Function Binding</a>
-        <a href="#embedded">Embedded JavaScript</a>
-        <a href="#switch">The Switch Statement</a>
-        <a href="#try">Try/Catch/Finally</a>
-        <a href="#comparisons">Chained Comparisons</a>
-        <a href="#interpolation">String and RegExp Interpolation</a>
-        <a href="#heredocs">Multiline Strings, Heredocs, and Block Comments</a>
-        <a href="#cake">Cake, and Cakefiles</a>
-        <a href="#scripts">"text/coffeescript" Script Tags</a>
-        <a href="#resources">Resources</a>
-        <a href="#webchat">Web Chat (IRC)</a>
-        <a href="#change_log">Change Log</a>
-      </div>
-    </div>
-    <div class="navigation try">
-      <div class="button">
-        Try CoffeeScript
-      </div>
-      <div class="contents repl_wrapper">
-        <div class="code">
-          <div id="repl_source_wrap"><textarea id="repl_source" rows="100">alert "Hello CoffeeScript!"</textarea></div>
-          <pre id="repl_results"></pre>
-          <button class="full_screen">go full screen</button>
-          <button class="minimize">minimize</button>
-          <button class="run">run</button>
-          <br class="clear" />
-        </div>
-      </div>
-    </div>
-    <div class="navigation annotated">
-      <div class="button">
-        Annotated Source
-      </div>
-      <div class="contents">
-        <a href="documentation/docs/grammar.html">Grammar Rules &mdash; src/grammar</a>
-        <a href="documentation/docs/lexer.html">Lexing Tokens &mdash; src/lexer</a>
-        <a href="documentation/docs/rewriter.html">The Rewriter &mdash; src/rewriter</a>
-        <a href="documentation/docs/nodes.html">The Syntax Tree &mdash; src/nodes</a>
-        <a href="documentation/docs/scope.html">Lexical Scope &mdash; src/scope</a>
-        <a href="documentation/docs/helpers.html">Helpers &amp; Utility Functions &mdash; src/helpers</a>
-        <a href="documentation/docs/coffee-script.html">The CoffeeScript Module &mdash; src/coffee-script</a>
-        <a href="documentation/docs/cake.html">Cake &amp; Cakefiles &mdash; src/cake</a>
-        <a href="documentation/docs/command.html">"coffee" Command-Line Utility &mdash; src/command</a>
-        <a href="documentation/docs/optparse.html">Option Parsing &mdash; src/optparse</a>
-        <a href="documentation/docs/repl.html">Interactive REPL &mdash; src/repl</a>
-      </div>
-    </div>
-    <div id="error" style="display:none;"></div>
-  </div>
-
-  <div class="container">
-    <span class="bookmark" id="top"></span>
-
-    <p>
-      CoffeeScript is a little language that compiles into JavaScript. Think
-      of it as JavaScript's less ostentatious kid brother &mdash; the same genes,
-      roughly the same height, but a different sense of style. Apart from a handful of
-      bonus goodies, statements in CoffeeScript correspond one-to-one with their
-      equivalent in JavaScript, it's just another way of saying it.
-    </p>
-
-    <p>
-      <b>Disclaimer:</b>
-      CoffeeScript is just for fun. Until it reaches 1.0, <i>there are no guarantees
-      that the syntax won't change between versions.</i> That said,
-      it compiles into clean JavaScript (the good parts) that can use existing
-      JavaScript libraries seamlessly, and passes through
-      <a href="http://www.jslint.com/">JSLint</a> without warnings. The compiled
-      output is pretty-printed and quite readable.
-    </p>
-
-    <p>
-      <b>Latest Version:</b>
-      <a href="http://github.com/jashkenas/coffee-script/tarball/0.9.4">0.9.4</a>
-    </p>
-
-    <h2>
-      <span id="overview" class="bookmark"></span>
-      Mini Overview
-    </h2>
-
-    <p><i>CoffeeScript on the left, compiled JavaScript output on the right.</i></p>
-
-    <div class='code'><pre class="idle"><span class="Comment"><span class="Comment">#</span> Assignment:</span>
-number   <span class="Keyword">=</span> <span class="Number">42</span>
-opposite <span class="Keyword">=</span> <span class="BuiltInConstant">true</span>
-
-<span class="Comment"><span class="Comment">#</span> Conditions:</span>
-number <span class="Keyword">=</span> <span class="Keyword">-</span><span class="Number">42</span> <span class="Keyword">if</span> opposite
-
-<span class="Comment"><span class="Comment">#</span> Functions:</span>
-<span class="FunctionName">square </span><span class="Keyword">=</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">x</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span> x <span class="Keyword">*</span> x
-
-<span class="Comment"><span class="Comment">#</span> Arrays:</span>
-list <span class="Keyword">=</span> [<span class="Number">1</span>, <span class="Number">2</span>, <span class="Number">3</span>, <span class="Number">4</span>, <span class="Number">5</span>]
-
-<span class="Comment"><span class="Comment">#</span> Objects:</span>
-math <span class="Keyword">=</span>
-  root:   Math.sqrt
-  square: square
-  <span class="FunctionName">cube</span><span class="Keyword">:</span>   <span class="FunctionArgument">(</span><span class="FunctionArgument">x</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span> x <span class="Keyword">*</span> square x
-
-<span class="Comment"><span class="Comment">#</span> Splats:</span>
-<span class="FunctionName">race </span><span class="Keyword">=</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">winner, runners...</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span>
-  print winner, runners
-
-<span class="Comment"><span class="Comment">#</span> Existence:</span>
-alert <span class="String"><span class="String">&quot;</span>I knew it!<span class="String">&quot;</span></span> <span class="Keyword">if</span> elvis<span class="Keyword">?</span>
-
-<span class="Comment"><span class="Comment">#</span> Array comprehensions:</span>
-cubes <span class="Keyword">=</span> math.cube num <span class="Keyword">for</span> num <span class="Keyword">in</span> list
-</pre><pre class="idle"><span class="Storage">var</span> _i, _len, _result, cubes, list, math, num, number, opposite, race, square;
-<span class="Storage">var</span> __slice <span class="Keyword">=</span> <span class="LibraryClassType">Array</span>.<span class="LibraryConstant">prototype</span>.slice;
-number <span class="Keyword">=</span> <span class="Number">42</span>;
-opposite <span class="Keyword">=</span> <span class="BuiltInConstant">true</span>;
-<span class="Keyword">if</span> (opposite) {
-  number <span class="Keyword">=</span> <span class="Keyword">-</span><span class="Number">42</span>;
-}
-<span class="FunctionName">square</span> = <span class="Storage">function</span>(<span class="FunctionArgument">x</span>) {
-  <span class="Keyword">return</span> x <span class="Keyword">*</span> x;
-};
-list <span class="Keyword">=</span> [<span class="Number">1</span>, <span class="Number">2</span>, <span class="Number">3</span>, <span class="Number">4</span>, <span class="Number">5</span>];
-math <span class="Keyword">=</span> {
-  root: <span class="LibraryClassType">Math</span>.sqrt,
-  square: square,
-  <span class="FunctionName">cube</span>: <span class="Storage">function</span>(<span class="FunctionArgument">x</span>) {
-    <span class="Keyword">return</span> x <span class="Keyword">*</span> square(x);
-  }
-};
-<span class="FunctionName">race</span> = <span class="Storage">function</span>(<span class="FunctionArgument">winner</span>) {
-  <span class="Storage">var</span> runners;
-  runners <span class="Keyword">=</span> __slice.<span class="LibraryFunction">call</span>(arguments, <span class="Number">1</span>);
-  <span class="Keyword">return</span> <span class="LibraryFunction">print</span>(winner, runners);
-};
-<span class="Keyword">if</span> (<span class="Keyword">typeof</span> elvis <span class="Keyword">!</span><span class="Keyword">==</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> elvis <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span>) {
-  <span class="LibraryFunction">alert</span>(<span class="String"><span class="String">&quot;</span>I knew it!<span class="String">&quot;</span></span>);
-}
-cubes <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  _result <span class="Keyword">=</span> [];
-  <span class="Keyword">for</span> (_i <span class="Keyword">=</span> <span class="Number">0</span>, _len <span class="Keyword">=</span> list.<span class="LibraryConstant">length</span>; _i <span class="Keyword">&lt;</span> _len; _i<span class="Keyword">++</span>) {
-    num <span class="Keyword">=</span> list[_i];
-    _result.<span class="LibraryFunction">push</span>(math.cube(num));
-  }
-  <span class="Keyword">return</span> _result;
-})();
-</pre><button onclick='javascript: var _i, _len, _result, cubes, list, math, num, number, opposite, race, square;
-var __slice = Array.prototype.slice;
-number = 42;
-opposite = true;
-if (opposite) {
-  number = -42;
-}
-square = function(x) {
-  return x * x;
-};
-list = [1, 2, 3, 4, 5];
-math = {
-  root: Math.sqrt,
-  square: square,
-  cube: function(x) {
-    return x * square(x);
-  }
-};
-race = function(winner) {
-  var runners;
-  runners = __slice.call(arguments, 1);
-  return print(winner, runners);
-};
-if (typeof elvis !== "undefined" && elvis !== null) {
-  alert("I knew it!");
-}
-cubes = (function() {
-  _result = [];
-  for (_i = 0, _len = list.length; _i < _len; _i++) {
-    num = list[_i];
-    _result.push(math.cube(num));
-  }
-  return _result;
-})();;alert(cubes);'>run: cubes</button><br class='clear' /></div>
-
-    <p>
-      For a longer CoffeeScript example, check out
-      <a href="documentation/docs/underscore.html">Underscore.coffee</a>, a port
-      of the <a href="http://documentcloud.github.com/underscore/">Underscore.js</a>
-      library of helper functions. Underscore.coffee can pass the entire Underscore.js
-      test suite. The CoffeeScript version is faster than the original for a number
-      of methods (in general, due to the speed of CoffeeScript's array comprehensions), and
-      after being minified and gzipped, is only 241 bytes larger than the original
-      JavaScript version.
-      Additional examples are included in the source repository, inside the
-      <a href="http://github.com/jashkenas/coffee-script/tree/master/examples/">examples</a> folder.
-    </p>
-
-    <h2>
-      <span id="installation" class="bookmark"></span>
-      Installation and Usage
-    </h2>
-
-    <p>
-      The CoffeeScript compiler is written in pure CoffeeScript, using a
-      <a href="documentation/docs/grammar.html">small DSL</a>
-      on top of the <a href="http://github.com/zaach/jison">Jison parser generator</a>, and is available
-      as a <a href="http://nodejs.org/">Node.js</a> utility. The core compiler however,
-      does not depend on Node, and can be run in other server-side-JavaScript environments,
-      or in the browser (see "Try CoffeeScript", above).
-    </p>
-
-    <p>
-      To install, first make sure you have a working copy of the latest tagged version of
-      <a href="http://nodejs.org/">Node.js</a>, currently <b>0.1.102</b> or higher.
-      Then clone the CoffeeScript
-      <a href="http://github.com/jashkenas/coffee-script">source repository</a>
-      from GitHub, or download the latest
-      release: <a href="http://github.com/jashkenas/coffee-script/tarball/0.9.4">0.9.4</a>.
-      To install the CoffeeScript compiler system-wide
-      under <tt>/usr/local</tt>, open the directory and run:
-    </p>
-
-    <pre>
-sudo bin/cake install</pre>
-
-    <p>
-      Alternatively, if you already have the
-      <a href="http://npmjs.org/">Node Package Manager</a> installed,
-      you can use that to grab the latest CoffeeScript:
-    </p>
-
-    <pre>
-sudo npm install coffee-script</pre>
-
-    <p>
-      Both of these provide the <tt>coffee</tt> command, which will execute CoffeeScripts
-      under Node.js by default, but is also used to compile CoffeeScript
-      <tt>.coffee</tt> files into JavaScript, or to run an an interactive REPL.
-      When compiling to JavaScript, <tt>coffee</tt> writes the output
-      as <tt>.js</tt> files in the same directory by default, but output
-      can be customized with the following options:
-    </p>
-
-    <table>
-      <tr>
-        <td><code>-c, --compile</code></td>
-        <td>
-          Compile a <tt>.coffee</tt> script into a <tt>.js</tt> JavaScript file
-          of the same name.
-        </td>
-      </tr>
-      <tr>
-        <td width="25%"><code>-i, --interactive</code></td>
-        <td>
-          Launch an interactive CoffeeScript session to try short snippets.
-          More pleasant if wrapped with
-          <a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap.html">rlwrap</a>.
-        </td>
-      </tr>
-      <tr>
-        <td><code>-o, --output [DIR]</code></td>
-        <td>
-          Write out all compiled JavaScript files into the specified directory.
-          Use in conjunction with <tt>--compile</tt> or <tt>--watch</tt>.
-        </td>
-      </tr>
-      <tr>
-        <td><code>-w, --watch</code></td>
-        <td>
-          Watch the modification times of the coffee-scripts, recompiling as
-          soon as a change occurs.
-        </td>
-      </tr>
-      <tr>
-        <td><code>-p, --print</code></td>
-        <td>
-          Instead of writing out the JavaScript as a file, print it
-          directly to <b>stdout</b>.
-        </td>
-      </tr>
-      <tr>
-        <td><code>-l, --lint</code></td>
-        <td>
-          If the <tt>jsl</tt>
-          (<a href="http://www.javascriptlint.com/">JavaScript Lint</a>)
-          command is installed, use it
-          to check the compilation of a CoffeeScript file. (Handy in
-          conjunction with <br /> <tt>--watch</tt>)
-        </td>
-      </tr>
-      <tr>
-        <td><code>-s, --stdio</code></td>
-        <td>
-          Pipe in CoffeeScript to STDIN and get back JavaScript over STDOUT.
-          Good for use with processes written in other languages. An example:<br />
-          <tt>cat src/cake.coffee | coffee -sc</tt>
-        </td>
-      </tr>
-      <tr>
-        <td><code>-e, --eval</code></td>
-        <td>
-          Compile and print a little snippet of CoffeeScript directly from the
-          command line. For example:<br /><tt>coffee -e "puts num for num in [10..1]"</tt>
-        </td>
-      </tr>
-      <tr>
-        <td><code>-r, --require</code></td>
-        <td>
-          Load a library before compiling or executing your script. Can be used
-          to hook in to the compiler (to add Growl notifications, for example).
-        </td>
-      </tr>
-      <tr>
-        <td><code>-b, --bare</code></td>
-        <td>
-          Compile the JavaScript without the top-level function safety wrapper.
-          (Used for CoffeeScript as a Node.js module.)
-        </td>
-      </tr>
-      <tr>
-        <td><code>-t, --tokens</code></td>
-        <td>
-          Instead of parsing the CoffeeScript, just lex it, and print out the
-          token stream: <tt>[IDENTIFIER square] [ASSIGN =] [PARAM_START (]</tt> ...
-        </td>
-      </tr>
-      <tr>
-        <td><code>-n, --nodes</code></td>
-        <td>
-          Instead of compiling the CoffeeScript, just lex and parse it, and print
-          out the parse tree:
-<pre class="no_bar">
-Expressions
-  Assign
-    Value "square"
-    Code "x"
-      Op *
-        Value "x"
-        Value "x"</pre>
-        </td>
-      </tr>
-    </table>
-
-    <p>
-      <b>Examples:</b>
-    </p>
-
-    <pre>
-coffee -c path/to/script.coffee
-coffee --interactive
-coffee --watch --lint experimental.coffee
-coffee --print app/scripts/*.coffee > concatenation.js</pre>
-
-    <h2>
-      <span id="language" class="bookmark"></span>
-      Language Reference
-    </h2>
-
-    <p>
-      <i>
-        This reference is structured so that it can be read from top to bottom,
-        if you like. Later sections use ideas and syntax previously introduced.
-        Familiarity with JavaScript is assumed.
-        In all of the following examples, the source CoffeeScript is provided on
-        the left, and the direct compilation into JavaScript is on the right.
-      </i>
-    </p>
-
-    <p>
-      <i>
-        Many of the examples can be run (where it makes sense) by pressing the "run"
-        button towards the bottom right. You can also paste examples into
-        "Try CoffeeScript" in the toolbar, and play with them from there.
-      </i>
-    <p>
-      <span id="whitespace" class="bookmark"></span>
-      <b class="header">Significant Whitespace</b>
-      CoffeeScript uses Python-style significant whitespace: You don't need to
-      use semicolons <tt>;</tt> to terminate expressions, ending
-      the line will do just as well. Semicolons can still be used to fit
-      multiple expressions onto a single line. Instead of using curly braces
-      <tt>{ }</tt> to delimit blocks of code (like <a href="#functions">functions</a>,
-      <a href="#conditionals">if-statements</a>,
-      <a href="#switch">switch</a>, and <a href="#try">try/catch</a>),
-      use indentation.
-    </p>
-
-    <p>
-      You don't need to use parentheses to invoke a function if you're passing
-      arguments:<br /><tt>print "coffee"</tt>. Implicit parentheses wrap forwards
-      to the end of the line, or block expression.
-    </p>
-
-    <p>
-      You can use newlines to break up your expression into smaller pieces,
-      as long as CoffeeScript can determine that the line hasn't finished yet,
-      because it ends with an operator or a dot ... seen most commonly
-      in jQuery-chaining style JavaScript.
-    </p>
-
-    <p>
-      <span id="functions" class="bookmark"></span>
-      <b class="header">Functions and Invocation</b>
-      Functions are defined by a list of parameters, an arrow, and the
-      function body. The empty function looks like this: <tt>-></tt>
-    </p>
-    <div class='code'><pre class="idle"><span class="FunctionName">square </span><span class="Keyword">=</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">x</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span> x <span class="Keyword">*</span> x
-<span class="FunctionName">cube   </span><span class="Keyword">=</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">x</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span> square(x) <span class="Keyword">*</span> x
-</pre><pre class="idle"><span class="Storage">var</span> cube, square;
-<span class="FunctionName">square</span> = <span class="Storage">function</span>(<span class="FunctionArgument">x</span>) {
-  <span class="Keyword">return</span> x <span class="Keyword">*</span> x;
-};
-<span class="FunctionName">cube</span> = <span class="Storage">function</span>(<span class="FunctionArgument">x</span>) {
-  <span class="Keyword">return</span> square(x) <span class="Keyword">*</span> x;
-};
-</pre><button onclick='javascript: var cube, square;
-square = function(x) {
-  return x * x;
-};
-cube = function(x) {
-  return square(x) * x;
-};;alert(cube(5));'>run: cube(5)</button><br class='clear' /></div>
-
-    <p>
-      <span id="objects_and_arrays" class="bookmark"></span>
-      <b class="header">Objects and Arrays</b>
-      Object and Array literals look very similar to their JavaScript cousins.
-      When you spread out each property on a separate line, the commas are
-      optional. Implicit objects may be created with indentation instead of
-      brackets, winding up looking quite similar to YAML.
-    </p>
-    <div class='code'><pre class="idle">song <span class="Keyword">=</span> [<span class="String"><span class="String">&quot;</span>do<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>re<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>mi<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>fa<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>so<span class="String">&quot;</span></span>]
-
-singers <span class="Keyword">=</span> {Jagger: <span class="String"><span class="String">&quot;</span>Rock<span class="String">&quot;</span></span>, Elvis: <span class="String"><span class="String">&quot;</span>Roll<span class="String">&quot;</span></span>}
-
-matrix <span class="Keyword">=</span> [
-  <span class="Number">1</span>, <span class="Number">0</span>, <span class="Number">1</span>
-  <span class="Number">0</span>, <span class="Number">0</span>, <span class="Number">1</span>
-  <span class="Number">1</span>, <span class="Number">1</span>, <span class="Number">0</span>
-]
-
-kids <span class="Keyword">=</span>
-  brother:
-    name: <span class="String"><span class="String">&quot;</span>Max<span class="String">&quot;</span></span>
-    age:  <span class="Number">11</span>
-  sister:
-    name: <span class="String"><span class="String">&quot;</span>Ida<span class="String">&quot;</span></span>
-    age:  <span class="Number">9</span>
-</pre><pre class="idle"><span class="Storage">var</span> kids, matrix, singers, song;
-song <span class="Keyword">=</span> [<span class="String"><span class="String">&quot;</span>do<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>re<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>mi<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>fa<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>so<span class="String">&quot;</span></span>];
-singers <span class="Keyword">=</span> {
-  Jagger: <span class="String"><span class="String">&quot;</span>Rock<span class="String">&quot;</span></span>,
-  Elvis: <span class="String"><span class="String">&quot;</span>Roll<span class="String">&quot;</span></span>
-};
-matrix <span class="Keyword">=</span> [<span class="Number">1</span>, <span class="Number">0</span>, <span class="Number">1</span>, <span class="Number">0</span>, <span class="Number">0</span>, <span class="Number">1</span>, <span class="Number">1</span>, <span class="Number">1</span>, <span class="Number">0</span>];
-kids <span class="Keyword">=</span> {
-  brother: {
-    name: <span class="String"><span class="String">&quot;</span>Max<span class="String">&quot;</span></span>,
-    age: <span class="Number">11</span>
-  },
-  sister: {
-    name: <span class="String"><span class="String">&quot;</span>Ida<span class="String">&quot;</span></span>,
-    age: <span class="Number">9</span>
-  }
-};
-</pre><button onclick='javascript: var kids, matrix, singers, song;
-song = ["do", "re", "mi", "fa", "so"];
-singers = {
-  Jagger: "Rock",
-  Elvis: "Roll"
-};
-matrix = [1, 0, 1, 0, 0, 1, 1, 1, 0];
-kids = {
-  brother: {
-    name: "Max",
-    age: 11
-  },
-  sister: {
-    name: "Ida",
-    age: 9
-  }
-};;alert(song.join(","));'>run: song.join(",")</button><br class='clear' /></div>
-    <p>
-      In JavaScript, you can't use reserved words, like <tt>class</tt>, as properties
-      of an object, without quoting them as strings. CoffeeScript notices and quotes
-      them for you, so you don't have to worry about it (say, when using jQuery).
-    </p>
-    <div class='code'><pre class="idle">$(<span class="String"><span class="String">'</span>.account<span class="String">'</span></span>).css class: <span class="String"><span class="String">'</span>active<span class="String">'</span></span>
-</pre><pre class="idle"><span class="Keyword">$</span>(<span class="String"><span class="String">'</span>.account<span class="String">'</span></span>).css({
-  <span class="String"><span class="String">&quot;</span>class<span class="String">&quot;</span></span>: <span class="String"><span class="String">'</span>active<span class="String">'</span></span>
-});
-</pre><br class='clear' /></div>
-
-    <p>
-      <span id="lexical_scope" class="bookmark"></span>
-      <b class="header">Lexical Scoping and Variable Safety</b>
-      The CoffeeScript compiler takes care to make sure that all of your variables
-      are properly declared within lexical scope &mdash; you never need to write
-      <tt>var</tt> yourself.
-    </p>
-    <div class='code'><pre class="idle">outer <span class="Keyword">=</span> <span class="Number">1</span>
-<span class="FunctionName">changeNumbers </span><span class="Keyword">=</span> <span class="Storage">-&gt;</span>
-  inner <span class="Keyword">=</span> <span class="Keyword">-</span><span class="Number">1</span>
-  outer <span class="Keyword">=</span> <span class="Number">10</span>
-inner <span class="Keyword">=</span> changeNumbers()
-</pre><pre class="idle"><span class="Storage">var</span> changeNumbers, inner, outer;
-outer <span class="Keyword">=</span> <span class="Number">1</span>;
-<span class="FunctionName">changeNumbers</span> = <span class="Storage">function</span>() {
-  <span class="Storage">var</span> inner;
-  inner <span class="Keyword">=</span> <span class="Keyword">-</span><span class="Number">1</span>;
-  <span class="Keyword">return</span> (outer <span class="Keyword">=</span> <span class="Number">10</span>);
-};
-inner <span class="Keyword">=</span> changeNumbers();
-</pre><button onclick='javascript: var changeNumbers, inner, outer;
-outer = 1;
-changeNumbers = function() {
-  var inner;
-  inner = -1;
-  return (outer = 10);
-};
-inner = changeNumbers();;alert(inner);'>run: inner</button><br class='clear' /></div>
-    <p>
-      Notice how all of the variable declarations have been pushed up to
-      the top of the closest scope, the first time they appear.
-      <b>outer</b> is not redeclared within the inner function, because it's
-      already in scope; <b>inner</b> within the function, on the other hand,
-      should not be able to change the value of the external variable of the same name, and
-      therefore has a declaration of its own.
-    </p>
-    <p>
-      This behavior is effectively identical to Ruby's scope for local variables.
-      Because you don't have direct access to the <tt>var</tt> keyword,
-      it's impossible to shadow an outer variable on purpose, you may only refer
-      to it. So be careful that you're not reusing the name of an external
-      variable accidentally, if you're writing a deeply nested function.
-    </p>
-    <p>
-      Although suppressed within this documentation for clarity, all
-      CoffeeScript output is wrapped in an anonymous function:
-      <tt>(function(){ ... })();</tt> This safety wrapper, combined with the
-      automatic generation of the <tt>var</tt> keyword, make it exceedingly difficult
-      to pollute the global namespace by accident.
-    </p>
-    <p>
-      If you'd like to create top-level variables for other scripts to use,
-      attach them as properties on <b>window</b>, or on the <b>exports</b>
-      object in CommonJS. The <b>existential operator</b> (covered below), gives you a
-      reliable way to figure out where to add them, if you're targeting both
-      CommonJS and the browser: <tt>root = exports ? this</tt>
-    </p>
-
-    <p>
-      <span id="conditionals" class="bookmark"></span>
-      <b class="header">If, Else, Unless, and Conditional Assignment</b>
-      <b>If/else</b> statements can be written without the use of parentheses and
-      curly brackets. As with functions and other block expressions,
-      multi-line conditionals are delimited by indentation. There's also a handy
-      postfix form, with the <tt>if</tt> or <tt>unless</tt> at the end.
-    </p>
-    <p>
-      CoffeeScript can compile <b>if</b> statements into JavaScript expressions,
-      using the ternary operator when possible, and closure wrapping otherwise. There
-      is no explicit ternary statement in CoffeeScript &mdash; you simply use
-      a regular <b>if</b> statement inline.
-    </p>
-    <div class='code'><pre class="idle">mood <span class="Keyword">=</span> greatlyImproved <span class="Keyword">if</span> singing
-
-<span class="Keyword">if</span> happy <span class="Keyword">and</span> knowsIt
-  clapsHands()
-  chaChaCha()
-<span class="Keyword">else</span>
-  showIt()
-
-date <span class="Keyword">=</span> <span class="Keyword">if</span> friday <span class="Keyword">then</span> sue <span class="Keyword">else</span> jill
-
-options or<span class="Keyword">=</span> defaults
-</pre><pre class="idle"><span class="Storage">var</span> date, mood, options;
-<span class="Keyword">if</span> (singing) {
-  mood <span class="Keyword">=</span> greatlyImproved;
-}
-<span class="Keyword">if</span> (happy <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> knowsIt) {
-  clapsHands();
-  chaChaCha();
-} <span class="Keyword">else</span> {
-  showIt();
-}
-date <span class="Keyword">=</span> friday ? sue : jill;
-options <span class="Keyword">||</span> (options <span class="Keyword">=</span> defaults);
-</pre><br class='clear' /></div>
-
-    <p>
-      <span id="aliases" class="bookmark"></span>
-      <b class="header">Aliases</b>
-      Because the <tt>==</tt> operator frequently causes undesirable coercion,
-      is intransitive, and has a different meaning than in other languages,
-      CoffeeScript compiles <tt>==</tt> into <tt>===</tt>, and <tt>!=</tt> into
-      <tt>!==</tt>.
-      In addition, <tt>is</tt> compiles into <tt>===</tt>,
-      and <tt>isnt</tt> into <tt>!==</tt>.
-    </p>
-    <p>
-      You can use <tt>not</tt> as an alias for <tt>!</tt>.
-    </p>
-    <p>
-      For logic, <tt>and</tt> compiles to <tt>&amp;&amp;</tt>, and <tt>or</tt>
-      into <tt>||</tt>.
-    </p>
-    <p>
-      Instead of a newline or semicolon, <tt>then</tt> can be used to separate
-      conditions from expressions, in <b>while</b>,
-      <b>if</b>/<b>else</b>, and <b>switch</b>/<b>when</b> statements.
-    </p>
-    <p>
-      As in <a href="http://yaml.org/">YAML</a>, <tt>on</tt> and <tt>yes</tt>
-      are the same as boolean <tt>true</tt>, while <tt>off</tt> and <tt>no</tt> are boolean <tt>false</tt>.
-    </p>
-    <p>
-      For single-line statements, <tt>unless</tt> can be used as the inverse of <tt>if</tt>.
-    </p>
-    <p>
-      As a shortcut for <tt>this.property</tt>, you can use <tt>@property</tt>.
-    </p>
-    <p>
-      You can use <tt>in</tt> to test for array presence, and <tt>of</tt> to
-      test for JavaScript object-key presence.
-    </p>
-    <div class='code'><pre class="idle">launch() <span class="Keyword">if</span> ignition <span class="Keyword">is</span> <span class="BuiltInConstant">on</span>
-
-volume <span class="Keyword">=</span> <span class="Number">10</span> <span class="Keyword">if</span> band <span class="Keyword">isnt</span> SpinalTap
-
-letTheWildRumpusBegin() <span class="Keyword">unless</span> answer <span class="Keyword">is</span> <span class="BuiltInConstant">no</span>
-
-<span class="Keyword">if</span> car.speed <span class="Keyword">&lt;</span> limit <span class="Keyword">then</span> accelerate()
-
-winner <span class="Keyword">=</span> <span class="BuiltInConstant">yes</span> <span class="Keyword">if</span> pick <span class="Keyword">in</span> [<span class="Number">47</span>, <span class="Number">92</span>, <span class="Number">13</span>]
-
-print inspect <span class="String"><span class="String">&quot;</span>My name is <span class="String">&quot;</span></span> <span class="Keyword">+</span> <span class="Variable">@name</span>
-</pre><pre class="idle"><span class="Storage">var</span> volume, winner;
-<span class="Keyword">if</span> (ignition <span class="Keyword">===</span> <span class="BuiltInConstant">true</span>) {
-  launch();
-}
-<span class="Keyword">if</span> (band <span class="Keyword">!</span><span class="Keyword">==</span> SpinalTap) {
-  volume <span class="Keyword">=</span> <span class="Number">10</span>;
-}
-<span class="Keyword">if</span> (answer <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">false</span>) {
-  letTheWildRumpusBegin();
-}
-<span class="Keyword">if</span> (car.speed <span class="Keyword">&lt;</span> limit) {
-  accelerate();
-}
-<span class="Keyword">if</span> ((<span class="Number">47</span> <span class="Keyword">===</span> pick <span class="Keyword">||</span> <span class="Number">92</span> <span class="Keyword">===</span> pick <span class="Keyword">||</span> <span class="Number">13</span> <span class="Keyword">===</span> pick)) {
-  winner <span class="Keyword">=</span> <span class="BuiltInConstant">true</span>;
-}
-<span class="LibraryFunction">print</span>(inspect(<span class="String"><span class="String">&quot;</span>My name is <span class="String">&quot;</span></span> <span class="Keyword">+</span> <span class="Variable">this</span>.<span class="LibraryConstant">name</span>));
-</pre><br class='clear' /></div>
-
-    <p>
-      <span id="splats" class="bookmark"></span>
-      <b class="header">Splats...</b>
-      The JavaScript <b>arguments object</b> is a useful way to work with
-      functions that accept variable numbers of arguments. CoffeeScript provides
-      splats <tt>...</tt>, both for function definition as well as invocation,
-      making variable numbers of arguments a little bit more palatable.
-    </p>
-    <div class='code'><pre class="idle">gold <span class="Keyword">=</span> silver <span class="Keyword">=</span> rest <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>unknown<span class="String">&quot;</span></span>
-
-<span class="FunctionName">awardMedals </span><span class="Keyword">=</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">first, second, others...</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span>
-  gold   <span class="Keyword">=</span> first
-  silver <span class="Keyword">=</span> second
-  rest   <span class="Keyword">=</span> others
-
-contenders <span class="Keyword">=</span> [
-  <span class="String"><span class="String">&quot;</span>Michael Phelps<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Liu Xiang<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Yao Ming<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Allyson Felix<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Shawn Johnson<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Roman Sebrle<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Guo Jingjing<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Tyson Gay<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Asafa Powell<span class="String">&quot;</span></span>
-  <span class="String"><span class="String">&quot;</span>Usain Bolt<span class="String">&quot;</span></span>
-]
-
-awardMedals contenders...
-
-alert <span class="String"><span class="String">&quot;</span>Gold: <span class="String">&quot;</span></span> <span class="Keyword">+</span> gold
-alert <span class="String"><span class="String">&quot;</span>Silver: <span class="String">&quot;</span></span> <span class="Keyword">+</span> silver
-alert <span class="String"><span class="String">&quot;</span>The Field: <span class="String">&quot;</span></span> <span class="Keyword">+</span> rest
-</pre><pre class="idle"><span class="Storage">var</span> awardMedals, contenders, gold, rest, silver;
-<span class="Storage">var</span> __slice <span class="Keyword">=</span> <span class="LibraryClassType">Array</span>.<span class="LibraryConstant">prototype</span>.slice;
-gold <span class="Keyword">=</span> (silver <span class="Keyword">=</span> (rest <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>unknown<span class="String">&quot;</span></span>));
-<span class="FunctionName">awardMedals</span> = <span class="Storage">function</span>(<span class="FunctionArgument">first, second</span>) {
-  <span class="Storage">var</span> others;
-  others <span class="Keyword">=</span> __slice.<span class="LibraryFunction">call</span>(arguments, <span class="Number">2</span>);
-  gold <span class="Keyword">=</span> first;
-  silver <span class="Keyword">=</span> second;
-  <span class="Keyword">return</span> (rest <span class="Keyword">=</span> others);
-};
-contenders <span class="Keyword">=</span> [<span class="String"><span class="String">&quot;</span>Michael Phelps<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Liu Xiang<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Yao Ming<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Allyson Felix<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Shawn Johnson<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Roman Sebrle<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Guo Jingjing<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Tyson Gay<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Asafa Powell<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Usain Bolt<span class="String">&quot;</span></span>];
-awardMedals.<span class="LibraryFunction">apply</span>(awardMedals, contenders);
-<span class="LibraryFunction">alert</span>(<span class="String"><span class="String">&quot;</span>Gold: <span class="String">&quot;</span></span> <span class="Keyword">+</span> gold);
-<span class="LibraryFunction">alert</span>(<span class="String"><span class="String">&quot;</span>Silver: <span class="String">&quot;</span></span> <span class="Keyword">+</span> silver);
-<span class="LibraryFunction">alert</span>(<span class="String"><span class="String">&quot;</span>The Field: <span class="String">&quot;</span></span> <span class="Keyword">+</span> rest);
-</pre><button onclick='javascript: var awardMedals, contenders, gold, rest, silver;
-var __slice = Array.prototype.slice;
-gold = (silver = (rest = "unknown"));
-awardMedals = function(first, second) {
-  var others;
-  others = __slice.call(arguments, 2);
-  gold = first;
-  silver = second;
-  return (rest = others);
-};
-contenders = ["Michael Phelps", "Liu Xiang", "Yao Ming", "Allyson Felix", "Shawn Johnson", "Roman Sebrle", "Guo Jingjing", "Tyson Gay", "Asafa Powell", "Usain Bolt"];
-awardMedals.apply(awardMedals, contenders);
-alert("Gold: " + gold);
-alert("Silver: " + silver);
-alert("The Field: " + rest);;'>run</button><br class='clear' /></div>
-
-    <p>
-      <span id="while" class="bookmark"></span>
-      <b class="header">While, Until, and Loop</b>
-      The only low-level loop that CoffeeScript provides is the <b>while</b> loop. The
-      main difference from JavaScript is that the <b>while</b> loop can be used
-      as an expression, returning an array containing the result of each iteration
-      through the loop.
-    </p>
-    <div class='code'><pre class="idle"><span class="Comment"><span class="Comment">#</span> Econ 101</span>
-<span class="Keyword">if</span> <span class="Variable">this</span>.studyingEconomics
-  buy()  <span class="Keyword">while</span> supply <span class="Keyword">&gt;</span> demand
-  sell() <span class="Keyword">until</span> supply <span class="Keyword">&gt;</span> demand
-
-<span class="Comment"><span class="Comment">#</span> Nursery Rhyme</span>
-num <span class="Keyword">=</span> <span class="Number">6</span>
-lyrics <span class="Keyword">=</span> <span class="Keyword">while</span> num <span class="Keyword">-</span><span class="Keyword">=</span> <span class="Number">1</span>
-  num <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span> little monkeys, jumping on the bed.</span>
-<span class="String">    One fell out and bumped his head.<span class="String">&quot;</span></span>
-</pre><pre class="idle"><span class="Storage">var</span> _result, lyrics, num;
-<span class="Keyword">if</span> (<span class="Variable">this</span>.studyingEconomics) {
-  <span class="Keyword">while</span> (supply <span class="Keyword">&gt;</span> demand) {
-    buy();
-  }
-  <span class="Keyword">while</span> (<span class="Keyword">!</span>(supply <span class="Keyword">&gt;</span> demand)) {
-    sell();
-  }
-}
-num <span class="Keyword">=</span> <span class="Number">6</span>;
-lyrics <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  _result <span class="Keyword">=</span> [];
-  <span class="Keyword">while</span> (num <span class="Keyword">-</span><span class="Keyword">=</span> <span class="Number">1</span>) {
-    _result.<span class="LibraryFunction">push</span>(num <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span> little monkeys, jumping on the bed.    One fell out and bumped his head.<span class="String">&quot;</span></span>);
-  }
-  <span class="Keyword">return</span> _result;
-})();
-</pre><button onclick='javascript: var _result, lyrics, num;
-if (this.studyingEconomics) {
-  while (supply > demand) {
-    buy();
-  }
-  while (!(supply > demand)) {
-    sell();
-  }
-}
-num = 6;
-lyrics = (function() {
-  _result = [];
-  while (num -= 1) {
-    _result.push(num + " little monkeys, jumping on the bed.    One fell out and bumped his head.");
-  }
-  return _result;
-})();;alert(lyrics.join("\n"));'>run: lyrics.join("\n")</button><br class='clear' /></div>
-    <p>
-      For readability, the <b>until</b> keyword is equivalent to <tt>while not</tt>,
-      and the <b>loop</b> keyword is equivalent to <tt>while true</tt>.
-      Other JavaScript loops, such as <b>for</b> loops and <b>do-while</b> loops
-      can be mimicked by variations on <b>loop</b>, but the hope is that you
-      won't need to do that with CoffeeScript, either because you're using
-      <b>each</b> (<b>forEach</b>) style iterators, or...
-    </p>
-
-    <p>
-      <span id="comprehensions" class="bookmark"></span>
-      <b class="header">Comprehensions (Arrays, Objects, and Ranges)</b>
-      For your looping needs, CoffeeScript provides array comprehensions
-      similar to Python's. They replace (and compile into) <b>for</b> loops, with
-      optional guard clauses and the value of the current array index.
-      Unlike for loops, array comprehensions are expressions, and can be returned
-      and assigned. They should be able to handle most places where you otherwise
-      would use a loop, <b>each</b>/<b>forEach</b>, <b>map</b>, or <b>select</b>/<b>filter</b>.
-    </p>
-    <div class='code'><pre class="idle"><span class="Comment"><span class="Comment">#</span> Eat lunch.</span>
-lunch <span class="Keyword">=</span> eat food <span class="Keyword">for</span> food <span class="Keyword">in</span> [<span class="String"><span class="String">'</span>toast<span class="String">'</span></span>, <span class="String"><span class="String">'</span>cheese<span class="String">'</span></span>, <span class="String"><span class="String">'</span>wine<span class="String">'</span></span>]
-
-<span class="Comment"><span class="Comment">#</span> Naive collision detection.</span>
-<span class="Keyword">for</span> roid, pos <span class="Keyword">in</span> asteroids
-  <span class="Keyword">for</span> roid2 <span class="Keyword">in</span> asteroids <span class="Keyword">when</span> roid <span class="Keyword">isnt</span> roid2
-    roid.explode() <span class="Keyword">if</span> roid.overlaps roid2
-</pre><pre class="idle"><span class="Storage">var</span> _i, _len, _len2, _ref, _result, food, lunch, pos, roid, roid2;
-lunch <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  _result <span class="Keyword">=</span> []; _ref <span class="Keyword">=</span> [<span class="String"><span class="String">'</span>toast<span class="String">'</span></span>, <span class="String"><span class="String">'</span>cheese<span class="String">'</span></span>, <span class="String"><span class="String">'</span>wine<span class="String">'</span></span>];
-  <span class="Keyword">for</span> (_i <span class="Keyword">=</span> <span class="Number">0</span>, _len <span class="Keyword">=</span> _ref.<span class="LibraryConstant">length</span>; _i <span class="Keyword">&lt;</span> _len; _i<span class="Keyword">++</span>) {
-    food <span class="Keyword">=</span> _ref[_i];
-    _result.<span class="LibraryFunction">push</span>(eat(food));
-  }
-  <span class="Keyword">return</span> _result;
-})();
-<span class="Keyword">for</span> (pos <span class="Keyword">=</span> <span class="Number">0</span>, _len <span class="Keyword">=</span> asteroids.<span class="LibraryConstant">length</span>; pos <span class="Keyword">&lt;</span> _len; pos<span class="Keyword">++</span>) {
-  roid <span class="Keyword">=</span> asteroids[pos];
-  <span class="Keyword">for</span> (_i <span class="Keyword">=</span> <span class="Number">0</span>, _len2 <span class="Keyword">=</span> asteroids.<span class="LibraryConstant">length</span>; _i <span class="Keyword">&lt;</span> _len2; _i<span class="Keyword">++</span>) {
-    roid2 <span class="Keyword">=</span> asteroids[_i];
-    <span class="Keyword">if</span> (roid <span class="Keyword">!</span><span class="Keyword">==</span> roid2) {
-      <span class="Keyword">if</span> (roid.overlaps(roid2)) {
-        roid.explode();
-      }
-    }
-  }
-}
-</pre><br class='clear' /></div>
-    <p>
-      If you know the start and end of your loop, or would like to step through
-      in fixed-size increments, you can use a range to specify the start and
-      end of your comprehension.
-    </p>
-    <div class='code'><pre class="idle">countdown <span class="Keyword">=</span> num <span class="Keyword">for</span> num <span class="Keyword">in</span> [<span class="Number">10</span>..<span class="Number">1</span>]
-
-<span class="FunctionName">deliverEggs </span><span class="Keyword">=</span> <span class="Storage">-&gt;</span>
-  <span class="Keyword">for</span> i <span class="Keyword">in</span> [<span class="Number">0</span>...eggs.length] <span class="Keyword">by</span> <span class="Number">12</span>
-    dozen <span class="Keyword">=</span> eggs[i...i<span class="Keyword">+</span><span class="Number">12</span>]
-    deliver <span class="Keyword">new</span> <span class="TypeName">eggCarton</span> dozen
-</pre><pre class="idle"><span class="Storage">var</span> _result, countdown, deliverEggs, num;
-countdown <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  _result <span class="Keyword">=</span> [];
-  <span class="Keyword">for</span> (num <span class="Keyword">=</span> <span class="Number">10</span>; num <span class="Keyword">&gt;=</span> <span class="Number">1</span>; num<span class="Keyword">--</span>) {
-    _result.<span class="LibraryFunction">push</span>(num);
-  }
-  <span class="Keyword">return</span> _result;
-})();
-<span class="FunctionName">deliverEggs</span> = <span class="Storage">function</span>() {
-  <span class="Storage">var</span> _ref, _result2, dozen, i;
-  _result2 <span class="Keyword">=</span> []; _ref <span class="Keyword">=</span> eggs.<span class="LibraryConstant">length</span>;
-  <span class="Keyword">for</span> (i <span class="Keyword">=</span> <span class="Number">0</span>; (<span class="Number">0</span> <span class="Keyword">&lt;=</span> _ref ? i <span class="Keyword">&lt;</span> _ref : i <span class="Keyword">&gt;</span> _ref); i <span class="Keyword">+</span><span class="Keyword">=</span> <span class="Number">12</span>) {
-    _result2.<span class="LibraryFunction">push</span>((<span class="Storage">function</span>() {
-      dozen <span class="Keyword">=</span> eggs.<span class="LibraryFunction">slice</span>(i, i <span class="Keyword">+</span> <span class="Number">12</span>);
-      <span class="Keyword">return</span> deliver(<span class="Keyword">new</span> <span class="TypeName">eggCarton</span>(dozen));
-    })());
-  }
-  <span class="Keyword">return</span> _result2;
-};
-</pre><button onclick='javascript: var _result, countdown, deliverEggs, num;
-countdown = (function() {
-  _result = [];
-  for (num = 10; num >= 1; num--) {
-    _result.push(num);
-  }
-  return _result;
-})();
-deliverEggs = function() {
-  var _ref, _result2, dozen, i;
-  _result2 = []; _ref = eggs.length;
-  for (i = 0; (0 <= _ref ? i < _ref : i > _ref); i += 12) {
-    _result2.push((function() {
-      dozen = eggs.slice(i, i + 12);
-      return deliver(new eggCarton(dozen));
-    })());
-  }
-  return _result2;
-};;alert(countdown);'>run: countdown</button><br class='clear' /></div>
-    <p>
-      Comprehensions can also be used to iterate over the keys and values in
-      an object. Use <tt>of</tt> to signal comprehension over the properties of
-      an object instead of the values in an array.
-    </p>
-    <div class='code'><pre class="idle">yearsOld <span class="Keyword">=</span> max: <span class="Number">10</span>, ida: <span class="Number">9</span>, tim: <span class="Number">11</span>
-
-ages <span class="Keyword">=</span> <span class="Keyword">for</span> child, age <span class="Keyword">of</span> yearsOld
-  child <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span> is <span class="String">&quot;</span></span> <span class="Keyword">+</span> age
-</pre><pre class="idle"><span class="Storage">var</span> _result, age, ages, child, yearsOld;
-<span class="Storage">var</span> __hasProp <span class="Keyword">=</span> <span class="LibraryClassType">Object</span>.<span class="LibraryConstant">prototype</span>.hasOwnProperty;
-yearsOld <span class="Keyword">=</span> {
-  max: <span class="Number">10</span>,
-  ida: <span class="Number">9</span>,
-  tim: <span class="Number">11</span>
-};
-ages <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  _result <span class="Keyword">=</span> [];
-  <span class="Keyword">for</span> (child <span class="Keyword">in</span> yearsOld) {
-    <span class="Keyword">if</span> (<span class="Keyword">!</span>__hasProp.<span class="LibraryFunction">call</span>(yearsOld, child)) <span class="Keyword">continue</span>;
-    age <span class="Keyword">=</span> yearsOld[child];
-    _result.<span class="LibraryFunction">push</span>(child <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span> is <span class="String">&quot;</span></span> <span class="Keyword">+</span> age);
-  }
-  <span class="Keyword">return</span> _result;
-})();
-</pre><button onclick='javascript: var _result, age, ages, child, yearsOld;
-var __hasProp = Object.prototype.hasOwnProperty;
-yearsOld = {
-  max: 10,
-  ida: 9,
-  tim: 11
-};
-ages = (function() {
-  _result = [];
-  for (child in yearsOld) {
-    if (!__hasProp.call(yearsOld, child)) continue;
-    age = yearsOld[child];
-    _result.push(child + " is " + age);
-  }
-  return _result;
-})();;alert(ages.join(", "));'>run: ages.join(", ")</button><br class='clear' /></div>
-    <p>
-      By default, object comprehensions are safe, and use a <tt>hasOwnProperty</tt>
-      check to make sure that you're dealing with properties on the current
-      object. If you'd like the regular JavaScript <br /><tt>for (key in obj) ...</tt>
-      loop, for speed or for another reason, you can use <br />
-      <tt>for all key, value of object</tt> in CoffeeScript.
-    </p>
-
-    <p>
-      <span id="slice_splice" class="bookmark"></span>
-      <b class="header">Array Slicing and Splicing with Ranges</b>
-      CoffeeScript borrows Ruby's
-      <a href="http://ruby-doc.org/core/classes/Range.html">range syntax</a>
-      for extracting slices of arrays. With two dots (<tt>3..5</tt>), the range
-      is inclusive: the first argument is the index of the first element in
-      the slice, and the second is the index of the last one. Three dots signify
-      a range that excludes the end.
-    </p>
-    <div class='code'><pre class="idle">numbers <span class="Keyword">=</span> [<span class="Number">0</span>, <span class="Number">1</span>, <span class="Number">2</span>, <span class="Number">3</span>, <span class="Number">4</span>, <span class="Number">5</span>, <span class="Number">6</span>, <span class="Number">7</span>, <span class="Number">8</span>, <span class="Number">9</span>]
-
-threeToSix <span class="Keyword">=</span> numbers[<span class="Number">3</span>..<span class="Number">6</span>]
-
-copy <span class="Keyword">=</span> numbers[<span class="Number">0</span>...numbers.length]
-
-</pre><pre class="idle"><span class="Storage">var</span> copy, numbers, threeToSix;
-numbers <span class="Keyword">=</span> [<span class="Number">0</span>, <span class="Number">1</span>, <span class="Number">2</span>, <span class="Number">3</span>, <span class="Number">4</span>, <span class="Number">5</span>, <span class="Number">6</span>, <span class="Number">7</span>, <span class="Number">8</span>, <span class="Number">9</span>];
-threeToSix <span class="Keyword">=</span> numbers.<span class="LibraryFunction">slice</span>(<span class="Number">3</span>, <span class="Number">6</span> <span class="Keyword">+</span> <span class="Number">1</span>);
-copy <span class="Keyword">=</span> numbers.<span class="LibraryFunction">slice</span>(<span class="Number">0</span>, numbers.<span class="LibraryConstant">length</span>);
-</pre><button onclick='javascript: var copy, numbers, threeToSix;
-numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
-threeToSix = numbers.slice(3, 6 + 1);
-copy = numbers.slice(0, numbers.length);;alert(copy);'>run: copy</button><br class='clear' /></div>
-    <p>
-      The same syntax can be used with assignment to replace a segment of an
-      array with new values (to splice it).
-    </p>
-    <div class='code'><pre class="idle">numbers <span class="Keyword">=</span> [<span class="Number">0</span>, <span class="Number">1</span>, <span class="Number">2</span>, <span class="Number">3</span>, <span class="Number">4</span>, <span class="Number">5</span>, <span class="Number">6</span>, <span class="Number">7</span>, <span class="Number">8</span>, <span class="Number">9</span>]
-
-numbers[<span class="Number">3</span>..<span class="Number">6</span>] <span class="Keyword">=</span> [<span class="Keyword">-</span><span class="Number">3</span>, <span class="Keyword">-</span><span class="Number">4</span>, <span class="Keyword">-</span><span class="Number">5</span>, <span class="Keyword">-</span><span class="Number">6</span>]
-
-
-</pre><pre class="idle"><span class="Storage">var</span> _ref, numbers;
-numbers <span class="Keyword">=</span> [<span class="Number">0</span>, <span class="Number">1</span>, <span class="Number">2</span>, <span class="Number">3</span>, <span class="Number">4</span>, <span class="Number">5</span>, <span class="Number">6</span>, <span class="Number">7</span>, <span class="Number">8</span>, <span class="Number">9</span>];
-([].splice.<span class="LibraryFunction">apply</span>(numbers, [<span class="Number">3</span>, <span class="Number">6</span> <span class="Keyword">-</span> <span class="Number">3</span> <span class="Keyword">+</span> <span class="Number">1</span>].<span class="LibraryFunction">concat</span>(_ref <span class="Keyword">=</span> [<span class="Keyword">-</span><span class="Number">3</span>, <span class="Keyword">-</span><span class="Number">4</span>, <span class="Keyword">-</span><span class="Number">5</span>, <span class="Keyword">-</span><span class="Number">6</span>])), _ref);
-</pre><button onclick='javascript: var _ref, numbers;
-numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
-([].splice.apply(numbers, [3, 6 - 3 + 1].concat(_ref = [-3, -4, -5, -6])), _ref);;alert(numbers);'>run: numbers</button><br class='clear' /></div>
-
-    <p>
-      <span id="expressions" class="bookmark"></span>
-      <b class="header">Everything is an Expression (at least, as much as possible)</b>
-      You might have noticed how even though we don't add return statements
-      to CoffeeScript functions, they nonetheless return their final value.
-      The CoffeeScript compiler tries to make sure that all statements in the
-      language can be used as expressions. Watch how the <tt>return</tt> gets
-      pushed down into each possible branch of execution, in the function
-      below.
-    </p>
-    <div class='code'><pre class="idle"><span class="FunctionName">grade </span><span class="Keyword">=</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">student</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span>
-  <span class="Keyword">if</span> student.excellentWork
-    <span class="String"><span class="String">&quot;</span>A+<span class="String">&quot;</span></span>
-  <span class="Keyword">else</span> <span class="Keyword">if</span> student.okayStuff
-    <span class="Keyword">if</span> student.triedHard <span class="Keyword">then</span> <span class="String"><span class="String">&quot;</span>B<span class="String">&quot;</span></span> <span class="Keyword">else</span> <span class="String"><span class="String">&quot;</span>B-<span class="String">&quot;</span></span>
-  <span class="Keyword">else</span>
-    <span class="String"><span class="String">&quot;</span>C<span class="String">&quot;</span></span>
-
-eldest <span class="Keyword">=</span> <span class="Keyword">if</span> <span class="Number">24</span> <span class="Keyword">&gt;</span> <span class="Number">21</span> <span class="Keyword">then</span> <span class="String"><span class="String">&quot;</span>Liz<span class="String">&quot;</span></span> <span class="Keyword">else</span> <span class="String"><span class="String">&quot;</span>Ike<span class="String">&quot;</span></span>
-</pre><pre class="idle"><span class="Storage">var</span> eldest, grade;
-<span class="FunctionName">grade</span> = <span class="Storage">function</span>(<span class="FunctionArgument">student</span>) {
-  <span class="Keyword">return</span> student.excellentWork ? <span class="String"><span class="String">&quot;</span>A+<span class="String">&quot;</span></span> : (student.okayStuff ? (student.triedHard ? <span class="String"><span class="String">&quot;</span>B<span class="String">&quot;</span></span> : <span class="String"><span class="String">&quot;</span>B-<span class="String">&quot;</span></span>) : <span class="String"><span class="String">&quot;</span>C<span class="String">&quot;</span></span>);
-};
-eldest <span class="Keyword">=</span> <span class="Number">24</span> <span class="Keyword">&gt;</span> <span class="Number">21</span> ? <span class="String"><span class="String">&quot;</span>Liz<span class="String">&quot;</span></span> : <span class="String"><span class="String">&quot;</span>Ike<span class="String">&quot;</span></span>;
-</pre><button onclick='javascript: var eldest, grade;
-grade = function(student) {
-  return student.excellentWork ? "A+" : (student.okayStuff ? (student.triedHard ? "B" : "B-") : "C");
-};
-eldest = 24 > 21 ? "Liz" : "Ike";;alert(eldest);'>run: eldest</button><br class='clear' /></div>
-    <p>
-      Even though functions will always return their final value, it's both possible
-      and encouraged to return early from a function body writing out the explicit
-      return (<tt>return value</tt>), when you know that you're done.
-    </p>
-    <p>
-      Because variable declarations occur at the top of scope, assignment can
-      be used within expressions, even for variables that haven't been seen before:
-    </p>
-    <div class='code'><pre class="idle">six <span class="Keyword">=</span> (one <span class="Keyword">=</span> <span class="Number">1</span>) <span class="Keyword">+</span> (two <span class="Keyword">=</span> <span class="Number">2</span>) <span class="Keyword">+</span> (three <span class="Keyword">=</span> <span class="Number">3</span>)
-</pre><pre class="idle"><span class="Storage">var</span> one, six, three, two;
-six <span class="Keyword">=</span> (one <span class="Keyword">=</span> <span class="Number">1</span>) <span class="Keyword">+</span> (two <span class="Keyword">=</span> <span class="Number">2</span>) <span class="Keyword">+</span> (three <span class="Keyword">=</span> <span class="Number">3</span>);
-</pre><button onclick='javascript: var one, six, three, two;
-six = (one = 1) + (two = 2) + (three = 3);;alert(six);'>run: six</button><br class='clear' /></div>
-    <p>
-      Things that would otherwise be statements in JavaScript, when used
-      as part of an expression in CoffeeScript, are converted into expressions
-      by wrapping them in a closure. This lets you do useful things, like assign
-      the result of a comprehension to a variable:
-    </p>
-    <div class='code'><pre class="idle"><span class="Comment"><span class="Comment">#</span> The first ten global properties.</span>
-
-globals <span class="Keyword">=</span> (name <span class="Keyword">for</span> name <span class="Keyword">of</span> window)[<span class="Number">0</span>...<span class="Number">10</span>]
-</pre><pre class="idle"><span class="Storage">var</span> _result, globals, name;
-<span class="Storage">var</span> __hasProp <span class="Keyword">=</span> <span class="LibraryClassType">Object</span>.<span class="LibraryConstant">prototype</span>.hasOwnProperty;
-globals <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  _result <span class="Keyword">=</span> [];
-  <span class="Keyword">for</span> (name <span class="Keyword">in</span> <span class="LibraryClassType">window</span>) {
-    <span class="Keyword">if</span> (<span class="Keyword">!</span>__hasProp.<span class="LibraryFunction">call</span>(<span class="LibraryClassType">window</span>, name)) <span class="Keyword">continue</span>;
-    _result.<span class="LibraryFunction">push</span>(name);
-  }
-  <span class="Keyword">return</span> _result;
-})().<span class="LibraryFunction">slice</span>(<span class="Number">0</span>, <span class="Number">10</span>);
-</pre><button onclick='javascript: var _result, globals, name;
-var __hasProp = Object.prototype.hasOwnProperty;
-globals = (function() {
-  _result = [];
-  for (name in window) {
-    if (!__hasProp.call(window, name)) continue;
-    _result.push(name);
-  }
-  return _result;
-})().slice(0, 10);;alert(globals);'>run: globals</button><br class='clear' /></div>
-    <p>
-      As well as silly things, like passing a <b>try/catch</b> statement directly
-      into a function call:
-    </p>
-    <div class='code'><pre class="idle">alert(
-  <span class="Keyword">try</span>
-    nonexistent <span class="Keyword">/</span> <span class="BuiltInConstant">undefined</span>
-  <span class="Keyword">catch</span> error
-    <span class="String"><span class="String">&quot;</span>And the error is ... <span class="String">&quot;</span></span> <span class="Keyword">+</span> error
-)
-</pre><pre class="idle"><span class="LibraryFunction">alert</span>((<span class="Storage">function</span>() {
-  <span class="Keyword">try</span> {
-    <span class="Keyword">return</span> nonexistent / undefined;
-  } <span class="Keyword">catch</span> (error) {
-    <span class="Keyword">return</span> <span class="String"><span class="String">&quot;</span>And the error is ... <span class="String">&quot;</span></span> <span class="Keyword">+</span> error;
-  }
-})());
-</pre><button onclick='javascript: alert((function() {
-  try {
-    return nonexistent / undefined;
-  } catch (error) {
-    return "And the error is ... " + error;
-  }
-})());;'>run</button><br class='clear' /></div>
-    <p>
-      There are a handful of statements in JavaScript that can't be meaningfully
-      converted into expressions, namely <tt>break</tt>, <tt>continue</tt>,
-      and <tt>return</tt>. If you make use of them within a block of code,
-      CoffeeScript won't try to perform the conversion.
-    </p>
-
-    <p>
-      <span id="existence" class="bookmark"></span>
-      <b class="header">The Existential Operator</b>
-      It's a little difficult to check for the existence of a variable in
-      JavaScript. <tt>if (variable) ...</tt> comes close, but fails for zero,
-      the empty string, and false. CoffeeScript's existential operator <tt>?</tt> returns true unless
-      a variable is <b>null</b> or <b>undefined</b>, which makes it analogous
-      to Ruby's <tt>nil?</tt>
-    </p>
-    <p>
-      It can also be used for safer conditional assignment than <tt>||=</tt>
-      provides, for cases where you may be handling numbers or strings.
-    </p>
-    <div class='code'><pre class="idle">solipsism <span class="Keyword">=</span> <span class="BuiltInConstant">true</span> <span class="Keyword">if</span> mind<span class="Keyword">?</span> <span class="Keyword">and</span> <span class="Keyword">not</span> world<span class="Keyword">?</span>
-
-speed <span class="Keyword">?</span><span class="Keyword">=</span> <span class="Number">140</span>
-
-
-
-
-
-</pre><pre class="idle"><span class="Storage">var</span> solipsism, speed;
-<span class="Keyword">if</span> ((<span class="Keyword">typeof</span> mind <span class="Keyword">!</span><span class="Keyword">==</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> mind <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span>) <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> <span class="Keyword">!</span>(<span class="Keyword">typeof</span> world <span class="Keyword">!</span><span class="Keyword">==</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> world <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span>)) {
-  solipsism <span class="Keyword">=</span> <span class="BuiltInConstant">true</span>;
-}
-(<span class="Keyword">typeof</span> speed <span class="Keyword">!</span><span class="Keyword">==</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> speed <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span>) ? speed : (speed <span class="Keyword">=</span> <span class="Number">140</span>);
-</pre><button onclick='javascript: var solipsism, speed;
-if ((typeof mind !== "undefined" && mind !== null) && !(typeof world !== "undefined" && world !== null)) {
-  solipsism = true;
-}
-(typeof speed !== "undefined" && speed !== null) ? speed : (speed = 140);;alert(speed);'>run: speed</button><br class='clear' /></div>
-    <p>
-      The accessor variant of the existential operator <tt>?.</tt> can be used to soak
-      up null references in a chain of properties. Use it instead
-      of the dot accessor <tt>.</tt> in cases where the base value may be <b>null</b>
-      or <b>undefined</b>. If all of the properties exist then you'll get the expected
-      result, if the chain is broken, <b>undefined</b> is returned instead of
-      the <b>TypeError</b> that would be raised otherwise.
-    </p>
-    <div class='code'><pre class="idle">lottery.drawWinner()<span class="Keyword">?</span>.address<span class="Keyword">?</span>.zipcode
-</pre><pre class="idle"><span class="Storage">var</span> _ref, _ref2;
-(((_ref <span class="Keyword">=</span> lottery.drawWinner()) <span class="Keyword">!</span><span class="Keyword">=</span> <span class="BuiltInConstant">null</span>) ? (((_ref2 <span class="Keyword">=</span> _ref.address) <span class="Keyword">!</span><span class="Keyword">=</span> <span class="BuiltInConstant">null</span>) ? _ref2.zipcode : undefined) : undefined);
-</pre><br class='clear' /></div>
-    <p>
-      Soaking up nulls is similar to Ruby's
-      <a href="http://andand.rubyforge.org/">andand gem</a>, and to the
-      <a href="http://groovy.codehaus.org/Operators#Operators-SafeNavigationOperator%28%3F.%29">safe navigation operator</a>
-      in Groovy.
-    </p>
-
-    <p>
-      <span id="classes" class="bookmark"></span>
-      <b class="header">Classes, Inheritance, and Super</b>
-      JavaScript's prototypal inheritance has always been a bit of a
-      brain-bender, with a whole family tree of libraries that provide a cleaner
-      syntax for classical inheritance on top of JavaScript's prototypes:
-      <a href="http://code.google.com/p/base2/">Base2</a>,
-      <a href="http://prototypejs.org/">Prototype.js</a>,
-      <a href="http://jsclass.jcoglan.com/">JS.Class</a>, etc.
-      The libraries provide syntactic sugar, but the built-in inheritance would
-      be completely usable if it weren't for a couple of small exceptions:
-      it's awkward to call <b>super</b> (the prototype object's
-      implementation of the current function), and it's awkward to correctly
-      set the prototype chain.
-    </p>
-    <p>
-      Instead of repetitively attaching functions to a prototype, CoffeeScript
-      provides a basic <tt>class</tt> structure that allows you to name your class,
-      set the superclass, assign prototypal properties, and define the constructor,
-      in a single assignable expression.
-    </p>
-    <div class='code'><pre class="idle"><span class="Storage">class</span> <span class="TypeName">Animal</span>
-  <span class="FunctionName">constructor</span><span class="Keyword">:</span> (<span class="Variable">@name</span>) <span class="Storage">-&gt;</span>
-
-  <span class="FunctionName">move</span><span class="Keyword">:</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">meters</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span>
-    alert <span class="Variable">@name</span> <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span> moved <span class="String">&quot;</span></span> <span class="Keyword">+</span> meters <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span>m.<span class="String">&quot;</span></span>
-
-<span class="Storage">class</span> <span class="TypeName">Snake</span><span class="InheritedClass"> <span class="Keyword">extends</span> Animal</span>
-  <span class="FunctionName">move</span><span class="Keyword">:</span> <span class="Storage">-&gt;</span>
-    alert <span class="String"><span class="String">&quot;</span>Slithering...<span class="String">&quot;</span></span>
-    <span class="Variable">super</span> <span class="Number">5</span>
-
-<span class="Storage">class</span> <span class="TypeName">Horse</span><span class="InheritedClass"> <span class="Keyword">extends</span> Animal</span>
-  <span class="FunctionName">move</span><span class="Keyword">:</span> <span class="Storage">-&gt;</span>
-    alert <span class="String"><span class="String">&quot;</span>Galloping...<span class="String">&quot;</span></span>
-    <span class="Variable">super</span> <span class="Number">45</span>
-
-sam <span class="Keyword">=</span> <span class="Keyword">new</span> <span class="TypeName">Snake</span> <span class="String"><span class="String">&quot;</span>Sammy the Python<span class="String">&quot;</span></span>
-tom <span class="Keyword">=</span> <span class="Keyword">new</span> <span class="TypeName">Horse</span> <span class="String"><span class="String">&quot;</span>Tommy the Palomino<span class="String">&quot;</span></span>
-
-sam.move()
-tom.move()
-
-
-
-
-</pre><pre class="idle"><span class="Storage">var</span> Animal, Horse, Snake, sam, tom;
-<span class="Storage">var</span> <span class="FunctionName">__extends</span> = <span class="Storage">function</span>(<span class="FunctionArgument">child, parent</span>) {
-  <span class="Storage">var</span> <span class="FunctionName">ctor</span> = <span class="Storage">function</span>() {};
-  <span class="LibraryClassType">ctor</span>.<span class="LibraryConstant">prototype</span> = parent.<span class="LibraryConstant">prototype</span>;
-  <span class="LibraryClassType">child</span>.<span class="LibraryConstant">prototype</span> = <span class="Keyword">new</span> <span class="TypeName">ctor</span>();
-  <span class="LibraryClassType">child</span>.<span class="LibraryConstant">prototype</span>.<span class="FunctionName">constructor</span> = child;
-  <span class="Keyword">if</span> (<span class="Keyword">typeof</span> parent.extended <span class="Keyword">===</span> <span class="String"><span class="String">&quot;</span>function<span class="String">&quot;</span></span>) parent.extended(child);
-  child.__super__ <span class="Keyword">=</span> parent.<span class="LibraryConstant">prototype</span>;
-};
-Animal <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  <span class="Keyword">return</span> <span class="Storage">function</span> <span class="FunctionName">Animal</span>(<span class="FunctionArgument">_arg</span>) {
-    <span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">=</span> _arg;
-    <span class="Keyword">return</span> <span class="Variable">this</span>;
-  };
-})();
-<span class="LibraryClassType">Animal</span>.<span class="LibraryConstant">prototype</span>.<span class="FunctionName">move</span> = <span class="Storage">function</span>(<span class="FunctionArgument">meters</span>) {
-  <span class="Keyword">return</span> <span class="LibraryFunction">alert</span>(<span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span> moved <span class="String">&quot;</span></span> <span class="Keyword">+</span> meters <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span>m.<span class="String">&quot;</span></span>);
-};
-Snake <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  <span class="Keyword">return</span> <span class="Storage">function</span> <span class="FunctionName">Snake</span>() {
-    <span class="Keyword">return</span> Animal.<span class="LibraryFunction">apply</span>(<span class="Variable">this</span>, arguments);
-  };
-})();
-__extends(Snake, Animal);
-<span class="LibraryClassType">Snake</span>.<span class="LibraryConstant">prototype</span>.<span class="FunctionName">move</span> = <span class="Storage">function</span>() {
-  <span class="LibraryFunction">alert</span>(<span class="String"><span class="String">&quot;</span>Slithering...<span class="String">&quot;</span></span>);
-  <span class="Keyword">return</span> Snake.__super__.move.<span class="LibraryFunction">call</span>(<span class="Variable">this</span>, <span class="Number">5</span>);
-};
-Horse <span class="Keyword">=</span> (<span class="Storage">function</span>() {
-  <span class="Keyword">return</span> <span class="Storage">function</span> <span class="FunctionName">Horse</span>() {
-    <span class="Keyword">return</span> Animal.<span class="LibraryFunction">apply</span>(<span class="Variable">this</span>, arguments);
-  };
-})();
-__extends(Horse, Animal);
-<span class="LibraryClassType">Horse</span>.<span class="LibraryConstant">prototype</span>.<span class="FunctionName">move</span> = <span class="Storage">function</span>() {
-  <span class="LibraryFunction">alert</span>(<span class="String"><span class="String">&quot;</span>Galloping...<span class="String">&quot;</span></span>);
-  <span class="Keyword">return</span> Horse.__super__.move.<span class="LibraryFunction">call</span>(<span class="Variable">this</span>, <span class="Number">45</span>);
-};
-sam <span class="Keyword">=</span> <span class="Keyword">new</span> <span class="TypeName">Snake</span>(<span class="String"><span class="String">&quot;</span>Sammy the Python<span class="String">&quot;</span></span>);
-tom <span class="Keyword">=</span> <span class="Keyword">new</span> <span class="TypeName">Horse</span>(<span class="String"><span class="String">&quot;</span>Tommy the Palomino<span class="String">&quot;</span></span>);
-sam.move();
-tom.move();
-</pre><button onclick='javascript: var Animal, Horse, Snake, sam, tom;
-var __extends = function(child, parent) {
-  var ctor = function() {};
-  ctor.prototype = parent.prototype;
-  child.prototype = new ctor();
-  child.prototype.constructor = child;
-  if (typeof parent.extended === "function") parent.extended(child);
-  child.__super__ = parent.prototype;
-};
-Animal = (function() {
-  return function Animal(_arg) {
-    this.name = _arg;
-    return this;
-  };
-})();
-Animal.prototype.move = function(meters) {
-  return alert(this.name + " moved " + meters + "m.");
-};
-Snake = (function() {
-  return function Snake() {
-    return Animal.apply(this, arguments);
-  };
-})();
-__extends(Snake, Animal);
-Snake.prototype.move = function() {
-  alert("Slithering...");
-  return Snake.__super__.move.call(this, 5);
-};
-Horse = (function() {
-  return function Horse() {
-    return Animal.apply(this, arguments);
-  };
-})();
-__extends(Horse, Animal);
-Horse.prototype.move = function() {
-  alert("Galloping...");
-  return Horse.__super__.move.call(this, 45);
-};
-sam = new Snake("Sammy the Python");
-tom = new Horse("Tommy the Palomino");
-sam.move();
-tom.move();;'>run</button><br class='clear' /></div>
-    <p>
-      If structuring your prototypes classically isn't your cup of tea, CoffeeScript
-      provides a couple of lower-level conveniences. The <tt>extends</tt> operator
-      helps with proper prototype setup, <tt>::</tt> gives you
-      quick access to an object's prototype, and <tt>super()</tt>
-      is converted into a call against the immediate ancestor's method of the same name.
-    </p>
-    <div class='code'><pre class="idle"><span class="FunctionName">String::dasherize </span><span class="Keyword">=</span> <span class="Storage">-&gt;</span>
-  <span class="Variable">this</span>.replace <span class="String">/_/g</span>, <span class="String"><span class="String">&quot;</span>-<span class="String">&quot;</span></span>
-</pre><pre class="idle"><span class="LibraryClassType">String</span>.<span class="LibraryConstant">prototype</span>.<span class="FunctionName">dasherize</span> = <span class="Storage">function</span>() {
-  <span class="Keyword">return</span> <span class="Variable">this</span>.<span class="LibraryFunction">replace</span>(<span class="String"><span class="String">/</span>_<span class="String">/</span>g</span>, <span class="String"><span class="String">&quot;</span>-<span class="String">&quot;</span></span>);
-};
-</pre><button onclick='javascript: String.prototype.dasherize = function() {
-  return this.replace(/_/g, "-");
-};;alert("one_two".dasherize());'>run: "one_two".dasherize()</button><br class='clear' /></div>
-    <p>
-      Finally, you may assign Class-level (static) properties within a class
-      definition by using<br /><tt>@property: value</tt>
-    </p>
-
-    <p>
-      <span id="pattern_matching" class="bookmark"></span>
-      <b class="header">Pattern Matching (Destructuring Assignment)</b>
-      To make extracting values from complex arrays and objects more convenient,
-      CoffeeScript implements ECMAScript Harmony's proposed
-      <a href="http://wiki.ecmascript.org/doku.php?id=harmony:destructuring">destructuring assignment</a>
-      syntax. When you assign an array or object literal to a value, CoffeeScript
-      breaks up and matches both sides against each other, assigning the values
-      on the right to the variables on the left. In the simplest case, it can be
-      used for parallel assignment:
-    </p>
-    <div class='code'><pre class="idle">theBait   <span class="Keyword">=</span> <span class="Number">1000</span>
-theSwitch <span class="Keyword">=</span> <span class="Number">0</span>
-
-<span class="Keyword">[</span>theBait, theSwitch<span class="Keyword">] =</span> [theSwitch, theBait]
-</pre><pre class="idle"><span class="Storage">var</span> _ref, theBait, theSwitch;
-theBait <span class="Keyword">=</span> <span class="Number">1000</span>;
-theSwitch <span class="Keyword">=</span> <span class="Number">0</span>;
-_ref <span class="Keyword">=</span> [theSwitch, theBait], theBait <span class="Keyword">=</span> _ref[<span class="Number">0</span>], theSwitch <span class="Keyword">=</span> _ref[<span class="Number">1</span>];
-</pre><button onclick='javascript: var _ref, theBait, theSwitch;
-theBait = 1000;
-theSwitch = 0;
-_ref = [theSwitch, theBait], theBait = _ref[0], theSwitch = _ref[1];;alert(theBait);'>run: theBait</button><br class='clear' /></div>
-    <p>
-      But it's also helpful for dealing with functions that return multiple
-      values.
-    </p>
-    <div class='code'><pre class="idle"><span class="FunctionName">weatherReport </span><span class="Keyword">=</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">location</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span>
-  <span class="Comment"><span class="Comment">#</span> Make an Ajax request to fetch the weather...</span>
-  [location, <span class="Number">72</span>, <span class="String"><span class="String">&quot;</span>Mostly Sunny<span class="String">&quot;</span></span>]
-
-<span class="Keyword">[</span>city, temp, forecast<span class="Keyword">] =</span> weatherReport <span class="String"><span class="String">&quot;</span>Berkeley, CA<span class="String">&quot;</span></span>
-</pre><pre class="idle"><span class="Storage">var</span> _ref, city, forecast, temp, weatherReport;
-<span class="FunctionName">weatherReport</span> = <span class="Storage">function</span>(<span class="FunctionArgument">location</span>) {
-  <span class="Keyword">return</span> [location, <span class="Number">72</span>, <span class="String"><span class="String">&quot;</span>Mostly Sunny<span class="String">&quot;</span></span>];
-};
-_ref <span class="Keyword">=</span> weatherReport(<span class="String"><span class="String">&quot;</span>Berkeley, CA<span class="String">&quot;</span></span>), city <span class="Keyword">=</span> _ref[<span class="Number">0</span>], temp <span class="Keyword">=</span> _ref[<span class="Number">1</span>], forecast <span class="Keyword">=</span> _ref[<span class="Number">2</span>];
-</pre><button onclick='javascript: var _ref, city, forecast, temp, weatherReport;
-weatherReport = function(location) {
-  return [location, 72, "Mostly Sunny"];
-};
-_ref = weatherReport("Berkeley, CA"), city = _ref[0], temp = _ref[1], forecast = _ref[2];;alert(forecast);'>run: forecast</button><br class='clear' /></div>
-    <p>
-      Pattern matching can be used with any depth of array and object nesting,
-      to help pull out deeply nested properties.
-    </p>
-    <div class='code'><pre class="idle">futurists <span class="Keyword">=</span>
-  sculptor: <span class="String"><span class="String">&quot;</span>Umberto Boccioni<span class="String">&quot;</span></span>
-  painter:  <span class="String"><span class="String">&quot;</span>Vladimir Burliuk<span class="String">&quot;</span></span>
-  poet:
-    name:   <span class="String"><span class="String">&quot;</span>F.T. Marinetti<span class="String">&quot;</span></span>
-    address: [
-      <span class="String"><span class="String">&quot;</span>Via Roma 42R<span class="String">&quot;</span></span>
-      <span class="String"><span class="String">&quot;</span>Bellagio, Italy 22021<span class="String">&quot;</span></span>
-    ]
-
-<span class="Keyword">{</span>poet: {name, address: [street, city]}<span class="Keyword">} =</span> futurists
-</pre><pre class="idle"><span class="Storage">var</span> _ref, _ref2, city, futurists, name, street;
-futurists <span class="Keyword">=</span> {
-  sculptor: <span class="String"><span class="String">&quot;</span>Umberto Boccioni<span class="String">&quot;</span></span>,
-  painter: <span class="String"><span class="String">&quot;</span>Vladimir Burliuk<span class="String">&quot;</span></span>,
-  poet: {
-    name: <span class="String"><span class="String">&quot;</span>F.T. Marinetti<span class="String">&quot;</span></span>,
-    address: [<span class="String"><span class="String">&quot;</span>Via Roma 42R<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Bellagio, Italy 22021<span class="String">&quot;</span></span>]
-  }
-};
-_ref <span class="Keyword">=</span> futurists.poet, name <span class="Keyword">=</span> _ref.<span class="LibraryConstant">name</span>, _ref2 <span class="Keyword">=</span> _ref.address, street <span class="Keyword">=</span> _ref2[<span class="Number">0</span>], city <span class="Keyword">=</span> _ref2[<span class="Number">1</span>];
-</pre><button onclick='javascript: var _ref, _ref2, city, futurists, name, street;
-futurists = {
-  sculptor: "Umberto Boccioni",
-  painter: "Vladimir Burliuk",
-  poet: {
-    name: "F.T. Marinetti",
-    address: ["Via Roma 42R", "Bellagio, Italy 22021"]
-  }
-};
-_ref = futurists.poet, name = _ref.name, _ref2 = _ref.address, street = _ref2[0], city = _ref2[1];;alert(name + " — " + street);'>run: name + " — " + street</button><br class='clear' /></div>
-    <p>
-      Pattern matching can even be combined with splats.
-    </p>
-    <div class='code'><pre class="idle">tag <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>&lt;impossible&gt;<span class="String">&quot;</span></span>
-
-<span class="Keyword">[</span>open, contents..., close<span class="Keyword">] =</span> tag.split(<span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span>)
-
-
-
-
-</pre><pre class="idle"><span class="Storage">var</span> _ref, close, contents, open, tag;
-<span class="Storage">var</span> __slice <span class="Keyword">=</span> <span class="LibraryClassType">Array</span>.<span class="LibraryConstant">prototype</span>.slice;
-tag <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>&lt;impossible&gt;<span class="String">&quot;</span></span>;
-_ref <span class="Keyword">=</span> tag.<span class="LibraryFunction">split</span>(<span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span>), open <span class="Keyword">=</span> _ref[<span class="Number">0</span>], contents <span class="Keyword">=</span> __slice.<span class="LibraryFunction">call</span>(_ref, <span class="Number">1</span>, _ref.<span class="LibraryConstant">length</span> <span class="Keyword">-</span> <span class="Number">1</span>), close <span class="Keyword">=</span> _ref[_ref.<span class="LibraryConstant">length</span> <span class="Keyword">-</span> <span class="Number">1</span>];
-</pre><button onclick='javascript: var _ref, close, contents, open, tag;
-var __slice = Array.prototype.slice;
-tag = "<impossible>";
-_ref = tag.split(""), open = _ref[0], contents = __slice.call(_ref, 1, _ref.length - 1), close = _ref[_ref.length - 1];;alert(contents.join(""));'>run: contents.join("")</button><br class='clear' /></div>
-
-    <p>
-      <span id="fat_arrow" class="bookmark"></span>
-      <b class="header">Function binding</b>
-      In JavaScript, the <tt>this</tt> keyword is dynamically scoped to mean the
-      object that the current function is attached to. If you pass a function as
-      as callback, or attach it to a different object, the original value of <tt>this</tt>
-      will be lost. If you're not familiar with this behavior,
-      <a href="http://www.digital-web.com/articles/scope_in_javascript/">this Digital Web article</a>
-      gives a good overview of the quirks.
-    </p>
-    <p>
-      The fat arrow <tt>=&gt;</tt> can be used to both define a function, and to bind
-      it to the current value of <tt>this</tt>, right on the spot. This is helpful
-      when using callback-based libraries like Prototype or jQuery, for creating
-      iterator functions to pass to <tt>each</tt>, or event-handler functions
-      to use with <tt>bind</tt>. Functions created with the fat arrow are able to access
-      properties of the <tt>this</tt> where they're defined.
-    </p>
-    <div class='code'><pre class="idle"><span class="FunctionName">Account </span><span class="Keyword">=</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">customer, cart</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span>
-  <span class="Variable">@customer</span> <span class="Keyword">=</span> customer
-  <span class="Variable">@cart</span> <span class="Keyword">=</span> cart
-
-  $(<span class="String"><span class="String">'</span>.shopping_cart<span class="String">'</span></span>).bind <span class="String"><span class="String">'</span>click<span class="String">'</span></span>, <span class="FunctionArgument">(</span><span class="FunctionArgument">event</span><span class="FunctionArgument">)</span> <span class="Storage">=&gt;</span>
-    <span class="Variable">@customer</span>.purchase <span class="Variable">@cart</span>
-</pre><pre class="idle"><span class="Storage">var</span> Account;
-<span class="Storage">var</span> <span class="FunctionName">__bind</span> = <span class="Storage">function</span>(<span class="FunctionArgument">func, context</span>) {
-  <span class="Keyword">return</span> <span class="Storage">function</span>() { <span class="Keyword">return</span> func.<span class="LibraryFunction">apply</span>(context, arguments); };
-};
-<span class="FunctionName">Account</span> = <span class="Storage">function</span>(<span class="FunctionArgument">customer, cart</span>) {
-  <span class="Variable">this</span>.customer <span class="Keyword">=</span> customer;
-  <span class="Variable">this</span>.cart <span class="Keyword">=</span> cart;
-  <span class="Keyword">return</span> <span class="Keyword">$</span>(<span class="String"><span class="String">'</span>.shopping_cart<span class="String">'</span></span>).bind(<span class="String"><span class="String">'</span>click<span class="String">'</span></span>, __bind(<span class="Storage">function</span>(<span class="LibraryClassType">event</span>) {
-    <span class="Keyword">return</span> <span class="Variable">this</span>.customer.purchase(<span class="Variable">this</span>.cart);
-  }, <span class="Variable">this</span>));
-};
-</pre><br class='clear' /></div>
-    <p>
-      If we had used <tt>-></tt> in the callback above, <tt>@customer</tt> would
-      have referred to the undefined "customer" property of the DOM element,
-      and trying to call <tt>purchase()</tt> on it would have raised an exception.
-    </p>
-
-    <p>
-      <span id="embedded" class="bookmark"></span>
-      <b class="header">Embedded JavaScript</b>
-      Hopefully, you'll never need to use it, but if you ever need to intersperse
-      snippets of JavaScript within your CoffeeScript, you can
-      use backticks to pass it straight through.
-    </p>
-    <div class='code'><pre class="idle">hi <span class="Keyword">=</span> <span class="String"><span class="String">`</span>function() {</span>
-<span class="String">  return [document.title, &quot;Hello JavaScript&quot;].join(&quot;: &quot;);</span>
-<span class="String">}<span class="String">`</span></span>
-
-
-</pre><pre class="idle"><span class="Storage">var</span> hi;
-<span class="FunctionName">hi</span> = <span class="Storage">function</span>() {
-  <span class="Keyword">return</span> [<span class="LibraryClassType">document</span>.<span class="LibraryConstant">title</span>, <span class="String"><span class="String">&quot;</span>Hello JavaScript<span class="String">&quot;</span></span>].<span class="LibraryFunction">join</span>(<span class="String"><span class="String">&quot;</span>: <span class="String">&quot;</span></span>);
-};
-</pre><button onclick='javascript: var hi;
-hi = function() {
-  return [document.title, "Hello JavaScript"].join(": ");
-};;alert(hi());'>run: hi()</button><br class='clear' /></div>
-
-    <p>
-      <span id="switch" class="bookmark"></span>
-      <b class="header">Switch/When/Else</b>
-      <b>Switch</b> statements in JavaScript are a bit awkward. You need to
-      remember to <b>break</b> at the end of every <b>case</b> statement to
-      avoid accidentally falling through to the default case.
-      CoffeeScript prevents accidental fall-through, and can convert the <tt>switch</tt>
-      into a returnable, assignable expression. The format is: <tt>switch</tt> condition,
-      <tt>when</tt> clauses, <tt>else</tt> the default case.
-    </p>
-    <p>
-      As in Ruby, <b>switch</b> statements in CoffeeScript can take multiple
-      values for each <b>when</b> clause. If any of the values match, the clause
-      runs.
-    </p>
-    <div class='code'><pre class="idle"><span class="Keyword">switch</span> day
-  <span class="Keyword">when</span> <span class="String"><span class="String">&quot;</span>Mon<span class="String">&quot;</span></span> <span class="Keyword">then</span> go work
-  <span class="Keyword">when</span> <span class="String"><span class="String">&quot;</span>Tue<span class="String">&quot;</span></span> <span class="Keyword">then</span> go relax
-  <span class="Keyword">when</span> <span class="String"><span class="String">&quot;</span>Thu<span class="String">&quot;</span></span> <span class="Keyword">then</span> go iceFishing
-  <span class="Keyword">when</span> <span class="String"><span class="String">&quot;</span>Fri<span class="String">&quot;</span></span>, <span class="String"><span class="String">&quot;</span>Sat<span class="String">&quot;</span></span>
-    <span class="Keyword">if</span> day <span class="Keyword">is</span> bingoDay
-      go bingo
-      go dancing
-  <span class="Keyword">when</span> <span class="String"><span class="String">&quot;</span>Sun<span class="String">&quot;</span></span> <span class="Keyword">then</span> go church
-  <span class="Keyword">else</span> go work
-</pre><pre class="idle"><span class="Keyword">switch</span> (day) {
-  <span class="Keyword">case</span> <span class="String"><span class="String">&quot;</span>Mon<span class="String">&quot;</span></span>:
-    <span class="LibraryFunction">go</span>(work);
-    <span class="Keyword">break</span>;
-  <span class="Keyword">case</span> <span class="String"><span class="String">&quot;</span>Tue<span class="String">&quot;</span></span>:
-    <span class="LibraryFunction">go</span>(relax);
-    <span class="Keyword">break</span>;
-  <span class="Keyword">case</span> <span class="String"><span class="String">&quot;</span>Thu<span class="String">&quot;</span></span>:
-    <span class="LibraryFunction">go</span>(iceFishing);
-    <span class="Keyword">break</span>;
-  <span class="Keyword">case</span> <span class="String"><span class="String">&quot;</span>Fri<span class="String">&quot;</span></span>:
-  <span class="Keyword">case</span> <span class="String"><span class="String">&quot;</span>Sat<span class="String">&quot;</span></span>:
-    <span class="Keyword">if</span> (day <span class="Keyword">===</span> bingoDay) {
-      <span class="LibraryFunction">go</span>(bingo);
-      <span class="LibraryFunction">go</span>(dancing);
-    }
-    <span class="Keyword">break</span>;
-  <span class="Keyword">case</span> <span class="String"><span class="String">&quot;</span>Sun<span class="String">&quot;</span></span>:
-    <span class="LibraryFunction">go</span>(church);
-    <span class="Keyword">break</span>;
-  <span class="Keyword">default</span>:
-    <span class="LibraryFunction">go</span>(work);
-}
-</pre><br class='clear' /></div>
-
-    <p>
-      <span id="try" class="bookmark"></span>
-      <b class="header">Try/Catch/Finally</b>
-      Try/catch statements are just about the same as JavaScript (although
-      they work as expressions).
-    </p>
-    <div class='code'><pre class="idle"><span class="Keyword">try</span>
-  allHellBreaksLoose()
-  catsAndDogsLivingTogether()
-<span class="Keyword">catch</span> error
-  print error
-<span class="Keyword">finally</span>
-  cleanUp()
-</pre><pre class="idle"><span class="Keyword">try</span> {
-  allHellBreaksLoose();
-  catsAndDogsLivingTogether();
-} <span class="Keyword">catch</span> (error) {
-  <span class="LibraryFunction">print</span>(error);
-} <span class="Keyword">finally</span> {
-  cleanUp();
-}
-</pre><br class='clear' /></div>
-
-    <p>
-      <span id="comparisons" class="bookmark"></span>
-      <b class="header">Chained Comparisons</b>
-      CoffeeScript borrows
-      <a href="http://docs.python.org/reference/expressions.html#notin">chained comparisons</a>
-      from Python &mdash; making it easy to test if a value falls within a
-      certain range.
-    </p>
-    <div class='code'><pre class="idle">cholesterol <span class="Keyword">=</span> <span class="Number">127</span>
-
-healthy <span class="Keyword">=</span> <span class="Number">200</span> <span class="Keyword">&gt;</span> cholesterol <span class="Keyword">&gt;</span> <span class="Number">60</span>
-
-
-</pre><pre class="idle"><span class="Storage">var</span> cholesterol, healthy;
-cholesterol <span class="Keyword">=</span> <span class="Number">127</span>;
-healthy <span class="Keyword">=</span> (<span class="Number">200</span> <span class="Keyword">&gt;</span> cholesterol) <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> (cholesterol <span class="Keyword">&gt;</span> <span class="Number">60</span>);
-</pre><button onclick='javascript: var cholesterol, healthy;
-cholesterol = 127;
-healthy = (200 > cholesterol) && (cholesterol > 60);;alert(healthy);'>run: healthy</button><br class='clear' /></div>
-
-    <p>
-      <span id="interpolation" class="bookmark"></span>
-      <b class="header">String and RegExp Interpolation</b>
-      Ruby-style string interpolation is included in CoffeeScript. Double-quoted
-      strings allow for interpolated values, while single-quoted strings are literal.
-    </p>
-    <div class='code'><pre class="idle">author <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>Wittgenstein<span class="String">&quot;</span></span>
-quote  <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>A picture is a fact. -- <span class="String"><span class="String">#{</span>author<span class="String">}</span></span><span class="String">&quot;</span></span>
-</pre><pre class="idle"><span class="Storage">var</span> author, quote;
-author <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>Wittgenstein<span class="String">&quot;</span></span>;
-quote <span class="Keyword">=</span> (<span class="String"><span class="String">&quot;</span>A picture is a fact. -- <span class="String">&quot;</span></span> <span class="Keyword">+</span> author);
-</pre><button onclick='javascript: var author, quote;
-author = "Wittgenstein";
-quote = ("A picture is a fact. -- " + author);;alert(quote);'>run: quote</button><br class='clear' /></div>
-    <p>
-      And arbitrary expressions can be interpolated by using brackets <tt>#{ ... }</tt><br />
-      Interpolation works the same way within regular expressions.
-    </p>
-    <div class='code'><pre class="idle">sentence <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="String">#{</span> <span class="Number">22</span> <span class="Keyword">/</span> <span class="Number">7</span> <span class="String">}</span></span> is a decent approximation of π<span class="String">&quot;</span></span>
-
-sep   <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>[.<span class="UserDefinedConstant">\\</span>/<span class="UserDefinedConstant">\\</span>- ]<span class="String">&quot;</span></span>
-dates <span class="Keyword">=</span> <span class="String">/\d+#{sep}\d+#{sep}\d+/g</span>
-
-
-</pre><pre class="idle"><span class="Storage">var</span> dates, sentence, sep;
-sentence <span class="Keyword">=</span> (<span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span> <span class="Keyword">+</span> (<span class="Number">22</span> / <span class="Number">7</span>) <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span> is a decent approximation of π<span class="String">&quot;</span></span>);
-sep <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>[.<span class="UserDefinedConstant">\\</span>/<span class="UserDefinedConstant">\\</span>- ]<span class="String">&quot;</span></span>;
-dates <span class="Keyword">=</span><span class="String"> <span class="String">/</span><span class="UserDefinedConstant">\d</span>+#{sep}<span class="UserDefinedConstant">\d</span>+#{sep}<span class="UserDefinedConstant">\d</span>+<span class="String">/</span>g</span>;
-</pre><button onclick='javascript: var dates, sentence, sep;
-sentence = ("" + (22 / 7) + " is a decent approximation of π");
-sep = "[.\\/\\- ]";
-dates = /\d+#{sep}\d+#{sep}\d+/g;;alert(sentence);'>run: sentence</button><br class='clear' /></div>
-
-    <p>
-      <span id="heredocs" class="bookmark"></span>
-      <b class="header">Multiline Strings, Heredocs, and Block Comments</b>
-      Multiline strings are allowed in CoffeeScript.
-    </p>
-    <div class='code'><pre class="idle">mobyDick <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>Call me Ishmael. Some years ago --</span>
-<span class="String"> never mind how long precisely -- having little</span>
-<span class="String"> or no money in my purse, and nothing particular</span>
-<span class="String"> to interest me on shore, I thought I would sail</span>
-<span class="String"> about a little and see the watery part of the</span>
-<span class="String"> world...<span class="String">&quot;</span></span>
-
-
-</pre><pre class="idle"><span class="Storage">var</span> mobyDick;
-mobyDick <span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>Call me Ishmael. Some years ago -- never mind how long precisely -- having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world...<span class="String">&quot;</span></span>;
-</pre><button onclick='javascript: var mobyDick;
-mobyDick = "Call me Ishmael. Some years ago -- never mind how long precisely -- having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world...";;alert(mobyDick);'>run: mobyDick</button><br class='clear' /></div>
-    <p>
-      Heredocs can be used to hold formatted or indentation-sensitive text
-      (or, if you just don't feel like escaping quotes and apostrophes). The
-      indentation level that begins the heredoc is maintained throughout, so
-      you can keep it all aligned with the body of your code.
-    </p>
-    <div class='code'><pre class="idle">html <span class="Keyword">=</span> <span class="String"><span class="String">'''</span></span>
-<span class="String">       &lt;strong&gt;</span>
-<span class="String">         cup of coffeescript</span>
-<span class="String">       &lt;/strong&gt;</span>
-<span class="String">       <span class="String">'''</span></span>
-</pre><pre class="idle"><span class="Storage">var</span> html;
-html <span class="Keyword">=</span> <span class="String"><span class="String">'</span>&lt;strong&gt;<span class="UserDefinedConstant">\n</span>  cup of coffeescript<span class="UserDefinedConstant">\n</span>&lt;/strong&gt;<span class="String">'</span></span>;
-</pre><br class='clear' /></div>
-    <p>
-      Double-quoted heredocs, like double-quoted strings, allow interpolation.
-    </p>
-    <p>
-      Sometimes you'd like to pass a block comment through to the generated
-      JavaScript. For example, when you need to embed a licensing header at
-      the top of a file. Block comments, which mirror the syntax for heredocs,
-      are preserved in the generated code.
-    </p>
-    <div class='code'><pre class="idle"><span class="Comment"><span class="Comment">###</span></span>
-<span class="Comment">CoffeeScript Compiler v0.9.4</span>
-<span class="Comment">Released under the MIT License</span>
-<span class="Comment">###</span>
-</pre><pre class="idle"><span class="Comment"><span class="Comment">/*</span></span>
-<span class="Comment">CoffeeScript Compiler v0.9.4</span>
-<span class="Comment">Released under the MIT License</span>
-<span class="Comment"><span class="Comment">*/</span></span>
-</pre><br class='clear' /></div>
-
-    <h2>
-      <span id="cake" class="bookmark"></span>
-      Cake, and Cakefiles
-    </h2>
-
-    <p>
-      CoffeeScript includes a simple build system similar to
-      <a href="http://www.gnu.org/software/make/">Make</a> and
-      <a href="http://rake.rubyforge.org/">Rake</a>. Naturally,
-      it's called Cake, and is used for the build and test tasks for the CoffeeScript
-      language itself. Tasks are defined in a file named <tt>Cakefile</tt>, and
-      can be invoked by running <tt>cake taskname</tt> from within the directory.
-      To print a list of all the tasks and options, just run <tt>cake</tt>.
-    </p>
-
-    <p>
-      Task definitions are written in CoffeeScript, so you can put arbitrary code
-      in your Cakefile. Define a task with a name, a long description, and the
-      function to invoke when the task is run. If your task takes a command-line
-      option, you can define the option with short and long flags, and it will
-      be made available in the <tt>options</tt> object. Here's a task that uses
-      the Node.js API to rebuild CoffeeScript's parser:
-    </p>
-    <div class='code'><pre class="idle">fs <span class="Keyword">=</span> require <span class="String"><span class="String">'</span>fs<span class="String">'</span></span>
-
-option <span class="String"><span class="String">'</span>-o<span class="String">'</span></span>, <span class="String"><span class="String">'</span>--output [DIR]<span class="String">'</span></span>, <span class="String"><span class="String">'</span>directory for compiled code<span class="String">'</span></span>
-
-task <span class="String"><span class="String">'</span>build:parser<span class="String">'</span></span>, <span class="String"><span class="String">'</span>rebuild the Jison parser<span class="String">'</span></span>, <span class="FunctionArgument">(</span><span class="FunctionArgument">options</span><span class="FunctionArgument">)</span> <span class="Storage">-&gt;</span>
-  require <span class="String"><span class="String">'</span>jison<span class="String">'</span></span>
-  code <span class="Keyword">=</span> require(<span class="String"><span class="String">'</span>./lib/grammar<span class="String">'</span></span>).parser.generate()
-  dir  <span class="Keyword">=</span> options.output <span class="Keyword">or</span> <span class="String"><span class="String">'</span>lib<span class="String">'</span></span>
-  fs.writeFile <span class="String"><span class="String">&quot;</span><span class="String"><span class="String">#{</span>dir<span class="String">}</span></span>/parser.js<span class="String">&quot;</span></span>, code
-</pre><pre class="idle"><span class="Storage">var</span> fs;
-fs <span class="Keyword">=</span> require(<span class="String"><span class="String">'</span>fs<span class="String">'</span></span>);
-option(<span class="String"><span class="String">'</span>-o<span class="String">'</span></span>, <span class="String"><span class="String">'</span>--output [DIR]<span class="String">'</span></span>, <span class="String"><span class="String">'</span>directory for compiled code<span class="String">'</span></span>);
-task(<span class="String"><span class="String">'</span>build:parser<span class="String">'</span></span>, <span class="String"><span class="String">'</span>rebuild the Jison parser<span class="String">'</span></span>, <span class="Storage">function</span>(options) {
-  <span class="Storage">var</span> code, dir;
-  require(<span class="String"><span class="String">'</span>jison<span class="String">'</span></span>);
-  code <span class="Keyword">=</span> require(<span class="String"><span class="String">'</span>./lib/grammar<span class="String">'</span></span>).parser.generate();
-  dir <span class="Keyword">=</span> options.output <span class="Keyword">||</span> <span class="String"><span class="String">'</span>lib<span class="String">'</span></span>;
-  <span class="Keyword">return</span> fs.writeFile(<span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span> <span class="Keyword">+</span> dir <span class="Keyword">+</span> <span class="String"><span class="String">&quot;</span>/parser.js<span class="String">&quot;</span></span>, code);
-});
-</pre><br class='clear' /></div>
-    <p>
-      If you need to invoke one task before another &mdash; for example, running
-      <tt>build</tt> before <tt>test</tt>, you can use the <tt>invoke</tt> function:
-      <tt>invoke 'build'</tt>
-    </p>
-
-    <h2>
-      <span id="scripts" class="bookmark"></span>
-      "text/coffeescript" Script Tags
-    </h2>
-
-    <p>
-      While it's not recommended for serious use, CoffeeScripts may be included
-      directly within the browser using <tt>&lt;script type="text/coffeescript"&gt;</tt>
-      tags. The source includes a compressed and minified version of the compiler
-      (<a href="extras/coffee-script.js">Download current version here, 43k when gzipped</a>)
-      as <tt>extras/coffee-script.js</tt>. Include this file on a page with
-      inline CoffeeScript tags, and it will compile and evaluate them in order.
-    </p>
-
-    <p>
-      In fact, the little bit of glue script that runs "Try CoffeeScript" above,
-      as well as jQuery for the menu, is implemented in just this way.
-      View source and look at the bottom of the page to see the example.
-      Including the script also gives you access to <tt>CoffeeScript.compile()</tt>
-      so you can pop open Firebug and try compiling some strings.
-    </p>
-
-    <p>
-      The usual caveats about CoffeeScript apply &mdash; your inline scripts will
-      run within a closure wrapper, so if you want to expose global variables or
-      functions, attach them to the <tt>window</tt> object.
-    </p>
-
-    <h2>
-      <span id="resources" class="bookmark"></span>
-      Resources
-    </h2>
-
-    <ul>
-      <li>
-        <a href="http://github.com/jashkenas/coffee-script/">Source Code</a><br />
-        Use <tt>bin/coffee</tt> to test your changes,<br />
-        <tt>bin/cake test</tt> to run the test suite,<br />
-        <tt>bin/cake build</tt> to rebuild the CoffeeScript compiler, and <br />
-        <tt>bin/cake build:parser</tt> to regenerate the Jison parser if you're
-        working on the grammar. <br /><br />
-        <tt>git checkout lib &amp;&amp; bin/cake build:full</tt> is a good command to run when you're working
-        on the core language. It'll refresh the lib directory
-        (in case you broke something), build your altered compiler, use that to
-        rebuild itself (a good sanity test) and then run all of the tests. If
-        they pass, there's a good chance you've made a successful change.
-      </li>
-      <li>
-        <a href="http://github.com/jashkenas/coffee-script/issues">CoffeeScript Issues</a><br />
-        Bugs reports, feature requests, and general discussion all belong here.
-      </li>
-      <li>
-        If you'd like to chat, stop by <tt>#coffeescript</tt> on Freenode in the
-        IRC client of your choice, or on
-        <a href="http://webchat.freenode.net/">webchat.freenode.net</a>.
-      </li>
-      <li>
-        <b>yeungda</b>'s <a href="http://github.com/yeungda/jcoffeescript">JCoffeeScript</a>
-        &mdash; A Java Library that uses Rhino to compile CoffeeScript, allowing
-        compilation within Java projects or on systems that Node.js doesn't support.
-      </li>
-      <li>
-        <b>defunkt</b>'s <a href="http://github.com/defunkt/coffee-mode">CoffeeScript Major Mode</a>
-        &mdash; a Emacs major mode that provides syntax highlighting, indentation
-        support, and some bonus commands.
-      </li>
-      <li>
-        <b>jashkenas</b>'s <a href="http://github.com/jashkenas/coffee-script-tmbundle">CoffeeScript TextMate Bundle</a>
-        &mdash; which provides syntax highlighting, snippet expansion, and the
-        ability to run bits of CoffeeScript from within TextMate itself.
-      </li>
-      <li>
-        <b>kchmck</b>'s <a href="http://github.com/kchmck/vim-coffee-script">Vim CoffeeScript</a>
-        &mdash; which adds Vim syntax highlighting and indentation support.
-      </li>
-      <li>
-        <b>wavded</b>'s <a href="http://github.com/wavded/gedit-coffeescript">gedit-coffeescript</a>
-        &mdash; a CoffeeScript syntax highlighter for the gedit text editor.
-      </li>
-      <li>
-        <b>yeungda</b>'s <a href="http://yeungda.github.com/coffeescript-idea/">coffeescript-idea</a>
-        &mdash; a plugin for IntelliJ IDEA and RubyMine providing syntax highlighting.
-      </li>
-      <li>
-        <b>mattly</b>'s <a href="http://github.com/mattly/rack-coffee">rack-coffee</a>
-        &mdash; a small Rack middleware for serving CoffeeScript files as
-        compiled JavaScript on the fly.
-      </li>
-      <li>
-        <b>jnicklas</b>'s <a href="http://github.com/jnicklas/bistro_car">BistroCar</a>
-        &mdash; a plugin that serves and bundles CoffeeScript from within your
-        Rails application.
-      </li>
-      <li>
-        <b>dsc</b>'s <a href="http://github.com/dsc/coffeecup">CoffeeCup</a>
-        &mdash; a Python WSGI middleware that compiles CoffeeScript to JavaScript
-        on-demand during development.
-      </li>
-      <li>
-        <b>sutto</b>'s <a href="http://github.com/Sutto/barista">Barista</a>
-        &mdash; a BistroCar alternative that integrates well with
-        <a href="http://documentcloud.github.com/jammit">Jammit</a> and Rails 3.
-      </li>
-      <li>
-        <b>inem</b> and <b>gerad</b>'s <a href="http://github.com/gerad/coffee-haml-filter">coffee-haml-filter</a>
-        &mdash; a custom filter for rendering CoffeeScript inline within
-        <a href="http://haml-lang.com/">HAML</a> templates.
-      </li>
-      <li>
-        <b>chrislloyd</b>'s <a href="http://github.com/chrislloyd/roast">Roast</a>
-        &mdash; a CoffeeScript compiler plug-in that allows you to include external
-        source files.
-      </li>
-      <li>
-        <b>mauricemach</b>'s <a href="http://github.com/mauricemach/coffeekup">CoffeeKup</a>
-        &mdash; Markup as CoffeeScript. After _why's
-        <a href="http://markaby.github.com/">Markaby</a>.
-      </li>
-      <li>
-        <b>jashkenas</b>'s <a href="http://jashkenas.github.com/docco/">Docco</a>
-        &mdash; a quick-and-dirty literate-programming-style documentation generator
-        for CoffeeScript. Used to produce the annotated source.
-      </li>
-    </ul>
-
-    <h2>
-      <span id="webchat" class="bookmark"></span>
-      Web Chat (IRC)
-    </h2>
-
-    <p>
-      Quick help and advice can usually be found in the CoffeeScript IRC room.
-      Join <tt>#coffeescript</tt> on <tt>irc.freenode.net</tt>, or click the
-      button below to open a webchat session on this page.
-    </p>
-
-    <p>
-      <button id="open_webchat">click to open #coffeescript</button>
-    </p>
-
-    <h2>
-      <span id="change_log" class="bookmark"></span>
-      Change Log
-    </h2>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.4</b>
-      CoffeeScript now uses appropriately-named temporary variables, and recycles
-      their references after use. Added <tt>require.extensions</tt> support for
-      <b>Node.js 0.3</b>. Loading CoffeeScript in the browser now adds just a
-      single <tt>CoffeeScript</tt> object to global scope.
-      Fixes for implicit object and block comment edge cases.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.3</b>
-      CoffeeScript <tt>switch</tt> statements now compile into JS <tt>switch</tt>
-      statements &mdash; they previously compiled into <tt>if/else</tt> chains
-      for JavaScript 1.3 compatibility.
-      Soaking a function invocation is now supported. Users of the RubyMine
-      editor should now be able to use <tt>--watch</tt> mode.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.2</b>
-      Specifying the start and end of a range literal is now optional, eg. <tt>array[3..]</tt>.
-      You can now say <tt>a not instanceof b</tt>.
-      Fixed important bugs with nested significant and non-significant indentation (Issue #637).
-      Added a <tt>--require</tt> flag that allows you to hook into the <tt>coffee</tt> command.
-      Added a custom <tt>jsl.conf</tt> file for our preferred JavaScriptLint setup.
-      Sped up Jison grammar compilation time by flattening rules for operations.
-      Block comments can now be used with JavaScript-minifier-friendly syntax.
-      Added JavaScript's compound assignment bitwise operators. Bugfixes to
-      implicit object literals with leading number and string keys, as the subject
-      of implicit calls, and as part of compound assignment.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.1</b>
-      Bugfix release for <b>0.9.1</b>. Greatly improves the handling of mixed
-      implicit objects, implicit function calls, and implicit indentation.
-      String and regex interpolation is now strictly <tt>#{ ... }</tt> (Ruby style).
-      The compiler now takes a <tt>--require</tt> flag, which specifies scripts
-      to run before compilation.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.9.0</b>
-      The CoffeeScript <b>0.9</b> series is considered to be a release candidate
-      for <b>1.0</b>; let's give her a shakedown cruise. <b>0.9.0</b> introduces a massive
-      backwards-incompatible change: Assignment now uses <tt>=</tt>, and object
-      literals use <tt>:</tt>, as in JavaScript. This allows us to have implicit
-      object literals, and YAML-style object definitions. Half assignments are
-      removed, in favor of <tt>+=</tt>, <tt>or=</tt>, and friends.
-      Interpolation now uses a hash mark <tt>#</tt> instead of the dollar sign
-      <tt>$</tt> &mdash; because dollar signs may be part of a valid JS identifier.
-      Downwards range comprehensions are now safe again, and are optimized to
-      straight for loops when created with integer endpoints.
-      A fast, unguarded form of object comprehension was added:
-      <tt>for all key, value of object</tt>. Mentioning the <tt>super</tt> keyword
-      with no arguments now forwards all arguments passed to the function,
-      as in Ruby. If you extend class <tt>B</tt> from parent class <tt>A</tt>, if
-      <tt>A</tt> has an <tt>extended</tt> method defined, it will be called, passing in <tt>B</tt> &mdash;
-      this enables static inheritance, among other things. Cleaner output for
-      functions bound with the fat arrow. <tt>@variables</tt> can now be used
-      in parameter lists, with the parameter being automatically set as a property
-      on the object &mdash; useful in constructors and setter functions.
-      Constructor functions can now take splats.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.7.2</b>
-      Quick bugfix (right after 0.7.1) for a problem that prevented <tt>coffee</tt>
-      command-line options from being parsed in some circumstances.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.7.1</b>
-      Block-style comments are now passed through and printed as JavaScript block
-      comments -- making them useful for licenses and copyright headers. Better
-      support for running coffee scripts standalone via hashbangs.
-      Improved syntax errors for tokens that are not in the grammar.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.7.0</b>
-      Official CoffeeScript variable style is now camelCase, as in JavaScript.
-      Reserved words are now allowed as object keys, and will be quoted for you.
-      Range comprehensions now generate cleaner code, but you have to specify <tt>by -1</tt>
-      if you'd like to iterate downward. Reporting of syntax errors is greatly
-      improved from the previous release. Running <tt>coffee</tt> with no arguments
-      now launches the REPL, with Readline support. The <tt>&lt;-</tt> bind operator
-      has been removed from CoffeeScript. The <tt>loop</tt> keyword was added,
-      which is equivalent to a <tt>while true</tt> loop. Comprehensions that contain
-      closures will now close over their variables, like the semantics of a <tt>forEach</tt>.
-      You can now use bound function in class definitions (bound to the instance).
-      For consistency, <tt>a in b</tt> is now an array presence check, and <tt>a of b</tt>
-      is an object-key check. Comments are no longer passed through to the generated
-      JavaScript.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.6.2</b>
-      The <tt>coffee</tt> command will now preserve directory structure when
-      compiling a directory full of scripts. Fixed two omissions that were preventing
-      the CoffeeScript compiler from running live within Internet Explorer.
-      There's now a syntax for block comments, similar in spirit to CoffeeScript's heredocs.
-      ECMA Harmony DRY-style pattern matching is now supported, where the name
-      of the property is the same as the name of the value: <tt>{name, length}: func</tt>.
-      Pattern matching is now allowed within comprehension variables. <tt>unless</tt>
-      is now allowed in block form. <tt>until</tt> loops were added, as the inverse
-      of <tt>while</tt> loops. <tt>switch</tt> statements are now allowed without
-      switch object clauses. Compatible
-      with Node.js <b>v0.1.95</b>.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.6.1</b>
-      Upgraded CoffeeScript for compatibility with the new Node.js <b>v0.1.90</b>
-      series.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.6.0</b>
-      Trailing commas are now allowed, a-la Python. Static
-      properties may be assigned directly within class definitions,
-      using <tt>@property</tt> notation.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.6</b>
-      Interpolation can now be used within regular expressions and heredocs, as well as
-      strings. Added the <tt>&lt;-</tt> bind operator.
-      Allowing assignment to half-expressions instead of special <tt>||=</tt>-style
-      operators. The arguments object is no longer automatically converted into
-      an array. After requiring <tt>coffee-script</tt>, Node.js can now directly
-      load <tt>.coffee</tt> files, thanks to <b>registerExtension</b>. Multiple
-      splats can now be used in function calls, arrays, and pattern matching.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.5</b>
-      String interpolation, contributed by
-      <a href="http://github.com/StanAngeloff">Stan Angeloff</a>.
-      Since <tt>--run</tt> has been the default since <b>0.5.3</b>, updating
-      <tt>--stdio</tt> and <tt>--eval</tt> to run by default, pass <tt>--compile</tt>
-      as well if you'd like to print the result.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.4</b>
-      Bugfix that corrects the Node.js global constants <tt>__filename</tt> and
-      <tt>__dirname</tt>. Tweaks for more flexible parsing of nested function
-      literals and improperly-indented comments. Updates for the latest Node.js API.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.3</b>
-      CoffeeScript now has a syntax for defining classes. Many of the core
-      components (Nodes, Lexer, Rewriter, Scope, Optparse) are using them.
-      Cakefiles can use <tt>optparse.coffee</tt> to define options for tasks.
-      <tt>--run</tt> is now the default flag for the <tt>coffee</tt> command,
-      use <tt>--compile</tt> to save JavaScripts. Bugfix for an ambiguity between
-      RegExp literals and chained divisions.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.2</b>
-      Added a compressed version of the compiler for inclusion in web pages as
-      <br  /><tt>extras/coffee-script.js</tt>. It'll automatically run any script tags
-      with type <tt>text/coffeescript</tt> for you. Added a <tt>--stdio</tt> option
-      to the <tt>coffee</tt> command, for piped-in compiles.
-    </p>
-
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.1</b>
-      Improvements to null soaking with the existential operator, including
-      soaks on indexed properties. Added conditions to <tt>while</tt> loops,
-      so you can use them as filters with <tt>when</tt>, in the same manner as
-      comprehensions.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.5.0</b>
-      CoffeeScript 0.5.0 is a major release, While there are no language changes,
-      the Ruby compiler has been removed in favor of a self-hosting
-      compiler written in pure CoffeeScript.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.3.2</b>
-      <tt>@property</tt> is now a shorthand for <tt>this.property</tt>.<br />
-      Switched the default JavaScript engine from Narwhal to Node.js. Pass
-      the <tt>--narwhal</tt> flag if you'd like to continue using it.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.3.0</b>
-      CoffeeScript 0.3 includes major syntax changes:
-      <br />
-      The function symbol was changed to
-      <tt>-></tt>, and the bound function symbol is now <tt>=></tt>.
-      <br />
-      Parameter lists in function definitions must now be wrapped in parentheses.
-      <br />
-      Added property soaking, with the <tt>?.</tt> operator.
-      <br />
-      Made parentheses optional, when invoking functions with arguments.
-      <br />
-      Removed the obsolete block literal syntax.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.6</b>
-      Added Python-style chained comparisons, the conditional existence
-      operator <tt>?=</tt>, and some examples from <i>Beautiful Code</i>.
-      Bugfixes relating to statement-to-expression conversion, arguments-to-array
-      conversion, and the TextMate syntax highlighter.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.5</b>
-      The conditions in switch statements can now take multiple values at once &mdash;
-      If any of them are true, the case will run. Added the long arrow <tt>==></tt>,
-      which defines and immediately binds a function to <tt>this</tt>. While loops can
-      now be used as expressions, in the same way that comprehensions can. Splats
-      can be used within pattern matches to soak up the rest of an array.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.4</b>
-      Added ECMAScript Harmony style destructuring assignment, for dealing with
-      extracting values from nested arrays and objects. Added indentation-sensitive
-      heredocs for nicely formatted strings or chunks of code.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.3</b>
-      Axed the unsatisfactory <tt>ino</tt> keyword, replacing it with <tt>of</tt> for
-      object comprehensions. They now look like: <tt>for prop, value of object</tt>.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.2</b>
-      When performing a comprehension over an object, use <tt>ino</tt>, instead
-      of <tt>in</tt>, which helps us generate smaller, more efficient code at
-      compile time.
-      <br />
-      Added <tt>::</tt> as a shorthand for saying <tt>.prototype.</tt>
-      <br />
-      The "splat" symbol has been changed from a prefix asterisk <tt>*</tt>, to
-      a postfix ellipsis <tt>...</tt>
-      <br />
-      Added JavaScript's <tt>in</tt> operator,
-      empty <tt>return</tt> statements, and empty <tt>while</tt> loops.
-      <br />
-      Constructor functions that start with capital letters now include a
-      safety check to make sure that the new instance of the object is returned.
-      <br />
-      The <tt>extends</tt> keyword now functions identically to <tt>goog.inherits</tt>
-      in Google's Closure Library.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.1</b>
-      Arguments objects are now converted into real arrays when referenced.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.2.0</b>
-      Major release. Significant whitespace. Better statement-to-expression
-      conversion. Splats. Splice literals. Object comprehensions. Blocks.
-      The existential operator. Many thanks to all the folks who posted issues,
-      with special thanks to
-      <a href="http://github.com/liamoc">Liam O'Connor-Davis</a> for whitespace
-      and expression help.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.6</b>
-      Bugfix for running <tt>coffee --interactive</tt> and <tt>--run</tt>
-      from outside of the CoffeeScript directory. Bugfix for nested
-      function/if-statements.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.5</b>
-      Array slice literals and array comprehensions can now both take Ruby-style
-      ranges to specify the start and end. JavaScript variable declaration is
-      now pushed up to the top of the scope, making all assignment statements into
-      expressions. You can use <tt>\</tt> to escape newlines.
-      The <tt>coffee-script</tt> command is now called <tt>coffee</tt>.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.4</b>
-      The official CoffeeScript extension is now <tt>.coffee</tt> instead of
-      <tt>.cs</tt>, which properly belongs to
-      <a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)">C#</a>.
-      Due to popular demand, you can now also use <tt>=</tt> to assign. Unlike
-      JavaScript, <tt>=</tt> can also be used within object literals, interchangeably
-      with <tt>:</tt>. Made a grammatical fix for chained function calls
-      like <tt>func(1)(2)(3)(4)</tt>. Inheritance and super no longer use
-      <tt>__proto__</tt>, so they should be IE-compatible now.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.3</b>
-      The <tt>coffee</tt> command now includes <tt>--interactive</tt>,
-      which launches an interactive CoffeeScript session, and <tt>--run</tt>,
-      which directly compiles and executes a script. Both options depend on a
-      working installation of Narwhal.
-      The <tt>aint</tt> keyword has been replaced by <tt>isnt</tt>, which goes
-      together a little smoother with <tt>is</tt>.
-      Quoted strings are now allowed as identifiers within object literals: eg.
-      <tt>{"5+5": 10}</tt>.
-      All assignment operators now use a colon: <tt>+:</tt>, <tt>-:</tt>,
-      <tt>*:</tt>, etc.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.2</b>
-      Fixed a bug with calling <tt>super()</tt> through more than one level of
-      inheritance, with the re-addition of the <tt>extends</tt> keyword.
-      Added experimental <a href="http://narwhaljs.org/">Narwhal</a>
-      support (as a Tusk package), contributed by
-      <a href="http://tlrobinson.net/">Tom Robinson</a>, including
-      <b>bin/cs</b> as a CoffeeScript REPL and interpreter.
-      New <tt>--no-wrap</tt> option to suppress the safety function
-      wrapper.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.1</b>
-      Added <tt>instanceof</tt> and <tt>typeof</tt> as operators.
-    </p>
-
-    <p>
-      <b class="header" style="margin-top: 20px;">0.1.0</b>
-      Initial CoffeeScript release.
-    </p>
-
-  </div>
-
-  <script type="text/coffeescript">
-
-    # Set up the compilation function, to run when you stop typing.
-    compile_source = ->
-      source = $('#repl_source').val()
-      window.compiled_js = ''
-      try
-        window.compiled_js = CoffeeScript.compile source, wrap: false
-        $('#repl_results').text window.compiled_js
-        $('#error').hide()
-      catch error
-        $('#error').text(error.message).show()
-
-    # Listen for keypresses and recompile.
-    $('#repl_source').keyup -> compile_source()
-
-    # Eval the compiled js.
-    $('button.run').click ->
-      try
-        eval window.compiled_js
-      catch error then alert error
-
-    current_nav = null
-
-    # Helper to hide the menus.
-    close_menus = ->
-      if current_nav
-        current_nav.removeClass 'active'
-        document.body.className = 'minimized'
-      current_nav = null
-
-    # Bind navigation buttons to open the menus.
-    $('.navigation').click (e) ->
-      return if e.target.tagName.toLowerCase() is 'a'
-      if this isnt (current_nav and current_nav[0])
-        close_menus()
-        current_nav = $(this)
-        current_nav.addClass 'active'
-      false
-
-    $(document.body).click -> close_menus()
-
-    $('.navigation .full_screen').click ->
-      document.body.className = 'full_screen'
-
-    $('.navigation .minimize').click ->
-      document.body.className = 'minimized'
-
-    $('#open_webchat').click ->
-      $(this).replaceWith $('<iframe src="http://webchat.freenode.net/?channels=coffeescript" width="625" height="400"></iframe>')
-
-    compile_source()
-
-  </script>
-
-  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
-  <script src="extras/coffee-script.js"></script>
-
-</body>
-</html>
diff --git a/node/node_modules/jade/support/coffee-script/lib/browser.js b/node/node_modules/jade/support/coffee-script/lib/browser.js
deleted file mode 100644 (file)
index c35d5fe..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-(function() {
-  var CoffeeScript, runScripts;
-  CoffeeScript = require('./coffee-script');
-  CoffeeScript.require = require;
-  CoffeeScript.eval = function(code, options) {
-    return eval(CoffeeScript.compile(code, options));
-  };
-  CoffeeScript.run = function(code, options) {
-    ((options != null) ? (options.bare = true) : undefined);
-    return Function(CoffeeScript.compile(code, options))();
-  };
-  if (!(typeof window !== "undefined" && window !== null)) {
-    return;
-  }
-  CoffeeScript.load = function(url, options) {
-    var xhr;
-    xhr = new (window.ActiveXObject || XMLHttpRequest)('Microsoft.XMLHTTP');
-    xhr.open('GET', url, true);
-    if ('overrideMimeType' in xhr) {
-      xhr.overrideMimeType('text/plain');
-    }
-    xhr.onreadystatechange = function() {
-      return xhr.readyState === 4 ? CoffeeScript.run(xhr.responseText, options) : undefined;
-    };
-    return xhr.send(null);
-  };
-  runScripts = function() {
-    var _i, _j, _len, _ref, script;
-    for (_i = 0, _len = (_ref = document.getElementsByTagName('script')).length; _i < _len; _i++) {
-      (function() {
-        var script = _ref[_i];
-        _j = script;
-        return script.type === 'text/coffeescript' ? (script.src ? CoffeeScript.load(script.src) : setTimeout(function() {
-          return CoffeeScript.run(script.innerHTML);
-        })) : undefined;
-      })();
-      script = _j;
-    }
-    return null;
-  };
-  if (window.addEventListener) {
-    addEventListener('DOMContentLoaded', runScripts, false);
-  } else {
-    attachEvent('onload', runScripts);
-  }
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/cake.js b/node/node_modules/jade/support/coffee-script/lib/cake.js
deleted file mode 100755 (executable)
index 770a648..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-(function() {
-  var CoffeeScript, fs, helpers, missingTask, oparse, options, optparse, path, printTasks, switches, tasks;
-  fs = require('fs');
-  path = require('path');
-  helpers = require('./helpers');
-  optparse = require('./optparse');
-  CoffeeScript = require('./coffee-script');
-  tasks = {};
-  options = {};
-  switches = [];
-  oparse = null;
-  helpers.extend(global, {
-    task: function(name, description, action) {
-      var _ref;
-      if (!action) {
-        _ref = [description, action], action = _ref[0], description = _ref[1];
-      }
-      return (tasks[name] = {
-        name: name,
-        description: description,
-        action: action
-      });
-    },
-    option: function(letter, flag, description) {
-      return switches.push([letter, flag, description]);
-    },
-    invoke: function(name) {
-      if (!tasks[name]) {
-        missingTask(name);
-      }
-      return tasks[name].action(options);
-    }
-  });
-  exports.run = function() {
-    return path.exists('Cakefile', function(exists) {
-      var _i, _len, _ref, _result, arg, args;
-      if (!exists) {
-        throw new Error("Cakefile not found in " + (process.cwd()));
-      }
-      args = process.argv.slice(2);
-      CoffeeScript.run(fs.readFileSync('Cakefile').toString(), {
-        fileName: 'Cakefile'
-      });
-      oparse = new optparse.OptionParser(switches);
-      if (!args.length) {
-        return printTasks();
-      }
-      options = oparse.parse(args);
-      _result = [];
-      for (_i = 0, _len = (_ref = options.arguments).length; _i < _len; _i++) {
-        arg = _ref[_i];
-        _result.push(invoke(arg));
-      }
-      return _result;
-    });
-  };
-  printTasks = function() {
-    var _ref, desc, name, spaces, task;
-    puts('');
-    for (name in _ref = tasks) {
-      task = _ref[name];
-      spaces = 20 - name.length;
-      spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
-      desc = task.description ? ("# " + (task.description)) : '';
-      puts("cake " + name + spaces + " " + desc);
-    }
-    return switches.length ? puts(oparse.help()) : undefined;
-  };
-  missingTask = function(task) {
-    puts("No such task: \"" + task + "\"");
-    return process.exit(1);
-  };
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/coffee-script.js b/node/node_modules/jade/support/coffee-script/lib/coffee-script.js
deleted file mode 100755 (executable)
index 7bd422c..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-(function() {
-  var Lexer, compile, fs, lexer, parser, path;
-  path = require('path');
-  Lexer = require('./lexer').Lexer;
-  parser = require('./parser').parser;
-  if (require.extensions) {
-    fs = require('fs');
-    require.extensions['.coffee'] = function(module, filename) {
-      var content;
-      content = compile(fs.readFileSync(filename, 'utf8'));
-      return module._compile(content, filename);
-    };
-  } else if (require.registerExtension) {
-    require.registerExtension('.coffee', function(content) {
-      return compile(content);
-    });
-  }
-  exports.VERSION = '0.9.4';
-  exports.helpers = require('./helpers');
-  exports.compile = (compile = function(code, options) {
-    options || (options = {});
-    try {
-      return (parser.parse(lexer.tokenize(code))).compile(options);
-    } catch (err) {
-      if (options.fileName) {
-        err.message = ("In " + (options.fileName) + ", " + (err.message));
-      }
-      throw err;
-    }
-  });
-  exports.tokens = function(code, options) {
-    return lexer.tokenize(code, options);
-  };
-  exports.nodes = function(code, options) {
-    return parser.parse(lexer.tokenize(code, options));
-  };
-  exports.run = function(code, options) {
-    var root;
-    root = module;
-    while (root.parent) {
-      root = root.parent;
-    }
-    root.filename = options.fileName;
-    if (root.moduleCache) {
-      root.moduleCache = {};
-    }
-    return path.extname(root.filename) !== '.coffee' || require.extensions ? root._compile(exports.compile(code, options), root.filename) : root._compile(code, root.filename);
-  };
-  exports.eval = function(code, options) {
-    var __dirname, __filename;
-    __filename = options.fileName;
-    __dirname = path.dirname(__filename);
-    return eval(exports.compile(code, options));
-  };
-  lexer = new Lexer;
-  parser.lexer = {
-    lex: function() {
-      var token;
-      token = this.tokens[this.pos] || [""];
-      this.pos += 1;
-      this.yylineno = token[2];
-      this.yytext = token[1];
-      return token[0];
-    },
-    setInput: function(tokens) {
-      this.tokens = tokens;
-      return (this.pos = 0);
-    },
-    upcomingInput: function() {
-      return "";
-    }
-  };
-  parser.yy = require('./nodes');
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/command.js b/node/node_modules/jade/support/coffee-script/lib/command.js
deleted file mode 100644 (file)
index 58a2774..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-(function() {
-  var BANNER, CoffeeScript, EventEmitter, SWITCHES, _ref, compileOptions, compileScript, compileScripts, compileStdio, exec, fs, helpers, lint, optionParser, optparse, opts, parseOptions, path, printTokens, sources, spawn, usage, version, watch, writeJs;
-  fs = require('fs');
-  path = require('path');
-  optparse = require('./optparse');
-  CoffeeScript = require('./coffee-script');
-  helpers = require('./helpers');
-  _ref = require('child_process'), spawn = _ref.spawn, exec = _ref.exec;
-  EventEmitter = require('events').EventEmitter;
-  helpers.extend(CoffeeScript, new EventEmitter);
-  global.CoffeeScript = CoffeeScript;
-  BANNER = 'coffee compiles CoffeeScript source files into JavaScript.\n\nUsage:\n  coffee path/to/script.coffee';
-  SWITCHES = [['-c', '--compile', 'compile to JavaScript and save as .js files'], ['-i', '--interactive', 'run an interactive CoffeeScript REPL'], ['-o', '--output [DIR]', 'set the directory for compiled JavaScript'], ['-w', '--watch', 'watch scripts for changes, and recompile'], ['-p', '--print', 'print the compiled JavaScript to stdout'], ['-l', '--lint', 'pipe the compiled JavaScript through JSLint'], ['-s', '--stdio', 'listen for and compile scripts over stdio'], ['-e', '--eval', 'compile a string from the command line'], ['-r', '--require [FILE*]', 'require a library before executing your script'], ['-b', '--bare', 'compile without the top-level function wrapper'], ['-t', '--tokens', 'print the tokens that the lexer produces'], ['-n', '--nodes', 'print the parse tree that Jison produces'], ['-v', '--version', 'display CoffeeScript version'], ['-h', '--help', 'display this help message']];
-  opts = {};
-  sources = [];
-  optionParser = null;
-  exports.run = function() {
-    var flags, separator;
-    parseOptions();
-    if (opts.help) {
-      return usage();
-    }
-    if (opts.version) {
-      return version();
-    }
-    if (opts.interactive) {
-      return require('./repl');
-    }
-    if (opts.stdio) {
-      return compileStdio();
-    }
-    if (opts.eval) {
-      return compileScript('console', sources[0]);
-    }
-    if (!sources.length) {
-      return require('./repl');
-    }
-    separator = sources.indexOf('--');
-    flags = [];
-    if (separator >= 0) {
-      flags = sources.splice(separator + 1);
-      sources.pop();
-    }
-    if (opts.run) {
-      flags = sources.splice(1).concat(flags);
-    }
-    process.ARGV = (process.argv = flags);
-    return compileScripts();
-  };
-  compileScripts = function() {
-    var _i, _j, _len, _ref2, _result, base, compile, source;
-    _result = [];
-    for (_i = 0, _len = (_ref2 = sources).length; _i < _len; _i++) {
-      (function() {
-        var source = _ref2[_i];
-        _j = source;
-        return _result.push((function() {
-          base = source;
-          compile = function(source, topLevel) {
-            return path.exists(source, function(exists) {
-              if (!exists) {
-                throw new Error("File not found: " + source);
-              }
-              return fs.stat(source, function(err, stats) {
-                if (stats.isDirectory()) {
-                  return fs.readdir(source, function(err, files) {
-                    var _k, _len2, _result2, file;
-                    _result2 = [];
-                    for (_k = 0, _len2 = files.length; _k < _len2; _k++) {
-                      file = files[_k];
-                      _result2.push(compile(path.join(source, file)));
-                    }
-                    return _result2;
-                  });
-                } else if (topLevel || path.extname(source) === '.coffee') {
-                  fs.readFile(source, function(err, code) {
-                    return compileScript(source, code.toString(), base);
-                  });
-                  return opts.watch ? watch(source, base) : undefined;
-                }
-              });
-            });
-          };
-          return compile(source, true);
-        })());
-      })();
-      source = _j;
-    }
-    return _result;
-  };
-  compileScript = function(file, input, base) {
-    var _i, _len, _ref2, o, options, req, t, task;
-    o = opts;
-    options = compileOptions(file);
-    if (o.require) {
-      for (_i = 0, _len = (_ref2 = o.require).length; _i < _len; _i++) {
-        req = _ref2[_i];
-        require(helpers.starts(req, '.') ? fs.realpathSync(req) : req);
-      }
-    }
-    try {
-      t = (task = {
-        file: file,
-        input: input,
-        options: options
-      });
-      CoffeeScript.emit('compile', task);
-      if (o.tokens) {
-        return printTokens(CoffeeScript.tokens(t.input));
-      } else if (o.nodes) {
-        return puts(CoffeeScript.nodes(t.input).toString().trim());
-      } else if (o.run) {
-        return CoffeeScript.run(t.input, t.options);
-      } else {
-        t.output = CoffeeScript.compile(t.input, t.options);
-        CoffeeScript.emit('success', task);
-        return o.print ? print(t.output) : (o.compile ? writeJs(t.file, t.output, base) : (o.lint ? lint(t.output) : undefined));
-      }
-    } catch (err) {
-      CoffeeScript.emit('failure', err, task);
-      if (CoffeeScript.listeners('failure').length) {
-        return;
-      }
-      if (o.watch) {
-        return puts(err.message);
-      }
-      error(err.stack);
-      return process.exit(1);
-    }
-  };
-  compileStdio = function() {
-    var code, stdin;
-    code = '';
-    stdin = process.openStdin();
-    stdin.on('data', function(buffer) {
-      return buffer ? code += buffer.toString() : undefined;
-    });
-    return stdin.on('end', function() {
-      return compileScript('stdio', code);
-    });
-  };
-  watch = function(source, base) {
-    return fs.watchFile(source, {
-      persistent: true,
-      interval: 500
-    }, function(curr, prev) {
-      if (curr.size === prev.size && curr.mtime.getTime() === prev.mtime.getTime()) {
-        return;
-      }
-      return fs.readFile(source, function(err, code) {
-        if (err) {
-          throw err;
-        }
-        return compileScript(source, code.toString(), base);
-      });
-    });
-  };
-  writeJs = function(source, js, base) {
-    var baseDir, compile, dir, filename, jsPath, srcDir;
-    filename = path.basename(source, path.extname(source)) + '.js';
-    srcDir = path.dirname(source);
-    baseDir = srcDir.substring(base.length);
-    dir = opts.output ? path.join(opts.output, baseDir) : srcDir;
-    jsPath = path.join(dir, filename);
-    compile = function() {
-      if (js.length <= 0) {
-        js = ' ';
-      }
-      return fs.writeFile(jsPath, js, function(err) {
-        return opts.compile && opts.watch ? puts("Compiled " + source) : undefined;
-      });
-    };
-    return path.exists(dir, function(exists) {
-      return exists ? compile() : exec("mkdir -p " + dir, compile);
-    });
-  };
-  lint = function(js) {
-    var conf, jsl, printIt;
-    printIt = function(buffer) {
-      return puts(buffer.toString().trim());
-    };
-    conf = __dirname + '/../extras/jsl.conf';
-    jsl = spawn('jsl', ['-nologo', '-stdin', '-conf', conf]);
-    jsl.stdout.on('data', printIt);
-    jsl.stderr.on('data', printIt);
-    jsl.stdin.write(js);
-    return jsl.stdin.end();
-  };
-  printTokens = function(tokens) {
-    var _i, _len, _ref2, _result, strings, tag, token, value;
-    strings = (function() {
-      _result = [];
-      for (_i = 0, _len = tokens.length; _i < _len; _i++) {
-        token = tokens[_i];
-        _result.push((function() {
-          _ref2 = [token[0], token[1].toString().replace(/\n/, '\\n')], tag = _ref2[0], value = _ref2[1];
-          return "[" + tag + " " + value + "]";
-        })());
-      }
-      return _result;
-    })();
-    return puts(strings.join(' '));
-  };
-  parseOptions = function() {
-    var o;
-    optionParser = new optparse.OptionParser(SWITCHES, BANNER);
-    o = (opts = optionParser.parse(process.argv.slice(2)));
-    o.compile || (o.compile = !!o.output);
-    o.run = !(o.compile || o.print || o.lint);
-    o.print = !!(o.print || (o.eval || o.stdio && o.compile));
-    return (sources = o.arguments);
-  };
-  compileOptions = function(fileName) {
-    return {
-      fileName: fileName,
-      bare: opts.bare
-    };
-  };
-  usage = function() {
-    puts(optionParser.help());
-    return process.exit(0);
-  };
-  version = function() {
-    puts("CoffeeScript version " + (CoffeeScript.VERSION));
-    return process.exit(0);
-  };
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/grammar.js b/node/node_modules/jade/support/coffee-script/lib/grammar.js
deleted file mode 100644 (file)
index e038a74..0000000
+++ /dev/null
@@ -1,622 +0,0 @@
-(function() {
-  var Parser, _i, _j, _len, _len2, _ref, _result, alt, alternatives, grammar, name, o, operators, token, tokens, unwrap;
-  var __hasProp = Object.prototype.hasOwnProperty;
-  Parser = require('jison').Parser;
-  unwrap = /function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/;
-  o = function(patternString, action, options) {
-    var match;
-    if (!action) {
-      return [patternString, '$$ = $1;', options];
-    }
-    action = (match = (action + '').match(unwrap)) ? match[1] : ("(" + action + "())");
-    action = action.replace(/\bnew (\w+)\b/g, 'new yy.$1').replace(/Expressions\.wrap/g, 'yy.Expressions.wrap');
-    return [patternString, ("$$ = " + action + ";"), options];
-  };
-  grammar = {
-    Root: [
-      o("", function() {
-        return new Expressions;
-      }), o("TERMINATOR", function() {
-        return new Expressions;
-      }), o("Body"), o("Block TERMINATOR")
-    ],
-    Body: [
-      o("Line", function() {
-        return Expressions.wrap([$1]);
-      }), o("Body TERMINATOR Line", function() {
-        return $1.push($3);
-      }), o("Body TERMINATOR")
-    ],
-    Line: [o("Expression"), o("Statement")],
-    Statement: [
-      o("Return"), o("Throw"), o("BREAK", function() {
-        return new Literal($1);
-      }), o("CONTINUE", function() {
-        return new Literal($1);
-      }), o("DEBUGGER", function() {
-        return new Literal($1);
-      })
-    ],
-    Expression: [o("Value"), o("Invocation"), o("Code"), o("Operation"), o("Assign"), o("If"), o("Try"), o("While"), o("For"), o("Switch"), o("Extends"), o("Class"), o("Existence"), o("Comment")],
-    Block: [
-      o("INDENT Body OUTDENT", function() {
-        return $2;
-      }), o("INDENT OUTDENT", function() {
-        return new Expressions;
-      }), o("TERMINATOR Comment", function() {
-        return Expressions.wrap([$2]);
-      })
-    ],
-    Identifier: [
-      o("IDENTIFIER", function() {
-        return new Literal($1);
-      })
-    ],
-    AlphaNumeric: [
-      o("NUMBER", function() {
-        return new Literal($1);
-      }), o("STRING", function() {
-        return new Literal($1);
-      })
-    ],
-    Literal: [
-      o("AlphaNumeric"), o("JS", function() {
-        return new Literal($1);
-      }), o("REGEX", function() {
-        return new Literal($1);
-      }), o("BOOL", function() {
-        return new Literal($1);
-      })
-    ],
-    Assign: [
-      o("Assignable = Expression", function() {
-        return new Assign($1, $3);
-      }), o("Assignable = INDENT Expression OUTDENT", function() {
-        return new Assign($1, $4);
-      })
-    ],
-    AssignObj: [
-      o("Identifier", function() {
-        return new Value($1);
-      }), o("AlphaNumeric"), o("ThisProperty"), o("Identifier : Expression", function() {
-        return new Assign(new Value($1), $3, 'object');
-      }), o("AlphaNumeric : Expression", function() {
-        return new Assign(new Value($1), $3, 'object');
-      }), o("Identifier : INDENT Expression OUTDENT", function() {
-        return new Assign(new Value($1), $4, 'object');
-      }), o("AlphaNumeric : INDENT Expression OUTDENT", function() {
-        return new Assign(new Value($1), $4, 'object');
-      }), o("Comment")
-    ],
-    Return: [
-      o("RETURN Expression", function() {
-        return new Return($2);
-      }), o("RETURN", function() {
-        return new Return;
-      })
-    ],
-    Comment: [
-      o("HERECOMMENT", function() {
-        return new Comment($1);
-      })
-    ],
-    Existence: [
-      o("Expression ?", function() {
-        return new Existence($1);
-      })
-    ],
-    Code: [
-      o("PARAM_START ParamList PARAM_END FuncGlyph Block", function() {
-        return new Code($2, $5, $4);
-      }), o("FuncGlyph Block", function() {
-        return new Code([], $2, $1);
-      })
-    ],
-    FuncGlyph: [
-      o("->", function() {
-        return 'func';
-      }), o("=>", function() {
-        return 'boundfunc';
-      })
-    ],
-    OptComma: [o(''), o(',')],
-    ParamList: [
-      o("", function() {
-        return [];
-      }), o("Param", function() {
-        return [$1];
-      }), o("ParamList , Param", function() {
-        return $1.concat($3);
-      })
-    ],
-    Param: [
-      o("PARAM", function() {
-        return new Literal($1);
-      }), o("@ PARAM", function() {
-        return new Param($2, true);
-      }), o("PARAM ...", function() {
-        return new Param($1, false, true);
-      }), o("@ PARAM ...", function() {
-        return new Param($2, true, true);
-      })
-    ],
-    Splat: [
-      o("Expression ...", function() {
-        return new Splat($1);
-      })
-    ],
-    SimpleAssignable: [
-      o("Identifier", function() {
-        return new Value($1);
-      }), o("Value Accessor", function() {
-        return $1.push($2);
-      }), o("Invocation Accessor", function() {
-        return new Value($1, [$2]);
-      }), o("ThisProperty")
-    ],
-    Assignable: [
-      o("SimpleAssignable"), o("Array", function() {
-        return new Value($1);
-      }), o("Object", function() {
-        return new Value($1);
-      })
-    ],
-    Value: [
-      o("Assignable"), o("Literal", function() {
-        return new Value($1);
-      }), o("Parenthetical", function() {
-        return new Value($1);
-      }), o("Range", function() {
-        return new Value($1);
-      }), o("This")
-    ],
-    Accessor: [
-      o("PROPERTY_ACCESS Identifier", function() {
-        return new Accessor($2);
-      }), o("PROTOTYPE_ACCESS Identifier", function() {
-        return new Accessor($2, 'prototype');
-      }), o("::", function() {
-        return new Accessor(new Literal('prototype'));
-      }), o("SOAK_ACCESS Identifier", function() {
-        return new Accessor($2, 'soak');
-      }), o("Index"), o("Slice", function() {
-        return new Slice($1);
-      })
-    ],
-    Index: [
-      o("INDEX_START Expression INDEX_END", function() {
-        return new Index($2);
-      }), o("INDEX_SOAK Index", function() {
-        $2.soakNode = true;
-        return $2;
-      }), o("INDEX_PROTO Index", function() {
-        $2.proto = true;
-        return $2;
-      })
-    ],
-    Object: [
-      o("{ AssignList OptComma }", function() {
-        return new ObjectLiteral($2);
-      })
-    ],
-    AssignList: [
-      o("", function() {
-        return [];
-      }), o("AssignObj", function() {
-        return [$1];
-      }), o("AssignList , AssignObj", function() {
-        return $1.concat($3);
-      }), o("AssignList OptComma TERMINATOR AssignObj", function() {
-        return $1.concat($4);
-      }), o("AssignList OptComma INDENT AssignList OptComma OUTDENT", function() {
-        return $1.concat($4);
-      })
-    ],
-    Class: [
-      o("CLASS SimpleAssignable", function() {
-        return new Class($2);
-      }), o("CLASS SimpleAssignable EXTENDS Value", function() {
-        return new Class($2, $4);
-      }), o("CLASS SimpleAssignable INDENT ClassBody OUTDENT", function() {
-        return new Class($2, null, $4);
-      }), o("CLASS SimpleAssignable EXTENDS Value INDENT ClassBody OUTDENT", function() {
-        return new Class($2, $4, $6);
-      }), o("CLASS INDENT ClassBody OUTDENT", function() {
-        return new Class('__temp__', null, $3);
-      }), o("CLASS", function() {
-        return new Class('__temp__', null, new Expressions);
-      }), o("CLASS EXTENDS Value", function() {
-        return new Class('__temp__', $3, new Expressions);
-      }), o("CLASS EXTENDS Value INDENT ClassBody OUTDENT", function() {
-        return new Class('__temp__', $3, $5);
-      })
-    ],
-    ClassAssign: [
-      o("AssignObj", function() {
-        return $1;
-      }), o("ThisProperty : Expression", function() {
-        return new Assign(new Value($1), $3, 'this');
-      }), o("ThisProperty : INDENT Expression OUTDENT", function() {
-        return new Assign(new Value($1), $4, 'this');
-      })
-    ],
-    ClassBody: [
-      o("", function() {
-        return [];
-      }), o("ClassAssign", function() {
-        return [$1];
-      }), o("ClassBody TERMINATOR ClassAssign", function() {
-        return $1.concat($3);
-      }), o("{ ClassBody }", function() {
-        return $2;
-      })
-    ],
-    Extends: [
-      o("SimpleAssignable EXTENDS Value", function() {
-        return new Extends($1, $3);
-      })
-    ],
-    Invocation: [
-      o("Value OptFuncExist Arguments", function() {
-        return new Call($1, $3, $2);
-      }), o("Invocation OptFuncExist Arguments", function() {
-        return new Call($1, $3, $2);
-      }), o("SUPER", function() {
-        return new Call('super', [new Splat(new Literal('arguments'))]);
-      }), o("SUPER Arguments", function() {
-        return new Call('super', $2);
-      })
-    ],
-    OptFuncExist: [
-      o("", function() {
-        return false;
-      }), o("FUNC_EXIST", function() {
-        return true;
-      })
-    ],
-    Arguments: [
-      o("CALL_START CALL_END", function() {
-        return [];
-      }), o("CALL_START ArgList OptComma CALL_END", function() {
-        return $2;
-      })
-    ],
-    This: [
-      o("THIS", function() {
-        return new Value(new Literal('this'));
-      }), o("@", function() {
-        return new Value(new Literal('this'));
-      })
-    ],
-    RangeDots: [
-      o("..", function() {
-        return 'inclusive';
-      }), o("...", function() {
-        return 'exclusive';
-      })
-    ],
-    ThisProperty: [
-      o("@ Identifier", function() {
-        return new Value(new Literal('this'), [new Accessor($2)], 'this');
-      })
-    ],
-    Range: [
-      o("[ Expression RangeDots Expression ]", function() {
-        return new Range($2, $4, $3);
-      })
-    ],
-    Slice: [
-      o("INDEX_START Expression RangeDots Expression INDEX_END", function() {
-        return new Range($2, $4, $3);
-      }), o("INDEX_START Expression RangeDots INDEX_END", function() {
-        return new Range($2, null, $3);
-      }), o("INDEX_START RangeDots Expression INDEX_END", function() {
-        return new Range(null, $3, $2);
-      })
-    ],
-    Array: [
-      o("[ ]", function() {
-        return new ArrayLiteral([]);
-      }), o("[ ArgList OptComma ]", function() {
-        return new ArrayLiteral($2);
-      })
-    ],
-    ArgList: [
-      o("Arg", function() {
-        return [$1];
-      }), o("ArgList , Arg", function() {
-        return $1.concat($3);
-      }), o("ArgList OptComma TERMINATOR Arg", function() {
-        return $1.concat($4);
-      }), o("INDENT ArgList OptComma OUTDENT", function() {
-        return $2;
-      }), o("ArgList OptComma INDENT ArgList OptComma OUTDENT", function() {
-        return $1.concat($4);
-      })
-    ],
-    Arg: [o("Expression"), o("Splat")],
-    SimpleArgs: [
-      o("Expression"), o("SimpleArgs , Expression", function() {
-        return [].concat($1, $3);
-      })
-    ],
-    Try: [
-      o("TRY Block", function() {
-        return new Try($2);
-      }), o("TRY Block Catch", function() {
-        return new Try($2, $3[0], $3[1]);
-      }), o("TRY Block FINALLY Block", function() {
-        return new Try($2, null, null, $4);
-      }), o("TRY Block Catch FINALLY Block", function() {
-        return new Try($2, $3[0], $3[1], $5);
-      })
-    ],
-    Catch: [
-      o("CATCH Identifier Block", function() {
-        return [$2, $3];
-      })
-    ],
-    Throw: [
-      o("THROW Expression", function() {
-        return new Throw($2);
-      })
-    ],
-    Parenthetical: [
-      o("( Expression )", function() {
-        return new Parens($2);
-      }), o("( )", function() {
-        return new Parens(new Literal(''));
-      })
-    ],
-    WhileSource: [
-      o("WHILE Expression", function() {
-        return new While($2);
-      }), o("WHILE Expression WHEN Expression", function() {
-        return new While($2, {
-          guard: $4
-        });
-      }), o("UNTIL Expression", function() {
-        return new While($2, {
-          invert: true
-        });
-      }), o("UNTIL Expression WHEN Expression", function() {
-        return new While($2, {
-          invert: true,
-          guard: $4
-        });
-      })
-    ],
-    While: [
-      o("WhileSource Block", function() {
-        return $1.addBody($2);
-      }), o("Statement WhileSource", function() {
-        return $2.addBody(Expressions.wrap([$1]));
-      }), o("Expression WhileSource", function() {
-        return $2.addBody(Expressions.wrap([$1]));
-      }), o("Loop", function() {
-        return $1;
-      })
-    ],
-    Loop: [
-      o("LOOP Block", function() {
-        return new While(new Literal('true')).addBody($2);
-      }), o("LOOP Expression", function() {
-        return new While(new Literal('true')).addBody(Expressions.wrap([$2]));
-      })
-    ],
-    For: [
-      o("Statement ForBody", function() {
-        return new For($1, $2, $2.vars[0], $2.vars[1]);
-      }), o("Expression ForBody", function() {
-        return new For($1, $2, $2.vars[0], $2.vars[1]);
-      }), o("ForBody Block", function() {
-        return new For($2, $1, $1.vars[0], $1.vars[1]);
-      })
-    ],
-    ForBody: [
-      o("FOR Range", function() {
-        return {
-          source: new Value($2),
-          vars: []
-        };
-      }), o("ForStart ForSource", function() {
-        $2.raw = $1.raw;
-        $2.vars = $1;
-        return $2;
-      })
-    ],
-    ForStart: [
-      o("FOR ForVariables", function() {
-        return $2;
-      }), o("FOR ALL ForVariables", function() {
-        $3.raw = true;
-        return $3;
-      })
-    ],
-    ForValue: [
-      o("Identifier"), o("Array", function() {
-        return new Value($1);
-      }), o("Object", function() {
-        return new Value($1);
-      })
-    ],
-    ForVariables: [
-      o("ForValue", function() {
-        return [$1];
-      }), o("ForValue , ForValue", function() {
-        return [$1, $3];
-      })
-    ],
-    ForSource: [
-      o("FORIN Expression", function() {
-        return {
-          source: $2
-        };
-      }), o("FOROF Expression", function() {
-        return {
-          source: $2,
-          object: true
-        };
-      }), o("FORIN Expression WHEN Expression", function() {
-        return {
-          source: $2,
-          guard: $4
-        };
-      }), o("FOROF Expression WHEN Expression", function() {
-        return {
-          source: $2,
-          guard: $4,
-          object: true
-        };
-      }), o("FORIN Expression BY Expression", function() {
-        return {
-          source: $2,
-          step: $4
-        };
-      }), o("FORIN Expression WHEN Expression BY Expression", function() {
-        return {
-          source: $2,
-          guard: $4,
-          step: $6
-        };
-      }), o("FORIN Expression BY Expression WHEN Expression", function() {
-        return {
-          source: $2,
-          step: $4,
-          guard: $6
-        };
-      })
-    ],
-    Switch: [
-      o("SWITCH Expression INDENT Whens OUTDENT", function() {
-        return new Switch($2, $4);
-      }), o("SWITCH Expression INDENT Whens ELSE Block OUTDENT", function() {
-        return new Switch($2, $4, $6);
-      }), o("SWITCH INDENT Whens OUTDENT", function() {
-        return new Switch(null, $3);
-      }), o("SWITCH INDENT Whens ELSE Block OUTDENT", function() {
-        return new Switch(null, $3, $5);
-      })
-    ],
-    Whens: [
-      o("When"), o("Whens When", function() {
-        return $1.concat($2);
-      })
-    ],
-    When: [
-      o("LEADING_WHEN SimpleArgs Block", function() {
-        return [[$2, $3]];
-      }), o("LEADING_WHEN SimpleArgs Block TERMINATOR", function() {
-        return [[$2, $3]];
-      })
-    ],
-    IfBlock: [
-      o("IF Expression Block", function() {
-        return new If($2, $3);
-      }), o("UNLESS Expression Block", function() {
-        return new If($2, $3, {
-          invert: true
-        });
-      }), o("IfBlock ELSE IF Expression Block", function() {
-        return $1.addElse(new If($4, $5));
-      }), o("IfBlock ELSE Block", function() {
-        return $1.addElse($3);
-      })
-    ],
-    If: [
-      o("IfBlock"), o("Statement POST_IF Expression", function() {
-        return new If($3, Expressions.wrap([$1]), {
-          statement: true
-        });
-      }), o("Expression POST_IF Expression", function() {
-        return new If($3, Expressions.wrap([$1]), {
-          statement: true
-        });
-      }), o("Statement POST_UNLESS Expression", function() {
-        return new If($3, Expressions.wrap([$1]), {
-          statement: true,
-          invert: true
-        });
-      }), o("Expression POST_UNLESS Expression", function() {
-        return new If($3, Expressions.wrap([$1]), {
-          statement: true,
-          invert: true
-        });
-      })
-    ],
-    Operation: [
-      o("UNARY Expression", function() {
-        return new Op($1, $2);
-      }), o("- Expression", function() {
-        return new Op('-', $2);
-      }, {
-        prec: 'UNARY'
-      }), o("+ Expression", function() {
-        return new Op('+', $2);
-      }, {
-        prec: 'UNARY'
-      }), o("-- SimpleAssignable", function() {
-        return new Op('--', $2);
-      }), o("++ SimpleAssignable", function() {
-        return new Op('++', $2);
-      }), o("SimpleAssignable --", function() {
-        return new Op('--', $1, null, true);
-      }), o("SimpleAssignable ++", function() {
-        return new Op('++', $1, null, true);
-      }), o("Expression + Expression", function() {
-        return new Op('+', $1, $3);
-      }), o("Expression - Expression", function() {
-        return new Op('-', $1, $3);
-      }), o("Expression == Expression", function() {
-        return new Op('==', $1, $3);
-      }), o("Expression != Expression", function() {
-        return new Op('!=', $1, $3);
-      }), o("Expression MATH Expression", function() {
-        return new Op($2, $1, $3);
-      }), o("Expression SHIFT Expression", function() {
-        return new Op($2, $1, $3);
-      }), o("Expression COMPARE Expression", function() {
-        return new Op($2, $1, $3);
-      }), o("Expression LOGIC Expression", function() {
-        return new Op($2, $1, $3);
-      }), o("SimpleAssignable COMPOUND_ASSIGN Expression", function() {
-        return new Op($2, $1, $3);
-      }), o("SimpleAssignable COMPOUND_ASSIGN INDENT Expression OUTDENT", function() {
-        return new Op($2, $1, $4);
-      }), o("Expression RELATION Expression", function() {
-        return $2.charAt(0) === '!' ? ($2 === '!in' ? new Op('!', new In($1, $3)) : new Op('!', new Parens(new Op($2.slice(1), $1, $3)))) : ($2 === 'in' ? new In($1, $3) : new Op($2, $1, $3));
-      })
-    ]
-  };
-  operators = [["left", 'CALL_START', 'CALL_END'], ["nonassoc", '++', '--'], ["left", '?'], ["right", 'UNARY'], ["left", 'MATH'], ["left", '+', '-'], ["left", 'SHIFT'], ["left", 'COMPARE'], ["left", 'RELATION'], ["left", '==', '!='], ["left", 'LOGIC'], ["right", 'COMPOUND_ASSIGN'], ["left", '.'], ["nonassoc", 'INDENT', 'OUTDENT'], ["right", 'WHEN', 'LEADING_WHEN', 'FORIN', 'FOROF', 'BY', 'THROW'], ["right", 'IF', 'UNLESS', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS', 'EXTENDS'], ["right", '=', ':', 'RETURN'], ["right", '->', '=>', 'UNLESS', 'POST_IF', 'POST_UNLESS']];
-  tokens = [];
-  for (name in grammar) {
-    if (!__hasProp.call(grammar, name)) continue;
-    alternatives = grammar[name];
-    grammar[name] = (function() {
-      _result = [];
-      for (_i = 0, _len = alternatives.length; _i < _len; _i++) {
-        alt = alternatives[_i];
-        _result.push((function() {
-          for (_j = 0, _len2 = (_ref = alt[0].split(' ')).length; _j < _len2; _j++) {
-            token = _ref[_j];
-            if (!grammar[token]) {
-              tokens.push(token);
-            }
-          }
-          if (name === 'Root') {
-            alt[1] = ("return " + (alt[1]));
-          }
-          return alt;
-        })());
-      }
-      return _result;
-    })();
-  }
-  exports.parser = new Parser({
-    tokens: tokens.join(' '),
-    bnf: grammar,
-    operators: operators.reverse(),
-    startSymbol: 'Root'
-  });
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/helpers.js b/node/node_modules/jade/support/coffee-script/lib/helpers.js
deleted file mode 100644 (file)
index 5983bf6..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-(function() {
-  var extend, flatten, indexOf;
-  indexOf = (exports.indexOf = Array.indexOf || (Array.prototype.indexOf ? function(array, item, from) {
-    return array.indexOf(item, from);
-  } : function(array, item, from) {
-    var _len, index, other;
-    for (index = 0, _len = array.length; index < _len; index++) {
-      other = array[index];
-      if (other === item && (!from || (from <= index))) {
-        return index;
-      }
-    }
-    return -1;
-  }));
-  exports.include = function(list, value) {
-    return indexOf(list, value) >= 0;
-  };
-  exports.starts = function(string, literal, start) {
-    return literal === string.substr(start, literal.length);
-  };
-  exports.ends = function(string, literal, back) {
-    var len;
-    len = literal.length;
-    return literal === string.substr(string.length - len - (back || 0), len);
-  };
-  exports.compact = function(array) {
-    var _i, _len, _result, item;
-    _result = [];
-    for (_i = 0, _len = array.length; _i < _len; _i++) {
-      item = array[_i];
-      if (item) {
-        _result.push(item);
-      }
-    }
-    return _result;
-  };
-  exports.count = function(string, letter) {
-    var num, pos;
-    num = (pos = 0);
-    while (pos = 1 + string.indexOf(letter, pos)) {
-      num++;
-    }
-    return num;
-  };
-  exports.merge = function(options, overrides) {
-    return extend(extend({}, options), overrides);
-  };
-  extend = (exports.extend = function(object, properties) {
-    var key, val;
-    for (key in properties) {
-      val = properties[key];
-      object[key] = val;
-    }
-    return object;
-  });
-  exports.flatten = (flatten = function(array) {
-    var _i, _len, element, flattened;
-    flattened = [];
-    for (_i = 0, _len = array.length; _i < _len; _i++) {
-      element = array[_i];
-      if (element instanceof Array) {
-        flattened = flattened.concat(flatten(element));
-      } else {
-        flattened.push(element);
-      }
-    }
-    return flattened;
-  });
-  exports.del = function(obj, key) {
-    var val;
-    val = obj[key];
-    delete obj[key];
-    return val;
-  };
-  exports.last = function(array, back) {
-    return array[array.length - (back || 0) - 1];
-  };
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/index.js b/node/node_modules/jade/support/coffee-script/lib/index.js
deleted file mode 100644 (file)
index dc5ab13..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-(function() {
-  var _ref, key, val;
-  var __hasProp = Object.prototype.hasOwnProperty;
-  for (key in _ref = require('./coffee-script')) {
-    if (!__hasProp.call(_ref, key)) continue;
-    val = _ref[key];
-    (exports[key] = val);
-  }
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/lexer.js b/node/node_modules/jade/support/coffee-script/lib/lexer.js
deleted file mode 100644 (file)
index ce25616..0000000
+++ /dev/null
@@ -1,638 +0,0 @@
-(function() {
-  var ASSIGNED, BOOL, CALLABLE, CODE, COFFEE_ALIASES, COFFEE_KEYWORDS, COMMENT, COMPARE, COMPOUND_ASSIGN, HEREDOC, HEREDOC_INDENT, HEREGEX, HEREGEX_OMIT, IDENTIFIER, INDEXABLE, JSTOKEN, JS_FORBIDDEN, JS_KEYWORDS, LEADING_SPACES, LINE_BREAK, LOGIC, Lexer, MATH, MULTILINER, MULTI_DENT, NEXT_CHARACTER, NEXT_ELLIPSIS, NOT_REGEX, NO_NEWLINE, NUMBER, OPERATOR, REGEX, RELATION, RESERVED, Rewriter, SHIFT, SIMPLESTR, TRAILING_SPACES, UNARY, WHITESPACE, _ref, compact, count, include, last, op, starts;
-  Rewriter = require('./rewriter').Rewriter;
-  _ref = require('./helpers'), include = _ref.include, count = _ref.count, starts = _ref.starts, compact = _ref.compact, last = _ref.last;
-  exports.Lexer = (function() {
-    Lexer = (function() {
-      function Lexer() {
-        return this;
-      };
-      return Lexer;
-    })();
-    Lexer.prototype.tokenize = function(code, options) {
-      var o;
-      code = code.replace(/\r/g, '').replace(TRAILING_SPACES, '');
-      o = options || {};
-      this.code = code;
-      this.i = 0;
-      this.line = o.line || 0;
-      this.indent = 0;
-      this.indebt = 0;
-      this.outdebt = 0;
-      this.seenFor = false;
-      this.indents = [];
-      this.tokens = [];
-      while (this.chunk = code.slice(this.i)) {
-        this.identifierToken() || this.commentToken() || this.whitespaceToken() || this.lineToken() || this.heredocToken() || this.stringToken() || this.numberToken() || this.regexToken() || this.jsToken() || this.literalToken();
-      }
-      this.closeIndentation();
-      if (o.rewrite === false) {
-        return this.tokens;
-      }
-      return (new Rewriter).rewrite(this.tokens);
-    };
-    Lexer.prototype.identifierToken = function() {
-      var colon, forcedIdentifier, id, input, match, tag;
-      if (!(match = IDENTIFIER.exec(this.chunk))) {
-        return false;
-      }
-      input = match[0], id = match[1], colon = match[2];
-      this.i += input.length;
-      if (id === 'all' && this.tag() === 'FOR') {
-        this.token('ALL', id);
-        return true;
-      }
-      forcedIdentifier = colon || this.tagAccessor();
-      tag = 'IDENTIFIER';
-      if (include(JS_KEYWORDS, id) || !forcedIdentifier && include(COFFEE_KEYWORDS, id)) {
-        tag = id.toUpperCase();
-        if (tag === 'WHEN' && include(LINE_BREAK, this.tag())) {
-          tag = 'LEADING_WHEN';
-        } else if (tag === 'FOR') {
-          this.seenFor = true;
-        } else if (include(UNARY, tag)) {
-          tag = 'UNARY';
-        } else if (include(RELATION, tag)) {
-          if (tag !== 'INSTANCEOF' && this.seenFor) {
-            this.seenFor = false;
-            tag = 'FOR' + tag;
-          } else {
-            tag = 'RELATION';
-            if (this.value() === '!') {
-              this.tokens.pop();
-              id = '!' + id;
-            }
-          }
-        }
-      }
-      if (include(JS_FORBIDDEN, id)) {
-        if (forcedIdentifier) {
-          tag = 'IDENTIFIER';
-          id = new String(id);
-          id.reserved = true;
-        } else if (include(RESERVED, id)) {
-          this.identifierError(id);
-        }
-      }
-      if (!forcedIdentifier) {
-        if (COFFEE_ALIASES.hasOwnProperty(id)) {
-          tag = (id = COFFEE_ALIASES[id]);
-        }
-        if (id === '!') {
-          tag = 'UNARY';
-        } else if (include(LOGIC, id)) {
-          tag = 'LOGIC';
-        } else if (include(BOOL, tag)) {
-          id = tag.toLowerCase();
-          tag = 'BOOL';
-        }
-      }
-      this.token(tag, id);
-      if (colon) {
-        this.token(':', ':');
-      }
-      return true;
-    };
-    Lexer.prototype.numberToken = function() {
-      var match, number;
-      if (!(match = NUMBER.exec(this.chunk))) {
-        return false;
-      }
-      number = match[0];
-      if (this.tag() === '.' && number.charAt(0) === '.') {
-        return false;
-      }
-      this.i += number.length;
-      this.token('NUMBER', number);
-      return true;
-    };
-    Lexer.prototype.stringToken = function() {
-      var match, string;
-      switch (this.chunk.charAt(0)) {
-        case "'":
-          if (!(match = SIMPLESTR.exec(this.chunk))) {
-            return false;
-          }
-          this.token('STRING', (string = match[0]).replace(MULTILINER, '\\\n'));
-          break;
-        case '"':
-          if (!(string = this.balancedString(this.chunk, [['"', '"'], ['#{', '}']]))) {
-            return false;
-          }
-          if (0 < string.indexOf('#{', 1)) {
-            this.interpolateString(string.slice(1, -1));
-          } else {
-            this.token('STRING', this.escapeLines(string));
-          }
-          break;
-        default:
-          return false;
-      }
-      this.line += count(string, '\n');
-      this.i += string.length;
-      return true;
-    };
-    Lexer.prototype.heredocToken = function() {
-      var doc, heredoc, match, quote;
-      if (!(match = HEREDOC.exec(this.chunk))) {
-        return false;
-      }
-      heredoc = match[0];
-      quote = heredoc.charAt(0);
-      doc = this.sanitizeHeredoc(match[2], {
-        quote: quote,
-        indent: null
-      });
-      if (quote === '"' && (0 <= doc.indexOf('#{'))) {
-        this.interpolateString(doc, {
-          heredoc: true
-        });
-      } else {
-        this.token('STRING', this.makeString(doc, quote, true));
-      }
-      this.line += count(heredoc, '\n');
-      this.i += heredoc.length;
-      return true;
-    };
-    Lexer.prototype.commentToken = function() {
-      var comment, here, match;
-      if (!(match = this.chunk.match(COMMENT))) {
-        return false;
-      }
-      comment = match[0], here = match[1];
-      this.line += count(comment, '\n');
-      this.i += comment.length;
-      if (here) {
-        this.token('HERECOMMENT', this.sanitizeHeredoc(here, {
-          herecomment: true,
-          indent: Array(this.indent + 1).join(' ')
-        }));
-        this.token('TERMINATOR', '\n');
-      }
-      return true;
-    };
-    Lexer.prototype.jsToken = function() {
-      var match, script;
-      if (!(this.chunk.charAt(0) === '`' && (match = JSTOKEN.exec(this.chunk)))) {
-        return false;
-      }
-      this.token('JS', (script = match[0]).slice(1, -1));
-      this.i += script.length;
-      return true;
-    };
-    Lexer.prototype.regexToken = function() {
-      var match, regex;
-      if (this.chunk.charAt(0) !== '/') {
-        return false;
-      }
-      if (match = HEREGEX.exec(this.chunk)) {
-        return this.heregexToken(match);
-      }
-      if (include(NOT_REGEX, this.tag())) {
-        return false;
-      }
-      if (!(match = REGEX.exec(this.chunk))) {
-        return false;
-      }
-      regex = match[0];
-      this.token('REGEX', regex === '//' ? '/(?:)/' : regex);
-      this.i += regex.length;
-      return true;
-    };
-    Lexer.prototype.heregexToken = function(match) {
-      var _i, _len, _ref2, _ref3, _ref4, _this, body, flags, heregex, re, tag, tokens, value;
-      heregex = match[0], body = match[1], flags = match[2];
-      this.i += heregex.length;
-      if (0 > body.indexOf('#{')) {
-        re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/');
-        this.token('REGEX', "/" + (re || '(?:)') + "/" + flags);
-        return true;
-      }
-      this.token('IDENTIFIER', 'RegExp');
-      this.tokens.push(['CALL_START', '(']);
-      tokens = [];
-      for (_i = 0, _len = (_ref2 = this.interpolateString(body, {
-        regex: true
-      })).length; _i < _len; _i++) {
-        _ref3 = _ref2[_i], tag = _ref3[0], value = _ref3[1];
-        if (tag === 'TOKENS') {
-          tokens.push.apply(tokens, value);
-        } else {
-          if (!(value = value.replace(HEREGEX_OMIT, ''))) {
-            continue;
-          }
-          value = value.replace(/\\/g, '\\\\');
-          tokens.push(['STRING', this.makeString(value, '"', true)]);
-        }
-        tokens.push(['+', '+']);
-      }
-      tokens.pop();
-      if ((((_ref4 = tokens[0]) != null) ? _ref4[0] : undefined) !== 'STRING') {
-        this.tokens.push(['STRING', '""'], ['+', '+']);
-      }
-      (_this = this.tokens).push.apply(_this, tokens);
-      if (flags) {
-        this.tokens.push([',', ','], ['STRING', '"' + flags + '"']);
-      }
-      this.token(')', ')');
-      return true;
-    };
-    Lexer.prototype.lineToken = function() {
-      var diff, indent, match, nextCharacter, noNewlines, prev, size;
-      if (!(match = MULTI_DENT.exec(this.chunk))) {
-        return false;
-      }
-      indent = match[0];
-      this.line += count(indent, '\n');
-      this.i += indent.length;
-      prev = last(this.tokens, 1);
-      size = indent.length - 1 - indent.lastIndexOf('\n');
-      nextCharacter = NEXT_CHARACTER.exec(this.chunk)[1];
-      noNewlines = ((nextCharacter === '.' || nextCharacter === ',') && !NEXT_ELLIPSIS.test(this.chunk)) || this.unfinished();
-      if (size - this.indebt === this.indent) {
-        if (noNewlines) {
-          return this.suppressNewlines();
-        }
-        return this.newlineToken(indent);
-      } else if (size > this.indent) {
-        if (noNewlines) {
-          this.indebt = size - this.indent;
-          return this.suppressNewlines();
-        }
-        diff = size - this.indent + this.outdebt;
-        this.token('INDENT', diff);
-        this.indents.push(diff);
-        this.outdebt = (this.indebt = 0);
-      } else {
-        this.indebt = 0;
-        this.outdentToken(this.indent - size, noNewlines);
-      }
-      this.indent = size;
-      return true;
-    };
-    Lexer.prototype.outdentToken = function(moveOut, noNewlines, close) {
-      var dent, len;
-      while (moveOut > 0) {
-        len = this.indents.length - 1;
-        if (this.indents[len] === undefined) {
-          moveOut = 0;
-        } else if (this.indents[len] === this.outdebt) {
-          moveOut -= this.outdebt;
-          this.outdebt = 0;
-        } else if (this.indents[len] < this.outdebt) {
-          this.outdebt -= this.indents[len];
-          moveOut -= this.indents[len];
-        } else {
-          dent = this.indents.pop() - this.outdebt;
-          moveOut -= dent;
-          this.outdebt = 0;
-          this.token('OUTDENT', dent);
-        }
-      }
-      if (dent) {
-        this.outdebt -= moveOut;
-      }
-      if (!(this.tag() === 'TERMINATOR' || noNewlines)) {
-        this.token('TERMINATOR', '\n');
-      }
-      return true;
-    };
-    Lexer.prototype.whitespaceToken = function() {
-      var match, prev;
-      if (!(match = WHITESPACE.exec(this.chunk))) {
-        return false;
-      }
-      prev = last(this.tokens);
-      if (prev) {
-        prev.spaced = true;
-      }
-      this.i += match[0].length;
-      return true;
-    };
-    Lexer.prototype.newlineToken = function(newlines) {
-      if (this.tag() !== 'TERMINATOR') {
-        this.token('TERMINATOR', '\n');
-      }
-      return true;
-    };
-    Lexer.prototype.suppressNewlines = function() {
-      if (this.value() === '\\') {
-        this.tokens.pop();
-      }
-      return true;
-    };
-    Lexer.prototype.literalToken = function() {
-      var _ref2, match, prev, tag, value;
-      if (match = OPERATOR.exec(this.chunk)) {
-        value = match[0];
-        if (CODE.test(value)) {
-          this.tagParameters();
-        }
-      } else {
-        value = this.chunk.charAt(0);
-      }
-      this.i += value.length;
-      tag = value;
-      prev = last(this.tokens);
-      if (value === '=' && prev) {
-        if (!prev[1].reserved && include(JS_FORBIDDEN, prev[1])) {
-          this.assignmentError();
-        }
-        if (((_ref2 = prev[1]) === '||' || _ref2 === '&&')) {
-          prev[0] = 'COMPOUND_ASSIGN';
-          prev[1] += '=';
-          return true;
-        }
-      }
-      if (';' === value) {
-        tag = 'TERMINATOR';
-      } else if (include(LOGIC, value)) {
-        tag = 'LOGIC';
-      } else if (include(MATH, value)) {
-        tag = 'MATH';
-      } else if (include(COMPARE, value)) {
-        tag = 'COMPARE';
-      } else if (include(COMPOUND_ASSIGN, value)) {
-        tag = 'COMPOUND_ASSIGN';
-      } else if (include(UNARY, value)) {
-        tag = 'UNARY';
-      } else if (include(SHIFT, value)) {
-        tag = 'SHIFT';
-      } else if (value === '?' && ((prev != null) ? prev.spaced : undefined)) {
-        tag = 'LOGIC';
-      } else if (prev && !prev.spaced) {
-        if (value === '(' && include(CALLABLE, prev[0])) {
-          if (prev[0] === '?') {
-            prev[0] = 'FUNC_EXIST';
-          }
-          tag = 'CALL_START';
-        } else if (value === '[' && include(INDEXABLE, prev[0])) {
-          tag = 'INDEX_START';
-          switch (prev[0]) {
-            case '?':
-              prev[0] = 'INDEX_SOAK';
-              break;
-            case '::':
-              prev[0] = 'INDEX_PROTO';
-              break;
-          }
-        }
-      }
-      this.token(tag, value);
-      return true;
-    };
-    Lexer.prototype.tagAccessor = function() {
-      var prev;
-      if (!(prev = last(this.tokens)) || prev.spaced) {
-        return false;
-      }
-      if (prev[1] === '::') {
-        this.tag(0, 'PROTOTYPE_ACCESS');
-      } else if (prev[1] === '.' && this.value(1) !== '.') {
-        if (this.tag(1) === '?') {
-          this.tag(0, 'SOAK_ACCESS');
-          this.tokens.splice(-2, 1);
-        } else {
-          this.tag(0, 'PROPERTY_ACCESS');
-        }
-      } else {
-        return prev[0] === '@';
-      }
-      return true;
-    };
-    Lexer.prototype.sanitizeHeredoc = function(doc, options) {
-      var _ref2, attempt, herecomment, indent, match;
-      indent = options.indent, herecomment = options.herecomment;
-      if (herecomment && 0 > doc.indexOf('\n')) {
-        return doc;
-      }
-      if (!herecomment) {
-        while (match = HEREDOC_INDENT.exec(doc)) {
-          attempt = match[1];
-          if (indent === null || (0 < (_ref2 = attempt.length)) && (_ref2 < indent.length)) {
-            indent = attempt;
-          }
-        }
-      }
-      if (indent) {
-        doc = doc.replace(RegExp("\\n" + indent, "g"), '\n');
-      }
-      if (!herecomment) {
-        doc = doc.replace(/^\n/, '');
-      }
-      return doc;
-    };
-    Lexer.prototype.tagParameters = function() {
-      var i, tok;
-      if (this.tag() !== ')') {
-        return;
-      }
-      i = this.tokens.length;
-      while (tok = this.tokens[--i]) {
-        switch (tok[0]) {
-          case 'IDENTIFIER':
-            tok[0] = 'PARAM';
-            break;
-          case ')':
-            tok[0] = 'PARAM_END';
-            break;
-          case '(':
-          case 'CALL_START':
-            tok[0] = 'PARAM_START';
-            return true;
-        }
-      }
-      return true;
-    };
-    Lexer.prototype.closeIndentation = function() {
-      return this.outdentToken(this.indent);
-    };
-    Lexer.prototype.identifierError = function(word) {
-      throw SyntaxError("Reserved word \"" + word + "\" on line " + (this.line + 1));
-    };
-    Lexer.prototype.assignmentError = function() {
-      throw SyntaxError("Reserved word \"" + (this.value()) + "\" on line " + (this.line + 1) + " can't be assigned");
-    };
-    Lexer.prototype.balancedString = function(str, delimited, options) {
-      var _i, _len, close, i, levels, open, pair, slen;
-      options || (options = {});
-      levels = [];
-      i = 0;
-      slen = str.length;
-      while (i < slen) {
-        if (levels.length && str.charAt(i) === '\\') {
-          i += 1;
-        } else {
-          for (_i = 0, _len = delimited.length; _i < _len; _i++) {
-            pair = delimited[_i];
-            open = pair[0], close = pair[1];
-            if (levels.length && starts(str, close, i) && last(levels) === pair) {
-              levels.pop();
-              i += close.length - 1;
-              if (!levels.length) {
-                i += 1;
-              }
-              break;
-            }
-            if (starts(str, open, i)) {
-              levels.push(pair);
-              i += open.length - 1;
-              break;
-            }
-          }
-        }
-        if (!levels.length) {
-          break;
-        }
-        i += 1;
-      }
-      if (levels.length) {
-        throw SyntaxError("Unterminated " + (levels.pop()[0]) + " starting on line " + (this.line + 1));
-      }
-      return !i ? false : str.slice(0, i);
-    };
-    Lexer.prototype.interpolateString = function(str, options) {
-      var _len, _ref2, _ref3, _this, expr, heredoc, i, inner, interpolated, letter, nested, pi, regex, tag, tokens, value;
-      _ref2 = options || (options = {}), heredoc = _ref2.heredoc, regex = _ref2.regex;
-      tokens = [];
-      pi = 0;
-      i = -1;
-      while (letter = str.charAt(i += 1)) {
-        if (letter === '\\') {
-          i += 1;
-          continue;
-        }
-        if (!(letter === '#' && str.charAt(i + 1) === '{' && (expr = this.balancedString(str.slice(i + 1), [['{', '}']])))) {
-          continue;
-        }
-        if (pi < i) {
-          tokens.push(['TO_BE_STRING', str.slice(pi, i)]);
-        }
-        inner = expr.slice(1, -1).replace(LEADING_SPACES, '').replace(TRAILING_SPACES, '');
-        if (inner.length) {
-          nested = new Lexer().tokenize(inner, {
-            line: this.line,
-            rewrite: false
-          });
-          nested.pop();
-          if (nested.length > 1) {
-            nested.unshift(['(', '(']);
-            nested.push([')', ')']);
-          }
-          tokens.push(['TOKENS', nested]);
-        }
-        i += expr.length;
-        pi = i + 1;
-      }
-      if ((i > pi) && (pi < str.length)) {
-        tokens.push(['TO_BE_STRING', str.slice(pi)]);
-      }
-      if (regex) {
-        return tokens;
-      }
-      if (!tokens.length) {
-        return this.token('STRING', '""');
-      }
-      if (tokens[0][0] !== 'TO_BE_STRING') {
-        tokens.unshift(['', '']);
-      }
-      if (interpolated = tokens.length > 1) {
-        this.token('(', '(');
-      }
-      for (i = 0, _len = tokens.length; i < _len; i++) {
-        _ref3 = tokens[i], tag = _ref3[0], value = _ref3[1];
-        if (i) {
-          this.token('+', '+');
-        }
-        if (tag === 'TOKENS') {
-          (_this = this.tokens).push.apply(_this, value);
-        } else {
-          this.token('STRING', this.makeString(value, '"', heredoc));
-        }
-      }
-      if (interpolated) {
-        this.token(')', ')');
-      }
-      return tokens;
-    };
-    Lexer.prototype.token = function(tag, value) {
-      return this.tokens.push([tag, value, this.line]);
-    };
-    Lexer.prototype.tag = function(index, tag) {
-      var tok;
-      return (tok = last(this.tokens, index)) && ((tag != null) ? (tok[0] = tag) : tok[0]);
-    };
-    Lexer.prototype.value = function(index, val) {
-      var tok;
-      return (tok = last(this.tokens, index)) && ((val != null) ? (tok[1] = val) : tok[1]);
-    };
-    Lexer.prototype.unfinished = function() {
-      var prev, value;
-      return (prev = last(this.tokens, 1)) && prev[0] !== '.' && (value = this.value()) && !value.reserved && NO_NEWLINE.test(value) && !CODE.test(value) && !ASSIGNED.test(this.chunk);
-    };
-    Lexer.prototype.escapeLines = function(str, heredoc) {
-      return str.replace(MULTILINER, heredoc ? '\\n' : '');
-    };
-    Lexer.prototype.makeString = function(body, quote, heredoc) {
-      if (!body) {
-        return quote + quote;
-      }
-      body = body.replace(/\\([\s\S])/g, function(match, contents) {
-        return (contents === '\n' || contents === quote) ? contents : match;
-      });
-      body = body.replace(RegExp("" + quote, "g"), '\\$&');
-      return quote + this.escapeLines(body, heredoc) + quote;
-    };
-    return Lexer;
-  })();
-  JS_KEYWORDS = ['true', 'false', 'null', 'this', 'new', 'delete', 'typeof', 'in', 'instanceof', 'return', 'throw', 'break', 'continue', 'debugger', 'if', 'else', 'switch', 'for', 'while', 'try', 'catch', 'finally', 'class', 'extends', 'super'];
-  COFFEE_KEYWORDS = ['then', 'unless', 'until', 'loop', 'of', 'by', 'when'];
-  for (op in (COFFEE_ALIASES = {
-    and: '&&',
-    or: '||',
-    is: '==',
-    isnt: '!=',
-    not: '!',
-    yes: 'TRUE',
-    no: 'FALSE',
-    on: 'TRUE',
-    off: 'FALSE'
-  })) {
-    COFFEE_KEYWORDS.push(op);
-  }
-  RESERVED = ['case', 'default', 'do', 'function', 'var', 'void', 'with', 'const', 'let', 'enum', 'export', 'import', 'native', '__hasProp', '__extends', '__slice'];
-  JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED);
-  IDENTIFIER = /^([$A-Za-z_][$\w]*)([^\n\S]*:(?!:))?/;
-  NUMBER = /^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?/i;
-  HEREDOC = /^("""|''')([\s\S]*?)(?:\n[ \t]*)?\1/;
-  OPERATOR = /^(?:-[-=>]?|\+[+=]?|\.\.\.?|[*&|\/%=<>^:!?]+)/;
-  WHITESPACE = /^[ \t]+/;
-  COMMENT = /^###([^#][\s\S]*?)(?:###[ \t]*\n|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/;
-  CODE = /^[-=]>/;
-  MULTI_DENT = /^(?:\n[ \t]*)+/;
-  SIMPLESTR = /^'[^\\']*(?:\\.[^\\']*)*'/;
-  JSTOKEN = /^`[^\\`]*(?:\\.[^\\`]*)*`/;
-  REGEX = /^\/(?!\s)[^[\/\n\\]*(?:(?:\\[\s\S]|\[[^\]\n\\]*(?:\\[\s\S][^\]\n\\]*)*])[^[\/\n\\]*)*\/[imgy]{0,4}(?![A-Za-z])/;
-  HEREGEX = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?![A-Za-z])/;
-  HEREGEX_OMIT = /\s+(?:#.*)?/g;
-  MULTILINER = /\n/g;
-  HEREDOC_INDENT = /\n+([ \t]*)/g;
-  ASSIGNED = /^\s*@?[$A-Za-z_][$\w]*[ \t]*?[:=][^:=>]/;
-  NEXT_CHARACTER = /^\s*(\S?)/;
-  NEXT_ELLIPSIS = /^\s*\.\.\.?/;
-  LEADING_SPACES = /^\s+/;
-  TRAILING_SPACES = /\s+$/;
-  NO_NEWLINE = /^(?:[-+*&|\/%=<>!.\\][<>=&|]*|and|or|is(?:nt)?|n(?:ot|ew)|delete|typeof|instanceof)$/;
-  COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='];
-  UNARY = ['UMINUS', 'UPLUS', '!', '!!', '~', 'NEW', 'TYPEOF', 'DELETE'];
-  LOGIC = ['&', '|', '^', '&&', '||'];
-  SHIFT = ['<<', '>>', '>>>'];
-  COMPARE = ['<=', '<', '>', '>='];
-  MATH = ['*', '/', '%'];
-  RELATION = ['IN', 'OF', 'INSTANCEOF'];
-  BOOL = ['TRUE', 'FALSE', 'NULL'];
-  NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', '++', '--', ']'];
-  CALLABLE = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER'];
-  INDEXABLE = CALLABLE.concat('NUMBER', 'BOOL');
-  LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR'];
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/nodes.js b/node/node_modules/jade/support/coffee-script/lib/nodes.js
deleted file mode 100644 (file)
index 93d8012..0000000
+++ /dev/null
@@ -1,1981 +0,0 @@
-(function() {
-  var Accessor, ArrayLiteral, Assign, Base, Call, Class, Closure, Code, Comment, Existence, Expressions, Extends, For, IDENTIFIER, IS_STRING, If, In, Index, Literal, NO, NUMBER, ObjectLiteral, Op, Param, Parens, Push, Range, Return, SIMPLENUM, Scope, Slice, Splat, Switch, TAB, THIS, TRAILING_WHITESPACE, Throw, Try, UTILITIES, Value, While, YES, _ref, compact, del, ends, flatten, include, last, merge, starts, utility;
-  var __extends = function(child, parent) {
-    function ctor() { this.constructor = child; }
-    ctor.prototype = parent.prototype;
-    child.prototype = new ctor;
-    if (typeof parent.extended === "function") parent.extended(child);
-    child.__super__ = parent.prototype;
-  };
-  Scope = require('./scope').Scope;
-  _ref = require('./helpers'), compact = _ref.compact, flatten = _ref.flatten, merge = _ref.merge, del = _ref.del, include = _ref.include, starts = _ref.starts, ends = _ref.ends, last = _ref.last;
-  YES = function() {
-    return true;
-  };
-  NO = function() {
-    return false;
-  };
-  THIS = function() {
-    return this;
-  };
-  exports.Base = (function() {
-    Base = (function() {
-      function Base() {
-        this.tags = {};
-        return this;
-      };
-      return Base;
-    })();
-    Base.prototype.compile = function(o) {
-      var closure, code, top;
-      this.options = o ? merge(o) : {};
-      this.tab = o.indent;
-      top = this.topSensitive() ? this.options.top : del(this.options, 'top');
-      closure = this.isStatement(o) && !this.isPureStatement() && !top && !this.options.asStatement && !(this instanceof Comment);
-      code = closure ? this.compileClosure(this.options) : this.compileNode(this.options);
-      return code;
-    };
-    Base.prototype.compileClosure = function(o) {
-      o.sharedScope = o.scope;
-      if (this.containsPureStatement()) {
-        throw new Error('cannot include a pure statement in an expression.');
-      }
-      return Closure.wrap(this).compile(o);
-    };
-    Base.prototype.compileReference = function(o, options) {
-      var _len, compiled, i, node, pair, reference;
-      pair = (function() {
-        if (!this.isComplex()) {
-          return [this, this];
-        } else {
-          reference = new Literal(o.scope.freeVariable('ref'));
-          compiled = new Assign(reference, this);
-          return [compiled, reference];
-        }
-      }).call(this);
-      if (((options != null) ? options.precompile : undefined)) {
-        for (i = 0, _len = pair.length; i < _len; i++) {
-          node = pair[i];
-          (pair[i] = node.compile(o));
-        }
-      }
-      return pair;
-    };
-    Base.prototype.idt = function(tabs) {
-      var idt, num;
-      idt = this.tab || '';
-      num = (tabs || 0) + 1;
-      while (num -= 1) {
-        idt += TAB;
-      }
-      return idt;
-    };
-    Base.prototype.makeReturn = function() {
-      return new Return(this);
-    };
-    Base.prototype.contains = function(block) {
-      var contains;
-      contains = false;
-      this.traverseChildren(false, function(node) {
-        if (block(node)) {
-          contains = true;
-          return false;
-        }
-      });
-      return contains;
-    };
-    Base.prototype.containsType = function(type) {
-      return this instanceof type || this.contains(function(node) {
-        return node instanceof type;
-      });
-    };
-    Base.prototype.containsPureStatement = function() {
-      return this.isPureStatement() || this.contains(function(node) {
-        return node.isPureStatement();
-      });
-    };
-    Base.prototype.traverse = function(block) {
-      return this.traverseChildren(true, block);
-    };
-    Base.prototype.toString = function(idt, override) {
-      var _i, _len, _ref2, _result, child, children, klass;
-      idt || (idt = '');
-      children = (function() {
-        _result = [];
-        for (_i = 0, _len = (_ref2 = this.collectChildren()).length; _i < _len; _i++) {
-          child = _ref2[_i];
-          _result.push(child.toString(idt + TAB));
-        }
-        return _result;
-      }).call(this).join('');
-      klass = override || this.constructor.name + (this.soakNode ? '?' : '');
-      return '\n' + idt + klass + children;
-    };
-    Base.prototype.eachChild = function(func) {
-      var _i, _j, _len, _len2, _ref2, _ref3, _result, attr, child;
-      if (!this.children) {
-        return;
-      }
-      _result = [];
-      for (_i = 0, _len = (_ref2 = this.children).length; _i < _len; _i++) {
-        attr = _ref2[_i];
-        if (this[attr]) {
-          for (_j = 0, _len2 = (_ref3 = flatten([this[attr]])).length; _j < _len2; _j++) {
-            child = _ref3[_j];
-            if (func(child) === false) {
-              return;
-            }
-          }
-        }
-      }
-      return _result;
-    };
-    Base.prototype.collectChildren = function() {
-      var nodes;
-      nodes = [];
-      this.eachChild(function(node) {
-        return nodes.push(node);
-      });
-      return nodes;
-    };
-    Base.prototype.traverseChildren = function(crossScope, func) {
-      return this.eachChild(function(child) {
-        if (func(child) === false) {
-          return false;
-        }
-        return crossScope || !(child instanceof Code) ? child.traverseChildren(crossScope, func) : undefined;
-      });
-    };
-    Base.prototype.invert = function() {
-      return new Op('!', this);
-    };
-    Base.prototype.children = [];
-    Base.prototype.unwrap = THIS;
-    Base.prototype.isStatement = NO;
-    Base.prototype.isPureStatement = NO;
-    Base.prototype.isComplex = YES;
-    Base.prototype.topSensitive = NO;
-    Base.prototype.unfoldSoak = NO;
-    Base.prototype.assigns = NO;
-    return Base;
-  })();
-  exports.Expressions = (function() {
-    Expressions = (function() {
-      function Expressions(nodes) {
-        Expressions.__super__.constructor.call(this);
-        this.expressions = compact(flatten(nodes || []));
-        return this;
-      };
-      return Expressions;
-    })();
-    __extends(Expressions, Base);
-    Expressions.prototype.children = ['expressions'];
-    Expressions.prototype.isStatement = YES;
-    Expressions.prototype.push = function(node) {
-      this.expressions.push(node);
-      return this;
-    };
-    Expressions.prototype.unshift = function(node) {
-      this.expressions.unshift(node);
-      return this;
-    };
-    Expressions.prototype.unwrap = function() {
-      return this.expressions.length === 1 ? this.expressions[0] : this;
-    };
-    Expressions.prototype.empty = function() {
-      return this.expressions.length === 0;
-    };
-    Expressions.prototype.makeReturn = function() {
-      var end, idx;
-      end = this.expressions[(idx = this.expressions.length - 1)];
-      if (end instanceof Comment) {
-        end = this.expressions[idx -= 1];
-      }
-      if (end && !(end instanceof Return)) {
-        this.expressions[idx] = end.makeReturn();
-      }
-      return this;
-    };
-    Expressions.prototype.compile = function(o) {
-      o || (o = {});
-      return o.scope ? Expressions.__super__.compile.call(this, o) : this.compileRoot(o);
-    };
-    Expressions.prototype.compileNode = function(o) {
-      var _i, _len, _ref2, _result, node;
-      return (function() {
-        _result = [];
-        for (_i = 0, _len = (_ref2 = this.expressions).length; _i < _len; _i++) {
-          node = _ref2[_i];
-          _result.push(this.compileExpression(node, merge(o)));
-        }
-        return _result;
-      }).call(this).join('\n');
-    };
-    Expressions.prototype.compileRoot = function(o) {
-      var code;
-      o.indent = (this.tab = o.bare ? '' : TAB);
-      o.scope = new Scope(null, this, null);
-      code = this.compileWithDeclarations(o);
-      code = code.replace(TRAILING_WHITESPACE, '');
-      return o.bare ? code : ("(function() {\n" + code + "\n}).call(this);\n");
-    };
-    Expressions.prototype.compileWithDeclarations = function(o) {
-      var code;
-      code = this.compileNode(o);
-      if (o.scope.hasAssignments(this)) {
-        code = ("" + (this.tab) + "var " + (o.scope.compiledAssignments().replace(/\n/g, '$&' + this.tab)) + ";\n" + code);
-      }
-      if (!o.globals && o.scope.hasDeclarations(this)) {
-        code = ("" + (this.tab) + "var " + (o.scope.compiledDeclarations()) + ";\n" + code);
-      }
-      return code;
-    };
-    Expressions.prototype.compileExpression = function(node, o) {
-      var compiledNode;
-      this.tab = o.indent;
-      node.tags.front = true;
-      compiledNode = node.compile(merge(o, {
-        top: true
-      }));
-      return node.isStatement(o) ? compiledNode : ("" + (this.idt()) + compiledNode + ";");
-    };
-    return Expressions;
-  })();
-  Expressions.wrap = function(nodes) {
-    if (nodes.length === 1 && nodes[0] instanceof Expressions) {
-      return nodes[0];
-    }
-    return new Expressions(nodes);
-  };
-  exports.Literal = (function() {
-    Literal = (function() {
-      function Literal(_arg) {
-        this.value = _arg;
-        Literal.__super__.constructor.call(this);
-        return this;
-      };
-      return Literal;
-    })();
-    __extends(Literal, Base);
-    Literal.prototype.makeReturn = function() {
-      return this.isStatement() ? this : Literal.__super__.makeReturn.call(this);
-    };
-    Literal.prototype.isStatement = function() {
-      var _ref2;
-      return ((_ref2 = this.value) === 'break' || _ref2 === 'continue' || _ref2 === 'debugger');
-    };
-    Literal.prototype.isPureStatement = Literal.prototype.isStatement;
-    Literal.prototype.isComplex = NO;
-    Literal.prototype.isReserved = function() {
-      return !!this.value.reserved;
-    };
-    Literal.prototype.assigns = function(name) {
-      return name === this.value;
-    };
-    Literal.prototype.compileNode = function(o) {
-      var end, idt, val;
-      idt = this.isStatement(o) ? this.idt() : '';
-      end = this.isStatement(o) ? ';' : '';
-      val = this.isReserved() ? ("\"" + (this.value) + "\"") : this.value;
-      return idt + val + end;
-    };
-    Literal.prototype.toString = function() {
-      return ' "' + this.value + '"';
-    };
-    return Literal;
-  })();
-  exports.Return = (function() {
-    Return = (function() {
-      function Return(_arg) {
-        this.expression = _arg;
-        Return.__super__.constructor.call(this);
-        return this;
-      };
-      return Return;
-    })();
-    __extends(Return, Base);
-    Return.prototype.isStatement = YES;
-    Return.prototype.isPureStatement = YES;
-    Return.prototype.children = ['expression'];
-    Return.prototype.makeReturn = THIS;
-    Return.prototype.compile = function(o) {
-      var _ref2, expr;
-      expr = (((_ref2 = this.expression) != null) ? _ref2.makeReturn() : undefined);
-      if (expr && (!(expr instanceof Return))) {
-        return expr.compile(o);
-      }
-      return Return.__super__.compile.call(this, o);
-    };
-    Return.prototype.compileNode = function(o) {
-      var expr;
-      expr = '';
-      if (this.expression) {
-        if (this.expression.isStatement(o)) {
-          o.asStatement = true;
-        }
-        expr = ' ' + this.expression.compile(o);
-      }
-      return "" + (this.tab) + "return" + expr + ";";
-    };
-    return Return;
-  })();
-  exports.Value = (function() {
-    Value = (function() {
-      function Value(_arg, _arg2, tag) {
-        this.properties = _arg2;
-        this.base = _arg;
-        Value.__super__.constructor.call(this);
-        this.properties || (this.properties = []);
-        if (tag) {
-          this.tags[tag] = true;
-        }
-        return this;
-      };
-      return Value;
-    })();
-    __extends(Value, Base);
-    Value.prototype.children = ['base', 'properties'];
-    Value.prototype.push = function(prop) {
-      this.properties.push(prop);
-      return this;
-    };
-    Value.prototype.hasProperties = function() {
-      return !!this.properties.length;
-    };
-    Value.prototype.isArray = function() {
-      return this.base instanceof ArrayLiteral && !this.properties.length;
-    };
-    Value.prototype.isObject = function() {
-      return this.base instanceof ObjectLiteral && !this.properties.length;
-    };
-    Value.prototype.isSplice = function() {
-      return last(this.properties) instanceof Slice;
-    };
-    Value.prototype.isComplex = function() {
-      return this.base.isComplex() || this.hasProperties();
-    };
-    Value.prototype.assigns = function(name) {
-      return !this.properties.length && this.base.assigns(name);
-    };
-    Value.prototype.makeReturn = function() {
-      return this.properties.length ? Value.__super__.makeReturn.call(this) : this.base.makeReturn();
-    };
-    Value.prototype.unwrap = function() {
-      return this.properties.length ? this : this.base;
-    };
-    Value.prototype.isStatement = function(o) {
-      return this.base.isStatement(o) && !this.properties.length;
-    };
-    Value.prototype.isSimpleNumber = function() {
-      return this.base instanceof Literal && SIMPLENUM.test(this.base.value);
-    };
-    Value.prototype.cacheReference = function(o) {
-      var base, bref, name, nref;
-      name = last(this.properties);
-      if (!this.base.isComplex() && this.properties.length < 2 && !((name != null) ? name.isComplex() : undefined)) {
-        return [this, this];
-      }
-      base = new Value(this.base, this.properties.slice(0, -1));
-      if (base.isComplex()) {
-        bref = new Literal(o.scope.freeVariable('base'));
-        base = new Value(new Parens(new Assign(bref, base)));
-      }
-      if (!name) {
-        return [base, bref];
-      }
-      if (name.isComplex()) {
-        nref = new Literal(o.scope.freeVariable('name'));
-        name = new Index(new Assign(nref, name.index));
-        nref = new Index(nref);
-      }
-      return [base.push(name), new Value(bref || base.base, [nref || name])];
-    };
-    Value.prototype.compile = function(o) {
-      this.base.tags.front = this.tags.front;
-      return !o.top || this.properties.length ? Value.__super__.compile.call(this, o) : this.base.compile(o);
-    };
-    Value.prototype.compileNode = function(o) {
-      var _i, _len, code, ifn, prop, props;
-      if (ifn = this.unfoldSoak(o)) {
-        return ifn.compile(o);
-      }
-      props = this.properties;
-      if (this.parenthetical && !props.length) {
-        this.base.parenthetical = true;
-      }
-      code = this.base.compile(o);
-      if (props[0] instanceof Accessor && this.isSimpleNumber()) {
-        code = ("(" + code + ")");
-      }
-      for (_i = 0, _len = props.length; _i < _len; _i++) {
-        prop = props[_i];
-        (code += prop.compile(o));
-      }
-      return code;
-    };
-    Value.prototype.unfoldSoak = function(o) {
-      var _len, _ref2, fst, i, ifn, prop, ref, snd;
-      if (ifn = this.base.unfoldSoak(o)) {
-        Array.prototype.push.apply(ifn.body.properties, this.properties);
-        return ifn;
-      }
-      for (i = 0, _len = (_ref2 = this.properties).length; i < _len; i++) {
-        prop = _ref2[i];
-        if (prop.soakNode) {
-          prop.soakNode = false;
-          fst = new Value(this.base, this.properties.slice(0, i));
-          snd = new Value(this.base, this.properties.slice(i));
-          if (fst.isComplex()) {
-            ref = new Literal(o.scope.freeVariable('ref'));
-            fst = new Parens(new Assign(ref, fst));
-            snd.base = ref;
-          }
-          ifn = new If(new Existence(fst), snd, {
-            soak: true
-          });
-          return ifn;
-        }
-      }
-      return null;
-    };
-    return Value;
-  })();
-  exports.Comment = (function() {
-    Comment = (function() {
-      function Comment(_arg) {
-        this.comment = _arg;
-        Comment.__super__.constructor.call(this);
-        return this;
-      };
-      return Comment;
-    })();
-    __extends(Comment, Base);
-    Comment.prototype.isStatement = YES;
-    Comment.prototype.makeReturn = THIS;
-    Comment.prototype.compileNode = function(o) {
-      return this.tab + '/*' + this.comment.replace(/\n/g, '\n' + this.tab) + '*/';
-    };
-    return Comment;
-  })();
-  exports.Call = (function() {
-    Call = (function() {
-      function Call(variable, _arg, _arg2) {
-        this.soakNode = _arg2;
-        this.args = _arg;
-        Call.__super__.constructor.call(this);
-        this.isNew = false;
-        this.isSuper = variable === 'super';
-        this.variable = this.isSuper ? null : variable;
-        this.args || (this.args = []);
-        return this;
-      };
-      return Call;
-    })();
-    __extends(Call, Base);
-    Call.prototype.children = ['variable', 'args'];
-    Call.prototype.compileSplatArguments = function(o) {
-      return Splat.compileSplattedArray(this.args, o);
-    };
-    Call.prototype.newInstance = function() {
-      this.isNew = true;
-      return this;
-    };
-    Call.prototype.prefix = function() {
-      return this.isNew ? 'new ' : '';
-    };
-    Call.prototype.superReference = function(o) {
-      var method, name;
-      method = o.scope.method;
-      if (!method) {
-        throw Error("cannot call super outside of a function.");
-      }
-      name = method.name;
-      if (!name) {
-        throw Error("cannot call super on an anonymous function.");
-      }
-      return method.klass ? ("" + (method.klass) + ".__super__." + name) : ("" + name + ".__super__.constructor");
-    };
-    Call.prototype.unfoldSoak = function(o) {
-      var _i, _len, _ref2, _ref3, call, ifn, left, list, rite, val;
-      if (this.soakNode) {
-        if (val = this.variable) {
-          if (!(val instanceof Value)) {
-            val = new Value(val);
-          }
-          _ref2 = val.cacheReference(o), left = _ref2[0], rite = _ref2[1];
-        } else {
-          left = new Literal(this.superReference(o));
-          rite = new Value(left);
-        }
-        rite = new Call(rite, this.args);
-        rite.isNew = this.isNew;
-        left = new Literal("typeof " + (left.compile(o)) + " === \"function\"");
-        ifn = new If(left, new Value(rite), {
-          soak: true
-        });
-        return ifn;
-      }
-      call = this;
-      list = [];
-      while (true) {
-        if (call.variable instanceof Call) {
-          list.push(call);
-          call = call.variable;
-          continue;
-        }
-        if (!(call.variable instanceof Value)) {
-          break;
-        }
-        list.push(call);
-        if (!((call = call.variable.base) instanceof Call)) {
-          break;
-        }
-      }
-      for (_i = 0, _len = (_ref3 = list.reverse()).length; _i < _len; _i++) {
-        call = _ref3[_i];
-        if (ifn) {
-          if (call.variable instanceof Call) {
-            call.variable = ifn;
-          } else {
-            call.variable.base = ifn;
-          }
-        }
-        ifn = If.unfoldSoak(o, call, 'variable');
-      }
-      return ifn;
-    };
-    Call.prototype.compileNode = function(o) {
-      var _i, _j, _len, _len2, _ref2, _ref3, _ref4, _result, arg, args, ifn;
-      if (ifn = this.unfoldSoak(o)) {
-        return ifn.compile(o);
-      }
-      (((_ref2 = this.variable) != null) ? (_ref2.tags.front = this.tags.front) : undefined);
-      for (_i = 0, _len = (_ref3 = this.args).length; _i < _len; _i++) {
-        arg = _ref3[_i];
-        if (arg instanceof Splat) {
-          return this.compileSplat(o);
-        }
-      }
-      args = (function() {
-        _result = [];
-        for (_j = 0, _len2 = (_ref4 = this.args).length; _j < _len2; _j++) {
-          arg = _ref4[_j];
-          _result.push((arg.parenthetical = true) && arg.compile(o));
-        }
-        return _result;
-      }).call(this).join(', ');
-      return this.isSuper ? this.compileSuper(args, o) : ("" + (this.prefix()) + (this.variable.compile(o)) + "(" + args + ")");
-    };
-    Call.prototype.compileSuper = function(args, o) {
-      return "" + (this.superReference(o)) + ".call(this" + (args.length ? ', ' : '') + args + ")";
-    };
-    Call.prototype.compileSplat = function(o) {
-      var base, fun, idt, name, ref, splatargs;
-      splatargs = this.compileSplatArguments(o);
-      if (this.isSuper) {
-        return ("" + (this.superReference(o)) + ".apply(this, " + splatargs + ")");
-      }
-      if (!this.isNew) {
-        if (!((base = this.variable) instanceof Value)) {
-          base = new Value(base);
-        }
-        if ((name = base.properties.pop()) && base.isComplex()) {
-          ref = o.scope.freeVariable('this');
-          fun = ("(" + ref + " = " + (base.compile(o)) + ")" + (name.compile(o)));
-        } else {
-          fun = (ref = base.compile(o));
-          if (name) {
-            fun += name.compile(o);
-          }
-        }
-        return ("" + fun + ".apply(" + ref + ", " + splatargs + ")");
-      }
-      idt = this.idt(1);
-      return "(function(func, args, ctor) {\n" + idt + "ctor.prototype = func.prototype;\n" + idt + "var child = new ctor, result = func.apply(child, args);\n" + idt + "return typeof result === \"object\" ? result : child;\n" + (this.tab) + "})(" + (this.variable.compile(o)) + ", " + splatargs + ", function() {})";
-    };
-    return Call;
-  })();
-  exports.Extends = (function() {
-    Extends = (function() {
-      function Extends(_arg, _arg2) {
-        this.parent = _arg2;
-        this.child = _arg;
-        Extends.__super__.constructor.call(this);
-        return this;
-      };
-      return Extends;
-    })();
-    __extends(Extends, Base);
-    Extends.prototype.children = ['child', 'parent'];
-    Extends.prototype.compileNode = function(o) {
-      var ref;
-      ref = new Value(new Literal(utility('extends')));
-      return (new Call(ref, [this.child, this.parent])).compile(o);
-    };
-    return Extends;
-  })();
-  exports.Accessor = (function() {
-    Accessor = (function() {
-      function Accessor(_arg, tag) {
-        this.name = _arg;
-        Accessor.__super__.constructor.call(this);
-        this.prototype = tag === 'prototype' ? '.prototype' : '';
-        this.soakNode = tag === 'soak';
-        return this;
-      };
-      return Accessor;
-    })();
-    __extends(Accessor, Base);
-    Accessor.prototype.children = ['name'];
-    Accessor.prototype.compileNode = function(o) {
-      var name, namePart;
-      name = this.name.compile(o);
-      namePart = name.match(IS_STRING) ? ("[" + name + "]") : ("." + name);
-      return this.prototype + namePart;
-    };
-    Accessor.prototype.isComplex = NO;
-    return Accessor;
-  })();
-  exports.Index = (function() {
-    Index = (function() {
-      function Index(_arg) {
-        this.index = _arg;
-        Index.__super__.constructor.call(this);
-        return this;
-      };
-      return Index;
-    })();
-    __extends(Index, Base);
-    Index.prototype.children = ['index'];
-    Index.prototype.compileNode = function(o) {
-      var idx, prefix;
-      idx = this.index.compile(o);
-      prefix = this.proto ? '.prototype' : '';
-      return "" + prefix + "[" + idx + "]";
-    };
-    Index.prototype.isComplex = function() {
-      return this.index.isComplex();
-    };
-    return Index;
-  })();
-  exports.Range = (function() {
-    Range = (function() {
-      function Range(_arg, _arg2, tag) {
-        this.to = _arg2;
-        this.from = _arg;
-        Range.__super__.constructor.call(this);
-        this.exclusive = tag === 'exclusive';
-        this.equals = this.exclusive ? '' : '=';
-        return this;
-      };
-      return Range;
-    })();
-    __extends(Range, Base);
-    Range.prototype.children = ['from', 'to'];
-    Range.prototype.compileVariables = function(o) {
-      var _ref2, _ref3, _ref4, parts;
-      o = merge(o, {
-        top: true
-      });
-      _ref2 = this.from.compileReference(o, {
-        precompile: true
-      }), this.from = _ref2[0], this.fromVar = _ref2[1];
-      _ref3 = this.to.compileReference(o, {
-        precompile: true
-      }), this.to = _ref3[0], this.toVar = _ref3[1];
-      _ref4 = [this.fromVar.match(SIMPLENUM), this.toVar.match(SIMPLENUM)], this.fromNum = _ref4[0], this.toNum = _ref4[1];
-      parts = [];
-      if (this.from !== this.fromVar) {
-        parts.push(this.from);
-      }
-      return this.to !== this.toVar ? parts.push(this.to) : undefined;
-    };
-    Range.prototype.compileNode = function(o) {
-      var compare, idx, incr, intro, step, stepPart, vars;
-      this.compileVariables(o);
-      if (!o.index) {
-        return this.compileArray(o);
-      }
-      if (this.fromNum && this.toNum) {
-        return this.compileSimple(o);
-      }
-      idx = del(o, 'index');
-      step = del(o, 'step');
-      vars = ("" + idx + " = " + (this.from)) + (this.to !== this.toVar ? (", " + (this.to)) : '');
-      intro = ("(" + (this.fromVar) + " <= " + (this.toVar) + " ? " + idx);
-      compare = ("" + intro + " <" + (this.equals) + " " + (this.toVar) + " : " + idx + " >" + (this.equals) + " " + (this.toVar) + ")");
-      stepPart = step ? step.compile(o) : '1';
-      incr = step ? ("" + idx + " += " + stepPart) : ("" + intro + " += " + stepPart + " : " + idx + " -= " + stepPart + ")");
-      return "" + vars + "; " + compare + "; " + incr;
-    };
-    Range.prototype.compileSimple = function(o) {
-      var _ref2, from, idx, step, to;
-      _ref2 = [+this.fromNum, +this.toNum], from = _ref2[0], to = _ref2[1];
-      idx = del(o, 'index');
-      step = del(o, 'step');
-      step && (step = ("" + idx + " += " + (step.compile(o))));
-      return from <= to ? ("" + idx + " = " + from + "; " + idx + " <" + (this.equals) + " " + to + "; " + (step || ("" + idx + "++"))) : ("" + idx + " = " + from + "; " + idx + " >" + (this.equals) + " " + to + "; " + (step || ("" + idx + "--")));
-    };
-    Range.prototype.compileArray = function(o) {
-      var _i, _ref2, _ref3, _result, body, clause, i, idt, post, pre, range, result, vars;
-      if (this.fromNum && this.toNum && (Math.abs(this.fromNum - this.toNum) <= 20)) {
-        range = (function() {
-          _result = [];
-          for (var _i = _ref2 = +this.fromNum, _ref3 = +this.toNum; _ref2 <= _ref3 ? _i <= _ref3 : _i >= _ref3; _ref2 <= _ref3 ? _i += 1 : _i -= 1){ _result.push(_i); }
-          return _result;
-        }).call(this);
-        if (this.exclusive) {
-          range.pop();
-        }
-        return ("[" + (range.join(', ')) + "]");
-      }
-      idt = this.idt(1);
-      i = o.scope.freeVariable('i');
-      result = o.scope.freeVariable('result');
-      pre = ("\n" + idt + result + " = [];");
-      if (this.fromNum && this.toNum) {
-        o.index = i;
-        body = this.compileSimple(o);
-      } else {
-        vars = ("" + i + " = " + (this.from)) + (this.to !== this.toVar ? (", " + (this.to)) : '');
-        clause = ("" + (this.fromVar) + " <= " + (this.toVar) + " ?");
-        body = ("var " + vars + "; " + clause + " " + i + " <" + (this.equals) + " " + (this.toVar) + " : " + i + " >" + (this.equals) + " " + (this.toVar) + "; " + clause + " " + i + " += 1 : " + i + " -= 1");
-      }
-      post = ("{ " + result + ".push(" + i + "); }\n" + idt + "return " + result + ";\n" + (o.indent));
-      return "(function() {" + pre + "\n" + idt + "for (" + body + ")" + post + "}).call(this)";
-    };
-    return Range;
-  })();
-  exports.Slice = (function() {
-    Slice = (function() {
-      function Slice(_arg) {
-        this.range = _arg;
-        Slice.__super__.constructor.call(this);
-        return this;
-      };
-      return Slice;
-    })();
-    __extends(Slice, Base);
-    Slice.prototype.children = ['range'];
-    Slice.prototype.compileNode = function(o) {
-      var from, to;
-      from = this.range.from ? this.range.from.compile(o) : '0';
-      to = this.range.to ? this.range.to.compile(o) : '';
-      to += (!to || this.range.exclusive ? '' : ' + 1');
-      if (to) {
-        to = ', ' + to;
-      }
-      return ".slice(" + from + to + ")";
-    };
-    return Slice;
-  })();
-  exports.ObjectLiteral = (function() {
-    ObjectLiteral = (function() {
-      function ObjectLiteral(props) {
-        ObjectLiteral.__super__.constructor.call(this);
-        this.objects = (this.properties = props || []);
-        return this;
-      };
-      return ObjectLiteral;
-    })();
-    __extends(ObjectLiteral, Base);
-    ObjectLiteral.prototype.children = ['properties'];
-    ObjectLiteral.prototype.compileNode = function(o) {
-      var _i, _len, _ref2, _result, i, indent, join, lastNoncom, nonComments, obj, prop, props, top;
-      top = del(o, 'top');
-      o.indent = this.idt(1);
-      nonComments = (function() {
-        _result = [];
-        for (_i = 0, _len = (_ref2 = this.properties).length; _i < _len; _i++) {
-          prop = _ref2[_i];
-          if (!(prop instanceof Comment)) {
-            _result.push(prop);
-          }
-        }
-        return _result;
-      }).call(this);
-      lastNoncom = last(nonComments);
-      props = (function() {
-        _result = [];
-        for (i = 0, _len = (_ref2 = this.properties).length; i < _len; i++) {
-          prop = _ref2[i];
-          _result.push((function() {
-            join = i === this.properties.length - 1 ? '' : (prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n');
-            indent = prop instanceof Comment ? '' : this.idt(1);
-            if (prop instanceof Value && prop.tags["this"]) {
-              prop = new Assign(prop.properties[0].name, prop, 'object');
-            } else if (!(prop instanceof Assign) && !(prop instanceof Comment)) {
-              prop = new Assign(prop, prop, 'object');
-            }
-            return indent + prop.compile(o) + join;
-          }).call(this));
-        }
-        return _result;
-      }).call(this);
-      props = props.join('');
-      obj = ("{" + (props ? '\n' + props + '\n' + this.idt() : '') + "}");
-      return this.tags.front ? ("(" + obj + ")") : obj;
-    };
-    ObjectLiteral.prototype.assigns = function(name) {
-      var _i, _len, _ref2, prop;
-      for (_i = 0, _len = (_ref2 = this.properties).length; _i < _len; _i++) {
-        prop = _ref2[_i];
-        if (prop.assigns(name)) {
-          return true;
-        }
-      }
-      return false;
-    };
-    return ObjectLiteral;
-  })();
-  exports.ArrayLiteral = (function() {
-    ArrayLiteral = (function() {
-      function ArrayLiteral(_arg) {
-        this.objects = _arg;
-        ArrayLiteral.__super__.constructor.call(this);
-        this.objects || (this.objects = []);
-        return this;
-      };
-      return ArrayLiteral;
-    })();
-    __extends(ArrayLiteral, Base);
-    ArrayLiteral.prototype.children = ['objects'];
-    ArrayLiteral.prototype.compileSplatLiteral = function(o) {
-      return Splat.compileSplattedArray(this.objects, o);
-    };
-    ArrayLiteral.prototype.compileNode = function(o) {
-      var _i, _len, _len2, _ref2, _ref3, code, i, obj, objects;
-      o.indent = this.idt(1);
-      for (_i = 0, _len = (_ref2 = this.objects).length; _i < _len; _i++) {
-        obj = _ref2[_i];
-        if (obj instanceof Splat) {
-          return this.compileSplatLiteral(o);
-        }
-      }
-      objects = [];
-      for (i = 0, _len2 = (_ref3 = this.objects).length; i < _len2; i++) {
-        obj = _ref3[i];
-        code = obj.compile(o);
-        objects.push(obj instanceof Comment ? ("\n" + code + "\n" + (o.indent)) : (i === this.objects.length - 1 ? code : code + ', '));
-      }
-      objects = objects.join('');
-      return 0 < objects.indexOf('\n') ? ("[\n" + (o.indent) + objects + "\n" + (this.tab) + "]") : ("[" + objects + "]");
-    };
-    ArrayLiteral.prototype.assigns = function(name) {
-      var _i, _len, _ref2, obj;
-      for (_i = 0, _len = (_ref2 = this.objects).length; _i < _len; _i++) {
-        obj = _ref2[_i];
-        if (obj.assigns(name)) {
-          return true;
-        }
-      }
-      return false;
-    };
-    return ArrayLiteral;
-  })();
-  exports.Class = (function() {
-    Class = (function() {
-      function Class(variable, _arg, _arg2) {
-        this.properties = _arg2;
-        this.parent = _arg;
-        Class.__super__.constructor.call(this);
-        this.variable = variable === '__temp__' ? new Literal(variable) : variable;
-        this.properties || (this.properties = []);
-        this.returns = false;
-        return this;
-      };
-      return Class;
-    })();
-    __extends(Class, Base);
-    Class.prototype.children = ['variable', 'parent', 'properties'];
-    Class.prototype.isStatement = YES;
-    Class.prototype.makeReturn = function() {
-      this.returns = true;
-      return this;
-    };
-    Class.prototype.compileNode = function(o) {
-      var _i, _len, _ref2, _ref3, _ref4, access, applied, apply, className, constScope, construct, constructor, extension, func, me, pname, prop, props, pvar, ref, returns, val, variable;
-      variable = this.variable;
-      if (variable.value === '__temp__') {
-        variable = new Literal(o.scope.freeVariable('ctor'));
-      }
-      extension = this.parent && new Extends(variable, this.parent);
-      props = new Expressions;
-      o.top = true;
-      me = null;
-      className = variable.compile(o);
-      constScope = null;
-      if (this.parent) {
-        applied = new Value(this.parent, [new Accessor(new Literal('apply'))]);
-        constructor = new Code([], new Expressions([new Call(applied, [new Literal('this'), new Literal('arguments')])]));
-      } else {
-        constructor = new Code([], new Expressions([new Return(new Literal('this'))]));
-      }
-      for (_i = 0, _len = (_ref2 = this.properties).length; _i < _len; _i++) {
-        prop = _ref2[_i];
-        _ref3 = [prop.variable, prop.value], pvar = _ref3[0], func = _ref3[1];
-        if (pvar && pvar.base.value === 'constructor') {
-          if (!(func instanceof Code)) {
-            _ref4 = func.compileReference(o), func = _ref4[0], ref = _ref4[1];
-            if (func !== ref) {
-              props.push(func);
-            }
-            apply = new Call(new Value(ref, [new Accessor(new Literal('apply'))]), [new Literal('this'), new Literal('arguments')]);
-            func = new Code([], new Expressions([apply]));
-          }
-          if (func.bound) {
-            throw new Error("cannot define a constructor as a bound function.");
-          }
-          func.name = className;
-          func.body.push(new Return(new Literal('this')));
-          variable = new Value(variable);
-          variable.namespaced = 0 < className.indexOf('.');
-          constructor = func;
-          if (props.expressions[props.expressions.length - 1] instanceof Comment) {
-            constructor.comment = props.expressions.pop();
-          }
-          continue;
-        }
-        if (func instanceof Code && func.bound) {
-          if (prop.context === 'this') {
-            func.context = className;
-          } else {
-            func.bound = false;
-            constScope || (constScope = new Scope(o.scope, constructor.body, constructor));
-            me || (me = constScope.freeVariable('this'));
-            pname = pvar.compile(o);
-            if (constructor.body.empty()) {
-              constructor.body.push(new Return(new Literal('this')));
-            }
-            constructor.body.unshift(new Literal("this." + pname + " = function(){ return " + className + ".prototype." + pname + ".apply(" + me + ", arguments); }"));
-          }
-        }
-        if (pvar) {
-          access = prop.context === 'this' ? pvar.base.properties[0] : new Accessor(pvar, 'prototype');
-          val = new Value(variable, [access]);
-          prop = new Assign(val, func);
-        }
-        props.push(prop);
-      }
-      constructor.className = className.match(/[\w\d\$_]+$/);
-      if (me) {
-        constructor.body.unshift(new Literal("" + me + " = this"));
-      }
-      construct = this.idt() + new Assign(variable, constructor).compile(merge(o, {
-        sharedScope: constScope
-      })) + ';';
-      props = !props.empty() ? '\n' + props.compile(o) : '';
-      extension = extension ? '\n' + this.idt() + extension.compile(o) + ';' : '';
-      returns = this.returns ? '\n' + new Return(variable).compile(o) : '';
-      return construct + extension + props + returns;
-    };
-    return Class;
-  })();
-  exports.Assign = (function() {
-    Assign = (function() {
-      function Assign(_arg, _arg2, _arg3) {
-        this.context = _arg3;
-        this.value = _arg2;
-        this.variable = _arg;
-        Assign.__super__.constructor.call(this);
-        return this;
-      };
-      return Assign;
-    })();
-    __extends(Assign, Base);
-    Assign.prototype.METHOD_DEF = /^(?:(\S+)\.prototype\.)?([$A-Za-z_][$\w]*)$/;
-    Assign.prototype.children = ['variable', 'value'];
-    Assign.prototype.topSensitive = YES;
-    Assign.prototype.isValue = function() {
-      return this.variable instanceof Value;
-    };
-    Assign.prototype.compileNode = function(o) {
-      var ifn, isValue, match, name, stmt, top, val;
-      if (isValue = this.isValue()) {
-        if (this.variable.isArray() || this.variable.isObject()) {
-          return this.compilePatternMatch(o);
-        }
-        if (this.variable.isSplice()) {
-          return this.compileSplice(o);
-        }
-        if (ifn = If.unfoldSoak(o, this, 'variable')) {
-          delete o.top;
-          return ifn.compile(o);
-        }
-      }
-      top = del(o, 'top');
-      stmt = del(o, 'asStatement');
-      name = this.variable.compile(o);
-      if (this.value instanceof Code && (match = this.METHOD_DEF.exec(name))) {
-        this.value.name = match[2];
-        this.value.klass = match[1];
-      }
-      val = this.value.compile(o);
-      if (this.context === 'object') {
-        return ("" + name + ": " + val);
-      }
-      if (!(isValue && (this.variable.hasProperties() || this.variable.namespaced))) {
-        o.scope.find(name);
-      }
-      val = ("" + name + " = " + val);
-      if (stmt) {
-        return ("" + (this.tab) + val + ";");
-      }
-      return top || this.parenthetical ? val : ("(" + val + ")");
-    };
-    Assign.prototype.compilePatternMatch = function(o) {
-      var _len, _ref2, _ref3, accessClass, assigns, code, i, idx, isObject, obj, objects, olength, otop, ref, splat, top, val, valVar, value;
-      if ((value = this.value).isStatement(o)) {
-        value = Closure.wrap(value);
-      }
-      objects = this.variable.base.objects;
-      if (!(olength = objects.length)) {
-        return value.compile(o);
-      }
-      isObject = this.variable.isObject();
-      if (o.top && olength === 1 && !((obj = objects[0]) instanceof Splat)) {
-        if (obj instanceof Assign) {
-          _ref2 = obj, idx = _ref2.variable.base, obj = _ref2.value;
-        } else {
-          idx = isObject ? (obj.tags["this"] ? obj.properties[0].name : obj) : new Literal(0);
-        }
-        if (!(value instanceof Value)) {
-          value = new Value(value);
-        }
-        accessClass = IDENTIFIER.test(idx.value) ? Accessor : Index;
-        value.properties.push(new accessClass(idx));
-        return new Assign(obj, value).compile(o);
-      }
-      top = del(o, 'top');
-      otop = merge(o, {
-        top: true
-      });
-      valVar = value.compile(o);
-      assigns = [];
-      splat = false;
-      if (!IDENTIFIER.test(valVar) || this.variable.assigns(valVar)) {
-        assigns.push("" + (ref = o.scope.freeVariable('ref')) + " = " + valVar);
-        valVar = ref;
-      }
-      for (i = 0, _len = objects.length; i < _len; i++) {
-        obj = objects[i];
-        idx = i;
-        if (isObject) {
-          if (obj instanceof Assign) {
-            _ref3 = obj, idx = _ref3.variable.base, obj = _ref3.value;
-          } else {
-            idx = obj.tags["this"] ? obj.properties[0].name : obj;
-          }
-        }
-        if (!(obj instanceof Value || obj instanceof Splat)) {
-          throw new Error('pattern matching must use only identifiers on the left-hand side.');
-        }
-        accessClass = isObject && IDENTIFIER.test(idx.value) ? Accessor : Index;
-        if (!splat && obj instanceof Splat) {
-          val = new Literal(obj.compileValue(o, valVar, i, olength - i - 1));
-          splat = true;
-        } else {
-          if (typeof idx !== 'object') {
-            idx = new Literal(splat ? ("" + valVar + ".length - " + (olength - idx)) : idx);
-          }
-          val = new Value(new Literal(valVar), [new accessClass(idx)]);
-        }
-        assigns.push(new Assign(obj, val).compile(otop));
-      }
-      if (!top) {
-        assigns.push(valVar);
-      }
-      code = assigns.join(', ');
-      return top || this.parenthetical ? code : ("(" + code + ")");
-    };
-    Assign.prototype.compileSplice = function(o) {
-      var from, name, plus, range, ref, to, val;
-      range = this.variable.properties.pop().range;
-      name = this.variable.compile(o);
-      plus = range.exclusive ? '' : ' + 1';
-      from = range.from ? range.from.compile(o) : '0';
-      to = range.to ? range.to.compile(o) + ' - ' + from + plus : ("" + name + ".length");
-      ref = o.scope.freeVariable('ref');
-      val = this.value.compile(o);
-      return "([].splice.apply(" + name + ", [" + from + ", " + to + "].concat(" + ref + " = " + val + ")), " + ref + ")";
-    };
-    Assign.prototype.assigns = function(name) {
-      return this[this.context === 'object' ? 'value' : 'variable'].assigns(name);
-    };
-    return Assign;
-  })();
-  exports.Code = (function() {
-    Code = (function() {
-      function Code(_arg, _arg2, tag) {
-        this.body = _arg2;
-        this.params = _arg;
-        Code.__super__.constructor.call(this);
-        this.params || (this.params = []);
-        this.body || (this.body = new Expressions);
-        this.bound = tag === 'boundfunc';
-        if (this.bound) {
-          this.context = 'this';
-        }
-        return this;
-      };
-      return Code;
-    })();
-    __extends(Code, Base);
-    Code.prototype.children = ['params', 'body'];
-    Code.prototype.compileNode = function(o) {
-      var _i, _len, _len2, _ref2, _ref3, _result, close, code, comm, empty, func, i, open, param, params, sharedScope, splat, top, value;
-      sharedScope = del(o, 'sharedScope');
-      top = del(o, 'top');
-      o.scope = sharedScope || new Scope(o.scope, this.body, this);
-      o.top = true;
-      o.indent = this.idt(1);
-      empty = this.body.expressions.length === 0;
-      delete o.bare;
-      delete o.globals;
-      splat = undefined;
-      params = [];
-      for (i = 0, _len = (_ref2 = this.params).length; i < _len; i++) {
-        param = _ref2[i];
-        if (splat) {
-          if (param.attach) {
-            param.assign = new Assign(new Value(new Literal('this'), [new Accessor(param.value)]));
-            this.body.expressions.splice(splat.index + 1, 0, param.assign);
-          }
-          splat.trailings.push(param);
-        } else {
-          if (param.attach) {
-            value = param.value;
-            _ref3 = [new Literal(o.scope.freeVariable('arg')), param.splat], param = _ref3[0], param.splat = _ref3[1];
-            this.body.unshift(new Assign(new Value(new Literal('this'), [new Accessor(value)]), param));
-          }
-          if (param.splat) {
-            splat = new Splat(param.value);
-            splat.index = i;
-            splat.trailings = [];
-            splat.arglength = this.params.length;
-            this.body.unshift(splat);
-          } else {
-            params.push(param);
-          }
-        }
-      }
-      o.scope.startLevel();
-      params = (function() {
-        _result = [];
-        for (_i = 0, _len2 = params.length; _i < _len2; _i++) {
-          param = params[_i];
-          _result.push(param.compile(o));
-        }
-        return _result;
-      })();
-      if (!(empty || this.noReturn)) {
-        this.body.makeReturn();
-      }
-      for (_i = 0, _len2 = params.length; _i < _len2; _i++) {
-        param = params[_i];
-        (o.scope.parameter(param));
-      }
-      comm = this.comment ? this.comment.compile(o) + '\n' : '';
-      if (this.className) {
-        o.indent = this.idt(2);
-      }
-      code = this.body.expressions.length ? ("\n" + (this.body.compileWithDeclarations(o)) + "\n") : '';
-      open = this.className ? ("(function() {\n" + comm + (this.idt(1)) + "function " + (this.className) + "(") : "function(";
-      close = this.className ? ("" + (code && this.idt(1)) + "};\n" + (this.idt(1)) + "return " + (this.className) + ";\n" + (this.tab) + "})()") : ("" + (code && this.tab) + "}");
-      func = ("" + open + (params.join(', ')) + ") {" + code + close);
-      o.scope.endLevel();
-      if (this.bound) {
-        return ("" + (utility('bind')) + "(" + func + ", " + (this.context) + ")");
-      }
-      return this.tags.front ? ("(" + func + ")") : func;
-    };
-    Code.prototype.traverseChildren = function(crossScope, func) {
-      return crossScope ? Code.__super__.traverseChildren.call(this, crossScope, func) : undefined;
-    };
-    return Code;
-  })();
-  exports.Param = (function() {
-    Param = (function() {
-      function Param(_arg, _arg2, _arg3) {
-        this.splat = _arg3;
-        this.attach = _arg2;
-        this.name = _arg;
-        Param.__super__.constructor.call(this);
-        this.value = new Literal(this.name);
-        return this;
-      };
-      return Param;
-    })();
-    __extends(Param, Base);
-    Param.prototype.children = ['name'];
-    Param.prototype.compileNode = function(o) {
-      return this.value.compile(o);
-    };
-    Param.prototype.toString = function() {
-      var name;
-      name = this.name;
-      if (this.attach) {
-        name = '@' + name;
-      }
-      if (this.splat) {
-        name += '...';
-      }
-      return new Literal(name).toString();
-    };
-    return Param;
-  })();
-  exports.Splat = (function() {
-    Splat = (function() {
-      function Splat(name) {
-        Splat.__super__.constructor.call(this);
-        this.name = name.compile ? name : new Literal(name);
-        return this;
-      };
-      return Splat;
-    })();
-    __extends(Splat, Base);
-    Splat.prototype.children = ['name'];
-    Splat.prototype.assigns = function(name) {
-      return this.name.assigns(name);
-    };
-    Splat.prototype.compileNode = function(o) {
-      return (this.index != null) ? this.compileParam(o) : this.name.compile(o);
-    };
-    Splat.prototype.compileParam = function(o) {
-      var _len, _ref2, assign, end, idx, len, name, pos, trailing, variadic;
-      name = this.name.compile(o);
-      o.scope.find(name);
-      end = '';
-      if (this.trailings.length) {
-        len = o.scope.freeVariable('len');
-        o.scope.assign(len, "arguments.length");
-        variadic = o.scope.freeVariable('result');
-        o.scope.assign(variadic, len + ' >= ' + this.arglength);
-        end = this.trailings.length ? (", " + len + " - " + (this.trailings.length)) : undefined;
-        for (idx = 0, _len = (_ref2 = this.trailings).length; idx < _len; idx++) {
-          trailing = _ref2[idx];
-          if (trailing.attach) {
-            assign = trailing.assign;
-            trailing = new Literal(o.scope.freeVariable('arg'));
-            assign.value = trailing;
-          }
-          pos = this.trailings.length - idx;
-          o.scope.assign(trailing.compile(o), "arguments[" + variadic + " ? " + len + " - " + pos + " : " + (this.index + idx) + "]");
-        }
-      }
-      return "" + name + " = " + (utility('slice')) + ".call(arguments, " + (this.index) + end + ")";
-    };
-    Splat.prototype.compileValue = function(o, name, index, trailings) {
-      var trail;
-      trail = trailings ? (", " + name + ".length - " + trailings) : '';
-      return "" + (utility('slice')) + ".call(" + name + ", " + index + trail + ")";
-    };
-    Splat.compileSplattedArray = function(list, o) {
-      var _len, arg, args, code, end, i, prev;
-      args = [];
-      end = -1;
-      for (i = 0, _len = list.length; i < _len; i++) {
-        arg = list[i];
-        code = arg.compile(o);
-        prev = args[end];
-        if (!(arg instanceof Splat)) {
-          if (prev && starts(prev, '[') && ends(prev, ']')) {
-            args[end] = ("" + (prev.slice(0, -1)) + ", " + code + "]");
-            continue;
-          }
-          if (prev && starts(prev, '.concat([') && ends(prev, '])')) {
-            args[end] = ("" + (prev.slice(0, -2)) + ", " + code + "])");
-            continue;
-          }
-          code = ("[" + code + "]");
-        }
-        args[++end] = i === 0 ? code : (".concat(" + code + ")");
-      }
-      return args.join('');
-    };
-    return Splat;
-  }).call(this);
-  exports.While = (function() {
-    While = (function() {
-      function While(condition, opts) {
-        While.__super__.constructor.call(this);
-        this.condition = ((opts != null) ? opts.invert : undefined) ? condition.invert() : condition;
-        this.guard = ((opts != null) ? opts.guard : undefined);
-        return this;
-      };
-      return While;
-    })();
-    __extends(While, Base);
-    While.prototype.children = ['condition', 'guard', 'body'];
-    While.prototype.isStatement = YES;
-    While.prototype.addBody = function(body) {
-      this.body = body;
-      return this;
-    };
-    While.prototype.makeReturn = function() {
-      this.returns = true;
-      return this;
-    };
-    While.prototype.topSensitive = YES;
-    While.prototype.compileNode = function(o) {
-      var cond, post, pre, rvar, set, top;
-      top = del(o, 'top') && !this.returns;
-      o.indent = this.idt(1);
-      this.condition.parenthetical = true;
-      cond = this.condition.compile(o);
-      o.top = true;
-      set = '';
-      if (!top) {
-        rvar = o.scope.freeVariable('result');
-        set = ("" + (this.tab) + rvar + " = [];\n");
-        if (this.body) {
-          this.body = Push.wrap(rvar, this.body);
-        }
-      }
-      pre = ("" + set + (this.tab) + "while (" + cond + ")");
-      if (this.guard) {
-        this.body = Expressions.wrap([new If(this.guard, this.body)]);
-      }
-      if (this.returns) {
-        post = '\n' + new Return(new Literal(rvar)).compile(merge(o, {
-          indent: this.idt()
-        }));
-      } else {
-        post = '';
-      }
-      return "" + pre + " {\n" + (this.body.compile(o)) + "\n" + (this.tab) + "}" + post;
-    };
-    return While;
-  })();
-  exports.Op = (function() {
-    Op = (function() {
-      function Op(op, first, second, flip) {
-        if (op === 'new') {
-          if (first instanceof Call) {
-            return first.newInstance();
-          }
-          if (first instanceof Code && first.bound) {
-            first = new Parens(first);
-          }
-        }
-        Op.__super__.constructor.call(this);
-        this.operator = this.CONVERSIONS[op] || op;
-        (this.first = first).tags.operation = true;
-        if (second) {
-          (this.second = second).tags.operation = true;
-        }
-        this.flip = !!flip;
-        return this;
-      };
-      return Op;
-    })();
-    __extends(Op, Base);
-    Op.prototype.CONVERSIONS = {
-      '==': '===',
-      '!=': '!==',
-      of: 'in'
-    };
-    Op.prototype.INVERSIONS = {
-      '!==': '===',
-      '===': '!=='
-    };
-    Op.prototype.CHAINABLE = ['<', '>', '>=', '<=', '===', '!=='];
-    Op.prototype.ASSIGNMENT = ['||=', '&&=', '?='];
-    Op.prototype.PREFIX_OPERATORS = ['new', 'typeof', 'delete'];
-    Op.prototype.children = ['first', 'second'];
-    Op.prototype.isUnary = function() {
-      return !this.second;
-    };
-    Op.prototype.isComplex = function() {
-      return this.operator !== '!' || this.first.isComplex();
-    };
-    Op.prototype.isMutator = function() {
-      var _ref2;
-      return ends(this.operator, '=') && !((_ref2 = this.operator) === '===' || _ref2 === '!==');
-    };
-    Op.prototype.isChainable = function() {
-      return include(this.CHAINABLE, this.operator);
-    };
-    Op.prototype.invert = function() {
-      var _ref2;
-      if (((_ref2 = this.operator) === '===' || _ref2 === '!==')) {
-        this.operator = this.INVERSIONS[this.operator];
-        return this;
-      } else       return this.second ? new Parens(this).invert() : Op.__super__.invert.call(this);
-    };
-    Op.prototype.toString = function(idt) {
-      return Op.__super__.toString.call(this, idt, this.constructor.name + ' ' + this.operator);
-    };
-    Op.prototype.compileNode = function(o) {
-      if (this.second) {
-        this.first.tags.front = this.tags.front;
-      }
-      if (this.isChainable() && this.first.unwrap() instanceof Op && this.first.unwrap().isChainable()) {
-        return this.compileChain(o);
-      }
-      if (include(this.ASSIGNMENT, this.operator)) {
-        return this.compileAssignment(o);
-      }
-      if (this.isUnary()) {
-        return this.compileUnary(o);
-      }
-      if (this.operator === '?') {
-        return this.compileExistence(o);
-      }
-      if (this.first instanceof Op && this.first.isMutator()) {
-        this.first = new Parens(this.first);
-      }
-      if (this.second instanceof Op && this.second.isMutator()) {
-        this.second = new Parens(this.second);
-      }
-      return [this.first.compile(o), this.operator, this.second.compile(o)].join(' ');
-    };
-    Op.prototype.compileChain = function(o) {
-      var _ref2, _ref3, first, second, shared;
-      shared = this.first.unwrap().second;
-      _ref2 = shared.compileReference(o), this.first.second = _ref2[0], shared = _ref2[1];
-      _ref3 = [this.first.compile(o), this.second.compile(o), shared.compile(o)], first = _ref3[0], second = _ref3[1], shared = _ref3[2];
-      return "(" + first + ") && (" + shared + " " + (this.operator) + " " + second + ")";
-    };
-    Op.prototype.compileAssignment = function(o) {
-      var _ref2, left, rite;
-      _ref2 = this.first.cacheReference(o), left = _ref2[0], rite = _ref2[1];
-      rite = new Assign(rite, this.second);
-      return new Op(this.operator.slice(0, -1), left, rite).compile(o);
-    };
-    Op.prototype.compileExistence = function(o) {
-      var fst, ref;
-      if (this.first.isComplex()) {
-        ref = o.scope.freeVariable('ref');
-        fst = new Parens(new Assign(new Literal(ref), this.first));
-      } else {
-        fst = this.first;
-        ref = fst.compile(o);
-      }
-      return new Existence(fst).compile(o) + (" ? " + ref + " : " + (this.second.compile(o)));
-    };
-    Op.prototype.compileUnary = function(o) {
-      var parts, space;
-      space = include(this.PREFIX_OPERATORS, this.operator) ? ' ' : '';
-      parts = [this.operator, space, this.first.compile(o)];
-      return (this.flip ? parts.reverse() : parts).join('');
-    };
-    return Op;
-  })();
-  exports.In = (function() {
-    In = (function() {
-      function In(_arg, _arg2) {
-        this.array = _arg2;
-        this.object = _arg;
-        In.__super__.constructor.call(this);
-        return this;
-      };
-      return In;
-    })();
-    __extends(In, Base);
-    In.prototype.children = ['object', 'array'];
-    In.prototype.isArray = function() {
-      return this.array instanceof Value && this.array.isArray();
-    };
-    In.prototype.compileNode = function(o) {
-      return this.isArray() ? this.compileOrTest(o) : this.compileLoopTest(o);
-    };
-    In.prototype.compileOrTest = function(o) {
-      var _len, _ref2, _ref3, _result, i, item, obj1, obj2, tests;
-      _ref2 = this.object.compileReference(o, {
-        precompile: true
-      }), obj1 = _ref2[0], obj2 = _ref2[1];
-      tests = (function() {
-        _result = [];
-        for (i = 0, _len = (_ref3 = this.array.base.objects).length; i < _len; i++) {
-          item = _ref3[i];
-          _result.push("" + (i ? obj2 : obj1) + " === " + (item.compile(o)));
-        }
-        return _result;
-      }).call(this);
-      return "(" + (tests.join(' || ')) + ")";
-    };
-    In.prototype.compileLoopTest = function(o) {
-      return "" + (utility('inArray')) + "(" + (this.object.compile(o)) + ", " + (this.array.compile(o)) + ")";
-    };
-    return In;
-  })();
-  exports.Try = (function() {
-    Try = (function() {
-      function Try(_arg, _arg2, _arg3, _arg4) {
-        this.ensure = _arg4;
-        this.recovery = _arg3;
-        this.error = _arg2;
-        this.attempt = _arg;
-        Try.__super__.constructor.call(this);
-        return this;
-      };
-      return Try;
-    })();
-    __extends(Try, Base);
-    Try.prototype.children = ['attempt', 'recovery', 'ensure'];
-    Try.prototype.isStatement = YES;
-    Try.prototype.makeReturn = function() {
-      if (this.attempt) {
-        this.attempt = this.attempt.makeReturn();
-      }
-      if (this.recovery) {
-        this.recovery = this.recovery.makeReturn();
-      }
-      return this;
-    };
-    Try.prototype.compileNode = function(o) {
-      var attemptPart, catchPart, errorPart, finallyPart;
-      o.indent = this.idt(1);
-      o.top = true;
-      attemptPart = this.attempt.compile(o);
-      errorPart = this.error ? (" (" + (this.error.compile(o)) + ") ") : ' ';
-      catchPart = this.recovery ? (" catch" + errorPart + "{\n" + (this.recovery.compile(o)) + "\n" + (this.tab) + "}") : (!(this.ensure || this.recovery) ? ' catch (_e) {}' : '');
-      finallyPart = (this.ensure || '') && ' finally {\n' + this.ensure.compile(merge(o)) + ("\n" + (this.tab) + "}");
-      return "" + (this.tab) + "try {\n" + attemptPart + "\n" + (this.tab) + "}" + catchPart + finallyPart;
-    };
-    return Try;
-  })();
-  exports.Throw = (function() {
-    Throw = (function() {
-      function Throw(_arg) {
-        this.expression = _arg;
-        Throw.__super__.constructor.call(this);
-        return this;
-      };
-      return Throw;
-    })();
-    __extends(Throw, Base);
-    Throw.prototype.children = ['expression'];
-    Throw.prototype.isStatement = YES;
-    Throw.prototype.makeReturn = THIS;
-    Throw.prototype.compileNode = function(o) {
-      return "" + (this.tab) + "throw " + (this.expression.compile(o)) + ";";
-    };
-    return Throw;
-  })();
-  exports.Existence = (function() {
-    Existence = (function() {
-      function Existence(_arg) {
-        this.expression = _arg;
-        Existence.__super__.constructor.call(this);
-        return this;
-      };
-      return Existence;
-    })();
-    __extends(Existence, Base);
-    Existence.prototype.children = ['expression'];
-    Existence.prototype.compileNode = function(o) {
-      var code;
-      code = this.expression.compile(o);
-      code = IDENTIFIER.test(code) && !o.scope.check(code) ? ("typeof " + code + " !== \"undefined\" && " + code + " !== null") : ("" + code + " != null");
-      return this.parenthetical ? code : ("(" + code + ")");
-    };
-    return Existence;
-  })();
-  exports.Parens = (function() {
-    Parens = (function() {
-      function Parens(_arg) {
-        this.expression = _arg;
-        Parens.__super__.constructor.call(this);
-        return this;
-      };
-      return Parens;
-    })();
-    __extends(Parens, Base);
-    Parens.prototype.children = ['expression'];
-    Parens.prototype.isStatement = function(o) {
-      return this.expression.isStatement(o);
-    };
-    Parens.prototype.isComplex = function() {
-      return this.expression.isComplex();
-    };
-    Parens.prototype.topSensitive = YES;
-    Parens.prototype.makeReturn = function() {
-      return this.expression.makeReturn();
-    };
-    Parens.prototype.compileNode = function(o) {
-      var code, top;
-      top = del(o, 'top');
-      this.expression.parenthetical = true;
-      code = this.expression.compile(o);
-      if (top && this.expression.isPureStatement(o)) {
-        return code;
-      }
-      if (this.parenthetical || this.isStatement(o)) {
-        return top ? this.tab + code + ';' : code;
-      }
-      return "(" + code + ")";
-    };
-    return Parens;
-  })();
-  exports.For = (function() {
-    For = (function() {
-      function For(_arg, source, _arg2, _arg3) {
-        var _ref2;
-        this.index = _arg3;
-        this.name = _arg2;
-        this.body = _arg;
-        For.__super__.constructor.call(this);
-        this.source = source.source, this.guard = source.guard, this.step = source.step;
-        this.raw = !!source.raw;
-        this.object = !!source.object;
-        if (this.object) {
-          _ref2 = [this.index, this.name], this.name = _ref2[0], this.index = _ref2[1];
-        }
-        this.pattern = this.name instanceof Value;
-        if (this.index instanceof Value) {
-          throw new Error('index cannot be a pattern matching expression');
-        }
-        this.returns = false;
-        return this;
-      };
-      return For;
-    })();
-    __extends(For, Base);
-    For.prototype.children = ['body', 'source', 'guard'];
-    For.prototype.isStatement = YES;
-    For.prototype.topSensitive = YES;
-    For.prototype.makeReturn = function() {
-      this.returns = true;
-      return this;
-    };
-    For.prototype.compileReturnValue = function(val, o) {
-      if (this.returns) {
-        return '\n' + new Return(new Literal(val)).compile(o);
-      }
-      if (val) {
-        return '\n' + val;
-      }
-      return '';
-    };
-    For.prototype.compileNode = function(o) {
-      var body, codeInBody, forPart, guardPart, idt1, index, ivar, lastLine, lvar, name, namePart, nvar, range, ref, resultPart, returnResult, rvar, scope, source, sourcePart, stepPart, svar, topLevel, unstepPart, varPart, vars;
-      topLevel = del(o, 'top') && !this.returns;
-      range = this.source instanceof Value && this.source.base instanceof Range && !this.source.properties.length;
-      source = range ? this.source.base : this.source;
-      codeInBody = !this.body.containsPureStatement() && this.body.contains(function(node) {
-        return node instanceof Code;
-      });
-      scope = o.scope;
-      name = this.name && this.name.compile(o);
-      index = this.index && this.index.compile(o);
-      if (name && !this.pattern && (range || !codeInBody)) {
-        scope.find(name, {
-          immediate: true
-        });
-      }
-      if (index) {
-        scope.find(index, {
-          immediate: true
-        });
-      }
-      if (!topLevel) {
-        rvar = scope.freeVariable('result');
-      }
-      ivar = range ? name : index;
-      if (!ivar || codeInBody) {
-        ivar = scope.freeVariable('i');
-      }
-      if (name && !range && codeInBody) {
-        nvar = scope.freeVariable('i');
-      }
-      varPart = '';
-      guardPart = '';
-      unstepPart = '';
-      body = Expressions.wrap([this.body]);
-      idt1 = this.idt(1);
-      if (range) {
-        forPart = source.compile(merge(o, {
-          index: ivar,
-          step: this.step
-        }));
-      } else {
-        svar = (sourcePart = this.source.compile(o));
-        if ((name || !this.raw) && !(IDENTIFIER.test(svar) && scope.check(svar, {
-          immediate: true
-        }))) {
-          sourcePart = ("" + (ref = scope.freeVariable('ref')) + " = " + svar);
-          if (!this.object) {
-            sourcePart = ("(" + sourcePart + ")");
-          }
-          svar = ref;
-        }
-        namePart = this.pattern ? new Assign(this.name, new Literal("" + svar + "[" + ivar + "]")).compile(merge(o, {
-          top: true
-        })) : (name ? ("" + name + " = " + svar + "[" + ivar + "]") : undefined);
-        if (!this.object) {
-          lvar = scope.freeVariable('len');
-          stepPart = this.step ? ("" + ivar + " += " + (this.step.compile(o))) : ("" + ivar + "++");
-          forPart = ("" + ivar + " = 0, " + lvar + " = " + sourcePart + ".length; " + ivar + " < " + lvar + "; " + stepPart);
-        }
-      }
-      resultPart = rvar ? ("" + (this.tab) + rvar + " = [];\n") : '';
-      returnResult = this.compileReturnValue(rvar, o);
-      if (!topLevel) {
-        body = Push.wrap(rvar, body);
-      }
-      if (this.guard) {
-        body = Expressions.wrap([new If(this.guard, body)]);
-      }
-      if (codeInBody) {
-        if (range) {
-          body.unshift(new Literal("var " + name + " = " + ivar));
-        }
-        if (namePart) {
-          body.unshift(new Literal("var " + namePart));
-        }
-        if (index) {
-          body.unshift(new Literal("var " + index + " = " + ivar));
-        }
-        lastLine = body.expressions.pop();
-        if (index) {
-          body.push(new Assign(new Literal(ivar), new Literal(index)));
-        }
-        if (nvar) {
-          body.push(new Assign(new Literal(nvar), new Literal(name)));
-        }
-        body.push(lastLine);
-        o.indent = this.idt(1);
-        body = Expressions.wrap([new Literal(body.compile(o))]);
-        if (index) {
-          body.push(new Assign(new Literal(index), new Literal(ivar)));
-        }
-        if (name) {
-          body.push(new Assign(new Literal(name), new Literal(nvar || ivar)));
-        }
-      } else {
-        if (namePart) {
-          varPart = ("" + idt1 + namePart + ";\n");
-        }
-        if (forPart && name === ivar) {
-          unstepPart = this.step ? ("" + name + " -= " + (this.step.compile(o)) + ";") : ("" + name + "--;");
-          unstepPart = ("\n" + (this.tab)) + unstepPart;
-        }
-      }
-      if (this.object) {
-        forPart = ("" + ivar + " in " + sourcePart);
-        if (!this.raw) {
-          guardPart = ("\n" + idt1 + "if (!" + (utility('hasProp')) + ".call(" + svar + ", " + ivar + ")) continue;");
-        }
-      }
-      body = body.compile(merge(o, {
-        indent: idt1,
-        top: true
-      }));
-      vars = range ? name : ("" + name + ", " + ivar);
-      return "" + resultPart + (this.tab) + "for (" + forPart + ") {" + guardPart + "\n" + varPart + body + "\n" + (this.tab) + "}" + unstepPart + returnResult;
-    };
-    return For;
-  })();
-  exports.Switch = (function() {
-    Switch = (function() {
-      function Switch(_arg, _arg2, _arg3) {
-        this.otherwise = _arg3;
-        this.cases = _arg2;
-        this.subject = _arg;
-        Switch.__super__.constructor.call(this);
-        this.tags.subjectless = !this.subject;
-        this.subject || (this.subject = new Literal('true'));
-        return this;
-      };
-      return Switch;
-    })();
-    __extends(Switch, Base);
-    Switch.prototype.children = ['subject', 'cases', 'otherwise'];
-    Switch.prototype.isStatement = YES;
-    Switch.prototype.makeReturn = function() {
-      var _i, _len, _ref2, pair;
-      for (_i = 0, _len = (_ref2 = this.cases).length; _i < _len; _i++) {
-        pair = _ref2[_i];
-        pair[1].makeReturn();
-      }
-      if (this.otherwise) {
-        this.otherwise.makeReturn();
-      }
-      return this;
-    };
-    Switch.prototype.compileNode = function(o) {
-      var _i, _j, _len, _len2, _ref2, _ref3, block, code, condition, conditions, exprs, idt, pair;
-      idt = (o.indent = this.idt(2));
-      o.top = true;
-      code = ("" + (this.tab) + "switch (" + (this.subject.compile(o)) + ") {");
-      for (_i = 0, _len = (_ref2 = this.cases).length; _i < _len; _i++) {
-        pair = _ref2[_i];
-        conditions = pair[0], block = pair[1];
-        exprs = block.expressions;
-        for (_j = 0, _len2 = (_ref3 = flatten([conditions])).length; _j < _len2; _j++) {
-          condition = _ref3[_j];
-          if (this.tags.subjectless) {
-            condition = new Op('!!', new Parens(condition));
-          }
-          code += ("\n" + (this.idt(1)) + "case " + (condition.compile(o)) + ":");
-        }
-        code += ("\n" + (block.compile(o)));
-        if (!(last(exprs) instanceof Return)) {
-          code += ("\n" + idt + "break;");
-        }
-      }
-      if (this.otherwise) {
-        code += ("\n" + (this.idt(1)) + "default:\n" + (this.otherwise.compile(o)));
-      }
-      code += ("\n" + (this.tab) + "}");
-      return code;
-    };
-    return Switch;
-  })();
-  exports.If = (function() {
-    If = (function() {
-      function If(condition, _arg, tags) {
-        this.body = _arg;
-        this.tags = tags || (tags = {});
-        this.condition = tags.invert ? condition.invert() : condition;
-        this.soakNode = tags.soak;
-        this.elseBody = null;
-        this.isChain = false;
-        return this;
-      };
-      return If;
-    })();
-    __extends(If, Base);
-    If.prototype.children = ['condition', 'body', 'elseBody', 'assigner'];
-    If.prototype.topSensitive = YES;
-    If.prototype.bodyNode = function() {
-      var _ref2;
-      return (((_ref2 = this.body) != null) ? _ref2.unwrap() : undefined);
-    };
-    If.prototype.elseBodyNode = function() {
-      var _ref2;
-      return (((_ref2 = this.elseBody) != null) ? _ref2.unwrap() : undefined);
-    };
-    If.prototype.addElse = function(elseBody) {
-      if (this.isChain) {
-        this.elseBodyNode().addElse(elseBody);
-      } else {
-        this.isChain = elseBody instanceof If;
-        this.elseBody = this.ensureExpressions(elseBody);
-      }
-      return this;
-    };
-    If.prototype.isStatement = function(o) {
-      var _ref2;
-      return this.statement || (this.statement = ((o != null) ? o.top : undefined) || this.bodyNode().isStatement(o) || (((_ref2 = this.elseBodyNode()) != null) ? _ref2.isStatement(o) : undefined));
-    };
-    If.prototype.compileCondition = function(o) {
-      this.condition.parenthetical = true;
-      return this.condition.compile(o);
-    };
-    If.prototype.compileNode = function(o) {
-      return this.isStatement(o) ? this.compileStatement(o) : this.compileExpression(o);
-    };
-    If.prototype.makeReturn = function() {
-      if (this.isStatement()) {
-        this.body && (this.body = this.ensureExpressions(this.body.makeReturn()));
-        this.elseBody && (this.elseBody = this.ensureExpressions(this.elseBody.makeReturn()));
-        return this;
-      } else {
-        return new Return(this);
-      }
-    };
-    If.prototype.ensureExpressions = function(node) {
-      return node instanceof Expressions ? node : new Expressions([node]);
-    };
-    If.prototype.compileStatement = function(o) {
-      var child, condO, ifPart, top;
-      top = del(o, 'top');
-      child = del(o, 'chainChild');
-      condO = merge(o);
-      o.indent = this.idt(1);
-      o.top = true;
-      ifPart = ("if (" + (this.compileCondition(condO)) + ") {\n" + (this.body.compile(o)) + "\n" + (this.tab) + "}");
-      if (!child) {
-        ifPart = this.tab + ifPart;
-      }
-      if (!this.elseBody) {
-        return ifPart;
-      }
-      return ifPart + (this.isChain ? ' else ' + this.elseBodyNode().compile(merge(o, {
-        indent: this.tab,
-        chainChild: true
-      })) : (" else {\n" + (this.elseBody.compile(o)) + "\n" + (this.tab) + "}"));
-    };
-    If.prototype.compileExpression = function(o) {
-      var code, elsePart, ifPart;
-      this.bodyNode().tags.operation = (this.condition.tags.operation = true);
-      if (this.elseBody) {
-        this.elseBodyNode().tags.operation = true;
-      }
-      ifPart = this.condition.compile(o) + ' ? ' + this.bodyNode().compile(o);
-      elsePart = this.elseBody ? this.elseBodyNode().compile(o) : 'undefined';
-      code = ("" + ifPart + " : " + elsePart);
-      return this.tags.operation || this.soakNode ? ("(" + code + ")") : code;
-    };
-    If.prototype.unfoldSoak = function() {
-      return this.soakNode && this;
-    };
-    If.unfoldSoak = function(o, parent, name) {
-      var ifn;
-      if (!(ifn = parent[name].unfoldSoak(o))) {
-        return;
-      }
-      parent[name] = ifn.body;
-      ifn.body = new Value(parent);
-      return ifn;
-    };
-    return If;
-  }).call(this);
-  Push = {
-    wrap: function(name, expressions) {
-      if (expressions.empty() || expressions.containsPureStatement()) {
-        return expressions;
-      }
-      return Expressions.wrap([new Call(new Value(new Literal(name), [new Accessor(new Literal('push'))]), [expressions.unwrap()])]);
-    }
-  };
-  Closure = {
-    wrap: function(expressions, statement, noReturn) {
-      var args, call, func, mentionsArgs, meth;
-      if (expressions.containsPureStatement()) {
-        return expressions;
-      }
-      func = new Parens(new Code([], Expressions.wrap([expressions])));
-      args = [];
-      if ((mentionsArgs = expressions.contains(this.literalArgs)) || (expressions.contains(this.literalThis))) {
-        meth = new Literal(mentionsArgs ? 'apply' : 'call');
-        args = [new Literal('this')];
-        if (mentionsArgs) {
-          args.push(new Literal('arguments'));
-        }
-        func = new Value(func, [new Accessor(meth)]);
-        func.noReturn = noReturn;
-      }
-      call = new Call(func, args);
-      return statement ? Expressions.wrap([call]) : call;
-    },
-    literalArgs: function(node) {
-      return node instanceof Literal && node.value === 'arguments';
-    },
-    literalThis: function(node) {
-      return node instanceof Literal && node.value === 'this' || node instanceof Code && node.bound;
-    }
-  };
-  UTILITIES = {
-    "extends": 'function(child, parent) {\n  function ctor() { this.constructor = child; }\n  ctor.prototype = parent.prototype;\n  child.prototype = new ctor;\n  if (typeof parent.extended === "function") parent.extended(child);\n  child.__super__ = parent.prototype;\n}',
-    bind: 'function(func, context) {\n  return function() { return func.apply(context, arguments); };\n}',
-    inArray: '(function() {\n  var indexOf = Array.prototype.indexOf || function(item) {\n    var i = this.length; while (i--) if (this[i] === item) return i;\n    return -1;\n  };\n  return function(item, array) { return indexOf.call(array, item) > -1; };\n})();',
-    hasProp: 'Object.prototype.hasOwnProperty',
-    slice: 'Array.prototype.slice'
-  };
-  TAB = '  ';
-  TRAILING_WHITESPACE = /[ \t]+$/gm;
-  IDENTIFIER = /^[$A-Za-z_][$\w]*$/;
-  NUMBER = /^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?$/i;
-  SIMPLENUM = /^[+-]?\d+$/;
-  IS_STRING = /^['"]/;
-  utility = function(name) {
-    var ref;
-    ref = ("__" + name);
-    Scope.root.assign(ref, UTILITIES[name]);
-    return ref;
-  };
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/optparse.js b/node/node_modules/jade/support/coffee-script/lib/optparse.js
deleted file mode 100755 (executable)
index 4a9ae28..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-(function() {
-  var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments;
-  exports.OptionParser = (function() {
-    OptionParser = (function() {
-      function OptionParser(rules, banner) {
-        this.banner = banner;
-        this.rules = buildRules(rules);
-        return this;
-      };
-      return OptionParser;
-    })();
-    OptionParser.prototype.parse = function(args) {
-      var _i, _len, _len2, _ref, arg, i, isOption, matchedRule, options, rule, value;
-      options = {
-        arguments: []
-      };
-      args = normalizeArguments(args);
-      for (i = 0, _len = args.length; i < _len; i++) {
-        arg = args[i];
-        isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));
-        matchedRule = false;
-        for (_i = 0, _len2 = (_ref = this.rules).length; _i < _len2; _i++) {
-          rule = _ref[_i];
-          if (rule.shortFlag === arg || rule.longFlag === arg) {
-            value = rule.hasArgument ? args[i += 1] : true;
-            options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;
-            matchedRule = true;
-            break;
-          }
-        }
-        if (isOption && !matchedRule) {
-          throw new Error("unrecognized option: " + arg);
-        }
-        if (!isOption) {
-          options.arguments = args.slice(i);
-          break;
-        }
-      }
-      return options;
-    };
-    OptionParser.prototype.help = function() {
-      var _i, _len, _ref, letPart, lines, rule, spaces;
-      lines = ['Available options:'];
-      if (this.banner) {
-        lines.unshift("" + (this.banner) + "\n");
-      }
-      for (_i = 0, _len = (_ref = this.rules).length; _i < _len; _i++) {
-        rule = _ref[_i];
-        spaces = 15 - rule.longFlag.length;
-        spaces = spaces > 0 ? Array(spaces + 1).join(' ') : '';
-        letPart = rule.shortFlag ? rule.shortFlag + ', ' : '    ';
-        lines.push('  ' + letPart + rule.longFlag + spaces + rule.description);
-      }
-      return "\n" + (lines.join('\n')) + "\n";
-    };
-    return OptionParser;
-  })();
-  LONG_FLAG = /^(--\w[\w\-]+)/;
-  SHORT_FLAG = /^(-\w)/;
-  MULTI_FLAG = /^-(\w{2,})/;
-  OPTIONAL = /\[(\w+(\*?))\]/;
-  buildRules = function(rules) {
-    var _i, _len, _result, tuple;
-    _result = [];
-    for (_i = 0, _len = rules.length; _i < _len; _i++) {
-      tuple = rules[_i];
-      _result.push((function() {
-        if (tuple.length < 3) {
-          tuple.unshift(null);
-        }
-        return buildRule.apply(buildRule, tuple);
-      })());
-    }
-    return _result;
-  };
-  buildRule = function(shortFlag, longFlag, description, options) {
-    var match;
-    match = longFlag.match(OPTIONAL);
-    longFlag = longFlag.match(LONG_FLAG)[1];
-    options || (options = {});
-    return {
-      name: longFlag.substr(2),
-      shortFlag: shortFlag,
-      longFlag: longFlag,
-      description: description,
-      hasArgument: !!(match && match[1]),
-      isList: !!(match && match[2])
-    };
-  };
-  normalizeArguments = function(args) {
-    var _i, _j, _len, _len2, _ref, arg, l, match, result;
-    args = args.slice(0);
-    result = [];
-    for (_i = 0, _len = args.length; _i < _len; _i++) {
-      arg = args[_i];
-      if (match = arg.match(MULTI_FLAG)) {
-        for (_j = 0, _len2 = (_ref = match[1].split('')).length; _j < _len2; _j++) {
-          l = _ref[_j];
-          result.push('-' + l);
-        }
-      } else {
-        result.push(arg);
-      }
-    }
-    return result;
-  };
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/parser.js b/node/node_modules/jade/support/coffee-script/lib/parser.js
deleted file mode 100755 (executable)
index e77d3bc..0000000
+++ /dev/null
@@ -1,687 +0,0 @@
-/* Jison generated parser */
-var parser = (function(){
-var parser = {trace: function trace() { },
-yy: {},
-symbols_: {"error":2,"Root":3,"TERMINATOR":4,"Body":5,"Block":6,"Line":7,"Expression":8,"Statement":9,"Return":10,"Throw":11,"BREAK":12,"CONTINUE":13,"DEBUGGER":14,"Value":15,"Invocation":16,"Code":17,"Operation":18,"Assign":19,"If":20,"Try":21,"While":22,"For":23,"Switch":24,"Extends":25,"Class":26,"Existence":27,"Comment":28,"INDENT":29,"OUTDENT":30,"Identifier":31,"IDENTIFIER":32,"AlphaNumeric":33,"NUMBER":34,"STRING":35,"Literal":36,"JS":37,"REGEX":38,"BOOL":39,"Assignable":40,"=":41,"AssignObj":42,"ThisProperty":43,":":44,"RETURN":45,"HERECOMMENT":46,"?":47,"PARAM_START":48,"ParamList":49,"PARAM_END":50,"FuncGlyph":51,"->":52,"=>":53,"OptComma":54,",":55,"Param":56,"PARAM":57,"@":58,"...":59,"Splat":60,"SimpleAssignable":61,"Accessor":62,"Array":63,"Object":64,"Parenthetical":65,"Range":66,"This":67,"PROPERTY_ACCESS":68,"PROTOTYPE_ACCESS":69,"::":70,"SOAK_ACCESS":71,"Index":72,"Slice":73,"INDEX_START":74,"INDEX_END":75,"INDEX_SOAK":76,"INDEX_PROTO":77,"{":78,"AssignList":79,"}":80,"CLASS":81,"EXTENDS":82,"ClassBody":83,"ClassAssign":84,"OptFuncExist":85,"Arguments":86,"SUPER":87,"FUNC_EXIST":88,"CALL_START":89,"CALL_END":90,"ArgList":91,"THIS":92,"RangeDots":93,"..":94,"[":95,"]":96,"Arg":97,"SimpleArgs":98,"TRY":99,"Catch":100,"FINALLY":101,"CATCH":102,"THROW":103,"(":104,")":105,"WhileSource":106,"WHILE":107,"WHEN":108,"UNTIL":109,"Loop":110,"LOOP":111,"ForBody":112,"FOR":113,"ForStart":114,"ForSource":115,"ForVariables":116,"ALL":117,"ForValue":118,"FORIN":119,"FOROF":120,"BY":121,"SWITCH":122,"Whens":123,"ELSE":124,"When":125,"LEADING_WHEN":126,"IfBlock":127,"IF":128,"UNLESS":129,"POST_IF":130,"POST_UNLESS":131,"UNARY":132,"-":133,"+":134,"--":135,"++":136,"==":137,"!=":138,"MATH":139,"SHIFT":140,"COMPARE":141,"LOGIC":142,"COMPOUND_ASSIGN":143,"RELATION":144,"$accept":0,"$end":1},
-terminals_: {"2":"error","4":"TERMINATOR","12":"BREAK","13":"CONTINUE","14":"DEBUGGER","29":"INDENT","30":"OUTDENT","32":"IDENTIFIER","34":"NUMBER","35":"STRING","37":"JS","38":"REGEX","39":"BOOL","41":"=","44":":","45":"RETURN","46":"HERECOMMENT","47":"?","48":"PARAM_START","50":"PARAM_END","52":"->","53":"=>","55":",","57":"PARAM","58":"@","59":"...","68":"PROPERTY_ACCESS","69":"PROTOTYPE_ACCESS","70":"::","71":"SOAK_ACCESS","74":"INDEX_START","75":"INDEX_END","76":"INDEX_SOAK","77":"INDEX_PROTO","78":"{","80":"}","81":"CLASS","82":"EXTENDS","87":"SUPER","88":"FUNC_EXIST","89":"CALL_START","90":"CALL_END","92":"THIS","94":"..","95":"[","96":"]","99":"TRY","101":"FINALLY","102":"CATCH","103":"THROW","104":"(","105":")","107":"WHILE","108":"WHEN","109":"UNTIL","111":"LOOP","113":"FOR","117":"ALL","119":"FORIN","120":"FOROF","121":"BY","122":"SWITCH","124":"ELSE","126":"LEADING_WHEN","128":"IF","129":"UNLESS","130":"POST_IF","131":"POST_UNLESS","132":"UNARY","133":"-","134":"+","135":"--","136":"++","137":"==","138":"!=","139":"MATH","140":"SHIFT","141":"COMPARE","142":"LOGIC","143":"COMPOUND_ASSIGN","144":"RELATION"},
-productions_: [0,[3,0],[3,1],[3,1],[3,2],[5,1],[5,3],[5,2],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[6,3],[6,2],[6,2],[31,1],[33,1],[33,1],[36,1],[36,1],[36,1],[36,1],[19,3],[19,5],[42,1],[42,1],[42,1],[42,3],[42,3],[42,5],[42,5],[42,1],[10,2],[10,1],[28,1],[27,2],[17,5],[17,2],[51,1],[51,1],[54,0],[54,1],[49,0],[49,1],[49,3],[56,1],[56,2],[56,2],[56,3],[60,2],[61,1],[61,2],[61,2],[61,1],[40,1],[40,1],[40,1],[15,1],[15,1],[15,1],[15,1],[15,1],[62,2],[62,2],[62,1],[62,2],[62,1],[62,1],[72,3],[72,2],[72,2],[64,4],[79,0],[79,1],[79,3],[79,4],[79,6],[26,2],[26,4],[26,5],[26,7],[26,4],[26,1],[26,3],[26,6],[84,1],[84,3],[84,5],[83,0],[83,1],[83,3],[83,3],[25,3],[16,3],[16,3],[16,1],[16,2],[85,0],[85,1],[86,2],[86,4],[67,1],[67,1],[93,1],[93,1],[43,2],[66,5],[73,5],[73,4],[73,4],[63,2],[63,4],[91,1],[91,3],[91,4],[91,4],[91,6],[97,1],[97,1],[98,1],[98,3],[21,2],[21,3],[21,4],[21,5],[100,3],[11,2],[65,3],[65,2],[106,2],[106,4],[106,2],[106,4],[22,2],[22,2],[22,2],[22,1],[110,2],[110,2],[23,2],[23,2],[23,2],[112,2],[112,2],[114,2],[114,3],[118,1],[118,1],[118,1],[116,1],[116,3],[115,2],[115,2],[115,4],[115,4],[115,4],[115,6],[115,6],[24,5],[24,7],[24,4],[24,6],[123,1],[123,2],[125,3],[125,4],[127,3],[127,3],[127,5],[127,3],[20,1],[20,3],[20,3],[20,3],[20,3],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,5],[18,3]],
-performAction: function anonymous(yytext,yyleng,yylineno,yy) {
-
-var $$ = arguments[5],$0=arguments[5].length;
-switch(arguments[4]) {
-case 1:return this.$ = new yy.Expressions;
-break;
-case 2:return this.$ = new yy.Expressions;
-break;
-case 3:return this.$ = $$[$0-1+1-1];
-break;
-case 4:return this.$ = $$[$0-2+1-1];
-break;
-case 5:this.$ = yy.Expressions.wrap([$$[$0-1+1-1]]);
-break;
-case 6:this.$ = $$[$0-3+1-1].push($$[$0-3+3-1]);
-break;
-case 7:this.$ = $$[$0-2+1-1];
-break;
-case 8:this.$ = $$[$0-1+1-1];
-break;
-case 9:this.$ = $$[$0-1+1-1];
-break;
-case 10:this.$ = $$[$0-1+1-1];
-break;
-case 11:this.$ = $$[$0-1+1-1];
-break;
-case 12:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 13:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 14:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 15:this.$ = $$[$0-1+1-1];
-break;
-case 16:this.$ = $$[$0-1+1-1];
-break;
-case 17:this.$ = $$[$0-1+1-1];
-break;
-case 18:this.$ = $$[$0-1+1-1];
-break;
-case 19:this.$ = $$[$0-1+1-1];
-break;
-case 20:this.$ = $$[$0-1+1-1];
-break;
-case 21:this.$ = $$[$0-1+1-1];
-break;
-case 22:this.$ = $$[$0-1+1-1];
-break;
-case 23:this.$ = $$[$0-1+1-1];
-break;
-case 24:this.$ = $$[$0-1+1-1];
-break;
-case 25:this.$ = $$[$0-1+1-1];
-break;
-case 26:this.$ = $$[$0-1+1-1];
-break;
-case 27:this.$ = $$[$0-1+1-1];
-break;
-case 28:this.$ = $$[$0-1+1-1];
-break;
-case 29:this.$ = $$[$0-3+2-1];
-break;
-case 30:this.$ = new yy.Expressions;
-break;
-case 31:this.$ = yy.Expressions.wrap([$$[$0-2+2-1]]);
-break;
-case 32:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 33:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 34:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 35:this.$ = $$[$0-1+1-1];
-break;
-case 36:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 37:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 38:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 39:this.$ = new yy.Assign($$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 40:this.$ = new yy.Assign($$[$0-5+1-1], $$[$0-5+4-1]);
-break;
-case 41:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 42:this.$ = $$[$0-1+1-1];
-break;
-case 43:this.$ = $$[$0-1+1-1];
-break;
-case 44:this.$ = new yy.Assign(new yy.Value($$[$0-3+1-1]), $$[$0-3+3-1], 'object');
-break;
-case 45:this.$ = new yy.Assign(new yy.Value($$[$0-3+1-1]), $$[$0-3+3-1], 'object');
-break;
-case 46:this.$ = new yy.Assign(new yy.Value($$[$0-5+1-1]), $$[$0-5+4-1], 'object');
-break;
-case 47:this.$ = new yy.Assign(new yy.Value($$[$0-5+1-1]), $$[$0-5+4-1], 'object');
-break;
-case 48:this.$ = $$[$0-1+1-1];
-break;
-case 49:this.$ = new yy.Return($$[$0-2+2-1]);
-break;
-case 50:this.$ = new yy.Return;
-break;
-case 51:this.$ = new yy.Comment($$[$0-1+1-1]);
-break;
-case 52:this.$ = new yy.Existence($$[$0-2+1-1]);
-break;
-case 53:this.$ = new yy.Code($$[$0-5+2-1], $$[$0-5+5-1], $$[$0-5+4-1]);
-break;
-case 54:this.$ = new yy.Code([], $$[$0-2+2-1], $$[$0-2+1-1]);
-break;
-case 55:this.$ = 'func';
-break;
-case 56:this.$ = 'boundfunc';
-break;
-case 57:this.$ = $$[$0-1+1-1];
-break;
-case 58:this.$ = $$[$0-1+1-1];
-break;
-case 59:this.$ = [];
-break;
-case 60:this.$ = [$$[$0-1+1-1]];
-break;
-case 61:this.$ = $$[$0-3+1-1].concat($$[$0-3+3-1]);
-break;
-case 62:this.$ = new yy.Literal($$[$0-1+1-1]);
-break;
-case 63:this.$ = new yy.Param($$[$0-2+2-1], true);
-break;
-case 64:this.$ = new yy.Param($$[$0-2+1-1], false, true);
-break;
-case 65:this.$ = new yy.Param($$[$0-3+2-1], true, true);
-break;
-case 66:this.$ = new yy.Splat($$[$0-2+1-1]);
-break;
-case 67:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 68:this.$ = $$[$0-2+1-1].push($$[$0-2+2-1]);
-break;
-case 69:this.$ = new yy.Value($$[$0-2+1-1], [$$[$0-2+2-1]]);
-break;
-case 70:this.$ = $$[$0-1+1-1];
-break;
-case 71:this.$ = $$[$0-1+1-1];
-break;
-case 72:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 73:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 74:this.$ = $$[$0-1+1-1];
-break;
-case 75:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 76:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 77:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 78:this.$ = $$[$0-1+1-1];
-break;
-case 79:this.$ = new yy.Accessor($$[$0-2+2-1]);
-break;
-case 80:this.$ = new yy.Accessor($$[$0-2+2-1], 'prototype');
-break;
-case 81:this.$ = new yy.Accessor(new yy.Literal('prototype'));
-break;
-case 82:this.$ = new yy.Accessor($$[$0-2+2-1], 'soak');
-break;
-case 83:this.$ = $$[$0-1+1-1];
-break;
-case 84:this.$ = new yy.Slice($$[$0-1+1-1]);
-break;
-case 85:this.$ = new yy.Index($$[$0-3+2-1]);
-break;
-case 86:this.$ = (function () {
-        $$[$0-2+2-1].soakNode = true;
-        return $$[$0-2+2-1];
-      }());
-break;
-case 87:this.$ = (function () {
-        $$[$0-2+2-1].proto = true;
-        return $$[$0-2+2-1];
-      }());
-break;
-case 88:this.$ = new yy.ObjectLiteral($$[$0-4+2-1]);
-break;
-case 89:this.$ = [];
-break;
-case 90:this.$ = [$$[$0-1+1-1]];
-break;
-case 91:this.$ = $$[$0-3+1-1].concat($$[$0-3+3-1]);
-break;
-case 92:this.$ = $$[$0-4+1-1].concat($$[$0-4+4-1]);
-break;
-case 93:this.$ = $$[$0-6+1-1].concat($$[$0-6+4-1]);
-break;
-case 94:this.$ = new yy.Class($$[$0-2+2-1]);
-break;
-case 95:this.$ = new yy.Class($$[$0-4+2-1], $$[$0-4+4-1]);
-break;
-case 96:this.$ = new yy.Class($$[$0-5+2-1], null, $$[$0-5+4-1]);
-break;
-case 97:this.$ = new yy.Class($$[$0-7+2-1], $$[$0-7+4-1], $$[$0-7+6-1]);
-break;
-case 98:this.$ = new yy.Class('__temp__', null, $$[$0-4+3-1]);
-break;
-case 99:this.$ = new yy.Class('__temp__', null, new yy.Expressions);
-break;
-case 100:this.$ = new yy.Class('__temp__', $$[$0-3+3-1], new yy.Expressions);
-break;
-case 101:this.$ = new yy.Class('__temp__', $$[$0-6+3-1], $$[$0-6+5-1]);
-break;
-case 102:this.$ = $$[$0-1+1-1];
-break;
-case 103:this.$ = new yy.Assign(new yy.Value($$[$0-3+1-1]), $$[$0-3+3-1], 'this');
-break;
-case 104:this.$ = new yy.Assign(new yy.Value($$[$0-5+1-1]), $$[$0-5+4-1], 'this');
-break;
-case 105:this.$ = [];
-break;
-case 106:this.$ = [$$[$0-1+1-1]];
-break;
-case 107:this.$ = $$[$0-3+1-1].concat($$[$0-3+3-1]);
-break;
-case 108:this.$ = $$[$0-3+2-1];
-break;
-case 109:this.$ = new yy.Extends($$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 110:this.$ = new yy.Call($$[$0-3+1-1], $$[$0-3+3-1], $$[$0-3+2-1]);
-break;
-case 111:this.$ = new yy.Call($$[$0-3+1-1], $$[$0-3+3-1], $$[$0-3+2-1]);
-break;
-case 112:this.$ = new yy.Call('super', [new yy.Splat(new yy.Literal('arguments'))]);
-break;
-case 113:this.$ = new yy.Call('super', $$[$0-2+2-1]);
-break;
-case 114:this.$ = false;
-break;
-case 115:this.$ = true;
-break;
-case 116:this.$ = [];
-break;
-case 117:this.$ = $$[$0-4+2-1];
-break;
-case 118:this.$ = new yy.Value(new yy.Literal('this'));
-break;
-case 119:this.$ = new yy.Value(new yy.Literal('this'));
-break;
-case 120:this.$ = 'inclusive';
-break;
-case 121:this.$ = 'exclusive';
-break;
-case 122:this.$ = new yy.Value(new yy.Literal('this'), [new yy.Accessor($$[$0-2+2-1])], 'this');
-break;
-case 123:this.$ = new yy.Range($$[$0-5+2-1], $$[$0-5+4-1], $$[$0-5+3-1]);
-break;
-case 124:this.$ = new yy.Range($$[$0-5+2-1], $$[$0-5+4-1], $$[$0-5+3-1]);
-break;
-case 125:this.$ = new yy.Range($$[$0-4+2-1], null, $$[$0-4+3-1]);
-break;
-case 126:this.$ = new yy.Range(null, $$[$0-4+3-1], $$[$0-4+2-1]);
-break;
-case 127:this.$ = new yy.ArrayLiteral([]);
-break;
-case 128:this.$ = new yy.ArrayLiteral($$[$0-4+2-1]);
-break;
-case 129:this.$ = [$$[$0-1+1-1]];
-break;
-case 130:this.$ = $$[$0-3+1-1].concat($$[$0-3+3-1]);
-break;
-case 131:this.$ = $$[$0-4+1-1].concat($$[$0-4+4-1]);
-break;
-case 132:this.$ = $$[$0-4+2-1];
-break;
-case 133:this.$ = $$[$0-6+1-1].concat($$[$0-6+4-1]);
-break;
-case 134:this.$ = $$[$0-1+1-1];
-break;
-case 135:this.$ = $$[$0-1+1-1];
-break;
-case 136:this.$ = $$[$0-1+1-1];
-break;
-case 137:this.$ = [].concat($$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 138:this.$ = new yy.Try($$[$0-2+2-1]);
-break;
-case 139:this.$ = new yy.Try($$[$0-3+2-1], $$[$0-3+3-1][0], $$[$0-3+3-1][1]);
-break;
-case 140:this.$ = new yy.Try($$[$0-4+2-1], null, null, $$[$0-4+4-1]);
-break;
-case 141:this.$ = new yy.Try($$[$0-5+2-1], $$[$0-5+3-1][0], $$[$0-5+3-1][1], $$[$0-5+5-1]);
-break;
-case 142:this.$ = [$$[$0-3+2-1], $$[$0-3+3-1]];
-break;
-case 143:this.$ = new yy.Throw($$[$0-2+2-1]);
-break;
-case 144:this.$ = new yy.Parens($$[$0-3+2-1]);
-break;
-case 145:this.$ = new yy.Parens(new yy.Literal(''));
-break;
-case 146:this.$ = new yy.While($$[$0-2+2-1]);
-break;
-case 147:this.$ = new yy.While($$[$0-4+2-1], {
-          guard: $$[$0-4+4-1]
-        });
-break;
-case 148:this.$ = new yy.While($$[$0-2+2-1], {
-          invert: true
-        });
-break;
-case 149:this.$ = new yy.While($$[$0-4+2-1], {
-          invert: true,
-          guard: $$[$0-4+4-1]
-        });
-break;
-case 150:this.$ = $$[$0-2+1-1].addBody($$[$0-2+2-1]);
-break;
-case 151:this.$ = $$[$0-2+2-1].addBody(yy.Expressions.wrap([$$[$0-2+1-1]]));
-break;
-case 152:this.$ = $$[$0-2+2-1].addBody(yy.Expressions.wrap([$$[$0-2+1-1]]));
-break;
-case 153:this.$ = $$[$0-1+1-1];
-break;
-case 154:this.$ = new yy.While(new yy.Literal('true')).addBody($$[$0-2+2-1]);
-break;
-case 155:this.$ = new yy.While(new yy.Literal('true')).addBody(yy.Expressions.wrap([$$[$0-2+2-1]]));
-break;
-case 156:this.$ = new yy.For($$[$0-2+1-1], $$[$0-2+2-1], $$[$0-2+2-1].vars[0], $$[$0-2+2-1].vars[1]);
-break;
-case 157:this.$ = new yy.For($$[$0-2+1-1], $$[$0-2+2-1], $$[$0-2+2-1].vars[0], $$[$0-2+2-1].vars[1]);
-break;
-case 158:this.$ = new yy.For($$[$0-2+2-1], $$[$0-2+1-1], $$[$0-2+1-1].vars[0], $$[$0-2+1-1].vars[1]);
-break;
-case 159:this.$ = {
-          source: new yy.Value($$[$0-2+2-1]),
-          vars: []
-        };
-break;
-case 160:this.$ = (function () {
-        $$[$0-2+2-1].raw = $$[$0-2+1-1].raw;
-        $$[$0-2+2-1].vars = $$[$0-2+1-1];
-        return $$[$0-2+2-1];
-      }());
-break;
-case 161:this.$ = $$[$0-2+2-1];
-break;
-case 162:this.$ = (function () {
-        $$[$0-3+3-1].raw = true;
-        return $$[$0-3+3-1];
-      }());
-break;
-case 163:this.$ = $$[$0-1+1-1];
-break;
-case 164:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 165:this.$ = new yy.Value($$[$0-1+1-1]);
-break;
-case 166:this.$ = [$$[$0-1+1-1]];
-break;
-case 167:this.$ = [$$[$0-3+1-1], $$[$0-3+3-1]];
-break;
-case 168:this.$ = {
-          source: $$[$0-2+2-1]
-        };
-break;
-case 169:this.$ = {
-          source: $$[$0-2+2-1],
-          object: true
-        };
-break;
-case 170:this.$ = {
-          source: $$[$0-4+2-1],
-          guard: $$[$0-4+4-1]
-        };
-break;
-case 171:this.$ = {
-          source: $$[$0-4+2-1],
-          guard: $$[$0-4+4-1],
-          object: true
-        };
-break;
-case 172:this.$ = {
-          source: $$[$0-4+2-1],
-          step: $$[$0-4+4-1]
-        };
-break;
-case 173:this.$ = {
-          source: $$[$0-6+2-1],
-          guard: $$[$0-6+4-1],
-          step: $$[$0-6+6-1]
-        };
-break;
-case 174:this.$ = {
-          source: $$[$0-6+2-1],
-          step: $$[$0-6+4-1],
-          guard: $$[$0-6+6-1]
-        };
-break;
-case 175:this.$ = new yy.Switch($$[$0-5+2-1], $$[$0-5+4-1]);
-break;
-case 176:this.$ = new yy.Switch($$[$0-7+2-1], $$[$0-7+4-1], $$[$0-7+6-1]);
-break;
-case 177:this.$ = new yy.Switch(null, $$[$0-4+3-1]);
-break;
-case 178:this.$ = new yy.Switch(null, $$[$0-6+3-1], $$[$0-6+5-1]);
-break;
-case 179:this.$ = $$[$0-1+1-1];
-break;
-case 180:this.$ = $$[$0-2+1-1].concat($$[$0-2+2-1]);
-break;
-case 181:this.$ = [[$$[$0-3+2-1], $$[$0-3+3-1]]];
-break;
-case 182:this.$ = [[$$[$0-4+2-1], $$[$0-4+3-1]]];
-break;
-case 183:this.$ = new yy.If($$[$0-3+2-1], $$[$0-3+3-1]);
-break;
-case 184:this.$ = new yy.If($$[$0-3+2-1], $$[$0-3+3-1], {
-          invert: true
-        });
-break;
-case 185:this.$ = $$[$0-5+1-1].addElse(new yy.If($$[$0-5+4-1], $$[$0-5+5-1]));
-break;
-case 186:this.$ = $$[$0-3+1-1].addElse($$[$0-3+3-1]);
-break;
-case 187:this.$ = $$[$0-1+1-1];
-break;
-case 188:this.$ = new yy.If($$[$0-3+3-1], yy.Expressions.wrap([$$[$0-3+1-1]]), {
-          statement: true
-        });
-break;
-case 189:this.$ = new yy.If($$[$0-3+3-1], yy.Expressions.wrap([$$[$0-3+1-1]]), {
-          statement: true
-        });
-break;
-case 190:this.$ = new yy.If($$[$0-3+3-1], yy.Expressions.wrap([$$[$0-3+1-1]]), {
-          statement: true,
-          invert: true
-        });
-break;
-case 191:this.$ = new yy.If($$[$0-3+3-1], yy.Expressions.wrap([$$[$0-3+1-1]]), {
-          statement: true,
-          invert: true
-        });
-break;
-case 192:this.$ = new yy.Op($$[$0-2+1-1], $$[$0-2+2-1]);
-break;
-case 193:this.$ = new yy.Op('-', $$[$0-2+2-1]);
-break;
-case 194:this.$ = new yy.Op('+', $$[$0-2+2-1]);
-break;
-case 195:this.$ = new yy.Op('--', $$[$0-2+2-1]);
-break;
-case 196:this.$ = new yy.Op('++', $$[$0-2+2-1]);
-break;
-case 197:this.$ = new yy.Op('--', $$[$0-2+1-1], null, true);
-break;
-case 198:this.$ = new yy.Op('++', $$[$0-2+1-1], null, true);
-break;
-case 199:this.$ = new yy.Op('+', $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 200:this.$ = new yy.Op('-', $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 201:this.$ = new yy.Op('==', $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 202:this.$ = new yy.Op('!=', $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 203:this.$ = new yy.Op($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 204:this.$ = new yy.Op($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 205:this.$ = new yy.Op($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 206:this.$ = new yy.Op($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 207:this.$ = new yy.Op($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]);
-break;
-case 208:this.$ = new yy.Op($$[$0-5+2-1], $$[$0-5+1-1], $$[$0-5+4-1]);
-break;
-case 209:this.$ = $$[$0-3+2-1].charAt(0) === '!' ? ($$[$0-3+2-1] === '!in' ? new yy.Op('!', new yy.In($$[$0-3+1-1], $$[$0-3+3-1])) : new yy.Op('!', new yy.Parens(new yy.Op($$[$0-3+2-1].slice(1), $$[$0-3+1-1], $$[$0-3+3-1])))) : ($$[$0-3+2-1] === 'in' ? new yy.In($$[$0-3+1-1], $$[$0-3+3-1]) : new yy.Op($$[$0-3+2-1], $$[$0-3+1-1], $$[$0-3+3-1]));
-break;
-}
-},
-table: [{"1":[2,1],"3":1,"4":[1,2],"5":3,"6":4,"7":5,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,6],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[3]},{"1":[2,2],"28":77,"46":[1,49]},{"1":[2,3],"4":[1,78]},{"4":[1,79]},{"1":[2,5],"4":[2,5],"30":[2,5]},{"5":80,"7":5,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[1,81],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,8],"4":[2,8],"30":[2,8],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,9],"4":[2,9],"30":[2,9],"106":98,"107":[1,68],"109":[1,69],"112":99,"113":[1,71],"114":72,"130":[1,96],"131":[1,97]},{"1":[2,15],"4":[2,15],"29":[2,15],"30":[2,15],"47":[2,15],"55":[2,15],"59":[2,15],"62":101,"68":[1,103],"69":[1,104],"70":[1,105],"71":[1,106],"72":107,"73":108,"74":[1,109],"75":[2,15],"76":[1,110],"77":[1,111],"80":[2,15],"85":100,"88":[1,102],"89":[2,114],"90":[2,15],"94":[2,15],"96":[2,15],"105":[2,15],"107":[2,15],"108":[2,15],"109":[2,15],"113":[2,15],"121":[2,15],"130":[2,15],"131":[2,15],"133":[2,15],"134":[2,15],"137":[2,15],"138":[2,15],"139":[2,15],"140":[2,15],"141":[2,15],"142":[2,15],"144":[2,15]},{"1":[2,16],"4":[2,16],"29":[2,16],"30":[2,16],"47":[2,16],"55":[2,16],"59":[2,16],"62":113,"68":[1,103],"69":[1,104],"70":[1,105],"71":[1,106],"72":107,"73":108,"74":[1,109],"75":[2,16],"76":[1,110],"77":[1,111],"80":[2,16],"85":112,"88":[1,102],"89":[2,114],"90":[2,16],"94":[2,16],"96":[2,16],"105":[2,16],"107":[2,16],"108":[2,16],"109":[2,16],"113":[2,16],"121":[2,16],"130":[2,16],"131":[2,16],"133":[2,16],"134":[2,16],"137":[2,16],"138":[2,16],"139":[2,16],"140":[2,16],"141":[2,16],"142":[2,16],"144":[2,16]},{"1":[2,17],"4":[2,17],"29":[2,17],"30":[2,17],"47":[2,17],"55":[2,17],"59":[2,17],"75":[2,17],"80":[2,17],"90":[2,17],"94":[2,17],"96":[2,17],"105":[2,17],"107":[2,17],"108":[2,17],"109":[2,17],"113":[2,17],"121":[2,17],"130":[2,17],"131":[2,17],"133":[2,17],"134":[2,17],"137":[2,17],"138":[2,17],"139":[2,17],"140":[2,17],"141":[2,17],"142":[2,17],"144":[2,17]},{"1":[2,18],"4":[2,18],"29":[2,18],"30":[2,18],"47":[2,18],"55":[2,18],"59":[2,18],"75":[2,18],"80":[2,18],"90":[2,18],"94":[2,18],"96":[2,18],"105":[2,18],"107":[2,18],"108":[2,18],"109":[2,18],"113":[2,18],"121":[2,18],"130":[2,18],"131":[2,18],"133":[2,18],"134":[2,18],"137":[2,18],"138":[2,18],"139":[2,18],"140":[2,18],"141":[2,18],"142":[2,18],"144":[2,18]},{"1":[2,19],"4":[2,19],"29":[2,19],"30":[2,19],"47":[2,19],"55":[2,19],"59":[2,19],"75":[2,19],"80":[2,19],"90":[2,19],"94":[2,19],"96":[2,19],"105":[2,19],"107":[2,19],"108":[2,19],"109":[2,19],"113":[2,19],"121":[2,19],"130":[2,19],"131":[2,19],"133":[2,19],"134":[2,19],"137":[2,19],"138":[2,19],"139":[2,19],"140":[2,19],"141":[2,19],"142":[2,19],"144":[2,19]},{"1":[2,20],"4":[2,20],"29":[2,20],"30":[2,20],"47":[2,20],"55":[2,20],"59":[2,20],"75":[2,20],"80":[2,20],"90":[2,20],"94":[2,20],"96":[2,20],"105":[2,20],"107":[2,20],"108":[2,20],"109":[2,20],"113":[2,20],"121":[2,20],"130":[2,20],"131":[2,20],"133":[2,20],"134":[2,20],"137":[2,20],"138":[2,20],"139":[2,20],"140":[2,20],"141":[2,20],"142":[2,20],"144":[2,20]},{"1":[2,21],"4":[2,21],"29":[2,21],"30":[2,21],"47":[2,21],"55":[2,21],"59":[2,21],"75":[2,21],"80":[2,21],"90":[2,21],"94":[2,21],"96":[2,21],"105":[2,21],"107":[2,21],"108":[2,21],"109":[2,21],"113":[2,21],"121":[2,21],"130":[2,21],"131":[2,21],"133":[2,21],"134":[2,21],"137":[2,21],"138":[2,21],"139":[2,21],"140":[2,21],"141":[2,21],"142":[2,21],"144":[2,21]},{"1":[2,22],"4":[2,22],"29":[2,22],"30":[2,22],"47":[2,22],"55":[2,22],"59":[2,22],"75":[2,22],"80":[2,22],"90":[2,22],"94":[2,22],"96":[2,22],"105":[2,22],"107":[2,22],"108":[2,22],"109":[2,22],"113":[2,22],"121":[2,22],"130":[2,22],"131":[2,22],"133":[2,22],"134":[2,22],"137":[2,22],"138":[2,22],"139":[2,22],"140":[2,22],"141":[2,22],"142":[2,22],"144":[2,22]},{"1":[2,23],"4":[2,23],"29":[2,23],"30":[2,23],"47":[2,23],"55":[2,23],"59":[2,23],"75":[2,23],"80":[2,23],"90":[2,23],"94":[2,23],"96":[2,23],"105":[2,23],"107":[2,23],"108":[2,23],"109":[2,23],"113":[2,23],"121":[2,23],"130":[2,23],"131":[2,23],"133":[2,23],"134":[2,23],"137":[2,23],"138":[2,23],"139":[2,23],"140":[2,23],"141":[2,23],"142":[2,23],"144":[2,23]},{"1":[2,24],"4":[2,24],"29":[2,24],"30":[2,24],"47":[2,24],"55":[2,24],"59":[2,24],"75":[2,24],"80":[2,24],"90":[2,24],"94":[2,24],"96":[2,24],"105":[2,24],"107":[2,24],"108":[2,24],"109":[2,24],"113":[2,24],"121":[2,24],"130":[2,24],"131":[2,24],"133":[2,24],"134":[2,24],"137":[2,24],"138":[2,24],"139":[2,24],"140":[2,24],"141":[2,24],"142":[2,24],"144":[2,24]},{"1":[2,25],"4":[2,25],"29":[2,25],"30":[2,25],"47":[2,25],"55":[2,25],"59":[2,25],"75":[2,25],"80":[2,25],"90":[2,25],"94":[2,25],"96":[2,25],"105":[2,25],"107":[2,25],"108":[2,25],"109":[2,25],"113":[2,25],"121":[2,25],"130":[2,25],"131":[2,25],"133":[2,25],"134":[2,25],"137":[2,25],"138":[2,25],"139":[2,25],"140":[2,25],"141":[2,25],"142":[2,25],"144":[2,25]},{"1":[2,26],"4":[2,26],"29":[2,26],"30":[2,26],"47":[2,26],"55":[2,26],"59":[2,26],"75":[2,26],"80":[2,26],"90":[2,26],"94":[2,26],"96":[2,26],"105":[2,26],"107":[2,26],"108":[2,26],"109":[2,26],"113":[2,26],"121":[2,26],"130":[2,26],"131":[2,26],"133":[2,26],"134":[2,26],"137":[2,26],"138":[2,26],"139":[2,26],"140":[2,26],"141":[2,26],"142":[2,26],"144":[2,26]},{"1":[2,27],"4":[2,27],"29":[2,27],"30":[2,27],"47":[2,27],"55":[2,27],"59":[2,27],"75":[2,27],"80":[2,27],"90":[2,27],"94":[2,27],"96":[2,27],"105":[2,27],"107":[2,27],"108":[2,27],"109":[2,27],"113":[2,27],"121":[2,27],"130":[2,27],"131":[2,27],"133":[2,27],"134":[2,27],"137":[2,27],"138":[2,27],"139":[2,27],"140":[2,27],"141":[2,27],"142":[2,27],"144":[2,27]},{"1":[2,28],"4":[2,28],"29":[2,28],"30":[2,28],"47":[2,28],"55":[2,28],"59":[2,28],"75":[2,28],"80":[2,28],"90":[2,28],"94":[2,28],"96":[2,28],"105":[2,28],"107":[2,28],"108":[2,28],"109":[2,28],"113":[2,28],"121":[2,28],"130":[2,28],"131":[2,28],"133":[2,28],"134":[2,28],"137":[2,28],"138":[2,28],"139":[2,28],"140":[2,28],"141":[2,28],"142":[2,28],"144":[2,28]},{"1":[2,10],"4":[2,10],"30":[2,10],"107":[2,10],"109":[2,10],"113":[2,10],"130":[2,10],"131":[2,10]},{"1":[2,11],"4":[2,11],"30":[2,11],"107":[2,11],"109":[2,11],"113":[2,11],"130":[2,11],"131":[2,11]},{"1":[2,12],"4":[2,12],"30":[2,12],"107":[2,12],"109":[2,12],"113":[2,12],"130":[2,12],"131":[2,12]},{"1":[2,13],"4":[2,13],"30":[2,13],"107":[2,13],"109":[2,13],"113":[2,13],"130":[2,13],"131":[2,13]},{"1":[2,14],"4":[2,14],"30":[2,14],"107":[2,14],"109":[2,14],"113":[2,14],"130":[2,14],"131":[2,14]},{"1":[2,74],"4":[2,74],"29":[2,74],"30":[2,74],"41":[1,114],"47":[2,74],"55":[2,74],"59":[2,74],"68":[2,74],"69":[2,74],"70":[2,74],"71":[2,74],"74":[2,74],"75":[2,74],"76":[2,74],"77":[2,74],"80":[2,74],"88":[2,74],"89":[2,74],"90":[2,74],"94":[2,74],"96":[2,74],"105":[2,74],"107":[2,74],"108":[2,74],"109":[2,74],"113":[2,74],"121":[2,74],"130":[2,74],"131":[2,74],"133":[2,74],"134":[2,74],"137":[2,74],"138":[2,74],"139":[2,74],"140":[2,74],"141":[2,74],"142":[2,74],"144":[2,74]},{"1":[2,75],"4":[2,75],"29":[2,75],"30":[2,75],"47":[2,75],"55":[2,75],"59":[2,75],"68":[2,75],"69":[2,75],"70":[2,75],"71":[2,75],"74":[2,75],"75":[2,75],"76":[2,75],"77":[2,75],"80":[2,75],"88":[2,75],"89":[2,75],"90":[2,75],"94":[2,75],"96":[2,75],"105":[2,75],"107":[2,75],"108":[2,75],"109":[2,75],"113":[2,75],"121":[2,75],"130":[2,75],"131":[2,75],"133":[2,75],"134":[2,75],"137":[2,75],"138":[2,75],"139":[2,75],"140":[2,75],"141":[2,75],"142":[2,75],"144":[2,75]},{"1":[2,76],"4":[2,76],"29":[2,76],"30":[2,76],"47":[2,76],"55":[2,76],"59":[2,76],"68":[2,76],"69":[2,76],"70":[2,76],"71":[2,76],"74":[2,76],"75":[2,76],"76":[2,76],"77":[2,76],"80":[2,76],"88":[2,76],"89":[2,76],"90":[2,76],"94":[2,76],"96":[2,76],"105":[2,76],"107":[2,76],"108":[2,76],"109":[2,76],"113":[2,76],"121":[2,76],"130":[2,76],"131":[2,76],"133":[2,76],"134":[2,76],"137":[2,76],"138":[2,76],"139":[2,76],"140":[2,76],"141":[2,76],"142":[2,76],"144":[2,76]},{"1":[2,77],"4":[2,77],"29":[2,77],"30":[2,77],"47":[2,77],"55":[2,77],"59":[2,77],"68":[2,77],"69":[2,77],"70":[2,77],"71":[2,77],"74":[2,77],"75":[2,77],"76":[2,77],"77":[2,77],"80":[2,77],"88":[2,77],"89":[2,77],"90":[2,77],"94":[2,77],"96":[2,77],"105":[2,77],"107":[2,77],"108":[2,77],"109":[2,77],"113":[2,77],"121":[2,77],"130":[2,77],"131":[2,77],"133":[2,77],"134":[2,77],"137":[2,77],"138":[2,77],"139":[2,77],"140":[2,77],"141":[2,77],"142":[2,77],"144":[2,77]},{"1":[2,78],"4":[2,78],"29":[2,78],"30":[2,78],"47":[2,78],"55":[2,78],"59":[2,78],"68":[2,78],"69":[2,78],"70":[2,78],"71":[2,78],"74":[2,78],"75":[2,78],"76":[2,78],"77":[2,78],"80":[2,78],"88":[2,78],"89":[2,78],"90":[2,78],"94":[2,78],"96":[2,78],"105":[2,78],"107":[2,78],"108":[2,78],"109":[2,78],"113":[2,78],"121":[2,78],"130":[2,78],"131":[2,78],"133":[2,78],"134":[2,78],"137":[2,78],"138":[2,78],"139":[2,78],"140":[2,78],"141":[2,78],"142":[2,78],"144":[2,78]},{"1":[2,112],"4":[2,112],"29":[2,112],"30":[2,112],"47":[2,112],"55":[2,112],"59":[2,112],"68":[2,112],"69":[2,112],"70":[2,112],"71":[2,112],"74":[2,112],"75":[2,112],"76":[2,112],"77":[2,112],"80":[2,112],"86":115,"88":[2,112],"89":[1,116],"90":[2,112],"94":[2,112],"96":[2,112],"105":[2,112],"107":[2,112],"108":[2,112],"109":[2,112],"113":[2,112],"121":[2,112],"130":[2,112],"131":[2,112],"133":[2,112],"134":[2,112],"137":[2,112],"138":[2,112],"139":[2,112],"140":[2,112],"141":[2,112],"142":[2,112],"144":[2,112]},{"49":117,"50":[2,59],"55":[2,59],"56":118,"57":[1,119],"58":[1,120]},{"4":[1,122],"6":121,"29":[1,6]},{"8":123,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":125,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":126,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"15":128,"16":129,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":130,"43":65,"58":[1,61],"61":127,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"87":[1,33],"92":[1,60],"95":[1,59],"104":[1,58]},{"15":128,"16":129,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":130,"43":65,"58":[1,61],"61":131,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"87":[1,33],"92":[1,60],"95":[1,59],"104":[1,58]},{"1":[2,71],"4":[2,71],"29":[2,71],"30":[2,71],"41":[2,71],"47":[2,71],"55":[2,71],"59":[2,71],"68":[2,71],"69":[2,71],"70":[2,71],"71":[2,71],"74":[2,71],"75":[2,71],"76":[2,71],"77":[2,71],"80":[2,71],"82":[1,135],"88":[2,71],"89":[2,71],"90":[2,71],"94":[2,71],"96":[2,71],"105":[2,71],"107":[2,71],"108":[2,71],"109":[2,71],"113":[2,71],"121":[2,71],"130":[2,71],"131":[2,71],"133":[2,71],"134":[2,71],"135":[1,132],"136":[1,133],"137":[2,71],"138":[2,71],"139":[2,71],"140":[2,71],"141":[2,71],"142":[2,71],"143":[1,134],"144":[2,71]},{"1":[2,187],"4":[2,187],"29":[2,187],"30":[2,187],"47":[2,187],"55":[2,187],"59":[2,187],"75":[2,187],"80":[2,187],"90":[2,187],"94":[2,187],"96":[2,187],"105":[2,187],"107":[2,187],"108":[2,187],"109":[2,187],"113":[2,187],"121":[2,187],"124":[1,136],"130":[2,187],"131":[2,187],"133":[2,187],"134":[2,187],"137":[2,187],"138":[2,187],"139":[2,187],"140":[2,187],"141":[2,187],"142":[2,187],"144":[2,187]},{"4":[1,122],"6":137,"29":[1,6]},{"4":[1,122],"6":138,"29":[1,6]},{"1":[2,153],"4":[2,153],"29":[2,153],"30":[2,153],"47":[2,153],"55":[2,153],"59":[2,153],"75":[2,153],"80":[2,153],"90":[2,153],"94":[2,153],"96":[2,153],"105":[2,153],"107":[2,153],"108":[2,153],"109":[2,153],"113":[2,153],"121":[2,153],"130":[2,153],"131":[2,153],"133":[2,153],"134":[2,153],"137":[2,153],"138":[2,153],"139":[2,153],"140":[2,153],"141":[2,153],"142":[2,153],"144":[2,153]},{"4":[1,122],"6":139,"29":[1,6]},{"8":140,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,141],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,99],"4":[2,99],"15":128,"16":129,"29":[1,143],"30":[2,99],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":130,"43":65,"47":[2,99],"55":[2,99],"58":[1,61],"59":[2,99],"61":142,"63":52,"64":53,"65":30,"66":31,"67":32,"75":[2,99],"78":[1,73],"80":[2,99],"82":[1,144],"87":[1,33],"90":[2,99],"92":[1,60],"94":[2,99],"95":[1,59],"96":[2,99],"104":[1,58],"105":[2,99],"107":[2,99],"108":[2,99],"109":[2,99],"113":[2,99],"121":[2,99],"130":[2,99],"131":[2,99],"133":[2,99],"134":[2,99],"137":[2,99],"138":[2,99],"139":[2,99],"140":[2,99],"141":[2,99],"142":[2,99],"144":[2,99]},{"1":[2,51],"4":[2,51],"29":[2,51],"30":[2,51],"47":[2,51],"55":[2,51],"59":[2,51],"75":[2,51],"80":[2,51],"90":[2,51],"94":[2,51],"96":[2,51],"101":[2,51],"102":[2,51],"105":[2,51],"107":[2,51],"108":[2,51],"109":[2,51],"113":[2,51],"121":[2,51],"124":[2,51],"126":[2,51],"130":[2,51],"131":[2,51],"133":[2,51],"134":[2,51],"137":[2,51],"138":[2,51],"139":[2,51],"140":[2,51],"141":[2,51],"142":[2,51],"144":[2,51]},{"1":[2,50],"4":[2,50],"8":145,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[2,50],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"130":[2,50],"131":[2,50],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":146,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,72],"4":[2,72],"29":[2,72],"30":[2,72],"41":[2,72],"47":[2,72],"55":[2,72],"59":[2,72],"68":[2,72],"69":[2,72],"70":[2,72],"71":[2,72],"74":[2,72],"75":[2,72],"76":[2,72],"77":[2,72],"80":[2,72],"88":[2,72],"89":[2,72],"90":[2,72],"94":[2,72],"96":[2,72],"105":[2,72],"107":[2,72],"108":[2,72],"109":[2,72],"113":[2,72],"121":[2,72],"130":[2,72],"131":[2,72],"133":[2,72],"134":[2,72],"137":[2,72],"138":[2,72],"139":[2,72],"140":[2,72],"141":[2,72],"142":[2,72],"144":[2,72]},{"1":[2,73],"4":[2,73],"29":[2,73],"30":[2,73],"41":[2,73],"47":[2,73],"55":[2,73],"59":[2,73],"68":[2,73],"69":[2,73],"70":[2,73],"71":[2,73],"74":[2,73],"75":[2,73],"76":[2,73],"77":[2,73],"80":[2,73],"88":[2,73],"89":[2,73],"90":[2,73],"94":[2,73],"96":[2,73],"105":[2,73],"107":[2,73],"108":[2,73],"109":[2,73],"113":[2,73],"121":[2,73],"130":[2,73],"131":[2,73],"133":[2,73],"134":[2,73],"137":[2,73],"138":[2,73],"139":[2,73],"140":[2,73],"141":[2,73],"142":[2,73],"144":[2,73]},{"1":[2,35],"4":[2,35],"29":[2,35],"30":[2,35],"47":[2,35],"55":[2,35],"59":[2,35],"68":[2,35],"69":[2,35],"70":[2,35],"71":[2,35],"74":[2,35],"75":[2,35],"76":[2,35],"77":[2,35],"80":[2,35],"88":[2,35],"89":[2,35],"90":[2,35],"94":[2,35],"96":[2,35],"105":[2,35],"107":[2,35],"108":[2,35],"109":[2,35],"113":[2,35],"121":[2,35],"130":[2,35],"131":[2,35],"133":[2,35],"134":[2,35],"137":[2,35],"138":[2,35],"139":[2,35],"140":[2,35],"141":[2,35],"142":[2,35],"144":[2,35]},{"1":[2,36],"4":[2,36],"29":[2,36],"30":[2,36],"47":[2,36],"55":[2,36],"59":[2,36],"68":[2,36],"69":[2,36],"70":[2,36],"71":[2,36],"74":[2,36],"75":[2,36],"76":[2,36],"77":[2,36],"80":[2,36],"88":[2,36],"89":[2,36],"90":[2,36],"94":[2,36],"96":[2,36],"105":[2,36],"107":[2,36],"108":[2,36],"109":[2,36],"113":[2,36],"121":[2,36],"130":[2,36],"131":[2,36],"133":[2,36],"134":[2,36],"137":[2,36],"138":[2,36],"139":[2,36],"140":[2,36],"141":[2,36],"142":[2,36],"144":[2,36]},{"1":[2,37],"4":[2,37],"29":[2,37],"30":[2,37],"47":[2,37],"55":[2,37],"59":[2,37],"68":[2,37],"69":[2,37],"70":[2,37],"71":[2,37],"74":[2,37],"75":[2,37],"76":[2,37],"77":[2,37],"80":[2,37],"88":[2,37],"89":[2,37],"90":[2,37],"94":[2,37],"96":[2,37],"105":[2,37],"107":[2,37],"108":[2,37],"109":[2,37],"113":[2,37],"121":[2,37],"130":[2,37],"131":[2,37],"133":[2,37],"134":[2,37],"137":[2,37],"138":[2,37],"139":[2,37],"140":[2,37],"141":[2,37],"142":[2,37],"144":[2,37]},{"1":[2,38],"4":[2,38],"29":[2,38],"30":[2,38],"47":[2,38],"55":[2,38],"59":[2,38],"68":[2,38],"69":[2,38],"70":[2,38],"71":[2,38],"74":[2,38],"75":[2,38],"76":[2,38],"77":[2,38],"80":[2,38],"88":[2,38],"89":[2,38],"90":[2,38],"94":[2,38],"96":[2,38],"105":[2,38],"107":[2,38],"108":[2,38],"109":[2,38],"113":[2,38],"121":[2,38],"130":[2,38],"131":[2,38],"133":[2,38],"134":[2,38],"137":[2,38],"138":[2,38],"139":[2,38],"140":[2,38],"141":[2,38],"142":[2,38],"144":[2,38]},{"8":147,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"105":[1,148],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":149,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"91":151,"92":[1,60],"95":[1,59],"96":[1,150],"97":152,"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,118],"4":[2,118],"29":[2,118],"30":[2,118],"47":[2,118],"55":[2,118],"59":[2,118],"68":[2,118],"69":[2,118],"70":[2,118],"71":[2,118],"74":[2,118],"75":[2,118],"76":[2,118],"77":[2,118],"80":[2,118],"88":[2,118],"89":[2,118],"90":[2,118],"94":[2,118],"96":[2,118],"105":[2,118],"107":[2,118],"108":[2,118],"109":[2,118],"113":[2,118],"121":[2,118],"130":[2,118],"131":[2,118],"133":[2,118],"134":[2,118],"137":[2,118],"138":[2,118],"139":[2,118],"140":[2,118],"141":[2,118],"142":[2,118],"144":[2,118]},{"1":[2,119],"4":[2,119],"29":[2,119],"30":[2,119],"31":155,"32":[1,76],"47":[2,119],"55":[2,119],"59":[2,119],"68":[2,119],"69":[2,119],"70":[2,119],"71":[2,119],"74":[2,119],"75":[2,119],"76":[2,119],"77":[2,119],"80":[2,119],"88":[2,119],"89":[2,119],"90":[2,119],"94":[2,119],"96":[2,119],"105":[2,119],"107":[2,119],"108":[2,119],"109":[2,119],"113":[2,119],"121":[2,119],"130":[2,119],"131":[2,119],"133":[2,119],"134":[2,119],"137":[2,119],"138":[2,119],"139":[2,119],"140":[2,119],"141":[2,119],"142":[2,119],"144":[2,119]},{"4":[2,55],"29":[2,55]},{"4":[2,56],"29":[2,56]},{"1":[2,67],"4":[2,67],"29":[2,67],"30":[2,67],"41":[2,67],"47":[2,67],"55":[2,67],"59":[2,67],"68":[2,67],"69":[2,67],"70":[2,67],"71":[2,67],"74":[2,67],"75":[2,67],"76":[2,67],"77":[2,67],"80":[2,67],"82":[2,67],"88":[2,67],"89":[2,67],"90":[2,67],"94":[2,67],"96":[2,67],"105":[2,67],"107":[2,67],"108":[2,67],"109":[2,67],"113":[2,67],"121":[2,67],"130":[2,67],"131":[2,67],"133":[2,67],"134":[2,67],"135":[2,67],"136":[2,67],"137":[2,67],"138":[2,67],"139":[2,67],"140":[2,67],"141":[2,67],"142":[2,67],"143":[2,67],"144":[2,67]},{"1":[2,70],"4":[2,70],"29":[2,70],"30":[2,70],"41":[2,70],"47":[2,70],"55":[2,70],"59":[2,70],"68":[2,70],"69":[2,70],"70":[2,70],"71":[2,70],"74":[2,70],"75":[2,70],"76":[2,70],"77":[2,70],"80":[2,70],"82":[2,70],"88":[2,70],"89":[2,70],"90":[2,70],"94":[2,70],"96":[2,70],"105":[2,70],"107":[2,70],"108":[2,70],"109":[2,70],"113":[2,70],"121":[2,70],"130":[2,70],"131":[2,70],"133":[2,70],"134":[2,70],"135":[2,70],"136":[2,70],"137":[2,70],"138":[2,70],"139":[2,70],"140":[2,70],"141":[2,70],"142":[2,70],"143":[2,70],"144":[2,70]},{"8":156,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":157,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":158,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":159,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[1,122],"6":160,"8":161,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,6],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"31":166,"32":[1,76],"63":167,"64":168,"66":162,"78":[1,73],"95":[1,59],"116":163,"117":[1,164],"118":165},{"115":169,"119":[1,170],"120":[1,171]},{"4":[2,89],"28":177,"29":[2,89],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":173,"43":176,"46":[1,49],"55":[2,89],"58":[1,178],"79":172,"80":[2,89]},{"1":[2,33],"4":[2,33],"29":[2,33],"30":[2,33],"44":[2,33],"47":[2,33],"55":[2,33],"59":[2,33],"68":[2,33],"69":[2,33],"70":[2,33],"71":[2,33],"74":[2,33],"75":[2,33],"76":[2,33],"77":[2,33],"80":[2,33],"88":[2,33],"89":[2,33],"90":[2,33],"94":[2,33],"96":[2,33],"105":[2,33],"107":[2,33],"108":[2,33],"109":[2,33],"113":[2,33],"121":[2,33],"130":[2,33],"131":[2,33],"133":[2,33],"134":[2,33],"137":[2,33],"138":[2,33],"139":[2,33],"140":[2,33],"141":[2,33],"142":[2,33],"144":[2,33]},{"1":[2,34],"4":[2,34],"29":[2,34],"30":[2,34],"44":[2,34],"47":[2,34],"55":[2,34],"59":[2,34],"68":[2,34],"69":[2,34],"70":[2,34],"71":[2,34],"74":[2,34],"75":[2,34],"76":[2,34],"77":[2,34],"80":[2,34],"88":[2,34],"89":[2,34],"90":[2,34],"94":[2,34],"96":[2,34],"105":[2,34],"107":[2,34],"108":[2,34],"109":[2,34],"113":[2,34],"121":[2,34],"130":[2,34],"131":[2,34],"133":[2,34],"134":[2,34],"137":[2,34],"138":[2,34],"139":[2,34],"140":[2,34],"141":[2,34],"142":[2,34],"144":[2,34]},{"1":[2,32],"4":[2,32],"29":[2,32],"30":[2,32],"41":[2,32],"44":[2,32],"47":[2,32],"55":[2,32],"59":[2,32],"68":[2,32],"69":[2,32],"70":[2,32],"71":[2,32],"74":[2,32],"75":[2,32],"76":[2,32],"77":[2,32],"80":[2,32],"82":[2,32],"88":[2,32],"89":[2,32],"90":[2,32],"94":[2,32],"96":[2,32],"105":[2,32],"107":[2,32],"108":[2,32],"109":[2,32],"113":[2,32],"119":[2,32],"120":[2,32],"121":[2,32],"130":[2,32],"131":[2,32],"133":[2,32],"134":[2,32],"135":[2,32],"136":[2,32],"137":[2,32],"138":[2,32],"139":[2,32],"140":[2,32],"141":[2,32],"142":[2,32],"143":[2,32],"144":[2,32]},{"1":[2,31],"4":[2,31],"29":[2,31],"30":[2,31],"47":[2,31],"55":[2,31],"59":[2,31],"75":[2,31],"80":[2,31],"90":[2,31],"94":[2,31],"96":[2,31],"101":[2,31],"102":[2,31],"105":[2,31],"107":[2,31],"108":[2,31],"109":[2,31],"113":[2,31],"121":[2,31],"124":[2,31],"126":[2,31],"130":[2,31],"131":[2,31],"133":[2,31],"134":[2,31],"137":[2,31],"138":[2,31],"139":[2,31],"140":[2,31],"141":[2,31],"142":[2,31],"144":[2,31]},{"1":[2,7],"4":[2,7],"7":179,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[2,7],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,4]},{"4":[1,78],"30":[1,180]},{"1":[2,30],"4":[2,30],"29":[2,30],"30":[2,30],"47":[2,30],"55":[2,30],"59":[2,30],"75":[2,30],"80":[2,30],"90":[2,30],"94":[2,30],"96":[2,30],"101":[2,30],"102":[2,30],"105":[2,30],"107":[2,30],"108":[2,30],"109":[2,30],"113":[2,30],"121":[2,30],"124":[2,30],"126":[2,30],"130":[2,30],"131":[2,30],"133":[2,30],"134":[2,30],"137":[2,30],"138":[2,30],"139":[2,30],"140":[2,30],"141":[2,30],"142":[2,30],"144":[2,30]},{"8":181,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":182,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":183,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":184,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":185,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":186,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":187,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":188,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":189,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":190,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":191,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,152],"4":[2,152],"29":[2,152],"30":[2,152],"47":[2,152],"55":[2,152],"59":[2,152],"75":[2,152],"80":[2,152],"90":[2,152],"94":[2,152],"96":[2,152],"105":[2,152],"107":[2,152],"108":[2,152],"109":[2,152],"113":[2,152],"121":[2,152],"130":[2,152],"131":[2,152],"133":[2,152],"134":[2,152],"137":[2,152],"138":[2,152],"139":[2,152],"140":[2,152],"141":[2,152],"142":[2,152],"144":[2,152]},{"1":[2,157],"4":[2,157],"29":[2,157],"30":[2,157],"47":[2,157],"55":[2,157],"59":[2,157],"75":[2,157],"80":[2,157],"90":[2,157],"94":[2,157],"96":[2,157],"105":[2,157],"107":[2,157],"108":[2,157],"109":[2,157],"113":[2,157],"121":[2,157],"130":[2,157],"131":[2,157],"133":[2,157],"134":[2,157],"137":[2,157],"138":[2,157],"139":[2,157],"140":[2,157],"141":[2,157],"142":[2,157],"144":[2,157]},{"1":[2,52],"4":[2,52],"29":[2,52],"30":[2,52],"47":[2,52],"55":[2,52],"59":[2,52],"75":[2,52],"80":[2,52],"90":[2,52],"94":[2,52],"96":[2,52],"105":[2,52],"107":[2,52],"108":[2,52],"109":[2,52],"113":[2,52],"121":[2,52],"130":[2,52],"131":[2,52],"133":[2,52],"134":[2,52],"137":[2,52],"138":[2,52],"139":[2,52],"140":[2,52],"141":[2,52],"142":[2,52],"144":[2,52]},{"8":192,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":193,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,151],"4":[2,151],"29":[2,151],"30":[2,151],"47":[2,151],"55":[2,151],"59":[2,151],"75":[2,151],"80":[2,151],"90":[2,151],"94":[2,151],"96":[2,151],"105":[2,151],"107":[2,151],"108":[2,151],"109":[2,151],"113":[2,151],"121":[2,151],"130":[2,151],"131":[2,151],"133":[2,151],"134":[2,151],"137":[2,151],"138":[2,151],"139":[2,151],"140":[2,151],"141":[2,151],"142":[2,151],"144":[2,151]},{"1":[2,156],"4":[2,156],"29":[2,156],"30":[2,156],"47":[2,156],"55":[2,156],"59":[2,156],"75":[2,156],"80":[2,156],"90":[2,156],"94":[2,156],"96":[2,156],"105":[2,156],"107":[2,156],"108":[2,156],"109":[2,156],"113":[2,156],"121":[2,156],"130":[2,156],"131":[2,156],"133":[2,156],"134":[2,156],"137":[2,156],"138":[2,156],"139":[2,156],"140":[2,156],"141":[2,156],"142":[2,156],"144":[2,156]},{"86":194,"89":[1,116]},{"1":[2,68],"4":[2,68],"29":[2,68],"30":[2,68],"41":[2,68],"47":[2,68],"55":[2,68],"59":[2,68],"68":[2,68],"69":[2,68],"70":[2,68],"71":[2,68],"74":[2,68],"75":[2,68],"76":[2,68],"77":[2,68],"80":[2,68],"82":[2,68],"88":[2,68],"89":[2,68],"90":[2,68],"94":[2,68],"96":[2,68],"105":[2,68],"107":[2,68],"108":[2,68],"109":[2,68],"113":[2,68],"121":[2,68],"130":[2,68],"131":[2,68],"133":[2,68],"134":[2,68],"135":[2,68],"136":[2,68],"137":[2,68],"138":[2,68],"139":[2,68],"140":[2,68],"141":[2,68],"142":[2,68],"143":[2,68],"144":[2,68]},{"89":[2,115]},{"31":195,"32":[1,76]},{"31":196,"32":[1,76]},{"1":[2,81],"4":[2,81],"29":[2,81],"30":[2,81],"41":[2,81],"47":[2,81],"55":[2,81],"59":[2,81],"68":[2,81],"69":[2,81],"70":[2,81],"71":[2,81],"74":[2,81],"75":[2,81],"76":[2,81],"77":[2,81],"80":[2,81],"82":[2,81],"88":[2,81],"89":[2,81],"90":[2,81],"94":[2,81],"96":[2,81],"105":[2,81],"107":[2,81],"108":[2,81],"109":[2,81],"113":[2,81],"121":[2,81],"130":[2,81],"131":[2,81],"133":[2,81],"134":[2,81],"135":[2,81],"136":[2,81],"137":[2,81],"138":[2,81],"139":[2,81],"140":[2,81],"141":[2,81],"142":[2,81],"143":[2,81],"144":[2,81]},{"31":197,"32":[1,76]},{"1":[2,83],"4":[2,83],"29":[2,83],"30":[2,83],"41":[2,83],"47":[2,83],"55":[2,83],"59":[2,83],"68":[2,83],"69":[2,83],"70":[2,83],"71":[2,83],"74":[2,83],"75":[2,83],"76":[2,83],"77":[2,83],"80":[2,83],"82":[2,83],"88":[2,83],"89":[2,83],"90":[2,83],"94":[2,83],"96":[2,83],"105":[2,83],"107":[2,83],"108":[2,83],"109":[2,83],"113":[2,83],"121":[2,83],"130":[2,83],"131":[2,83],"133":[2,83],"134":[2,83],"135":[2,83],"136":[2,83],"137":[2,83],"138":[2,83],"139":[2,83],"140":[2,83],"141":[2,83],"142":[2,83],"143":[2,83],"144":[2,83]},{"1":[2,84],"4":[2,84],"29":[2,84],"30":[2,84],"41":[2,84],"47":[2,84],"55":[2,84],"59":[2,84],"68":[2,84],"69":[2,84],"70":[2,84],"71":[2,84],"74":[2,84],"75":[2,84],"76":[2,84],"77":[2,84],"80":[2,84],"82":[2,84],"88":[2,84],"89":[2,84],"90":[2,84],"94":[2,84],"96":[2,84],"105":[2,84],"107":[2,84],"108":[2,84],"109":[2,84],"113":[2,84],"121":[2,84],"130":[2,84],"131":[2,84],"133":[2,84],"134":[2,84],"135":[2,84],"136":[2,84],"137":[2,84],"138":[2,84],"139":[2,84],"140":[2,84],"141":[2,84],"142":[2,84],"143":[2,84],"144":[2,84]},{"8":198,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"59":[1,201],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"93":199,"94":[1,200],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"72":202,"74":[1,203],"76":[1,110],"77":[1,111]},{"72":204,"74":[1,203],"76":[1,110],"77":[1,111]},{"86":205,"89":[1,116]},{"1":[2,69],"4":[2,69],"29":[2,69],"30":[2,69],"41":[2,69],"47":[2,69],"55":[2,69],"59":[2,69],"68":[2,69],"69":[2,69],"70":[2,69],"71":[2,69],"74":[2,69],"75":[2,69],"76":[2,69],"77":[2,69],"80":[2,69],"82":[2,69],"88":[2,69],"89":[2,69],"90":[2,69],"94":[2,69],"96":[2,69],"105":[2,69],"107":[2,69],"108":[2,69],"109":[2,69],"113":[2,69],"121":[2,69],"130":[2,69],"131":[2,69],"133":[2,69],"134":[2,69],"135":[2,69],"136":[2,69],"137":[2,69],"138":[2,69],"139":[2,69],"140":[2,69],"141":[2,69],"142":[2,69],"143":[2,69],"144":[2,69]},{"8":206,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,207],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,113],"4":[2,113],"29":[2,113],"30":[2,113],"47":[2,113],"55":[2,113],"59":[2,113],"68":[2,113],"69":[2,113],"70":[2,113],"71":[2,113],"74":[2,113],"75":[2,113],"76":[2,113],"77":[2,113],"80":[2,113],"88":[2,113],"89":[2,113],"90":[2,113],"94":[2,113],"96":[2,113],"105":[2,113],"107":[2,113],"108":[2,113],"109":[2,113],"113":[2,113],"121":[2,113],"130":[2,113],"131":[2,113],"133":[2,113],"134":[2,113],"137":[2,113],"138":[2,113],"139":[2,113],"140":[2,113],"141":[2,113],"142":[2,113],"144":[2,113]},{"8":210,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"90":[1,208],"91":209,"92":[1,60],"95":[1,59],"97":152,"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"50":[1,211],"55":[1,212]},{"50":[2,60],"55":[2,60]},{"50":[2,62],"55":[2,62],"59":[1,213]},{"57":[1,214]},{"1":[2,54],"4":[2,54],"29":[2,54],"30":[2,54],"47":[2,54],"55":[2,54],"59":[2,54],"75":[2,54],"80":[2,54],"90":[2,54],"94":[2,54],"96":[2,54],"105":[2,54],"107":[2,54],"108":[2,54],"109":[2,54],"113":[2,54],"121":[2,54],"130":[2,54],"131":[2,54],"133":[2,54],"134":[2,54],"137":[2,54],"138":[2,54],"139":[2,54],"140":[2,54],"141":[2,54],"142":[2,54],"144":[2,54]},{"28":77,"46":[1,49]},{"1":[2,192],"4":[2,192],"29":[2,192],"30":[2,192],"47":[1,95],"55":[2,192],"59":[2,192],"75":[2,192],"80":[2,192],"90":[2,192],"94":[2,192],"96":[2,192],"105":[2,192],"106":93,"107":[2,192],"108":[2,192],"109":[2,192],"112":94,"113":[2,192],"114":72,"121":[2,192],"130":[2,192],"131":[2,192],"133":[2,192],"134":[2,192],"137":[2,192],"138":[2,192],"139":[2,192],"140":[2,192],"141":[2,192],"142":[2,192],"144":[2,192]},{"106":98,"107":[1,68],"109":[1,69],"112":99,"113":[1,71],"114":72,"130":[1,96],"131":[1,97]},{"1":[2,193],"4":[2,193],"29":[2,193],"30":[2,193],"47":[1,95],"55":[2,193],"59":[2,193],"75":[2,193],"80":[2,193],"90":[2,193],"94":[2,193],"96":[2,193],"105":[2,193],"106":93,"107":[2,193],"108":[2,193],"109":[2,193],"112":94,"113":[2,193],"114":72,"121":[2,193],"130":[2,193],"131":[2,193],"133":[2,193],"134":[2,193],"137":[2,193],"138":[2,193],"139":[2,193],"140":[2,193],"141":[2,193],"142":[2,193],"144":[2,193]},{"1":[2,194],"4":[2,194],"29":[2,194],"30":[2,194],"47":[1,95],"55":[2,194],"59":[2,194],"75":[2,194],"80":[2,194],"90":[2,194],"94":[2,194],"96":[2,194],"105":[2,194],"106":93,"107":[2,194],"108":[2,194],"109":[2,194],"112":94,"113":[2,194],"114":72,"121":[2,194],"130":[2,194],"131":[2,194],"133":[2,194],"134":[2,194],"137":[2,194],"138":[2,194],"139":[2,194],"140":[2,194],"141":[2,194],"142":[2,194],"144":[2,194]},{"1":[2,195],"4":[2,195],"29":[2,195],"30":[2,195],"47":[2,195],"55":[2,195],"59":[2,195],"68":[2,71],"69":[2,71],"70":[2,71],"71":[2,71],"74":[2,71],"75":[2,195],"76":[2,71],"77":[2,71],"80":[2,195],"88":[2,71],"89":[2,71],"90":[2,195],"94":[2,195],"96":[2,195],"105":[2,195],"107":[2,195],"108":[2,195],"109":[2,195],"113":[2,195],"121":[2,195],"130":[2,195],"131":[2,195],"133":[2,195],"134":[2,195],"137":[2,195],"138":[2,195],"139":[2,195],"140":[2,195],"141":[2,195],"142":[2,195],"144":[2,195]},{"62":101,"68":[1,103],"69":[1,104],"70":[1,105],"71":[1,106],"72":107,"73":108,"74":[1,109],"76":[1,110],"77":[1,111],"85":100,"88":[1,102],"89":[2,114]},{"62":113,"68":[1,103],"69":[1,104],"70":[1,105],"71":[1,106],"72":107,"73":108,"74":[1,109],"76":[1,110],"77":[1,111],"85":112,"88":[1,102],"89":[2,114]},{"1":[2,74],"4":[2,74],"29":[2,74],"30":[2,74],"47":[2,74],"55":[2,74],"59":[2,74],"68":[2,74],"69":[2,74],"70":[2,74],"71":[2,74],"74":[2,74],"75":[2,74],"76":[2,74],"77":[2,74],"80":[2,74],"88":[2,74],"89":[2,74],"90":[2,74],"94":[2,74],"96":[2,74],"105":[2,74],"107":[2,74],"108":[2,74],"109":[2,74],"113":[2,74],"121":[2,74],"130":[2,74],"131":[2,74],"133":[2,74],"134":[2,74],"137":[2,74],"138":[2,74],"139":[2,74],"140":[2,74],"141":[2,74],"142":[2,74],"144":[2,74]},{"1":[2,196],"4":[2,196],"29":[2,196],"30":[2,196],"47":[2,196],"55":[2,196],"59":[2,196],"68":[2,71],"69":[2,71],"70":[2,71],"71":[2,71],"74":[2,71],"75":[2,196],"76":[2,71],"77":[2,71],"80":[2,196],"88":[2,71],"89":[2,71],"90":[2,196],"94":[2,196],"96":[2,196],"105":[2,196],"107":[2,196],"108":[2,196],"109":[2,196],"113":[2,196],"121":[2,196],"130":[2,196],"131":[2,196],"133":[2,196],"134":[2,196],"137":[2,196],"138":[2,196],"139":[2,196],"140":[2,196],"141":[2,196],"142":[2,196],"144":[2,196]},{"1":[2,197],"4":[2,197],"29":[2,197],"30":[2,197],"47":[2,197],"55":[2,197],"59":[2,197],"75":[2,197],"80":[2,197],"90":[2,197],"94":[2,197],"96":[2,197],"105":[2,197],"107":[2,197],"108":[2,197],"109":[2,197],"113":[2,197],"121":[2,197],"130":[2,197],"131":[2,197],"133":[2,197],"134":[2,197],"137":[2,197],"138":[2,197],"139":[2,197],"140":[2,197],"141":[2,197],"142":[2,197],"144":[2,197]},{"1":[2,198],"4":[2,198],"29":[2,198],"30":[2,198],"47":[2,198],"55":[2,198],"59":[2,198],"75":[2,198],"80":[2,198],"90":[2,198],"94":[2,198],"96":[2,198],"105":[2,198],"107":[2,198],"108":[2,198],"109":[2,198],"113":[2,198],"121":[2,198],"130":[2,198],"131":[2,198],"133":[2,198],"134":[2,198],"137":[2,198],"138":[2,198],"139":[2,198],"140":[2,198],"141":[2,198],"142":[2,198],"144":[2,198]},{"8":215,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,216],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"15":217,"16":129,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":130,"43":65,"58":[1,61],"61":218,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"87":[1,33],"92":[1,60],"95":[1,59],"104":[1,58]},{"4":[1,122],"6":220,"29":[1,6],"128":[1,219]},{"1":[2,138],"4":[2,138],"29":[2,138],"30":[2,138],"47":[2,138],"55":[2,138],"59":[2,138],"75":[2,138],"80":[2,138],"90":[2,138],"94":[2,138],"96":[2,138],"100":221,"101":[1,222],"102":[1,223],"105":[2,138],"107":[2,138],"108":[2,138],"109":[2,138],"113":[2,138],"121":[2,138],"130":[2,138],"131":[2,138],"133":[2,138],"134":[2,138],"137":[2,138],"138":[2,138],"139":[2,138],"140":[2,138],"141":[2,138],"142":[2,138],"144":[2,138]},{"1":[2,150],"4":[2,150],"29":[2,150],"30":[2,150],"47":[2,150],"55":[2,150],"59":[2,150],"75":[2,150],"80":[2,150],"90":[2,150],"94":[2,150],"96":[2,150],"105":[2,150],"107":[2,150],"108":[2,150],"109":[2,150],"113":[2,150],"121":[2,150],"130":[2,150],"131":[2,150],"133":[2,150],"134":[2,150],"137":[2,150],"138":[2,150],"139":[2,150],"140":[2,150],"141":[2,150],"142":[2,150],"144":[2,150]},{"1":[2,158],"4":[2,158],"29":[2,158],"30":[2,158],"47":[2,158],"55":[2,158],"59":[2,158],"75":[2,158],"80":[2,158],"90":[2,158],"94":[2,158],"96":[2,158],"105":[2,158],"107":[2,158],"108":[2,158],"109":[2,158],"113":[2,158],"121":[2,158],"130":[2,158],"131":[2,158],"133":[2,158],"134":[2,158],"137":[2,158],"138":[2,158],"139":[2,158],"140":[2,158],"141":[2,158],"142":[2,158],"144":[2,158]},{"29":[1,224],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"123":225,"125":226,"126":[1,227]},{"1":[2,94],"4":[2,94],"29":[1,229],"30":[2,94],"47":[2,94],"55":[2,94],"59":[2,94],"68":[2,71],"69":[2,71],"70":[2,71],"71":[2,71],"74":[2,71],"75":[2,94],"76":[2,71],"77":[2,71],"80":[2,94],"82":[1,228],"88":[2,71],"89":[2,71],"90":[2,94],"94":[2,94],"96":[2,94],"105":[2,94],"107":[2,94],"108":[2,94],"109":[2,94],"113":[2,94],"121":[2,94],"130":[2,94],"131":[2,94],"133":[2,94],"134":[2,94],"137":[2,94],"138":[2,94],"139":[2,94],"140":[2,94],"141":[2,94],"142":[2,94],"144":[2,94]},{"4":[2,105],"28":177,"30":[2,105],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"83":230,"84":231},{"15":235,"16":129,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":130,"43":65,"58":[1,61],"61":218,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"87":[1,33],"92":[1,60],"95":[1,59],"104":[1,58]},{"1":[2,49],"4":[2,49],"30":[2,49],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[2,49],"131":[2,49],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,143],"4":[2,143],"30":[2,143],"47":[1,95],"106":93,"107":[2,143],"109":[2,143],"112":94,"113":[2,143],"114":72,"130":[2,143],"131":[2,143],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"47":[1,95],"105":[1,236],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,145],"4":[2,145],"29":[2,145],"30":[2,145],"47":[2,145],"55":[2,145],"59":[2,145],"68":[2,145],"69":[2,145],"70":[2,145],"71":[2,145],"74":[2,145],"75":[2,145],"76":[2,145],"77":[2,145],"80":[2,145],"88":[2,145],"89":[2,145],"90":[2,145],"94":[2,145],"96":[2,145],"105":[2,145],"107":[2,145],"108":[2,145],"109":[2,145],"113":[2,145],"121":[2,145],"130":[2,145],"131":[2,145],"133":[2,145],"134":[2,145],"137":[2,145],"138":[2,145],"139":[2,145],"140":[2,145],"141":[2,145],"142":[2,145],"144":[2,145]},{"4":[2,134],"29":[2,134],"47":[1,95],"55":[2,134],"59":[1,238],"93":237,"94":[1,200],"96":[2,134],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,127],"4":[2,127],"29":[2,127],"30":[2,127],"41":[2,127],"47":[2,127],"55":[2,127],"59":[2,127],"68":[2,127],"69":[2,127],"70":[2,127],"71":[2,127],"74":[2,127],"75":[2,127],"76":[2,127],"77":[2,127],"80":[2,127],"88":[2,127],"89":[2,127],"90":[2,127],"94":[2,127],"96":[2,127],"105":[2,127],"107":[2,127],"108":[2,127],"109":[2,127],"113":[2,127],"119":[2,127],"120":[2,127],"121":[2,127],"130":[2,127],"131":[2,127],"133":[2,127],"134":[2,127],"137":[2,127],"138":[2,127],"139":[2,127],"140":[2,127],"141":[2,127],"142":[2,127],"144":[2,127]},{"4":[2,57],"29":[2,57],"54":239,"55":[1,240],"96":[2,57]},{"4":[2,129],"29":[2,129],"30":[2,129],"55":[2,129],"90":[2,129],"96":[2,129]},{"8":210,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"91":241,"92":[1,60],"95":[1,59],"97":152,"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,135],"29":[2,135],"30":[2,135],"55":[2,135],"90":[2,135],"96":[2,135]},{"1":[2,122],"4":[2,122],"29":[2,122],"30":[2,122],"41":[2,122],"44":[2,122],"47":[2,122],"55":[2,122],"59":[2,122],"68":[2,122],"69":[2,122],"70":[2,122],"71":[2,122],"74":[2,122],"75":[2,122],"76":[2,122],"77":[2,122],"80":[2,122],"82":[2,122],"88":[2,122],"89":[2,122],"90":[2,122],"94":[2,122],"96":[2,122],"105":[2,122],"107":[2,122],"108":[2,122],"109":[2,122],"113":[2,122],"121":[2,122],"130":[2,122],"131":[2,122],"133":[2,122],"134":[2,122],"135":[2,122],"136":[2,122],"137":[2,122],"138":[2,122],"139":[2,122],"140":[2,122],"141":[2,122],"142":[2,122],"143":[2,122],"144":[2,122]},{"4":[1,122],"6":242,"29":[1,6],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"4":[1,122],"6":243,"29":[1,6],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,146],"4":[2,146],"29":[2,146],"30":[2,146],"47":[1,95],"55":[2,146],"59":[2,146],"75":[2,146],"80":[2,146],"90":[2,146],"94":[2,146],"96":[2,146],"105":[2,146],"106":93,"107":[1,68],"108":[1,244],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,146],"130":[2,146],"131":[2,146],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,148],"4":[2,148],"29":[2,148],"30":[2,148],"47":[1,95],"55":[2,148],"59":[2,148],"75":[2,148],"80":[2,148],"90":[2,148],"94":[2,148],"96":[2,148],"105":[2,148],"106":93,"107":[1,68],"108":[1,245],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,148],"130":[2,148],"131":[2,148],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,154],"4":[2,154],"29":[2,154],"30":[2,154],"47":[2,154],"55":[2,154],"59":[2,154],"75":[2,154],"80":[2,154],"90":[2,154],"94":[2,154],"96":[2,154],"105":[2,154],"107":[2,154],"108":[2,154],"109":[2,154],"113":[2,154],"121":[2,154],"130":[2,154],"131":[2,154],"133":[2,154],"134":[2,154],"137":[2,154],"138":[2,154],"139":[2,154],"140":[2,154],"141":[2,154],"142":[2,154],"144":[2,154]},{"1":[2,155],"4":[2,155],"29":[2,155],"30":[2,155],"47":[1,95],"55":[2,155],"59":[2,155],"75":[2,155],"80":[2,155],"90":[2,155],"94":[2,155],"96":[2,155],"105":[2,155],"106":93,"107":[1,68],"108":[2,155],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,155],"130":[2,155],"131":[2,155],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,159],"4":[2,159],"29":[2,159],"30":[2,159],"47":[2,159],"55":[2,159],"59":[2,159],"75":[2,159],"80":[2,159],"90":[2,159],"94":[2,159],"96":[2,159],"105":[2,159],"107":[2,159],"108":[2,159],"109":[2,159],"113":[2,159],"121":[2,159],"130":[2,159],"131":[2,159],"133":[2,159],"134":[2,159],"137":[2,159],"138":[2,159],"139":[2,159],"140":[2,159],"141":[2,159],"142":[2,159],"144":[2,159]},{"119":[2,161],"120":[2,161]},{"31":166,"32":[1,76],"63":167,"64":168,"78":[1,73],"95":[1,247],"116":246,"118":165},{"55":[1,248],"119":[2,166],"120":[2,166]},{"55":[2,163],"119":[2,163],"120":[2,163]},{"55":[2,164],"119":[2,164],"120":[2,164]},{"55":[2,165],"119":[2,165],"120":[2,165]},{"1":[2,160],"4":[2,160],"29":[2,160],"30":[2,160],"47":[2,160],"55":[2,160],"59":[2,160],"75":[2,160],"80":[2,160],"90":[2,160],"94":[2,160],"96":[2,160],"105":[2,160],"107":[2,160],"108":[2,160],"109":[2,160],"113":[2,160],"121":[2,160],"130":[2,160],"131":[2,160],"133":[2,160],"134":[2,160],"137":[2,160],"138":[2,160],"139":[2,160],"140":[2,160],"141":[2,160],"142":[2,160],"144":[2,160]},{"8":249,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":250,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,57],"29":[2,57],"54":251,"55":[1,252],"80":[2,57]},{"4":[2,90],"29":[2,90],"30":[2,90],"55":[2,90],"80":[2,90]},{"4":[2,41],"29":[2,41],"30":[2,41],"44":[1,253],"55":[2,41],"80":[2,41]},{"4":[2,42],"29":[2,42],"30":[2,42],"44":[1,254],"55":[2,42],"80":[2,42]},{"4":[2,43],"29":[2,43],"30":[2,43],"55":[2,43],"80":[2,43]},{"4":[2,48],"29":[2,48],"30":[2,48],"55":[2,48],"80":[2,48]},{"31":155,"32":[1,76]},{"1":[2,6],"4":[2,6],"30":[2,6]},{"1":[2,29],"4":[2,29],"29":[2,29],"30":[2,29],"47":[2,29],"55":[2,29],"59":[2,29],"75":[2,29],"80":[2,29],"90":[2,29],"94":[2,29],"96":[2,29],"101":[2,29],"102":[2,29],"105":[2,29],"107":[2,29],"108":[2,29],"109":[2,29],"113":[2,29],"121":[2,29],"124":[2,29],"126":[2,29],"130":[2,29],"131":[2,29],"133":[2,29],"134":[2,29],"137":[2,29],"138":[2,29],"139":[2,29],"140":[2,29],"141":[2,29],"142":[2,29],"144":[2,29]},{"1":[2,199],"4":[2,199],"29":[2,199],"30":[2,199],"47":[1,95],"55":[2,199],"59":[2,199],"75":[2,199],"80":[2,199],"90":[2,199],"94":[2,199],"96":[2,199],"105":[2,199],"106":93,"107":[2,199],"108":[2,199],"109":[2,199],"112":94,"113":[2,199],"114":72,"121":[2,199],"130":[2,199],"131":[2,199],"133":[2,199],"134":[2,199],"137":[2,199],"138":[2,199],"139":[1,86],"140":[2,199],"141":[2,199],"142":[2,199],"144":[2,199]},{"1":[2,200],"4":[2,200],"29":[2,200],"30":[2,200],"47":[1,95],"55":[2,200],"59":[2,200],"75":[2,200],"80":[2,200],"90":[2,200],"94":[2,200],"96":[2,200],"105":[2,200],"106":93,"107":[2,200],"108":[2,200],"109":[2,200],"112":94,"113":[2,200],"114":72,"121":[2,200],"130":[2,200],"131":[2,200],"133":[2,200],"134":[2,200],"137":[2,200],"138":[2,200],"139":[1,86],"140":[2,200],"141":[2,200],"142":[2,200],"144":[2,200]},{"1":[2,201],"4":[2,201],"29":[2,201],"30":[2,201],"47":[1,95],"55":[2,201],"59":[2,201],"75":[2,201],"80":[2,201],"90":[2,201],"94":[2,201],"96":[2,201],"105":[2,201],"106":93,"107":[2,201],"108":[2,201],"109":[2,201],"112":94,"113":[2,201],"114":72,"121":[2,201],"130":[2,201],"131":[2,201],"133":[1,83],"134":[1,82],"137":[2,201],"138":[2,201],"139":[1,86],"140":[1,87],"141":[1,88],"142":[2,201],"144":[1,90]},{"1":[2,202],"4":[2,202],"29":[2,202],"30":[2,202],"47":[1,95],"55":[2,202],"59":[2,202],"75":[2,202],"80":[2,202],"90":[2,202],"94":[2,202],"96":[2,202],"105":[2,202],"106":93,"107":[2,202],"108":[2,202],"109":[2,202],"112":94,"113":[2,202],"114":72,"121":[2,202],"130":[2,202],"131":[2,202],"133":[1,83],"134":[1,82],"137":[2,202],"138":[2,202],"139":[1,86],"140":[1,87],"141":[1,88],"142":[2,202],"144":[1,90]},{"1":[2,203],"4":[2,203],"29":[2,203],"30":[2,203],"47":[1,95],"55":[2,203],"59":[2,203],"75":[2,203],"80":[2,203],"90":[2,203],"94":[2,203],"96":[2,203],"105":[2,203],"106":93,"107":[2,203],"108":[2,203],"109":[2,203],"112":94,"113":[2,203],"114":72,"121":[2,203],"130":[2,203],"131":[2,203],"133":[2,203],"134":[2,203],"137":[2,203],"138":[2,203],"139":[2,203],"140":[2,203],"141":[2,203],"142":[2,203],"144":[2,203]},{"1":[2,204],"4":[2,204],"29":[2,204],"30":[2,204],"47":[1,95],"55":[2,204],"59":[2,204],"75":[2,204],"80":[2,204],"90":[2,204],"94":[2,204],"96":[2,204],"105":[2,204],"106":93,"107":[2,204],"108":[2,204],"109":[2,204],"112":94,"113":[2,204],"114":72,"121":[2,204],"130":[2,204],"131":[2,204],"133":[1,83],"134":[1,82],"137":[2,204],"138":[2,204],"139":[1,86],"140":[2,204],"141":[2,204],"142":[2,204],"144":[2,204]},{"1":[2,205],"4":[2,205],"29":[2,205],"30":[2,205],"47":[1,95],"55":[2,205],"59":[2,205],"75":[2,205],"80":[2,205],"90":[2,205],"94":[2,205],"96":[2,205],"105":[2,205],"106":93,"107":[2,205],"108":[2,205],"109":[2,205],"112":94,"113":[2,205],"114":72,"121":[2,205],"130":[2,205],"131":[2,205],"133":[1,83],"134":[1,82],"137":[2,205],"138":[2,205],"139":[1,86],"140":[1,87],"141":[2,205],"142":[2,205],"144":[2,205]},{"1":[2,206],"4":[2,206],"29":[2,206],"30":[2,206],"47":[1,95],"55":[2,206],"59":[2,206],"75":[2,206],"80":[2,206],"90":[2,206],"94":[2,206],"96":[2,206],"105":[2,206],"106":93,"107":[2,206],"108":[2,206],"109":[2,206],"112":94,"113":[2,206],"114":72,"121":[2,206],"130":[2,206],"131":[2,206],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[2,206],"144":[1,90]},{"1":[2,209],"4":[2,209],"29":[2,209],"30":[2,209],"47":[1,95],"55":[2,209],"59":[2,209],"75":[2,209],"80":[2,209],"90":[2,209],"94":[2,209],"96":[2,209],"105":[2,209],"106":93,"107":[2,209],"108":[2,209],"109":[2,209],"112":94,"113":[2,209],"114":72,"121":[2,209],"130":[2,209],"131":[2,209],"133":[1,83],"134":[1,82],"137":[2,209],"138":[2,209],"139":[1,86],"140":[1,87],"141":[1,88],"142":[2,209],"144":[2,209]},{"1":[2,189],"4":[2,189],"29":[2,189],"30":[2,189],"47":[1,95],"55":[2,189],"59":[2,189],"75":[2,189],"80":[2,189],"90":[2,189],"94":[2,189],"96":[2,189],"105":[2,189],"106":93,"107":[1,68],"108":[2,189],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,189],"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,191],"4":[2,191],"29":[2,191],"30":[2,191],"47":[1,95],"55":[2,191],"59":[2,191],"75":[2,191],"80":[2,191],"90":[2,191],"94":[2,191],"96":[2,191],"105":[2,191],"106":93,"107":[1,68],"108":[2,191],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,191],"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,188],"4":[2,188],"29":[2,188],"30":[2,188],"47":[1,95],"55":[2,188],"59":[2,188],"75":[2,188],"80":[2,188],"90":[2,188],"94":[2,188],"96":[2,188],"105":[2,188],"106":93,"107":[1,68],"108":[2,188],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,188],"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,190],"4":[2,190],"29":[2,190],"30":[2,190],"47":[1,95],"55":[2,190],"59":[2,190],"75":[2,190],"80":[2,190],"90":[2,190],"94":[2,190],"96":[2,190],"105":[2,190],"106":93,"107":[1,68],"108":[2,190],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,190],"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,110],"4":[2,110],"29":[2,110],"30":[2,110],"47":[2,110],"55":[2,110],"59":[2,110],"68":[2,110],"69":[2,110],"70":[2,110],"71":[2,110],"74":[2,110],"75":[2,110],"76":[2,110],"77":[2,110],"80":[2,110],"88":[2,110],"89":[2,110],"90":[2,110],"94":[2,110],"96":[2,110],"105":[2,110],"107":[2,110],"108":[2,110],"109":[2,110],"113":[2,110],"121":[2,110],"130":[2,110],"131":[2,110],"133":[2,110],"134":[2,110],"137":[2,110],"138":[2,110],"139":[2,110],"140":[2,110],"141":[2,110],"142":[2,110],"144":[2,110]},{"1":[2,79],"4":[2,79],"29":[2,79],"30":[2,79],"41":[2,79],"47":[2,79],"55":[2,79],"59":[2,79],"68":[2,79],"69":[2,79],"70":[2,79],"71":[2,79],"74":[2,79],"75":[2,79],"76":[2,79],"77":[2,79],"80":[2,79],"82":[2,79],"88":[2,79],"89":[2,79],"90":[2,79],"94":[2,79],"96":[2,79],"105":[2,79],"107":[2,79],"108":[2,79],"109":[2,79],"113":[2,79],"121":[2,79],"130":[2,79],"131":[2,79],"133":[2,79],"134":[2,79],"135":[2,79],"136":[2,79],"137":[2,79],"138":[2,79],"139":[2,79],"140":[2,79],"141":[2,79],"142":[2,79],"143":[2,79],"144":[2,79]},{"1":[2,80],"4":[2,80],"29":[2,80],"30":[2,80],"41":[2,80],"47":[2,80],"55":[2,80],"59":[2,80],"68":[2,80],"69":[2,80],"70":[2,80],"71":[2,80],"74":[2,80],"75":[2,80],"76":[2,80],"77":[2,80],"80":[2,80],"82":[2,80],"88":[2,80],"89":[2,80],"90":[2,80],"94":[2,80],"96":[2,80],"105":[2,80],"107":[2,80],"108":[2,80],"109":[2,80],"113":[2,80],"121":[2,80],"130":[2,80],"131":[2,80],"133":[2,80],"134":[2,80],"135":[2,80],"136":[2,80],"137":[2,80],"138":[2,80],"139":[2,80],"140":[2,80],"141":[2,80],"142":[2,80],"143":[2,80],"144":[2,80]},{"1":[2,82],"4":[2,82],"29":[2,82],"30":[2,82],"41":[2,82],"47":[2,82],"55":[2,82],"59":[2,82],"68":[2,82],"69":[2,82],"70":[2,82],"71":[2,82],"74":[2,82],"75":[2,82],"76":[2,82],"77":[2,82],"80":[2,82],"82":[2,82],"88":[2,82],"89":[2,82],"90":[2,82],"94":[2,82],"96":[2,82],"105":[2,82],"107":[2,82],"108":[2,82],"109":[2,82],"113":[2,82],"121":[2,82],"130":[2,82],"131":[2,82],"133":[2,82],"134":[2,82],"135":[2,82],"136":[2,82],"137":[2,82],"138":[2,82],"139":[2,82],"140":[2,82],"141":[2,82],"142":[2,82],"143":[2,82],"144":[2,82]},{"47":[1,95],"59":[1,201],"75":[1,255],"93":256,"94":[1,200],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"8":257,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"12":[2,120],"13":[2,120],"14":[2,120],"32":[2,120],"34":[2,120],"35":[2,120],"37":[2,120],"38":[2,120],"39":[2,120],"45":[2,120],"46":[2,120],"48":[2,120],"52":[2,120],"53":[2,120],"58":[2,120],"75":[2,120],"78":[2,120],"81":[2,120],"87":[2,120],"92":[2,120],"95":[2,120],"99":[2,120],"103":[2,120],"104":[2,120],"107":[2,120],"109":[2,120],"111":[2,120],"113":[2,120],"122":[2,120],"128":[2,120],"129":[2,120],"132":[2,120],"133":[2,120],"134":[2,120],"135":[2,120],"136":[2,120]},{"12":[2,121],"13":[2,121],"14":[2,121],"32":[2,121],"34":[2,121],"35":[2,121],"37":[2,121],"38":[2,121],"39":[2,121],"45":[2,121],"46":[2,121],"48":[2,121],"52":[2,121],"53":[2,121],"58":[2,121],"75":[2,121],"78":[2,121],"81":[2,121],"87":[2,121],"92":[2,121],"95":[2,121],"99":[2,121],"103":[2,121],"104":[2,121],"107":[2,121],"109":[2,121],"111":[2,121],"113":[2,121],"122":[2,121],"128":[2,121],"129":[2,121],"132":[2,121],"133":[2,121],"134":[2,121],"135":[2,121],"136":[2,121]},{"1":[2,86],"4":[2,86],"29":[2,86],"30":[2,86],"41":[2,86],"47":[2,86],"55":[2,86],"59":[2,86],"68":[2,86],"69":[2,86],"70":[2,86],"71":[2,86],"74":[2,86],"75":[2,86],"76":[2,86],"77":[2,86],"80":[2,86],"82":[2,86],"88":[2,86],"89":[2,86],"90":[2,86],"94":[2,86],"96":[2,86],"105":[2,86],"107":[2,86],"108":[2,86],"109":[2,86],"113":[2,86],"121":[2,86],"130":[2,86],"131":[2,86],"133":[2,86],"134":[2,86],"135":[2,86],"136":[2,86],"137":[2,86],"138":[2,86],"139":[2,86],"140":[2,86],"141":[2,86],"142":[2,86],"143":[2,86],"144":[2,86]},{"8":258,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,87],"4":[2,87],"29":[2,87],"30":[2,87],"41":[2,87],"47":[2,87],"55":[2,87],"59":[2,87],"68":[2,87],"69":[2,87],"70":[2,87],"71":[2,87],"74":[2,87],"75":[2,87],"76":[2,87],"77":[2,87],"80":[2,87],"82":[2,87],"88":[2,87],"89":[2,87],"90":[2,87],"94":[2,87],"96":[2,87],"105":[2,87],"107":[2,87],"108":[2,87],"109":[2,87],"113":[2,87],"121":[2,87],"130":[2,87],"131":[2,87],"133":[2,87],"134":[2,87],"135":[2,87],"136":[2,87],"137":[2,87],"138":[2,87],"139":[2,87],"140":[2,87],"141":[2,87],"142":[2,87],"143":[2,87],"144":[2,87]},{"1":[2,111],"4":[2,111],"29":[2,111],"30":[2,111],"47":[2,111],"55":[2,111],"59":[2,111],"68":[2,111],"69":[2,111],"70":[2,111],"71":[2,111],"74":[2,111],"75":[2,111],"76":[2,111],"77":[2,111],"80":[2,111],"88":[2,111],"89":[2,111],"90":[2,111],"94":[2,111],"96":[2,111],"105":[2,111],"107":[2,111],"108":[2,111],"109":[2,111],"113":[2,111],"121":[2,111],"130":[2,111],"131":[2,111],"133":[2,111],"134":[2,111],"137":[2,111],"138":[2,111],"139":[2,111],"140":[2,111],"141":[2,111],"142":[2,111],"144":[2,111]},{"1":[2,39],"4":[2,39],"29":[2,39],"30":[2,39],"47":[1,95],"55":[2,39],"59":[2,39],"75":[2,39],"80":[2,39],"90":[2,39],"94":[2,39],"96":[2,39],"105":[2,39],"106":93,"107":[1,68],"108":[2,39],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,39],"130":[2,39],"131":[2,39],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"8":259,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,116],"4":[2,116],"29":[2,116],"30":[2,116],"47":[2,116],"55":[2,116],"59":[2,116],"68":[2,116],"69":[2,116],"70":[2,116],"71":[2,116],"74":[2,116],"75":[2,116],"76":[2,116],"77":[2,116],"80":[2,116],"88":[2,116],"89":[2,116],"90":[2,116],"94":[2,116],"96":[2,116],"105":[2,116],"107":[2,116],"108":[2,116],"109":[2,116],"113":[2,116],"121":[2,116],"130":[2,116],"131":[2,116],"133":[2,116],"134":[2,116],"137":[2,116],"138":[2,116],"139":[2,116],"140":[2,116],"141":[2,116],"142":[2,116],"144":[2,116]},{"4":[2,57],"29":[2,57],"54":260,"55":[1,240],"90":[2,57]},{"4":[2,134],"29":[2,134],"30":[2,134],"47":[1,95],"55":[2,134],"59":[1,261],"90":[2,134],"96":[2,134],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"51":262,"52":[1,62],"53":[1,63]},{"56":263,"57":[1,119],"58":[1,120]},{"50":[2,64],"55":[2,64]},{"50":[2,63],"55":[2,63],"59":[1,264]},{"1":[2,207],"4":[2,207],"29":[2,207],"30":[2,207],"47":[1,95],"55":[2,207],"59":[2,207],"75":[2,207],"80":[2,207],"90":[2,207],"94":[2,207],"96":[2,207],"105":[2,207],"106":93,"107":[2,207],"108":[2,207],"109":[2,207],"112":94,"113":[2,207],"114":72,"121":[2,207],"130":[2,207],"131":[2,207],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"8":265,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,109],"4":[2,109],"29":[2,109],"30":[2,109],"47":[2,109],"55":[2,109],"59":[2,109],"62":101,"68":[1,103],"69":[1,104],"70":[1,105],"71":[1,106],"72":107,"73":108,"74":[1,109],"75":[2,109],"76":[1,110],"77":[1,111],"80":[2,109],"85":100,"88":[1,102],"89":[2,114],"90":[2,109],"94":[2,109],"96":[2,109],"105":[2,109],"107":[2,109],"108":[2,109],"109":[2,109],"113":[2,109],"121":[2,109],"130":[2,109],"131":[2,109],"133":[2,109],"134":[2,109],"137":[2,109],"138":[2,109],"139":[2,109],"140":[2,109],"141":[2,109],"142":[2,109],"144":[2,109]},{"1":[2,71],"4":[2,71],"29":[2,71],"30":[2,71],"47":[2,71],"55":[2,71],"59":[2,71],"68":[2,71],"69":[2,71],"70":[2,71],"71":[2,71],"74":[2,71],"75":[2,71],"76":[2,71],"77":[2,71],"80":[2,71],"88":[2,71],"89":[2,71],"90":[2,71],"94":[2,71],"96":[2,71],"105":[2,71],"107":[2,71],"108":[2,71],"109":[2,71],"113":[2,71],"121":[2,71],"130":[2,71],"131":[2,71],"133":[2,71],"134":[2,71],"137":[2,71],"138":[2,71],"139":[2,71],"140":[2,71],"141":[2,71],"142":[2,71],"144":[2,71]},{"8":266,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,186],"4":[2,186],"29":[2,186],"30":[2,186],"47":[2,186],"55":[2,186],"59":[2,186],"75":[2,186],"80":[2,186],"90":[2,186],"94":[2,186],"96":[2,186],"105":[2,186],"107":[2,186],"108":[2,186],"109":[2,186],"113":[2,186],"121":[2,186],"124":[2,186],"130":[2,186],"131":[2,186],"133":[2,186],"134":[2,186],"137":[2,186],"138":[2,186],"139":[2,186],"140":[2,186],"141":[2,186],"142":[2,186],"144":[2,186]},{"1":[2,139],"4":[2,139],"29":[2,139],"30":[2,139],"47":[2,139],"55":[2,139],"59":[2,139],"75":[2,139],"80":[2,139],"90":[2,139],"94":[2,139],"96":[2,139],"101":[1,267],"105":[2,139],"107":[2,139],"108":[2,139],"109":[2,139],"113":[2,139],"121":[2,139],"130":[2,139],"131":[2,139],"133":[2,139],"134":[2,139],"137":[2,139],"138":[2,139],"139":[2,139],"140":[2,139],"141":[2,139],"142":[2,139],"144":[2,139]},{"4":[1,122],"6":268,"29":[1,6]},{"31":269,"32":[1,76]},{"123":270,"125":226,"126":[1,227]},{"30":[1,271],"124":[1,272],"125":273,"126":[1,227]},{"30":[2,179],"124":[2,179],"126":[2,179]},{"8":275,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"98":274,"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"15":276,"16":129,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":130,"43":65,"58":[1,61],"61":218,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"87":[1,33],"92":[1,60],"95":[1,59],"104":[1,58]},{"4":[2,105],"28":177,"30":[2,105],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"83":277,"84":231},{"4":[1,279],"30":[1,278]},{"4":[2,106],"30":[2,106],"80":[2,106]},{"4":[2,105],"28":177,"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"80":[2,105],"83":280,"84":231},{"4":[2,102],"30":[2,102],"80":[2,102]},{"4":[2,43],"30":[2,43],"44":[1,281],"80":[2,43]},{"1":[2,100],"4":[2,100],"29":[1,282],"30":[2,100],"47":[2,100],"55":[2,100],"59":[2,100],"62":101,"68":[1,103],"69":[1,104],"70":[1,105],"71":[1,106],"72":107,"73":108,"74":[1,109],"75":[2,100],"76":[1,110],"77":[1,111],"80":[2,100],"85":100,"88":[1,102],"89":[2,114],"90":[2,100],"94":[2,100],"96":[2,100],"105":[2,100],"107":[2,100],"108":[2,100],"109":[2,100],"113":[2,100],"121":[2,100],"130":[2,100],"131":[2,100],"133":[2,100],"134":[2,100],"137":[2,100],"138":[2,100],"139":[2,100],"140":[2,100],"141":[2,100],"142":[2,100],"144":[2,100]},{"1":[2,144],"4":[2,144],"29":[2,144],"30":[2,144],"47":[2,144],"55":[2,144],"59":[2,144],"68":[2,144],"69":[2,144],"70":[2,144],"71":[2,144],"74":[2,144],"75":[2,144],"76":[2,144],"77":[2,144],"80":[2,144],"88":[2,144],"89":[2,144],"90":[2,144],"94":[2,144],"96":[2,144],"105":[2,144],"107":[2,144],"108":[2,144],"109":[2,144],"113":[2,144],"121":[2,144],"130":[2,144],"131":[2,144],"133":[2,144],"134":[2,144],"137":[2,144],"138":[2,144],"139":[2,144],"140":[2,144],"141":[2,144],"142":[2,144],"144":[2,144]},{"8":283,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,66],"12":[2,121],"13":[2,121],"14":[2,121],"29":[2,66],"32":[2,121],"34":[2,121],"35":[2,121],"37":[2,121],"38":[2,121],"39":[2,121],"45":[2,121],"46":[2,121],"48":[2,121],"52":[2,121],"53":[2,121],"55":[2,66],"58":[2,121],"78":[2,121],"81":[2,121],"87":[2,121],"92":[2,121],"95":[2,121],"96":[2,66],"99":[2,121],"103":[2,121],"104":[2,121],"107":[2,121],"109":[2,121],"111":[2,121],"113":[2,121],"122":[2,121],"128":[2,121],"129":[2,121],"132":[2,121],"133":[2,121],"134":[2,121],"135":[2,121],"136":[2,121]},{"4":[1,285],"29":[1,286],"96":[1,284]},{"4":[2,58],"8":210,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[2,58],"30":[2,58],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"90":[2,58],"92":[1,60],"95":[1,59],"96":[2,58],"97":287,"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,57],"29":[2,57],"30":[2,57],"54":288,"55":[1,240]},{"1":[2,183],"4":[2,183],"29":[2,183],"30":[2,183],"47":[2,183],"55":[2,183],"59":[2,183],"75":[2,183],"80":[2,183],"90":[2,183],"94":[2,183],"96":[2,183],"105":[2,183],"107":[2,183],"108":[2,183],"109":[2,183],"113":[2,183],"121":[2,183],"124":[2,183],"130":[2,183],"131":[2,183],"133":[2,183],"134":[2,183],"137":[2,183],"138":[2,183],"139":[2,183],"140":[2,183],"141":[2,183],"142":[2,183],"144":[2,183]},{"1":[2,184],"4":[2,184],"29":[2,184],"30":[2,184],"47":[2,184],"55":[2,184],"59":[2,184],"75":[2,184],"80":[2,184],"90":[2,184],"94":[2,184],"96":[2,184],"105":[2,184],"107":[2,184],"108":[2,184],"109":[2,184],"113":[2,184],"121":[2,184],"124":[2,184],"130":[2,184],"131":[2,184],"133":[2,184],"134":[2,184],"137":[2,184],"138":[2,184],"139":[2,184],"140":[2,184],"141":[2,184],"142":[2,184],"144":[2,184]},{"8":289,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":290,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"119":[2,162],"120":[2,162]},{"8":210,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"91":151,"92":[1,60],"95":[1,59],"96":[1,150],"97":152,"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"31":166,"32":[1,76],"63":167,"64":168,"78":[1,73],"95":[1,247],"118":291},{"1":[2,168],"4":[2,168],"29":[2,168],"30":[2,168],"47":[1,95],"55":[2,168],"59":[2,168],"75":[2,168],"80":[2,168],"90":[2,168],"94":[2,168],"96":[2,168],"105":[2,168],"106":93,"107":[2,168],"108":[1,292],"109":[2,168],"112":94,"113":[2,168],"114":72,"121":[1,293],"130":[2,168],"131":[2,168],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,169],"4":[2,169],"29":[2,169],"30":[2,169],"47":[1,95],"55":[2,169],"59":[2,169],"75":[2,169],"80":[2,169],"90":[2,169],"94":[2,169],"96":[2,169],"105":[2,169],"106":93,"107":[2,169],"108":[1,294],"109":[2,169],"112":94,"113":[2,169],"114":72,"121":[2,169],"130":[2,169],"131":[2,169],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"4":[1,296],"29":[1,297],"80":[1,295]},{"4":[2,58],"28":177,"29":[2,58],"30":[2,58],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":298,"43":176,"46":[1,49],"58":[1,178],"80":[2,58]},{"8":299,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,300],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":301,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,302],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,85],"4":[2,85],"29":[2,85],"30":[2,85],"41":[2,85],"47":[2,85],"55":[2,85],"59":[2,85],"68":[2,85],"69":[2,85],"70":[2,85],"71":[2,85],"74":[2,85],"75":[2,85],"76":[2,85],"77":[2,85],"80":[2,85],"82":[2,85],"88":[2,85],"89":[2,85],"90":[2,85],"94":[2,85],"96":[2,85],"105":[2,85],"107":[2,85],"108":[2,85],"109":[2,85],"113":[2,85],"121":[2,85],"130":[2,85],"131":[2,85],"133":[2,85],"134":[2,85],"135":[2,85],"136":[2,85],"137":[2,85],"138":[2,85],"139":[2,85],"140":[2,85],"141":[2,85],"142":[2,85],"143":[2,85],"144":[2,85]},{"8":303,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"75":[1,304],"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"47":[1,95],"75":[1,305],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"47":[1,95],"75":[1,255],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"30":[1,306],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"4":[1,285],"29":[1,286],"90":[1,307]},{"4":[2,66],"29":[2,66],"30":[2,66],"55":[2,66],"90":[2,66],"96":[2,66]},{"4":[1,122],"6":308,"29":[1,6]},{"50":[2,61],"55":[2,61]},{"50":[2,65],"55":[2,65]},{"30":[1,309],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"4":[1,122],"6":310,"29":[1,6],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"4":[1,122],"6":311,"29":[1,6]},{"1":[2,140],"4":[2,140],"29":[2,140],"30":[2,140],"47":[2,140],"55":[2,140],"59":[2,140],"75":[2,140],"80":[2,140],"90":[2,140],"94":[2,140],"96":[2,140],"105":[2,140],"107":[2,140],"108":[2,140],"109":[2,140],"113":[2,140],"121":[2,140],"130":[2,140],"131":[2,140],"133":[2,140],"134":[2,140],"137":[2,140],"138":[2,140],"139":[2,140],"140":[2,140],"141":[2,140],"142":[2,140],"144":[2,140]},{"4":[1,122],"6":312,"29":[1,6]},{"30":[1,313],"124":[1,314],"125":273,"126":[1,227]},{"1":[2,177],"4":[2,177],"29":[2,177],"30":[2,177],"47":[2,177],"55":[2,177],"59":[2,177],"75":[2,177],"80":[2,177],"90":[2,177],"94":[2,177],"96":[2,177],"105":[2,177],"107":[2,177],"108":[2,177],"109":[2,177],"113":[2,177],"121":[2,177],"130":[2,177],"131":[2,177],"133":[2,177],"134":[2,177],"137":[2,177],"138":[2,177],"139":[2,177],"140":[2,177],"141":[2,177],"142":[2,177],"144":[2,177]},{"4":[1,122],"6":315,"29":[1,6]},{"30":[2,180],"124":[2,180],"126":[2,180]},{"4":[1,122],"6":316,"29":[1,6],"55":[1,317]},{"4":[2,136],"29":[2,136],"47":[1,95],"55":[2,136],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,95],"4":[2,95],"29":[1,318],"30":[2,95],"47":[2,95],"55":[2,95],"59":[2,95],"62":101,"68":[1,103],"69":[1,104],"70":[1,105],"71":[1,106],"72":107,"73":108,"74":[1,109],"75":[2,95],"76":[1,110],"77":[1,111],"80":[2,95],"85":100,"88":[1,102],"89":[2,114],"90":[2,95],"94":[2,95],"96":[2,95],"105":[2,95],"107":[2,95],"108":[2,95],"109":[2,95],"113":[2,95],"121":[2,95],"130":[2,95],"131":[2,95],"133":[2,95],"134":[2,95],"137":[2,95],"138":[2,95],"139":[2,95],"140":[2,95],"141":[2,95],"142":[2,95],"144":[2,95]},{"4":[1,279],"30":[1,319]},{"1":[2,98],"4":[2,98],"29":[2,98],"30":[2,98],"47":[2,98],"55":[2,98],"59":[2,98],"75":[2,98],"80":[2,98],"90":[2,98],"94":[2,98],"96":[2,98],"105":[2,98],"107":[2,98],"108":[2,98],"109":[2,98],"113":[2,98],"121":[2,98],"130":[2,98],"131":[2,98],"133":[2,98],"134":[2,98],"137":[2,98],"138":[2,98],"139":[2,98],"140":[2,98],"141":[2,98],"142":[2,98],"144":[2,98]},{"28":177,"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"84":320},{"4":[1,279],"80":[1,321]},{"8":322,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,323],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,105],"28":177,"30":[2,105],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"83":324,"84":231},{"47":[1,95],"96":[1,325],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,128],"4":[2,128],"29":[2,128],"30":[2,128],"41":[2,128],"47":[2,128],"55":[2,128],"59":[2,128],"68":[2,128],"69":[2,128],"70":[2,128],"71":[2,128],"74":[2,128],"75":[2,128],"76":[2,128],"77":[2,128],"80":[2,128],"88":[2,128],"89":[2,128],"90":[2,128],"94":[2,128],"96":[2,128],"105":[2,128],"107":[2,128],"108":[2,128],"109":[2,128],"113":[2,128],"119":[2,128],"120":[2,128],"121":[2,128],"130":[2,128],"131":[2,128],"133":[2,128],"134":[2,128],"137":[2,128],"138":[2,128],"139":[2,128],"140":[2,128],"141":[2,128],"142":[2,128],"144":[2,128]},{"8":210,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"97":326,"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":210,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,153],"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"60":154,"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"91":327,"92":[1,60],"95":[1,59],"97":152,"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,130],"29":[2,130],"30":[2,130],"55":[2,130],"90":[2,130],"96":[2,130]},{"4":[1,285],"29":[1,286],"30":[1,328]},{"1":[2,147],"4":[2,147],"29":[2,147],"30":[2,147],"47":[1,95],"55":[2,147],"59":[2,147],"75":[2,147],"80":[2,147],"90":[2,147],"94":[2,147],"96":[2,147],"105":[2,147],"106":93,"107":[1,68],"108":[2,147],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,147],"130":[2,147],"131":[2,147],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,149],"4":[2,149],"29":[2,149],"30":[2,149],"47":[1,95],"55":[2,149],"59":[2,149],"75":[2,149],"80":[2,149],"90":[2,149],"94":[2,149],"96":[2,149],"105":[2,149],"106":93,"107":[1,68],"108":[2,149],"109":[1,69],"112":94,"113":[1,71],"114":72,"121":[2,149],"130":[2,149],"131":[2,149],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"119":[2,167],"120":[2,167]},{"8":329,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":330,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":331,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"1":[2,88],"4":[2,88],"29":[2,88],"30":[2,88],"41":[2,88],"47":[2,88],"55":[2,88],"59":[2,88],"68":[2,88],"69":[2,88],"70":[2,88],"71":[2,88],"74":[2,88],"75":[2,88],"76":[2,88],"77":[2,88],"80":[2,88],"88":[2,88],"89":[2,88],"90":[2,88],"94":[2,88],"96":[2,88],"105":[2,88],"107":[2,88],"108":[2,88],"109":[2,88],"113":[2,88],"119":[2,88],"120":[2,88],"121":[2,88],"130":[2,88],"131":[2,88],"133":[2,88],"134":[2,88],"137":[2,88],"138":[2,88],"139":[2,88],"140":[2,88],"141":[2,88],"142":[2,88],"144":[2,88]},{"28":177,"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":332,"43":176,"46":[1,49],"58":[1,178]},{"4":[2,89],"28":177,"29":[2,89],"30":[2,89],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":173,"43":176,"46":[1,49],"55":[2,89],"58":[1,178],"79":333},{"4":[2,91],"29":[2,91],"30":[2,91],"55":[2,91],"80":[2,91]},{"4":[2,44],"29":[2,44],"30":[2,44],"47":[1,95],"55":[2,44],"80":[2,44],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"8":334,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,45],"29":[2,45],"30":[2,45],"47":[1,95],"55":[2,45],"80":[2,45],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"8":335,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"47":[1,95],"75":[1,336],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,125],"4":[2,125],"29":[2,125],"30":[2,125],"41":[2,125],"47":[2,125],"55":[2,125],"59":[2,125],"68":[2,125],"69":[2,125],"70":[2,125],"71":[2,125],"74":[2,125],"75":[2,125],"76":[2,125],"77":[2,125],"80":[2,125],"82":[2,125],"88":[2,125],"89":[2,125],"90":[2,125],"94":[2,125],"96":[2,125],"105":[2,125],"107":[2,125],"108":[2,125],"109":[2,125],"113":[2,125],"121":[2,125],"130":[2,125],"131":[2,125],"133":[2,125],"134":[2,125],"135":[2,125],"136":[2,125],"137":[2,125],"138":[2,125],"139":[2,125],"140":[2,125],"141":[2,125],"142":[2,125],"143":[2,125],"144":[2,125]},{"1":[2,126],"4":[2,126],"29":[2,126],"30":[2,126],"41":[2,126],"47":[2,126],"55":[2,126],"59":[2,126],"68":[2,126],"69":[2,126],"70":[2,126],"71":[2,126],"74":[2,126],"75":[2,126],"76":[2,126],"77":[2,126],"80":[2,126],"82":[2,126],"88":[2,126],"89":[2,126],"90":[2,126],"94":[2,126],"96":[2,126],"105":[2,126],"107":[2,126],"108":[2,126],"109":[2,126],"113":[2,126],"121":[2,126],"130":[2,126],"131":[2,126],"133":[2,126],"134":[2,126],"135":[2,126],"136":[2,126],"137":[2,126],"138":[2,126],"139":[2,126],"140":[2,126],"141":[2,126],"142":[2,126],"143":[2,126],"144":[2,126]},{"1":[2,40],"4":[2,40],"29":[2,40],"30":[2,40],"47":[2,40],"55":[2,40],"59":[2,40],"75":[2,40],"80":[2,40],"90":[2,40],"94":[2,40],"96":[2,40],"105":[2,40],"107":[2,40],"108":[2,40],"109":[2,40],"113":[2,40],"121":[2,40],"130":[2,40],"131":[2,40],"133":[2,40],"134":[2,40],"137":[2,40],"138":[2,40],"139":[2,40],"140":[2,40],"141":[2,40],"142":[2,40],"144":[2,40]},{"1":[2,117],"4":[2,117],"29":[2,117],"30":[2,117],"47":[2,117],"55":[2,117],"59":[2,117],"68":[2,117],"69":[2,117],"70":[2,117],"71":[2,117],"74":[2,117],"75":[2,117],"76":[2,117],"77":[2,117],"80":[2,117],"88":[2,117],"89":[2,117],"90":[2,117],"94":[2,117],"96":[2,117],"105":[2,117],"107":[2,117],"108":[2,117],"109":[2,117],"113":[2,117],"121":[2,117],"130":[2,117],"131":[2,117],"133":[2,117],"134":[2,117],"137":[2,117],"138":[2,117],"139":[2,117],"140":[2,117],"141":[2,117],"142":[2,117],"144":[2,117]},{"1":[2,53],"4":[2,53],"29":[2,53],"30":[2,53],"47":[2,53],"55":[2,53],"59":[2,53],"75":[2,53],"80":[2,53],"90":[2,53],"94":[2,53],"96":[2,53],"105":[2,53],"107":[2,53],"108":[2,53],"109":[2,53],"113":[2,53],"121":[2,53],"130":[2,53],"131":[2,53],"133":[2,53],"134":[2,53],"137":[2,53],"138":[2,53],"139":[2,53],"140":[2,53],"141":[2,53],"142":[2,53],"144":[2,53]},{"1":[2,208],"4":[2,208],"29":[2,208],"30":[2,208],"47":[2,208],"55":[2,208],"59":[2,208],"75":[2,208],"80":[2,208],"90":[2,208],"94":[2,208],"96":[2,208],"105":[2,208],"107":[2,208],"108":[2,208],"109":[2,208],"113":[2,208],"121":[2,208],"130":[2,208],"131":[2,208],"133":[2,208],"134":[2,208],"137":[2,208],"138":[2,208],"139":[2,208],"140":[2,208],"141":[2,208],"142":[2,208],"144":[2,208]},{"1":[2,185],"4":[2,185],"29":[2,185],"30":[2,185],"47":[2,185],"55":[2,185],"59":[2,185],"75":[2,185],"80":[2,185],"90":[2,185],"94":[2,185],"96":[2,185],"105":[2,185],"107":[2,185],"108":[2,185],"109":[2,185],"113":[2,185],"121":[2,185],"124":[2,185],"130":[2,185],"131":[2,185],"133":[2,185],"134":[2,185],"137":[2,185],"138":[2,185],"139":[2,185],"140":[2,185],"141":[2,185],"142":[2,185],"144":[2,185]},{"1":[2,141],"4":[2,141],"29":[2,141],"30":[2,141],"47":[2,141],"55":[2,141],"59":[2,141],"75":[2,141],"80":[2,141],"90":[2,141],"94":[2,141],"96":[2,141],"105":[2,141],"107":[2,141],"108":[2,141],"109":[2,141],"113":[2,141],"121":[2,141],"130":[2,141],"131":[2,141],"133":[2,141],"134":[2,141],"137":[2,141],"138":[2,141],"139":[2,141],"140":[2,141],"141":[2,141],"142":[2,141],"144":[2,141]},{"1":[2,142],"4":[2,142],"29":[2,142],"30":[2,142],"47":[2,142],"55":[2,142],"59":[2,142],"75":[2,142],"80":[2,142],"90":[2,142],"94":[2,142],"96":[2,142],"101":[2,142],"105":[2,142],"107":[2,142],"108":[2,142],"109":[2,142],"113":[2,142],"121":[2,142],"130":[2,142],"131":[2,142],"133":[2,142],"134":[2,142],"137":[2,142],"138":[2,142],"139":[2,142],"140":[2,142],"141":[2,142],"142":[2,142],"144":[2,142]},{"1":[2,175],"4":[2,175],"29":[2,175],"30":[2,175],"47":[2,175],"55":[2,175],"59":[2,175],"75":[2,175],"80":[2,175],"90":[2,175],"94":[2,175],"96":[2,175],"105":[2,175],"107":[2,175],"108":[2,175],"109":[2,175],"113":[2,175],"121":[2,175],"130":[2,175],"131":[2,175],"133":[2,175],"134":[2,175],"137":[2,175],"138":[2,175],"139":[2,175],"140":[2,175],"141":[2,175],"142":[2,175],"144":[2,175]},{"4":[1,122],"6":337,"29":[1,6]},{"30":[1,338]},{"4":[1,339],"30":[2,181],"124":[2,181],"126":[2,181]},{"8":340,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[2,105],"28":177,"30":[2,105],"31":174,"32":[1,76],"33":175,"34":[1,74],"35":[1,75],"42":233,"43":234,"46":[1,49],"58":[1,178],"78":[1,232],"83":341,"84":231},{"1":[2,96],"4":[2,96],"29":[2,96],"30":[2,96],"47":[2,96],"55":[2,96],"59":[2,96],"75":[2,96],"80":[2,96],"90":[2,96],"94":[2,96],"96":[2,96],"105":[2,96],"107":[2,96],"108":[2,96],"109":[2,96],"113":[2,96],"121":[2,96],"130":[2,96],"131":[2,96],"133":[2,96],"134":[2,96],"137":[2,96],"138":[2,96],"139":[2,96],"140":[2,96],"141":[2,96],"142":[2,96],"144":[2,96]},{"4":[2,107],"30":[2,107],"80":[2,107]},{"4":[2,108],"30":[2,108],"80":[2,108]},{"4":[2,103],"30":[2,103],"47":[1,95],"80":[2,103],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"8":342,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[1,279],"30":[1,343]},{"1":[2,123],"4":[2,123],"29":[2,123],"30":[2,123],"47":[2,123],"55":[2,123],"59":[2,123],"68":[2,123],"69":[2,123],"70":[2,123],"71":[2,123],"74":[2,123],"75":[2,123],"76":[2,123],"77":[2,123],"80":[2,123],"88":[2,123],"89":[2,123],"90":[2,123],"94":[2,123],"96":[2,123],"105":[2,123],"107":[2,123],"108":[2,123],"109":[2,123],"113":[2,123],"121":[2,123],"130":[2,123],"131":[2,123],"133":[2,123],"134":[2,123],"137":[2,123],"138":[2,123],"139":[2,123],"140":[2,123],"141":[2,123],"142":[2,123],"144":[2,123]},{"4":[2,131],"29":[2,131],"30":[2,131],"55":[2,131],"90":[2,131],"96":[2,131]},{"4":[2,57],"29":[2,57],"30":[2,57],"54":344,"55":[1,240]},{"4":[2,132],"29":[2,132],"30":[2,132],"55":[2,132],"90":[2,132],"96":[2,132]},{"1":[2,170],"4":[2,170],"29":[2,170],"30":[2,170],"47":[1,95],"55":[2,170],"59":[2,170],"75":[2,170],"80":[2,170],"90":[2,170],"94":[2,170],"96":[2,170],"105":[2,170],"106":93,"107":[2,170],"108":[2,170],"109":[2,170],"112":94,"113":[2,170],"114":72,"121":[1,345],"130":[2,170],"131":[2,170],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,172],"4":[2,172],"29":[2,172],"30":[2,172],"47":[1,95],"55":[2,172],"59":[2,172],"75":[2,172],"80":[2,172],"90":[2,172],"94":[2,172],"96":[2,172],"105":[2,172],"106":93,"107":[2,172],"108":[1,346],"109":[2,172],"112":94,"113":[2,172],"114":72,"121":[2,172],"130":[2,172],"131":[2,172],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,171],"4":[2,171],"29":[2,171],"30":[2,171],"47":[1,95],"55":[2,171],"59":[2,171],"75":[2,171],"80":[2,171],"90":[2,171],"94":[2,171],"96":[2,171],"105":[2,171],"106":93,"107":[2,171],"108":[2,171],"109":[2,171],"112":94,"113":[2,171],"114":72,"121":[2,171],"130":[2,171],"131":[2,171],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"4":[2,92],"29":[2,92],"30":[2,92],"55":[2,92],"80":[2,92]},{"4":[2,57],"29":[2,57],"30":[2,57],"54":347,"55":[1,252]},{"30":[1,348],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"30":[1,349],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,124],"4":[2,124],"29":[2,124],"30":[2,124],"41":[2,124],"47":[2,124],"55":[2,124],"59":[2,124],"68":[2,124],"69":[2,124],"70":[2,124],"71":[2,124],"74":[2,124],"75":[2,124],"76":[2,124],"77":[2,124],"80":[2,124],"82":[2,124],"88":[2,124],"89":[2,124],"90":[2,124],"94":[2,124],"96":[2,124],"105":[2,124],"107":[2,124],"108":[2,124],"109":[2,124],"113":[2,124],"121":[2,124],"130":[2,124],"131":[2,124],"133":[2,124],"134":[2,124],"135":[2,124],"136":[2,124],"137":[2,124],"138":[2,124],"139":[2,124],"140":[2,124],"141":[2,124],"142":[2,124],"143":[2,124],"144":[2,124]},{"30":[1,350]},{"1":[2,178],"4":[2,178],"29":[2,178],"30":[2,178],"47":[2,178],"55":[2,178],"59":[2,178],"75":[2,178],"80":[2,178],"90":[2,178],"94":[2,178],"96":[2,178],"105":[2,178],"107":[2,178],"108":[2,178],"109":[2,178],"113":[2,178],"121":[2,178],"130":[2,178],"131":[2,178],"133":[2,178],"134":[2,178],"137":[2,178],"138":[2,178],"139":[2,178],"140":[2,178],"141":[2,178],"142":[2,178],"144":[2,178]},{"30":[2,182],"124":[2,182],"126":[2,182]},{"4":[2,137],"29":[2,137],"47":[1,95],"55":[2,137],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"4":[1,279],"30":[1,351]},{"30":[1,352],"47":[1,95],"106":93,"107":[1,68],"109":[1,69],"112":94,"113":[1,71],"114":72,"130":[1,91],"131":[1,92],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,101],"4":[2,101],"29":[2,101],"30":[2,101],"47":[2,101],"55":[2,101],"59":[2,101],"75":[2,101],"80":[2,101],"90":[2,101],"94":[2,101],"96":[2,101],"105":[2,101],"107":[2,101],"108":[2,101],"109":[2,101],"113":[2,101],"121":[2,101],"130":[2,101],"131":[2,101],"133":[2,101],"134":[2,101],"137":[2,101],"138":[2,101],"139":[2,101],"140":[2,101],"141":[2,101],"142":[2,101],"144":[2,101]},{"4":[1,285],"29":[1,286],"30":[1,353]},{"8":354,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"8":355,"9":124,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":64,"32":[1,76],"33":54,"34":[1,74],"35":[1,75],"36":29,"37":[1,55],"38":[1,56],"39":[1,57],"40":28,"43":65,"45":[1,50],"46":[1,49],"48":[1,34],"51":35,"52":[1,62],"53":[1,63],"58":[1,61],"61":41,"63":52,"64":53,"65":30,"66":31,"67":32,"78":[1,73],"81":[1,48],"87":[1,33],"92":[1,60],"95":[1,59],"99":[1,43],"103":[1,51],"104":[1,58],"106":44,"107":[1,68],"109":[1,69],"110":45,"111":[1,70],"112":46,"113":[1,71],"114":72,"122":[1,47],"127":42,"128":[1,66],"129":[1,67],"132":[1,36],"133":[1,37],"134":[1,38],"135":[1,39],"136":[1,40]},{"4":[1,296],"29":[1,297],"30":[1,356]},{"4":[2,46],"29":[2,46],"30":[2,46],"55":[2,46],"80":[2,46]},{"4":[2,47],"29":[2,47],"30":[2,47],"55":[2,47],"80":[2,47]},{"1":[2,176],"4":[2,176],"29":[2,176],"30":[2,176],"47":[2,176],"55":[2,176],"59":[2,176],"75":[2,176],"80":[2,176],"90":[2,176],"94":[2,176],"96":[2,176],"105":[2,176],"107":[2,176],"108":[2,176],"109":[2,176],"113":[2,176],"121":[2,176],"130":[2,176],"131":[2,176],"133":[2,176],"134":[2,176],"137":[2,176],"138":[2,176],"139":[2,176],"140":[2,176],"141":[2,176],"142":[2,176],"144":[2,176]},{"1":[2,97],"4":[2,97],"29":[2,97],"30":[2,97],"47":[2,97],"55":[2,97],"59":[2,97],"75":[2,97],"80":[2,97],"90":[2,97],"94":[2,97],"96":[2,97],"105":[2,97],"107":[2,97],"108":[2,97],"109":[2,97],"113":[2,97],"121":[2,97],"130":[2,97],"131":[2,97],"133":[2,97],"134":[2,97],"137":[2,97],"138":[2,97],"139":[2,97],"140":[2,97],"141":[2,97],"142":[2,97],"144":[2,97]},{"4":[2,104],"30":[2,104],"80":[2,104]},{"4":[2,133],"29":[2,133],"30":[2,133],"55":[2,133],"90":[2,133],"96":[2,133]},{"1":[2,173],"4":[2,173],"29":[2,173],"30":[2,173],"47":[1,95],"55":[2,173],"59":[2,173],"75":[2,173],"80":[2,173],"90":[2,173],"94":[2,173],"96":[2,173],"105":[2,173],"106":93,"107":[2,173],"108":[2,173],"109":[2,173],"112":94,"113":[2,173],"114":72,"121":[2,173],"130":[2,173],"131":[2,173],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"1":[2,174],"4":[2,174],"29":[2,174],"30":[2,174],"47":[1,95],"55":[2,174],"59":[2,174],"75":[2,174],"80":[2,174],"90":[2,174],"94":[2,174],"96":[2,174],"105":[2,174],"106":93,"107":[2,174],"108":[2,174],"109":[2,174],"112":94,"113":[2,174],"114":72,"121":[2,174],"130":[2,174],"131":[2,174],"133":[1,83],"134":[1,82],"137":[1,84],"138":[1,85],"139":[1,86],"140":[1,87],"141":[1,88],"142":[1,89],"144":[1,90]},{"4":[2,93],"29":[2,93],"30":[2,93],"55":[2,93],"80":[2,93]}],
-defaultActions: {"79":[2,4],"102":[2,115]},
-parseError: function parseError(str, hash) {
-    throw new Error(str);
-},
-parse: function parse(input) {
-    var self = this,
-        stack = [0],
-        vstack = [null], // semantic value stack
-        table = this.table,
-        yytext = '',
-        yylineno = 0,
-        yyleng = 0,
-        shifts = 0,
-        reductions = 0,
-        recovering = 0,
-        TERROR = 2,
-        EOF = 1;
-
-    this.lexer.setInput(input);
-    this.lexer.yy = this.yy;
-    this.yy.lexer = this.lexer;
-
-    var parseError = this.yy.parseError = typeof this.yy.parseError == 'function' ? this.yy.parseError : this.parseError;
-
-    function popStack (n) {
-        stack.length = stack.length - 2*n;
-        vstack.length = vstack.length - n;
-    }
-
-    function checkRecover (st) {
-        for (var p in table[st]) if (p == TERROR) {
-            return true;
-        }
-        return false;
-    }
-
-    function lex() {
-        var token;
-        token = self.lexer.lex() || 1; // $end = 1
-        // if token isn't its numeric value, convert
-        if (typeof token !== 'number') {
-            token = self.symbols_[token] || token;
-        }
-        return token;
-    };
-
-    var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected, recovered = false;
-    while (true) {
-        // retreive state number from top of stack
-        state = stack[stack.length-1];
-
-        // use default actions if available
-        if (this.defaultActions[state]) {
-            action = this.defaultActions[state];
-        } else {
-            if (symbol == null)
-                symbol = lex();
-            // read action for current state and first input
-            action = table[state] && table[state][symbol];
-        }
-
-        // handle parse error
-        if (typeof action === 'undefined' || !action.length || !action[0]) {
-
-            if (!recovering) {
-                // Report error
-                expected = [];
-                for (p in table[state]) if (this.terminals_[p] && p > 2) {
-                    expected.push("'"+this.terminals_[p]+"'");
-                }
-                if (this.lexer.showPosition) {
-                    parseError.call(this, 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+'\nExpecting '+expected.join(', '),
-                        {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, expected: expected});
-                } else {
-                    parseError.call(this, 'Parse error on line '+(yylineno+1)+": Unexpected '"+(this.terminals_[symbol] || symbol)+"'",
-                        {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, expected: expected});
-                }
-            }
-
-            // just recovered from another error
-            if (recovering == 3) {
-                if (symbol == EOF) {
-                    throw 'Parsing halted.'
-                }
-
-                // discard current lookahead and grab another
-                yyleng = this.lexer.yyleng;
-                yytext = this.lexer.yytext;
-                yylineno = this.lexer.yylineno;
-                symbol = lex();
-            }
-
-            // try to recover from error
-            while (1) {
-                // check for error recovery rule in this state
-                if (checkRecover(state)) {
-                    break;
-                }
-                if (state == 0) {
-                    throw 'Parsing halted.'
-                }
-                popStack(1);
-                state = stack[stack.length-1];
-            }
-            
-            preErrorSymbol = symbol; // save the lookahead token
-            symbol = TERROR;         // insert generic error symbol as new lookahead
-            state = stack[stack.length-1];
-            action = table[state] && table[state][TERROR];
-            recovering = 3; // allow 3 real symbols to be shifted before reporting a new error
-        }
-
-        // this shouldn't happen, unless resolve defaults are off
-        if (action[0] instanceof Array && action.length > 1) {
-            throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);
-        }
-
-        a = action; 
-
-        switch (a[0]) {
-
-            case 1: // shift
-                shifts++;
-
-                stack.push(symbol);
-                vstack.push(this.lexer.yytext); // semantic values or junk only, no terminals
-                stack.push(a[1]); // push state
-                symbol = null;
-                if (!preErrorSymbol) { // normal execution/no error
-                    yyleng = this.lexer.yyleng;
-                    yytext = this.lexer.yytext;
-                    yylineno = this.lexer.yylineno;
-                    if (recovering > 0)
-                        recovering--;
-                } else { // error just occurred, resume old lookahead f/ before error
-                    symbol = preErrorSymbol;
-                    preErrorSymbol = null;
-                }
-                break;
-
-            case 2: // reduce
-                reductions++;
-
-                len = this.productions_[a[1]][1];
-
-                // perform semantic action
-                yyval.$ = vstack[vstack.length-len]; // default to $$ = $1
-                r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, a[1], vstack);
-
-                if (typeof r !== 'undefined') {
-                    return r;
-                }
-
-                // pop off stack
-                if (len) {
-                    stack = stack.slice(0,-1*len*2);
-                    vstack = vstack.slice(0, -1*len);
-                }
-
-                stack.push(this.productions_[a[1]][0]);    // push nonterminal (reduce)
-                vstack.push(yyval.$);
-                // goto new state = table[STATE][NONTERMINAL]
-                newState = table[stack[stack.length-2]][stack[stack.length-1]];
-                stack.push(newState);
-                break;
-
-            case 3: // accept
-
-                this.reductionCount = reductions;
-                this.shiftCount = shifts;
-                return true;
-        }
-
-    }
-
-    return true;
-}};
-return parser;
-})();
-if (typeof require !== 'undefined') {
-exports.parser = parser;
-exports.parse = function () { return parser.parse.apply(parser, arguments); }
-exports.main = function commonjsMain(args) {
-    if (!args[1])
-        throw new Error('Usage: '+args[0]+' FILE');
-    if (typeof process !== 'undefined') {
-        var source = require('fs').readFileSync(require('path').join(process.cwd(), args[1]), "utf8");
-    } else {
-        var cwd = require("file").path(require("file").cwd());
-        var source = cwd.join(args[1]).read({charset: "utf-8"});
-    }
-    return exports.parser.parse(source);
-}
-if (typeof module !== 'undefined' && require.main === module) {
-  exports.main(typeof process !== 'undefined' ? process.argv.slice(1) : require("system").args);
-}
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/lib/repl.js b/node/node_modules/jade/support/coffee-script/lib/repl.js
deleted file mode 100644 (file)
index d30f756..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-(function() {
-  var CoffeeScript, helpers, readline, repl, run, stdio;
-  CoffeeScript = require('./coffee-script');
-  helpers = require('./helpers');
-  readline = require('readline');
-  stdio = process.openStdin();
-  helpers.extend(global, {
-    quit: function() {
-      return process.exit(0);
-    }
-  });
-  run = function(buffer) {
-    var val;
-    try {
-      val = CoffeeScript.eval(buffer.toString(), {
-        bare: true,
-        globals: true,
-        fileName: 'repl'
-      });
-      if (val !== undefined) {
-        puts(inspect(val));
-      }
-    } catch (err) {
-      puts(err.stack || err.toString());
-    }
-    return repl.prompt();
-  };
-  repl = readline.createInterface(stdio);
-  repl.setPrompt('coffee> ');
-  stdio.on('data', function(buffer) {
-    return repl.write(buffer);
-  });
-  repl.on('close', function() {
-    return stdio.destroy();
-  });
-  repl.on('line', run);
-  repl.prompt();
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/rewriter.js b/node/node_modules/jade/support/coffee-script/lib/rewriter.js
deleted file mode 100644 (file)
index 6999fc8..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-(function() {
-  var BALANCED_PAIRS, EXPRESSION_CLOSE, EXPRESSION_END, EXPRESSION_START, IMPLICIT_BLOCK, IMPLICIT_CALL, IMPLICIT_END, IMPLICIT_FUNC, IMPLICIT_UNSPACED_CALL, INVERSES, LINEBREAKS, SINGLE_CLOSERS, SINGLE_LINERS, _i, _len, _ref, include, left, rite;
-  include = require('./helpers').include;
-  exports.Rewriter = (function() {
-    function Rewriter() {
-      return this;
-    };
-    return Rewriter;
-  })();
-  exports.Rewriter.prototype.rewrite = function(_arg) {
-    this.tokens = _arg;
-    this.adjustComments();
-    this.removeLeadingNewlines();
-    this.removeMidExpressionNewlines();
-    this.closeOpenCalls();
-    this.closeOpenIndexes();
-    this.addImplicitIndentation();
-    this.tagPostfixConditionals();
-    this.addImplicitBraces();
-    this.addImplicitParentheses();
-    this.ensureBalance(BALANCED_PAIRS);
-    this.rewriteClosingParens();
-    return this.tokens;
-  };
-  exports.Rewriter.prototype.scanTokens = function(block) {
-    var i, token, tokens;
-    tokens = this.tokens;
-    i = 0;
-    while (token = tokens[i]) {
-      i += block.call(this, token, i, tokens);
-    }
-    return true;
-  };
-  exports.Rewriter.prototype.detectEnd = function(i, condition, action) {
-    var levels, token, tokens;
-    tokens = this.tokens;
-    levels = 0;
-    while (token = tokens[i]) {
-      if (levels === 0 && condition.call(this, token, i)) {
-        return action.call(this, token, i);
-      }
-      if (!token || levels < 0) {
-        return action.call(this, token, i - 1);
-      }
-      if (include(EXPRESSION_START, token[0])) {
-        levels += 1;
-      } else if (include(EXPRESSION_END, token[0])) {
-        levels -= 1;
-      }
-      i += 1;
-    }
-    return i - 1;
-  };
-  exports.Rewriter.prototype.adjustComments = function() {
-    return this.scanTokens(function(token, i, tokens) {
-      var _ref, after, before, post, prev;
-      if (token[0] !== 'HERECOMMENT') {
-        return 1;
-      }
-      before = tokens[i - 2];
-      prev = tokens[i - 1];
-      post = tokens[i + 1];
-      after = tokens[i + 2];
-      if (((after != null) ? after[0] : undefined) === 'INDENT') {
-        tokens.splice(i + 2, 1);
-        if (((before != null) ? before[0] : undefined) === 'OUTDENT' && ((post != null) ? post[0] : undefined) === 'TERMINATOR') {
-          tokens.splice(i - 2, 1);
-        } else {
-          tokens.splice(i, 0, after);
-        }
-      } else if (prev && !((_ref = prev[0]) === 'TERMINATOR' || _ref === 'INDENT' || _ref === 'OUTDENT')) {
-        if (((post != null) ? post[0] : undefined) === 'TERMINATOR' && ((after != null) ? after[0] : undefined) === 'OUTDENT') {
-          tokens.splice.apply(tokens, [i + 2, 0].concat(tokens.splice(i, 2)));
-          if (tokens[i + 2][0] !== 'TERMINATOR') {
-            tokens.splice(i + 2, 0, ['TERMINATOR', '\n', prev[2]]);
-          }
-        } else {
-          tokens.splice(i, 0, ['TERMINATOR', '\n', prev[2]]);
-        }
-        return 2;
-      }
-      return 1;
-    });
-  };
-  exports.Rewriter.prototype.removeLeadingNewlines = function() {
-    var _len, _ref, i, tag;
-    for (i = 0, _len = (_ref = this.tokens).length; i < _len; i++) {
-      tag = _ref[i][0];
-      if (tag !== 'TERMINATOR') {
-        break;
-      }
-    }
-    return i ? this.tokens.splice(0, i) : undefined;
-  };
-  exports.Rewriter.prototype.removeMidExpressionNewlines = function() {
-    return this.scanTokens(function(token, i, tokens) {
-      if (!(token[0] === 'TERMINATOR' && include(EXPRESSION_CLOSE, this.tag(i + 1)))) {
-        return 1;
-      }
-      tokens.splice(i, 1);
-      return 0;
-    });
-  };
-  exports.Rewriter.prototype.closeOpenCalls = function() {
-    var action, condition;
-    condition = function(token, i) {
-      var _ref;
-      return ((_ref = token[0]) === ')' || _ref === 'CALL_END') || token[0] === 'OUTDENT' && this.tag(i - 1) === ')';
-    };
-    action = function(token, i) {
-      return (this.tokens[token[0] === 'OUTDENT' ? i - 1 : i][0] = 'CALL_END');
-    };
-    return this.scanTokens(function(token, i) {
-      if (token[0] === 'CALL_START') {
-        this.detectEnd(i + 1, condition, action);
-      }
-      return 1;
-    });
-  };
-  exports.Rewriter.prototype.closeOpenIndexes = function() {
-    var action, condition;
-    condition = function(token, i) {
-      var _ref;
-      return ((_ref = token[0]) === ']' || _ref === 'INDEX_END');
-    };
-    action = function(token, i) {
-      return (token[0] = 'INDEX_END');
-    };
-    return this.scanTokens(function(token, i) {
-      if (token[0] === 'INDEX_START') {
-        this.detectEnd(i + 1, condition, action);
-      }
-      return 1;
-    });
-  };
-  exports.Rewriter.prototype.addImplicitBraces = function() {
-    var action, condition, stack;
-    stack = [];
-    condition = function(token, i) {
-      var _ref, _ref2, one, tag, three, two;
-      if (('HERECOMMENT' === this.tag(i + 1) || 'HERECOMMENT' === this.tag(i - 1))) {
-        return false;
-      }
-      _ref = this.tokens.slice(i + 1, i + 4), one = _ref[0], two = _ref[1], three = _ref[2];
-      tag = token[0];
-      return (tag === 'TERMINATOR' || tag === 'OUTDENT') && !(((two != null) ? two[0] : undefined) === ':' || ((one != null) ? one[0] : undefined) === '@' && ((three != null) ? three[0] : undefined) === ':') || tag === ',' && !((_ref2 = ((one != null) ? one[0] : undefined)) === 'IDENTIFIER' || _ref2 === 'NUMBER' || _ref2 === 'STRING' || _ref2 === '@' || _ref2 === 'TERMINATOR' || _ref2 === 'OUTDENT');
-    };
-    action = function(token, i) {
-      return this.tokens.splice(i, 0, ['}', '}', token[2]]);
-    };
-    return this.scanTokens(function(token, i, tokens) {
-      var idx, tag, tok;
-      if (include(EXPRESSION_START, tag = token[0])) {
-        stack.push(tag === 'INDENT' && this.tag(i - 1) === '{' ? '{' : tag);
-        return 1;
-      }
-      if (include(EXPRESSION_END, tag)) {
-        stack.pop();
-        return 1;
-      }
-      if (!(tag === ':' && stack[stack.length - 1] !== '{')) {
-        return 1;
-      }
-      stack.push('{');
-      idx = this.tag(i - 2) === '@' ? i - 2 : i - 1;
-      if (this.tag(idx - 2) === 'HERECOMMENT') {
-        idx -= 2;
-      }
-      tok = ['{', '{', token[2]];
-      tok.generated = true;
-      tokens.splice(idx, 0, tok);
-      this.detectEnd(i + 2, condition, action);
-      return 2;
-    });
-  };
-  exports.Rewriter.prototype.addImplicitParentheses = function() {
-    var action, classLine;
-    classLine = false;
-    action = function(token, i) {
-      var idx;
-      idx = token[0] === 'OUTDENT' ? i + 1 : i;
-      return this.tokens.splice(idx, 0, ['CALL_END', ')', token[2]]);
-    };
-    return this.scanTokens(function(token, i, tokens) {
-      var callObject, next, prev, seenSingle, tag;
-      tag = token[0];
-      if (tag === 'CLASS') {
-        classLine = true;
-      }
-      prev = tokens[i - 1];
-      next = tokens[i + 1];
-      callObject = !classLine && tag === 'INDENT' && next && next.generated && next[0] === '{' && prev && include(IMPLICIT_FUNC, prev[0]);
-      seenSingle = false;
-      if (include(LINEBREAKS, tag)) {
-        classLine = false;
-      }
-      if (prev && !prev.spaced && tag === '?') {
-        token.call = true;
-      }
-      if (!(callObject || ((prev != null) ? prev.spaced : undefined) && (prev.call || include(IMPLICIT_FUNC, prev[0])) && (include(IMPLICIT_CALL, tag) || include(IMPLICIT_UNSPACED_CALL, tag) && !token.spaced))) {
-        return 1;
-      }
-      tokens.splice(i, 0, ['CALL_START', '(', token[2]]);
-      this.detectEnd(i + (callObject ? 2 : 1), function(token, i) {
-        var post;
-        if (!seenSingle && token.fromThen) {
-          return true;
-        }
-        tag = token[0];
-        if ((tag === 'IF' || tag === 'ELSE' || tag === 'UNLESS' || tag === '->' || tag === '=>')) {
-          seenSingle = true;
-        }
-        if (tag === 'PROPERTY_ACCESS' && this.tag(i - 1) === 'OUTDENT') {
-          return true;
-        }
-        return !token.generated && this.tag(i - 1) !== ',' && include(IMPLICIT_END, tag) && (tag !== 'INDENT' || (this.tag(i - 2) !== 'CLASS' && !include(IMPLICIT_BLOCK, this.tag(i - 1)) && !((post = this.tokens[i + 1]) && post.generated && post[0] === '{')));
-      }, action);
-      if (prev[0] === '?') {
-        prev[0] = 'FUNC_EXIST';
-      }
-      return 2;
-    });
-  };
-  exports.Rewriter.prototype.addImplicitIndentation = function() {
-    return this.scanTokens(function(token, i, tokens) {
-      var _ref, _ref2, action, condition, indent, outdent, starter, tag;
-      tag = token[0];
-      if (tag === 'ELSE' && this.tag(i - 1) !== 'OUTDENT') {
-        tokens.splice.apply(tokens, [i, 0].concat(this.indentation(token)));
-        return 2;
-      }
-      if (tag === 'CATCH' && ((_ref = this.tag(i + 2)) === 'TERMINATOR' || _ref === 'FINALLY')) {
-        tokens.splice.apply(tokens, [i + 2, 0].concat(this.indentation(token)));
-        return 4;
-      }
-      if (include(SINGLE_LINERS, tag) && this.tag(i + 1) !== 'INDENT' && !(tag === 'ELSE' && this.tag(i + 1) === 'IF')) {
-        starter = tag;
-        _ref2 = this.indentation(token), indent = _ref2[0], outdent = _ref2[1];
-        if (starter === 'THEN') {
-          indent.fromThen = true;
-        }
-        indent.generated = (outdent.generated = true);
-        tokens.splice(i + 1, 0, indent);
-        condition = function(token, i) {
-          return token[1] !== ';' && include(SINGLE_CLOSERS, token[0]) && !(token[0] === 'ELSE' && !(starter === 'IF' || starter === 'THEN'));
-        };
-        action = function(token, i) {
-          return this.tokens.splice(this.tag(i - 1) === ',' ? i - 1 : i, 0, outdent);
-        };
-        this.detectEnd(i + 2, condition, action);
-        if (tag === 'THEN') {
-          tokens.splice(i, 1);
-        }
-        return 1;
-      }
-      return 1;
-    });
-  };
-  exports.Rewriter.prototype.tagPostfixConditionals = function() {
-    var condition;
-    condition = function(token, i) {
-      var _ref;
-      return ((_ref = token[0]) === 'TERMINATOR' || _ref === 'INDENT');
-    };
-    return this.scanTokens(function(token, i) {
-      var _ref, original;
-      if (!((_ref = token[0]) === 'IF' || _ref === 'UNLESS')) {
-        return 1;
-      }
-      original = token;
-      this.detectEnd(i + 1, condition, function(token, i) {
-        return token[0] !== 'INDENT' ? (original[0] = 'POST_' + original[0]) : undefined;
-      });
-      return 1;
-    });
-  };
-  exports.Rewriter.prototype.ensureBalance = function(pairs) {
-    var _result, key, levels, open, openLine, unclosed, value;
-    levels = {};
-    openLine = {};
-    this.scanTokens(function(token, i) {
-      var _i, _len, _ref, _ref2, close, open, tag;
-      tag = token[0];
-      for (_i = 0, _len = (_ref = pairs).length; _i < _len; _i++) {
-        _ref2 = _ref[_i], open = _ref2[0], close = _ref2[1];
-        levels[open] |= 0;
-        if (tag === open) {
-          if (levels[open] === 0) {
-            openLine[open] = token[2];
-          }
-          levels[open] += 1;
-        } else if (tag === close) {
-          levels[open] -= 1;
-        }
-        if (levels[open] < 0) {
-          throw Error("too many " + (token[1]) + " on line " + (token[2] + 1));
-        }
-      }
-      return 1;
-    });
-    unclosed = (function() {
-      _result = [];
-      for (key in levels) {
-        value = levels[key];
-        if (value > 0) {
-          _result.push(key);
-        }
-      }
-      return _result;
-    })();
-    if (unclosed.length) {
-      throw Error("unclosed " + (open = unclosed[0]) + " on line " + (openLine[open] + 1));
-    }
-  };
-  exports.Rewriter.prototype.rewriteClosingParens = function() {
-    var debt, key, stack;
-    stack = [];
-    debt = {};
-    for (key in INVERSES) {
-      (debt[key] = 0);
-    }
-    return this.scanTokens(function(token, i, tokens) {
-      var inv, match, mtag, oppos, tag, val;
-      if (include(EXPRESSION_START, tag = token[0])) {
-        stack.push(token);
-        return 1;
-      }
-      if (!include(EXPRESSION_END, tag)) {
-        return 1;
-      }
-      if (debt[(inv = INVERSES[tag])] > 0) {
-        debt[inv] -= 1;
-        tokens.splice(i, 1);
-        return 0;
-      }
-      match = stack.pop();
-      mtag = match[0];
-      oppos = INVERSES[mtag];
-      if (tag === oppos) {
-        return 1;
-      }
-      debt[mtag] += 1;
-      val = [oppos, mtag === 'INDENT' ? match[1] : oppos];
-      if (this.tag(i + 2) === mtag) {
-        tokens.splice(i + 3, 0, val);
-        stack.push(match);
-      } else {
-        tokens.splice(i, 0, val);
-      }
-      return 1;
-    });
-  };
-  exports.Rewriter.prototype.indentation = function(token) {
-    return [['INDENT', 2, token[2]], ['OUTDENT', 2, token[2]]];
-  };
-  exports.Rewriter.prototype.tag = function(i) {
-    var _ref;
-    return (((_ref = this.tokens[i]) != null) ? _ref[0] : undefined);
-  };
-  BALANCED_PAIRS = [['(', ')'], ['[', ']'], ['{', '}'], ['INDENT', 'OUTDENT'], ['CALL_START', 'CALL_END'], ['PARAM_START', 'PARAM_END'], ['INDEX_START', 'INDEX_END']];
-  INVERSES = {};
-  EXPRESSION_START = [];
-  EXPRESSION_END = [];
-  for (_i = 0, _len = BALANCED_PAIRS.length; _i < _len; _i++) {
-    _ref = BALANCED_PAIRS[_i], left = _ref[0], rite = _ref[1];
-    EXPRESSION_START.push(INVERSES[rite] = left);
-    EXPRESSION_END.push(INVERSES[left] = rite);
-  }
-  EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
-  IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
-  IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'UNLESS', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'UNARY', '@', '->', '=>', '[', '(', '{', '--', '++'];
-  IMPLICIT_UNSPACED_CALL = ['+', '-'];
-  IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
-  IMPLICIT_END = ['POST_IF', 'POST_UNLESS', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'TERMINATOR', 'INDENT'];
-  SINGLE_LINERS = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN'];
-  SINGLE_CLOSERS = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN'];
-  LINEBREAKS = ['TERMINATOR', 'INDENT', 'OUTDENT'];
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/scope.js b/node/node_modules/jade/support/coffee-script/lib/scope.js
deleted file mode 100644 (file)
index b0f2a64..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-(function() {
-  var Scope, _ref, extend, last;
-  var __hasProp = Object.prototype.hasOwnProperty;
-  _ref = require('./helpers'), extend = _ref.extend, last = _ref.last;
-  exports.Scope = (function() {
-    Scope = (function() {
-      function Scope(_arg, _arg2, _arg3) {
-        this.method = _arg3;
-        this.expressions = _arg2;
-        this.parent = _arg;
-        this.variables = {
-          'arguments': 'arguments'
-        };
-        if (this.parent) {
-          this.garbage = this.parent.garbage;
-        } else {
-          this.garbage = [];
-          Scope.root = this;
-        }
-        return this;
-      };
-      return Scope;
-    })();
-    Scope.root = null;
-    Scope.prototype.startLevel = function() {
-      return this.garbage.push([]);
-    };
-    Scope.prototype.endLevel = function() {
-      var _i, _len, _ref2, _result, name, vars;
-      vars = this.variables;
-      _result = [];
-      for (_i = 0, _len = (_ref2 = this.garbage.pop()).length; _i < _len; _i++) {
-        name = _ref2[_i];
-        if (vars[name] === 'var') {
-          _result.push(vars[name] = 'reuse');
-        }
-      }
-      return _result;
-    };
-    Scope.prototype.find = function(name, options) {
-      if (this.check(name, options)) {
-        return true;
-      }
-      this.variables[name] = 'var';
-      return false;
-    };
-    Scope.prototype.any = function(fn) {
-      var _ref2, k, v;
-      for (v in _ref2 = this.variables) {
-        if (!__hasProp.call(_ref2, v)) continue;
-        k = _ref2[v];
-        if (fn(v, k)) {
-          return true;
-        }
-      }
-      return false;
-    };
-    Scope.prototype.parameter = function(name) {
-      return (this.variables[name] = 'param');
-    };
-    Scope.prototype.check = function(name, options) {
-      var _ref2, immediate;
-      immediate = Object.prototype.hasOwnProperty.call(this.variables, name);
-      if (immediate || ((options != null) ? options.immediate : undefined)) {
-        return immediate;
-      }
-      return !!(((_ref2 = this.parent) != null) ? _ref2.check(name) : undefined);
-    };
-    Scope.prototype.temporary = function(type, index) {
-      return type.length > 1 ? '_' + type + (index > 1 ? index : '') : '_' + (index + parseInt(type, 36)).toString(36).replace(/\d/g, 'a');
-    };
-    Scope.prototype.freeVariable = function(type) {
-      var index, temp;
-      index = 0;
-      while (this.check(temp = this.temporary(type, index)) && this.variables[temp] !== 'reuse') {
-        index++;
-      }
-      this.variables[temp] = 'var';
-      if (this.garbage.length) {
-        last(this.garbage).push(temp);
-      }
-      return temp;
-    };
-    Scope.prototype.assign = function(name, value) {
-      return (this.variables[name] = {
-        value: value,
-        assigned: true
-      });
-    };
-    Scope.prototype.hasDeclarations = function(body) {
-      return body === this.expressions && this.any(function(k, val) {
-        return (val === 'var' || val === 'reuse');
-      });
-    };
-    Scope.prototype.hasAssignments = function(body) {
-      return body === this.expressions && this.any(function(k, val) {
-        return val.assigned;
-      });
-    };
-    Scope.prototype.declaredVariables = function() {
-      var _ref2, _result, key, val;
-      return (function() {
-        _result = [];
-        for (key in _ref2 = this.variables) {
-          if (!__hasProp.call(_ref2, key)) continue;
-          val = _ref2[key];
-          if ((val === 'var' || val === 'reuse')) {
-            _result.push(key);
-          }
-        }
-        return _result;
-      }).call(this).sort();
-    };
-    Scope.prototype.assignedVariables = function() {
-      var _ref2, _result, key, val;
-      _result = [];
-      for (key in _ref2 = this.variables) {
-        if (!__hasProp.call(_ref2, key)) continue;
-        val = _ref2[key];
-        if (val.assigned) {
-          _result.push("" + key + " = " + (val.value));
-        }
-      }
-      return _result;
-    };
-    Scope.prototype.compiledDeclarations = function() {
-      return this.declaredVariables().join(', ');
-    };
-    Scope.prototype.compiledAssignments = function() {
-      return this.assignedVariables().join(', ');
-    };
-    return Scope;
-  }).call(this);
-}).call(this);
diff --git a/node/node_modules/jade/support/coffee-script/lib/utilities.js b/node/node_modules/jade/support/coffee-script/lib/utilities.js
deleted file mode 100644 (file)
index dacb61d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-(function(){
-  if (!((typeof process !== "undefined" && process !== null))) {
-    this.exports = this;
-  }
-  exports.utilities = {
-    extend: "function(child, parent) {\n    var ctor = function(){ };\n    ctor.prototype = parent.prototype;\n    child.__superClass__ = parent.prototype;\n    child.prototype = new ctor();\n    child.prototype.constructor = child;\n  }",
-    bind: "function(func, obj, args) {\n    return function() {\n      return func.apply(obj || {}, args ? args.concat(__slice.call(arguments, 0)) : arguments);\n    };\n  }",
-    range: "function(array, from, to, exclusive) {\n    return [\n      (from < 0 ? from + array.length : from || 0),\n      (to < 0 ? to + array.length : to || array.length) + (exclusive ? 0 : 1)\n    ];\n  }",
-    hasProp: 'Object.prototype.hasOwnProperty',
-    slice: 'Array.prototype.slice'
-  };
-})();
diff --git a/node/node_modules/jade/support/coffee-script/package.json b/node/node_modules/jade/support/coffee-script/package.json
deleted file mode 100644 (file)
index 89f7340..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-    "name":         "coffee-script",
-    "description":  "Unfancy JavaScript",
-    "keywords":     ["javascript", "language", "coffeescript", "compiler"],
-    "author":       "Jeremy Ashkenas",
-    "version":      "0.9.4",
-    "licenses":     [{
-      "type":       "MIT",
-      "url":        "http://github.com/jashkenas/coffee-script/raw/master/LICENSE"
-    }],
-    "engines":      {
-      "node":       ">=0.1.99"
-    },
-    "directories" : {
-      "lib" : "./lib"
-    },
-    "main" : "./lib/coffee-script",
-    "bin":          {
-      "coffee":     "./bin/coffee",
-      "cake":       "./bin/cake"
-    }
-}
diff --git a/node/node_modules/jade/support/coffee-script/src/browser.coffee b/node/node_modules/jade/support/coffee-script/src/browser.coffee
deleted file mode 100644 (file)
index ddb7a0f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# Override exported methods for non-Node.js engines.
-
-CoffeeScript = require './coffee-script'
-CoffeeScript.require = require
-
-# Use standard JavaScript `eval` to eval code.
-CoffeeScript.eval = (code, options) ->
-  eval CoffeeScript.compile code, options
-
-# Running code does not provide access to this scope.
-CoffeeScript.run = (code, options) ->
-  options?.bare = on
-  Function(CoffeeScript.compile code, options)()
-
-# If we're not in a browser environment, we're finished with the public API.
-return unless window?
-
-# Load a remote script from the current domain via XHR.
-CoffeeScript.load = (url, options) ->
-  xhr = new (window.ActiveXObject or XMLHttpRequest)('Microsoft.XMLHTTP')
-  xhr.open 'GET', url, true
-  xhr.overrideMimeType 'text/plain' if 'overrideMimeType' of xhr
-  xhr.onreadystatechange = ->
-    CoffeeScript.run xhr.responseText, options if xhr.readyState is 4
-  xhr.send null
-
-# Activate CoffeeScript in the browser by having it compile and evaluate
-# all script tags with a content-type of `text/coffeescript`.
-# This happens on page load.
-runScripts = ->
-  for script in document.getElementsByTagName 'script'
-    if script.type is 'text/coffeescript'
-      if script.src
-        CoffeeScript.load script.src
-      else
-        setTimeout -> CoffeeScript.run script.innerHTML
-  null
-if window.addEventListener
-  addEventListener 'DOMContentLoaded', runScripts, no
-else
-  attachEvent 'onload', runScripts
diff --git a/node/node_modules/jade/support/coffee-script/src/cake.coffee b/node/node_modules/jade/support/coffee-script/src/cake.coffee
deleted file mode 100644 (file)
index 61567bc..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-# `cake` is a simplified version of [Make](http://www.gnu.org/software/make/)
-# ([Rake](http://rake.rubyforge.org/), [Jake](http://github.com/280north/jake))
-# for CoffeeScript. You define tasks with names and descriptions in a Cakefile,
-# and can call them from the command line, or invoke them from other tasks.
-#
-# Running `cake` with no arguments will print out a list of all the tasks in the
-# current directory's Cakefile.
-
-# External dependencies.
-fs           = require 'fs'
-path         = require 'path'
-helpers      = require './helpers'
-optparse     = require './optparse'
-CoffeeScript = require './coffee-script'
-
-# Keep track of the list of defined tasks, the accepted options, and so on.
-tasks     = {}
-options   = {}
-switches  = []
-oparse    = null
-
-# Mixin the top-level Cake functions for Cakefiles to use directly.
-helpers.extend global,
-
-  # Define a Cake task with a short name, an optional sentence description,
-  # and the function to run as the action itself.
-  task: (name, description, action) ->
-    [action, description] = [description, action] unless action
-    tasks[name] = {name, description, action}
-
-  # Define an option that the Cakefile accepts. The parsed options hash,
-  # containing all of the command-line options passed, will be made available
-  # as the first argument to the action.
-  option: (letter, flag, description) ->
-    switches.push [letter, flag, description]
-
-  # Invoke another task in the current Cakefile.
-  invoke: (name) ->
-    missingTask name unless tasks[name]
-    tasks[name].action options
-
-
-# Run `cake`. Executes all of the tasks you pass, in order. Note that Node's
-# asynchrony may cause tasks to execute in a different order than you'd expect.
-# If no tasks are passed, print the help screen.
-exports.run = ->
-  path.exists 'Cakefile', (exists) ->
-    throw new Error("Cakefile not found in #{process.cwd()}") unless exists
-    args = process.argv.slice 2
-    CoffeeScript.run fs.readFileSync('Cakefile').toString(), fileName: 'Cakefile'
-    oparse = new optparse.OptionParser switches
-    return printTasks() unless args.length
-    options = oparse.parse(args)
-    invoke arg for arg in options.arguments
-
-# Display the list of Cake tasks in a format similar to `rake -T`
-printTasks = ->
-  puts ''
-  for all name, task of tasks
-    spaces = 20 - name.length
-    spaces = if spaces > 0 then Array(spaces + 1).join(' ') else ''
-    desc   = if task.description then "# #{task.description}" else ''
-    puts "cake #{name}#{spaces} #{desc}"
-  puts oparse.help() if switches.length
-
-# Print an error and exit when attempting to all an undefined task.
-missingTask = (task) ->
-  puts "No such task: \"#{task}\""
-  process.exit 1
diff --git a/node/node_modules/jade/support/coffee-script/src/coffee-script.coffee b/node/node_modules/jade/support/coffee-script/src/coffee-script.coffee
deleted file mode 100755 (executable)
index 135788d..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-# CoffeeScript can be used both on the server, as a command-line compiler based
-# on Node.js/V8, or to run CoffeeScripts directly in the browser. This module
-# contains the main entry functions for tokenzing, parsing, and compiling source
-# CoffeeScript into JavaScript.
-#
-# If included on a webpage, it will automatically sniff out, compile, and
-# execute all scripts present in `text/coffeescript` tags.
-
-path      = require 'path'
-{Lexer}   = require './lexer'
-{parser}  = require './parser'
-
-# TODO: Remove registerExtension when fully deprecated
-if require.extensions
-  fs = require 'fs'
-  require.extensions['.coffee'] = (module, filename) ->
-    content = compile fs.readFileSync filename, 'utf8'
-    module._compile content, filename
-else if require.registerExtension
-  require.registerExtension '.coffee', (content) -> compile content
-
-# The current CoffeeScript version number.
-exports.VERSION = '0.9.4'
-
-# Expose helpers for testing.
-exports.helpers = require './helpers'
-
-# Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison
-# compiler.
-exports.compile = compile = (code, options) ->
-  options or= {}
-  try
-    (parser.parse lexer.tokenize code).compile options
-  catch err
-    err.message = "In #{options.fileName}, #{err.message}" if options.fileName
-    throw err
-
-# Tokenize a string of CoffeeScript code, and return the array of tokens.
-exports.tokens = (code, options) ->
-  lexer.tokenize code, options
-
-# Tokenize and parse a string of CoffeeScript code, and return the AST. You can
-# then compile it by calling `.compile()` on the root, or traverse it by using
-# `.traverse()` with a callback.
-exports.nodes = (code, options) ->
-  parser.parse lexer.tokenize code, options
-
-# Compile and execute a string of CoffeeScript (on the server), correctly
-# setting `__filename`, `__dirname`, and relative `require()`.
-exports.run = (code, options) ->
-  # We want the root module.
-  root = module
-  while root.parent
-    root = root.parent
-  # Set the filename
-  root.filename = options.fileName
-  # Clear the module cache
-  root.moduleCache = {} if root.moduleCache
-  # Compile
-  if path.extname(root.filename) isnt '.coffee' or require.extensions
-    root._compile exports.compile(code, options), root.filename
-  else
-    root._compile code, root.filename
-
-# Compile and evaluate a string of CoffeeScript (in a Node.js-like environment).
-# The CoffeeScript REPL uses this to run the input.
-exports.eval = (code, options) ->
-  __filename = options.fileName
-  __dirname  = path.dirname __filename
-  eval exports.compile(code, options)
-
-# Instantiate a Lexer for our use here.
-lexer = new Lexer
-
-# The real Lexer produces a generic stream of tokens. This object provides a
-# thin wrapper around it, compatible with the Jison API. We can then pass it
-# directly as a "Jison lexer".
-parser.lexer =
-  lex: ->
-    token = @tokens[@pos] or [""]
-    @pos += 1
-    this.yylineno = token[2]
-    this.yytext   = token[1]
-    token[0]
-  setInput: (tokens) ->
-    @tokens = tokens
-    @pos    = 0
-  upcomingInput: -> ""
-
-parser.yy = require './nodes'
diff --git a/node/node_modules/jade/support/coffee-script/src/command.coffee b/node/node_modules/jade/support/coffee-script/src/command.coffee
deleted file mode 100644 (file)
index 59cf5ef..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-# The `coffee` utility. Handles command-line compilation of CoffeeScript
-# into various forms: saved into `.js` files or printed to stdout, piped to
-# [JSLint](http://javascriptlint.com/) or recompiled every time the source is
-# saved, printed as a token stream or as the syntax tree, or launch an
-# interactive REPL.
-
-# External dependencies.
-fs             = require 'fs'
-path           = require 'path'
-optparse       = require './optparse'
-CoffeeScript   = require './coffee-script'
-helpers        = require './helpers'
-{spawn, exec}  = require 'child_process'
-{EventEmitter} = require 'events'
-
-# Allow CoffeeScript to emit Node.js events, and add it to global scope.
-helpers.extend CoffeeScript, new EventEmitter
-global.CoffeeScript = CoffeeScript
-
-# The help banner that is printed when `coffee` is called without arguments.
-BANNER = '''
-  coffee compiles CoffeeScript source files into JavaScript.
-
-  Usage:
-    coffee path/to/script.coffee
-         '''
-
-# The list of all the valid option flags that `coffee` knows how to handle.
-SWITCHES = [
-  ['-c', '--compile',         'compile to JavaScript and save as .js files']
-  ['-i', '--interactive',     'run an interactive CoffeeScript REPL']
-  ['-o', '--output [DIR]',    'set the directory for compiled JavaScript']
-  ['-w', '--watch',           'watch scripts for changes, and recompile']
-  ['-p', '--print',           'print the compiled JavaScript to stdout']
-  ['-l', '--lint',            'pipe the compiled JavaScript through JSLint']
-  ['-s', '--stdio',           'listen for and compile scripts over stdio']
-  ['-e', '--eval',            'compile a string from the command line']
-  ['-r', '--require [FILE*]', 'require a library before executing your script']
-  ['-b', '--bare',            'compile without the top-level function wrapper']
-  ['-t', '--tokens',          'print the tokens that the lexer produces']
-  ['-n', '--nodes',           'print the parse tree that Jison produces']
-  ['-v', '--version',         'display CoffeeScript version']
-  ['-h', '--help',            'display this help message']
-]
-
-# Top-level objects shared by all the functions.
-opts         = {}
-sources      = []
-optionParser = null
-
-# Run `coffee` by parsing passed options and determining what action to take.
-# Many flags cause us to divert before compiling anything. Flags passed after
-# `--` will be passed verbatim to your script as arguments in `process.argv`
-exports.run = ->
-  parseOptions()
-  return usage()                              if opts.help
-  return version()                            if opts.version
-  return require './repl'                     if opts.interactive
-  return compileStdio()                       if opts.stdio
-  return compileScript 'console', sources[0]  if opts.eval
-  return require './repl'                     unless sources.length
-  separator = sources.indexOf '--'
-  flags = []
-  if separator >= 0
-    flags = sources.splice separator + 1
-    sources.pop()
-  if opts.run
-    flags = sources.splice(1).concat flags
-  process.ARGV = process.argv = flags
-  compileScripts()
-
-# Asynchronously read in each CoffeeScript in a list of source files and
-# compile them. If a directory is passed, recursively compile all
-# '.coffee' extension source files in it and all subdirectories.
-compileScripts = ->
-  for source in sources
-    base = source
-    compile = (source, topLevel) ->
-      path.exists source, (exists) ->
-        throw new Error "File not found: #{source}" unless exists
-        fs.stat source, (err, stats) ->
-          if stats.isDirectory()
-            fs.readdir source, (err, files) ->
-              for file in files
-                compile path.join(source, file)
-          else if topLevel or path.extname(source) is '.coffee'
-            fs.readFile source, (err, code) -> compileScript(source, code.toString(), base)
-            watch source, base if opts.watch
-    compile source, true
-
-# Compile a single source script, containing the given code, according to the
-# requested options. If evaluating the script directly sets `__filename`,
-# `__dirname` and `module.filename` to be correct relative to the script's path.
-compileScript = (file, input, base) ->
-  o = opts
-  options = compileOptions file
-  if o.require
-    require(if helpers.starts(req, '.') then fs.realpathSync(req) else req) for req in o.require
-  try
-    t = task = {file, input, options}
-    CoffeeScript.emit 'compile', task
-    if      o.tokens      then printTokens CoffeeScript.tokens t.input
-    else if o.nodes       then puts CoffeeScript.nodes(t.input).toString().trim()
-    else if o.run         then CoffeeScript.run t.input, t.options
-    else
-      t.output = CoffeeScript.compile t.input, t.options
-      CoffeeScript.emit 'success', task
-      if o.print          then print t.output
-      else if o.compile   then writeJs t.file, t.output, base
-      else if o.lint      then lint t.output
-  catch err
-    # Avoid using 'error' as it is a special event -- if there is no handler,
-    # node will print a stack trace and exit the program.
-    CoffeeScript.emit 'failure', err, task
-    return if CoffeeScript.listeners('failure').length
-    return puts err.message if o.watch
-    error err.stack
-    process.exit 1
-
-# Attach the appropriate listeners to compile scripts incoming over **stdin**,
-# and write them back to **stdout**.
-compileStdio = ->
-  code = ''
-  stdin = process.openStdin()
-  stdin.on 'data', (buffer) ->
-    code += buffer.toString() if buffer
-  stdin.on 'end', ->
-    compileScript 'stdio', code
-
-# Watch a source CoffeeScript file using `fs.watchFile`, recompiling it every
-# time the file is updated. May be used in combination with other options,
-# such as `--lint` or `--print`.
-watch = (source, base) ->
-  fs.watchFile source, {persistent: true, interval: 500}, (curr, prev) ->
-    return if curr.size is prev.size and curr.mtime.getTime() is prev.mtime.getTime()
-    fs.readFile source, (err, code) ->
-      throw err if err
-      compileScript(source, code.toString(), base)
-
-# Write out a JavaScript source file with the compiled code. By default, files
-# are written out in `cwd` as `.js` files with the same name, but the output
-# directory can be customized with `--output`.
-writeJs = (source, js, base) ->
-  filename  = path.basename(source, path.extname(source)) + '.js'
-  srcDir    = path.dirname source
-  baseDir   = srcDir.substring base.length
-  dir       = if opts.output then path.join opts.output, baseDir else srcDir
-  jsPath    = path.join dir, filename
-  compile   = ->
-    js = ' ' if js.length <= 0
-    fs.writeFile jsPath, js, (err) ->
-      puts "Compiled #{source}" if opts.compile and opts.watch
-  path.exists dir, (exists) ->
-    if exists then compile() else exec "mkdir -p #{dir}", compile
-
-# Pipe compiled JS through JSLint (requires a working `jsl` command), printing
-# any errors or warnings that arise.
-lint = (js) ->
-  printIt = (buffer) -> puts buffer.toString().trim()
-  conf = __dirname + '/../extras/jsl.conf'
-  jsl = spawn 'jsl', ['-nologo', '-stdin', '-conf', conf]
-  jsl.stdout.on 'data', printIt
-  jsl.stderr.on 'data', printIt
-  jsl.stdin.write js
-  jsl.stdin.end()
-
-# Pretty-print a stream of tokens.
-printTokens = (tokens) ->
-  strings = for token in tokens
-    [tag, value] = [token[0], token[1].toString().replace(/\n/, '\\n')]
-    "[#{tag} #{value}]"
-  puts strings.join(' ')
-
-# Use the [OptionParser module](optparse.html) to extract all options from
-# `process.argv` that are specified in `SWITCHES`.
-parseOptions = ->
-  optionParser  = new optparse.OptionParser SWITCHES, BANNER
-  o = opts      = optionParser.parse process.argv.slice 2
-  o.compile     or=  !!o.output
-  o.run         = not (o.compile or o.print or o.lint)
-  o.print       = !!  (o.print or (o.eval or o.stdio and o.compile))
-  sources       = o.arguments
-
-# The compile-time options to pass to the CoffeeScript compiler.
-compileOptions = (fileName) -> {fileName, bare: opts.bare}
-
-# Print the `--help` usage message and exit.
-usage = ->
-  puts optionParser.help()
-  process.exit 0
-
-# Print the `--version` message and exit.
-version = ->
-  puts "CoffeeScript version #{CoffeeScript.VERSION}"
-  process.exit 0
diff --git a/node/node_modules/jade/support/coffee-script/src/grammar.coffee b/node/node_modules/jade/support/coffee-script/src/grammar.coffee
deleted file mode 100644 (file)
index 70f5632..0000000
+++ /dev/null
@@ -1,613 +0,0 @@
-# The CoffeeScript parser is generated by [Jison](http://github.com/zaach/jison)
-# from this grammar file. Jison is a bottom-up parser generator, similar in
-# style to [Bison](http://www.gnu.org/software/bison), implemented in JavaScript.
-# It can recognize [LALR(1), LR(0), SLR(1), and LR(1)](http://en.wikipedia.org/wiki/LR_grammar)
-# type grammars. To create the Jison parser, we list the pattern to match
-# on the left-hand side, and the action to take (usually the creation of syntax
-# tree nodes) on the right. As the parser runs, it
-# shifts tokens from our token stream, from left to right, and
-# [attempts to match](http://en.wikipedia.org/wiki/Bottom-up_parsing)
-# the token sequence against the rules below. When a match can be made, it
-# reduces into the [nonterminal](http://en.wikipedia.org/wiki/Terminal_and_nonterminal_symbols)
-# (the enclosing name at the top), and we proceed from there.
-#
-# If you run the `cake build:parser` command, Jison constructs a parse table
-# from our rules and saves it into `lib/parser.js`.
-
-# The only dependency is on the **Jison.Parser**.
-Parser = require('jison').Parser
-
-# Jison DSL
-# ---------
-
-# Since we're going to be wrapped in a function by Jison in any case, if our
-# action immediately returns a value, we can optimize by removing the function
-# wrapper and just returning the value directly.
-unwrap = /function\s*\(\)\s*\{\s*return\s*([\s\S]*);\s*\}/
-
-# Our handy DSL for Jison grammar generation, thanks to
-# [Tim Caswell](http://github.com/creationix). For every rule in the grammar,
-# we pass the pattern-defining string, the action to run, and extra options,
-# optionally. If no action is specified, we simply pass the value of the
-# previous nonterminal.
-o = (patternString, action, options) ->
-  return [patternString, '$$ = $1;', options] unless action
-  action = if match = (action + '').match(unwrap) then match[1] else "(#{action}())"
-  action = action.replace(/\bnew (\w+)\b/g, 'new yy.$1').replace(/Expressions\.wrap/g, 'yy.Expressions.wrap');
-  [patternString, "$$ = #{action};", options]
-
-# Grammatical Rules
-# -----------------
-
-# In all of the rules that follow, you'll see the name of the nonterminal as
-# the key to a list of alternative matches. With each match's action, the
-# dollar-sign variables are provided by Jison as references to the value of
-# their numeric position, so in this rule:
-#
-#     "Expression UNLESS Expression"
-#
-# `$1` would be the value of the first `Expression`, `$2` would be the token
-# for the `UNLESS` terminal, and `$3` would be the value of the second
-# `Expression`.
-grammar =
-
-  # The **Root** is the top-level node in the syntax tree. Since we parse bottom-up,
-  # all parsing must end here.
-  Root: [
-    o "",                                       -> new Expressions
-    o "TERMINATOR",                             -> new Expressions
-    o "Body"
-    o "Block TERMINATOR"
-  ]
-
-  # Any list of statements and expressions, seperated by line breaks or semicolons.
-  Body: [
-    o "Line",                                   -> Expressions.wrap [$1]
-    o "Body TERMINATOR Line",                   -> $1.push $3
-    o "Body TERMINATOR"
-  ]
-
-  # Expressions and statements, which make up a line in a body.
-  Line: [
-    o "Expression"
-    o "Statement"
-  ]
-
-  # Pure statements which cannot be expressions.
-  Statement: [
-    o "Return"
-    o "Throw"
-    o "BREAK",                                  -> new Literal $1
-    o "CONTINUE",                               -> new Literal $1
-    o "DEBUGGER",                               -> new Literal $1
-  ]
-
-  # All the different types of expressions in our language. The basic unit of
-  # CoffeeScript is the **Expression** -- everything that can be an expression
-  # is one. Expressions serve as the building blocks of many other rules, making
-  # them somewhat circular.
-  Expression: [
-    o "Value"
-    o "Invocation"
-    o "Code"
-    o "Operation"
-    o "Assign"
-    o "If"
-    o "Try"
-    o "While"
-    o "For"
-    o "Switch"
-    o "Extends"
-    o "Class"
-    o "Existence"
-    o "Comment"
-  ]
-
-  # An indented block of expressions. Note that the [Rewriter](rewriter.html)
-  # will convert some postfix forms into blocks for us, by adjusting the
-  # token stream.
-  Block: [
-    o "INDENT Body OUTDENT",                    -> $2
-    o "INDENT OUTDENT",                         -> new Expressions
-    o "TERMINATOR Comment",                     -> Expressions.wrap [$2]
-  ]
-
-  # A literal identifier, a variable name or property.
-  Identifier: [
-    o "IDENTIFIER",                             -> new Literal $1
-  ]
-
-  # Alphanumerics are separated from the other **Literal** matchers because
-  # they can also serve as keys in object literals.
-  AlphaNumeric: [
-    o "NUMBER",                                 -> new Literal $1
-    o "STRING",                                 -> new Literal $1
-  ]
-
-  # All of our immediate values. These can (in general), be passed straight
-  # through and printed to JavaScript.
-  Literal: [
-    o "AlphaNumeric"
-    o "JS",                                     -> new Literal $1
-    o "REGEX",                                  -> new Literal $1
-    o "BOOL",                                   -> new Literal $1
-  ]
-
-  # Assignment of a variable, property, or index to a value.
-  Assign: [
-    o "Assignable = Expression",                -> new Assign $1, $3
-    o "Assignable = INDENT Expression OUTDENT", -> new Assign $1, $4
-  ]
-
-  # Assignment when it happens within an object literal. The difference from
-  # the ordinary **Assign** is that these allow numbers and strings as keys.
-  AssignObj: [
-    o "Identifier",                             -> new Value $1
-    o "AlphaNumeric"
-    o "ThisProperty"
-    o "Identifier : Expression",                -> new Assign new Value($1), $3, 'object'
-    o "AlphaNumeric : Expression",              -> new Assign new Value($1), $3, 'object'
-    o "Identifier : INDENT Expression OUTDENT", -> new Assign new Value($1), $4, 'object'
-    o "AlphaNumeric : INDENT Expression OUTDENT", -> new Assign new Value($1), $4, 'object'
-    o "Comment"
-  ]
-
-  # A return statement from a function body.
-  Return: [
-    o "RETURN Expression",                      -> new Return $2
-    o "RETURN",                                 -> new Return
-  ]
-
-  # A block comment.
-  Comment: [
-    o "HERECOMMENT",                            -> new Comment $1
-  ]
-
-  # [The existential operator](http://jashkenas.github.com/coffee-script/#existence).
-  Existence: [
-    o "Expression ?",                           -> new Existence $1
-  ]
-
-  # The **Code** node is the function literal. It's defined by an indented block
-  # of **Expressions** preceded by a function arrow, with an optional parameter
-  # list.
-  Code: [
-    o "PARAM_START ParamList PARAM_END FuncGlyph Block", -> new Code $2, $5, $4
-    o "FuncGlyph Block",                        -> new Code [], $2, $1
-  ]
-
-  # CoffeeScript has two different symbols for functions. `->` is for ordinary
-  # functions, and `=>` is for functions bound to the current value of *this*.
-  FuncGlyph: [
-    o "->",                                     -> 'func'
-    o "=>",                                     -> 'boundfunc'
-  ]
-
-  # An optional, trailing comma.
-  OptComma: [
-    o ''
-    o ','
-  ]
-
-  # The list of parameters that a function accepts can be of any length.
-  ParamList: [
-    o "",                                       -> []
-    o "Param",                                  -> [$1]
-    o "ParamList , Param",                      -> $1.concat $3
-  ]
-
-  # A single parameter in a function definition can be ordinary, or a splat
-  # that hoovers up the remaining arguments.
-  Param: [
-    o "PARAM",                                  -> new Literal $1
-    o "@ PARAM",                                -> new Param $2, true
-    o "PARAM ...",                              -> new Param $1, false, true
-    o "@ PARAM ...",                            -> new Param $2, true, true
-  ]
-
-  # A splat that occurs outside of a parameter list.
-  Splat: [
-    o "Expression ...",                         -> new Splat $1
-  ]
-
-  # Variables and properties that can be assigned to.
-  SimpleAssignable: [
-    o "Identifier",                             -> new Value $1
-    o "Value Accessor",                         -> $1.push $2
-    o "Invocation Accessor",                    -> new Value $1, [$2]
-    o "ThisProperty"
-  ]
-
-  # Everything that can be assigned to.
-  Assignable: [
-    o "SimpleAssignable"
-    o "Array",                                  -> new Value $1
-    o "Object",                                 -> new Value $1
-  ]
-
-  # The types of things that can be treated as values -- assigned to, invoked
-  # as functions, indexed into, named as a class, etc.
-  Value: [
-    o "Assignable"
-    o "Literal",                                -> new Value $1
-    o "Parenthetical",                          -> new Value $1
-    o "Range",                                  -> new Value $1
-    o "This"
-  ]
-
-  # The general group of accessors into an object, by property, by prototype
-  # or by array index or slice.
-  Accessor: [
-    o "PROPERTY_ACCESS Identifier",             -> new Accessor $2
-    o "PROTOTYPE_ACCESS Identifier",            -> new Accessor $2, 'prototype'
-    o "::",                                     -> new Accessor(new Literal('prototype'))
-    o "SOAK_ACCESS Identifier",                 -> new Accessor $2, 'soak'
-    o "Index"
-    o "Slice",                                  -> new Slice $1
-  ]
-
-  # Indexing into an object or array using bracket notation.
-  Index: [
-    o "INDEX_START Expression INDEX_END",       -> new Index $2
-    o "INDEX_SOAK Index",                       -> $2.soakNode = yes; $2
-    o "INDEX_PROTO Index",                      -> $2.proto = yes; $2
-  ]
-
-  # In CoffeeScript, an object literal is simply a list of assignments.
-  Object: [
-    o "{ AssignList OptComma }",                -> new ObjectLiteral $2
-  ]
-
-  # Assignment of properties within an object literal can be separated by
-  # comma, as in JavaScript, or simply by newline.
-  AssignList: [
-    o "",                                       -> []
-    o "AssignObj",                              -> [$1]
-    o "AssignList , AssignObj",                 -> $1.concat $3
-    o "AssignList OptComma TERMINATOR AssignObj", -> $1.concat $4
-    o "AssignList OptComma INDENT AssignList OptComma OUTDENT", -> $1.concat $4
-  ]
-
-  # Class definitions have optional bodies of prototype property assignments,
-  # and optional references to the superclass.
-  Class: [
-    o "CLASS SimpleAssignable",                 -> new Class $2
-    o "CLASS SimpleAssignable EXTENDS Value",   -> new Class $2, $4
-    o "CLASS SimpleAssignable INDENT ClassBody OUTDENT", -> new Class $2, null, $4
-    o "CLASS SimpleAssignable EXTENDS Value INDENT ClassBody OUTDENT", -> new Class $2, $4, $6
-    o "CLASS INDENT ClassBody OUTDENT",         -> new Class '__temp__', null, $3
-    o "CLASS",                                  -> new Class '__temp__', null, new Expressions
-    o "CLASS EXTENDS Value",                    -> new Class '__temp__', $3, new Expressions
-    o "CLASS EXTENDS Value INDENT ClassBody OUTDENT", -> new Class '__temp__', $3, $5
-  ]
-
-  # Assignments that can happen directly inside a class declaration.
-  ClassAssign: [
-    o "AssignObj",                              -> $1
-    o "ThisProperty : Expression",              -> new Assign new Value($1), $3, 'this'
-    o "ThisProperty : INDENT Expression OUTDENT", -> new Assign new Value($1), $4, 'this'
-  ]
-
-  # A list of assignments to a class.
-  ClassBody: [
-    o "",                                       -> []
-    o "ClassAssign",                            -> [$1]
-    o "ClassBody TERMINATOR ClassAssign",       -> $1.concat $3
-    o "{ ClassBody }",                          -> $2
-  ]
-
-  # Extending an object by setting its prototype chain to reference a parent
-  # object.
-  Extends: [
-    o "SimpleAssignable EXTENDS Value",         -> new Extends $1, $3
-  ]
-
-  # Ordinary function invocation, or a chained series of calls.
-  Invocation: [
-    o "Value OptFuncExist Arguments",           -> new Call $1, $3, $2
-    o "Invocation OptFuncExist Arguments",      -> new Call $1, $3, $2
-    o "SUPER",                                  -> new Call 'super', [new Splat(new Literal('arguments'))]
-    o "SUPER Arguments",                        -> new Call 'super', $2
-  ]
-
-  # An optional existence check on a function.
-  OptFuncExist: [
-    o "",                                       -> no
-    o "FUNC_EXIST",                             -> yes
-  ]
-
-  # The list of arguments to a function call.
-  Arguments: [
-    o "CALL_START CALL_END",                    -> []
-    o "CALL_START ArgList OptComma CALL_END",   -> $2
-  ]
-
-  # A reference to the *this* current object.
-  This: [
-    o "THIS",                                   -> new Value new Literal 'this'
-    o "@",                                      -> new Value new Literal 'this'
-  ]
-
-  RangeDots: [
-    o "..",                                     -> 'inclusive'
-    o "...",                                    -> 'exclusive'
-  ]
-
-  # A reference to a property on *this*.
-  ThisProperty: [
-    o "@ Identifier",                           -> new Value new Literal('this'), [new Accessor($2)], 'this'
-  ]
-
-  # The CoffeeScript range literal.
-  Range: [
-    o "[ Expression RangeDots Expression ]",    -> new Range $2, $4, $3
-  ]
-
-  # The slice literal.
-  Slice: [
-    o "INDEX_START Expression RangeDots Expression INDEX_END", -> new Range $2, $4, $3
-    o "INDEX_START Expression RangeDots INDEX_END", -> new Range $2, null, $3
-    o "INDEX_START RangeDots Expression INDEX_END", -> new Range null, $3, $2
-  ]
-
-  # The array literal.
-  Array: [
-    o "[ ]",                                    -> new ArrayLiteral []
-    o "[ ArgList OptComma ]",                   -> new ArrayLiteral $2
-  ]
-
-  # The **ArgList** is both the list of objects passed into a function call,
-  # as well as the contents of an array literal
-  # (i.e. comma-separated expressions). Newlines work as well.
-  ArgList: [
-    o "Arg",                                    -> [$1]
-    o "ArgList , Arg",                          -> $1.concat $3
-    o "ArgList OptComma TERMINATOR Arg",        -> $1.concat $4
-    o "INDENT ArgList OptComma OUTDENT",        -> $2
-    o "ArgList OptComma INDENT ArgList OptComma OUTDENT", -> $1.concat $4
-  ]
-
-  # Valid arguments are Expressions or Splats.
-  Arg: [
-    o "Expression"
-    o "Splat"
-  ]
-
-  # Just simple, comma-separated, required arguments (no fancy syntax). We need
-  # this to be separate from the **ArgList** for use in **Switch** blocks, where
-  # having the newlines wouldn't make sense.
-  SimpleArgs: [
-    o "Expression"
-    o "SimpleArgs , Expression",                -> [].concat $1, $3
-  ]
-
-  # The variants of *try/catch/finally* exception handling blocks.
-  Try: [
-    o "TRY Block",                              -> new Try $2
-    o "TRY Block Catch",                        -> new Try $2, $3[0], $3[1]
-    o "TRY Block FINALLY Block",                -> new Try $2, null, null, $4
-    o "TRY Block Catch FINALLY Block",          -> new Try $2, $3[0], $3[1], $5
-  ]
-
-  # A catch clause names its error and runs a block of code.
-  Catch: [
-    o "CATCH Identifier Block",                 -> [$2, $3]
-  ]
-
-  # Throw an exception object.
-  Throw: [
-    o "THROW Expression",                       -> new Throw $2
-  ]
-
-  # Parenthetical expressions. Note that the **Parenthetical** is a **Value**,
-  # not an **Expression**, so if you need to use an expression in a place
-  # where only values are accepted, wrapping it in parentheses will always do
-  # the trick.
-  Parenthetical: [
-    o "( Expression )",                         -> new Parens $2
-    o "( )",                                    -> new Parens new Literal ''
-  ]
-
-  # The condition portion of a while loop.
-  WhileSource: [
-    o "WHILE Expression",                       -> new While $2
-    o "WHILE Expression WHEN Expression",       -> new While $2, guard: $4
-    o "UNTIL Expression",                       -> new While $2, invert: true
-    o "UNTIL Expression WHEN Expression",       -> new While $2, invert: true, guard: $4
-  ]
-
-  # The while loop can either be normal, with a block of expressions to execute,
-  # or postfix, with a single expression. There is no do..while.
-  While: [
-    o "WhileSource Block",                      -> $1.addBody $2
-    o "Statement WhileSource",                  -> $2.addBody Expressions.wrap [$1]
-    o "Expression WhileSource",                 -> $2.addBody Expressions.wrap [$1]
-    o "Loop",                                   -> $1
-  ]
-
-  Loop: [
-    o "LOOP Block",                             -> new While(new Literal 'true').addBody $2
-    o "LOOP Expression",                        -> new While(new Literal 'true').addBody Expressions.wrap [$2]
-  ]
-
-  # Array, object, and range comprehensions, at the most generic level.
-  # Comprehensions can either be normal, with a block of expressions to execute,
-  # or postfix, with a single expression.
-  For: [
-    o "Statement ForBody",                      -> new For $1, $2, $2.vars[0], $2.vars[1]
-    o "Expression ForBody",                     -> new For $1, $2, $2.vars[0], $2.vars[1]
-    o "ForBody Block",                          -> new For $2, $1, $1.vars[0], $1.vars[1]
-  ]
-
-  ForBody: [
-    o "FOR Range",                              -> source: new Value($2), vars: []
-    o "ForStart ForSource",                     -> $2.raw = $1.raw; $2.vars = $1; $2
-  ]
-
-  ForStart: [
-    o "FOR ForVariables",                       -> $2
-    o "FOR ALL ForVariables",                   -> $3.raw = true; $3
-  ]
-
-  # An array of all accepted values for a variable inside the loop. This
-  # enables support for pattern matching.
-  ForValue: [
-    o "Identifier"
-    o "Array",                                  -> new Value $1
-    o "Object",                                 -> new Value $1
-  ]
-
-  # An array or range comprehension has variables for the current element and
-  # (optional) reference to the current index. Or, *key, value*, in the case
-  # of object comprehensions.
-  ForVariables: [
-    o "ForValue",                               -> [$1]
-    o "ForValue , ForValue",                    -> [$1, $3]
-  ]
-
-  # The source of a comprehension is an array or object with an optional guard
-  # clause. If it's an array comprehension, you can also choose to step through
-  # in fixed-size increments.
-  ForSource: [
-    o "FORIN Expression",                               -> source: $2
-    o "FOROF Expression",                               -> source: $2, object: true
-    o "FORIN Expression WHEN Expression",               -> source: $2, guard: $4
-    o "FOROF Expression WHEN Expression",               -> source: $2, guard: $4, object: true
-    o "FORIN Expression BY Expression",                 -> source: $2, step:  $4
-    o "FORIN Expression WHEN Expression BY Expression", -> source: $2, guard: $4, step:   $6
-    o "FORIN Expression BY Expression WHEN Expression", -> source: $2, step:  $4, guard: $6
-  ]
-
-  Switch: [
-    o "SWITCH Expression INDENT Whens OUTDENT", -> new Switch $2, $4
-    o "SWITCH Expression INDENT Whens ELSE Block OUTDENT", -> new Switch $2, $4, $6
-    o "SWITCH INDENT Whens OUTDENT",            -> new Switch null, $3
-    o "SWITCH INDENT Whens ELSE Block OUTDENT", -> new Switch null, $3, $5
-  ]
-
-  Whens: [
-    o "When"
-    o "Whens When",                             -> $1.concat $2
-  ]
-
-  # An individual **When** clause, with action.
-  When: [
-    o "LEADING_WHEN SimpleArgs Block",            -> [[$2, $3]]
-    o "LEADING_WHEN SimpleArgs Block TERMINATOR", -> [[$2, $3]]
-  ]
-
-  # The most basic form of *if* is a condition and an action. The following
-  # if-related rules are broken up along these lines in order to avoid
-  # ambiguity.
-  IfBlock: [
-    o "IF Expression Block",                    -> new If $2, $3
-    o "UNLESS Expression Block",                -> new If $2, $3, invert: true
-    o "IfBlock ELSE IF Expression Block",       -> $1.addElse new If $4, $5
-    o "IfBlock ELSE Block",                     -> $1.addElse $3
-  ]
-
-  # The full complement of *if* expressions, including postfix one-liner
-  # *if* and *unless*.
-  If: [
-    o "IfBlock"
-    o "Statement POST_IF Expression",           -> new If $3, Expressions.wrap([$1]), statement: true
-    o "Expression POST_IF Expression",          -> new If $3, Expressions.wrap([$1]), statement: true
-    o "Statement POST_UNLESS Expression",       -> new If $3, Expressions.wrap([$1]), statement: true, invert: true
-    o "Expression POST_UNLESS Expression",      -> new If $3, Expressions.wrap([$1]), statement: true, invert: true
-  ]
-
-  # Arithmetic and logical operators, working on one or more operands.
-  # Here they are grouped by order of precedence. The actual precedence rules
-  # are defined at the bottom of the page. It would be shorter if we could
-  # combine most of these rules into a single generic *Operand OpSymbol Operand*
-  # -type rule, but in order to make the precedence binding possible, separate
-  # rules are necessary.
-  Operation: [
-    o "UNARY Expression",                       -> new Op $1, $2
-    o "- Expression",                          (-> new Op '-', $2), prec: 'UNARY'
-    o "+ Expression",                          (-> new Op '+', $2), prec: 'UNARY'
-
-    o "-- SimpleAssignable",                    -> new Op '--', $2
-    o "++ SimpleAssignable",                    -> new Op '++', $2
-    o "SimpleAssignable --",                    -> new Op '--', $1, null, true
-    o "SimpleAssignable ++",                    -> new Op '++', $1, null, true
-
-    o "Expression + Expression",                -> new Op '+', $1, $3
-    o "Expression - Expression",                -> new Op '-', $1, $3
-    o "Expression == Expression",               -> new Op '==', $1, $3
-    o "Expression != Expression",               -> new Op '!=', $1, $3
-
-    o "Expression MATH Expression",             -> new Op $2, $1, $3
-    o "Expression SHIFT Expression",            -> new Op $2, $1, $3
-    o "Expression COMPARE Expression",          -> new Op $2, $1, $3
-    o "Expression LOGIC Expression",            -> new Op $2, $1, $3
-    o "SimpleAssignable COMPOUND_ASSIGN Expression", -> new Op $2, $1, $3
-    o "SimpleAssignable COMPOUND_ASSIGN INDENT Expression OUTDENT", -> new Op $2, $1, $4
-
-    o "Expression RELATION Expression",         ->
-      if $2.charAt(0) is '!'
-        if $2 is '!in'
-          new Op '!', new In $1, $3
-        else
-          new Op '!', new Parens new Op $2.slice(1), $1, $3
-      else
-        if $2 is 'in' then new In $1, $3 else new Op $2, $1, $3
-  ]
-
-
-# Precedence
-# ----------
-
-# Operators at the top of this list have higher precedence than the ones lower
-# down. Following these rules is what makes `2 + 3 * 4` parse as:
-#
-#     2 + (3 * 4)
-#
-# And not:
-#
-#     (2 + 3) * 4
-operators = [
-  ["left",      'CALL_START', 'CALL_END']
-  ["nonassoc",  '++', '--']
-  ["left",      '?']
-  ["right",     'UNARY']
-  ["left",      'MATH']
-  ["left",      '+', '-']
-  ["left",      'SHIFT']
-  ["left",      'COMPARE']
-  ["left",      'RELATION']
-  ["left",      '==', '!=']
-  ["left",      'LOGIC']
-  ["right",     'COMPOUND_ASSIGN']
-  ["left",      '.']
-  ["nonassoc",  'INDENT', 'OUTDENT']
-  ["right",     'WHEN', 'LEADING_WHEN', 'FORIN', 'FOROF', 'BY', 'THROW']
-  ["right",     'IF', 'UNLESS', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS', 'EXTENDS']
-  ["right",     '=', ':', 'RETURN']
-  ["right",     '->', '=>', 'UNLESS', 'POST_IF', 'POST_UNLESS']
-]
-
-# Wrapping Up
-# -----------
-
-# Finally, now what we have our **grammar** and our **operators**, we can create
-# our **Jison.Parser**. We do this by processing all of our rules, recording all
-# terminals (every symbol which does not appear as the name of a rule above)
-# as "tokens".
-tokens = []
-for name, alternatives of grammar
-  grammar[name] = for alt in alternatives
-    for token in alt[0].split ' '
-      tokens.push token unless grammar[token]
-    alt[1] = "return #{alt[1]}" if name is 'Root'
-    alt
-
-# Initialize the **Parser** with our list of terminal **tokens**, our **grammar**
-# rules, and the name of the root. Reverse the operators because Jison orders
-# precedence from low to high, and we have it high to low
-# (as in [Yacc](http://dinosaur.compilertools.net/yacc/index.html)).
-exports.parser = new Parser
-  tokens:       tokens.join ' '
-  bnf:          grammar
-  operators:    operators.reverse()
-  startSymbol:  'Root'
diff --git a/node/node_modules/jade/support/coffee-script/src/helpers.coffee b/node/node_modules/jade/support/coffee-script/src/helpers.coffee
deleted file mode 100644 (file)
index 4d201de..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-# This file contains the common helper functions that we'd like to share among
-# the **Lexer**, **Rewriter**, and the **Nodes**. Merge objects, flatten
-# arrays, count characters, that sort of thing.
-
-# Cross-engine `indexOf`, so that JScript can join the party. Use SpiderMonkey's
-# functional-style `indexOf`, if it's available.
-indexOf = exports.indexOf = Array.indexOf or
-  if Array::indexOf
-    (array, item, from) -> array.indexOf item, from
-  else
-    (array, item, from) ->
-      for other, index in array
-        if other is item and (not from or from <= index)
-          return index
-      -1
-
-# Does a list include a value?
-exports.include = (list, value) ->
-  indexOf(list, value) >= 0
-
-# Peek at the beginning of a given string to see if it matches a sequence.
-exports.starts = (string, literal, start) ->
-  literal is string.substr start, literal.length
-
-# Peek at the end of a given string to see if it matches a sequence.
-exports.ends = (string, literal, back) ->
-  len = literal.length
-  literal is string.substr string.length - len - (back or 0), len
-
-# Trim out all falsy values from an array.
-exports.compact = (array) ->
-  item for item in array when item
-
-# Count the number of occurences of a character in a string.
-exports.count = (string, letter) ->
-  num = pos = 0
-  num++ while pos = 1 + string.indexOf letter, pos
-  num
-
-# Merge objects, returning a fresh copy with attributes from both sides.
-# Used every time `Base#compile` is called, to allow properties in the
-# options hash to propagate down the tree without polluting other branches.
-exports.merge = (options, overrides) ->
-  extend (extend {}, options), overrides
-
-# Extend a source object with the properties of another object (shallow copy).
-# We use this to simulate Node's deprecated `process.mixin`.
-extend = exports.extend = (object, properties) ->
-  for all key, val of properties
-    object[key] = val
-  object
-
-# Return a flattened version of an array.
-# Handy for getting a list of `children` from the nodes.
-exports.flatten = flatten = (array) ->
-  flattened = []
-  for element in array
-    if element instanceof Array
-      flattened = flattened.concat flatten element
-    else
-      flattened.push element
-  flattened
-
-# Delete a key from an object, returning the value. Useful when a node is
-# looking for a particular method in an options hash.
-exports.del = (obj, key) ->
-  val =  obj[key]
-  delete obj[key]
-  val
-
-# Gets the last item of an array(-like) object.
-exports.last = (array, back) -> array[array.length - (back or 0) - 1]
diff --git a/node/node_modules/jade/support/coffee-script/src/index.coffee b/node/node_modules/jade/support/coffee-script/src/index.coffee
deleted file mode 100644 (file)
index 220f4e2..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-# Loader for CoffeeScript as a Node.js library.
-(exports[key] = val) for key, val of require './coffee-script'
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/src/lexer.coffee b/node/node_modules/jade/support/coffee-script/src/lexer.coffee
deleted file mode 100644 (file)
index 0362eeb..0000000
+++ /dev/null
@@ -1,635 +0,0 @@
-# The CoffeeScript Lexer. Uses a series of token-matching regexes to attempt
-# matches against the beginning of the source code. When a match is found,
-# a token is produced, we consume the match, and start again. Tokens are in the
-# form:
-#
-#     [tag, value, lineNumber]
-#
-# Which is a format that can be fed directly into [Jison](http://github.com/zaach/jison).
-
-{Rewriter} = require './rewriter'
-
-# Import the helpers we need.
-{include, count, starts, compact, last} = require './helpers'
-
-# The Lexer Class
-# ---------------
-
-# The Lexer class reads a stream of CoffeeScript and divvys it up into tagged
-# tokens. Some potential ambiguity in the grammar has been avoided by
-# pushing some extra smarts into the Lexer.
-exports.Lexer = class Lexer
-
-  # **tokenize** is the Lexer's main method. Scan by attempting to match tokens
-  # one at a time, using a regular expression anchored at the start of the
-  # remaining code, or a custom recursive token-matching method
-  # (for interpolations). When the next token has been recorded, we move forward
-  # within the code past the token, and begin again.
-  #
-  # Each tokenizing method is responsible for incrementing `@i` by the number of
-  # characters it has consumed. `@i` can be thought of as our finger on the page
-  # of source.
-  #
-  # Before returning the token stream, run it through the [Rewriter](rewriter.html)
-  # unless explicitly asked not to.
-  tokenize: (code, options) ->
-    code     = code.replace(/\r/g, '').replace TRAILING_SPACES, ''
-    o        = options or {}
-    @code    = code         # The remainder of the source code.
-    @i       = 0            # Current character position we're parsing.
-    @line    = o.line or 0  # The current line.
-    @indent  = 0            # The current indentation level.
-    @indebt  = 0            # The over-indentation at the current level.
-    @outdebt = 0            # The under-outdentation at the current level.
-    @seenFor = no           # The flag for distinguishing FORIN/FOROF from IN/OF.
-    @indents = []           # The stack of all current indentation levels.
-    @tokens  = []           # Stream of parsed tokens in the form ['TYPE', value, line]
-    # At every position, run through this list of attempted matches,
-    # short-circuiting if any of them succeed. Their order determines precedence:
-    # `@literalToken` is the fallback catch-all.
-    while @chunk = code.slice @i
-      @identifierToken() or
-      @commentToken()    or
-      @whitespaceToken() or
-      @lineToken()       or
-      @heredocToken()    or
-      @stringToken()     or
-      @numberToken()     or
-      @regexToken()      or
-      @jsToken()         or
-      @literalToken()
-    @closeIndentation()
-    return @tokens if o.rewrite is off
-    (new Rewriter).rewrite @tokens
-
-  # Tokenizers
-  # ----------
-
-  # Matches identifying literals: variables, keywords, method names, etc.
-  # Check to ensure that JavaScript reserved words aren't being used as
-  # identifiers. Because CoffeeScript reserves a handful of keywords that are
-  # allowed in JavaScript, we're careful not to tag them as keywords when
-  # referenced as property names here, so you can still do `jQuery.is()` even
-  # though `is` means `===` otherwise.
-  identifierToken: ->
-    return false unless match = IDENTIFIER.exec @chunk
-    [input, id, colon] = match
-    @i += input.length
-    if id is 'all' and @tag() is 'FOR'
-      @token 'ALL', id
-      return true
-    forcedIdentifier = colon or @tagAccessor()
-    tag = 'IDENTIFIER'
-    if include(JS_KEYWORDS, id) or
-       not forcedIdentifier and include(COFFEE_KEYWORDS, id)
-      tag = id.toUpperCase()
-      if tag is 'WHEN' and include LINE_BREAK, @tag()
-        tag = 'LEADING_WHEN'
-      else if tag is 'FOR'
-        @seenFor = yes
-      else if include UNARY, tag
-        tag = 'UNARY'
-      else if include RELATION, tag
-        if tag isnt 'INSTANCEOF' and @seenFor
-          @seenFor = no
-          tag = 'FOR' + tag
-        else
-          tag = 'RELATION'
-          if @value() is '!'
-            @tokens.pop()
-            id = '!' + id
-    if include JS_FORBIDDEN, id
-      if forcedIdentifier
-        tag = 'IDENTIFIER'
-        id  = new String id
-        id.reserved = yes
-      else if include RESERVED, id
-        @identifierError id
-    unless forcedIdentifier
-      tag = id = COFFEE_ALIASES[id] if COFFEE_ALIASES.hasOwnProperty id
-      if id is '!'
-        tag = 'UNARY'
-      else if include LOGIC, id
-        tag = 'LOGIC'
-      else if include BOOL, tag
-        id  = tag.toLowerCase()
-        tag = 'BOOL'
-    @token tag, id
-    @token ':', ':' if colon
-    true
-
-  # Matches numbers, including decimals, hex, and exponential notation.
-  # Be careful not to interfere with ranges-in-progress.
-  numberToken: ->
-    return false unless match = NUMBER.exec @chunk
-    number = match[0]
-    return false if @tag() is '.' and number.charAt(0) is '.'
-    @i += number.length
-    @token 'NUMBER', number
-    true
-
-  # Matches strings, including multi-line strings. Ensures that quotation marks
-  # are balanced within the string's contents, and within nested interpolations.
-  stringToken: ->
-    switch @chunk.charAt 0
-      when "'"
-        return false unless match = SIMPLESTR.exec @chunk
-        @token 'STRING', (string = match[0]).replace MULTILINER, '\\\n'
-      when '"'
-        return false unless string = @balancedString @chunk, [['"', '"'], ['#{', '}']]
-        if 0 < string.indexOf '#{', 1
-          @interpolateString string.slice 1, -1
-        else
-          @token 'STRING', @escapeLines string
-      else
-        return false
-    @line += count string, '\n'
-    @i += string.length
-    true
-
-  # Matches heredocs, adjusting indentation to the correct level, as heredocs
-  # preserve whitespace, but ignore indentation to the left.
-  heredocToken: ->
-    return false unless match = HEREDOC.exec @chunk
-    heredoc = match[0]
-    quote = heredoc.charAt 0
-    doc = @sanitizeHeredoc match[2], {quote, indent: null}
-    if quote is '"' and 0 <= doc.indexOf '#{'
-      @interpolateString doc, heredoc: yes
-    else
-      @token 'STRING', @makeString doc, quote, yes
-    @line += count heredoc, '\n'
-    @i += heredoc.length
-    true
-
-  # Matches and consumes comments.
-  commentToken: ->
-    return false unless match = @chunk.match COMMENT
-    [comment, here] = match
-    @line += count comment, '\n'
-    @i += comment.length
-    if here
-      @token 'HERECOMMENT', @sanitizeHeredoc here,
-        herecomment: true, indent: Array(@indent + 1).join(' ')
-      @token 'TERMINATOR', '\n'
-    true
-
-  # Matches JavaScript interpolated directly into the source via backticks.
-  jsToken: ->
-    return false unless @chunk.charAt(0) is '`' and match = JSTOKEN.exec @chunk
-    @token 'JS', (script = match[0]).slice 1, -1
-    @i += script.length
-    true
-
-  # Matches regular expression literals. Lexing regular expressions is difficult
-  # to distinguish from division, so we borrow some basic heuristics from
-  # JavaScript and Ruby.
-  regexToken: ->
-    return false if @chunk.charAt(0) isnt '/'
-    return @heregexToken match if match = HEREGEX.exec @chunk
-    return false if include NOT_REGEX, @tag()
-    return false unless match = REGEX.exec @chunk
-    [regex] = match
-    @token 'REGEX', if regex is '//' then '/(?:)/' else regex
-    @i += regex.length
-    true
-
-  # Matches experimental, multiline and extended regular expression literals.
-  heregexToken: (match) ->
-    [heregex, body, flags] = match
-    @i += heregex.length
-    if 0 > body.indexOf '#{'
-      re = body.replace(HEREGEX_OMIT, '').replace(/\//g, '\\/')
-      @token 'REGEX', "/#{ re or '(?:)' }/#{flags}"
-      return true
-    @token 'IDENTIFIER', 'RegExp'
-    @tokens.push ['CALL_START', '(']
-    tokens = []
-    for [tag, value] in @interpolateString(body, regex: yes)
-      if tag is 'TOKENS'
-        tokens.push value...
-      else
-        continue unless value = value.replace HEREGEX_OMIT, ''
-        value = value.replace /\\/g, '\\\\'
-        tokens.push ['STRING', @makeString(value, '"', yes)]
-      tokens.push ['+', '+']
-    tokens.pop()
-    @tokens.push ['STRING', '""'], ['+', '+'] unless tokens[0]?[0] is 'STRING'
-    @tokens.push tokens...
-    @tokens.push [',', ','], ['STRING', '"' + flags + '"'] if flags
-    @token ')', ')'
-    true
-
-  # Matches newlines, indents, and outdents, and determines which is which.
-  # If we can detect that the current line is continued onto the the next line,
-  # then the newline is suppressed:
-  #
-  #     elements
-  #       .each( ... )
-  #       .map( ... )
-  #
-  # Keeps track of the level of indentation, because a single outdent token
-  # can close multiple indents, so we need to know how far in we happen to be.
-  lineToken: ->
-    return false unless match = MULTI_DENT.exec @chunk
-    indent = match[0]
-    @line += count indent, '\n'
-    @i    += indent.length
-    prev = last @tokens, 1
-    size = indent.length - 1 - indent.lastIndexOf '\n'
-    nextCharacter = NEXT_CHARACTER.exec(@chunk)[1]
-    noNewlines    = (nextCharacter in ['.', ','] and not NEXT_ELLIPSIS.test(@chunk)) or @unfinished()
-    if size - @indebt is @indent
-      return @suppressNewlines() if noNewlines
-      return @newlineToken indent
-    else if size > @indent
-      if noNewlines
-        @indebt = size - @indent
-        return @suppressNewlines()
-      diff = size - @indent + @outdebt
-      @token 'INDENT', diff
-      @indents.push diff
-      @outdebt = @indebt = 0
-    else
-      @indebt = 0
-      @outdentToken @indent - size, noNewlines
-    @indent = size
-    true
-
-  # Record an outdent token or multiple tokens, if we happen to be moving back
-  # inwards past several recorded indents.
-  outdentToken: (moveOut, noNewlines, close) ->
-    while moveOut > 0
-      len = @indents.length - 1
-      if @indents[len] is undefined
-        moveOut = 0
-      else if @indents[len] is @outdebt
-        moveOut -= @outdebt
-        @outdebt = 0
-      else if @indents[len] < @outdebt
-        @outdebt -= @indents[len]
-        moveOut  -= @indents[len]
-      else
-        dent = @indents.pop() - @outdebt
-        moveOut -= dent
-        @outdebt = 0
-        @token 'OUTDENT', dent
-    @outdebt -= moveOut if dent
-    @token 'TERMINATOR', '\n' unless @tag() is 'TERMINATOR' or noNewlines
-    true
-
-  # Matches and consumes non-meaningful whitespace. Tag the previous token
-  # as being "spaced", because there are some cases where it makes a difference.
-  whitespaceToken: ->
-    return false unless match = WHITESPACE.exec @chunk
-    prev = last @tokens
-    prev.spaced = true if prev
-    @i += match[0].length
-    true
-
-  # Generate a newline token. Consecutive newlines get merged together.
-  newlineToken: (newlines) ->
-    @token 'TERMINATOR', '\n' unless @tag() is 'TERMINATOR'
-    true
-
-  # Use a `\` at a line-ending to suppress the newline.
-  # The slash is removed here once its job is done.
-  suppressNewlines: ->
-    @tokens.pop() if @value() is '\\'
-    true
-
-  # We treat all other single characters as a token. Eg.: `( ) , . !`
-  # Multi-character operators are also literal tokens, so that Jison can assign
-  # the proper order of operations. There are some symbols that we tag specially
-  # here. `;` and newlines are both treated as a `TERMINATOR`, we distinguish
-  # parentheses that indicate a method call from regular parentheses, and so on.
-  literalToken: ->
-    if match = OPERATOR.exec @chunk
-      [value] = match
-      @tagParameters() if CODE.test value
-    else
-      value = @chunk.charAt 0
-    @i += value.length
-    tag = value
-    prev = last @tokens
-    if value is '=' and prev
-      @assignmentError() if not prev[1].reserved and include JS_FORBIDDEN, prev[1]
-      if prev[1] in ['||', '&&']
-        prev[0] = 'COMPOUND_ASSIGN'
-        prev[1] += '='
-        return true
-    if ';' is                        value then tag = 'TERMINATOR'
-    else if include LOGIC          , value then tag = 'LOGIC'
-    else if include MATH           , value then tag = 'MATH'
-    else if include COMPARE        , value then tag = 'COMPARE'
-    else if include COMPOUND_ASSIGN, value then tag = 'COMPOUND_ASSIGN'
-    else if include UNARY          , value then tag = 'UNARY'
-    else if include SHIFT          , value then tag = 'SHIFT'
-    else if value is '?' and prev?.spaced  then tag = 'LOGIC'
-    else if prev and not prev.spaced
-      if value is '(' and include CALLABLE, prev[0]
-        prev[0] = 'FUNC_EXIST' if prev[0] is '?'
-        tag = 'CALL_START'
-      else if value is '[' and include INDEXABLE, prev[0]
-        tag = 'INDEX_START'
-        switch prev[0]
-          when '?'  then prev[0] = 'INDEX_SOAK'
-          when '::' then prev[0] = 'INDEX_PROTO'
-    @token tag, value
-    true
-
-  # Token Manipulators
-  # ------------------
-
-  # As we consume a new `IDENTIFIER`, look at the previous token to determine
-  # if it's a special kind of accessor. Return `true` if any type of accessor
-  # is the previous token.
-  tagAccessor: ->
-    return false if not (prev = last @tokens) or prev.spaced
-    if prev[1] is '::'
-      @tag 0, 'PROTOTYPE_ACCESS'
-    else if prev[1] is '.' and @value(1) isnt '.'
-      if @tag(1) is '?'
-        @tag 0, 'SOAK_ACCESS'
-        @tokens.splice(-2, 1)
-      else
-        @tag 0, 'PROPERTY_ACCESS'
-    else
-      return prev[0] is '@'
-    true
-
-  # Sanitize a heredoc or herecomment by
-  # erasing all external indentation on the left-hand side.
-  sanitizeHeredoc: (doc, options) ->
-    {indent, herecomment} = options
-    return doc if herecomment and 0 > doc.indexOf '\n'
-    unless herecomment
-      while match = HEREDOC_INDENT.exec doc
-        attempt = match[1]
-        indent = attempt if indent is null or 0 < attempt.length < indent.length
-    doc = doc.replace /// \n #{indent} ///g, '\n' if indent
-    doc = doc.replace /^\n/, '' unless herecomment
-    doc
-
-  # A source of ambiguity in our grammar used to be parameter lists in function
-  # definitions versus argument lists in function calls. Walk backwards, tagging
-  # parameters specially in order to make things easier for the parser.
-  tagParameters: ->
-    return if @tag() isnt ')'
-    i = @tokens.length
-    while tok = @tokens[--i]
-      switch tok[0]
-        when 'IDENTIFIER'       then tok[0] = 'PARAM'
-        when ')'                then tok[0] = 'PARAM_END'
-        when '(', 'CALL_START'  then tok[0] = 'PARAM_START'; return true
-    true
-
-  # Close up all remaining open blocks at the end of the file.
-  closeIndentation: ->
-    @outdentToken @indent
-
-  # The error for when you try to use a forbidden word in JavaScript as
-  # an identifier.
-  identifierError: (word) ->
-    throw SyntaxError "Reserved word \"#{word}\" on line #{@line + 1}"
-
-  # The error for when you try to assign to a reserved word in JavaScript,
-  # like "function" or "default".
-  assignmentError: ->
-    throw SyntaxError "Reserved word \"#{@value()}\" on line #{@line + 1} can't be assigned"
-
-  # Matches a balanced group such as a single or double-quoted string. Pass in
-  # a series of delimiters, all of which must be nested correctly within the
-  # contents of the string. This method allows us to have strings within
-  # interpolations within strings, ad infinitum.
-  balancedString: (str, delimited, options) ->
-    options or= {}
-    levels = []
-    i = 0
-    slen = str.length
-    while i < slen
-      if levels.length and str.charAt(i) is '\\'
-        i += 1
-      else
-        for pair in delimited
-          [open, close] = pair
-          if levels.length and starts(str, close, i) and last(levels) is pair
-            levels.pop()
-            i += close.length - 1
-            i += 1 unless levels.length
-            break
-          if starts str, open, i
-            levels.push(pair)
-            i += open.length - 1
-            break
-      break if not levels.length
-      i += 1
-    if levels.length
-      throw SyntaxError "Unterminated #{levels.pop()[0]} starting on line #{@line + 1}"
-    if not i then false else str[0...i]
-
-  # Expand variables and expressions inside double-quoted strings using
-  # Ruby-like notation for substitution of arbitrary expressions.
-  #
-  #     "Hello #{name.capitalize()}."
-  #
-  # If it encounters an interpolation, this method will recursively create a
-  # new Lexer, tokenize the interpolated contents, and merge them into the
-  # token stream.
-  interpolateString: (str, options) ->
-    {heredoc, regex} = options or= {}
-    tokens = []
-    pi = 0
-    i  = -1
-    while letter = str.charAt i += 1
-      if letter is '\\'
-        i += 1
-        continue
-      unless letter is '#' and str.charAt(i+1) is '{' and
-             (expr = @balancedString str.slice(i+1), [['{', '}']])
-        continue
-      tokens.push ['TO_BE_STRING', str.slice(pi, i)] if pi < i
-      inner = expr.slice(1, -1).replace(LEADING_SPACES, '').replace(TRAILING_SPACES, '')
-      if inner.length
-        nested = new Lexer().tokenize inner, line: @line, rewrite: off
-        nested.pop()
-        if nested.length > 1
-          nested.unshift ['(', '(']
-          nested.push    [')', ')']
-        tokens.push ['TOKENS', nested]
-      i += expr.length
-      pi = i + 1
-    tokens.push ['TO_BE_STRING', str.slice pi] if i > pi < str.length
-    return tokens if regex
-    return @token 'STRING', '""' unless tokens.length
-    tokens.unshift ['', ''] unless tokens[0][0] is 'TO_BE_STRING'
-    @token '(', '(' if interpolated = tokens.length > 1
-    for [tag, value], i in tokens
-      @token '+', '+' if i
-      if tag is 'TOKENS'
-        @tokens.push value...
-      else
-        @token 'STRING', @makeString value, '"', heredoc
-    @token ')', ')' if interpolated
-    tokens
-
-  # Helpers
-  # -------
-
-  # Add a token to the results, taking note of the line number.
-  token: (tag, value) ->
-    @tokens.push [tag, value, @line]
-
-  # Peek at a tag/value in the current token stream.
-  tag  : (index, tag) ->
-    (tok = last @tokens, index) and if tag? then tok[0] = tag else tok[0]
-  value: (index, val) ->
-    (tok = last @tokens, index) and if val? then tok[1] = val else tok[1]
-
-  # Are we in the midst of an unfinished expression?
-  unfinished: ->
-    (prev  = last @tokens, 1) and prev[0] isnt '.' and
-      (value = @value()) and not value.reserved and
-      NO_NEWLINE.test(value) and not CODE.test(value) and not ASSIGNED.test(@chunk)
-
-  # Converts newlines for string literals.
-  escapeLines: (str, heredoc) ->
-    str.replace MULTILINER, if heredoc then '\\n' else ''
-
-  # Constructs a string token by escaping quotes and newlines.
-  makeString: (body, quote, heredoc) ->
-    return quote + quote unless body
-    body = body.replace /\\([\s\S])/g, (match, contents) ->
-      if contents in ['\n', quote] then contents else match
-    body = body.replace /// #{quote} ///g, '\\$&'
-    quote + @escapeLines(body, heredoc) + quote
-
-# Constants
-# ---------
-
-# Keywords that CoffeeScript shares in common with JavaScript.
-JS_KEYWORDS = [
-  'true', 'false', 'null', 'this'
-  'new', 'delete', 'typeof', 'in', 'instanceof'
-  'return', 'throw', 'break', 'continue', 'debugger'
-  'if', 'else', 'switch', 'for', 'while', 'try', 'catch', 'finally'
-  'class', 'extends', 'super'
-]
-
-# CoffeeScript-only keywords.
-COFFEE_KEYWORDS = ['then', 'unless', 'until', 'loop', 'of', 'by', 'when']
-COFFEE_KEYWORDS.push op for all op of COFFEE_ALIASES =
-  and  : '&&'
-  or   : '||'
-  is   : '=='
-  isnt : '!='
-  not  : '!'
-  yes  : 'TRUE'
-  no   : 'FALSE'
-  on   : 'TRUE'
-  off  : 'FALSE'
-
-# The list of keywords that are reserved by JavaScript, but not used, or are
-# used by CoffeeScript internally. We throw an error when these are encountered,
-# to avoid having a JavaScript error at runtime.
-RESERVED = [
-  'case', 'default', 'do', 'function', 'var', 'void', 'with'
-  'const', 'let', 'enum', 'export', 'import', 'native'
-  '__hasProp', '__extends', '__slice'
-]
-
-# The superset of both JavaScript keywords and reserved words, none of which may
-# be used as identifiers or properties.
-JS_FORBIDDEN = JS_KEYWORDS.concat RESERVED
-
-# Token matching regexes.
-IDENTIFIER = /// ^
-  ( [$A-Za-z_][$\w]* )
-  ( [^\n\S]* : (?!:) )?  # Is this a property name?
-///
-NUMBER     = /^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?/i
-HEREDOC    = /^("""|''')([\s\S]*?)(?:\n[ \t]*)?\1/
-OPERATOR   = /// ^ (?: -[-=>]? | \+[+=]? | \.\.\.? | [*&|/%=<>^:!?]+ ) ///
-WHITESPACE = /^[ \t]+/
-COMMENT    = /^###([^#][\s\S]*?)(?:###[ \t]*\n|(?:###)?$)|^(?:\s*#(?!##[^#]).*)+/
-CODE       = /^[-=]>/
-MULTI_DENT = /^(?:\n[ \t]*)+/
-SIMPLESTR  = /^'[^\\']*(?:\\.[^\\']*)*'/
-JSTOKEN    = /^`[^\\`]*(?:\\.[^\\`]*)*`/
-
-# Regex-matching-regexes.
-REGEX = /// ^
-  / (?! \s )       # disallow leading whitespace
-  [^ [ / \n \\ ]*  # every other thing
-  (?:
-    (?: \\[\s\S]   # anything escaped
-      | \[         # character class
-           [^ \] \n \\ ]*
-           (?: \\[\s\S] [^ \] \n \\ ]* )*
-         ]
-    ) [^ [ / \n \\ ]*
-  )*
-  / [imgy]{0,4} (?![A-Za-z])
-///
-HEREGEX      = /^\/{3}([\s\S]+?)\/{3}([imgy]{0,4})(?![A-Za-z])/
-HEREGEX_OMIT = /\s+(?:#.*)?/g
-
-# Token cleaning regexes.
-MULTILINER      = /\n/g
-HEREDOC_INDENT  = /\n+([ \t]*)/g
-ASSIGNED        = /^\s*@?[$A-Za-z_][$\w]*[ \t]*?[:=][^:=>]/
-NEXT_CHARACTER  = /^\s*(\S?)/
-NEXT_ELLIPSIS   = /^\s*\.\.\.?/
-LEADING_SPACES  = /^\s+/
-TRAILING_SPACES = /\s+$/
-NO_NEWLINE      = /// ^
-  (?:                                   # non-capturing...
-    [-+*&|/%=<>!.\\][<>=&|]* |          # symbol operators
-    and | or | is(?:nt)? | n(?:ot|ew) | # word operators
-    delete | typeof | instanceof
-  )$
-///
-
-
-# Compound assignment tokens.
-COMPOUND_ASSIGN = ['-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|=']
-
-# Unary tokens.
-UNARY   = ['UMINUS', 'UPLUS', '!', '!!', '~', 'NEW', 'TYPEOF', 'DELETE']
-
-# Logical tokens.
-LOGIC   = ['&', '|', '^', '&&', '||']
-
-# Bit-shifting tokens.
-SHIFT   = ['<<', '>>', '>>>']
-
-# Comparison tokens.
-COMPARE = ['<=', '<', '>', '>=']
-
-# Mathmatical tokens.
-MATH    = ['*', '/', '%']
-
-# Relational tokens that are negatable with `not` prefix.
-RELATION = ['IN', 'OF', 'INSTANCEOF']
-
-# Boolean tokens.
-BOOL = ['TRUE', 'FALSE', 'NULL']
-
-# Tokens which a regular expression will never immediately follow, but which
-# a division operator might.
-#
-# See: http://www.mozilla.org/js/language/js20-2002-04/rationale/syntax.html#regular-expressions
-#
-# Our list is shorter, due to sans-parentheses method calls.
-NOT_REGEX = ['NUMBER', 'REGEX', 'BOOL', '++', '--', ']']
-
-# Tokens which could legitimately be invoked or indexed. A opening
-# parentheses or bracket following these tokens will be recorded as the start
-# of a function invocation or indexing operation.
-CALLABLE  = ['IDENTIFIER', 'STRING', 'REGEX', ')', ']', '}', '?', '::', '@', 'THIS', 'SUPER']
-INDEXABLE = CALLABLE.concat 'NUMBER', 'BOOL'
-
-# Tokens that, when immediately preceding a `WHEN`, indicate that the `WHEN`
-# occurs at the start of a line. We disambiguate these from trailing whens to
-# avoid an ambiguity in the grammar.
-LINE_BREAK = ['INDENT', 'OUTDENT', 'TERMINATOR']
diff --git a/node/node_modules/jade/support/coffee-script/src/nodes.coffee b/node/node_modules/jade/support/coffee-script/src/nodes.coffee
deleted file mode 100644 (file)
index 99e372a..0000000
+++ /dev/null
@@ -1,1710 +0,0 @@
-# `nodes.coffee` contains all of the node classes for the syntax tree. Most
-# nodes are created as the result of actions in the [grammar](grammar.html),
-# but some are created by other nodes as a method of code generation. To convert
-# the syntax tree into a string of JavaScript code, call `compile()` on the root.
-
-{Scope} = require './scope'
-
-# Import the helpers we plan to use.
-{compact, flatten, merge, del, include, starts, ends, last} = require './helpers'
-
-# Constant functions for nodes that don't need customization.
-YES  = -> yes
-NO   = -> no
-THIS = -> this
-
-#### Base
-
-# The **Base** is the abstract base class for all nodes in the syntax tree.
-# Each subclass implements the `compileNode` method, which performs the
-# code generation for that node. To compile a node to JavaScript,
-# call `compile` on it, which wraps `compileNode` in some generic extra smarts,
-# to know when the generated code needs to be wrapped up in a closure.
-# An options hash is passed and cloned throughout, containing information about
-# the environment from higher in the tree (such as if a returned value is
-# being requested by the surrounding function), information about the current
-# scope, and indentation level.
-exports.Base = class Base
-
-  constructor: ->
-    @tags = {}
-
-  # Common logic for determining whether to wrap this node in a closure before
-  # compiling it, or to compile directly. We need to wrap if this node is a
-  # *statement*, and it's not a *pureStatement*, and we're not at
-  # the top level of a block (which would be unnecessary), and we haven't
-  # already been asked to return the result (because statements know how to
-  # return results).
-  #
-  # If a Node is *topSensitive*, that means that it needs to compile differently
-  # depending on whether it's being used as part of a larger expression, or is a
-  # top-level statement within the function body.
-  compile: (o) ->
-    @options = if o then merge o else {}
-    @tab     = o.indent
-    top     = if @topSensitive() then @options.top else del @options, 'top'
-    closure = @isStatement(o) and not @isPureStatement() and not top and
-              not @options.asStatement and this not instanceof Comment
-    code = if closure then @compileClosure(@options) else @compileNode(@options)
-    code
-
-  # Statements converted into expressions via closure-wrapping share a scope
-  # object with their parent closure, to preserve the expected lexical scope.
-  compileClosure: (o) ->
-    o.sharedScope = o.scope
-    throw new Error 'cannot include a pure statement in an expression.' if @containsPureStatement()
-    Closure.wrap(this).compile o
-
-  # If the code generation wishes to use the result of a complex expression
-  # in multiple places, ensure that the expression is only ever evaluated once,
-  # by assigning it to a temporary variable.
-  compileReference: (o, options) ->
-    pair = unless @isComplex()
-      [this, this]
-    else
-      reference = new Literal o.scope.freeVariable 'ref'
-      compiled  = new Assign reference, this
-      [compiled, reference]
-    (pair[i] = node.compile o) for node, i in pair if options?.precompile
-    pair
-
-  # Convenience method to grab the current indentation level, plus tabbing in.
-  idt: (tabs) ->
-    idt = @tab or ''
-    num = (tabs or 0) + 1
-    idt += TAB while num -= 1
-    idt
-
-  # Construct a node that returns the current node's result.
-  # Note that this is overridden for smarter behavior for
-  # many statement nodes (eg If, For)...
-  makeReturn: ->
-    new Return this
-
-  # Does this node, or any of its children, contain a node of a certain kind?
-  # Recursively traverses down the *children* of the nodes, yielding to a block
-  # and returning true when the block finds a match. `contains` does not cross
-  # scope boundaries.
-  contains: (block) ->
-    contains = false
-    @traverseChildren false, (node) ->
-      if block(node)
-        contains = true
-        return false
-    contains
-
-  # Is this node of a certain type, or does it contain the type?
-  containsType: (type) ->
-    this instanceof type or @contains (node) -> node instanceof type
-
-  # Convenience for the most common use of contains. Does the node contain
-  # a pure statement?
-  containsPureStatement: ->
-    @isPureStatement() or @contains (node) -> node.isPureStatement()
-
-  # Perform an in-order traversal of the AST. Crosses scope boundaries.
-  traverse: (block) -> @traverseChildren true, block
-
-  # `toString` representation of the node, for inspecting the parse tree.
-  # This is what `coffee --nodes` prints out.
-  toString: (idt, override) ->
-    idt or= ''
-    children = (child.toString idt + TAB for child in @collectChildren()).join('')
-    klass = override or @constructor.name + if @soakNode then '?' else ''
-    '\n' + idt + klass + children
-
-  eachChild: (func) ->
-    return unless @children
-    for attr in @children when this[attr]
-      for child in flatten [this[attr]]
-        return if func(child) is false
-
-  collectChildren: ->
-    nodes = []
-    @eachChild (node) -> nodes.push node
-    nodes
-
-  traverseChildren: (crossScope, func) ->
-    @eachChild (child) ->
-      return false if func(child) is false
-      if crossScope or child not instanceof Code
-        child.traverseChildren crossScope, func
-
-  invert: -> new Op '!', this
-
-  # Default implementations of the common node properties and methods. Nodes
-  # will override these with custom logic, if needed.
-  children: []
-
-  unwrap          : THIS
-  isStatement     : NO
-  isPureStatement : NO
-  isComplex       : YES
-  topSensitive    : NO
-  unfoldSoak      : NO
-
-  # Is this node used to assign a certain variable?
-  assigns: NO
-
-#### Expressions
-
-# The expressions body is the list of expressions that forms the body of an
-# indented block of code -- the implementation of a function, a clause in an
-# `if`, `switch`, or `try`, and so on...
-exports.Expressions = class Expressions extends Base
-
-  children:     ['expressions']
-  isStatement:  YES
-
-  constructor: (nodes) ->
-    super()
-    @expressions = compact flatten nodes or []
-
-  # Tack an expression on to the end of this expression list.
-  push: (node) ->
-    @expressions.push(node)
-    this
-
-  # Add an expression at the beginning of this expression list.
-  unshift: (node) ->
-    @expressions.unshift(node)
-    this
-
-  # If this Expressions consists of just a single node, unwrap it by pulling
-  # it back out.
-  unwrap: ->
-    if @expressions.length is 1 then @expressions[0] else this
-
-  # Is this an empty block of code?
-  empty: ->
-    @expressions.length is 0
-
-  # An Expressions node does not return its entire body, rather it
-  # ensures that the final expression is returned.
-  makeReturn: ->
-    end = @expressions[idx = @expressions.length - 1]
-    end = @expressions[idx -= 1] if end instanceof Comment
-    if end and end not instanceof Return
-      @expressions[idx] = end.makeReturn()
-    this
-
-  # An **Expressions** is the only node that can serve as the root.
-  compile: (o) ->
-    o or= {}
-    if o.scope then super(o) else @compileRoot(o)
-
-  compileNode: (o) ->
-    (@compileExpression node, merge o for node in @expressions).join '\n'
-
-  # If we happen to be the top-level **Expressions**, wrap everything in
-  # a safety closure, unless requested not to.
-  # It would be better not to generate them in the first place, but for now,
-  # clean up obvious double-parentheses.
-  compileRoot: (o) ->
-    o.indent = @tab = if o.bare then '' else TAB
-    o.scope  = new Scope null, this, null
-    code     = @compileWithDeclarations o
-    code     = code.replace TRAILING_WHITESPACE, ''
-    if o.bare then code else "(function() {\n#{code}\n}).call(this);\n"
-
-  # Compile the expressions body for the contents of a function, with
-  # declarations of all inner variables pushed up to the top.
-  compileWithDeclarations: (o) ->
-    code = @compileNode(o)
-    if o.scope.hasAssignments this
-      code = "#{@tab}var #{ o.scope.compiledAssignments().replace /\n/g, '$&' + @tab };\n#{code}"
-    if not o.globals and o.scope.hasDeclarations this
-      code = "#{@tab}var #{o.scope.compiledDeclarations()};\n#{code}"
-    code
-
-  # Compiles a single expression within the expressions body. If we need to
-  # return the result, and it's an expression, simply return it. If it's a
-  # statement, ask the statement to do so.
-  compileExpression: (node, o) ->
-    @tab = o.indent
-    node.tags.front = true
-    compiledNode = node.compile merge o, top: true
-    if node.isStatement(o) then compiledNode else "#{@idt()}#{compiledNode};"
-
-# Wrap up the given nodes as an **Expressions**, unless it already happens
-# to be one.
-Expressions.wrap = (nodes) ->
-  return nodes[0] if nodes.length is 1 and nodes[0] instanceof Expressions
-  new Expressions(nodes)
-
-#### Literal
-
-# Literals are static values that can be passed through directly into
-# JavaScript without translation, such as: strings, numbers,
-# `true`, `false`, `null`...
-exports.Literal = class Literal extends Base
-
-  constructor: (@value) ->
-    super()
-
-  makeReturn: ->
-    if @isStatement() then this else super()
-
-  # Break and continue must be treated as pure statements -- they lose their
-  # meaning when wrapped in a closure.
-  isStatement: ->
-    @value in ['break', 'continue', 'debugger']
-  isPureStatement: Literal::isStatement
-
-  isComplex: NO
-
-  isReserved: ->
-    !!@value.reserved
-
-  assigns: (name) -> name is @value
-
-  compileNode: (o) ->
-    idt = if @isStatement(o) then @idt() else ''
-    end = if @isStatement(o) then ';' else ''
-    val = if @isReserved()   then "\"#{@value}\"" else @value
-    idt + val + end
-
-  toString: -> ' "' + @value + '"'
-
-#### Return
-
-# A `return` is a *pureStatement* -- wrapping it in a closure wouldn't
-# make sense.
-exports.Return = class Return extends Base
-
-  isStatement:      YES
-  isPureStatement:  YES
-  children:         ['expression']
-
-  constructor: (@expression) ->
-    super()
-
-  makeReturn: THIS
-
-  compile: (o) ->
-    expr = @expression?.makeReturn()
-    return expr.compile o if expr and (expr not instanceof Return)
-    super o
-
-  compileNode: (o) ->
-    expr = ''
-    if @expression
-      o.asStatement = true if @expression.isStatement(o)
-      expr = ' ' + @expression.compile(o)
-    "#{@tab}return#{expr};"
-
-#### Value
-
-# A value, variable or literal or parenthesized, indexed or dotted into,
-# or vanilla.
-exports.Value = class Value extends Base
-
-  children: ['base', 'properties']
-
-  # A **Value** has a base and a list of property accesses.
-  constructor: (@base, @properties, tag) ->
-    super()
-    @properties or= []
-    @tags[tag] = yes if tag
-
-  # Add a property access to the list.
-  push: (prop) ->
-    @properties.push(prop)
-    this
-
-  hasProperties: ->
-    !!@properties.length
-
-  # Some boolean checks for the benefit of other nodes.
-
-  isArray: ->
-    @base instanceof ArrayLiteral and not @properties.length
-
-  isObject: ->
-    @base instanceof ObjectLiteral and not @properties.length
-
-  isSplice: ->
-    last(@properties) instanceof Slice
-
-  isComplex: ->
-    @base.isComplex() or @hasProperties()
-
-  assigns: (name) ->
-    not @properties.length and @base.assigns name
-
-  makeReturn: ->
-    if @properties.length then super() else @base.makeReturn()
-
-
-  # The value can be unwrapped as its inner node, if there are no attached
-  # properties.
-  unwrap: ->
-    if @properties.length then this else @base
-
-  # Values are considered to be statements if their base is a statement.
-  isStatement: (o) ->
-    @base.isStatement(o) and not @properties.length
-
-  isSimpleNumber: ->
-    @base instanceof Literal and SIMPLENUM.test @base.value
-
-  # A reference has base part (`this` value) and name part.
-  # We cache them separately for compiling complex expressions.
-  # `a()[b()] ?= c` -> `(_base = a())[_name = b()] ? _base[_name] = c`
-  cacheReference: (o) ->
-    name = last @properties
-    if not @base.isComplex() and @properties.length < 2 and
-       not name?.isComplex()
-      return [this, this]  # `a` `a.b`
-    base = new Value @base, @properties.slice 0, -1
-    if base.isComplex()  # `a().b`
-      bref = new Literal o.scope.freeVariable 'base'
-      base = new Value new Parens new Assign bref, base
-    return [base, bref] unless name  # `a()`
-    if name.isComplex()  # `a[b()]`
-      nref = new Literal o.scope.freeVariable 'name'
-      name = new Index new Assign nref, name.index
-      nref = new Index nref
-    [base.push(name), new Value(bref or base.base, [nref or name])]
-
-  # Override compile to unwrap the value when possible.
-  compile: (o) ->
-    @base.tags.front = @tags.front
-    if not o.top or @properties.length then super(o) else @base.compile(o)
-
-  # We compile a value to JavaScript by compiling and joining each property.
-  # Things get much more insteresting if the chain of properties has *soak*
-  # operators `?.` interspersed. Then we have to take care not to accidentally
-  # evaluate a anything twice when building the soak chain.
-  compileNode: (o) ->
-    return ifn.compile o if ifn = @unfoldSoak o
-    props = @properties
-    @base.parenthetical = yes if @parenthetical and not props.length
-    code = @base.compile o
-    code = "(#{code})" if props[0] instanceof Accessor and @isSimpleNumber()
-    (code += prop.compile o) for prop in props
-    return code
-
-  # Unfold a soak into an `If`: `a?.b` -> `a.b if a?`
-  unfoldSoak: (o) ->
-    if ifn = @base.unfoldSoak o
-      Array::push.apply ifn.body.properties, @properties
-      return ifn
-    for prop, i in @properties when prop.soakNode
-      prop.soakNode = off
-      fst = new Value @base, @properties.slice 0, i
-      snd = new Value @base, @properties.slice i
-      if fst.isComplex()
-        ref = new Literal o.scope.freeVariable 'ref'
-        fst = new Parens new Assign ref, fst
-        snd.base = ref
-      ifn = new If new Existence(fst), snd, soak: yes
-      return ifn
-    null
-
-#### Comment
-
-# CoffeeScript passes through block comments as JavaScript block comments
-# at the same position.
-exports.Comment = class Comment extends Base
-
-  isStatement: YES
-
-  constructor: (@comment) ->
-    super()
-
-  makeReturn: THIS
-
-  compileNode: (o) ->
-    @tab + '/*' + @comment.replace(/\n/g, '\n' + @tab) + '*/'
-
-#### Call
-
-# Node for a function invocation. Takes care of converting `super()` calls into
-# calls against the prototype's function of the same name.
-exports.Call = class Call extends Base
-
-  children: ['variable', 'args']
-
-  constructor: (variable, @args, @soakNode) ->
-    super()
-    @isNew    = false
-    @isSuper  = variable is 'super'
-    @variable = if @isSuper then null else variable
-    @args     or= []
-
-  compileSplatArguments: (o) ->
-    Splat.compileSplattedArray @args, o
-
-  # Tag this invocation as creating a new instance.
-  newInstance: ->
-    @isNew = true
-    this
-
-  prefix: ->
-    if @isNew then 'new ' else ''
-
-  # Grab the reference to the superclass' implementation of the current method.
-  superReference: (o) ->
-    {method} = o.scope
-    throw Error "cannot call super outside of a function." unless method
-    {name} = method
-    throw Error "cannot call super on an anonymous function." unless name
-    if method.klass
-      "#{method.klass}.__super__.#{name}"
-    else
-      "#{name}.__super__.constructor"
-
-  # Soaked chained invocations unfold into if/else ternary structures.
-  unfoldSoak: (o) ->
-    if @soakNode
-      if val = @variable
-        val = new Value val unless val instanceof Value
-        [left, rite] = val.cacheReference o
-      else
-        left = new Literal @superReference o
-        rite = new Value left
-      rite = new Call rite, @args
-      rite.isNew = @isNew
-      left = new Literal "typeof #{ left.compile o } === \"function\""
-      ifn  = new If left, new Value(rite), soak: yes
-      return ifn
-    call = this
-    list = []
-    loop
-      if call.variable instanceof Call
-        list.push call
-        call = call.variable
-        continue
-      break unless call.variable instanceof Value
-      list.push call
-      break unless (call = call.variable.base) instanceof Call
-    for call in list.reverse()
-      if ifn
-        if call.variable instanceof Call
-          call.variable = ifn
-        else
-          call.variable.base = ifn
-      ifn = If.unfoldSoak o, call, 'variable'
-    ifn
-
-  # Compile a vanilla function call.
-  compileNode: (o) ->
-    return ifn.compile o if ifn = @unfoldSoak o
-    @variable?.tags.front = @tags.front
-    for arg in @args when arg instanceof Splat
-      return @compileSplat o
-    args = ((arg.parenthetical = on) and arg.compile o for arg in @args).join ', '
-    if @isSuper
-      @compileSuper args, o
-    else
-      "#{@prefix()}#{@variable.compile o}(#{args})"
-
-  # `super()` is converted into a call against the superclass's implementation
-  # of the current function.
-  compileSuper: (args, o) ->
-    "#{@superReference(o)}.call(this#{ if args.length then ', ' else '' }#{args})"
-
-  # If you call a function with a splat, it's converted into a JavaScript
-  # `.apply()` call to allow an array of arguments to be passed.
-  # If it's a constructor, then things get real tricky. We have to inject an
-  # inner constructor in order to be able to pass the varargs.
-  compileSplat: (o) ->
-    splatargs = @compileSplatArguments o
-    return "#{ @superReference o }.apply(this, #{splatargs})" if @isSuper
-    unless @isNew
-      base = new Value base unless (base = @variable) instanceof Value
-      if (name = base.properties.pop()) and base.isComplex()
-        ref = o.scope.freeVariable 'this'
-        fun = "(#{ref} = #{ base.compile o })#{ name.compile o }"
-      else
-        fun = ref = base.compile o
-        fun += name.compile o if name
-      return "#{fun}.apply(#{ref}, #{splatargs})"
-    idt = @idt 1
-    """
-    (function(func, args, ctor) {
-    #{idt}ctor.prototype = func.prototype;
-    #{idt}var child = new ctor, result = func.apply(child, args);
-    #{idt}return typeof result === "object" ? result : child;
-    #{@tab}})(#{ @variable.compile o }, #{splatargs}, function() {})
-    """
-
-#### Extends
-
-# Node to extend an object's prototype with an ancestor object.
-# After `goog.inherits` from the
-# [Closure Library](http://closure-library.googlecode.com/svn/docs/closureGoogBase.js.html).
-exports.Extends = class Extends extends Base
-
-  children: ['child', 'parent']
-
-  constructor: (@child, @parent) ->
-    super()
-
-  # Hooks one constructor into another's prototype chain.
-  compileNode: (o) ->
-    ref =  new Value new Literal utility 'extends'
-    (new Call ref, [@child, @parent]).compile o
-
-#### Accessor
-
-# A `.` accessor into a property of a value, or the `::` shorthand for
-# an accessor into the object's prototype.
-exports.Accessor = class Accessor extends Base
-
-  children: ['name']
-
-  constructor: (@name, tag) ->
-    super()
-    @prototype = if tag is 'prototype' then '.prototype' else ''
-    @soakNode = tag is 'soak'
-
-  compileNode: (o) ->
-    name = @name.compile o
-    namePart = if name.match(IS_STRING) then "[#{name}]" else ".#{name}"
-    @prototype + namePart
-
-  isComplex: NO
-
-#### Index
-
-# A `[ ... ]` indexed accessor into an array or object.
-exports.Index = class Index extends Base
-
-  children: ['index']
-
-  constructor: (@index) ->
-    super()
-
-  compileNode: (o) ->
-    idx = @index.compile o
-    prefix = if @proto then '.prototype' else ''
-    "#{prefix}[#{idx}]"
-
-  isComplex: -> @index.isComplex()
-
-#### Range
-
-# A range literal. Ranges can be used to extract portions (slices) of arrays,
-# to specify a range for comprehensions, or as a value, to be expanded into the
-# corresponding array of integers at runtime.
-exports.Range = class Range extends Base
-
-  children: ['from', 'to']
-
-  constructor: (@from, @to, tag) ->
-    super()
-    @exclusive = tag is 'exclusive'
-    @equals = if @exclusive then '' else '='
-
-  # Compiles the range's source variables -- where it starts and where it ends.
-  # But only if they need to be cached to avoid double evaluation.
-  compileVariables: (o) ->
-    o = merge(o, top: true)
-    [@from, @fromVar] =  @from.compileReference o, precompile: yes
-    [@to, @toVar] =      @to.compileReference o, precompile: yes
-    [@fromNum, @toNum] = [@fromVar.match(SIMPLENUM), @toVar.match(SIMPLENUM)]
-    parts = []
-    parts.push @from if @from isnt @fromVar
-    parts.push @to if @to isnt @toVar
-
-  # When compiled normally, the range returns the contents of the *for loop*
-  # needed to iterate over the values in the range. Used by comprehensions.
-  compileNode: (o) ->
-    @compileVariables o
-    return    @compileArray(o)  unless o.index
-    return    @compileSimple(o) if @fromNum and @toNum
-    idx      = del o, 'index'
-    step     = del o, 'step'
-    vars     = "#{idx} = #{@from}" + if @to isnt @toVar then ", #{@to}" else ''
-    intro    = "(#{@fromVar} <= #{@toVar} ? #{idx}"
-    compare  = "#{intro} <#{@equals} #{@toVar} : #{idx} >#{@equals} #{@toVar})"
-    stepPart = if step then step.compile(o) else '1'
-    incr     = if step then "#{idx} += #{stepPart}" else "#{intro} += #{stepPart} : #{idx} -= #{stepPart})"
-    "#{vars}; #{compare}; #{incr}"
-
-  # Compile a simple range comprehension, with integers.
-  compileSimple: (o) ->
-    [from, to] = [+@fromNum, +@toNum]
-    idx        = del o, 'index'
-    step       = del o, 'step'
-    step       and= "#{idx} += #{step.compile(o)}"
-    if from <= to
-      "#{idx} = #{from}; #{idx} <#{@equals} #{to}; #{step or "#{idx}++"}"
-    else
-      "#{idx} = #{from}; #{idx} >#{@equals} #{to}; #{step or "#{idx}--"}"
-
-  # When used as a value, expand the range into the equivalent array.
-  compileArray: (o) ->
-    if @fromNum and @toNum and Math.abs(@fromNum - @toNum) <= 20
-      range = [+@fromNum..+@toNum]
-      range.pop() if @exclusive
-      return "[#{ range.join(', ') }]"
-    idt    = @idt 1
-    i      = o.scope.freeVariable 'i'
-    result = o.scope.freeVariable 'result'
-    pre    = "\n#{idt}#{result} = [];"
-    if @fromNum and @toNum
-      o.index = i
-      body = @compileSimple o
-    else
-      vars = "#{i} = #{@from}" + if @to isnt @toVar then ", #{@to}" else ''
-      clause = "#{@fromVar} <= #{@toVar} ?"
-      body   = "var #{vars}; #{clause} #{i} <#{@equals} #{@toVar} : #{i} >#{@equals} #{@toVar}; #{clause} #{i} += 1 : #{i} -= 1"
-    post   = "{ #{result}.push(#{i}); }\n#{idt}return #{result};\n#{o.indent}"
-    "(function() {#{pre}\n#{idt}for (#{body})#{post}}).call(this)"
-
-#### Slice
-
-# An array slice literal. Unlike JavaScript's `Array#slice`, the second parameter
-# specifies the index of the end of the slice, just as the first parameter
-# is the index of the beginning.
-exports.Slice = class Slice extends Base
-
-  children: ['range']
-
-  constructor: (@range) ->
-    super()
-
-  compileNode: (o) ->
-    from  =  if @range.from then @range.from.compile(o) else '0'
-    to    =  if @range.to then @range.to.compile(o) else ''
-    to    += if not to or @range.exclusive then '' else ' + 1'
-    to    =  ', ' + to if to
-    ".slice(#{from}#{to})"
-
-#### ObjectLiteral
-
-# An object literal, nothing fancy.
-exports.ObjectLiteral = class ObjectLiteral extends Base
-
-  children: ['properties']
-
-  constructor: (props) ->
-    super()
-    @objects = @properties = props or []
-
-  compileNode: (o) ->
-    top = del o, 'top'
-    o.indent = @idt 1
-    nonComments = prop for prop in @properties when prop not instanceof Comment
-    lastNoncom  = last nonComments
-    props = for prop, i in @properties
-      join = if i is @properties.length - 1
-        ''
-      else if prop is lastNoncom or prop instanceof Comment
-        '\n'
-      else
-        ',\n'
-      indent = if prop instanceof Comment then '' else @idt 1
-      if prop instanceof Value and prop.tags.this
-        prop = new Assign prop.properties[0].name, prop, 'object'
-      else if prop not instanceof Assign and prop not instanceof Comment
-        prop = new Assign prop, prop, 'object'
-      indent + prop.compile(o) + join
-    props = props.join('')
-    obj   = "{#{ if props then '\n' + props + '\n' + @idt() else '' }}"
-    if @tags.front then "(#{obj})" else obj
-
-  assigns: (name) ->
-    for prop in @properties when prop.assigns name then return yes
-    no
-
-#### ArrayLiteral
-
-# An array literal.
-exports.ArrayLiteral = class ArrayLiteral extends Base
-
-  children: ['objects']
-
-  constructor: (@objects) ->
-    super()
-    @objects or= []
-
-  compileSplatLiteral: (o) ->
-    Splat.compileSplattedArray @objects, o
-
-  compileNode: (o) ->
-    o.indent = @idt 1
-    for obj in @objects when obj instanceof Splat
-      return @compileSplatLiteral o
-    objects = []
-    for obj, i in @objects
-      code = obj.compile o
-      objects.push (if obj instanceof Comment
-        "\n#{code}\n#{o.indent}"
-      else if i is @objects.length - 1
-        code
-      else
-        code + ', '
-      )
-    objects = objects.join ''
-    if 0 < objects.indexOf '\n'
-      "[\n#{o.indent}#{objects}\n#{@tab}]"
-    else
-      "[#{objects}]"
-
-  assigns: (name) ->
-    for obj in @objects when obj.assigns name then return yes
-    no
-
-#### Class
-
-# The CoffeeScript class definition.
-exports.Class = class Class extends Base
-
-  children:     ['variable', 'parent', 'properties']
-  isStatement:  YES
-
-  # Initialize a **Class** with its name, an optional superclass, and a
-  # list of prototype property assignments.
-  constructor: (variable, @parent, @properties) ->
-    super()
-    @variable = if variable is '__temp__' then new Literal variable else variable
-    @properties or= []
-    @returns    = false
-
-  makeReturn: ->
-    @returns = true
-    this
-
-  # Instead of generating the JavaScript string directly, we build up the
-  # equivalent syntax tree and compile that, in pieces. You can see the
-  # constructor, property assignments, and inheritance getting built out below.
-  compileNode: (o) ->
-    {variable} = this
-    variable   = new Literal o.scope.freeVariable 'ctor' if variable.value is '__temp__'
-    extension  = @parent and new Extends variable, @parent
-    props      = new Expressions
-    o.top      = true
-    me         = null
-    className  = variable.compile o
-    constScope = null
-
-    if @parent
-      applied = new Value @parent, [new Accessor new Literal 'apply']
-      constructor = new Code([], new Expressions([
-        new Call applied, [new Literal('this'), new Literal('arguments')]
-      ]))
-    else
-      constructor = new Code [], new Expressions [new Return new Literal 'this']
-
-    for prop in @properties
-      [pvar, func] = [prop.variable, prop.value]
-      if pvar and pvar.base.value is 'constructor'
-        if func not instanceof Code
-          [func, ref] = func.compileReference o
-          props.push func if func isnt ref
-          apply = new Call(new Value(ref, [new Accessor new Literal 'apply']), [new Literal('this'), new Literal('arguments')])
-          func  = new Code [], new Expressions([apply])
-        throw new Error "cannot define a constructor as a bound function." if func.bound
-        func.name = className
-        func.body.push new Return new Literal 'this'
-        variable = new Value variable
-        variable.namespaced = 0 < className.indexOf '.'
-        constructor = func
-        constructor.comment = props.expressions.pop() if props.expressions[props.expressions.length - 1] instanceof Comment
-        continue
-      if func instanceof Code and func.bound
-        if prop.context is 'this'
-          func.context = className
-        else
-          func.bound = false
-          constScope or= new Scope(o.scope, constructor.body, constructor)
-          me or= constScope.freeVariable 'this'
-          pname = pvar.compile(o)
-          constructor.body.push    new Return new Literal 'this' if constructor.body.empty()
-          constructor.body.unshift new Literal "this.#{pname} = function(){ return #{className}.prototype.#{pname}.apply(#{me}, arguments); }"
-      if pvar
-        access = if prop.context is 'this' then pvar.base.properties[0] else new Accessor(pvar, 'prototype')
-        val    = new Value variable, [access]
-        prop   = new Assign(val, func)
-      props.push prop
-
-    constructor.className = className.match /[\w\d\$_]+$/
-    constructor.body.unshift new Literal "#{me} = this" if me
-    construct = @idt() + new Assign(variable, constructor).compile(merge o, sharedScope: constScope) + ';'
-    props     = if !props.empty() then '\n' + props.compile(o)                    else ''
-    extension = if extension      then '\n' + @idt() + extension.compile(o) + ';' else ''
-    returns   = if @returns       then '\n' + new Return(variable).compile(o) else ''
-    construct + extension + props + returns
-
-#### Assign
-
-# The **Assign** is used to assign a local variable to value, or to set the
-# property of an object -- including within object literals.
-exports.Assign = class Assign extends Base
-
-  # Matchers for detecting class/method names
-  METHOD_DEF: /^(?:(\S+)\.prototype\.)?([$A-Za-z_][$\w]*)$/
-
-  children: ['variable', 'value']
-
-  constructor: (@variable, @value, @context) ->
-    super()
-
-  topSensitive: YES
-
-  isValue: ->
-    @variable instanceof Value
-
-  # Compile an assignment, delegating to `compilePatternMatch` or
-  # `compileSplice` if appropriate. Keep track of the name of the base object
-  # we've been assigned to, for correct internal references. If the variable
-  # has not been seen yet within the current scope, declare it.
-  compileNode: (o) ->
-    if isValue = @isValue()
-      return @compilePatternMatch(o) if @variable.isArray() or @variable.isObject()
-      return @compileSplice(o) if @variable.isSplice()
-      if ifn = If.unfoldSoak o, this, 'variable'
-        delete o.top
-        return ifn.compile o
-    top    = del o, 'top'
-    stmt   = del o, 'asStatement'
-    name   = @variable.compile(o)
-    if @value instanceof Code and match = @METHOD_DEF.exec name
-      @value.name  = match[2]
-      @value.klass = match[1]
-    val = @value.compile o
-    return "#{name}: #{val}" if @context is 'object'
-    o.scope.find name unless isValue and (@variable.hasProperties() or @variable.namespaced)
-    val = "#{name} = #{val}"
-    return "#{@tab}#{val};" if stmt
-    if top or @parenthetical then val else "(#{val})"
-
-  # Brief implementation of recursive pattern matching, when assigning array or
-  # object literals to a value. Peeks at their properties to assign inner names.
-  # See the [ECMAScript Harmony Wiki](http://wiki.ecmascript.org/doku.php?id=harmony:destructuring)
-  # for details.
-  compilePatternMatch: (o) ->
-    if (value = @value).isStatement o then value = Closure.wrap value
-    {objects} = @variable.base
-    return value.compile o unless olength = objects.length
-    isObject = @variable.isObject()
-    if o.top and olength is 1 and (obj = objects[0]) not instanceof Splat
-      # Unroll simplest cases: `{v} = x` -> `v = x.v`
-      if obj instanceof Assign
-        {variable: {base: idx}, value: obj} = obj
-      else
-        idx = if isObject
-          if obj.tags.this then obj.properties[0].name else obj
-        else new Literal 0
-      value = new Value value unless value instanceof Value
-      accessClass = if IDENTIFIER.test idx.value then Accessor else Index
-      value.properties.push new accessClass idx
-      return new Assign(obj, value).compile o
-    top     = del o, 'top'
-    otop    = merge o, top: yes
-    valVar  = value.compile o
-    assigns = []
-    splat   = false
-    if not IDENTIFIER.test(valVar) or @variable.assigns(valVar)
-      assigns.push "#{ ref = o.scope.freeVariable 'ref' } = #{valVar}"
-      valVar = ref
-    for obj, i in objects
-      # A regular array pattern-match.
-      idx = i
-      if isObject
-        if obj instanceof Assign
-          # A regular object pattern-match.
-          {variable: {base: idx}, value: obj} = obj
-        else
-          # A shorthand `{a, b, @c} = val` pattern-match.
-          idx = if obj.tags.this then obj.properties[0].name else obj
-      unless obj instanceof Value or obj instanceof Splat
-        throw new Error 'pattern matching must use only identifiers on the left-hand side.'
-      accessClass = if isObject and IDENTIFIER.test(idx.value) then Accessor else Index
-      if not splat and obj instanceof Splat
-        val   = new Literal obj.compileValue o, valVar, i, olength - i - 1
-        splat = true
-      else
-        idx = new Literal(if splat then "#{valVar}.length - #{olength - idx}" else idx) if typeof idx isnt 'object'
-        val = new Value new Literal(valVar), [new accessClass idx]
-      assigns.push new Assign(obj, val).compile otop
-    assigns.push valVar unless top
-    code = assigns.join ', '
-    if top or @parenthetical then code else "(#{code})"
-
-  # Compile the assignment from an array splice literal, using JavaScript's
-  # `Array#splice` method.
-  compileSplice: (o) ->
-    {range} = @variable.properties.pop()
-    name  = @variable.compile o
-    plus  = if range.exclusive then '' else ' + 1'
-    from  = if range.from then range.from.compile(o) else '0'
-    to    = if range.to then range.to.compile(o) + ' - ' + from + plus else "#{name}.length"
-    ref   = o.scope.freeVariable 'ref'
-    val   = @value.compile(o)
-    "([].splice.apply(#{name}, [#{from}, #{to}].concat(#{ref} = #{val})), #{ref})"
-
-  assigns: (name) ->
-    @[if @context is 'object' then 'value' else 'variable'].assigns name
-
-#### Code
-
-# A function definition. This is the only node that creates a new Scope.
-# When for the purposes of walking the contents of a function body, the Code
-# has no *children* -- they're within the inner scope.
-exports.Code = class Code extends Base
-
-  children: ['params', 'body']
-
-  constructor: (@params, @body, tag) ->
-    super()
-    @params   or= []
-    @body     or= new Expressions
-    @bound    = tag is 'boundfunc'
-    @context  = 'this' if @bound
-
-  # Compilation creates a new scope unless explicitly asked to share with the
-  # outer scope. Handles splat parameters in the parameter list by peeking at
-  # the JavaScript `arguments` objects. If the function is bound with the `=>`
-  # arrow, generates a wrapper that saves the current value of `this` through
-  # a closure.
-  compileNode: (o) ->
-    sharedScope = del o, 'sharedScope'
-    top         = del o, 'top'
-    o.scope     = sharedScope or new Scope(o.scope, @body, this)
-    o.top       = true
-    o.indent    = @idt(1)
-    empty       = @body.expressions.length is 0
-    delete o.bare
-    delete o.globals
-    splat = undefined
-    params = []
-    for param, i in @params
-      if splat
-        if param.attach
-          param.assign = new Assign new Value new Literal('this'), [new Accessor param.value]
-          @body.expressions.splice splat.index + 1, 0, param.assign
-        splat.trailings.push param
-      else
-        if param.attach
-          {value} = param
-          [param, param.splat] = [new Literal(o.scope.freeVariable 'arg'), param.splat]
-          @body.unshift new Assign new Value(new Literal('this'), [new Accessor value]), param
-        if param.splat
-          splat           = new Splat param.value
-          splat.index     = i
-          splat.trailings = []
-          splat.arglength = @params.length
-          @body.unshift(splat)
-        else
-          params.push param
-    o.scope.startLevel()
-    params = (param.compile(o) for param in params)
-    @body.makeReturn() unless empty or @noReturn
-    (o.scope.parameter(param)) for param in params
-    comm  = if @comment then @comment.compile(o) + '\n' else ''
-    o.indent = @idt 2 if @className
-    code  = if @body.expressions.length then "\n#{ @body.compileWithDeclarations(o) }\n" else ''
-    open  = if @className then "(function() {\n#{comm}#{@idt(1)}function #{@className}(" else "function("
-    close = if @className then "#{code and @idt(1)}};\n#{@idt(1)}return #{@className};\n#{@tab}})()" else "#{code and @tab}}"
-    func  = "#{open}#{ params.join(', ') }) {#{code}#{close}"
-    o.scope.endLevel()
-    return "#{utility 'bind'}(#{func}, #{@context})" if @bound
-    if @tags.front then "(#{func})" else func
-
-  # Short-circuit traverseChildren method to prevent it from crossing scope boundaries
-  # unless crossScope is true
-  traverseChildren: (crossScope, func) -> super(crossScope, func) if crossScope
-
-#### Param
-
-# A parameter in a function definition. Beyond a typical Javascript parameter,
-# these parameters can also attach themselves to the context of the function,
-# as well as be a splat, gathering up a group of parameters into an array.
-exports.Param = class Param extends Base
-
-  children: ['name']
-
-  constructor: (@name, @attach, @splat) ->
-    super()
-    @value = new Literal @name
-
-  compileNode: (o) ->
-    @value.compile o
-
-  toString: ->
-    {name} = @
-    name = '@' + name if @attach
-    name += '...'     if @splat
-    new Literal(name).toString()
-
-#### Splat
-
-# A splat, either as a parameter to a function, an argument to a call,
-# or as part of a destructuring assignment.
-exports.Splat = class Splat extends Base
-
-  children: ['name']
-
-  constructor: (name) ->
-    super()
-    @name = if name.compile then name else new Literal name
-
-  assigns: (name) -> @name.assigns name
-
-  compileNode: (o) ->
-    if @index? then @compileParam(o) else @name.compile(o)
-
-  # Compiling a parameter splat means recovering the parameters that succeed
-  # the splat in the parameter list, by slicing the arguments object.
-  compileParam: (o) ->
-    name = @name.compile(o)
-    o.scope.find name
-    end = ''
-    if @trailings.length
-      len = o.scope.freeVariable 'len'
-      o.scope.assign len, "arguments.length"
-      variadic = o.scope.freeVariable 'result'
-      o.scope.assign variadic, len + ' >= ' + @arglength
-      end = if @trailings.length then ", #{len} - #{@trailings.length}"
-      for trailing, idx in @trailings
-        if trailing.attach
-          assign        = trailing.assign
-          trailing      = new Literal o.scope.freeVariable 'arg'
-          assign.value  = trailing
-        pos = @trailings.length - idx
-        o.scope.assign(trailing.compile(o), "arguments[#{variadic} ? #{len} - #{pos} : #{@index + idx}]")
-    "#{name} = #{utility('slice')}.call(arguments, #{@index}#{end})"
-
-  # A compiling a splat as a destructuring assignment means slicing arguments
-  # from the right-hand-side's corresponding array.
-  compileValue: (o, name, index, trailings) ->
-    trail = if trailings then ", #{name}.length - #{trailings}" else ''
-    "#{utility 'slice'}.call(#{name}, #{index}#{trail})"
-
-  # Utility function that converts arbitrary number of elements, mixed with
-  # splats, to a proper array
-  @compileSplattedArray: (list, o) ->
-    args = []
-    end = -1
-    for arg, i in list
-      code = arg.compile o
-      prev = args[end]
-      if arg not instanceof Splat
-        if prev and starts(prev, '[') and ends(prev, ']')
-          args[end] = "#{prev.slice 0, -1}, #{code}]"
-          continue
-        if prev and starts(prev, '.concat([') and ends(prev, '])')
-          args[end] = "#{prev.slice 0, -2}, #{code}])"
-          continue
-        code = "[#{code}]"
-      args[++end] = if i is 0 then code else ".concat(#{code})"
-    args.join ''
-
-#### While
-
-# A while loop, the only sort of low-level loop exposed by CoffeeScript. From
-# it, all other loops can be manufactured. Useful in cases where you need more
-# flexibility or more speed than a comprehension can provide.
-exports.While = class While extends Base
-
-  children:     ['condition', 'guard', 'body']
-  isStatement: YES
-
-  constructor: (condition, opts) ->
-    super()
-    @condition  = if opts?.invert then condition.invert() else condition
-    @guard = opts?.guard
-
-  addBody: (body) ->
-    @body = body
-    this
-
-  makeReturn: ->
-    @returns = true
-    this
-
-  topSensitive: YES
-
-  # The main difference from a JavaScript *while* is that the CoffeeScript
-  # *while* can be used as a part of a larger expression -- while loops may
-  # return an array containing the computed result of each iteration.
-  compileNode: (o) ->
-    top      =  del(o, 'top') and not @returns
-    o.indent =  @idt 1
-    @condition.parenthetical = yes
-    cond     =  @condition.compile(o)
-    o.top    =  true
-    set      =  ''
-    unless top
-      rvar  = o.scope.freeVariable 'result'
-      set   = "#{@tab}#{rvar} = [];\n"
-      @body = Push.wrap(rvar, @body) if @body
-    pre     = "#{set}#{@tab}while (#{cond})"
-    @body   = Expressions.wrap([new If(@guard, @body)]) if @guard
-    if @returns
-      post = '\n' + new Return(new Literal rvar).compile(merge(o, indent: @idt()))
-    else
-      post = ''
-    "#{pre} {\n#{ @body.compile(o) }\n#{@tab}}#{post}"
-
-#### Op
-
-# Simple Arithmetic and logical operations. Performs some conversion from
-# CoffeeScript operations into their JavaScript equivalents.
-exports.Op = class Op extends Base
-
-  # The map of conversions from CoffeeScript to JavaScript symbols.
-  CONVERSIONS:
-    '==': '==='
-    '!=': '!=='
-    of: 'in'
-
-  # The map of invertible operators.
-  INVERSIONS:
-    '!==': '==='
-    '===': '!=='
-
-  # The list of operators for which we perform
-  # [Python-style comparison chaining](http://docs.python.org/reference/expressions.html#notin).
-  CHAINABLE:        ['<', '>', '>=', '<=', '===', '!==']
-
-  # Our assignment operators that have no JavaScript equivalent.
-  ASSIGNMENT:       ['||=', '&&=', '?=']
-
-  # Operators must come before their operands with a space.
-  PREFIX_OPERATORS: ['new', 'typeof', 'delete']
-
-  children: ['first', 'second']
-
-  constructor: (op, first, second, flip) ->
-    if op is 'new'
-      return first.newInstance() if first instanceof Call
-      first = new Parens first   if first instanceof Code and first.bound
-    super()
-    @operator = @CONVERSIONS[op] or op
-    (@first  = first ).tags.operation = yes
-    (@second = second).tags.operation = yes if second
-    @flip     = !!flip
-
-  isUnary: ->
-    not @second
-
-  isComplex: -> @operator isnt '!' or @first.isComplex()
-
-  isMutator: ->
-    ends(@operator, '=') and @operator not in ['===', '!==']
-
-  isChainable: ->
-    include(@CHAINABLE, @operator)
-
-  invert: ->
-    if @operator in ['===', '!==']
-      @operator = @INVERSIONS[@operator]
-      this
-    else if @second
-      new Parens(this).invert()
-    else
-      super()
-
-  toString: (idt) ->
-    super(idt, @constructor.name + ' ' + @operator)
-
-  compileNode: (o) ->
-    @first.tags.front = @tags.front if @second
-    return @compileChain(o)      if @isChainable() and @first.unwrap() instanceof Op and @first.unwrap().isChainable()
-    return @compileAssignment(o) if include @ASSIGNMENT, @operator
-    return @compileUnary(o)      if @isUnary()
-    return @compileExistence(o)  if @operator is '?'
-    @first  = new Parens @first  if @first  instanceof Op and @first.isMutator()
-    @second = new Parens @second if @second instanceof Op and @second.isMutator()
-    [@first.compile(o), @operator, @second.compile(o)].join ' '
-
-  # Mimic Python's chained comparisons when multiple comparison operators are
-  # used sequentially. For example:
-  #
-  #     bin/coffee -e "puts 50 < 65 > 10"
-  #     true
-  compileChain: (o) ->
-    shared = @first.unwrap().second
-    [@first.second, shared] = shared.compileReference o
-    [first, second, shared] = [@first.compile(o), @second.compile(o), shared.compile(o)]
-    "(#{first}) && (#{shared} #{@operator} #{second})"
-
-  # When compiling a conditional assignment, take care to ensure that the
-  # operands are only evaluated once, even though we have to reference them
-  # more than once.
-  compileAssignment: (o) ->
-    [left, rite] = @first.cacheReference o
-    rite = new Assign rite, @second
-    return new Op(@operator.slice(0, -1), left, rite).compile o
-
-  compileExistence: (o) ->
-    if @first.isComplex()
-      ref = o.scope.freeVariable 'ref'
-      fst = new Parens new Assign new Literal(ref), @first
-    else
-      fst = @first
-      ref = fst.compile o
-    new Existence(fst).compile(o) + " ? #{ref} : #{ @second.compile o }"
-
-  # Compile a unary **Op**.
-  compileUnary: (o) ->
-    space = if include @PREFIX_OPERATORS, @operator then ' ' else ''
-    parts = [@operator, space, @first.compile(o)]
-    (if @flip then parts.reverse() else parts).join ''
-
-#### In
-exports.In = class In extends Base
-
-  children: ['object', 'array']
-
-  constructor: (@object, @array) ->
-    super()
-
-  isArray: ->
-    @array instanceof Value and @array.isArray()
-
-  compileNode: (o) ->
-    if @isArray() then @compileOrTest(o) else @compileLoopTest(o)
-
-  compileOrTest: (o) ->
-    [obj1, obj2] = @object.compileReference o, precompile: yes
-    tests = for item, i in @array.base.objects
-      "#{if i then obj2 else obj1} === #{item.compile(o)}"
-    "(#{tests.join(' || ')})"
-
-  compileLoopTest: (o) ->
-    "#{utility 'inArray'}(#{@object.compile o}, #{@array.compile o})"
-
-#### Try
-
-# A classic *try/catch/finally* block.
-exports.Try = class Try extends Base
-
-  children:     ['attempt', 'recovery', 'ensure']
-  isStatement: YES
-
-  constructor: (@attempt, @error, @recovery, @ensure) ->
-    super()
-
-  makeReturn: ->
-    @attempt  = @attempt.makeReturn() if @attempt
-    @recovery = @recovery.makeReturn() if @recovery
-    this
-
-  # Compilation is more or less as you would expect -- the *finally* clause
-  # is optional, the *catch* is not.
-  compileNode: (o) ->
-    o.indent    = @idt 1
-    o.top       = true
-    attemptPart = @attempt.compile(o)
-    errorPart   = if @error then " (#{ @error.compile(o) }) " else ' '
-    catchPart   = if @recovery
-      " catch#{errorPart}{\n#{ @recovery.compile(o) }\n#{@tab}}"
-    else unless @ensure or @recovery then ' catch (_e) {}' else ''
-    finallyPart = (@ensure or '') and ' finally {\n' + @ensure.compile(merge(o)) + "\n#{@tab}}"
-    "#{@tab}try {\n#{attemptPart}\n#{@tab}}#{catchPart}#{finallyPart}"
-
-#### Throw
-
-# Simple node to throw an exception.
-exports.Throw = class Throw extends Base
-
-  children:     ['expression']
-  isStatement: YES
-
-  constructor: (@expression) ->
-    super()
-
-  # A **Throw** is already a return, of sorts...
-  makeReturn: THIS
-
-  compileNode: (o) ->
-    "#{@tab}throw #{@expression.compile(o)};"
-
-#### Existence
-
-# Checks a variable for existence -- not *null* and not *undefined*. This is
-# similar to `.nil?` in Ruby, and avoids having to consult a JavaScript truth
-# table.
-exports.Existence = class Existence extends Base
-
-  children: ['expression']
-
-  constructor: (@expression) ->
-    super()
-
-  compileNode: (o) ->
-    code = @expression.compile o
-    code = if IDENTIFIER.test(code) and not o.scope.check code
-      "typeof #{code} !== \"undefined\" && #{code} !== null"
-    else
-      "#{code} != null"
-    if @parenthetical then code else "(#{code})"
-
-#### Parens
-
-# An extra set of parentheses, specified explicitly in the source. At one time
-# we tried to clean up the results by detecting and removing redundant
-# parentheses, but no longer -- you can put in as many as you please.
-#
-# Parentheses are a good way to force any statement to become an expression.
-exports.Parens = class Parens extends Base
-
-  children: ['expression']
-
-  constructor: (@expression) ->
-    super()
-
-  isStatement: (o) ->
-    @expression.isStatement(o)
-  isComplex: ->
-    @expression.isComplex()
-
-  topSensitive: YES
-
-  makeReturn: ->
-    @expression.makeReturn()
-
-  compileNode: (o) ->
-    top  = del o, 'top'
-    @expression.parenthetical = true
-    code = @expression.compile(o)
-    return code if top and @expression.isPureStatement o
-    if @parenthetical or @isStatement o
-      return if top then @tab + code + ';' else code
-    "(#{code})"
-
-#### For
-
-# CoffeeScript's replacement for the *for* loop is our array and object
-# comprehensions, that compile into *for* loops here. They also act as an
-# expression, able to return the result of each filtered iteration.
-#
-# Unlike Python array comprehensions, they can be multi-line, and you can pass
-# the current index of the loop as a second parameter. Unlike Ruby blocks,
-# you can map and filter in a single pass.
-exports.For = class For extends Base
-
-  children:     ['body', 'source', 'guard']
-  isStatement: YES
-
-  constructor: (@body, source, @name, @index) ->
-    super()
-    {@source, @guard, @step} = source
-    @raw    = !!source.raw
-    @object = !!source.object
-    [@name, @index] = [@index, @name] if @object
-    @pattern = @name instanceof Value
-    throw new Error('index cannot be a pattern matching expression') if @index instanceof Value
-    @returns = false
-
-  topSensitive: YES
-
-  makeReturn: ->
-    @returns = true
-    this
-
-  compileReturnValue: (val, o) ->
-    return '\n' + new Return(new Literal val).compile(o) if @returns
-    return '\n' + val if val
-    ''
-
-  # Welcome to the hairiest method in all of CoffeeScript. Handles the inner
-  # loop, filtering, stepping, and result saving for array, object, and range
-  # comprehensions. Some of the generated code can be shared in common, and
-  # some cannot.
-  compileNode: (o) ->
-    topLevel      = del(o, 'top') and not @returns
-    range         = @source instanceof Value and @source.base instanceof Range and not @source.properties.length
-    source        = if range then @source.base else @source
-    codeInBody    = not @body.containsPureStatement() and @body.contains (node) -> node instanceof Code
-    scope         = o.scope
-    name          = @name  and @name.compile o
-    index         = @index and @index.compile o
-    scope.find(name,  immediate: yes) if name and not @pattern and (range or not codeInBody)
-    scope.find(index, immediate: yes) if index
-    rvar          = scope.freeVariable 'result' unless topLevel
-    ivar          = if range then name else index
-    ivar          = scope.freeVariable 'i' if not ivar or codeInBody
-    nvar          = scope.freeVariable 'i' if name and not range and codeInBody
-    varPart       = ''
-    guardPart     = ''
-    unstepPart    = ''
-    body          = Expressions.wrap([@body])
-    idt1          = @idt 1
-    if range
-      forPart = source.compile merge o, {index: ivar, @step}
-    else
-      svar = sourcePart = @source.compile o
-      if (name or not @raw) and
-         not (IDENTIFIER.test(svar) and scope.check svar, immediate: on)
-        sourcePart = "#{ref = scope.freeVariable 'ref'} = #{svar}"
-        sourcePart = "(#{sourcePart})" unless @object
-        svar = ref
-      namePart = if @pattern
-        new Assign(@name, new Literal "#{svar}[#{ivar}]").compile merge o, top: on
-      else if name
-        "#{name} = #{svar}[#{ivar}]"
-      unless @object
-        lvar      = scope.freeVariable 'len'
-        stepPart  = if @step then "#{ivar} += #{ @step.compile(o) }" else "#{ivar}++"
-        forPart   = "#{ivar} = 0, #{lvar} = #{sourcePart}.length; #{ivar} < #{lvar}; #{stepPart}"
-    resultPart    = if rvar then "#{@tab}#{rvar} = [];\n" else ''
-    returnResult  = @compileReturnValue(rvar, o)
-    body          = Push.wrap(rvar, body) unless topLevel
-    if @guard
-      body        = Expressions.wrap([new If(@guard, body)])
-    if codeInBody
-      body.unshift  new Literal "var #{name} = #{ivar}" if range
-      body.unshift  new Literal "var #{namePart}" if namePart
-      body.unshift  new Literal "var #{index} = #{ivar}" if index
-      lastLine    = body.expressions.pop()
-      body.push     new Assign new Literal(ivar), new Literal index if index
-      body.push     new Assign new Literal(nvar), new Literal name if nvar
-      body.push     lastLine
-      o.indent    = @idt 1
-      body        = Expressions.wrap [new Literal body.compile o]
-      body.push     new Assign new Literal(index), new Literal ivar if index
-      body.push     new Assign new Literal(name), new Literal nvar or ivar if name
-    else
-      varPart     = "#{idt1}#{namePart};\n" if namePart
-      if forPart and name is ivar
-        unstepPart = if @step then "#{name} -= #{ @step.compile(o) };" else "#{name}--;"
-        unstepPart = "\n#{@tab}" + unstepPart
-    if @object
-      forPart     = "#{ivar} in #{sourcePart}"
-      guardPart   = "\n#{idt1}if (!#{utility('hasProp')}.call(#{svar}, #{ivar})) continue;" unless @raw  
-    body          = body.compile merge o, indent: idt1, top: true
-    vars          = if range then name else "#{name}, #{ivar}"
-    """
-    #{resultPart}#{@tab}for (#{forPart}) {#{guardPart}
-    #{varPart}#{body}
-    #{@tab}}#{unstepPart}#{returnResult}
-    """
-
-#### Switch
-
-# A JavaScript *switch* statement. Converts into a returnable expression on-demand.
-exports.Switch = class Switch extends Base
-
-  children: ['subject', 'cases', 'otherwise']
-
-  isStatement: YES
-
-  constructor: (@subject, @cases, @otherwise) ->
-    super()
-    @tags.subjectless = !@subject
-    @subject or= new Literal 'true'
-
-  makeReturn: ->
-    pair[1].makeReturn() for pair in @cases
-    @otherwise.makeReturn() if @otherwise
-    this
-
-  compileNode: (o) ->
-    idt = o.indent = @idt 2
-    o.top = yes
-    code = "#{ @tab }switch (#{ @subject.compile o }) {"
-    for pair in @cases
-      [conditions, block] = pair
-      exprs = block.expressions
-      for condition in flatten [conditions]
-        condition = new Op '!!', new Parens condition if @tags.subjectless
-        code += "\n#{ @idt(1) }case #{ condition.compile o }:"
-      code += "\n#{ block.compile o }"
-      code += "\n#{ idt }break;" unless last(exprs) instanceof Return
-    if @otherwise
-      code += "\n#{ @idt(1) }default:\n#{ @otherwise.compile o }"
-    code += "\n#{ @tab }}"
-    code
-
-#### If
-
-# *If/else* statements. Acts as an expression by pushing down requested returns
-# to the last line of each clause.
-#
-# Single-expression **Ifs** are compiled into conditional operators if possible,
-# because ternaries are already proper expressions, and don't need conversion.
-exports.If = class If extends Base
-
-  children: ['condition', 'body', 'elseBody', 'assigner']
-
-  topSensitive: YES
-
-  constructor: (condition, @body, tags) ->
-    @tags      = tags or= {}
-    @condition = if tags.invert then condition.invert() else condition
-    @soakNode  = tags.soak
-    @elseBody  = null
-    @isChain   = false
-
-  bodyNode: -> @body?.unwrap()
-  elseBodyNode: -> @elseBody?.unwrap()
-
-  # Rewrite a chain of **Ifs** to add a default case as the final *else*.
-  addElse: (elseBody) ->
-    if @isChain
-      @elseBodyNode().addElse elseBody
-    else
-      @isChain  = elseBody instanceof If
-      @elseBody = @ensureExpressions elseBody
-    this
-
-  # The **If** only compiles into a statement if either of its bodies needs
-  # to be a statement. Otherwise a conditional operator is safe.
-  isStatement: (o) ->
-    @statement or= o?.top or @bodyNode().isStatement(o) or @elseBodyNode()?.isStatement(o)
-
-  compileCondition: (o) ->
-    @condition.parenthetical = yes
-    @condition.compile o
-
-  compileNode: (o) ->
-    if @isStatement o then @compileStatement o else @compileExpression o
-
-  makeReturn: ->
-    if @isStatement()
-      @body     and= @ensureExpressions(@body.makeReturn())
-      @elseBody and= @ensureExpressions(@elseBody.makeReturn())
-      this
-    else
-      new Return this
-
-  ensureExpressions: (node) ->
-    if node instanceof Expressions then node else new Expressions [node]
-
-  # Compile the **If** as a regular *if-else* statement. Flattened chains
-  # force inner *else* bodies into statement form.
-  compileStatement: (o) ->
-    top      = del o, 'top'
-    child    = del o, 'chainChild'
-    condO    = merge o
-    o.indent = @idt 1
-    o.top    = true
-    ifPart   = "if (#{ @compileCondition condO }) {\n#{ @body.compile o }\n#{@tab}}"
-    ifPart   = @tab + ifPart unless child
-    return ifPart unless @elseBody
-    ifPart + if @isChain
-      ' else ' + @elseBodyNode().compile merge o, indent: @tab, chainChild: true
-    else
-      " else {\n#{ @elseBody.compile(o) }\n#{@tab}}"
-
-  # Compile the If as a conditional operator.
-  compileExpression: (o) ->
-    @bodyNode().tags.operation = @condition.tags.operation = yes
-    @elseBodyNode().tags.operation = yes if @elseBody
-    ifPart      = @condition.compile(o) + ' ? ' + @bodyNode().compile(o)
-    elsePart    = if @elseBody then @elseBodyNode().compile(o) else 'undefined'
-    code        = "#{ifPart} : #{elsePart}"
-    if @tags.operation or @soakNode then "(#{code})" else code
-
-  unfoldSoak: -> @soakNode and this
-
-  # Unfold a node's child if soak, then tuck the node under created `If`
-  @unfoldSoak: (o, parent, name) ->
-    return unless ifn = parent[name].unfoldSoak o
-    parent[name] = ifn.body
-    ifn.body     = new Value parent
-    ifn
-
-# Faux-Nodes
-# ----------
-# Faux-nodes are never created by the grammar, but are used during code
-# generation to generate other combinations of nodes.
-
-#### Push
-
-# The **Push** creates the tree for `array.push(value)`,
-# which is helpful for recording the result arrays from comprehensions.
-Push =
-  wrap: (name, expressions) ->
-    return expressions if expressions.empty() or expressions.containsPureStatement()
-    Expressions.wrap [new Call(
-      new Value new Literal(name), [new Accessor new Literal 'push']
-      [expressions.unwrap()]
-    )]
-
-#### Closure
-
-# A faux-node used to wrap an expressions body in a closure.
-Closure =
-
-  # Wrap the expressions body, unless it contains a pure statement,
-  # in which case, no dice. If the body mentions `this` or `arguments`,
-  # then make sure that the closure wrapper preserves the original values.
-  wrap: (expressions, statement, noReturn) ->
-    return expressions if expressions.containsPureStatement()
-    func = new Parens new Code [], Expressions.wrap [expressions]
-    args = []
-    if (mentionsArgs = expressions.contains @literalArgs) or
-       (               expressions.contains @literalThis)
-      meth = new Literal if mentionsArgs then 'apply' else 'call'
-      args = [new Literal 'this']
-      args.push new Literal 'arguments' if mentionsArgs
-      func = new Value func, [new Accessor meth]
-      func.noReturn = noReturn
-    call = new Call func, args
-    if statement then Expressions.wrap [call] else call
-
-  literalArgs: (node) -> node instanceof Literal and node.value is 'arguments'
-  literalThis: (node) -> node instanceof Literal and node.value is 'this' or
-                         node instanceof Code    and node.bound
-
-# Constants
-# ---------
-
-UTILITIES =
-
-  # Correctly set up a prototype chain for inheritance, including a reference
-  # to the superclass for `super()` calls. See:
-  # [goog.inherits](http://closure-library.googlecode.com/svn/docs/closureGoogBase.js.source.html#line1206).
-  extends:  '''
-    function(child, parent) {
-      function ctor() { this.constructor = child; }
-      ctor.prototype = parent.prototype;
-      child.prototype = new ctor;
-      if (typeof parent.extended === "function") parent.extended(child);
-      child.__super__ = parent.prototype;
-    }
-  '''
-
-  # Create a function bound to the current value of "this".
-  bind: '''
-    function(func, context) {
-      return function() { return func.apply(context, arguments); };
-    }
-  '''
-  
-  # Discover if an item is in an array.
-  inArray: '''
-    (function() {
-      var indexOf = Array.prototype.indexOf || function(item) {
-        var i = this.length; while (i--) if (this[i] === item) return i;
-        return -1;
-      };
-      return function(item, array) { return indexOf.call(array, item) > -1; };
-    })();
-  '''
-
-  # Shortcuts to speed up the lookup time for native functions.
-  hasProp: 'Object.prototype.hasOwnProperty'
-  slice:   'Array.prototype.slice'
-
-# Tabs are two spaces for pretty printing.
-TAB = '  '
-
-# Trim out all trailing whitespace, so that the generated code plays nice
-# with Git.
-TRAILING_WHITESPACE = /[ \t]+$/gm
-
-IDENTIFIER = /^[$A-Za-z_][$\w]*$/
-NUMBER     = /^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?$/i
-SIMPLENUM  = /^[+-]?\d+$/
-
-# Is a literal value a string?
-IS_STRING = /^['"]/
-
-# Utility Functions
-# -----------------
-
-# Helper for ensuring that utility functions are assigned at the top level.
-utility = (name) ->
-  ref = "__#{name}"
-  Scope.root.assign ref, UTILITIES[name]
-  ref
diff --git a/node/node_modules/jade/support/coffee-script/src/optparse.coffee b/node/node_modules/jade/support/coffee-script/src/optparse.coffee
deleted file mode 100644 (file)
index 5a6c9ee..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# A simple **OptionParser** class to parse option flags from the command-line.
-# Use it like so:
-#
-#     parser  = new OptionParser switches, helpBanner
-#     options = parser.parse process.argv
-#
-# The first non-option is considered to be the start of the file (and file
-# option) list, and all subsequent arguments are left unparsed.
-exports.OptionParser = class OptionParser
-
-  # Initialize with a list of valid options, in the form:
-  #
-  #     [short-flag, long-flag, description]
-  #
-  # Along with an an optional banner for the usage help.
-  constructor: (rules, banner) ->
-    @banner = banner
-    @rules  = buildRules rules
-
-  # Parse the list of arguments, populating an `options` object with all of the
-  # specified options, and returning it. `options.arguments` will be an array
-  # containing the remaning non-option arguments. This is a simpler API than
-  # many option parsers that allow you to attach callback actions for every
-  # flag. Instead, you're responsible for interpreting the options object.
-  parse: (args) ->
-    options = arguments: []
-    args    = normalizeArguments args
-    for arg, i in args
-      isOption = !!(arg.match(LONG_FLAG) or arg.match(SHORT_FLAG))
-      matchedRule = no
-      for rule in @rules
-        if rule.shortFlag is arg or rule.longFlag is arg
-          value = if rule.hasArgument then args[i += 1] else true
-          options[rule.name] = if rule.isList then (options[rule.name] or []).concat value else value
-          matchedRule = yes
-          break
-      throw new Error "unrecognized option: #{arg}" if isOption and not matchedRule
-      if not isOption
-        options.arguments = args.slice i
-        break
-    options
-
-  # Return the help text for this **OptionParser**, listing and describing all
-  # of the valid options, for `--help` and such.
-  help: ->
-    lines = ['Available options:']
-    lines.unshift "#{@banner}\n" if @banner
-    for rule in @rules
-      spaces  = 15 - rule.longFlag.length
-      spaces  = if spaces > 0 then Array(spaces + 1).join(' ') else ''
-      letPart = if rule.shortFlag then rule.shortFlag + ', ' else '    '
-      lines.push '  ' + letPart + rule.longFlag + spaces + rule.description
-    "\n#{ lines.join('\n') }\n"
-
-# Helpers
-# -------
-
-# Regex matchers for option flags.
-LONG_FLAG  = /^(--\w[\w\-]+)/
-SHORT_FLAG = /^(-\w)/
-MULTI_FLAG = /^-(\w{2,})/
-OPTIONAL   = /\[(\w+(\*?))\]/
-
-# Build and return the list of option rules. If the optional *short-flag* is
-# unspecified, leave it out by padding with `null`.
-buildRules = (rules) ->
-  for tuple in rules
-    tuple.unshift null if tuple.length < 3
-    buildRule tuple...
-
-# Build a rule from a `-o` short flag, a `--output [DIR]` long flag, and the
-# description of what the option does.
-buildRule = (shortFlag, longFlag, description, options) ->
-  match     = longFlag.match(OPTIONAL)
-  longFlag  = longFlag.match(LONG_FLAG)[1]
-  options or= {}
-  {
-    name:         longFlag.substr 2
-    shortFlag:    shortFlag
-    longFlag:     longFlag
-    description:  description
-    hasArgument:  !!(match and match[1])
-    isList:       !!(match and match[2])
-  }
-
-# Normalize arguments by expanding merged flags into multiple flags. This allows
-# you to have `-wl` be the same as `--watch --lint`.
-normalizeArguments = (args) ->
-  args = args.slice 0
-  result = []
-  for arg in args
-    if match = arg.match MULTI_FLAG
-      result.push '-' + l for l in match[1].split ''
-    else
-      result.push arg
-  result
diff --git a/node/node_modules/jade/support/coffee-script/src/repl.coffee b/node/node_modules/jade/support/coffee-script/src/repl.coffee
deleted file mode 100644 (file)
index 294146b..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# A very simple Read-Eval-Print-Loop. Compiles one line at a time to JavaScript
-# and evaluates it. Good for simple tests, or poking around the **Node.js** API.
-# Using it looks like this:
-#
-#     coffee> puts "#{num} bottles of beer" for num in [99..1]
-
-# Require the **coffee-script** module to get access to the compiler.
-CoffeeScript = require './coffee-script'
-helpers      = require './helpers'
-readline     = require 'readline'
-
-# Start by opening up **stdio**.
-stdio = process.openStdin()
-
-# Quick alias for quitting the REPL.
-helpers.extend global, quit: -> process.exit(0)
-
-# The main REPL function. **run** is called every time a line of code is entered.
-# Attempt to evaluate the command. If there's an exception, print it out instead
-# of exiting.
-run = (buffer) ->
-  try
-    val = CoffeeScript.eval buffer.toString(), bare: on, globals: on, fileName: 'repl'
-    puts inspect val if val isnt undefined
-  catch err
-    puts err.stack or err.toString()
-  repl.prompt()
-
-# Create the REPL by listening to **stdin**.
-repl = readline.createInterface stdio
-repl.setPrompt 'coffee> '
-stdio.on 'data',   (buffer) -> repl.write buffer
-repl.on  'close',  -> stdio.destroy()
-repl.on  'line',   run
-repl.prompt()
diff --git a/node/node_modules/jade/support/coffee-script/src/rewriter.coffee b/node/node_modules/jade/support/coffee-script/src/rewriter.coffee
deleted file mode 100644 (file)
index 5ea0298..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-# The CoffeeScript language has a good deal of optional syntax, implicit syntax,
-# and shorthand syntax. This can greatly complicate a grammar and bloat
-# the resulting parse table. Instead of making the parser handle it all, we take
-# a series of passes over the token stream, using this **Rewriter** to convert
-# shorthand into the unambiguous long form, add implicit indentation and
-# parentheses, balance incorrect nestings, and generally clean things up.
-
-# Import the helpers we need.
-{include} = require './helpers'
-
-# The **Rewriter** class is used by the [Lexer](lexer.html), directly against
-# its internal array of tokens.
-class exports.Rewriter
-
-  # Helpful snippet for debugging:
-  #     puts (t[0] + '/' + t[1] for t in @tokens).join ' '
-
-  # Rewrite the token stream in multiple passes, one logical filter at
-  # a time. This could certainly be changed into a single pass through the
-  # stream, with a big ol' efficient switch, but it's much nicer to work with
-  # like this. The order of these passes matters -- indentation must be
-  # corrected before implicit parentheses can be wrapped around blocks of code.
-  rewrite: (@tokens) ->
-    @adjustComments()
-    @removeLeadingNewlines()
-    @removeMidExpressionNewlines()
-    @closeOpenCalls()
-    @closeOpenIndexes()
-    @addImplicitIndentation()
-    @tagPostfixConditionals()
-    @addImplicitBraces()
-    @addImplicitParentheses()
-    @ensureBalance BALANCED_PAIRS
-    @rewriteClosingParens()
-    @tokens
-
-  # Rewrite the token stream, looking one token ahead and behind.
-  # Allow the return value of the block to tell us how many tokens to move
-  # forwards (or backwards) in the stream, to make sure we don't miss anything
-  # as tokens are inserted and removed, and the stream changes length under
-  # our feet.
-  scanTokens: (block) ->
-    {tokens} = this
-    i = 0
-    i += block.call this, token, i, tokens while token = tokens[i]
-    true
-
-  detectEnd: (i, condition, action) ->
-    {tokens} = this
-    levels = 0
-    while token = tokens[i]
-      return action.call this, token, i     if levels is 0 and condition.call this, token, i
-      return action.call this, token, i - 1 if not token or levels < 0
-      if include EXPRESSION_START, token[0]
-        levels += 1
-      else if include EXPRESSION_END, token[0]
-        levels -= 1
-      i += 1
-    i - 1
-
-  # Massage newlines and indentations so that comments don't have to be
-  # correctly indented, or appear on a line of their own.
-  adjustComments: ->
-    @scanTokens (token, i, tokens) ->
-      return 1 unless token[0] is 'HERECOMMENT'
-      before = tokens[i - 2]
-      prev   = tokens[i - 1]
-      post   = tokens[i + 1]
-      after  = tokens[i + 2]
-      if after?[0] is 'INDENT'
-        tokens.splice i + 2, 1
-        if before?[0] is 'OUTDENT' and post?[0] is 'TERMINATOR'
-          tokens.splice i - 2, 1
-        else
-          tokens.splice i, 0, after
-      else if prev and prev[0] not in ['TERMINATOR', 'INDENT', 'OUTDENT']
-        if post?[0] is 'TERMINATOR' and after?[0] is 'OUTDENT'
-          tokens.splice i + 2, 0, tokens.splice(i, 2)...
-          if tokens[i + 2][0] isnt 'TERMINATOR'
-            tokens.splice i + 2, 0, ['TERMINATOR', '\n', prev[2]]
-        else
-          tokens.splice i, 0, ['TERMINATOR', '\n', prev[2]]
-        return 2
-      1
-
-  # Leading newlines would introduce an ambiguity in the grammar, so we
-  # dispatch them here.
-  removeLeadingNewlines: ->
-    break for [tag], i in @tokens when tag isnt 'TERMINATOR'
-    @tokens.splice 0, i if i
-
-  # Some blocks occur in the middle of expressions -- when we're expecting
-  # this, remove their trailing newlines.
-  removeMidExpressionNewlines: ->
-    @scanTokens (token, i, tokens) ->
-      return 1 unless token[0] is 'TERMINATOR' and include EXPRESSION_CLOSE, @tag(i + 1)
-      tokens.splice i, 1
-      0
-
-  # The lexer has tagged the opening parenthesis of a method call. Match it with
-  # its paired close. We have the mis-nested outdent case included here for
-  # calls that close on the same line, just before their outdent.
-  closeOpenCalls: ->
-    condition = (token, i) ->
-      token[0] in [')', 'CALL_END'] or
-      token[0] is 'OUTDENT' and @tag(i - 1) is ')'
-    action = (token, i) ->
-      @tokens[if token[0] is 'OUTDENT' then i - 1 else i][0] = 'CALL_END'
-    @scanTokens (token, i) ->
-      @detectEnd i + 1, condition, action if token[0] is 'CALL_START'
-      1
-
-  # The lexer has tagged the opening parenthesis of an indexing operation call.
-  # Match it with its paired close.
-  closeOpenIndexes: ->
-    condition = (token, i) -> token[0] in [']', 'INDEX_END']
-    action    = (token, i) -> token[0] = 'INDEX_END'
-    @scanTokens (token, i) ->
-      @detectEnd i + 1, condition, action if token[0] is 'INDEX_START'
-      1
-
-  # Object literals may be written with implicit braces, for simple cases.
-  # Insert the missing braces here, so that the parser doesn't have to.
-  addImplicitBraces: ->
-    stack = []
-    condition = (token, i) ->
-      return false if 'HERECOMMENT' in [@tag(i + 1), @tag(i - 1)]
-      [one, two, three] = @tokens.slice i + 1, i + 4
-      [tag] = token
-      tag in ['TERMINATOR', 'OUTDENT'] and not (two?[0] is ':' or one?[0] is '@' and three?[0] is ':') or
-      tag is ',' and one?[0] not in ['IDENTIFIER', 'NUMBER', 'STRING', '@', 'TERMINATOR', 'OUTDENT']
-    action = (token, i) -> @tokens.splice i, 0, ['}', '}', token[2]]
-    @scanTokens (token, i, tokens) ->
-      if include EXPRESSION_START, tag = token[0]
-        stack.push if tag is 'INDENT' and @tag(i - 1) is '{' then '{' else tag
-        return 1
-      if include EXPRESSION_END, tag
-        stack.pop()
-        return 1
-      return 1 unless tag is ':' and stack[stack.length - 1] isnt '{'
-      stack.push '{'
-      idx = if @tag(i - 2) is '@' then i - 2 else i - 1
-      idx -= 2 if @tag(idx - 2) is 'HERECOMMENT'
-      tok = ['{', '{', token[2]]
-      tok.generated = yes
-      tokens.splice idx, 0, tok
-      @detectEnd i + 2, condition, action
-      2
-
-  # Methods may be optionally called without parentheses, for simple cases.
-  # Insert the implicit parentheses here, so that the parser doesn't have to
-  # deal with them.
-  addImplicitParentheses: ->
-    classLine = no
-    action = (token, i) ->
-      idx = if token[0] is 'OUTDENT' then i + 1 else i
-      @tokens.splice idx, 0, ['CALL_END', ')', token[2]]
-    @scanTokens (token, i, tokens) ->
-      tag        = token[0]
-      classLine  = yes if tag is 'CLASS'
-      prev       = tokens[i - 1]
-      next       = tokens[i + 1]
-      callObject = not classLine and tag is 'INDENT' and
-                   next and next.generated and next[0] is '{' and
-                   prev and include(IMPLICIT_FUNC, prev[0])
-      seenSingle = no
-      classLine  = no  if include LINEBREAKS, tag
-      token.call = yes if prev and not prev.spaced and tag is '?'
-      return 1 unless callObject or
-        prev?.spaced and (prev.call or include(IMPLICIT_FUNC, prev[0])) and
-        (include(IMPLICIT_CALL, tag) or include(IMPLICIT_UNSPACED_CALL, tag) and not token.spaced)
-      tokens.splice i, 0, ['CALL_START', '(', token[2]]
-      @detectEnd i + (if callObject then 2 else 1), (token, i) ->
-        return yes if not seenSingle and token.fromThen
-        [tag] = token
-        seenSingle = yes if tag in ['IF', 'ELSE', 'UNLESS', '->', '=>']
-        return yes if tag is 'PROPERTY_ACCESS' and @tag(i - 1) is 'OUTDENT'
-        not token.generated and @tag(i - 1) isnt ',' and include(IMPLICIT_END, tag) and
-        (tag isnt 'INDENT' or
-         (@tag(i - 2) isnt 'CLASS' and not include(IMPLICIT_BLOCK, @tag(i - 1)) and
-          not ((post = @tokens[i + 1]) and post.generated and post[0] is '{')))
-      , action
-      prev[0] = 'FUNC_EXIST' if prev[0] is '?'
-      2
-
-  # Because our grammar is LALR(1), it can't handle some single-line
-  # expressions that lack ending delimiters. The **Rewriter** adds the implicit
-  # blocks, so it doesn't need to. ')' can close a single-line block,
-  # but we need to make sure it's balanced.
-  addImplicitIndentation: ->
-    @scanTokens (token, i, tokens) ->
-      [tag] = token
-      if tag is 'ELSE' and @tag(i - 1) isnt 'OUTDENT'
-        tokens.splice i, 0, @indentation(token)...
-        return 2
-      if tag is 'CATCH' and @tag(i + 2) in ['TERMINATOR', 'FINALLY']
-        tokens.splice i + 2, 0, @indentation(token)...
-        return 4
-      if include(SINGLE_LINERS, tag) and @tag(i + 1) isnt 'INDENT' and
-         not (tag is 'ELSE' and @tag(i + 1) is 'IF')
-        starter = tag
-        [indent, outdent] = @indentation token
-        indent.fromThen   = true if starter is 'THEN'
-        indent.generated  = outdent.generated = true
-        tokens.splice i + 1, 0, indent
-        condition = (token, i) ->
-          token[1] isnt ';' and include(SINGLE_CLOSERS, token[0]) and
-          not (token[0] is 'ELSE' and starter not in ['IF', 'THEN'])
-        action = (token, i) ->
-          @tokens.splice (if @tag(i - 1) is ',' then i - 1 else i), 0, outdent
-        @detectEnd i + 2, condition, action
-        tokens.splice i, 1 if tag is 'THEN'
-        return 1
-      return 1
-
-  # Tag postfix conditionals as such, so that we can parse them with a
-  # different precedence.
-  tagPostfixConditionals: ->
-    condition = (token, i) -> token[0] in ['TERMINATOR', 'INDENT']
-    @scanTokens (token, i) ->
-      return 1 unless token[0] in ['IF', 'UNLESS']
-      original = token
-      @detectEnd i + 1, condition, (token, i) ->
-        original[0] = 'POST_' + original[0] if token[0] isnt 'INDENT'
-      1
-
-  # Ensure that all listed pairs of tokens are correctly balanced throughout
-  # the course of the token stream.
-  ensureBalance: (pairs) ->
-    levels   = {}
-    openLine = {}
-    @scanTokens (token, i) ->
-      [tag] = token
-      for [open, close] in pairs
-        levels[open] |= 0
-        if tag is open
-          openLine[open] = token[2] if levels[open] is 0
-          levels[open] += 1
-        else if tag is close
-          levels[open] -= 1
-        throw Error "too many #{token[1]} on line #{token[2] + 1}" if levels[open] < 0
-      1
-    unclosed = key for all key, value of levels when value > 0
-    if unclosed.length
-      throw Error "unclosed #{ open = unclosed[0] } on line #{openLine[open] + 1}"
-
-  # We'd like to support syntax like this:
-  #
-  #     el.click((event) ->
-  #       el.hide())
-  #
-  # In order to accomplish this, move outdents that follow closing parens
-  # inwards, safely. The steps to accomplish this are:
-  #
-  # 1. Check that all paired tokens are balanced and in order.
-  # 2. Rewrite the stream with a stack: if you see an `EXPRESSION_START`, add it
-  #    to the stack. If you see an `EXPRESSION_END`, pop the stack and replace
-  #    it with the inverse of what we've just popped.
-  # 3. Keep track of "debt" for tokens that we manufacture, to make sure we end
-  #    up balanced in the end.
-  # 4. Be careful not to alter array or parentheses delimiters with overzealous
-  #    rewriting.
-  rewriteClosingParens: ->
-    stack = []
-    debt  = {}
-    (debt[key] = 0) for all key of INVERSES
-    @scanTokens (token, i, tokens) ->
-      if include EXPRESSION_START, tag = token[0]
-        stack.push token
-        return 1
-      return 1 unless include EXPRESSION_END, tag
-      if debt[inv = INVERSES[tag]] > 0
-        debt[inv] -= 1
-        tokens.splice i, 1
-        return 0
-      match = stack.pop()
-      mtag  = match[0]
-      oppos = INVERSES[mtag]
-      return 1 if tag is oppos
-      debt[mtag] += 1
-      val = [oppos, if mtag is 'INDENT' then match[1] else oppos]
-      if @tag(i + 2) is mtag
-        tokens.splice i + 3, 0, val
-        stack.push match
-      else
-        tokens.splice i, 0, val
-      1
-
-  # Generate the indentation tokens, based on another token on the same line.
-  indentation: (token) ->
-    [['INDENT', 2, token[2]], ['OUTDENT', 2, token[2]]]
-
-  # Look up a tag by token index.
-  tag: (i) -> @tokens[i]?[0]
-
-# Constants
-# ---------
-
-# List of the token pairs that must be balanced.
-BALANCED_PAIRS = [
-  ['(', ')']
-  ['[', ']']
-  ['{', '}']
-  ['INDENT', 'OUTDENT'],
-  ['CALL_START', 'CALL_END']
-  ['PARAM_START', 'PARAM_END']
-  ['INDEX_START', 'INDEX_END']
-]
-
-# The inverse mappings of `BALANCED_PAIRS` we're trying to fix up, so we can
-# look things up from either end.
-INVERSES = {}
-
-# The tokens that signal the start/end of a balanced pair.
-EXPRESSION_START = []
-EXPRESSION_END   = []
-
-for [left, rite] in BALANCED_PAIRS
-  EXPRESSION_START.push INVERSES[rite] = left
-  EXPRESSION_END  .push INVERSES[left] = rite
-
-# Tokens that indicate the close of a clause of an expression.
-EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat EXPRESSION_END
-
-# Tokens that, if followed by an `IMPLICIT_CALL`, indicate a function invocation.
-IMPLICIT_FUNC    = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS']
-
-# If preceded by an `IMPLICIT_FUNC`, indicates a function invocation.
-IMPLICIT_CALL    = [
-  'IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS'
-  'IF', 'UNLESS', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'UNARY',
-  '@', '->', '=>', '[', '(', '{', '--', '++'
-]
-
-IMPLICIT_UNSPACED_CALL = ['+', '-']
-
-# Tokens indicating that the implicit call must enclose a block of expressions.
-IMPLICIT_BLOCK   = ['->', '=>', '{', '[', ',']
-
-# Tokens that always mark the end of an implicit call for single-liners.
-IMPLICIT_END     = ['POST_IF', 'POST_UNLESS', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'TERMINATOR', 'INDENT']
-
-# Single-line flavors of block expressions that have unclosed endings.
-# The grammar can't disambiguate them, so we insert the implicit indentation.
-SINGLE_LINERS    = ['ELSE', '->', '=>', 'TRY', 'FINALLY', 'THEN']
-SINGLE_CLOSERS   = ['TERMINATOR', 'CATCH', 'FINALLY', 'ELSE', 'OUTDENT', 'LEADING_WHEN']
-
-# Tokens that end a line.
-LINEBREAKS       = ['TERMINATOR', 'INDENT', 'OUTDENT']
diff --git a/node/node_modules/jade/support/coffee-script/src/scope.coffee b/node/node_modules/jade/support/coffee-script/src/scope.coffee
deleted file mode 100644 (file)
index 3a1aad3..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# The **Scope** class regulates lexical scoping within CoffeeScript. As you
-# generate code, you create a tree of scopes in the same shape as the nested
-# function bodies. Each scope knows about the variables declared within it,
-# and has a reference to its parent enclosing scope. In this way, we know which
-# variables are new and need to be declared with `var`, and which are shared
-# with the outside.
-
-# Import the helpers we plan to use.
-{extend, last} = require './helpers'
-
-exports.Scope = class Scope
-
-  # The top-level **Scope** object.
-  @root: null
-
-  # Initialize a scope with its parent, for lookups up the chain,
-  # as well as a reference to the **Expressions** node is belongs to, which is
-  # where it should declare its variables, and a reference to the function that
-  # it wraps.
-  constructor: (@parent, @expressions, @method) ->
-    @variables = {'arguments'}
-    if @parent
-      @garbage = @parent.garbage
-    else
-      @garbage   = []
-      Scope.root = this
-
-  # Create a new garbage level
-  startLevel: ->
-    @garbage.push []
-
-  # Return to the previous garbage level and erase referenced temporary
-  # variables in current level from scope.
-  endLevel: ->
-    vars = @variables
-    (vars[name] = 'reuse') for name in @garbage.pop() when vars[name] is 'var'
-
-  # Look up a variable name in lexical scope, and declare it if it does not
-  # already exist.
-  find: (name, options) ->
-    return true if @check name, options
-    @variables[name] = 'var'
-    false
-
-  # Test variables and return true the first time fn(v, k) returns true
-  any: (fn) ->
-    for v, k of @variables when fn(v, k)
-      return true
-    return false
-
-  # Reserve a variable name as originating from a function parameter for this
-  # scope. No `var` required for internal references.
-  parameter: (name) ->
-    @variables[name] = 'param'
-
-  # Just check to see if a variable has already been declared, without reserving,
-  # walks up to the root scope.
-  check: (name, options) ->
-    immediate = Object::hasOwnProperty.call @variables, name
-    return immediate if immediate or options?.immediate
-    !!@parent?.check name
-
-  # Generate a temporary variable name at the given index.
-  temporary: (type, index) ->
-    if type.length > 1
-      '_' + type + if index > 1 then index else ''
-    else
-      '_' + (index + parseInt type, 36).toString(36).replace /\d/g, 'a'
-
-  # If we need to store an intermediate result, find an available name for a
-  # compiler-generated variable. `_var`, `_var2`, and so on...
-  freeVariable: (type) ->
-    index = 0
-    index++ while @check(temp = @temporary type, index) and @variables[temp] isnt 'reuse'
-    @variables[temp] = 'var'
-    last(@garbage).push temp if @garbage.length
-    temp
-
-  # Ensure that an assignment is made at the top of this scope
-  # (or at the top-level scope, if requested).
-  assign: (name, value) ->
-    @variables[name] = value: value, assigned: true
-
-  # Does this scope reference any variables that need to be declared in the
-  # given function body?
-  hasDeclarations: (body) ->
-    body is @expressions and @any (k, val) -> val in ['var', 'reuse']
-
-  # Does this scope reference any assignments that need to be declared at the
-  # top of the given function body?
-  hasAssignments: (body) ->
-    body is @expressions and @any (k, val) -> val.assigned
-
-  # Return the list of variables first declared in this scope.
-  declaredVariables: ->
-    (key for key, val of @variables when val in ['var', 'reuse']).sort()
-
-  # Return the list of assignments that are supposed to be made at the top
-  # of this scope.
-  assignedVariables: ->
-    "#{key} = #{val.value}" for key, val of @variables when val.assigned
-
-  # Compile the JavaScript for all of the variable declarations in this scope.
-  compiledDeclarations: ->
-    @declaredVariables().join ', '
-
-  # Compile the JavaScript forall of the variable assignments in this scope.
-  compiledAssignments: ->
-    @assignedVariables().join ', '
diff --git a/node/node_modules/jade/support/coffee-script/test/test.html b/node/node_modules/jade/support/coffee-script/test/test.html
deleted file mode 100644 (file)
index fff780c..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-  <title>CoffeeScript Test Suite</title>
-  <script src="../extras/coffee-script.js"></script>
-  <style>
-    body {
-      margin: 30px;
-      font-family: Menlo, Monaco, monospace;
-    }
-    h1 {
-      font-size: 20px;
-    }
-    #stdout {
-    }
-  </style>
-</head>
-<body>
-
-  <h1>CoffeeScript Test Suite</h1>
-  <pre id="stdout"></pre>
-
-  <script type="text/coffeescript">
-
-  stdout  = document.getElementById 'stdout'
-  start   = new Date
-  success = total = done = failed = 0
-
-  say = (msg, yay) ->
-    div = document.createElement 'div'
-    div.appendChild document.createTextNode msg
-    div.style.color = if yay then 'green' else 'red'
-    stdout.appendChild div
-    msg
-
-  this.ok = (good, msg) ->
-    ++total
-    if good then ++success else throw Error say msg
-
-  this.eq = (x, y, msg) -> ok x is y, msg ? x + ' !== ' + y
-
-  this.throws = (fun, err, msg) ->
-    try fun(); throw new String 'No Error'
-    catch e then eq e, err
-
-  CoffeeScript.run = (code, cb) ->
-    try Function(CoffeeScript.compile code, wrap: no)()
-    catch e then cb(); throw e
-    cb yes
-
-  run = (name) ->
-    CoffeeScript.load "test_#{name}.coffee", (yay) ->
-      say "#{ if yay then '\u2714' else '\u3000' } #{name}", yay
-      ++failed unless yay
-      fin() if ++done is names.length
-
-  fin = ->
-    yay = success is total and not failed
-    sec = (new Date - start) / 1000
-    msg = "passed #{success} tests in #{ sec.toFixed 2 } seconds"
-    msg = "failed #{ total - success } tests and #{msg}" unless yay
-    say msg, yay
-
-  run name for name in names = [
-    'arguments'
-    'assignment'
-    'break'
-    'chaining'
-    'classes'
-    'comments'
-    'compilation'
-    'compound_assignment'
-    'comprehensions'
-    'existence'
-    'expressions'
-    'functions'
-    'helpers'
-    'heredocs'
-    'if'
-    'literals'
-    'operations'
-    'pattern_matching'
-    'regexps'
-    'returns'
-    'splats'
-    'strings'
-    'switch'
-    'try_catch'
-    'while'
-  ]
-  </script>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/test/test_arguments.coffee b/node/node_modules/jade/support/coffee-script/test/test_arguments.coffee
deleted file mode 100644 (file)
index a45044b..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-area = (x, y, x1, y1) ->
-  (x - x1) * (x - y1)
-
-x  = y  = 10
-x1 = y1 = 20
-
-ok area(x, y, x1, y1) is 100
-
-# ok(area(x, y,
-#            x1, y1) is 100)
-
-ok(area(
-  x
-  y
-  x1
-  y1
-) is 100)
-
-
-sumOfArgs = ->
-  sum = 0
-  sum += val for val in arguments
-  sum
-
-ok sumOfArgs(1, 2, 3, 4, 5) is 15
-
-
-((@arg) ->).call context = {}, 1
-ok context.arg is 1
-
-((splat..., @arg) ->).call context, 1, 2, 3
-ok context.arg is 3
-
-((@arg...) ->).call context, 1, 2, 3
-ok context.arg.join ' ' is '1 2 3'
-
-class Klass
-  constructor: (@one, @two) ->
-
-obj = new Klass 1, 2
-
-ok obj.one is 1
-ok obj.two is 2
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/test/test_assignment.coffee b/node/node_modules/jade/support/coffee-script/test/test_assignment.coffee
deleted file mode 100644 (file)
index 00d3e10..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Can assign the result of a try/catch block.
-result = try
-  nonexistent * missing
-catch error
-  true
-
-result2 = try nonexistent * missing catch error then true
-
-ok result is true and result2 is true
-
-
-# Can assign a conditional statement.
-getX = -> 10
-
-if x = getX() then 100
-
-ok x is 10
-
-x = if getX() then 100
-
-ok x is 100
-
-
-# This-assignment.
-tester = ->
-  @example = -> 'example function'
-  this
-
-ok tester().example() is 'example function'
-
-
-try throw CoffeeScript.tokens 'in = 1'
-catch e then eq e.message, 'Reserved word "in" on line 1 can\'t be assigned'
diff --git a/node/node_modules/jade/support/coffee-script/test/test_break.coffee b/node/node_modules/jade/support/coffee-script/test/test_break.coffee
deleted file mode 100644 (file)
index 7a6219f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Test with break at the top level.
-array = [1,2,3]
-callWithLambda = (l) -> null
-for i in array
-  result = callWithLambda(->)
-  if i == 2
-    puts "i = 2"
-  else
-    break
-
-ok result is null
-
-
-# Test with break *not* at the top level.
-someFunc = (input) ->
-  takesLambda = (l) -> null
-  for i in [1,2]
-    result = takesLambda(->)
-    if input == 1
-      return 1
-    else
-      break
-
-  return 2
-
-ok someFunc(1) is 1
-ok someFunc(2) is 2
-
diff --git a/node/node_modules/jade/support/coffee-script/test/test_chaining.coffee b/node/node_modules/jade/support/coffee-script/test/test_chaining.coffee
deleted file mode 100644 (file)
index 7154a83..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-# Basic chained function calls.
-identityWrap = (x) ->
-  -> x
-
-result = identityWrap(identityWrap(true))()()
-
-ok result
-
-
-# Chained accesses split on period/newline, backwards and forwards.
-str = 'god'
-
-result = str.
-  split('').
-  reverse().
-  reverse().
-  reverse()
-
-ok result.join('') is 'dog'
-
-result = str
-  .split('')
-  .reverse()
-  .reverse()
-  .reverse()
-
-ok result.join('') is 'dog'
-
-
-# Newline suppression for operators.
-six =
-  1 +
-  2 +
-  3
-
-ok six is 6
-
-
-# Ensure that indented array literals don't trigger whitespace rewriting.
-func = () ->
-  ok arguments.length is 1
-
-func(
-  [[[[[],
-                []],
-              [[]]]],
-    []])
-
-id = (x) -> x
-
-greeting = id(
-              """
-              Hello
-              """)
-
-ok greeting is "Hello"
diff --git a/node/node_modules/jade/support/coffee-script/test/test_classes.coffee b/node/node_modules/jade/support/coffee-script/test/test_classes.coffee
deleted file mode 100644 (file)
index ea1df23..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-# Test classes with a four-level inheritance chain.
-class Base
-  func: (string) ->
-    "zero/#{string}"
-
-  @static: (string) ->
-    "static/#{string}"
-
-class FirstChild extends Base
-  func: (string) ->
-    super('one/') + string
-
-SecondChild = class extends FirstChild
-  func: (string) ->
-    super('two/') + string
-
-thirdCtor = ->
-  @array = [1, 2, 3]
-
-class ThirdChild extends SecondChild
-  constructor: thirdCtor
-
-  # Gratuitous comment for testing.
-  func: (string) ->
-    super('three/') + string
-
-result = (new ThirdChild).func 'four'
-
-ok result is 'zero/one/two/three/four'
-ok Base.static('word') is 'static/word'
-
-FirstChild::func = (string) ->
-  super('one/').length + string
-
-result = (new ThirdChild).func 'four'
-
-ok result is '9two/three/four'
-
-ok (new ThirdChild).array.join(' ') is '1 2 3'
-
-
-class TopClass
-  constructor: (arg) ->
-    @prop = 'top-' + arg
-
-class SuperClass extends TopClass
-  constructor: (arg) ->
-    super 'super-' + arg
-
-class SubClass extends SuperClass
-  constructor: ->
-    super 'sub'
-
-ok (new SubClass).prop is 'top-super-sub'
-
-
-class OneClass
-  @new: 'new'
-  function: 'function'
-  constructor: (name) -> @name = name
-
-class TwoClass extends OneClass
-
-Function.prototype.new = -> new this arguments...
-
-ok (TwoClass.new('three')).name is 'three'
-ok (new OneClass).function is 'function'
-ok OneClass.new is 'new'
-
-delete Function.prototype.new
-
-
-# And now the same tests, but written in the manual style:
-Base = ->
-Base::func = (string) ->
-  'zero/' + string
-Base::['func-func'] = (string) ->
-  "dynamic-#{string}"
-
-FirstChild = ->
-FirstChild extends Base
-FirstChild::func = (string) ->
-  super('one/') + string
-
-SecondChild = ->
-SecondChild extends FirstChild
-SecondChild::func = (string) ->
-  super('two/') + string
-
-ThirdChild = ->
-  @array = [1, 2, 3]
-  this
-ThirdChild extends SecondChild
-ThirdChild::func = (string) ->
-  super('three/') + string
-
-result = (new ThirdChild).func 'four'
-
-ok result is 'zero/one/two/three/four'
-
-ok (new ThirdChild)['func-func']('thing') is 'dynamic-thing'
-
-
-TopClass = (arg) ->
-  @prop = 'top-' + arg
-  this
-
-SuperClass = (arg) ->
-  super 'super-' + arg
-  this
-
-SubClass = ->
-  super 'sub'
-  this
-
-SuperClass extends TopClass
-SubClass extends SuperClass
-
-ok (new SubClass).prop is 'top-super-sub'
-
-
-# '@' referring to the current instance, and not being coerced into a call.
-class ClassName
-  amI: ->
-    @ instanceof ClassName
-
-obj = new ClassName
-ok obj.amI()
-
-
-# super() calls in constructors of classes that are defined as object properties.
-class Hive
-  constructor: (name) -> @name = name
-
-class Hive.Bee extends Hive
-  constructor: (name) -> super
-
-maya = new Hive.Bee 'Maya'
-ok maya.name is 'Maya'
-
-
-# Class with JS-keyword properties.
-class Class
-  class: 'class'
-  name: -> @class
-
-instance = new Class
-ok instance.class is 'class'
-ok instance.name() is 'class'
-
-
-# Classes with methods that are pre-bound to the instance.
-# ... or statically, to the class.
-class Dog
-
-  constructor: (name) ->
-    @name = name
-
-  bark: =>
-    "#{@name} woofs!"
-
-  @static: =>
-    new this('Dog')
-
-spark = new Dog('Spark')
-fido  = new Dog('Fido')
-fido.bark = spark.bark
-
-ok fido.bark() is 'Spark woofs!'
-
-obj = func: Dog.static
-
-ok obj.func().name is 'Dog'
-
-
-# Testing a bound function in a bound function.
-class Mini
-  num: 10
-  generate: =>
-    for i in [1..3]
-      =>
-        @num
-
-m = new Mini
-ok (func() for func in m.generate()).join(' ') is '10 10 10'
-
-
-# Testing a contructor called with varargs.
-class Connection
-  constructor: (one, two, three) ->
-    [@one, @two, @three] = [one, two, three]
-
-  out: ->
-    "#{@one}-#{@two}-#{@three}"
-
-list = [3, 2, 1]
-conn = new Connection list...
-ok conn instanceof Connection
-ok conn.out() is '3-2-1'
-
-
-# Test calling super and passing along all arguments.
-class Parent
-  method: (args...) -> @args = args
-
-class Child extends Parent
-  method: -> super
-
-c = new Child
-c.method 1, 2, 3, 4
-ok c.args.join(' ') is '1 2 3 4'
-
-
-# Test `extended` callback.
-class Base
-  @extended: (subclass) ->
-    for key, value of @
-      subclass[key] = value
-
-class Element extends Base
-  @fromHTML: (html) ->
-    node = "..."
-    new @(node)
-
-  constructor: (node) ->
-    @node = node
-
-ok Element.extended is Base.extended
-ok Element.__super__ is Base.prototype
-
-class MyElement extends Element
-
-ok MyElement.extended is Base.extended
-ok MyElement.fromHTML is Element.fromHTML
-ok MyElement.__super__ is Element.prototype
-
-
-# Test classes wrapped in decorators.
-func = (klass) ->
-  klass::prop = 'value'
-  klass
-
-func class Test
-  prop2: 'value2'
-
-ok (new Test).prop  is 'value'
-ok (new Test).prop2 is 'value2'
-
-
-# Test anonymous classes.
-obj =
-  klass: class
-    method: -> 'value'
-
-instance = new obj.klass
-ok instance.method() is 'value'
-
-
-# Implicit objects as static properties.
-class Static
-  @static:
-    one: 1
-    two: 2
-
-ok Static.static.one is 1
-ok Static.static.two is 2
-
-
-# Nothing classes.
-c = class
-ok c instanceof Function
-
-
-# Classes with value'd constructors.
-counter = 0
-classMaker = ->
-  counter += 1
-  inner = counter
-  ->
-    @value = inner
-
-class One
-  constructor: classMaker()
-
-class Two
-  constructor: classMaker()
-
-ok (new One).value is 1
-ok (new Two).value is 2
-ok (new One).value is 1
-ok (new Two).value is 2
diff --git a/node/node_modules/jade/support/coffee-script/test/test_comments.coffee b/node/node_modules/jade/support/coffee-script/test/test_comments.coffee
deleted file mode 100644 (file)
index 7743e1b..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-# comment before a ...
-
-###
-... block comment.
-###
-
-
-  # comment
-func = ->
-# comment
-  false
-  false   # comment
-  false
-
-# comment
-  true
-
-switch 'string'
-  # comment
-  when false then something()
-  # comment
-  when null
-    somethingElse()
-
-->
-  code()
-  # comment
-
-ok func()
-
-func
-func
-# Line3
-
-obj = {
-# comment
-  # comment
-    # comment
-  one: 1
-# comment
-  two: 2
-    # comment
-}
-
-result = if true # comment
-  false
-
-ok not result
-
-result = if false
-  false
-else # comment
-  45
-
-ok result is 45
-
-
-test =
-  'test ' +
-  'test ' + # comment
-  'test'
-
-ok test is 'test test test'
-
-###
-  This is a here-comment.
-  Kind of like a heredoc.
-###
-
-func = ->
-  ###
-  Another block comment.
-  ###
-  code
-
-func = ->
-  one = ->
-    two = ->
-      three = ->
-  ###
-  block.
-  ###
-  four = ->
-
-fn1 = ->
-  oneLevel = null
-###
-This isn't fine.
-###
-
-ok ok
-
-obj = {
-  a: 'b'
-  ###
-  comment
-  ###
-  c: 'd'
-}
-
-arr = [
-  1, 2, 3,
-  ###
-  four
-  ###
-  5, 6, 7
-]
-
-# Spaced comments in if / elses.
-result = if false
-  1
-
-# comment
-else if false
-  2
-
-# comment
-else
-  3
-
-ok result is 3
-
-
-result = switch 'z'
-  when 'z' then 7
-# comment
-ok result is 7
-
-
-# Trailing-line comment before an outdent.
-func = ->
-  if true
-    true # comment
-  7
-
-ok func() is 7
-
-
-# Trailing herecomment in a function.
-fn = ->
-  code
-  ###
-  debug code commented
-  ###
-
-fn2 = ->
-
-
-class A
-  b: ->
-
-  ###
-  Comment
-  ###
-  c: ->
-
-ok A.prototype.c instanceof Function
-
-class A
-  ###
-  Comment
-  ###
-  b: ->
-  c: ->
-
-ok A.prototype.b instanceof Function
diff --git a/node/node_modules/jade/support/coffee-script/test/test_compilation.coffee b/node/node_modules/jade/support/coffee-script/test/test_compilation.coffee
deleted file mode 100644 (file)
index ad8c65b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# Ensure that carriage returns don't break compilation on Windows.
-eq CoffeeScript.compile('one\r\ntwo', bare: on), 'one;\ntwo;'
-
-# `globals: on` removes `var`s
-eq CoffeeScript.compile('x = y', bare: on, globals: on), 'x = y;'
-
-ok 'passed' is CoffeeScript.eval '"passed"', bare: on, fileName: 'test'
-
-#750
-try ok not CoffeeScript.nodes 'f(->'
-catch e then eq e.message, 'unclosed CALL_START on line 1'
diff --git a/node/node_modules/jade/support/coffee-script/test/test_compound_assignment.coffee b/node/node_modules/jade/support/coffee-script/test/test_compound_assignment.coffee
deleted file mode 100644 (file)
index cc2fe58..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-num = 10
-num -= 5
-eq num, 5
-
-num *= 10
-eq num, 50
-
-num /= 10
-eq num, 5
-
-num %= 3
-eq num, 2
-
-val = false
-val ||= 'value'
-val ||= 'eulav'
-eq val, 'value'
-
-val &&= 'rehto'
-val &&= 'other'
-eq val, 'other'
-
-val = null
-val ?= 'value'
-val ?= 'eulav'
-eq val, 'value'
diff --git a/node/node_modules/jade/support/coffee-script/test/test_comprehensions.coffee b/node/node_modules/jade/support/coffee-script/test/test_comprehensions.coffee
deleted file mode 100644 (file)
index 2aff0bf..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# Basic array comprehensions.
-nums =    n * n for n in [1, 2, 3] when n % 2 isnt 0
-results = n * 2 for n in nums
-
-ok results.join(',') is '2,18'
-
-
-# Basic object comprehensions.
-obj   = {one: 1, two: 2, three: 3}
-names = prop + '!' for prop of obj
-odds  = prop + '!' for prop, value of obj when value % 2 isnt 0
-
-ok names.join(' ') is "one! two! three!"
-ok odds.join(' ')  is "one! three!"
-
-
-# Basic range comprehensions.
-nums = i * 3 for i in [1..3]
-
-negs = x for x in [-20..-5*2]
-negs = negs[0..2]
-
-result = nums.concat(negs).join(', ')
-
-ok result is '3, 6, 9, -20, -19, -18'
-ok i is 3
-ok x is -10
-
-
-# With range comprehensions, you can loop in steps.
-results = x for x in [0...15] by 5
-ok results.join(' ') is '0 5 10'
-
-results = x for x in [0..100] by 10
-ok results.join(' ') is '0 10 20 30 40 50 60 70 80 90 100'
-
-
-# And can loop downwards, with a negative step.
-results = x for x in [5..1]
-
-ok results.join(' ') is '5 4 3 2 1'
-ok results.join(' ') is [(10-5)..(-2+3)].join(' ')
-
-results = x for x in [10..1]
-ok results.join(' ') is [10..1].join(' ')
-
-results = x for x in [10...0] by -2
-ok results.join(' ') is [10, 8, 6, 4, 2].join(' ')
-
-
-# Multiline array comprehension with filter.
-evens = for num in [1, 2, 3, 4, 5, 6] when num % 2 is 0
-           num *= -1
-           num -= 2
-           num * -1
-
-ok evens.join(', ') is '4, 6, 8'
-
-
-# The in operator still works, standalone.
-ok 2 of evens
-
-
-# Ensure that the closure wrapper preserves local variables.
-obj = {}
-
-for method in ['one', 'two', 'three']
-  obj[method] = ->
-    "I'm " + method
-
-ok obj.one()   is "I'm one"
-ok obj.two()   is "I'm two"
-ok obj.three() is "I'm three"
-
-i = 0
-for i in [1..3]
-  -> 'func'
-  break if false
-ok i is 3
-
-
-# Ensure that local variables are closed over for range comprehensions.
-funcs = for i in [1..3]
-  -> -i
-
-ok (func() for func in funcs).join(' ') is '-1 -2 -3'
-ok i is 3
-
-
-# Ensure that closing over local variables doesn't break scoping laws.
-for i in [0]
-  count = 0
-  i = 50
-  ->
-ok count is 0
-ok i is 50
-
-
-# Even when referenced in the filter.
-list = ['one', 'two', 'three']
-
-methods = for num, i in list when num isnt 'two' and i isnt 1
-  -> num + ' ' + i
-
-ok methods.length is 2
-ok methods[0]() is 'one 0'
-ok methods[1]() is 'three 2'
-
-
-# Naked ranges are expanded into arrays.
-array = [0..10]
-ok(num % 2 is 0 for num in array by 2)
-
-
-# Nested comprehensions.
-multiLiner =
-  for x in [3..5]
-    for y in [3..5]
-      [x, y]
-
-singleLiner =
-  [x, y] for y in [3..5] for x in [3..5]
-
-ok multiLiner.length is singleLiner.length
-ok 5 is multiLiner[2][2][1]
-ok 5 is singleLiner[2][2][1]
-
-
-# Comprehensions within parentheses.
-result = null
-store = (obj) -> result = obj
-store (x * 2 for x in [3, 2, 1])
-
-ok result.join(' ') is '6 4 2'
-
-
-# Closure-wrapped comprehensions that refer to the "arguments" object.
-expr = ->
-  result = item * item for item in arguments
-
-ok expr(2, 4, 8).join(' ') is '4 16 64'
-
-
-# Fast object comprehensions over all properties, including prototypal ones.
-class Cat
-  constructor: -> @name = 'Whiskers'
-  breed: 'tabby'
-  hair:  'cream'
-
-whiskers = new Cat
-own = value for key, value of whiskers
-all = value for all key, value of whiskers
-
-ok own.join(' ') is 'Whiskers'
-ok all.sort().join(' ') is 'Whiskers cream tabby'
-
-
-# Optimized range comprehensions.
-exxes = 'x' for [0...10]
-ok exxes.join(' ') is 'x x x x x x x x x x'
-
-
-# Comprehensions safely redeclare parameters if they're not present in closest
-# scope.
-rule = (x) -> x
-
-learn = ->
-  rule for rule in [1, 2, 3]
-
-ok learn().join(' ') is '1 2 3'
-
-ok rule(101) is 101
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/test/test_existence.coffee b/node/node_modules/jade/support/coffee-script/test/test_existence.coffee
deleted file mode 100644 (file)
index e0687bf..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-ok(if mySpecialVariable? then false else true)
-
-mySpecialVariable = false
-
-ok(if mySpecialVariable? then true else false)
-
-
-# Existential assignment.
-a = 5
-a = null
-a ?= 10
-b ?= 10
-
-ok a is 10 and b is 10
-
-
-# The existential operator.
-z = null
-x = z ? "EX"
-ok z is null and x is "EX"
-
-i = 9
-func = -> i += 1
-result = func() ? 101
-ok result is 10
-
-# Only evaluate once.
-counter = 0
-getNextNode = ->
-  throw "up" if counter
-  counter++
-
-ok(if getNextNode()? then true else false)
-
-
-# Existence chains, soaking up undefined properties:
-obj =
-  prop: "hello"
-
-eq obj?.prop, "hello"
-eq obj?['prop'], "hello"
-eq obj.prop?.length, 5
-eq obj?.prop?['length'], 5
-eq obj?.prop?.non?.existent?.property, undefined
-
-
-# Soaks and caches method calls as well.
-arr = ["--", "----"]
-
-eq arr.pop()?.length, 4
-eq arr.pop()?.length, 2
-eq arr.pop()?.length, undefined
-eq arr.pop()?.length?.non?.existent()?.property, undefined
-
-
-# Soaks method calls safely.
-value = null
-eq value?.toString().toLowerCase(), undefined
-
-value = 10
-eq value?.toString().toLowerCase(), '10'
-
-eq 0.nothing?.property() or 101, 101
-
-counter = 0
-func = ->
-  counter += 1
-  'prop'
-obj =
-  prop: -> this
-  value: 25
-
-ok obj[func()]()[func()]()[func()]()?.value is 25
-ok counter is 3
-
-
-ident = (obj) -> obj
-eq ident(non?.existent().method()), undefined, 'soaks inner values'
-
-
-# Soaks constructor invocations.
-a = 0
-class Foo
-  constructor: -> a += 1
-  bar: "bat"
-
-ok (new Foo())?.bar is 'bat'
-ok a is 1
-
-
-ok not value?.property?, 'safely checks existence on soaks'
-
-
-eq nothing?.value, undefined, 'safely calls values off of non-existent variables'
-eq !nothing?.value and 1, 1,  'corresponding operators work as expected'
-
-
-# Assign to the result of an exsitential operation with a minus.
-x = null ? - 1
-ok x is - 1
-
-
-# Things that compile to ternaries should force parentheses, like operators do.
-duration = if options?.animated then 150 else 0
-ok duration is 0
-
-
-# Function soaks.
-plus1 = (x) -> x + 1
-count = 0
-obj = {
-  counter: -> count += 1; this
-  returnThis: -> this
-}
-
-eq plus1?(41), 42
-eq (plus1? 41), 42
-eq plus2?(41), undefined
-eq (plus2? 41), undefined
-eq obj.returnThis?(), obj
-eq obj.returnSelf?(), undefined
-eq obj.returnThis?().flag = on, on
-eq obj.returnSelf?().flag = on, undefined
-eq obj.counter().counter().returnThis?(), obj
-eq count, 2
-
-maybe_close = (f, arg) -> if typeof f is 'function' then () -> f(arg) else -1
-
-eq maybe_close(plus1, 41)?(), 42
-eq (maybe_close plus1, 41)?(), 42
-eq (maybe_close 'string', 41)?(), undefined
-
-eq 2?(3), undefined
-eq new Number?(42) | 0, 42
-eq new Bumper?(42) | 0, 0
-
-#726
-eq calendar?[Date()], undefined
-
-#733
-a = b: {c: null}
-eq a.b?.c?(), undefined
-a.b?.c or= (it) -> it
-eq a.b?.c?(1), 1
-eq a.b?.c?([2, 3]...), 2
diff --git a/node/node_modules/jade/support/coffee-script/test/test_expressions.coffee b/node/node_modules/jade/support/coffee-script/test/test_expressions.coffee
deleted file mode 100644 (file)
index 9572a6c..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# Ensure that we don't wrap Nodes that are "pureStatement" in a closure.
-items = [1, 2, 3, "bacon", 4, 5]
-
-for item in items
-  break if item is "bacon"
-
-findit = (items) ->
-  for item in items
-    return item if item is "bacon"
-
-ok findit(items) is "bacon"
-
-
-# When when a closure wrapper is generated for expression conversion, make sure
-# that references to "this" within the wrapper are safely converted as well.
-obj = {
-  num: 5
-  func: ->
-    this.result = if false
-      10
-    else
-      "a"
-      "b"
-      this.num
-}
-
-ok obj.num is obj.func()
-ok obj.num is obj.result
-
-
-# Should be able to look at prototypes on keywords.
-obj =
-  withAt:   -> @::prop
-  withThis: -> this::prop
-  proto:
-    prop: 100
-
-obj.prototype = obj.proto
-ok obj.withAt() is 100
-ok obj.withThis() is 100
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/test/test_functions.coffee b/node/node_modules/jade/support/coffee-script/test/test_functions.coffee
deleted file mode 100644 (file)
index c39e6c0..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-x = 1
-y = {}
-y.x = -> 3
-
-ok x is 1
-ok typeof(y.x) is 'function'
-ok y.x instanceof Function
-ok y.x() is 3
-
-
-# The empty function should not cause a syntax error.
-->
-() ->
-
-
-# Multiple nested function declarations mixed with implicit calls should not
-# cause a syntax error.
-(one) -> (two) -> three four, (five) -> six seven, eight, (nine) ->
-
-
-obj = {
-  name: 'Fred'
-
-  bound: ->
-    (=> eq this, obj)()
-
-  unbound: ->
-    (-> ok this isnt obj)()
-
-  nested: ->
-    (=>
-      (=>
-        (=>
-          eq this, obj
-        )()
-      )()
-    )()
-}
-
-obj.unbound()
-obj.bound()
-obj.nested()
-
-
-# Python decorator style wrapper that memoizes any function
-memoize = (fn) ->
-  cache = {}
-  self  = this
-  (args...) ->
-    key = args.toString()
-    return cache[key] if cache[key]
-    cache[key] = fn.apply(self, args)
-
-Math = {
-  Add: (a, b) -> a + b
-  AnonymousAdd: ((a, b) -> a + b)
-  FastAdd: memoize (a, b) -> a + b
-}
-
-ok Math.Add(5, 5) is 10
-ok Math.AnonymousAdd(10, 10) is 20
-ok Math.FastAdd(20, 20) is 40
-
-
-# Parens are optional on simple function calls.
-ok 100 > 1 if 1 > 0
-ok true unless false
-ok true for i in [1..3]
-
-okFunc = (f) -> ok(f())
-okFunc -> true
-
-# Optional parens can be used in a nested fashion.
-call = (func) -> func()
-
-result = call ->
-  inner = call ->
-    Math.Add(5, 5)
-
-ok result is 10
-
-
-# More fun with optional parens.
-fn = (arg) -> arg
-
-ok fn(fn {prop: 101}).prop is 101
-
-
-# Multi-blocks with optional parens.
-result = fn( ->
-  fn ->
-    "Wrapped"
-)
-
-ok result()() is 'Wrapped'
-
-
-# And even with strange things like this:
-funcs  = [((x) -> x), ((x) -> x * x)]
-result = funcs[1] 5
-
-ok result is 25
-
-result = ("hello".slice) 3
-
-ok result is 'lo'
-
-
-# And with multiple single-line functions on the same line.
-func = (x) -> (x) -> (x) -> x
-ok func(1)(2)(3) is 3
-
-
-# Ensure that functions with the same name don't clash with helper functions.
-del = -> 5
-ok del() is 5
-
-# Ensure that functions can have a trailing comma in their argument list
-mult = (x, mids..., y) ->
-  x *= n for n in mids
-  x *= y
-
-ok mult(1, 2,) is 2
-ok mult(1, 2, 3,) is 6
-ok mult(10,[1..6]...,) is 7200
-
-
-# Test for inline functions with parentheses and implicit calls.
-combine = (func, num) -> func() * num
-result  = combine (-> 1 + 2), 3
-
-ok result is 9
-
-
-# Test for calls/parens/multiline-chains.
-f = (x) -> x
-result = (f 1).toString()
-  .length
-
-ok result is 1
-
-
-# Test implicit calls in functions in parens:
-result = ((val) ->
-  [].push val
-  val
-)(10)
-
-ok result is 10
-
-
-# More paren compilation tests:
-reverse = (obj) -> obj.reverse()
-ok reverse([1, 2].concat 3).join(' ') is '3 2 1'
-
-# Passing multiple functions without paren-wrapping is legal, and should compile.
-sum = (one, two) -> one() + two()
-result = sum ->
-  7 + 9
-, ->
-  1 + 3
-
-ok result is 20
-
-
-# Implicit call with a trailing if statement as a param.
-func = -> arguments[1]
-result = func 'one', if false then 100 else 13
-ok result is 13
-
-
-# Test more function passing:
-result = sum( ->
-  1 + 2
-, ->
-  2 + 1
-)
-ok result is 6
-
-sum = (a, b) -> a + b
-result = sum(1
-, 2)
-
-ok result is 3
-
-
-# This is a crazy one.
-x = (obj, func) -> func obj
-ident = (x) -> x
-
-result = x {one: ident 1}, (obj) ->
-  inner = ident(obj)
-  ident inner
-
-ok result.one is 1
-
-
-# Assignment to a Object.prototype-named variable should not leak to outer scope.
-# FIXME: fails on IE
-(->
-  constructor = 'word'
-)()
-
-ok constructor isnt 'word'
-
-
-# Trying an implicit object call with a trailing function.
-a = null
-meth = (arg, obj, func) -> a = [obj.a, arg, func()].join ' '
-
-meth 'apple', b: 1, a: 13, ->
-  'orange'
-
-ok a is '13 apple orange'
-
-
-# Ensure that empty functions don't return mistaken values.
-obj =
-  func: (@param, @rest...) ->
-
-ok obj.func(101, 102, 103, 104) is undefined
-ok obj.param is 101
-ok obj.rest.join(' ') is '102 103 104'
-
-
-# `@` and `this` should both be able to invoke a method.
-func          = (arg) -> ok arg is true
-func.withAt   = -> @ true
-func.withThis = -> this true
-
-func.withAt()
-func.withThis()
-
-
-# Ensure that constructors invoked with splats return a new object.
-args = [1, 2, 3]
-Type = (@args) ->
-type = new Type args
-
-ok type and type instanceof Type
-ok type.args and type.args instanceof Array
-ok v is args[i] for v, i in type.args
-
-Type1 = (@a, @b, @c) ->
-type1 = new Type1 args...
-
-ok type1 instanceof   Type1
-eq type1.constructor, Type1
-ok type1.a is args[0] and type1.b is args[1] and type1.c is args[2]
-
-
-# Ensure that constructors invoked with splats cache the function.
-called = 0
-get = -> if called++ then false else class Type
-new get() args...
-
-
-# Chained blocks, with proper indentation levels:
-counter =
-  results: []
-  tick: (func) ->
-    @results.push func()
-    this
-
-counter
-  .tick ->
-    3
-  .tick ->
-    2
-  .tick ->
-    1
-
-eq counter.results.join(' '), '3 2 1'
-
-
-# Make incorrect indentation safe.
-func = ->
-  obj = {
-          key: 10
-        }
-  obj.key - 5
-
-eq func(), 5
-
-
-# Ensure that chained calls with indented implicit object literals below are
-# alright.
-result = null
-obj =
-  method: (val)  -> this
-  second: (hash) -> result = hash.three
-
-
-obj
-  .method(
-    101
-  ).second(
-    one:
-      two: 2
-    three: 3
-  )
-
-eq result, 3
-
-
-# Test newline-supressed call chains with nested functions.
-obj  =
-  call: -> this
-func = ->
-  obj
-    .call ->
-      one two
-    .call ->
-      three four
-  101
-
-eq func(), 101
-
-
-# `new` shouldn't add extra parens
-ok new Date().constructor is Date
-
-
-# `new` works against bare function
-eq Date, new ->
-  eq this, new => this
-  Date
-
-
-# Implicit objects with number arguments.
-func = (x, y) -> y
-obj =
-  prop: func "a", 1
-
-ok obj.prop is 1
-
-
-# Non-spaced unary and binary operators should cause a function call.
-func = (val) -> val + 1
-ok (func +5) is 6
-ok (func -5) is -4
-
-
-# Prefix unary assignment operators are allowed in parenless calls.
-val = 5
-ok (func --val) is 5
diff --git a/node/node_modules/jade/support/coffee-script/test/test_helpers.coffee b/node/node_modules/jade/support/coffee-script/test/test_helpers.coffee
deleted file mode 100644 (file)
index 56a8017..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-{indexOf, include, starts, ends, compact, count, merge, extend, flatten, del, last} = CoffeeScript.helpers
-
-array  = [0..4]
-string = array.join ''
-object = {}
-
-# Test `indexOf`
-eq 0, indexOf array, 0
-eq 2, indexOf array, 2
-eq 4, indexOf array, 4
-eq(-1, indexOf array, 6)
-
-# Test `include`
-ok include array, 0
-ok include array, 2
-ok include array, 4
-ok not include array, 6
-
-# Test `starts`
-ok starts string, '012'
-ok starts string, '34', 3
-ok not starts string, '42'
-ok not starts string, '42', 6
-
-# Test `ends`
-ok ends string, '234'
-ok ends string, '01', 3
-ok not ends string, '42'
-ok not ends string, '42', 6
-
-# Test `merge`
-merged = merge object, array
-ok merged isnt object
-eq merged[3], 3
-
-# Test `extend`
-ok object is extend object, array
-eq object[3], 3
-
-# Test `flatten`
-eq "#{ flatten [0, [1, 2], 3, [4]] }", "#{ array }"
-
-# Test `del`
-eq 1, del object, 1
-ok 1 not of object
-
-# Test `last`
-eq 4, last array
-eq 2, last array, 2
diff --git a/node/node_modules/jade/support/coffee-script/test/test_heredocs.coffee b/node/node_modules/jade/support/coffee-script/test/test_heredocs.coffee
deleted file mode 100644 (file)
index 330ecdf..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-a = """
-    basic heredoc
-    on two lines
-    """
-
-ok a is "basic heredoc\non two lines"
-
-
-a = '''
-    a
-      "b
-    c
-    '''
-
-ok a is "a\n  \"b\nc"
-
-
-a = """
-a
- b
-  c
-"""
-
-ok a is "a\n b\n  c"
-
-
-a = '''one-liner'''
-
-ok a is 'one-liner'
-
-
-a = """
-      out
-      here
-"""
-
-ok a is "out\nhere"
-
-
-a = '''
-       a
-     b
-   c
-    '''
-
-ok a is "    a\n  b\nc"
-
-
-a = '''
-a
-
-
-b c
-'''
-
-ok a is "a\n\n\nb c"
-
-
-a = '''more"than"one"quote'''
-
-ok a is 'more"than"one"quote'
-
-
-val = 10
-
-a = """
-    basic heredoc #{val}
-    on two lines
-    """
-
-b = '''
-    basic heredoc #{val}
-    on two lines
-    '''
-
-ok a is "basic heredoc 10\non two lines"
-ok b is "basic heredoc \#{val}\non two lines"
-
-
-a = '''here's an apostrophe'''
-ok a is "here's an apostrophe"
-
-
-# The indentation detector ignores blank lines without trailing whitespace
-a = """
-    one
-    two
-
-    """
-ok a is "one\ntwo\n"
-
-eq ''' line 0
-  should not be relevant
-    to the indent level
-''', '
- line 0\n
-should not be relevant\n
-  to the indent level
-'
-
-eq ''' '\\\' ''', " '\\' "
-eq """ "\\\" """, ' "\\" '
-
-eq '''  <- keep these spaces ->  ''', '  <- keep these spaces ->  '
-
-eq 'multiline nested "interpolations" work', """multiline #{
-  "nested #{(->
-    ok yes
-    "\"interpolations\""
-  )()}"
-} work"""
diff --git a/node/node_modules/jade/support/coffee-script/test/test_if.coffee b/node/node_modules/jade/support/coffee-script/test/test_if.coffee
deleted file mode 100644 (file)
index 42ba54b..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-a = b = d = true
-c = false
-
-result = if a
-  if b
-    if c then false else
-      if d
-        true
-
-ok result
-
-
-first = if false then false else second = if false then false else true
-
-ok first
-ok second
-
-
-result = if false
-  false
-else if NaN
-  false
-else
-  true
-
-ok result
-
-
-# Testing unless.
-result = unless true
-  10
-else
-  11
-
-ok result is 11
-
-
-# Nested inline if statements.
-echo = (x) -> x
-result = if true then echo((if false then 'xxx' else 'y') + 'a')
-ok result is 'ya'
-
-
-# Testing inline funcs with inline if-elses.
-func = -> if 1 < 0.5 then 1 else -1
-ok func() is -1
-
-
-# Testing empty or commented if statements ... should compile:
-result = if false
-else if false
-else
-
-ok result is undefined
-
-result = if false
-  # comment
-else if true
-  # comment
-else
-
-ok result is undefined
-
-
-# Return an if with no else.
-func = ->
-  return if false then callback()
-
-ok func() is undefined
-
-func = ->
-  return unless false then 100 else -100
-
-ok func() is 100
-
-ident = (x) -> x
-result = ident if false then 300 else 100
-
-ok result is 100
-
-
-# If-to-ternary with instanceof requires parentheses (no comment).
-if {} instanceof Object
-  ok yes
-else
-  ok no
-
-try
-  {} + {}
-  ok yes
-catch e
-  ok no
-
-
-# If-to-ternary as part of a larger operation requires parens.
-x = 1
-result = x + if false then 10 else 1
-ok result is 2
-
-
-# If/else indented within an assignment.
-func = ->
-  a =
-    if false
-      3
-    else
-      5
-  101
-  a
-
-ok func() is 5
-
-
-# Unmatched 'then' should catch implicit calls.
-i = 1
-isTrue = (x) -> x is true
-
-if isTrue yes then i += 1
-
-ok i is 2
-
-# If/else with a suppressed indentation via assignment.
-result =
-  if      false then 10
-  else if no    then 20
-  else if 0     then 30
-  else if NaN   then 40
-  else               50 +
-       if false then 10
-       else          20
-
-ok result is 70
-
-
-# Issue #738
-func = if true then -> 1
-eq func(), 1
-
-
-# Issue #748. Trailing reserved identifiers.
-obj = delete: true
-
-result = if obj.delete
-  101
-
-ok result is 101
diff --git a/node/node_modules/jade/support/coffee-script/test/test_importing.coffee b/node/node_modules/jade/support/coffee-script/test/test_importing.coffee
deleted file mode 100644 (file)
index e069938..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# Check if we can import and execute a CoffeeScript-only module successfully.
-if require?.extensions? or require?.registerExtension?
-  ok require('./test_module').func() is "from over there"
diff --git a/node/node_modules/jade/support/coffee-script/test/test_literals.coffee b/node/node_modules/jade/support/coffee-script/test/test_literals.coffee
deleted file mode 100644 (file)
index b753b45..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-a = [((x) -> x), ((x) -> x * x)]
-
-ok a.length is 2
-
-
-neg = (3 -4)
-
-ok neg is -1
-
-
-# Decimal number literals.
-value = .25 + .75
-ok value is 1
-value = 0.0 + -.25 - -.75 + 0.0
-ok value is 0.5
-
-# Decimals don't interfere with ranges.
-ok [0..10].join(' ') is  '0 1 2 3 4 5 6 7 8 9 10'
-ok [0...10].join(' ') is '0 1 2 3 4 5 6 7 8 9'
-
-
-# Can call methods directly on numbers.
-4.valueOf() is 4
-
-
-func = ->
-  return if true
-
-ok func() is undefined
-
-
-trailingComma = [1, 2, 3,]
-ok (trailingComma[0] is 1) and (trailingComma[2] is 3) and (trailingComma.length is 3)
-
-trailingComma = [
-  1, 2, 3,
-  4, 5, 6
-  7, 8, 9,
-]
-(sum = (sum or 0) + n) for n in trailingComma
-
-trailingComma = {k1: "v1", k2: 4, k3: (-> true),}
-ok trailingComma.k3() and (trailingComma.k2 is 4) and (trailingComma.k1 is "v1")
-
-
-ok {a: (num) -> num is 10 }.a 10
-
-
-moe = {
-  name:  'Moe'
-  greet: (salutation) ->
-    salutation + " " + @name
-  hello: ->
-    @['greet'] "Hello"
-  10: 'number'
-}
-
-ok moe.hello() is "Hello Moe"
-ok moe[10] is 'number'
-
-moe.hello = ->
-  this['greet'] "Hello"
-
-ok moe.hello() is 'Hello Moe'
-
-
-obj = {
-  is:     -> yes,
-  'not':  -> no,
-}
-
-ok obj.is()
-ok not obj.not()
-
-
-# Top-level object literal doesn't break things.
-obj: 1
-
-
-# Funky indentation within non-comma-seperated arrays.
-result = [['a']
- {b: 'c'}]
-
-ok result[0][0] is 'a'
-ok result[1]['b'] is 'c'
-
-
-# Object literals should be able to include keywords.
-obj = {class: 'höt'}
-obj.function = 'dog'
-
-ok obj.class + obj.function is 'hötdog'
-
-
-# But keyword assignment should be smart enough not to stringify variables.
-func = ->
-  this == 'this'
-
-ok func() is false
-
-
-# New fancy implicit objects:
-config =
-  development:
-    server: 'localhost'
-    timeout: 10
-
-  production:
-    server: 'dreamboat'
-    timeout: 1000
-
-ok config.development.server  is 'localhost'
-ok config.production.server   is 'dreamboat'
-ok config.development.timeout is 10
-ok config.production.timeout  is 1000
-
-obj =
-  a: 1
-  b: 2
-
-ok obj.a is 1
-ok obj.b is 2
-
-obj =
-  a: 1,
-  b: 2,
-
-ok obj.a is 1
-ok obj.b is 2
-
-
-# Implicit objects nesting.
-obj =
-  options:
-    value: yes
-
-  fn: ->
-    {}
-    null
-
-ok obj.options.value is yes
-ok obj.fn() is null
-
-
-# Implicit arguments to function calls:
-func = (obj) -> obj.a
-
-result = func
-  a: 10
-
-ok result is 10
-
-result = func
-  "a": 20
-
-ok result is 20
-
-third = (a, b, c) -> c
-obj =
-  one: 'one'
-  two: third 'one', 'two', 'three'
-
-ok obj.one is 'one'
-ok obj.two is 'three'
-
-
-# Implicit objects with wacky indentation:
-obj =
-  'reverse': (obj) ->
-    Array.prototype.reverse.call obj
-  abc: ->
-    @reverse(
-      @reverse @reverse ['a', 'b', 'c'].reverse()
-    )
-  one: [1, 2,
-    a: 'b'
-  3, 4]
-  red:
-    orange:
-          yellow:
-                  green: 'blue'
-    indigo: 'violet'
-  misdent: [[],
-  [],
-                  [],
-      []]
-
-ok obj.abc().join(' ') is 'a b c'
-ok obj.one.length is 5
-ok obj.one[4] is 4
-ok obj.one[2].a is 'b'
-ok (key for key of obj.red).length is 2
-ok obj.red.orange.yellow.green is 'blue'
-ok obj.red.indigo is 'violet'
-ok obj.misdent.toString() is ',,,'
-
-second = (x, y) -> y
-obj = then second 'the',
-  1: 1
-  two:
-    three: ->
-      four five,
-        six: seven
-  three: 3
-
-ok obj[1] is 1
-ok obj.three is 3
-
-
-# Implicit objects as part of chained calls.
-identity = (x) -> x.a
-
-b = identity identity identity
-  a:
-    a:
-      a: 100
-
-ok b is 100
-
-
-# Inline JS
-eq '\\`', `
-  "\\\`"
-`
-
-
-# Shorthand objects with property references.
-obj =
-  one: 1
-  two: 2
-  object: -> {@one, @two}
-  list:   -> [@one, @two]
-
-
-result = obj.object()
-eq result.one, 1
-eq result.two, 2
-eq result.two, obj.list()[1]
-
-
-#542: Objects leading expression statement should be parenthesized.
-{f: -> ok yes }.f() + 1
-
-
-#764: Boolean/Number should be indexable.
-ok 42['toString']
-ok on['toString']
diff --git a/node/node_modules/jade/support/coffee-script/test/test_module.coffee b/node/node_modules/jade/support/coffee-script/test/test_module.coffee
deleted file mode 100644 (file)
index c6f1f1b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# This file is imported by `testImporting.coffee`
-if exports?
-  local = "from over there"
-  exports.func = -> local
diff --git a/node/node_modules/jade/support/coffee-script/test/test_operations.coffee b/node/node_modules/jade/support/coffee-script/test/test_operations.coffee
deleted file mode 100644 (file)
index 0ba5cd6..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-# CoffeeScript's operations should be chainable, like Python's.
-ok 500 > 50 > 5 > -5
-
-ok true is not false is true is not false
-
-ok 0 is 0 isnt 50 is 50
-
-ok 10 < 20 > 10
-
-ok 50 > 10 > 5 is parseInt('5', 10)
-
-i = 0
-ok 1 > i++ < 1, 'chained operations should evaluate each value only once'
-
-
-# `==` and `is` should be interchangeable.
-a = b = 1
-
-ok a is 1 and b is 1
-ok a == b
-ok a is b
-
-
-# Allow "if x not in y"
-obj = {a: true}
-ok 'a' of obj
-ok 'b' not of obj
-
-# And for "a in b" with array presence.
-ok 200 in [100, 200, 300]
-array = [100, 200, 300]
-ok 200 in array
-ok 1 not in array
-ok array[0]++ in [99, 100], 'should cache testee'
-
-# And with array presence on an instance variable.
-obj = {
-  list: [1, 2, 3, 4, 5]
-  in_list: (value) -> value in @list
-}
-ok obj.in_list 4
-ok not obj.in_list 0
-
-# Non-spaced values still work.
-x = 10
-y = -5
-
-ok x*-y is 50
-ok x*+y is -50
-
-
-# Compound operators.
-one  = 1
-two  = 0
-one or= 2
-two or= 2
-
-eq one, 1
-eq two, 2
-
-zero = 0
-
-zero and= 'one'
-one  and= 'one'
-
-eq zero, 0
-eq one , 'one'
-
-
-# Compound assignment should be careful about caching variables.
-count = 0
-list = []
-
-list[++count] or= 1
-eq list[1], 1
-eq count, 1
-
-list[++count] ?= 2
-eq list[2], 2
-eq count, 2
-
-list[count++] and= 'two'
-eq list[2], 'two'
-eq count, 3
-
-base = -> ++count; base
-
-base().four or= 4
-eq base.four, 4
-eq count, 4
-
-base().five ?= 5
-eq base.five, 5
-eq count, 5
-
-
-# Ensure that RHS is treated as a group.
-a = b = false
-a and= b or true
-ok a is false
-
-
-# Bitwise operators:
-ok (10 &   3) is 2
-ok (10 |   3) is 11
-ok (10 ^   3) is 9
-ok (10 <<  3) is 80
-ok (10 >>  3) is 1
-ok (10 >>> 3) is 1
-
-num = 10; ok (num <<=  3) is 80
-num = 10; ok (num >>=  3) is 1
-num = 10; ok (num >>>= 3) is 1
-num = 10; ok (num &=   3) is 2
-num = 10; ok (num ^=   3) is 9
-num = 10; ok (num |=   3) is 11
-
-
-# Compound assignment with implicit objects.
-obj = undefined
-obj ?=
-  one: 1
-
-ok obj.one is 1
-
-obj and=
-  two: 2
-
-ok not obj.one
-ok obj.two is 2
-
-
-# Compound assignment as a sub expression.
-[a, b, c] = [1, 2, 3]
-ok (a + b += c) is 6
-ok a is 1
-ok b is 5
-ok c is 3
-
-
-# Instanceof.
-ok new String instanceof String
-ok new Number not instanceof String
-
-
-#737: `in` should have higher precedence than logical operators
-eq 1, 1 in [1] and 1
-
-#768: `in` should preserve evaluation order
-share = 0
-a = -> share++ if share is 0
-b = -> share++ if share is 1
-c = -> share++ if share is 2
-ok a() not in [b(),c()] and share is 3 
diff --git a/node/node_modules/jade/support/coffee-script/test/test_option_parser.coffee b/node/node_modules/jade/support/coffee-script/test/test_option_parser.coffee
deleted file mode 100644 (file)
index 2f66623..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Ensure that the OptionParser handles arguments correctly.
-return unless require?
-{OptionParser} = require './../lib/optparse'
-
-opt = new OptionParser [
-  ['-r', '--required [DIR]',  'desc required']
-  ['-o', '--optional',        'desc optional']
-  ['-l', '--list [FILES*]',   'desc list']
-]
-
-result = opt.parse ['one', 'two', 'three', '-r', 'dir']
-
-ok result.arguments.length is 5
-ok result.arguments[3] is '-r'
-
-result = opt.parse ['--optional', '-r', 'folder', 'one', 'two']
-
-ok result.optional is true
-ok result.required is 'folder'
-ok result.arguments.join(' ') is 'one two'
-
-result = opt.parse ['-l', 'one.txt', '-l', 'two.txt', 'three']
-
-ok result.list instanceof Array
-ok result.list.join(' ') is 'one.txt two.txt'
-ok result.arguments.join(' ') is 'three'
-
diff --git a/node/node_modules/jade/support/coffee-script/test/test_pattern_matching.coffee b/node/node_modules/jade/support/coffee-script/test/test_pattern_matching.coffee
deleted file mode 100644 (file)
index e323814..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-# Simple variable swapping.
-a = -1
-b = -2
-
-[a, b] = [b, a]
-
-eq a, -2
-eq b, -1
-
-func = ->
-  [a, b] = [b, a]
-
-eq func().join(' '), '-1 -2'
-eq a, -1
-eq b, -2
-
-#713
-eq (onetwo = [1, 2]), [a, b] = [c, d] = onetwo
-ok a is c is 1 and b is d is 2
-
-
-# Array destructuring, including splats.
-[x,y...,z] = [1,2,3,4,5]
-
-ok x is 1
-ok y.length is 3
-ok z is 5
-
-[x, [y, mids..., last], z..., end] = [1, [10, 20, 30, 40], 2,3,4, 5]
-
-ok x is 1
-ok y is 10
-ok mids.length is 2 and mids[1] is 30
-ok last is 40
-ok z.length is 3 and z[2] is 4
-ok end is 5
-
-
-# Object destructuring.
-obj = {x: 10, y: 20, z: 30}
-
-{x: a, y: b, z: c} = obj
-
-ok a is 10
-ok b is 20
-ok c is 30
-
-person = {
-  name: "Moe"
-  family: {
-    'elder-brother': {
-      addresses: [
-        "first"
-        {
-          street: "101 Deercreek Ln."
-          city:   "Moquasset NY, 10021"
-        }
-      ]
-    }
-  }
-}
-
-{name: a, family: {'elder-brother': {addresses: [one, {city: b}]}}} = person
-
-ok a is "Moe"
-ok b is "Moquasset NY, 10021"
-
-test = {
-  person: {
-    address: [
-      "------"
-      "Street 101"
-      "Apt 101"
-      "City 101"
-    ]
-  }
-}
-
-{person: {address: [ignore, addr...]}} = test
-
-ok addr.join(', ') is "Street 101, Apt 101, City 101"
-
-
-# Pattern matching against an expression.
-[a, b] = if true then [2, 1] else [1, 2]
-
-ok a is 2
-ok b is 1
-
-
-# Pattern matching with object shorthand.
-
-person = {
-  name: "Bob"
-  age:  26
-  dogs: ["Prince", "Bowie"]
-}
-
-{name, age, dogs: [first, second]} = person
-
-ok name   is "Bob"
-ok age    is 26
-ok first  is "Prince"
-ok second is "Bowie"
-
-# Pattern matching within for..loops
-
-persons = {
-  George: { name: "Bob" },
-  Bob: { name: "Alice" }
-  Christopher: { name: "Stan" }
-}
-
-join1 = "#{key}: #{name}" for key, { name } of persons
-
-eq join1.join(' / '), "George: Bob / Bob: Alice / Christopher: Stan"
-
-persons = [
-  { name: "Bob", parent: { name: "George" } },
-  { name: "Alice", parent: { name: "Bob" } },
-  { name: "Stan", parent: { name: "Christopher" } }
-]
-
-join2 = "#{parent}: #{name}" for { name, parent: { name: parent } } in persons
-
-eq join1.join(' '), join2.join(' ')
-
-persons = [['Bob', ['George']], ['Alice', ['Bob']], ['Stan', ['Christopher']]]
-join3 = "#{parent}: #{name}" for [name, [parent]] in persons
-
-eq join2.join(' '), join3.join(' ')
-
-
-# Pattern matching doesn't clash with implicit block objects.
-obj = a: 101
-func = -> true
-
-if func func
-  {a} = obj
-
-ok a is 101
-
-[x] = {0: y} = {'0': z} = [Math.random()]
-ok x is y is z, 'destructuring in multiple'
-
-
-# Destructuring into an object.
-obj =
-  func: (list, object) ->
-    [@one, @two] = list
-    {@a, @b} = object
-    {@a} = object  # must not unroll this
-    null
-
-obj.func [1, 2], a: 'a', b: 'b'
-
-eq obj.one, 1
-eq obj.two, 2
-eq obj.a, 'a'
-eq obj.b, 'b'
diff --git a/node/node_modules/jade/support/coffee-script/test/test_ranges_slices_and_splices.coffee b/node/node_modules/jade/support/coffee-script/test/test_ranges_slices_and_splices.coffee
deleted file mode 100644 (file)
index 3e07f8c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-# Slice.
-array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
-a = array[7..9]
-b = array[2...4]
-
-result = a.concat(b).join(' ')
-
-ok result is "7 8 9 2 3"
-
-a = [0, 1, 2, 3, 4, 5, 6, 7]
-eq a[2...6].join(' '), '2 3 4 5'
-
-
-# Ranges.
-countdown = [10..1].join(' ')
-ok countdown is "10 9 8 7 6 5 4 3 2 1"
-
-a = 1
-b = 5
-nums = [a...b]
-ok nums.join(' ') is '1 2 3 4'
-
-b = -5
-nums = [a..b]
-ok nums.join(' ') is '1 0 -1 -2 -3 -4 -5'
-
-
-# Expression-based range.
-array = [(1+5)..1+9]
-ok array.join(' ') is "6 7 8 9 10"
-
-array = [5..1]
-ok array.join(' ') is '5 4 3 2 1'
-
-array = [30...0]
-ok (len = array.length) is 30
-ok array[len - 1] is 1
-
-
-
-# String slicing (at least on Node).
-hello = "Hello World"
-
-ok hello[1...1] is ""
-ok hello[1..1] is "e"
-ok hello[1...5] is "ello"
-ok hello[0..4] is "Hello"
-
-
-# Splice literals.
-array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
-
-array[5..10] = [0, 0, 0]
-
-ok array.join(' ') is '0 1 2 3 4 0 0 0'
-
-
-# Slices and splices that omit their beginning or end.
-array = [0..10]
-
-ok array[7..].join(' ')  is '7 8 9 10'
-ok array[-2..].join(' ') is '9 10'
-
-ok array[...3].join(' ') is '0 1 2'
-ok array[..-5].join(' ') is '0 1 2 3 4 5 6'
-
-array[3..] = [9, 8, 7]
-
-ok array.join(' ') is '0 1 2 9 8 7'
-
-array[...3] = [7, 8, 9]
-
-ok array.join(' ') is '7 8 9 9 8 7'
-
diff --git a/node/node_modules/jade/support/coffee-script/test/test_regexps.coffee b/node/node_modules/jade/support/coffee-script/test/test_regexps.coffee
deleted file mode 100644 (file)
index 709709a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Regular expression literals.
-ok 'x'.match(/x/g)
-ok 'x'.match /x/g
-ok 'x'.match(/x/)
-ok 'x'.match /x/
-
-ok 4 / 2 / 1 is 2
-
-y = 4
-x = 2
-g = 1
-
-ok y / x/g is 2
-
-obj = {
-  width:  -> 10
-  height: -> 20
-}
-id = 2
-
-ok (obj.width()/id - obj.height()/id) is -5
-
-eq /\\/.source, "\\\\"
-
-
-eq /^I'm\s+Heregex?\/\/\//gim + '', ///
-  ^ I'm \s+ Heregex? / // # or not
-///gim + ''
-eq '\\\\#{}\\\\\\\"', ///
- #{
-   "#{ '\\' }" # normal comment
- }
- # regex comment
- \#{}
- \\ \"
-///.source
-eq ///  /// + '', '/(?:)/'
-
-
-#584: Unescaped slashes in character classes.
-ok /:\/[/]goog/.test 'http://google.com'
-
-
-#764: Should be indexable.
-eq /0/['source'], ///#{0}///['source']
diff --git a/node/node_modules/jade/support/coffee-script/test/test_returns.coffee b/node/node_modules/jade/support/coffee-script/test/test_returns.coffee
deleted file mode 100644 (file)
index 92f5ab0..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Expression conversion under explicit returns.
-first = ->
-  return 'do' for x in [1,2,3]
-
-second = ->
-  return ['re' for x in [1,2,3]]
-
-third = ->
-  return ('mi' for x in [1,2,3])
-
-ok first().join(' ')     is 'do do do'
-ok second()[0].join(' ') is 're re re'
-ok third().join(' ')     is 'mi mi mi'
-
-
-# Testing returns with multiple branches.
-func = ->
-  if false
-    for a in b
-      return c if d
-  else
-    "word"
-
-ok func() is 'word'
-
-
-# And with switches.
-func = ->
-  switch 'a'
-    when 'a' then 42
-    else return 23
-
-ok func() is 42
\ No newline at end of file
diff --git a/node/node_modules/jade/support/coffee-script/test/test_splats.coffee b/node/node_modules/jade/support/coffee-script/test/test_splats.coffee
deleted file mode 100644 (file)
index 006c80f..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-func = (first, second, rest...) ->
-  rest.join ' '
-
-result = func 1, 2, 3, 4, 5
-
-ok result is "3 4 5"
-
-
-gold = silver = bronze = theField = last = null
-
-medalists = (first, second, third, rest..., unlucky) ->
-  gold     = first
-  silver   = second
-  bronze   = third
-  theField = rest.concat([last])
-  last     = unlucky
-
-contenders = [
-  "Michael Phelps"
-  "Liu Xiang"
-  "Yao Ming"
-  "Allyson Felix"
-  "Shawn Johnson"
-  "Roman Sebrle"
-  "Guo Jingjing"
-  "Tyson Gay"
-  "Asafa Powell"
-  "Usain Bolt"
-]
-
-medalists "Mighty Mouse", contenders...
-
-ok gold is "Mighty Mouse"
-ok silver is "Michael Phelps"
-ok bronze is "Liu Xiang"
-ok last is "Usain Bolt"
-ok theField.length is 8
-
-contenders.reverse()
-medalists contenders[0...2]..., "Mighty Mouse", contenders[2...contenders.length]...
-
-ok gold is "Usain Bolt"
-ok silver is "Asafa Powell"
-ok bronze is "Mighty Mouse"
-ok last is "Michael Phelps"
-ok theField.length is 8
-
-medalists contenders..., 'Tim', 'Moe', 'Jim'
-ok last is 'Jim'
-
-
-obj =
-  name: 'moe'
-  accessor: (args...) ->
-    [@name].concat(args).join(' ')
-  getNames: ->
-    args = ['jane', 'ted']
-    @accessor(args...)
-  index: 0
-  0: {method: -> this is obj[0]}
-
-ok obj.getNames() is 'moe jane ted'
-ok obj[obj.index++].method([]...), 'should cache base value'
-
-crowd = [
-  contenders...
-  "Mighty Mouse"
-]
-
-bests = [
-  "Mighty Mouse"
-  contenders[0..3]...
-]
-
-ok crowd[0] is contenders[0]
-ok crowd[10] is "Mighty Mouse"
-
-ok bests[1] is contenders[0]
-ok bests[4] is contenders[3]
-
-
-# Finally, splats with super() within classes.
-
-class Parent
-  meth: (args...) ->
-    args
-
-class Child extends Parent
-  meth: ->
-    nums = [3, 2, 1]
-    super nums...
-
-ok (new Child).meth().join(' ') is '3 2 1'
-
-
-# Functions with splats being called with too few arguments.
-pen = null
-method = (first, variable..., penultimate, ultimate) ->
-  pen = penultimate
-
-method 1, 2, 3, 4, 5, 6, 7, 8, 9
-ok pen is 8
-
-method 1, 2, 3
-ok pen is 2
-
-method 1, 2
-ok pen is 2
-
-
-# Array splat expansions with assigns.
-nums = [1, 2, 3]
-list = [a = 0, nums..., b = 4]
-ok a is 0
-ok b is 4
-ok list.join(' ') is '0 1 2 3 4'
-
-
-# Splat on a line by itself is invalid.
-failed = true
-try
-  CoffeeScript.compile "x 'a'\n...\n"
-  failed = false
-catch err
-ok failed
diff --git a/node/node_modules/jade/support/coffee-script/test/test_strings.coffee b/node/node_modules/jade/support/coffee-script/test/test_strings.coffee
deleted file mode 100644 (file)
index 51d32dc..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-eq '(((dollars)))', '\(\(\(dollars\)\)\)'
-eq 'one two three', "one
- two
- three"
-eq "four five", 'four
-
- five'
-
-#647
-eq "''Hello, World\\''", '''
-'\'Hello, World\\\''
-'''
-eq '""Hello, World\\""', """
-"\"Hello, World\\\""
-"""
-eq 'Hello, World\n', '''
-Hello, World\
-
-'''
-
-
-hello = 'Hello'
-world = 'World'
-ok '#{hello} #{world}!' is '#{hello} #{world}!'
-ok "#{hello} #{world}!" is 'Hello World!'
-ok "[#{hello}#{world}]" is '[HelloWorld]'
-ok "#{hello}##{world}" is 'Hello#World'
-ok "Hello #{ 1 + 2 } World" is 'Hello 3 World'
-ok "#{hello} #{ 1 + 2 } #{world}" is "Hello 3 World"
-
-
-[s, t, r, i, n, g] = ['s', 't', 'r', 'i', 'n', 'g']
-ok "#{s}#{t}#{r}#{i}#{n}#{g}" is 'string'
-ok "\#{s}\#{t}\#{r}\#{i}\#{n}\#{g}" is '#{s}#{t}#{r}#{i}#{n}#{g}'
-ok "\#{string}" is '#{string}'
-
-
-ok "\#{Escaping} first" is '#{Escaping} first'
-ok "Escaping \#{in} middle" is 'Escaping #{in} middle'
-ok "Escaping \#{last}" is 'Escaping #{last}'
-
-
-ok "##" is '##'
-ok "#{}" is ''
-ok "#{}A#{} #{} #{}B#{}" is 'A  B'
-ok "\\\#{}" is '\\#{}'
-
-
-ok "I won ##{20} last night." is 'I won #20 last night.'
-ok "I won ##{'#20'} last night." is 'I won ##20 last night.'
-
-
-ok "#{hello + world}" is 'HelloWorld'
-ok "#{hello + ' ' + world + '!'}" is 'Hello World!'
-
-
-list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-ok "values: #{list.join(', ')}, length: #{list.length}." is 'values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, length: 10.'
-ok "values: #{list.join ' '}" is 'values: 0 1 2 3 4 5 6 7 8 9'
-
-
-obj = {
-  name: 'Joe'
-  hi: -> "Hello #{@name}."
-  cya: -> "Hello #{@name}.".replace('Hello','Goodbye')
-}
-ok obj.hi() is "Hello Joe."
-ok obj.cya() is "Goodbye Joe."
-
-
-ok "With #{"quotes"}" is 'With quotes'
-ok 'With #{"quotes"}' is 'With #{"quotes"}'
-
-ok "Where is #{obj["name"] + '?'}" is 'Where is Joe?'
-
-ok "Where is #{"the nested #{obj["name"]}"}?" is 'Where is the nested Joe?'
-ok "Hello #{world ? "#{hello}"}" is 'Hello World'
-
-ok "Hello #{"#{"#{obj["name"]}" + '!'}"}" is 'Hello Joe!'
-
-
-a = """
-    Hello #{ "Joe" }
-    """
-ok a is "Hello Joe"
-
-
-a = 1
-b = 2
-c = 3
-ok "#{a}#{b}#{c}" is '123'
-
-
-result = null
-stash = (str) -> result = str
-stash "a #{ ('aa').replace /a/g, 'b' } c"
-ok result is 'a bb c'
-
-
-foo = "hello"
-ok "#{foo.replace("\"", "")}" is 'hello'
diff --git a/node/node_modules/jade/support/coffee-script/test/test_switch.coffee b/node/node_modules/jade/support/coffee-script/test/test_switch.coffee
deleted file mode 100644 (file)
index f3307d9..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-num = 10
-
-result = switch num
-  when 5 then false
-  when 'a'
-    true
-    true
-    false
-  when 10 then true
-
-
-  # Mid-switch comment with whitespace
-  # and multi line
-  when 11 then false
-  else false
-
-ok result
-
-
-func = (num) ->
-  switch num
-    when 2, 4, 6
-      true
-    when 1, 3, 5
-      false
-    else false
-
-ok func(2)
-ok func(6)
-ok !func(3)
-ok !func(8)
-
-
-# Should cache the switch value, if anything fancier than a literal.
-num = 5
-result = switch num += 5
-  when 5 then false
-  when 15 then false
-  when 10 then true
-  else false
-
-ok result
-
-
-# Ensure that trailing switch elses don't get rewritten.
-result = false
-switch "word"
-  when "one thing"
-    doSomething()
-  else
-    result = true unless false
-
-ok result
-
-result = false
-switch "word"
-  when "one thing"
-    doSomething()
-  when "other thing"
-    doSomething()
-  else
-    result = true unless false
-
-ok result
-
-
-# Should be able to handle switches sans-condition.
-result = switch
-  when null then 1
-  when 'truthful string' then 2
-  else 3
-
-ok result is 2
-
-
-# Should be able to use "@properties" within the switch clause.
-obj = {
-  num: 101
-  func: ->
-    switch @num
-      when 101 then '101!'
-      else 'other'
-}
-
-ok obj.func() is '101!'
-
-
-# Should be able to use "@properties" within the switch cases.
-obj = {
-  num: 101
-  func: (yesOrNo) ->
-    result = switch yesOrNo
-      when yes then @num
-      else 'other'
-    result
-}
-
-ok obj.func(yes) is 101
diff --git a/node/node_modules/jade/support/coffee-script/test/test_try_catch.coffee b/node/node_modules/jade/support/coffee-script/test/test_try_catch.coffee
deleted file mode 100644 (file)
index e98657b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Basic exception throwing.
-block = -> throw 'up'
-throws block, 'up'
-
-
-# Basic try/catch.
-result = try
-  10
-finally
-  15
-
-ok result is 10
-
-result = try
-  throw 'up'
-catch err
-  err.length
-
-ok result is 2
-
-
-result = try throw 'error' catch err then err.length
-
-ok result is 5
-
-try throw 'catch is optional'
-
-# try/catch with empty clauses still compiles.
-try
-
-try
-  # nothing
-catch err
-  # nothing
-
-try
-  # nothing
-finally
-  # nothing
-
-try
-catch err
-finally
-
-ok yes
diff --git a/node/node_modules/jade/support/coffee-script/test/test_while.coffee b/node/node_modules/jade/support/coffee-script/test/test_while.coffee
deleted file mode 100644 (file)
index 3e3a83f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-i = 5
-list = while i -= 1
-  i * 2
-
-ok list.join(' ') is "8 6 4 2"
-
-
-i = 5
-list = (i * 3 while i -= 1)
-
-ok list.join(' ') is "12 9 6 3"
-
-
-i = 5
-func   = (num) -> i -= num
-assert = -> ok i < 5 > 0
-
-results = while func 1
-  assert()
-  i
-
-ok results.join(' ') is '4 3 2 1'
-
-
-i = 10
-results = while i -= 1 when i % 2 is 0
-  i * 2
-
-ok results.join(' ') is '16 12 8 4'
-
-
-value = false
-i = 0
-results = until value
-  value = true if i is 5
-  i += 1
-
-ok i is 6
-
-
-# And, the loop form of while.
-i = 5
-list = []
-loop
-  i -= 1
-  break if i is 0
-  list.push i * 2
-
-ok list.join(' ') is '8 6 4 2'
-
-
-#759: `if` within `while` condition
-2 while if 1 then 0
diff --git a/node/node_modules/jade/support/compile.js b/node/node_modules/jade/support/compile.js
deleted file mode 100644 (file)
index 4a70058..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var fs = require('fs');
-
-/**
- * Arguments.
- */
-
-var args = process.argv.slice(2)
-  , pending = args.length
-  , files = {};
-
-console.log('');
-
-// parse arguments
-
-args.forEach(function(file){
-  var mod = file.replace('lib/', '');
-  fs.readFile(file, 'utf8', function(err, js){
-    if (err) throw err;
-    console.log('  \033[90mcompile : \033[0m\033[36m%s\033[0m', file);
-    files[file] = parse(js);
-    --pending || compile();
-  });
-});
-
-/**
- * Parse the given `js`.
- */
-
-function parse(js) {
-  return parseInheritance(parseConditionals(js));
-}
-
-/**
- * Parse __proto__.
- */
-
-function parseInheritance(js) {
-  return js
-    .replace(/^ *(\w+)\.prototype\.__proto__ * = *(\w+)\.prototype *;?/gm, function(_, child, parent){
-      return child + '.prototype = new ' + parent + ';\n'
-        + child + '.prototype.constructor = '+ child + ';\n';
-    });
-}
-
-/**
- * Parse the given `js`, currently supporting:
- * 
- *    'if' ['node' | 'browser']
- *    'end'
- * 
- */
-
-function parseConditionals(js) {
-  var lines = js.split('\n')
-    , len = lines.length
-    , buffer = true
-    , browser = false
-    , buf = []
-    , line
-    , cond;
-
-  for (var i = 0; i < len; ++i) {
-    line = lines[i];
-    if (/^ *\/\/ *if *(node|browser)/gm.exec(line)) {
-      cond = RegExp.$1;
-      buffer = browser = 'browser' == cond;
-    } else if (/^ *\/\/ *end/.test(line)) {
-      buffer = true;
-      browser = false;
-    } else if (browser) {
-      buf.push(line.replace(/^( *)\/\//, '$1'));
-    } else if (buffer) {
-      buf.push(line);
-    }
-  }
-
-  return buf.join('\n');
-}
-
-/**
- * Compile the files.
- */
-
-function compile() {
-  var buf = '';
-  buf += '\n// CommonJS require()\n\n';
-  buf += browser.require + '\n\n';
-  buf += 'require.modules = {};\n\n';
-  buf += 'require.resolve = ' + browser.resolve + ';\n\n';
-  buf += 'require.register = ' + browser.register + ';\n\n';
-  buf += 'require.relative = ' + browser.relative + ';\n\n';
-  args.forEach(function(file){
-    var js = files[file];
-    file = file.replace('lib/', '');
-    buf += '\nrequire.register("' + file + '", function(module, exports, require){\n';
-    buf += js;
-    buf += '\n}); // module: ' + file + '\n';
-  });
-  fs.writeFile('jade.js', buf, function(err){
-    if (err) throw err;
-    console.log('  \033[90m create : \033[0m\033[36m%s\033[0m', 'jade.js');
-    console.log();
-  });
-}
-
-// refactored version of weepy's
-// https://github.com/weepy/brequire/blob/master/browser/brequire.js
-
-var browser = {
-  
-  /**
-   * Require a module.
-   */
-  
-  require: function require(p){
-    var path = require.resolve(p)
-      , mod = require.modules[path];
-    if (!mod) throw new Error('failed to require "' + p + '"');
-    if (!mod.exports) {
-      mod.exports = {};
-      mod.call(mod.exports, mod, mod.exports, require.relative(path));
-    }
-    return mod.exports;
-  },
-  
-  /**
-   * Resolve module path.
-   */
-
-  resolve: function(path){
-    var orig = path
-      , reg = path + '.js'
-      , index = path + '/index.js';
-    return require.modules[reg] && reg
-      || require.modules[index] && index
-      || orig;
-  },
-  
-  /**
-   * Return relative require().
-   */
-
-  relative: function(parent) {
-    return function(p){
-      if ('.' != p[0]) return require(p);
-      
-      var path = parent.split('/')
-        , segs = p.split('/');
-      path.pop();
-      
-      for (var i = 0; i < segs.length; i++) {
-        var seg = segs[i];
-        if ('..' == seg) path.pop();
-        else if ('.' != seg) path.push(seg);
-      }
-
-      return require(path.join('/'));
-    };
-  },
-  
-  /**
-   * Register a module.
-   */
-
-  register: function(path, fn){
-    require.modules[path] = fn;
-  }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/.gitignore b/node/node_modules/jade/support/expresso/.gitignore
deleted file mode 100644 (file)
index 432563f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-.DS_Store
-lib-cov
-*.seed
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/.gitmodules b/node/node_modules/jade/support/expresso/.gitmodules
deleted file mode 100644 (file)
index 191ddeb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "deps/jscoverage"]
-       path = deps/jscoverage
-       url = git://github.com/visionmedia/node-jscoverage.git
diff --git a/node/node_modules/jade/support/expresso/History.md b/node/node_modules/jade/support/expresso/History.md
deleted file mode 100644 (file)
index 1989eca..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-
-0.6.2 / 2010-09-17 
-==================
-
-  * Added _node-jsocoverage_ to package.json (aka will respect npm's binroot)
-  * Added _-t, --timeout_ MS option, defaulting to 2000 ms
-  * Added _-s, --serial_
-  * __PREFIX__ clobberable
-  * Fixed `assert.response()` for latest node
-  * Fixed cov reporting from exploding on empty files
-
-0.6.2 / 2010-08-03
-==================
-
-  * Added `assert.type()`
-  * Renamed `assert.isNotUndefined()` to `assert.isDefined()`
-  * Fixed `assert.includes()` param ordering
-
-0.6.0 / 2010-07-31
-==================
-
-  * Added _docs/api.html_
-  * Added -w, --watch
-  * Added `Array` support to `assert.includes()`
-  * Added; outputting exceptions immediately. Closes #19
-  * Fixed `assert.includes()` param ordering
-  * Fixed `assert.length()` param ordering
-  * Fixed jscoverage links
-
-0.5.0 / 2010-07-16
-==================
-
-  * Added support for async exports
-  * Added timeout support to `assert.response()`. Closes #3
-  * Added 4th arg callback support to `assert.response()`
-  * Added `assert.length()`
-  * Added `assert.match()`
-  * Added `assert.isUndefined()`
-  * Added `assert.isNull()`
-  * Added `assert.includes()`
-  * Added growlnotify support via -g, --growl
-  * Added -o, --only TESTS. Ex: --only "test foo()" --only "test foo(), test bar()"
-  * Removed profanity
-
-0.4.0 / 2010-07-09
-==================
-
-  * Added reporting source coverage (respects --boring for color haters)
-  * Added callback to assert.response(). Closes #12
-  * Fixed; putting exceptions to stderr. Closes #13
-
-0.3.1 / 2010-06-28
-==================
-
-  * Faster assert.response()
-
-0.3.0 / 2010-06-28
-==================
-
-  * Added -p, --port NUM flags
-  * Added assert.response(). Closes #11
-
-0.2.1 / 2010-06-25
-==================
-
-  * Fixed issue with reporting object assertions
-
-0.2.0 / 2010-06-21
-==================
-
-  * Added `make uninstall`
-  * Added better readdir() failure message
-  * Fixed `make install` for kiwi
-
-0.1.0 / 2010-06-15
-==================
-
-  * Added better usage docs via --help
-  * Added better conditional color support
-  * Added pre exit assertion support
-
-0.0.3 / 2010-06-02
-==================
-
-  * Added more room for filenames in test coverage
-  * Added boring output support via --boring (suppress colored output)
-  * Fixed async failure exit status
-
-0.0.2 / 2010-05-30
-==================
-
-  * Fixed exit status for CI support
-
-0.0.1 / 2010-05-30
-==================
-
-  * Initial release
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/Makefile b/node/node_modules/jade/support/expresso/Makefile
deleted file mode 100644 (file)
index 8acfe56..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-PREFIX ?= /usr/local
-BIN = bin/expresso
-JSCOV = deps/jscoverage/node-jscoverage
-DOCS = docs/index.md
-HTMLDOCS = $(DOCS:.md=.html)
-
-test: $(BIN)
-       @./$(BIN) -I lib --growl $(TEST_FLAGS) test/*.test.js
-
-test-cov:
-       @./$(BIN) -I lib --cov $(TEST_FLAGS) test/*.test.js
-
-test-serial:
-       @./$(BIN) --serial -I lib $(TEST_FLAGS) test/serial/*.test.js
-
-install: install-jscov install-expresso
-
-uninstall:
-       rm -f $(PREFIX)/bin/expresso
-       rm -f $(PREFIX)/bin/node-jscoverage
-
-install-jscov: $(JSCOV)
-       install $(JSCOV) $(PREFIX)/bin
-
-install-expresso:
-       install $(BIN) $(PREFIX)/bin
-
-$(JSCOV):
-       cd deps/jscoverage && ./configure && make && mv jscoverage node-jscoverage
-
-clean:
-       @cd deps/jscoverage && git clean -fd
-
-docs: docs/api.html $(HTMLDOCS)
-
-%.html: %.md
-       @echo "... $< > $@"
-       @ronn -5 --pipe --fragment $< \
-               | cat docs/layout/head.html - docs/layout/foot.html \
-               > $@
-
-docs/api.html: bin/expresso
-       dox \
-               --title "Expresso" \
-               --ribbon "http://github.com/visionmedia/expresso" \
-               --desc "Insanely fast TDD framework for [node](http://nodejs.org) featuring code coverage reporting." \
-               $< > $@
-
-docclean:
-       rm -f docs/*.html
-
-.PHONY: test test-cov install uninstall install-expresso install-jscov clean docs docclean
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/Readme.md b/node/node_modules/jade/support/expresso/Readme.md
deleted file mode 100644 (file)
index dcc1c85..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-# Expresso
-
-  TDD framework for [nodejs](http://nodejs.org).
-  
-## Features
-
-  - light-weight
-  - intuitive async support
-  - intuitive test runner executable
-  - test coverage support and reporting
-  - uses the _assert_ module
-  - `assert.eql()` alias of `assert.deepEqual()`
-  - `assert.response()` http response utility
-  - `assert.includes()`
-  - `assert.type()`
-  - `assert.isNull()`
-  - `assert.isUndefined()`
-  - `assert.isNotNull()`
-  - `assert.isDefined()`
-  - `assert.match()`
-  - `assert.length()`
-
-## Installation
-
-To install both expresso _and_ node-jscoverage run:
-
-    $ make install
-
-To install expresso alone (no build required) run:
-
-    $ make install-expresso
-
-Install via npm:
-
-       $ npm install expresso
-
-
-
diff --git a/node/node_modules/jade/support/expresso/bin/expresso b/node/node_modules/jade/support/expresso/bin/expresso
deleted file mode 100755 (executable)
index 8366c61..0000000
+++ /dev/null
@@ -1,837 +0,0 @@
-#!/usr/bin/env node
-
-/*!
- * Expresso
- * Copyright(c) TJ Holowaychuk <tj@vision-media.ca>
- * (MIT Licensed)
- */
-/**
- * Module dependencies.
- */
-
-var assert = require('assert'),
-    childProcess = require('child_process'),
-    http = require('http'),
-    path = require('path'),
-    sys = require('sys'),
-    cwd = process.cwd(),
-    fs = require('fs'),
-    defer;
-
-/**
- * Expresso version.
- */
-
-var version = '0.6.2';
-
-/**
- * Failure count.
- */
-
-var failures = 0;
-
-
-/**
- * Number of tests executed.
- */
-
-var testcount = 0;
-
-/**
- * Whitelist of tests to run.
- */
-var only = [];
-
-/**
- * Boring output.
- */
-var boring = false;
-
-/**
- * Growl notifications.
- */
-
-var growl = false;
-
-/**
- * Server port.
- */
-
-var port = 5555;
-
-/**
- * Watch mode.
- */
-
-var watch = false;
-
-/**
- * Execute serially.
- */
-
-var serial = false;
-
-/**
- * Default timeout.
- */
-
-var timeout = 2000;
-
-/**
- * Usage documentation.
- */
-
-var usage = ''
-    + '[bold]{Usage}: expresso [options] <file ...>'
-    + '\n'
-    + '\n[bold]{Options}:'
-    + '\n  -w, --watch          Watch for modifications and re-execute tests'
-    + '\n  -g, --growl          Enable growl notifications'
-    + '\n  -c, --coverage       Generate and report test coverage'
-    + '\n  -t, --timeout MS     Timeout in milliseconds, defaults to 2000'
-    + '\n  -r, --require PATH   Require the given module path'
-    + '\n  -o, --only TESTS     Execute only the comma sperated TESTS (can be set several times)'
-    + '\n  -I, --include PATH   Unshift the given path to require.paths'
-    + '\n  -p, --port NUM       Port number for test servers, starts at 5555'
-    + '\n  -s, --serial         Execute tests serially'
-    + '\n  -b, --boring         Suppress ansi-escape colors'
-    + '\n  -v, --version        Output version number'
-    + '\n  -h, --help           Display help information'
-    + '\n';
-
-// Parse arguments
-
-var files = [],
-    args = process.argv.slice(2);
-
-while (args.length) {
-    var arg = args.shift();
-    switch (arg) {
-        case '-h':
-        case '--help':
-            print(usage + '\n');
-            process.exit(1);
-            break;
-        case '-v':
-        case '--version':
-            sys.puts(version);
-            process.exit(1);
-            break;
-        case '-i':
-        case '-I':
-        case '--include':
-            if (arg = args.shift()) {
-                require.paths.unshift(arg);
-            } else {
-                throw new Error('--include requires a path');
-            }
-            break;
-        case '-o':
-        case '--only':
-            if (arg = args.shift()) {
-                only = only.concat(arg.split(/ *, */));
-            } else {
-                throw new Error('--only requires comma-separated test names');
-            }
-            break;
-        case '-p':
-        case '--port':
-            if (arg = args.shift()) {
-                port = parseInt(arg, 10);
-            } else {
-                throw new Error('--port requires a number');
-            }
-            break;
-        case '-r':
-        case '--require':
-            if (arg = args.shift()) {
-                require(arg);
-            } else {
-                throw new Error('--require requires a path');
-            }
-            break;
-        case '-t':
-        case '--timeout':
-          if (arg = args.shift()) {
-            timeout = parseInt(arg, 10);
-          } else {
-            throw new Error('--timeout requires an argument');
-          }
-          break;
-        case '-c':
-        case '--cov':
-        case '--coverage':
-            defer = true;
-            childProcess.exec('rm -fr lib-cov && node-jscoverage lib lib-cov', function(err){
-                if (err) throw err;
-                require.paths.unshift('lib-cov');
-                run(files);
-            })
-            break;
-        case '-b':
-        case '--boring':
-               boring = true;
-               break;
-        case '-w':
-        case '--watch':
-            watch = true;
-            break;
-        case '-g':
-        case '--growl':
-            growl = true;
-            break;
-        case '-s':
-        case '--serial':
-            serial = true;
-            break;
-        default:
-            if (/\.js$/.test(arg)) {
-                files.push(arg);
-            }
-            break;
-    }
-}
-
-/**
- * Colorized sys.error().
- *
- * @param {String} str
- */
-
-function print(str){
-    sys.error(colorize(str));
-}
-
-/**
- * Colorize the given string using ansi-escape sequences.
- * Disabled when --boring is set.
- *
- * @param {String} str
- * @return {String}
- */
-
-function colorize(str){
-    var colors = { bold: 1, red: 31, green: 32, yellow: 33 };
-    return str.replace(/\[(\w+)\]\{([^]*?)\}/g, function(_, color, str){
-        return boring
-            ? str
-            : '\x1B[' + colors[color] + 'm' + str + '\x1B[0m';
-    });
-}
-
-// Alias deepEqual as eql for complex equality
-
-assert.eql = assert.deepEqual;
-
-/**
- * Assert that `val` is null.
- *
- * @param {Mixed} val
- * @param {String} msg
- */
-
-assert.isNull = function(val, msg) {
-    assert.strictEqual(null, val, msg);
-};
-
-/**
- * Assert that `val` is not null.
- *
- * @param {Mixed} val
- * @param {String} msg
- */
-
-assert.isNotNull = function(val, msg) {
-    assert.notStrictEqual(null, val, msg);
-};
-
-/**
- * Assert that `val` is undefined.
- *
- * @param {Mixed} val
- * @param {String} msg
- */
-
-assert.isUndefined = function(val, msg) {
-    assert.strictEqual(undefined, val, msg);
-};
-
-/**
- * Assert that `val` is not undefined.
- *
- * @param {Mixed} val
- * @param {String} msg
- */
-
-assert.isDefined = function(val, msg) {
-    assert.notStrictEqual(undefined, val, msg);
-};
-
-/**
- * Assert that `obj` is `type`.
- *
- * @param {Mixed} obj
- * @param {String} type
- * @api public
- */
-
-assert.type = function(obj, type, msg){
-    var real = typeof obj;
-    msg = msg || 'typeof ' + sys.inspect(obj) + ' is ' + real + ', expected ' + type;
-    assert.ok(type === real, msg);
-};
-
-/**
- * Assert that `str` matches `regexp`.
- *
- * @param {String} str
- * @param {RegExp} regexp
- * @param {String} msg
- */
-
-assert.match = function(str, regexp, msg) {
-    msg = msg || sys.inspect(str) + ' does not match ' + sys.inspect(regexp);
-    assert.ok(regexp.test(str), msg);
-};
-
-/**
- * Assert that `val` is within `obj`.
- *
- * Examples:
- *
- *    assert.includes('foobar', 'bar');
- *    assert.includes(['foo', 'bar'], 'foo');
- *
- * @param {String|Array} obj
- * @param {Mixed} val
- * @param {String} msg
- */
-
-assert.includes = function(obj, val, msg) {
-    msg = msg || sys.inspect(obj) + ' does not include ' + sys.inspect(val);
-    assert.ok(obj.indexOf(val) >= 0, msg);
-};
-
-/**
- * Assert length of `val` is `n`.
- *
- * @param {Mixed} val
- * @param {Number} n
- * @param {String} msg
- */
-
-assert.length = function(val, n, msg) {
-    msg = msg || sys.inspect(val) + ' has length of ' + val.length + ', expected ' + n;
-    assert.equal(n, val.length, msg);
-};
-
-/**
- * Assert response from `server` with
- * the given `req` object and `res` assertions object.
- *
- * @param {Server} server
- * @param {Object} req
- * @param {Object|Function} res
- * @param {String} msg
- */
-
-assert.response = function(server, req, res, msg){
-    // Callback as third or fourth arg
-    var callback = typeof res === 'function'
-        ? res
-        : typeof msg === 'function'
-            ? msg
-            : function(){};
-
-    // Default messate to test title
-    if (typeof msg === 'function') msg = null;
-    msg = msg || assert.testTitle;
-    msg += '. ';
-
-    // Pending responses
-    server.__pending = server.__pending || 0;
-    server.__pending++;
-
-    // Create client
-    if (!server.fd) {
-        server.listen(server.__port = port++, '127.0.0.1');
-        server.client = http.createClient(server.__port);
-    }
-
-    // Issue request
-    var timer,
-        client = server.client,
-        method = req.method || 'GET',
-        status = res.status || res.statusCode,
-        data = req.data || req.body,
-        timeout = req.timeout || 0;
-
-    var request = client.request(method, req.url, req.headers);
-
-    // Timeout
-    if (timeout) {
-        timer = setTimeout(function(){
-            --server.__pending || server.close();
-            delete req.timeout;
-            assert.fail(msg + 'Request timed out after ' + timeout + 'ms.');
-        }, timeout);
-    }
-
-    if (data) request.write(data);
-    request.addListener('response', function(response){
-        response.body = '';
-        response.setEncoding('utf8');
-        response.addListener('data', function(chunk){ response.body += chunk; });
-        response.addListener('end', function(){
-            --server.__pending || server.close();
-            if (timer) clearTimeout(timer);
-
-            // Assert response body
-            if (res.body !== undefined) {
-                var eql = res.body instanceof RegExp
-                  ? res.body.test(response.body)
-                  : res.body === response.body;
-                assert.ok(
-                    eql,
-                    msg + 'Invalid response body.\n'
-                        + '    Expected: ' + sys.inspect(res.body) + '\n'
-                        + '    Got: ' + sys.inspect(response.body)
-                );
-            }
-
-            // Assert response status
-            if (typeof status === 'number') {
-                assert.equal(
-                    response.statusCode,
-                    status,
-                    msg + colorize('Invalid response status code.\n'
-                        + '    Expected: [green]{' + status + '}\n'
-                        + '    Got: [red]{' + response.statusCode + '}')
-                );
-            }
-
-            // Assert response headers
-            if (res.headers) {
-                var keys = Object.keys(res.headers);
-                for (var i = 0, len = keys.length; i < len; ++i) {
-                    var name = keys[i],
-                        actual = response.headers[name.toLowerCase()],
-                        expected = res.headers[name];
-                    assert.equal(
-                        actual,
-                        expected,
-                        msg + colorize('Invalid response header [bold]{' + name + '}.\n'
-                            + '    Expected: [green]{' + expected + '}\n'
-                            + '    Got: [red]{' + actual + '}')
-                    );
-                }
-            }
-
-            // Callback
-            callback(response);
-        });
-    });
-    request.end();
-};
-
-/**
- * Pad the given string to the maximum width provided.
- *
- * @param  {String} str
- * @param  {Number} width
- * @return {String}
- */
-
-function lpad(str, width) {
-    str = String(str);
-    var n = width - str.length;
-    if (n < 1) return str;
-    while (n--) str = ' ' + str;
-    return str;
-}
-
-/**
- * Pad the given string to the maximum width provided.
- *
- * @param  {String} str
- * @param  {Number} width
- * @return {String}
- */
-
-function rpad(str, width) {
-    str = String(str);
-    var n = width - str.length;
-    if (n < 1) return str;
-    while (n--) str = str + ' ';
-    return str;
-}
-
-/**
- * Report test coverage.
- *
- * @param  {Object} cov
- */
-
-function reportCoverage(cov) {
-    populateCoverage(cov);
-    // Stats
-    print('\n   [bold]{Test Coverage}\n');
-    var sep = '   +------------------------------------------+----------+------+------+--------+',
-        lastSep = '                                              +----------+------+------+--------+';
-    sys.puts(sep);
-    sys.puts('   | filename                                 | coverage | LOC  | SLOC | missed |');
-    sys.puts(sep);
-    for (var name in cov) {
-        var file = cov[name];
-        if (Array.isArray(file)) {
-            sys.print('   | ' + rpad(name, 40));
-            sys.print(' | ' + lpad(file.coverage.toFixed(2), 8));
-            sys.print(' | ' + lpad(file.LOC, 4));
-            sys.print(' | ' + lpad(file.SLOC, 4));
-            sys.print(' | ' + lpad(file.totalMisses, 6));
-            sys.print(' |\n');
-        }
-    }
-    sys.puts(sep);
-    sys.print('     ' + rpad('', 40));
-    sys.print(' | ' + lpad(cov.coverage.toFixed(2), 8));
-    sys.print(' | ' + lpad(cov.LOC, 4));
-    sys.print(' | ' + lpad(cov.SLOC, 4));
-    sys.print(' | ' + lpad(cov.totalMisses, 6));
-    sys.print(' |\n');
-    sys.puts(lastSep);
-    // Source
-    for (var name in cov) {
-        if (name.match(/\.js$/)) {
-            var file = cov[name];
-            print('\n   [bold]{' + name + '}:');
-            print(file.source);
-            sys.print('\n');
-        }
-    }
-}
-
-/**
- * Populate code coverage data.
- *
- * @param  {Object} cov
- */
-
-function populateCoverage(cov) {
-    cov.LOC = 
-    cov.SLOC =
-    cov.totalFiles =
-    cov.totalHits =
-    cov.totalMisses = 
-    cov.coverage = 0;
-    for (var name in cov) {
-        var file = cov[name];
-        if (Array.isArray(file)) {
-            // Stats
-            ++cov.totalFiles;
-            cov.totalHits += file.totalHits = coverage(file, true);
-            cov.totalMisses += file.totalMisses = coverage(file, false);
-            file.totalLines = file.totalHits + file.totalMisses;
-            cov.SLOC += file.SLOC = file.totalLines;
-            if (!file.source) file.source = [];
-            cov.LOC += file.LOC = file.source.length;
-            file.coverage = (file.totalHits / file.totalLines) * 100;
-            // Source
-            var width = file.source.length.toString().length;
-            file.source = file.source.map(function(line, i){
-                ++i;
-                var hits = file[i] === 0 ? 0 : (file[i] || ' ');
-                if (!boring) {
-                    if (hits === 0) {
-                        hits = '\x1b[31m' + hits + '\x1b[0m';
-                        line = '\x1b[41m' + line + '\x1b[0m';
-                    } else {
-                        hits = '\x1b[32m' + hits + '\x1b[0m';
-                    }
-                }
-                return '\n     ' + lpad(i, width) + ' | ' + hits + ' | ' + line;
-            }).join('');
-        }
-    }
-    cov.coverage = (cov.totalHits / cov.SLOC) * 100;
-}
-
-/**
- * Total coverage for the given file data.
- *
- * @param  {Array} data
- * @return {Type}
- */
-
-function coverage(data, val) {
-    var n = 0;
-    for (var i = 0, len = data.length; i < len; ++i) {
-        if (data[i] !== undefined && data[i] == val) ++n;
-    }
-    return n;  
-}
-
-/**
- * Run the given test `files`, or try _test/*_.
- *
- * @param  {Array} files
- */
-
-function run(files) {
-    if (!files.length) {
-        try {
-            files = fs.readdirSync('test').map(function(file){
-                return 'test/' + file;
-            });
-        } catch (err) {
-            print('\n  failed to load tests in [bold]{./test}\n');
-            ++failures;
-            process.exit(1);
-        }
-    }
-    if (watch) watchFiles(files);
-    runFiles(files);
-}
-
-/**
- * Show the cursor when `show` is true, otherwise hide it.
- *
- * @param {Boolean} show
- */
-
-function cursor(show) {
-    if (show) {
-        sys.print('\x1b[?25h');
-    } else {
-        sys.print('\x1b[?25l');
-    }
-}
-
-/**
- * Run the given test `files`.
- *
- * @param {Array} files
- */
-
-function runFiles(files) {
-    files.forEach(runFile);
-}
-
-/**
- * Run tests for the given `file`.
- *
- * @param {String} file
- */
-
-function runFile(file) {
-    if (file.match(/\.js$/)) {
-        var title = path.basename(file),
-            file = path.join(cwd, file),
-            mod = require(file.replace(/\.js$/, ''));
-        (function check(){
-           var len = Object.keys(mod).length;
-           if (len) {
-               runSuite(title, mod);
-           } else {
-               setTimeout(check, 20);
-           }
-        })();
-    }
-}
-
-/**
- * Clear the module cache for the given `file`.
- *
- * @param {String} file
- */
-
-function clearCache(file) {
-    var keys = Object.keys(module.moduleCache);
-    for (var i = 0, len = keys.length; i < len; ++i) {
-        var key = keys[i];
-        if (key.indexOf(file) === key.length - file.length) {
-            delete module.moduleCache[key];
-        }
-    }
-}
-
-/**
- * Watch the given `files` for changes.
- *
- * @param {Array} files
- */
-
-function watchFiles(files) {
-    var p = 0,
-        c = ['▫   ', '▫▫  ', '▫▫▫ ', ' ▫▫▫',
-             '  ▫▫', '   ▫', '   ▫', '  ▫▫',
-             '▫▫▫ ', '▫▫  ', '▫   '],
-        l = c.length;
-    cursor(false);
-    setInterval(function(){
-        sys.print(colorize('  [green]{' + c[p++ % l] + '} watching\r'));
-    }, 100);
-    files.forEach(function(file){
-        fs.watchFile(file, { interval: 100 }, function(curr, prev){
-            if (curr.mtime > prev.mtime) {
-                print('  [yellow]{◦} ' + file);
-                clearCache(file);
-                runFile(file);
-            }
-        });
-    });
-}
-
-/**
- * Report `err` for the given `test` and `suite`.
- *
- * @param {String} suite
- * @param {String} test
- * @param {Error} err
- */
-
-function error(suite, test, err) {
-    ++failures;
-    var name = err.name,
-        stack = err.stack.replace(err.name, ''),
-        label = test === 'uncaught'
-            ? test
-            : suite + ' ' + test;
-    print('\n   [bold]{' + label + '}: [red]{' + name + '}' + stack + '\n');
-    if (watch) notify(label + ' failed');
-}
-
-/**
- * Run the given tests.
- *
- * @param  {String} title
- * @param  {Object} tests
- */
-
-var dots = 0;
-function runSuite(title, tests) {
-    // Keys
-    var keys = only.length
-        ? only.slice(0)
-        : Object.keys(tests);
-
-    // Setup
-    var setup = tests.setup || function(fn){ fn(); };
-    
-    // Iterate tests
-    (function next(){
-        if (keys.length) {
-            var key,
-                test = tests[key = keys.shift()];
-            // Non-tests
-            if (key === 'setup') return next();
-
-            // Run test
-            if (test) {
-                try {
-                    ++testcount;
-                    assert.testTitle = key;
-                    if (serial) {
-                        if (!watch) {
-                            sys.print('.');
-                            if (++dots % 25 === 0) sys.print('\n');
-                        }
-                        setup(function(){
-                            if (test.length < 2) {
-                                test(assert);
-                                next();
-                            } else {
-                                var id = setTimeout(function(){
-                                    throw new Error("'" + key + "' timed out");
-                                }, timeout);
-                                test(assert, function(){
-                                    clearTimeout(id);
-                                    next();
-                                });
-                            } 
-                        });
-                    } else {
-                        test(assert, function(fn){
-                            process.addListener('beforeExit', function(){
-                                try {
-                                    fn();
-                                } catch (err) {
-                                    error(title, key, err);
-                                }
-                            });
-                        });
-                    }
-                } catch (err) {
-                    error(title, key, err);
-                }
-            }
-            if (!serial) next();
-        }
-    })();
-}
-
-/**
- * Report exceptions.
- */
-
-function report() {
-    process.emit('beforeExit');
-    if (failures) {
-        print('\n   [bold]{Failures}: [red]{' + failures + '}\n\n');
-        notify('Failures: ' + failures);
-    } else {
-        if (serial) print('');
-        print('\n   [green]{100%} ' + testcount + ' tests\n');
-        notify('100% ok');
-    }
-    if (typeof _$jscoverage === 'object') {
-        reportCoverage(_$jscoverage);
-    }
-}
-
-/**
- * Growl notify the given `msg`.
- *
- * @param {String} msg
- */
-
-function notify(msg) {
-    if (growl) {
-        childProcess.exec('growlnotify -name Expresso -m "' + msg + '"');
-    }
-}
-
-// Report uncaught exceptions
-
-process.addListener('uncaughtException', function(err){
-    error('uncaught', 'uncaught', err);
-});
-
-// Show cursor
-
-['INT', 'TERM', 'QUIT'].forEach(function(sig){
-    process.addListener('SIG' + sig, function(){
-        cursor(true);
-        process.exit(1);
-    });
-});
-
-// Report test coverage when available
-// and emit "beforeExit" event to perform
-// final assertions
-
-var orig = process.emit;
-process.emit = function(event){
-    if (event === 'exit') {
-        report();
-        process.reallyExit(failures);
-    }
-    orig.apply(this, arguments);
-};
-
-// Run test files
-
-if (!defer) run(files);
diff --git a/node/node_modules/jade/support/expresso/docs/api.html b/node/node_modules/jade/support/expresso/docs/api.html
deleted file mode 100644 (file)
index 8718732..0000000
+++ /dev/null
@@ -1,1048 +0,0 @@
-<a href="http://github.com/visionmedia/expresso"><img alt="Fork me on GitHub" id="ribbon" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a><html>
-       <head>
-               <title>Expresso</title>
-               <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
-               <style>body {
-    margin: 0;
-    padding: 0;
-    font: 14px/1.5 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
-    color: #252519;
-}
-a {
-    color: #252519;
-}
-a:hover {
-    text-decoration: underline;
-    color: #19469D;
-}
-p {
-    margin: 12px 0;
-}
-h1, h2, h3 {
-    margin: 0;
-    padding: 0;
-}
-table#source {
-    width: 100%;
-    border-collapse: collapse;
-}
-table#source td:first-child {
-    padding: 30px 40px 30px 40px;
-    vertical-align: top;
-}
-table#source td:first-child,
-table#source td:first-child pre {
-    width: 450px;
-}
-table#source td:last-child {
-    padding: 30px 0 30px 40px;
-    border-left: 1px solid #E5E5EE;
-    background: #F5F5FF;
-}
-table#source tr {
-    border-bottom: 1px solid #E5E5EE;
-}
-table#source tr.filename {
-    padding-top: 40px;
-    border-top: 1px solid #E5E5EE;
-}
-table#source tr.filename td:first-child {
-    text-transform: capitalize;
-}
-table#source tr.filename td:last-child {
-    font-size: 12px;
-}
-table#source tr.filename h2 {
-    margin: 0;
-    padding: 0;
-    cursor: pointer;
-}
-table#source tr.code h1,
-table#source tr.code h2,
-table#source tr.code h3 {
-    margin-top: 30px;
-    font-family: "Lucida Grande", "Helvetica Nueue", Arial, sans-serif;
-    font-size: 18px;
-}
-table#source tr.code h2 {
-    font-size: 16px;
-}
-table#source tr.code h3 {
-    font-size: 14px;
-}
-table#source tr.code ul {
-    margin: 15px 0 15px 35px;
-    padding: 0;
-}
-table#source tr.code ul li {
-    margin: 0;
-    padding: 1px 0;
-}
-table#source tr.code ul li p {
-    margin: 0;
-    padding: 0;
-}
-table#source tr.code td:first-child pre {
-    padding: 20px;
-}
-#ribbon {
-    position: fixed;
-    top: 0;
-    right: 0;
-}
-code .string { color: #219161; }
-code .regexp { color: #219161; }
-code .keyword { color: #954121; }
-code .number { color: #19469D; }
-code .comment { color: #bbb; }
-code .this { color: #19469D; }</style>
-               <script>
-                       $(function(){
-                               $('tr.code').hide();
-                               $('tr.filename').toggle(function(){
-                                       $(this).nextUntil('.filename').fadeIn();
-                               }, function(){
-                                       $(this).nextUntil('.filename').fadeOut();
-                               });
-                       });
-               </script>
-       </head>
-       <body>
-<table id="source"><tbody><tr><td><h1>Expresso</h1><p>Insanely fast TDD framework for <a href="http://nodejs.org">node</a> featuring code coverage reporting.</p></td><td></td></tr><tr class="filename"><td><h2 id="bin/expresso"><a href="#">expresso</a></h2></td><td>bin/expresso</td></tr><tr class="code">
-<td class="docs">
-<h1>!/usr/bin/env node</h1>
-</td>
-<td class="code">
-<pre><code>!
- * <span class="class">Expresso</span>
- * <span class="class">Copyright</span>(<span class="variable">c</span>) <span class="class">TJ</span> <span class="class">Holowaychuk</span> &<span class="variable">lt</span>;<span class="variable">tj</span>@<span class="variable">vision</span>-<span class="variable">media</span>.<span class="variable">ca</span>&<span class="variable">gt</span>;
- * (<span class="class">MIT</span> <span class="class">Licensed</span>)
- </code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Module dependencies.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">assert</span> = <span class="variable">require</span>(<span class="string">'assert'</span>),
-    <span class="variable">childProcess</span> = <span class="variable">require</span>(<span class="string">'child_process'</span>),
-    <span class="variable">http</span> = <span class="variable">require</span>(<span class="string">'http'</span>),
-    <span class="variable">path</span> = <span class="variable">require</span>(<span class="string">'path'</span>),
-    <span class="variable">sys</span> = <span class="variable">require</span>(<span class="string">'sys'</span>),
-    <span class="variable">cwd</span> = <span class="variable">process</span>.<span class="variable">cwd</span>(),
-    <span class="variable">fs</span> = <span class="variable">require</span>(<span class="string">'fs'</span>),
-    <span class="variable">defer</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Expresso version.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">version</span> = <span class="string">'0.6.1'</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Failure count.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">failures</span> = <span class="number integer">0</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Number of tests executed.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">testcount</span> = <span class="number integer">0</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Whitelist of tests to run.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">only</span> = [];</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Boring output.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">boring</span> = <span class="variable">false</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Growl notifications.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">growl</span> = <span class="variable">false</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Server port.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">port</span> = <span class="number integer">5555</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Watch mode.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">watch</span> = <span class="variable">false</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Execute serially.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">serial</span> = <span class="variable">false</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Usage documentation.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">usage</span> = <span class="string">''</span>
-    + <span class="string">'[bold]{Usage}: expresso [options] &lt;file ...&gt;'</span>
-    + <span class="string">'\n'</span>
-    + <span class="string">'\n[bold]{Options}:'</span>
-    + <span class="string">'\n  -w, --watch          Watch for modifications and re-execute tests'</span>
-    + <span class="string">'\n  -g, --growl          Enable growl notifications'</span>
-    + <span class="string">'\n  -c, --coverage       Generate and report test coverage'</span>
-    + <span class="string">'\n  -r, --require PATH   Require the given module path'</span>
-    + <span class="string">'\n  -o, --only TESTS     Execute only the comma sperated TESTS (can be set several times)'</span>
-    + <span class="string">'\n  -I, --include PATH   Unshift the given path to require.paths'</span>
-    + <span class="string">'\n  -p, --port NUM       Port number for test servers, starts at 5555'</span>
-    + <span class="string">'\n  -s, --serial         Execute tests serially'</span>
-    + <span class="string">'\n  -b, --boring         Suppress ansi-escape colors'</span>
-    + <span class="string">'\n  -v, --version        Output version number'</span>
-    + <span class="string">'\n  -h, --help           Display help information'</span>
-    + <span class="string">'\n'</span>;
-
-<span class="comment">// Parse arguments</span>
-
-<span class="keyword">var</span> <span class="variable">files</span> = [],
-    <span class="variable">args</span> = <span class="variable">process</span>.<span class="variable">argv</span>.<span class="variable">slice</span>(<span class="number integer">2</span>);
-
-<span class="keyword">while</span> (<span class="variable">args</span>.<span class="variable">length</span>) {
-    <span class="keyword">var</span> <span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>();
-    <span class="keyword">switch</span> (<span class="variable">arg</span>) {
-        <span class="keyword">case</span> <span class="string">'-h'</span>:
-        <span class="keyword">case</span> <span class="string">'--help'</span>:
-            <span class="variable">print</span>(<span class="variable">usage</span> + <span class="string">'\n'</span>);
-            <span class="variable">process</span>.<span class="variable">exit</span>(<span class="number integer">1</span>);
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-v'</span>:
-        <span class="keyword">case</span> <span class="string">'--version'</span>:
-            <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">version</span>);
-            <span class="variable">process</span>.<span class="variable">exit</span>(<span class="number integer">1</span>);
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-i'</span>:
-        <span class="keyword">case</span> <span class="string">'-I'</span>:
-        <span class="keyword">case</span> <span class="string">'--include'</span>:
-            <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
-                <span class="variable">require</span>.<span class="variable">paths</span>.<span class="variable">unshift</span>(<span class="variable">arg</span>);
-            } <span class="keyword">else</span> {
-                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--include requires a path'</span>);
-            }
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-o'</span>:
-        <span class="keyword">case</span> <span class="string">'--only'</span>:
-            <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
-                <span class="variable">only</span> = <span class="variable">only</span>.<span class="variable">concat</span>(<span class="variable">arg</span>.<span class="variable">split</span>(<span class="regexp">/ *, */</span>));
-            } <span class="keyword">else</span> {
-                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--only requires comma-separated test names'</span>);
-            }
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-p'</span>:
-        <span class="keyword">case</span> <span class="string">'--port'</span>:
-            <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
-                <span class="variable">port</span> = <span class="variable">parseInt</span>(<span class="variable">arg</span>, <span class="number integer">10</span>);
-            } <span class="keyword">else</span> {
-                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--port requires a number'</span>);
-            }
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-r'</span>:
-        <span class="keyword">case</span> <span class="string">'--require'</span>:
-            <span class="keyword">if</span> (<span class="variable">arg</span> = <span class="variable">args</span>.<span class="variable">shift</span>()) {
-                <span class="variable">require</span>(<span class="variable">arg</span>);
-            } <span class="keyword">else</span> {
-                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(<span class="string">'--require requires a path'</span>);
-            }
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-c'</span>:
-        <span class="keyword">case</span> <span class="string">'--cov'</span>:
-        <span class="keyword">case</span> <span class="string">'--coverage'</span>:
-            <span class="variable">defer</span> = <span class="variable">true</span>;
-            <span class="variable">childProcess</span>.<span class="variable">exec</span>(<span class="string">'rm -fr lib-cov &amp;&amp; node-jscoverage lib lib-cov'</span>, <span class="keyword">function</span>(<span class="variable">err</span>){
-                <span class="keyword">if</span> (<span class="variable">err</span>) <span class="keyword">throw</span> <span class="variable">err</span>;
-                <span class="variable">require</span>.<span class="variable">paths</span>.<span class="variable">unshift</span>(<span class="string">'lib-cov'</span>);
-                <span class="variable">run</span>(<span class="variable">files</span>);
-            })
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-b'</span>:
-        <span class="keyword">case</span> <span class="string">'--boring'</span>:
-               <span class="variable">boring</span> = <span class="variable">true</span>;
-               <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-w'</span>:
-        <span class="keyword">case</span> <span class="string">'--watch'</span>:
-            <span class="variable">watch</span> = <span class="variable">true</span>;
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-g'</span>:
-        <span class="keyword">case</span> <span class="string">'--growl'</span>:
-            <span class="variable">growl</span> = <span class="variable">true</span>;
-            <span class="keyword">break</span>;
-        <span class="keyword">case</span> <span class="string">'-s'</span>:
-        <span class="keyword">case</span> <span class="string">'--serial'</span>:
-            <span class="variable">serial</span> = <span class="variable">true</span>;
-            <span class="keyword">break</span>;
-        <span class="keyword">default</span>:
-            <span class="keyword">if</span> (<span class="regexp">/\.js$/</span>.<span class="variable">test</span>(<span class="variable">arg</span>)) {
-                <span class="variable">files</span>.<span class="variable">push</span>(<span class="variable">arg</span>);
-            }
-            <span class="keyword">break</span>;
-    }
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Colorized sys.error().</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">print</span>(<span class="variable">str</span>){
-    <span class="variable">sys</span>.<span class="variable">error</span>(<span class="variable">colorize</span>(<span class="variable">str</span>));
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Colorize the given string using ansi-escape sequences.
-Disabled when --boring is set.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li><li><p><strong>return</strong>: <em>String</em> </p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">colorize</span>(<span class="variable">str</span>){
-    <span class="keyword">var</span> <span class="variable">colors</span> = { <span class="variable">bold</span>: <span class="number integer">1</span>, <span class="variable">red</span>: <span class="number integer">31</span>, <span class="variable">green</span>: <span class="number integer">32</span>, <span class="variable">yellow</span>: <span class="number integer">33</span> };
-    <span class="keyword">return</span> <span class="variable">str</span>.<span class="variable">replace</span>(<span class="regexp">/\[(\w+)\]\{([^]*?)\}/g</span>, <span class="keyword">function</span>(<span class="variable">_</span>, <span class="variable">color</span>, <span class="variable">str</span>){
-        <span class="keyword">return</span> <span class="variable">boring</span>
-            ? <span class="variable">str</span>
-            : <span class="string">'\x1B['</span> + <span class="variable">colors</span>[<span class="variable">color</span>] + <span class="string">'m'</span> + <span class="variable">str</span> + <span class="string">'\x1B[0m'</span>;
-    });
-}
-
-<span class="comment">// Alias deepEqual as eql for complex equality</span>
-
-<span class="variable">assert</span>.<span class="variable">eql</span> = <span class="variable">assert</span>.<span class="variable">deepEqual</span>;</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert that <code>val</code> is null.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">isNull</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">msg</span>) {
-    <span class="variable">assert</span>.<span class="variable">strictEqual</span>(<span class="keyword">null</span>, <span class="variable">val</span>, <span class="variable">msg</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert that <code>val</code> is not null.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">isNotNull</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">msg</span>) {
-    <span class="variable">assert</span>.<span class="variable">notStrictEqual</span>(<span class="keyword">null</span>, <span class="variable">val</span>, <span class="variable">msg</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert that <code>val</code> is undefined.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">isUndefined</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">msg</span>) {
-    <span class="variable">assert</span>.<span class="variable">strictEqual</span>(<span class="variable">undefined</span>, <span class="variable">val</span>, <span class="variable">msg</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert that <code>val</code> is not undefined.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">isDefined</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">msg</span>) {
-    <span class="variable">assert</span>.<span class="variable">notStrictEqual</span>(<span class="variable">undefined</span>, <span class="variable">val</span>, <span class="variable">msg</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert that <code>obj</code> is <code>type</code>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Mixed</em>  obj</p></li><li><p><strong>param</strong>: <em>String</em>  type</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">type</span> = <span class="keyword">function</span>(<span class="variable">obj</span>, <span class="variable">type</span>, <span class="variable">msg</span>){
-    <span class="keyword">var</span> <span class="variable">real</span> = <span class="keyword">typeof</span> <span class="variable">obj</span>;
-    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="string">'typeof '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">obj</span>) + <span class="string">' is '</span> + <span class="variable">real</span> + <span class="string">', expected '</span> + <span class="variable">type</span>;
-    <span class="variable">assert</span>.<span class="variable">ok</span>(<span class="variable">type</span> === <span class="variable">real</span>, <span class="variable">msg</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert that <code>str</code> matches <code>regexp</code>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li><li><p><strong>param</strong>: <em>RegExp</em>  regexp</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">match</span> = <span class="keyword">function</span>(<span class="variable">str</span>, <span class="variable">regexp</span>, <span class="variable">msg</span>) {
-    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">str</span>) + <span class="string">' does not match '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">regexp</span>);
-    <span class="variable">assert</span>.<span class="variable">ok</span>(<span class="variable">regexp</span>.<span class="variable">test</span>(<span class="variable">str</span>), <span class="variable">msg</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert that <code>val</code> is within <code>obj</code>.</p>
-
-<h2>Examples</h2>
-
-<p>   assert.includes('foobar', 'bar');
-   assert.includes(['foo', 'bar'], 'foo');</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String | Array</em>  obj</p></li><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">includes</span> = <span class="keyword">function</span>(<span class="variable">obj</span>, <span class="variable">val</span>, <span class="variable">msg</span>) {
-    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">obj</span>) + <span class="string">' does not include '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">val</span>);
-    <span class="variable">assert</span>.<span class="variable">ok</span>(<span class="variable">obj</span>.<span class="variable">indexOf</span>(<span class="variable">val</span>) &<span class="variable">gt</span>;= <span class="number integer">0</span>, <span class="variable">msg</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert length of <code>val</code> is <code>n</code>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Mixed</em>  val</p></li><li><p><strong>param</strong>: <em>Number</em>  n</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">length</span> = <span class="keyword">function</span>(<span class="variable">val</span>, <span class="variable">n</span>, <span class="variable">msg</span>) {
-    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">val</span>) + <span class="string">' has length of '</span> + <span class="variable">val</span>.<span class="variable">length</span> + <span class="string">', expected '</span> + <span class="variable">n</span>;
-    <span class="variable">assert</span>.<span class="variable">equal</span>(<span class="variable">n</span>, <span class="variable">val</span>.<span class="variable">length</span>, <span class="variable">msg</span>);
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Assert response from <code>server</code> with
-the given <code>req</code> object and <code>res</code> assertions object.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Server</em>  server</p></li><li><p><strong>param</strong>: <em>Object</em>  req</p></li><li><p><strong>param</strong>: <em>Object | Function</em>  res</p></li><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="variable">assert</span>.<span class="variable">response</span> = <span class="keyword">function</span>(<span class="variable">server</span>, <span class="variable">req</span>, <span class="variable">res</span>, <span class="variable">msg</span>){
-    <span class="comment">// Callback as third or fourth arg</span>
-    <span class="keyword">var</span> <span class="variable">callback</span> = <span class="keyword">typeof</span> <span class="variable">res</span> === <span class="string">'function'</span>
-        ? <span class="variable">res</span>
-        : <span class="keyword">typeof</span> <span class="variable">msg</span> === <span class="string">'function'</span>
-            ? <span class="variable">msg</span>
-            : <span class="keyword">function</span>(){};
-
-    <span class="comment">// Default messate to test title</span>
-    <span class="keyword">if</span> (<span class="keyword">typeof</span> <span class="variable">msg</span> === <span class="string">'function'</span>) <span class="variable">msg</span> = <span class="keyword">null</span>;
-    <span class="variable">msg</span> = <span class="variable">msg</span> || <span class="variable">assert</span>.<span class="variable">testTitle</span>;
-    <span class="variable">msg</span> += <span class="string">'. '</span>;
-
-    <span class="comment">// Pending responses</span>
-    <span class="variable">server</span>.<span class="variable">__pending</span> = <span class="variable">server</span>.<span class="variable">__pending</span> || <span class="number integer">0</span>;
-    <span class="variable">server</span>.<span class="variable">__pending</span>++;
-
-    <span class="comment">// Create client</span>
-    <span class="keyword">if</span> (!<span class="variable">server</span>.<span class="variable">fd</span>) {
-        <span class="variable">server</span>.<span class="variable">listen</span>(<span class="variable">server</span>.<span class="variable">__port</span> = <span class="variable">port</span>++, <span class="string">'127.0.0.1'</span>);
-        <span class="variable">server</span>.<span class="variable">client</span> = <span class="variable">http</span>.<span class="variable">createClient</span>(<span class="variable">server</span>.<span class="variable">__port</span>);
-    }
-
-    <span class="comment">// Issue request</span>
-    <span class="keyword">var</span> <span class="variable">timer</span>,
-        <span class="variable">client</span> = <span class="variable">server</span>.<span class="variable">client</span>,
-        <span class="variable">method</span> = <span class="variable">req</span>.<span class="variable">method</span> || <span class="string">'GET'</span>,
-        <span class="variable">status</span> = <span class="variable">res</span>.<span class="variable">status</span> || <span class="variable">res</span>.<span class="variable">statusCode</span>,
-        <span class="variable">data</span> = <span class="variable">req</span>.<span class="variable">data</span> || <span class="variable">req</span>.<span class="variable">body</span>,
-        <span class="variable">timeout</span> = <span class="variable">req</span>.<span class="variable">timeout</span> || <span class="number integer">0</span>;
-
-    <span class="keyword">var</span> <span class="variable">request</span> = <span class="variable">client</span>.<span class="variable">request</span>(<span class="variable">method</span>, <span class="variable">req</span>.<span class="variable">url</span>, <span class="variable">req</span>.<span class="variable">headers</span>);
-
-    <span class="comment">// Timeout</span>
-    <span class="keyword">if</span> (<span class="variable">timeout</span>) {
-        <span class="variable">timer</span> = <span class="variable">setTimeout</span>(<span class="keyword">function</span>(){
-            --<span class="variable">server</span>.<span class="variable">__pending</span> || <span class="variable">server</span>.<span class="variable">close</span>();
-            <span class="keyword">delete</span> <span class="variable">req</span>.<span class="variable">timeout</span>;
-            <span class="variable">assert</span>.<span class="variable">fail</span>(<span class="variable">msg</span> + <span class="string">'Request timed out after '</span> + <span class="variable">timeout</span> + <span class="string">'ms.'</span>);
-        }, <span class="variable">timeout</span>);
-    }
-
-    <span class="keyword">if</span> (<span class="variable">data</span>) <span class="variable">request</span>.<span class="variable">write</span>(<span class="variable">data</span>);
-    <span class="variable">request</span>.<span class="variable">addListener</span>(<span class="string">'response'</span>, <span class="keyword">function</span>(<span class="variable">response</span>){
-        <span class="variable">response</span>.<span class="variable">body</span> = <span class="string">''</span>;
-        <span class="variable">response</span>.<span class="variable">setEncoding</span>(<span class="string">'utf8'</span>);
-        <span class="variable">response</span>.<span class="variable">addListener</span>(<span class="string">'data'</span>, <span class="keyword">function</span>(<span class="variable">chunk</span>){ <span class="variable">response</span>.<span class="variable">body</span> += <span class="variable">chunk</span>; });
-        <span class="variable">response</span>.<span class="variable">addListener</span>(<span class="string">'end'</span>, <span class="keyword">function</span>(){
-            --<span class="variable">server</span>.<span class="variable">__pending</span> || <span class="variable">server</span>.<span class="variable">close</span>();
-            <span class="keyword">if</span> (<span class="variable">timer</span>) <span class="variable">clearTimeout</span>(<span class="variable">timer</span>);
-
-            <span class="comment">// Assert response body</span>
-            <span class="keyword">if</span> (<span class="variable">res</span>.<span class="variable">body</span> !== <span class="variable">undefined</span>) {
-                <span class="variable">assert</span>.<span class="variable">equal</span>(
-                    <span class="variable">response</span>.<span class="variable">body</span>,
-                    <span class="variable">res</span>.<span class="variable">body</span>,
-                    <span class="variable">msg</span> + <span class="string">'Invalid response body.\n'</span>
-                        + <span class="string">'    Expected: '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">res</span>.<span class="variable">body</span>) + <span class="string">'\n'</span>
-                        + <span class="string">'    Got: '</span> + <span class="variable">sys</span>.<span class="variable">inspect</span>(<span class="variable">response</span>.<span class="variable">body</span>)
-                );
-            }
-
-            <span class="comment">// Assert response status</span>
-            <span class="keyword">if</span> (<span class="keyword">typeof</span> <span class="variable">status</span> === <span class="string">'number'</span>) {
-                <span class="variable">assert</span>.<span class="variable">equal</span>(
-                    <span class="variable">response</span>.<span class="variable">statusCode</span>,
-                    <span class="variable">status</span>,
-                    <span class="variable">msg</span> + <span class="variable">colorize</span>(<span class="string">'Invalid response status code.\n'</span>
-                        + <span class="string">'    Expected: [green]{'</span> + <span class="variable">status</span> + <span class="string">'}\n'</span>
-                        + <span class="string">'    Got: [red]{'</span> + <span class="variable">response</span>.<span class="variable">statusCode</span> + <span class="string">'}'</span>)
-                );
-            }
-
-            <span class="comment">// Assert response headers</span>
-            <span class="keyword">if</span> (<span class="variable">res</span>.<span class="variable">headers</span>) {
-                <span class="keyword">var</span> <span class="variable">keys</span> = <span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">res</span>.<span class="variable">headers</span>);
-                <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">i</span> = <span class="number integer">0</span>, <span class="variable">len</span> = <span class="variable">keys</span>.<span class="variable">length</span>; <span class="variable">i</span> &<span class="variable">lt</span>; <span class="variable">len</span>; ++<span class="variable">i</span>) {
-                    <span class="keyword">var</span> <span class="variable">name</span> = <span class="variable">keys</span>[<span class="variable">i</span>],
-                        <span class="variable">actual</span> = <span class="variable">response</span>.<span class="variable">headers</span>[<span class="variable">name</span>.<span class="variable">toLowerCase</span>()],
-                        <span class="variable">expected</span> = <span class="variable">res</span>.<span class="variable">headers</span>[<span class="variable">name</span>];
-                    <span class="variable">assert</span>.<span class="variable">equal</span>(
-                        <span class="variable">actual</span>,
-                        <span class="variable">expected</span>,
-                        <span class="variable">msg</span> + <span class="variable">colorize</span>(<span class="string">'Invalid response header [bold]{'</span> + <span class="variable">name</span> + <span class="string">'}.\n'</span>
-                            + <span class="string">'    Expected: [green]{'</span> + <span class="variable">expected</span> + <span class="string">'}\n'</span>
-                            + <span class="string">'    Got: [red]{'</span> + <span class="variable">actual</span> + <span class="string">'}'</span>)
-                    );
-                }
-            }
-
-            <span class="comment">// Callback</span>
-            <span class="variable">callback</span>(<span class="variable">response</span>);
-        });
-    });
-    <span class="variable">request</span>.<span class="variable">end</span>();
-};</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Pad the given string to the maximum width provided.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li><li><p><strong>param</strong>: <em>Number</em>  width</p></li><li><p><strong>return</strong>: <em>String</em> </p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">lpad</span>(<span class="variable">str</span>, <span class="variable">width</span>) {
-    <span class="variable">str</span> = <span class="class">String</span>(<span class="variable">str</span>);
-    <span class="keyword">var</span> <span class="variable">n</span> = <span class="variable">width</span> - <span class="variable">str</span>.<span class="variable">length</span>;
-    <span class="keyword">if</span> (<span class="variable">n</span> &<span class="variable">lt</span>; <span class="number integer">1</span>) <span class="keyword">return</span> <span class="variable">str</span>;
-    <span class="keyword">while</span> (<span class="variable">n</span>--) <span class="variable">str</span> = <span class="string">' '</span> + <span class="variable">str</span>;
-    <span class="keyword">return</span> <span class="variable">str</span>;
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Pad the given string to the maximum width provided.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  str</p></li><li><p><strong>param</strong>: <em>Number</em>  width</p></li><li><p><strong>return</strong>: <em>String</em> </p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">rpad</span>(<span class="variable">str</span>, <span class="variable">width</span>) {
-    <span class="variable">str</span> = <span class="class">String</span>(<span class="variable">str</span>);
-    <span class="keyword">var</span> <span class="variable">n</span> = <span class="variable">width</span> - <span class="variable">str</span>.<span class="variable">length</span>;
-    <span class="keyword">if</span> (<span class="variable">n</span> &<span class="variable">lt</span>; <span class="number integer">1</span>) <span class="keyword">return</span> <span class="variable">str</span>;
-    <span class="keyword">while</span> (<span class="variable">n</span>--) <span class="variable">str</span> = <span class="variable">str</span> + <span class="string">' '</span>;
-    <span class="keyword">return</span> <span class="variable">str</span>;
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Report test coverage.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Object</em>  cov</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">reportCoverage</span>(<span class="variable">cov</span>) {
-    <span class="variable">populateCoverage</span>(<span class="variable">cov</span>);
-    <span class="comment">// Stats</span>
-    <span class="variable">print</span>(<span class="string">'\n   [bold]{Test Coverage}\n'</span>);
-    <span class="keyword">var</span> <span class="variable">sep</span> = <span class="string">'   +------------------------------------------+----------+------+------+--------+'</span>,
-        <span class="variable">lastSep</span> = <span class="string">'                                              +----------+------+------+--------+'</span>;
-    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">sep</span>);
-    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="string">'   | filename                                 | coverage | LOC  | SLOC | missed |'</span>);
-    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">sep</span>);
-    <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">name</span> <span class="keyword">in</span> <span class="variable">cov</span>) {
-        <span class="keyword">var</span> <span class="variable">file</span> = <span class="variable">cov</span>[<span class="variable">name</span>];
-        <span class="keyword">if</span> (<span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">file</span>)) {
-            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'   | '</span> + <span class="variable">rpad</span>(<span class="variable">name</span>, <span class="number integer">40</span>));
-            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">file</span>.<span class="variable">coverage</span>.<span class="variable">toFixed</span>(<span class="number integer">2</span>), <span class="number integer">8</span>));
-            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">file</span>.<span class="class">LOC</span>, <span class="number integer">4</span>));
-            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">file</span>.<span class="class">SLOC</span>, <span class="number integer">4</span>));
-            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">file</span>.<span class="variable">totalMisses</span>, <span class="number integer">6</span>));
-            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' |\n'</span>);
-        }
-    }
-    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">sep</span>);
-    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'     '</span> + <span class="variable">rpad</span>(<span class="string">''</span>, <span class="number integer">40</span>));
-    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">cov</span>.<span class="variable">coverage</span>.<span class="variable">toFixed</span>(<span class="number integer">2</span>), <span class="number integer">8</span>));
-    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">cov</span>.<span class="class">LOC</span>, <span class="number integer">4</span>));
-    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">cov</span>.<span class="class">SLOC</span>, <span class="number integer">4</span>));
-    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' | '</span> + <span class="variable">lpad</span>(<span class="variable">cov</span>.<span class="variable">totalMisses</span>, <span class="number integer">6</span>));
-    <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">' |\n'</span>);
-    <span class="variable">sys</span>.<span class="variable">puts</span>(<span class="variable">lastSep</span>);
-    <span class="comment">// Source</span>
-    <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">name</span> <span class="keyword">in</span> <span class="variable">cov</span>) {
-        <span class="keyword">if</span> (<span class="variable">name</span>.<span class="variable">match</span>(<span class="regexp">/\.js$/</span>)) {
-            <span class="keyword">var</span> <span class="variable">file</span> = <span class="variable">cov</span>[<span class="variable">name</span>];
-            <span class="variable">print</span>(<span class="string">'\n   [bold]{'</span> + <span class="variable">name</span> + <span class="string">'}:'</span>);
-            <span class="variable">print</span>(<span class="variable">file</span>.<span class="variable">source</span>);
-            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'\n'</span>);
-        }
-    }
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Populate code coverage data.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Object</em>  cov</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">populateCoverage</span>(<span class="variable">cov</span>) {
-    <span class="variable">cov</span>.<span class="class">LOC</span> = 
-    <span class="variable">cov</span>.<span class="class">SLOC</span> =
-    <span class="variable">cov</span>.<span class="variable">totalFiles</span> =
-    <span class="variable">cov</span>.<span class="variable">totalHits</span> =
-    <span class="variable">cov</span>.<span class="variable">totalMisses</span> = 
-    <span class="variable">cov</span>.<span class="variable">coverage</span> = <span class="number integer">0</span>;
-    <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">name</span> <span class="keyword">in</span> <span class="variable">cov</span>) {
-        <span class="keyword">var</span> <span class="variable">file</span> = <span class="variable">cov</span>[<span class="variable">name</span>];
-        <span class="keyword">if</span> (<span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">file</span>)) {
-            <span class="comment">// Stats</span>
-            ++<span class="variable">cov</span>.<span class="variable">totalFiles</span>;
-            <span class="variable">cov</span>.<span class="variable">totalHits</span> += <span class="variable">file</span>.<span class="variable">totalHits</span> = <span class="variable">coverage</span>(<span class="variable">file</span>, <span class="variable">true</span>);
-            <span class="variable">cov</span>.<span class="variable">totalMisses</span> += <span class="variable">file</span>.<span class="variable">totalMisses</span> = <span class="variable">coverage</span>(<span class="variable">file</span>, <span class="variable">false</span>);
-            <span class="variable">file</span>.<span class="variable">totalLines</span> = <span class="variable">file</span>.<span class="variable">totalHits</span> + <span class="variable">file</span>.<span class="variable">totalMisses</span>;
-            <span class="variable">cov</span>.<span class="class">SLOC</span> += <span class="variable">file</span>.<span class="class">SLOC</span> = <span class="variable">file</span>.<span class="variable">totalLines</span>;
-            <span class="keyword">if</span> (!<span class="variable">file</span>.<span class="variable">source</span>) <span class="variable">file</span>.<span class="variable">source</span> = [];
-            <span class="variable">cov</span>.<span class="class">LOC</span> += <span class="variable">file</span>.<span class="class">LOC</span> = <span class="variable">file</span>.<span class="variable">source</span>.<span class="variable">length</span>;
-            <span class="variable">file</span>.<span class="variable">coverage</span> = (<span class="variable">file</span>.<span class="variable">totalHits</span> / <span class="variable">file</span>.<span class="variable">totalLines</span>) * <span class="number integer">100</span>;
-            <span class="comment">// Source</span>
-            <span class="keyword">var</span> <span class="variable">width</span> = <span class="variable">file</span>.<span class="variable">source</span>.<span class="variable">length</span>.<span class="variable">toString</span>().<span class="variable">length</span>;
-            <span class="variable">file</span>.<span class="variable">source</span> = <span class="variable">file</span>.<span class="variable">source</span>.<span class="variable">map</span>(<span class="keyword">function</span>(<span class="variable">line</span>, <span class="variable">i</span>){
-                ++<span class="variable">i</span>;
-                <span class="keyword">var</span> <span class="variable">hits</span> = <span class="variable">file</span>[<span class="variable">i</span>] === <span class="number integer">0</span> ? <span class="number integer">0</span> : (<span class="variable">file</span>[<span class="variable">i</span>] || <span class="string">' '</span>);
-                <span class="keyword">if</span> (!<span class="variable">boring</span>) {
-                    <span class="keyword">if</span> (<span class="variable">hits</span> === <span class="number integer">0</span>) {
-                        <span class="variable">hits</span> = <span class="string">'\x1b[31m'</span> + <span class="variable">hits</span> + <span class="string">'\x1b[0m'</span>;
-                        <span class="variable">line</span> = <span class="string">'\x1b[41m'</span> + <span class="variable">line</span> + <span class="string">'\x1b[0m'</span>;
-                    } <span class="keyword">else</span> {
-                        <span class="variable">hits</span> = <span class="string">'\x1b[32m'</span> + <span class="variable">hits</span> + <span class="string">'\x1b[0m'</span>;
-                    }
-                }
-                <span class="keyword">return</span> <span class="string">'\n     '</span> + <span class="variable">lpad</span>(<span class="variable">i</span>, <span class="variable">width</span>) + <span class="string">' | '</span> + <span class="variable">hits</span> + <span class="string">' | '</span> + <span class="variable">line</span>;
-            }).<span class="variable">join</span>(<span class="string">''</span>);
-        }
-    }
-    <span class="variable">cov</span>.<span class="variable">coverage</span> = (<span class="variable">cov</span>.<span class="variable">totalHits</span> / <span class="variable">cov</span>.<span class="class">SLOC</span>) * <span class="number integer">100</span>;
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Total coverage for the given file data.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Array</em>  data</p></li><li><p><strong>return</strong>: <em>Type</em> </p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">coverage</span>(<span class="variable">data</span>, <span class="variable">val</span>) {
-    <span class="keyword">var</span> <span class="variable">n</span> = <span class="number integer">0</span>;
-    <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">i</span> = <span class="number integer">0</span>, <span class="variable">len</span> = <span class="variable">data</span>.<span class="variable">length</span>; <span class="variable">i</span> &<span class="variable">lt</span>; <span class="variable">len</span>; ++<span class="variable">i</span>) {
-        <span class="keyword">if</span> (<span class="variable">data</span>[<span class="variable">i</span>] !== <span class="variable">undefined</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">data</span>[<span class="variable">i</span>] == <span class="variable">val</span>) ++<span class="variable">n</span>;
-    }
-    <span class="keyword">return</span> <span class="variable">n</span>;  
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Run the given test <code>files</code>, or try <em>test/*</em>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Array</em>  files</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">run</span>(<span class="variable">files</span>) {
-    <span class="keyword">if</span> (!<span class="variable">files</span>.<span class="variable">length</span>) {
-        <span class="keyword">try</span> {
-            <span class="variable">files</span> = <span class="variable">fs</span>.<span class="variable">readdirSync</span>(<span class="string">'test'</span>).<span class="variable">map</span>(<span class="keyword">function</span>(<span class="variable">file</span>){
-                <span class="keyword">return</span> <span class="string">'test/'</span> + <span class="variable">file</span>;
-            });
-        } <span class="keyword">catch</span> (<span class="variable">err</span>) {
-            <span class="variable">print</span>(<span class="string">'\n  failed to load tests in [bold]{./test}\n'</span>);
-            ++<span class="variable">failures</span>;
-            <span class="variable">process</span>.<span class="variable">exit</span>(<span class="number integer">1</span>);
-        }
-    }
-    <span class="keyword">if</span> (<span class="variable">watch</span>) <span class="variable">watchFiles</span>(<span class="variable">files</span>);
-    <span class="variable">runFiles</span>(<span class="variable">files</span>);
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Show the cursor when <code>show</code> is true, otherwise hide it.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Boolean</em>  show</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">cursor</span>(<span class="variable">show</span>) {
-    <span class="keyword">if</span> (<span class="variable">show</span>) {
-        <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'\x1b[?25h'</span>);
-    } <span class="keyword">else</span> {
-        <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'\x1b[?25l'</span>);
-    }
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Run the given test <code>files</code>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Array</em>  files</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">runFiles</span>(<span class="variable">files</span>) {
-    <span class="variable">files</span>.<span class="variable">forEach</span>(<span class="variable">runFile</span>);
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Run tests for the given <code>file</code>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  file</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">runFile</span>(<span class="variable">file</span>) {
-    <span class="keyword">if</span> (<span class="variable">file</span>.<span class="variable">match</span>(<span class="regexp">/\.js$/</span>)) {
-        <span class="keyword">var</span> <span class="variable">title</span> = <span class="variable">path</span>.<span class="variable">basename</span>(<span class="variable">file</span>),
-            <span class="variable">file</span> = <span class="variable">path</span>.<span class="variable">join</span>(<span class="variable">cwd</span>, <span class="variable">file</span>),
-            <span class="variable">mod</span> = <span class="variable">require</span>(<span class="variable">file</span>.<span class="variable">replace</span>(<span class="regexp">/\.js$/</span>, <span class="string">''</span>));
-        (<span class="keyword">function</span> <span class="variable">check</span>(){
-           <span class="keyword">var</span> <span class="variable">len</span> = <span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">mod</span>).<span class="variable">length</span>;
-           <span class="keyword">if</span> (<span class="variable">len</span>) {
-               <span class="variable">runSuite</span>(<span class="variable">title</span>, <span class="variable">mod</span>);
-           } <span class="keyword">else</span> {
-               <span class="variable">setTimeout</span>(<span class="variable">check</span>, <span class="number integer">20</span>);
-           }
-        })();
-    }
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Clear the module cache for the given <code>file</code>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  file</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">clearCache</span>(<span class="variable">file</span>) {
-    <span class="keyword">var</span> <span class="variable">keys</span> = <span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">module</span>.<span class="variable">moduleCache</span>);
-    <span class="keyword">for</span> (<span class="keyword">var</span> <span class="variable">i</span> = <span class="number integer">0</span>, <span class="variable">len</span> = <span class="variable">keys</span>.<span class="variable">length</span>; <span class="variable">i</span> &<span class="variable">lt</span>; <span class="variable">len</span>; ++<span class="variable">i</span>) {
-        <span class="keyword">var</span> <span class="variable">key</span> = <span class="variable">keys</span>[<span class="variable">i</span>];
-        <span class="keyword">if</span> (<span class="variable">key</span>.<span class="variable">indexOf</span>(<span class="variable">file</span>) === <span class="variable">key</span>.<span class="variable">length</span> - <span class="variable">file</span>.<span class="variable">length</span>) {
-            <span class="keyword">delete</span> <span class="variable">module</span>.<span class="variable">moduleCache</span>[<span class="variable">key</span>];
-        }
-    }
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Watch the given <code>files</code> for changes.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>Array</em>  files</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">watchFiles</span>(<span class="variable">files</span>) {
-    <span class="keyword">var</span> <span class="variable">p</span> = <span class="number integer">0</span>,
-        <span class="variable">c</span> = [<span class="string">'▫   '</span>, <span class="string">'▫▫  '</span>, <span class="string">'▫▫▫ '</span>, <span class="string">' ▫▫▫'</span>,
-             <span class="string">'  ▫▫'</span>, <span class="string">'   ▫'</span>, <span class="string">'   ▫'</span>, <span class="string">'  ▫▫'</span>,
-             <span class="string">'▫▫▫ '</span>, <span class="string">'▫▫  '</span>, <span class="string">'▫   '</span>],
-        <span class="variable">l</span> = <span class="variable">c</span>.<span class="variable">length</span>;
-    <span class="variable">cursor</span>(<span class="variable">false</span>);
-    <span class="variable">setInterval</span>(<span class="keyword">function</span>(){
-        <span class="variable">sys</span>.<span class="variable">print</span>(<span class="variable">colorize</span>(<span class="string">'  [green]{'</span> + <span class="variable">c</span>[<span class="variable">p</span>++ % <span class="variable">l</span>] + <span class="string">'} watching\r'</span>));
-    }, <span class="number integer">100</span>);
-    <span class="variable">files</span>.<span class="variable">forEach</span>(<span class="keyword">function</span>(<span class="variable">file</span>){
-        <span class="variable">fs</span>.<span class="variable">watchFile</span>(<span class="variable">file</span>, { <span class="variable">interval</span>: <span class="number integer">100</span> }, <span class="keyword">function</span>(<span class="variable">curr</span>, <span class="variable">prev</span>){
-            <span class="keyword">if</span> (<span class="variable">curr</span>.<span class="variable">mtime</span> &<span class="variable">gt</span>; <span class="variable">prev</span>.<span class="variable">mtime</span>) {
-                <span class="variable">print</span>(<span class="string">'  [yellow]{◦} '</span> + <span class="variable">file</span>);
-                <span class="variable">clearCache</span>(<span class="variable">file</span>);
-                <span class="variable">runFile</span>(<span class="variable">file</span>);
-            }
-        });
-    });
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Report <code>err</code> for the given <code>test</code> and <code>suite</code>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  suite</p></li><li><p><strong>param</strong>: <em>String</em>  test</p></li><li><p><strong>param</strong>: <em>Error</em>  err</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">error</span>(<span class="variable">suite</span>, <span class="variable">test</span>, <span class="variable">err</span>) {
-    ++<span class="variable">failures</span>;
-    <span class="keyword">var</span> <span class="variable">name</span> = <span class="variable">err</span>.<span class="variable">name</span>,
-        <span class="variable">stack</span> = <span class="variable">err</span>.<span class="variable">stack</span>.<span class="variable">replace</span>(<span class="variable">err</span>.<span class="variable">name</span>, <span class="string">''</span>),
-        <span class="keyword">label</span> = <span class="variable">test</span> === <span class="string">'uncaught'</span>
-            ? <span class="variable">test</span>
-            : <span class="variable">suite</span> + <span class="string">' '</span> + <span class="variable">test</span>;
-    <span class="variable">print</span>(<span class="string">'\n   [bold]{'</span> + <span class="keyword">label</span> + <span class="string">'}: [red]{'</span> + <span class="variable">name</span> + <span class="string">'}'</span> + <span class="variable">stack</span> + <span class="string">'\n'</span>);
-    <span class="keyword">if</span> (<span class="variable">watch</span>) <span class="variable">notify</span>(<span class="keyword">label</span> + <span class="string">' failed'</span>);
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Run the given tests.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  title</p></li><li><p><strong>param</strong>: <em>Object</em>  tests</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">var</span> <span class="variable">dots</span> = <span class="number integer">0</span>;
-<span class="keyword">function</span> <span class="variable">runSuite</span>(<span class="variable">title</span>, <span class="variable">tests</span>) {
-    <span class="comment">// Keys</span>
-    <span class="keyword">var</span> <span class="variable">keys</span> = <span class="variable">only</span>.<span class="variable">length</span>
-        ? <span class="variable">only</span>.<span class="variable">slice</span>(<span class="number integer">0</span>)
-        : <span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">tests</span>);
-
-    <span class="comment">// Setup</span>
-    <span class="keyword">var</span> <span class="variable">setup</span> = <span class="variable">tests</span>.<span class="variable">setup</span> || <span class="keyword">function</span>(<span class="variable">fn</span>){ <span class="variable">fn</span>(); };
-    
-    <span class="comment">// Iterate tests</span>
-    (<span class="keyword">function</span> <span class="variable">next</span>(){
-        <span class="keyword">if</span> (<span class="variable">keys</span>.<span class="variable">length</span>) {
-            <span class="keyword">var</span> <span class="variable">key</span>,
-                <span class="variable">test</span> = <span class="variable">tests</span>[<span class="variable">key</span> = <span class="variable">keys</span>.<span class="variable">shift</span>()];
-            <span class="comment">// Non-tests</span>
-            <span class="keyword">if</span> (<span class="variable">key</span> === <span class="string">'setup'</span>) <span class="keyword">return</span> <span class="variable">next</span>();
-
-            <span class="comment">// Run test</span>
-            <span class="keyword">if</span> (<span class="variable">test</span>) {
-                <span class="keyword">try</span> {
-                    ++<span class="variable">testcount</span>;
-                    <span class="variable">assert</span>.<span class="variable">testTitle</span> = <span class="variable">key</span>;
-                    <span class="keyword">if</span> (<span class="variable">serial</span>) {
-                        <span class="keyword">if</span> (!<span class="variable">watch</span>) {
-                            <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'.'</span>);
-                            <span class="keyword">if</span> (++<span class="variable">dots</span> % <span class="number integer">25</span> === <span class="number integer">0</span>) <span class="variable">sys</span>.<span class="variable">print</span>(<span class="string">'\n'</span>);
-                        }
-                        <span class="variable">setup</span>(<span class="keyword">function</span>(){
-                            <span class="keyword">if</span> (<span class="variable">test</span>.<span class="variable">length</span> &<span class="variable">lt</span>; <span class="number integer">2</span>) {
-                                <span class="variable">test</span>(<span class="variable">assert</span>);
-                                <span class="variable">next</span>();
-                            } <span class="keyword">else</span> {
-                                <span class="keyword">var</span> <span class="variable">id</span> = <span class="variable">setTimeout</span>(<span class="keyword">function</span>(){
-                                    <span class="keyword">throw</span> <span class="keyword">new</span> <span class="class">Error</span>(&<span class="variable">quot</span>;<span class="string">'&quot; + key + &quot;'</span> <span class="variable">timed</span> <span class="variable">out</span>&<span class="variable">quot</span>;);
-                                }, <span class="number integer">2000</span>);
-                                <span class="variable">test</span>(<span class="variable">assert</span>, <span class="keyword">function</span>(){
-                                    <span class="variable">clearTimeout</span>(<span class="variable">id</span>);
-                                    <span class="variable">next</span>();
-                                });
-                            } 
-                        });
-                    } <span class="keyword">else</span> {
-                        <span class="variable">test</span>(<span class="variable">assert</span>, <span class="keyword">function</span>(<span class="variable">fn</span>){
-                            <span class="variable">process</span>.<span class="variable">addListener</span>(<span class="string">'beforeExit'</span>, <span class="keyword">function</span>(){
-                                <span class="keyword">try</span> {
-                                    <span class="variable">fn</span>();
-                                } <span class="keyword">catch</span> (<span class="variable">err</span>) {
-                                    <span class="variable">error</span>(<span class="variable">title</span>, <span class="variable">key</span>, <span class="variable">err</span>);
-                                }
-                            });
-                        });
-                    }
-                } <span class="keyword">catch</span> (<span class="variable">err</span>) {
-                    <span class="variable">error</span>(<span class="variable">title</span>, <span class="variable">key</span>, <span class="variable">err</span>);
-                }
-            }
-            <span class="keyword">if</span> (!<span class="variable">serial</span>) <span class="variable">next</span>();
-        }
-    })();
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Report exceptions.
- </p>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">report</span>() {
-    <span class="variable">process</span>.<span class="variable">emit</span>(<span class="string">'beforeExit'</span>);
-    <span class="keyword">if</span> (<span class="variable">failures</span>) {
-        <span class="variable">print</span>(<span class="string">'\n   [bold]{Failures}: [red]{'</span> + <span class="variable">failures</span> + <span class="string">'}\n\n'</span>);
-        <span class="variable">notify</span>(<span class="string">'Failures: '</span> + <span class="variable">failures</span>);
-    } <span class="keyword">else</span> {
-        <span class="keyword">if</span> (<span class="variable">serial</span>) <span class="variable">print</span>(<span class="string">''</span>);
-        <span class="variable">print</span>(<span class="string">'\n   [green]{100%} '</span> + <span class="variable">testcount</span> + <span class="string">' tests\n'</span>);
-        <span class="variable">notify</span>(<span class="string">'100% ok'</span>);
-    }
-    <span class="keyword">if</span> (<span class="keyword">typeof</span> <span class="variable">_</span>$<span class="variable">jscoverage</span> === <span class="string">'object'</span>) {
-        <span class="variable">reportCoverage</span>(<span class="variable">_</span>$<span class="variable">jscoverage</span>);
-    }
-}</code></pre>
-</td>
-</tr>
-<tr class="code">
-<td class="docs">
-<p>Growl notify the given <code>msg</code>.</p>
-
-<h2></h2>
-
-<ul><li><p><strong>param</strong>: <em>String</em>  msg</p></li></ul>
-</td>
-<td class="code">
-<pre><code><span class="keyword">function</span> <span class="variable">notify</span>(<span class="variable">msg</span>) {
-    <span class="keyword">if</span> (<span class="variable">growl</span>) {
-        <span class="variable">childProcess</span>.<span class="variable">exec</span>(<span class="string">'growlnotify -name Expresso -m &quot;'</span> + <span class="variable">msg</span> + <span class="string">'&quot;'</span>);
-    }
-}
-
-<span class="comment">// Report uncaught exceptions</span>
-
-<span class="variable">process</span>.<span class="variable">addListener</span>(<span class="string">'uncaughtException'</span>, <span class="keyword">function</span>(<span class="variable">err</span>){
-    <span class="variable">error</span>(<span class="string">'uncaught'</span>, <span class="string">'uncaught'</span>, <span class="variable">err</span>);
-});
-
-<span class="comment">// Show cursor</span>
-
-[<span class="string">'INT'</span>, <span class="string">'TERM'</span>, <span class="string">'QUIT'</span>].<span class="variable">forEach</span>(<span class="keyword">function</span>(<span class="variable">sig</span>){
-    <span class="variable">process</span>.<span class="variable">addListener</span>(<span class="string">'SIG'</span> + <span class="variable">sig</span>, <span class="keyword">function</span>(){
-        <span class="variable">cursor</span>(<span class="variable">true</span>);
-        <span class="variable">process</span>.<span class="variable">exit</span>(<span class="number integer">1</span>);
-    });
-});
-
-<span class="comment">// Report test coverage when available</span>
-<span class="comment">// and emit &quot;beforeExit&quot; event to perform</span>
-<span class="comment">// final assertions</span>
-
-<span class="keyword">var</span> <span class="variable">orig</span> = <span class="variable">process</span>.<span class="variable">emit</span>;
-<span class="variable">process</span>.<span class="variable">emit</span> = <span class="keyword">function</span>(<span class="variable">event</span>){
-    <span class="keyword">if</span> (<span class="variable">event</span> === <span class="string">'exit'</span>) {
-        <span class="variable">report</span>();
-        <span class="variable">process</span>.<span class="variable">reallyExit</span>(<span class="variable">failures</span>);
-    }
-    <span class="variable">orig</span>.<span class="variable">apply</span>(<span class="this">this</span>, <span class="variable">arguments</span>);
-};
-
-<span class="comment">// Run test files</span>
-
-<span class="keyword">if</span> (!<span class="variable">defer</span>) <span class="variable">run</span>(<span class="variable">files</span>);
-</code></pre>
-</td>
-</tr>  </body>
-</html></tbody></table>
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/docs/index.html b/node/node_modules/jade/support/expresso/docs/index.html
deleted file mode 100644 (file)
index 49d8148..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-<html>
-       <head>
-               <title>Expresso - TDD Framework For Node</title>
-               <style>
-                       body {
-                               font: 13px/1.4 "Helvetica", "Lucida Grande", Arial, sans-serif;
-                               text-align: center;
-                       }
-                       #ribbon {
-                               position: absolute;
-                               top: 0;
-                               right: 0;
-                               z-index: 10;
-                       }
-                       #wrapper {
-                         margin: 0 auto;
-                               padding: 50px 80px;
-                               width: 700px;
-                               text-align: left;
-                       }
-                       h1, h2, h3 {
-                               margin: 25px 0 15px 0;
-                       }
-                       h1 {
-                         font-size: 35px;
-                       }
-                       pre {
-                               margin: 0 5px;
-                               padding: 15px;
-                               border: 1px solid #eee;
-                       }
-                       a {
-                         color: #00aaff;
-                       }
-               </style>
-       </head>
-       <body>
-               <a href="http://github.com/visionmedia/expresso">
-                       <img alt="Fork me on GitHub" id="ribbon" src="http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png" />
-               </a>
-               <div id="wrapper">
-                       <h1>Expresso</h1>
-<div class='mp'>
-<p><a href="http://github.com/visionmedia/expresso">Expresso</a> is a JavaScript <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> framework written for <a href="http://nodejs.org">nodejs</a>. Expresso is extremely fast, and is packed with features such as additional assertion methods, code coverage reporting, CI support, and more.</p>
-
-<h2 id="Features">Features</h2>
-
-<ul>
-<li>light-weight</li>
-<li>intuitive async support</li>
-<li>intuitive test runner executable</li>
-<li>test coverage support and reporting via <a href="http://github.com/visionmedia/node-jscoverage">node-jscoverage</a></li>
-<li>uses and extends the core <em>assert</em> module</li>
-<li><code>assert.eql()</code> alias of <code>assert.deepEqual()</code></li>
-<li><code>assert.response()</code> http response utility</li>
-<li><code>assert.includes()</code></li>
-<li><code>assert.isNull()</code></li>
-<li><code>assert.isUndefined()</code></li>
-<li><code>assert.isNotNull()</code></li>
-<li><code>assert.isDefined()</code></li>
-<li><code>assert.match()</code></li>
-<li><code>assert.length()</code></li>
-</ul>
-
-
-<h2 id="Installation">Installation</h2>
-
-<p>To install both expresso <em>and</em> node-jscoverage run
-the command below, which will first compile node-jscoverage:</p>
-
-<pre><code>$ make install
-</code></pre>
-
-<p>To install expresso alone without coverage reporting run:</p>
-
-<pre><code>$ make install-expresso
-</code></pre>
-
-<p>Install via npm:</p>
-
-<pre><code>$ npm install expresso
-</code></pre>
-
-<h2 id="Examples">Examples</h2>
-
-<p>To define tests we simply export several functions:</p>
-
-<pre><code>exports['test String#length'] = function(assert){
-    assert.equal(6, 'foobar'.length);
-};
-</code></pre>
-
-<p>Alternatively for large numbers of tests you may want to
-export your own object containing the tests, however this
-is essentially the as above:</p>
-
-<pre><code>module.exports = {
-    'test String#length': function(assert){
-        assert.equal(6, 'foobar'.length);
-    }
-};
-</code></pre>
-
-<p>If you prefer not to use quoted keys:</p>
-
-<pre><code>exports.testsStringLength = function(assert){
-    assert.equal(6, 'foobar'.length);
-};
-</code></pre>
-
-<p>The second argument passed to each callback is <em>beforeExit</em>,
-which is typically used to assert that callbacks have been
-invoked.</p>
-
-<pre><code>exports.testAsync = function(assert, beforeExit){
-    var n = 0;
-    setTimeout(function(){
-        ++n;
-        assert.ok(true);
-    }, 200);
-    setTimeout(function(){
-        ++n;
-        assert.ok(true);
-    }, 200);
-    beforeExit(function(){
-        assert.equal(2, n, 'Ensure both timeouts are called');
-    });
-};
-</code></pre>
-
-<h2 id="Assert-Utilities">Assert Utilities</h2>
-
-<h3 id="assert-isNull-val-msg-">assert.isNull(val[, msg])</h3>
-
-<p>Asserts that the given <em>val</em> is <em>null</em>.</p>
-
-<pre><code>assert.isNull(null);
-</code></pre>
-
-<h3 id="assert-isNotNull-val-msg-">assert.isNotNull(val[, msg])</h3>
-
-<p>Asserts that the given <em>val</em> is not <em>null</em>.</p>
-
-<pre><code>assert.isNotNull(undefined);
-assert.isNotNull(false);
-</code></pre>
-
-<h3 id="assert-isUndefined-val-msg-">assert.isUndefined(val[, msg])</h3>
-
-<p>Asserts that the given <em>val</em> is <em>undefined</em>.</p>
-
-<pre><code>assert.isUndefined(undefined);
-</code></pre>
-
-<h3 id="assert-isDefined-val-msg-">assert.isDefined(val[, msg])</h3>
-
-<p>Asserts that the given <em>val</em> is not <em>undefined</em>.</p>
-
-<pre><code>assert.isDefined(null);
-assert.isDefined(false);
-</code></pre>
-
-<h3 id="assert-match-str-regexp-msg-">assert.match(str, regexp[, msg])</h3>
-
-<p>Asserts that the given <em>str</em> matches <em>regexp</em>.</p>
-
-<pre><code>assert.match('foobar', /^foo(bar)?/);
-assert.match('foo', /^foo(bar)?/);
-</code></pre>
-
-<h3 id="assert-length-val-n-msg-">assert.length(val, n[, msg])</h3>
-
-<p>Assert that the given <em>val</em> has a length of <em>n</em>.</p>
-
-<pre><code>assert.length([1,2,3], 3);
-assert.length('foo', 3);
-</code></pre>
-
-<h3 id="assert-type-obj-type-msg-">assert.type(obj, type[, msg])</h3>
-
-<p>Assert that the given <em>obj</em> is typeof <em>type</em>.</p>
-
-<pre><code>assert.type(3, 'number');
-</code></pre>
-
-<h3 id="assert-eql-a-b-msg-">assert.eql(a, b[, msg])</h3>
-
-<p>Assert that object <em>b</em> is equal to object <em>a</em>. This is an
-alias for the core <em>assert.deepEqual()</em> method which does complex
-comparisons, opposed to <em>assert.equal()</em> which uses <em>==</em>.</p>
-
-<pre><code>assert.eql('foo', 'foo');
-assert.eql([1,2], [1,2]);
-assert.eql({ foo: 'bar' }, { foo: 'bar' });
-</code></pre>
-
-<h3 id="assert-includes-obj-val-msg-">assert.includes(obj, val[, msg])</h3>
-
-<p>Assert that <em>obj</em> is within <em>val</em>. This method supports <em>Array_s
-and </em>Strings_s.</p>
-
-<pre><code>assert.includes([1,2,3], 3);
-assert.includes('foobar', 'foo');
-assert.includes('foobar', 'bar');
-</code></pre>
-
-<h3 id="assert-response-server-req-res-fn-msg-fn-">assert.response(server, req, res|fn[, msg|fn])</h3>
-
-<p>Performs assertions on the given <em>server</em>, which should <em>not</em> call
-listen(), as this is handled internally by expresso and the server
-is killed after all responses have completed. This method works with
-any <em>http.Server</em> instance, so <em>Connect</em> and <em>Express</em> servers will work
-as well.</p>
-
-<p>The <em>req</em> object may contain:</p>
-
-<ul>
-<li><em>url</em> request url</li>
-<li><em>timeout</em> timeout in milliseconds</li>
-<li><em>method</em> HTTP method</li>
-<li><em>data</em> request body</li>
-<li><em>headers</em> headers object</li>
-</ul>
-
-
-<p>The <em>res</em> object may be a callback function which
-receives the response for assertions, or an object
-which is then used to perform several assertions
-on the response with the following properties:</p>
-
-<ul>
-<li><em>body</em> assert response body</li>
-<li><em>status</em> assert response status code</li>
-<li><em>header</em> assert that all given headers match (unspecified are ignored)</li>
-</ul>
-
-
-<p>When providing <em>res</em> you may then also pass a callback function
-as the fourth argument for additional assertions.</p>
-
-<p>Below are some examples:</p>
-
-<pre><code>assert.response(server, {
-    url: '/', timeout: 500
-}, {
-    body: 'foobar'
-});
-
-assert.response(server, {
-    url: '/',
-    method: 'GET'
-},{
-    body: '{"name":"tj"}',
-    status: 200,
-    headers: {
-        'Content-Type': 'application/json; charset=utf8',
-        'X-Foo': 'bar'
-    }
-});
-
-assert.response(server, {
-    url: '/foo',
-    method: 'POST',
-    data: 'bar baz'
-},{
-    body: '/foo bar baz',
-    status: 200
-}, 'Test POST');
-
-assert.response(server, {
-    url: '/foo',
-    method: 'POST',
-    data: 'bar baz'
-},{
-    body: '/foo bar baz',
-    status: 200
-}, function(res){
-    // All done, do some more tests if needed
-});
-
-assert.response(server, {
-    url: '/'
-}, function(res){
-    assert.ok(res.body.indexOf('tj') &gt;= 0, 'Test assert.response() callback');
-});
-</code></pre>
-
-<h2 id="expresso-1-">expresso(1)</h2>
-
-<p>To run a single test suite (file) run:</p>
-
-<pre><code>$ expresso test/a.test.js
-</code></pre>
-
-<p>To run several suites we may simply append another:</p>
-
-<pre><code>$ expresso test/a.test.js test/b.test.js
-</code></pre>
-
-<p>We can also pass a whitelist of tests to run within all suites:</p>
-
-<pre><code>$ expresso --only "foo()" --only "bar()"
-</code></pre>
-
-<p>Or several with one call:</p>
-
-<pre><code>$ expresso --only "foo(), bar()"
-</code></pre>
-
-<p>Globbing is of course possible as well:</p>
-
-<pre><code>$ expresso test/*
-</code></pre>
-
-<p>When expresso is called without any files, <em>test/*</em> is the default,
-so the following is equivalent to the command above:</p>
-
-<pre><code>$ expresso
-</code></pre>
-
-<p>If you wish to unshift a path to <code>require.paths</code> before
-running tests, you may use the <code>-I</code> or <code>--include</code> flag.</p>
-
-<pre><code>$ expresso --include lib test/*
-</code></pre>
-
-<p>The previous example is typically what I would recommend, since expresso
-supports test coverage via <a href="http://github.com/visionmedia/node-jscoverage">node-jscoverage</a> (bundled with expresso),
-so you will need to expose an instrumented version of you library.</p>
-
-<p>To instrument your library, simply run <a href="http://github.com/visionmedia/node-jscoverage">node-jscoverage</a>,
-passing the <em>src</em> and <em>dest</em> directories:</p>
-
-<pre><code>$ node-jscoverage lib lib-cov
-</code></pre>
-
-<p>Now we can run our tests again, using the <em>lib-cov</em> directory that has been
-instrumented with coverage statements:</p>
-
-<pre><code>$ expresso -I lib-cov test/*
-</code></pre>
-
-<p>The output will look similar to below, depending on your test coverage of course :)</p>
-
-<p><img src="http://dl.dropbox.com/u/6396913/cov.png" alt="node coverage" /></p>
-
-<p>To make this process easier expresso has the <em>-c</em> or <em>--cov</em> which essentially
-does the same as the two commands above. The following two commands will
-run the same tests, however one will auto-instrument, and unshift <em>lib-cov</em>,
-and the other will run tests normally:</p>
-
-<pre><code>$ expresso -I lib test/*
-$ expresso -I lib --cov test/*
-</code></pre>
-
-<p>Currently coverage is bound to the <em>lib</em> directory, however in the
-future <code>--cov</code> will most likely accept a path.</p>
-
-<h2 id="Async-Exports">Async Exports</h2>
-
-<p>Sometimes it is useful to postpone running of tests until a callback or event has fired, currently the <em>exports.foo = function(){};</em> syntax is supported for this:</p>
-
-<pre><code>setTimeout(function(){
-    exports['test async exports'] = function(assert){
-        assert.ok('wahoo');
-    };
-}, 100);
-</code></pre>
-
-</div>
-               </div>
-       </body>
-</html>
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/docs/index.md b/node/node_modules/jade/support/expresso/docs/index.md
deleted file mode 100644 (file)
index 5376e59..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-
-[Expresso](http://github.com/visionmedia/expresso) is a JavaScript [TDD](http://en.wikipedia.org/wiki/Test-driven_development) framework written for [nodejs](http://nodejs.org). Expresso is extremely fast, and is packed with features such as additional assertion methods, code coverage reporting, CI support, and more.
-
-## Features
-
-  - light-weight
-  - intuitive async support
-  - intuitive test runner executable
-  - test coverage support and reporting via [node-jscoverage](http://github.com/visionmedia/node-jscoverage)
-  - uses and extends the core _assert_ module
-  - `assert.eql()` alias of `assert.deepEqual()`
-  - `assert.response()` http response utility
-  - `assert.includes()`
-  - `assert.isNull()`
-  - `assert.isUndefined()`
-  - `assert.isNotNull()`
-  - `assert.isDefined()`
-  - `assert.match()`
-  - `assert.length()`
-
-## Installation
-
-To install both expresso _and_ node-jscoverage run
-the command below, which will first compile node-jscoverage:
-
-    $ make install
-
-To install expresso alone without coverage reporting run:
-
-    $ make install-expresso
-
-Install via npm:
-
-       $ npm install expresso
-
-## Examples
-
-To define tests we simply export several functions:
-
-       exports['test String#length'] = function(assert){
-               assert.equal(6, 'foobar'.length);
-       };
-
-Alternatively for large numbers of tests you may want to
-export your own object containing the tests, however this
-is essentially the as above:
-
-    module.exports = {
-       'test String#length': function(assert){
-               assert.equal(6, 'foobar'.length);
-       }
-    };
-
-If you prefer not to use quoted keys:
-
-       exports.testsStringLength = function(assert){
-               assert.equal(6, 'foobar'.length);
-       };
-
-The second argument passed to each callback is _beforeExit_,
-which is typically used to assert that callbacks have been
-invoked.
-
-    exports.testAsync = function(assert, beforeExit){
-               var n = 0;
-       setTimeout(function(){
-               ++n;
-               assert.ok(true);
-       }, 200);
-       setTimeout(function(){
-               ++n;
-               assert.ok(true);
-       }, 200);
-               beforeExit(function(){
-                       assert.equal(2, n, 'Ensure both timeouts are called');
-               });
-    };
-
-## Assert Utilities
-
-### assert.isNull(val[, msg])
-
-Asserts that the given _val_ is _null_.
-
-    assert.isNull(null);
-
-### assert.isNotNull(val[, msg])
-
-Asserts that the given _val_ is not _null_.
-
-    assert.isNotNull(undefined);
-    assert.isNotNull(false);
-
-### assert.isUndefined(val[, msg])
-
-Asserts that the given _val_ is _undefined_.
-
-    assert.isUndefined(undefined);
-
-### assert.isDefined(val[, msg])
-
-Asserts that the given _val_ is not _undefined_.
-
-    assert.isDefined(null);
-    assert.isDefined(false);
-
-### assert.match(str, regexp[, msg])
-
-Asserts that the given _str_ matches _regexp_.
-
-    assert.match('foobar', /^foo(bar)?/);
-    assert.match('foo', /^foo(bar)?/);
-
-### assert.length(val, n[, msg])
-
-Assert that the given _val_ has a length of _n_.
-
-    assert.length([1,2,3], 3);
-    assert.length('foo', 3);
-
-### assert.type(obj, type[, msg])
-
-Assert that the given _obj_ is typeof _type_.
-
-    assert.type(3, 'number');
-
-### assert.eql(a, b[, msg])
-
-Assert that object _b_ is equal to object _a_. This is an
-alias for the core _assert.deepEqual()_ method which does complex
-comparisons, opposed to _assert.equal()_ which uses _==_.
-
-    assert.eql('foo', 'foo');
-    assert.eql([1,2], [1,2]);
-    assert.eql({ foo: 'bar' }, { foo: 'bar' });
-
-### assert.includes(obj, val[, msg])
-
-Assert that _obj_ is within _val_. This method supports _Array_s
-and _Strings_s.
-
-    assert.includes([1,2,3], 3);
-    assert.includes('foobar', 'foo');
-    assert.includes('foobar', 'bar');
-
-### assert.response(server, req, res|fn[, msg|fn])
-
-Performs assertions on the given _server_, which should _not_ call
-listen(), as this is handled internally by expresso and the server 
-is killed after all responses have completed. This method works with
-any _http.Server_ instance, so _Connect_ and _Express_ servers will work
-as well.
-
-The _req_ object may contain:
-
-  - _url_ request url
-  - _timeout_ timeout in milliseconds
-  - _method_ HTTP method
-  - _data_ request body
-  - _headers_ headers object
-
-The _res_ object may be a callback function which
-receives the response for assertions, or an object
-which is then used to perform several assertions
-on the response with the following properties:
-
-  - _body_ assert response body
-  - _status_ assert response status code
-  - _header_ assert that all given headers match (unspecified are ignored)
-
-When providing _res_ you may then also pass a callback function
-as the fourth argument for additional assertions.
-
-Below are some examples:
-
-    assert.response(server, {
-               url: '/', timeout: 500
-    }, {
-               body: 'foobar'
-    });
-
-    assert.response(server, {
-        url: '/',
-        method: 'GET'
-    },{
-        body: '{"name":"tj"}',
-        status: 200,
-        headers: {
-            'Content-Type': 'application/json; charset=utf8',
-                       'X-Foo': 'bar'
-        }
-    });
-    
-    assert.response(server, {
-        url: '/foo',
-        method: 'POST',
-        data: 'bar baz'
-    },{
-        body: '/foo bar baz',
-        status: 200
-    }, 'Test POST');
-
-    assert.response(server, {
-        url: '/foo',
-        method: 'POST',
-        data: 'bar baz'
-    },{
-        body: '/foo bar baz',
-        status: 200
-    }, function(res){
-               // All done, do some more tests if needed
-       });
-
-    assert.response(server, {
-        url: '/'
-    }, function(res){
-        assert.ok(res.body.indexOf('tj') >= 0, 'Test assert.response() callback');
-    });
-
-
-## expresso(1)
-
-To run a single test suite (file) run:
-
-    $ expresso test/a.test.js
-
-To run several suites we may simply append another:
-
-    $ expresso test/a.test.js test/b.test.js
-
-We can also pass a whitelist of tests to run within all suites:
-
-    $ expresso --only "foo()" --only "bar()"
-
-Or several with one call:
-
-    $ expresso --only "foo(), bar()"
-
-Globbing is of course possible as well:
-
-    $ expresso test/*
-
-When expresso is called without any files, _test/*_ is the default,
-so the following is equivalent to the command above:
-
-    $ expresso
-
-If you wish to unshift a path to `require.paths` before
-running tests, you may use the `-I` or `--include` flag.
-
-    $ expresso --include lib test/*
-
-The previous example is typically what I would recommend, since expresso
-supports test coverage via [node-jscoverage](http://github.com/visionmedia/node-jscoverage) (bundled with expresso),
-so you will need to expose an instrumented version of you library.
-
-To instrument your library, simply run [node-jscoverage](http://github.com/visionmedia/node-jscoverage),
-passing the _src_ and _dest_ directories:
-
-    $ node-jscoverage lib lib-cov
-
-Now we can run our tests again, using the _lib-cov_ directory that has been
-instrumented with coverage statements:
-
-    $ expresso -I lib-cov test/*
-
-The output will look similar to below, depending on your test coverage of course :)
-
-![node coverage](http://dl.dropbox.com/u/6396913/cov.png)
-
-To make this process easier expresso has the _-c_ or _--cov_ which essentially
-does the same as the two commands above. The following two commands will
-run the same tests, however one will auto-instrument, and unshift _lib-cov_,
-and the other will run tests normally:
-
-    $ expresso -I lib test/*
-    $ expresso -I lib --cov test/*
-
-Currently coverage is bound to the _lib_ directory, however in the
-future `--cov` will most likely accept a path.
-
-## Async Exports
-
-Sometimes it is useful to postpone running of tests until a callback or event has fired, currently the _exports.foo = function(){};_ syntax is supported for this:
-    
-       setTimeout(function(){
-           exports['test async exports'] = function(assert){
-               assert.ok('wahoo');
-           };
-       }, 100);
diff --git a/node/node_modules/jade/support/expresso/docs/layout/foot.html b/node/node_modules/jade/support/expresso/docs/layout/foot.html
deleted file mode 100644 (file)
index 44d85e9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-               </div>
-       </body>
-</html>
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/docs/layout/head.html b/node/node_modules/jade/support/expresso/docs/layout/head.html
deleted file mode 100644 (file)
index 567f62e..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<html>
-       <head>
-               <title>Expresso - TDD Framework For Node</title>
-               <style>
-                       body {
-                               font: 13px/1.4 "Helvetica", "Lucida Grande", Arial, sans-serif;
-                               text-align: center;
-                       }
-                       #ribbon {
-                               position: absolute;
-                               top: 0;
-                               right: 0;
-                               z-index: 10;
-                       }
-                       #wrapper {
-                         margin: 0 auto;
-                               padding: 50px 80px;
-                               width: 700px;
-                               text-align: left;
-                       }
-                       h1, h2, h3 {
-                               margin: 25px 0 15px 0;
-                       }
-                       h1 {
-                         font-size: 35px;
-                       }
-                       pre {
-                               margin: 0 5px;
-                               padding: 15px;
-                               border: 1px solid #eee;
-                       }
-                       a {
-                         color: #00aaff;
-                       }
-               </style>
-       </head>
-       <body>
-               <a href="http://github.com/visionmedia/expresso">
-                       <img alt="Fork me on GitHub" id="ribbon" src="http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png" />
-               </a>
-               <div id="wrapper">
-                       <h1>Expresso</h1>
diff --git a/node/node_modules/jade/support/expresso/lib/bar.js b/node/node_modules/jade/support/expresso/lib/bar.js
deleted file mode 100644 (file)
index e15aad4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-exports.bar = function(msg){
-    return msg || 'bar';
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/lib/foo.js b/node/node_modules/jade/support/expresso/lib/foo.js
deleted file mode 100644 (file)
index 15701a5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-exports.foo = function(msg){
-    if (msg) {
-        return msg;
-    } else {
-        return generateFoo();
-    }
-};
-
-function generateFoo() {
-    return 'foo';
-}
-
-function Foo(msg){
-    this.msg = msg || 'foo';
-}
diff --git a/node/node_modules/jade/support/expresso/package.json b/node/node_modules/jade/support/expresso/package.json
deleted file mode 100644 (file)
index 572935f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{ "name": "expresso",
-  "version": "0.6.2",
-  "description": "TDD framework, light-weight, fast, CI-friendly",
-  "author": "TJ Holowaychuk <tj@vision-media.ca>",
-  "bin": { 
-    "expresso": "./bin/expresso",
-    "node-jscoverage": "./deps/jscoverage/node-jscoverage"
-  },
-  "scripts": {
-    "preinstall": "make deps/jscoverage/node-jscoverage"       
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/test/assert.test.js b/node/node_modules/jade/support/expresso/test/assert.test.js
deleted file mode 100644 (file)
index 6a5e764..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-module.exports = {
-    'assert.eql()': function(assert){
-        assert.equal(assert.deepEqual, assert.eql);
-    },
-    
-    'assert.type()': function(assert){
-        assert.type('foobar', 'string');
-        assert.type(2, 'number');
-        assert.throws(function(){
-            assert.type([1,2,3], 'string');
-        });
-    },
-    
-    'assert.includes()': function(assert){
-        assert.includes('some random string', 'dom');
-        assert.throws(function(){
-           assert.include('some random string', 'foobar');
-        });
-
-        assert.includes(['foo', 'bar'], 'bar');
-        assert.includes(['foo', 'bar'], 'foo');
-        assert.includes([1,2,3], 3);
-        assert.includes([1,2,3], 2);
-        assert.includes([1,2,3], 1);
-        assert.throws(function(){
-            assert.includes(['foo', 'bar'], 'baz');
-        });
-        
-        assert.throws(function(){
-            assert.includes({ wrong: 'type' }, 'foo');
-        });
-    },
-    
-    'assert.isNull()': function(assert){
-        assert.isNull(null);
-        assert.throws(function(){
-            assert.isNull(undefined);
-        });
-        assert.throws(function(){
-            assert.isNull(false);
-        });
-    },
-    
-    'assert.isUndefined()': function(assert){
-        assert.isUndefined(undefined);
-        assert.throws(function(){
-            assert.isUndefined(null);
-        });
-        assert.throws(function(){
-            assert.isUndefined(false);
-        });
-    },
-    
-    'assert.isNotNull()': function(assert){
-        assert.isNotNull(false);
-        assert.isNotNull(undefined);
-        assert.throws(function(){
-            assert.isNotNull(null);
-        });
-    },
-    
-    'assert.isDefined()': function(assert){
-        assert.isDefined(false);
-        assert.isDefined(null);
-        assert.throws(function(){
-            assert.isDefined(undefined);
-        });
-    },
-    
-    'assert.match()': function(assert){
-        assert.match('foobar', /foo(bar)?/);
-        assert.throws(function(){
-            assert.match('something', /rawr/);
-        });
-    },
-    
-    'assert.length()': function(assert){
-        assert.length('test', 4);
-        assert.length([1,2,3,4], 4);
-        assert.throws(function(){
-            assert.length([1,2,3], 4);
-        });
-    }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/test/async.test.js b/node/node_modules/jade/support/expresso/test/async.test.js
deleted file mode 100644 (file)
index 0dc9016..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-setTimeout(function(){
-    exports['test async exports'] = function(assert){
-        assert.ok('wahoo');
-    };
-}, 100);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/test/bar.test.js b/node/node_modules/jade/support/expresso/test/bar.test.js
deleted file mode 100644 (file)
index 68e8d48..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var bar = require('bar');
-
-module.exports = {
-    'bar()': function(assert){
-        assert.equal('bar', bar.bar());
-    }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/test/foo.test.js b/node/node_modules/jade/support/expresso/test/foo.test.js
deleted file mode 100644 (file)
index 5d9d94e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var foo = require('foo');
-
-module.exports = {
-    'foo()': function(assert){
-        assert.equal('foo', foo.foo());
-        assert.equal('foo', foo.foo());
-    }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/test/http.test.js b/node/node_modules/jade/support/expresso/test/http.test.js
deleted file mode 100644 (file)
index 3a44bec..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var http = require('http');
-
-var server = http.createServer(function(req, res){
-    if (req.method === 'GET') {
-        if (req.url === '/delay') {
-            setTimeout(function(){
-                res.writeHead(200, {});
-                res.end('delayed');
-            }, 200);
-        } else {
-            var body = JSON.stringify({ name: 'tj' });
-            res.writeHead(200, {
-                'Content-Type': 'application/json; charset=utf8',
-                'Content-Length': body.length
-            });
-            res.end(body);
-        }
-    } else {
-        var body = '';
-        req.setEncoding('utf8');
-        req.addListener('data', function(chunk){ body += chunk });
-        req.addListener('end', function(){
-            res.writeHead(200, {});
-            res.end(req.url + ' ' + body);
-        });
-    }
-});
-
-module.exports = {
-    'test assert.response()': function(assert, beforeExit){
-        var called = 0;
-
-        assert.response(server, {
-            url: '/',
-            method: 'GET'
-        },{
-            body: '{"name":"tj"}',
-            status: 200,
-            headers: {
-                'Content-Type': 'application/json; charset=utf8'
-            }
-        });
-        
-        assert.response(server, {
-            url: '/foo',
-            method: 'POST',
-            data: 'bar baz'
-        },{
-            body: '/foo bar baz',
-            status: 200
-        }, function(res){
-            ++called;
-            assert.ok(res);
-        });
-        
-        assert.response(server, {
-            url: '/foo'
-        }, function(res){
-            ++called;
-            assert.ok(res.body.indexOf('tj') >= 0, 'Test assert.response() callback');
-        });
-        
-        assert.response(server,
-            { url: '/delay', timeout: 300 },
-            { body: 'delayed' });
-        
-        beforeExit(function(){
-            assert.equal(2, called);
-        });
-    },
-    
-    'test assert.response() regexp': function(assert){
-      assert.response(server,
-        { url: '/foo', method: 'POST', data: 'foobar' },
-        { body: /^\/foo foo(bar)?/ });
-    }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/test/serial/async.test.js b/node/node_modules/jade/support/expresso/test/serial/async.test.js
deleted file mode 100644 (file)
index 292f96c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-
-var setup = 0,
-    order = [];
-
-module.exports = {
-    setup: function(done){
-        ++setup;
-        done();
-    },
-
-    a: function(assert, done){
-        assert.equal(1, setup);
-        order.push('a');
-        setTimeout(function(){
-            done();
-        }, 500);
-    },
-    
-    b: function(assert, done){
-        assert.equal(2, setup);
-        order.push('b');
-        setTimeout(function(){
-            done();
-        }, 200);
-    },
-    
-    c: function(assert, done){
-        assert.equal(3, setup);
-        order.push('c');
-        setTimeout(function(){
-            done();
-        }, 1000);
-    },
-
-    d: function(assert){
-        assert.eql(order, ['a', 'b', 'c']);
-    }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/expresso/test/serial/http.test.js b/node/node_modules/jade/support/expresso/test/serial/http.test.js
deleted file mode 100644 (file)
index 3d19557..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var http = require('http');
-
-var server = http.createServer(function(req, res){
-    if (req.method === 'GET') {
-        if (req.url === '/delay') {
-            setTimeout(function(){
-                res.writeHead(200, {});
-                res.end('delayed');
-            }, 200);
-        } else {
-            var body = JSON.stringify({ name: 'tj' });
-            res.writeHead(200, {
-                'Content-Type': 'application/json; charset=utf8',
-                'Content-Length': body.length
-            });
-            res.end(body);
-        }
-    } else {
-        var body = '';
-        req.setEncoding('utf8');
-        req.addListener('data', function(chunk){ body += chunk });
-        req.addListener('end', function(){
-            res.writeHead(200, {});
-            res.end(req.url + ' ' + body);
-        });
-    }
-});
-
-module.exports = {
-    'test assert.response()': function(assert, done){
-        assert.response(server, {
-            url: '/',
-            method: 'GET'
-        },{
-            body: '{"name":"tj"}',
-            status: 200,
-            headers: {
-                'Content-Type': 'application/json; charset=utf8'
-            }
-        }, done);
-    }
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/foot.js b/node/node_modules/jade/support/foot.js
deleted file mode 100644 (file)
index 92f4251..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-  return exports;
-
-})({});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/head.js b/node/node_modules/jade/support/head.js
deleted file mode 100644 (file)
index 83775aa..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-var jade = (function(exports){
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/.gitignore b/node/node_modules/jade/support/sass/.gitignore
deleted file mode 100644 (file)
index 4adf993..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-*.seed
-*.cache
-*.log
-.DS_Store
-pkg
-build
-bin
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/History.md b/node/node_modules/jade/support/sass/History.md
deleted file mode 100644 (file)
index 01992cf..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-0.4.2 / 2010-06-21
-==================
-
-  * Added lib directory to package.json for npm to work
-
-0.4.1 / 2010-06-21
-==================
-
-  * Addex index.js for npm support
-
-0.4.0 / 2010-04-02
-==================
-
-  * Added "cache" option
-
-0.3.0 / 2010-02-22
-==================
-
-  * Added mixin support. Closes #1
-
-0.2.0 / 2010-02-05
-==================
-
-  * Added alternate variable syntax back ("var: val")
-  * Added a method to extract variables. Closes #3
-
-0.1.0 / 2010-02-05
-==================
-
-  * Added continuation support. Closes #15
-
-0.0.2 / 2010-02-02
-==================
-
-  * Fixed complex selectors
-  * Removed "var: val" syntax for variables
-
-0.0.1 / 2010-01-12
-==================
-
-  * Initial release
diff --git a/node/node_modules/jade/support/sass/Makefile b/node/node_modules/jade/support/sass/Makefile
deleted file mode 100644 (file)
index f7e6985..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-all: test
-       
-test: spec/node.js
-       @node spec/node.js
-       
-benchmark:
-       @node benchmarks/large.js
-       
-.PHONY: test benchmark
-       
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/Readme.md b/node/node_modules/jade/support/sass/Readme.md
deleted file mode 100644 (file)
index 93a5ab6..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-
-# Sass.js
-
-  JavaScript implementation of Sass. Great for **node.js** and other
-  frameworks supporting the CommonJS module system.
-  
-## Installation
-
-  Install the [Kiwi package manager for nodejs](http://github.com/visionmedia/kiwi)
-  and run:
-  
-      $ kiwi install sass
-
-Or npm:
-
-      $ npm install sass
-
-## Usage
-
-    var sass = require('sass')
-    sass.render('... string of sass ...')
-    // => '... string of css ...'
-    
-    sass.collect('... string of sass ...')
-    // => { selectors: [...], variables: { ... }, mixins: { ... }}
-    
-## Comments
-
-    // foo
-    body
-      // bar
-      a
-        :color #fff
-        
-compiles to
-
-    body a {
-      color: #fff;}
-      
-## Variables
-
-    !red = #ff0000
-    body
-      :color !red
-      
-and
-    
-    red: #ff0000
-    body
-      :color !red
-     
-compile to
-
-    body {
-      color: #ff0000;}
-
-## Selector Continuations
-
-    a
-      :color #fff
-      &:hover
-        :color #000
-      &.active
-        :background #888
-        &:hover
-          :color #fff
-          
-compiles to
-
-    a {
-      color: #fff;}
-
-    a:hover {
-      color: #000;}
-
-    a.active {
-      background: #888;}
-
-    a.active:hover {
-      color: #fff;}
-      
-## Literal JavaScript
-
-    type: "solid"
-    size: 1
-    input
-      :border { parseInt(size) + 1 }px {type} #000
-      
-compiles to
-
-    input {
-      border: 2px "solid" #000;}
-      
-## Property Expansion
-
-    div
-      =border-radius 5px
-      
-compiles to
-
-    div {
-      -webkit-border-radius: 5px;
-      -moz-border-radius: 5px;}
-      
-## Mixins
-
-     +large
-       :font-size 15px
-     +striped
-       tr
-         :background #fff
-         +large
-         &:odd
-           :background #000
-     table
-       +striped
-       :border none
-       
-compiles to
-
-    table {
-      border: none;}
-    table tr {
-      background: #fff;}
-    table tr {
-      font-size: 15px;}
-    table tr:odd {
-      background: #000;}
-    
-    
-## Testing
-
-Update Git submodules and execute:
-    $ make test
-or
-    $ node spec/node.js
-or
-    $ jspec --node
-    
-## More Information
-
-* Featured in [Advanced JavaScript e-book](http://www.dev-mag.com/2010/02/18/advanced-javascript/) for only $4
-  
-## License 
-
-(The MIT License)
-
-Copyright (c) 2009 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
-
-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.
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/index.js b/node/node_modules/jade/support/sass/index.js
deleted file mode 120000 (symlink)
index 7fb84a5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-lib/sass.js
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/lib/sass.js b/node/node_modules/jade/support/sass/lib/sass.js
deleted file mode 100644 (file)
index a72e49d..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-
-// Sass - Core - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
-
-/**
- * Library version.
- */
-
-exports.version = '0.4.3'
-
-/**
- * Compiled sass cache.
- */
-var cache = {}
-
-/**
- * Sass grammar tokens.
- */
-
-var tokens = [
-  ['indent', /^\n +/],
-  ['space', /^ +/],
-  ['nl', /^\n/],
-  ['js', /^{(.*?)}/],
-  ['comment', /^\/\/(.*)/],
-  ['string', /^(?:'(.*?)'|"(.*?)")/],
-  ['variable', /^!([\w\-]+) *= *([^\n]+)/], 
-  ['variable.alternate', /^([\w\-]+): +([^\n]+)/], 
-  ['property.expand', /^=([\w\-]+) *([^\n]+)/], 
-  ['property', /^:([\w\-]+) *([^\n]+)/], 
-  ['continuation', /^&(.+)/],
-  ['mixin', /^\+([\w\-]+)/],
-  ['selector', /^(.+)/]
-]
-
-/**
- * Vendor-specific expansion prefixes.
- */
-
-exports.expansions = ['-moz-', '-webkit-']
-
-/**
- * Tokenize the given _str_.
- *
- * @param  {string} str
- * @return {array}
- * @api private
- */
-
-function tokenize(str) {
-  var token, captures, stack = []
-  while (str.length) {
-    for (var i = 0, len = tokens.length; i < len; ++i)
-      if (captures = tokens[i][1].exec(str)) {
-        token = [tokens[i][0], captures],
-        str = str.replace(tokens[i][1], '')
-        break
-      }
-    if (token)
-      stack.push(token),
-      token = null
-    else 
-      throw new Error("SyntaxError: near `" + str.slice(0, 25).replace('\n', '\\n') + "'")
-  }
-  return stack
-}
-
-/**
- * Parse the given _tokens_, returning
- * and hash containing the properties below:
- *
- *   selectors: array of top-level selectors
- *   variables: hash of variables defined
- *
- * @param  {array} tokens
- * @return {hash}
- * @api private
- */
-
-function parse(tokens) {
-  var token, selector,
-      data = { variables: {}, mixins: {}, selectors: [] },
-      line = 1,
-      lastIndents = 0,
-      indents = 0
-  
-  /**
-   * Output error _msg_ in context to the current line.
-   */
-      
-  function error(msg) {
-    throw new Error('ParseError: on line ' + line + '; ' + msg)
-  }
-  
-  /**
-   * Reset parents until the indentation levels match.
-   */
-  
-  function reset() {
-    if (indents === 0) 
-      return selector = null
-    while (lastIndents-- > indents)
-      selector = selector.parent
-  }
-  
-  // Parse tokens
-  
-  while (token = tokens.shift())
-    switch (token[0]) {
-      case 'mixin':
-        if (indents) {
-          var mixin = data.mixins[token[1][1]]
-          if (!mixin) error("mixin `" + token[1][1] + "' does not exist")
-          mixin.parent = selector
-          selector.children.push(mixin)
-        }
-        else
-          data.mixins[token[1][1]] = selector = new Selector(token[1][1], null, 'mixin')
-        break
-      case 'continuation':
-        reset()
-        selector = new Selector(token[1][1], selector, 'continuation')
-        break
-      case 'selector':
-        reset()
-        selector = new Selector(token[1][1], selector)
-        if (!selector.parent) 
-          data.selectors.push(selector)
-        break
-      case 'property':
-        reset()
-        if (!selector) error('properties must be nested within a selector')
-        var val = token[1][2]
-          .replace(/!([\w\-]+)/g, function(orig, name){
-            return data.variables[name] || orig
-          })
-          .replace(/\{(.*?)\}/g, function(_, js){
-            with (data.variables){ return eval(js) }
-          })
-        selector.properties.push(new Property(token[1][1], val))
-        break
-      case 'property.expand':
-        exports.expansions.forEach(function(prefix){
-          tokens.unshift(['property', [, prefix + token[1][1], token[1][2]]])
-        })
-        break
-      case 'variable':
-      case 'variable.alternate':
-        data.variables[token[1][1]] = token[1][2]
-        break
-      case 'js':
-        with (data.variables){ eval(token[1][1]) }
-        break
-      case 'nl':
-        ++line, indents = 0
-        break
-      case 'comment':
-        break
-      case 'indent':
-        ++line
-        lastIndents = indents,
-        indents = (token[1][0].length - 1) / 2
-        if (indents > lastIndents &&
-            indents - 1 > lastIndents)
-              error('invalid indentation, to much nesting')
-    }
-  return data
-}
-
-/**
- * Compile _selectors_ to a string of css.
- *
- * @param  {array} selectors
- * @return {string}
- * @api private
- */
-
-function compile(selectors) {
-  return selectors.join('\n')
-}
-
-/**
- * Collect data by parsing _sass_.
- * Returns a hash containing the following properties:
- *
- *   selectors: array of top-level selectors
- *   variables: hash of variables defined
- *
- * @param  {string} sass
- * @return {hash}
- * @api public
- */
-
-exports.collect = function(sass) {
-  return parse(tokenize(sass))
-}
-
-/**
- * Render a string of _sass_.
- *
- * Options:
- *   
- *   - filename  Optional filename to aid in error reporting
- *   - cache     Optional caching of compiled content. Requires "filename" option
- *
- * @param  {string} sass
- * @param  {object} options
- * @return {string}
- * @api public
- */
-
-exports.render = function(sass, options) {
-  options = options || {}
-  if (options.cache && !options.filename)
-    throw new Error('filename option must be passed when cache is enabled')
-  if (options.cache)
-    return cache[options.filename]
-      ? cache[options.filename]
-      : cache[options.filename] = compile(exports.collect(sass).selectors)
-  return compile(exports.collect(sass).selectors)
-}
-
-// --- Selector
-
-/**
- * Initialize a selector with _string_ and
- * optional _parent_.
- *
- * @param  {string} string
- * @param  {Selector} parent
- * @param  {string} type
- * @api private
- */
-
-function Selector(string, parent, type) {
-  this.string = string
-  this.parent = parent
-  this.properties = []
-  this.children = []
-  if (type) this[type] = true
-  if (parent) parent.children.push(this)
-}
-
-/**
- * Return selector string.
- *
- * @return {string}
- * @api private
- */
-
-Selector.prototype.selector = function() {
-  var selector = this.string
-  if (this.parent)
-    selector = this.continuation
-      ? this.parent.selector() + selector
-      : this.mixin
-        ? this.parent.selector()
-        : this.parent.selector() + ' ' + selector
-  return selector
-}
-
-/**
- * Return selector and nested selectors as CSS.
- *
- * @return {string}
- * @api private
- */
-
-Selector.prototype.toString = function() {
-  return (this.properties.length
-      ? this.selector() + ' {\n' + this.properties.join('\n') + '}\n'
-      : '') + this.children.join('')
-}
-
-// --- Property
-
-/**
- * Initialize property with _name_ and _val_.
- *
- * @param  {string} name
- * @param  {string} val
- * @api private
- */
-
-function Property(name, val) {
-  this.name = name
-  this.val = val
-}
-
-/**
- * Return CSS string representing a property.
- *
- * @return {string}
- * @api private
- */
-
-Property.prototype.toString = function() {
-  return '  ' + this.name + ': ' + this.val + ';'
-}
diff --git a/node/node_modules/jade/support/sass/package.json b/node/node_modules/jade/support/sass/package.json
deleted file mode 100644 (file)
index 250e3bc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "sass",
-  "description": "Syntactically Awesome Stylesheets (compiles to css)",
-  "version": "0.4.3",
-  "keywords": ["sass", "template", "css", "view"],
-  "author": "TJ Holowaychuk <tj@vision-media.ca>",
-  "directories": {
-    "lib": "."
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/seed.yml b/node/node_modules/jade/support/sass/seed.yml
deleted file mode 100644 (file)
index 7f95bf5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
----
-  name: Sass
-  description: Syntactically Awesome Stylesheets (compiles to css)
-  version: 0.4.3
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/collect.sass b/node/node_modules/jade/support/sass/spec/fixtures/collect.sass
deleted file mode 100644 (file)
index ad7d202..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-!red = #ff0000
-!black = #000
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/comment.css b/node/node_modules/jade/support/sass/spec/fixtures/comment.css
deleted file mode 100644 (file)
index e81583f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body a {
-  color: #fff;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/comment.sass b/node/node_modules/jade/support/sass/spec/fixtures/comment.sass
deleted file mode 100644 (file)
index eaad554..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-// foo
-body
-  // bar
-  a
-    :color #fff
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/continuation.css b/node/node_modules/jade/support/sass/spec/fixtures/continuation.css
deleted file mode 100644 (file)
index 6958788..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-a {
-  color: #fff;}
-a:hover {
-  color: #000;}
-a.active {
-  background: #888;}
-a.active:hover {
-  color: #fff;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/continuation.sass b/node/node_modules/jade/support/sass/spec/fixtures/continuation.sass
deleted file mode 100644 (file)
index d07b101..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-a
-  :color #fff
-  &:hover
-    :color #000
-  &.active
-    :background #888
-    &:hover
-      :color #fff
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/literal.css b/node/node_modules/jade/support/sass/spec/fixtures/literal.css
deleted file mode 100644 (file)
index cc4d5a6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-input {
-  border: 2px "solid" #000;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/literal.sass b/node/node_modules/jade/support/sass/spec/fixtures/literal.sass
deleted file mode 100644 (file)
index c207d37..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-!type = "solid"
-!size = 1
-input
-  :border { parseInt(size) + 1 }px {type} #000
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/mixin.css b/node/node_modules/jade/support/sass/spec/fixtures/mixin.css
deleted file mode 100644 (file)
index 6ddc778..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-table {
-  border: none;}
-table tr {
-  background: #fff;}
-table tr {
-  font-size: 15px;}
-table tr:odd {
-  background: #000;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/mixin.sass b/node/node_modules/jade/support/sass/spec/fixtures/mixin.sass
deleted file mode 100644 (file)
index a27a945..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-+large
-  :font-size 15px
-+striped
-  tr
-    :background #fff
-    +large
-    &:odd
-      :background #000
-table
-  +striped
-  :border none
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/mixin.undefined.sass b/node/node_modules/jade/support/sass/spec/fixtures/mixin.undefined.sass
deleted file mode 100644 (file)
index 4026d54..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body
-  +large
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/properties.css b/node/node_modules/jade/support/sass/spec/fixtures/properties.css
deleted file mode 100644 (file)
index ccc4b21..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  font-size: 13px;
-  color: #fff;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/properties.expand.css b/node/node_modules/jade/support/sass/spec/fixtures/properties.expand.css
deleted file mode 100644 (file)
index b95a347..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-div {
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/properties.expand.sass b/node/node_modules/jade/support/sass/spec/fixtures/properties.expand.sass
deleted file mode 100644 (file)
index 9ae954c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-div
-  =border-radius 5px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/properties.invalid.sass b/node/node_modules/jade/support/sass/spec/fixtures/properties.invalid.sass
deleted file mode 100644 (file)
index b724ff6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-:color #fff
-body
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/properties.nested.css b/node/node_modules/jade/support/sass/spec/fixtures/properties.nested.css
deleted file mode 100644 (file)
index 3542a2a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-body {
-  padding: 0;}
-body ul {
-  margin: 0;}
-body ul li {
-  list-style: none;}
-body ul li a {
-  color: #fff;}
-body form label {
-  display: none;}
-
-a {
-  color: #cc0000;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/properties.nested.invalid.sass b/node/node_modules/jade/support/sass/spec/fixtures/properties.nested.invalid.sass
deleted file mode 100644 (file)
index 614aee4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body
-  ul
-      :margin 0
-    li
-      :padding 0
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/properties.nested.sass b/node/node_modules/jade/support/sass/spec/fixtures/properties.nested.sass
deleted file mode 100644 (file)
index aa1a930..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-body
-  ul
-  :margin 0
-    li
-      a
-        :color #fff
-      :list-style none
-  :padding 0
-  form
-    label
-      :display none
-a
-  :color #cc0000
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/properties.sass b/node/node_modules/jade/support/sass/spec/fixtures/properties.sass
deleted file mode 100644 (file)
index 603653a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body
-  :font-size 13px
-  :color #fff
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/selectors.css b/node/node_modules/jade/support/sass/spec/fixtures/selectors.css
deleted file mode 100644 (file)
index 62532b4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body input.field#email ~ label {
-  display: none;}
-body form:nth-child(1) legend {
-  font-size: 15px;}
-body ul li:first-child a {
-  display: none;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/selectors.sass b/node/node_modules/jade/support/sass/spec/fixtures/selectors.sass
deleted file mode 100644 (file)
index 3aa6ca6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-body
-  input.field#email ~ label
-    :display none
-  form:nth-child(1)
-    legend
-      :font-size 15px
-  ul
-    li:first-child
-      a
-        :display none
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/variables.alternate.css b/node/node_modules/jade/support/sass/spec/fixtures/variables.alternate.css
deleted file mode 100644 (file)
index dd2d6bc..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body {
-  background: #ff0000 url('foo.png');}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/variables.alternate.sass b/node/node_modules/jade/support/sass/spec/fixtures/variables.alternate.sass
deleted file mode 100644 (file)
index b022082..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-color: #ff0000
-image: url('foo.png')
-body
-  :background !color !image
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/variables.css b/node/node_modules/jade/support/sass/spec/fixtures/variables.css
deleted file mode 100644 (file)
index 904bdbc..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body {
-  color: #ff0000;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/variables.regular.css b/node/node_modules/jade/support/sass/spec/fixtures/variables.regular.css
deleted file mode 100644 (file)
index 904bdbc..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body {
-  color: #ff0000;}
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/variables.regular.sass b/node/node_modules/jade/support/sass/spec/fixtures/variables.regular.sass
deleted file mode 100644 (file)
index 82ae128..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-!red = #ff0000
-body
-  :color !red
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/fixtures/variables.sass b/node/node_modules/jade/support/sass/spec/fixtures/variables.sass
deleted file mode 100644 (file)
index c9f3388..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-red: #ff0000
-
-body
-  :color !red
diff --git a/node/node_modules/jade/support/sass/spec/lib/images/bg.png b/node/node_modules/jade/support/sass/spec/lib/images/bg.png
deleted file mode 100644 (file)
index 947804f..0000000
Binary files a/node/node_modules/jade/support/sass/spec/lib/images/bg.png and /dev/null differ
diff --git a/node/node_modules/jade/support/sass/spec/lib/images/hr.png b/node/node_modules/jade/support/sass/spec/lib/images/hr.png
deleted file mode 100644 (file)
index 4a94d12..0000000
Binary files a/node/node_modules/jade/support/sass/spec/lib/images/hr.png and /dev/null differ
diff --git a/node/node_modules/jade/support/sass/spec/lib/images/loading.gif b/node/node_modules/jade/support/sass/spec/lib/images/loading.gif
deleted file mode 100644 (file)
index c69e937..0000000
Binary files a/node/node_modules/jade/support/sass/spec/lib/images/loading.gif and /dev/null differ
diff --git a/node/node_modules/jade/support/sass/spec/lib/images/sprites.bg.png b/node/node_modules/jade/support/sass/spec/lib/images/sprites.bg.png
deleted file mode 100644 (file)
index dc8790f..0000000
Binary files a/node/node_modules/jade/support/sass/spec/lib/images/sprites.bg.png and /dev/null differ
diff --git a/node/node_modules/jade/support/sass/spec/lib/images/sprites.png b/node/node_modules/jade/support/sass/spec/lib/images/sprites.png
deleted file mode 100644 (file)
index 010b98e..0000000
Binary files a/node/node_modules/jade/support/sass/spec/lib/images/sprites.png and /dev/null differ
diff --git a/node/node_modules/jade/support/sass/spec/lib/images/vr.png b/node/node_modules/jade/support/sass/spec/lib/images/vr.png
deleted file mode 100644 (file)
index b2e7617..0000000
Binary files a/node/node_modules/jade/support/sass/spec/lib/images/vr.png and /dev/null differ
diff --git a/node/node_modules/jade/support/sass/spec/lib/jspec.css b/node/node_modules/jade/support/sass/spec/lib/jspec.css
deleted file mode 100644 (file)
index 629d41c..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-body.jspec {
-  margin: 45px 0;
-  font: 12px "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
-  background: #efefef url(images/bg.png) top left repeat-x;
-  text-align: center;
-}
-#jspec {
-  margin: 0 auto;
-  padding-top: 30px;
-  width: 1008px;
-  background: url(images/vr.png) top left repeat-y;
-  text-align: left;
-}
-#jspec-top {
-  position: relative;
-  margin: 0 auto;
-  width: 1008px;
-  height: 40px;
-  background: url(images/sprites.bg.png) top left no-repeat;
-}
-#jspec-bottom {
-  margin: 0 auto;
-  width: 1008px;
-  height: 15px;
-  background: url(images/sprites.bg.png) bottom left no-repeat;
-}
-#jspec .loading {
-  margin-top: -45px;
-  width: 1008px;
-  height: 80px;
-  background: url(images/loading.gif) 50% 50% no-repeat;
-}
-#jspec-title {
-  position: absolute;
-  top: 15px;
-  left: 20px;
-  width: 160px;
-  font-size: 22px;
-  font-weight: normal;
-  background: url(images/sprites.png) 0 -126px no-repeat;
-  text-align: center;
-}
-#jspec-title em {
-  font-size: 10px;
-  font-style: normal;
-  color: #BCC8D1;
-}
-#jspec-report * {
-       margin: 0;
-       padding: 0;
-       background: none;
-       border: none;
-}
-#jspec-report {
-  padding: 15px 40px;
-       font: 11px "Helvetica Neue Light", "Lucida Grande", "Calibri", "Arial", sans-serif;
-       color: #7B8D9B;
-}
-#jspec-report.has-failures {
-  padding-bottom: 30px;
-}
-#jspec-report .hidden {
-  display: none;
-}
-#jspec-report .heading {
-  margin-bottom: 15px;
-}
-#jspec-report .heading span {
-  padding-right: 10px;
-}
-#jspec-report .heading .passes em {
-  color: #0ea0eb;
-}
-#jspec-report .heading .failures em {
-  color: #FA1616;
-}
-#jspec-report table {
-  font-size: 11px;
-  border-collapse: collapse;
-}
-#jspec-report td {
-  padding: 8px;
-  text-indent: 30px;
-  color: #7B8D9B;
-}
-#jspec-report tr.body {
-  display: none;
-}
-#jspec-report tr.body pre {
-  margin: 0;
-  padding: 0 0 5px 25px;
-}
-#jspec-report tr.even:hover + tr.body, 
-#jspec-report tr.odd:hover + tr.body {
-  display: block;
-}
-#jspec-report tr td:first-child em {
-       display: block;
-       clear: both;
-  font-style: normal;
-  font-weight: normal;
-  color: #7B8D9B;
-}
-#jspec-report tr.even:hover, 
-#jspec-report tr.odd:hover {
-  text-shadow: 1px 1px 1px #fff;
-  background: #F2F5F7;
-}
-#jspec-report td + td {
-  padding-right: 0;
-  width: 15px;
-}
-#jspec-report td.pass {
-  background: url(images/sprites.png) 3px -7px no-repeat;
-}
-#jspec-report td.fail {
-  background: url(images/sprites.png) 3px -158px no-repeat;
-  font-weight: bold;
-  color: #FC0D0D;
-}
-#jspec-report td.requires-implementation {
-  background: url(images/sprites.png) 3px -333px no-repeat;
-}
-#jspec-report tr.description td {
-  margin-top: 25px;
-  padding-top: 25px;
-  font-size: 12px;
-  font-weight: bold;
-  text-indent: 0;
-  color: #1a1a1a;
-}
-#jspec-report tr.description:first-child td {
-  border-top: none;  
-}
-#jspec-report .assertion {
-  display: block;
-  float: left;
-  margin: 0 0 0 1px;
-  padding: 0;
-  width: 1px;
-  height: 5px;
-  background: #7B8D9B;
-}
-#jspec-report .assertion.failed {
-  background: red;
-}
-.jspec-sandbox {
-  display: none;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/lib/jspec.growl.js b/node/node_modules/jade/support/sass/spec/lib/jspec.growl.js
deleted file mode 100644 (file)
index a150257..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-
-// JSpec - Growl - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
-
-;(function(){
-  
-  Growl = {
-    
-    // --- Version
-    
-    version: '1.0.0',
-    
-    /**
-     * Execute the given _cmd_, returning an array of lines from stdout.
-     *
-     * Examples:
-     *
-     *   Growl.exec('growlnotify', '-m', msg)
-     *
-     * @param  {string ...} cmd
-     * @return {array}
-     * @api public
-     */
-
-    exec: function(cmd) {
-      var lines = [], line
-      with (JavaImporter(java.lang, java.io)) {
-        var proccess = Runtime.getRuntime().exec(Array.prototype.slice.call(arguments))
-        var stream = new DataInputStream(proccess.getInputStream())
-        while (line = stream.readLine())
-          lines.push(line + '')
-        stream.close()    
-      }
-      return lines
-    },
-    
-    /**
-     * Return the extension of the given _path_ or null.
-     *
-     * @param  {string} path
-     * @return {string}
-     * @api private
-     */
-    
-    extname: function(path) {
-      return path.lastIndexOf('.') != -1 ? 
-        path.slice(path.lastIndexOf('.') + 1, path.length) :
-          null
-    },
-
-    /**
-     * Version of the 'growlnotify' binary.
-     *
-     * @return {string}
-     * @api private
-     */
-
-    binVersion: function() {
-      try { return this.exec('growlnotify', '-v')[0].split(' ')[1] } catch (e) {}
-    },
-
-    /**
-     * Send growl notification _msg_ with _options_.
-     *
-     * Options:
-     *
-     *  - title   Notification title
-     *  - sticky  Make the notification stick (defaults to false)
-     *  - name    Application name (defaults to growlnotify)
-     *  - image
-     *    - path to an icon sets --iconpath
-     *    - path to an image sets --image
-     *    - capitalized word sets --appIcon
-     *    - filename uses extname as --icon
-     *    - otherwise treated as --icon
-     *
-     * Examples:
-     *
-     *   Growl.notify('New email')
-     *   Growl.notify('5 new emails', { title: 'Thunderbird' })
-     *
-     * @param {string} msg
-     * @param {options} hash
-     * @api public
-     */
-
-    notify: function(msg, options) {
-      options = options || {}
-      var args = ['growlnotify', '-m', msg]
-      if (!this.binVersion()) throw new Error('growlnotify executable is required')
-      if (image = options.image) {
-        var flag, ext = this.extname(image)
-        flag = flag || ext == 'icns' && 'iconpath'
-        flag = flag || /^[A-Z]/.test(image) && 'appIcon'
-        flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image'
-        flag = flag || ext && (image = ext) && 'icon'
-        flag = flag || 'icon'
-        args.push('--' + flag, image)
-      }
-      if (options.sticky) args.push('--sticky')
-      if (options.name) args.push('--name', options.name)
-      if (options.title) args.push(options.title)
-      this.exec.apply(this, args)
-    }
-  }
-  
-  JSpec.include({
-    name: 'Growl',
-    reporting: function(options){
-      var stats = JSpec.stats
-      if (stats.failures) Growl.notify('failed ' + stats.failures + ' assertions', { title: 'JSpec'})
-      else Growl.notify('passed ' + stats.passes + ' assertions', { title: 'JSpec' })
-    }
-  })
-  
-})()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/lib/jspec.jquery.js b/node/node_modules/jade/support/sass/spec/lib/jspec.jquery.js
deleted file mode 100644 (file)
index 46422ec..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-
-// JSpec - jQuery - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
-
-JSpec
-.requires('jQuery', 'when using jspec.jquery.js')
-.include({
-  name: 'jQuery',
-  
-  // --- Initialize
-  
-  init : function() {
-    jQuery.ajaxSetup({ async: false })
-  },
-  
-  // --- Utilities
-  
-  utilities : {
-    element:  jQuery,
-    elements: jQuery,
-    sandbox : function() {
-      return jQuery('<div class="sandbox"></div>')
-    }
-  },
-  
-  // --- Matchers
-  
-  matchers : {    
-    have_tag      : "jQuery(expected, actual).length === 1",
-    have_one      : "alias have_tag",
-    have_tags     : "jQuery(expected, actual).length > 1",
-    have_many     : "alias have_tags",
-    have_any      : "alias have_tags",
-    have_child    : "jQuery(actual).children(expected).length === 1",
-    have_children : "jQuery(actual).children(expected).length > 1",
-    have_text     : "jQuery(actual).text() === expected",
-    have_value    : "jQuery(actual).val() === expected",
-    be_enabled    : "!jQuery(actual).attr('disabled')",
-    have_class    : "jQuery(actual).hasClass(expected)",
-    be_animated   : "jQuery(actual).queue().length > 0",        
-        
-    be_visible : function(actual) {
-      return jQuery(actual).css('display') != 'none' &&
-             jQuery(actual).css('visibility') != 'hidden' &&
-             jQuery(actual).attr('type') != 'hidden'
-    },
-    
-    be_hidden : function(actual) {
-      return !JSpec.does(actual, 'be_visible')
-    },
-    
-    have_classes : function(actual) {
-      return !JSpec.any(JSpec.toArray(arguments, 1), function(arg){
-        return !JSpec.does(actual, 'have_class', arg)
-      })
-    },
-
-    have_attr : function(actual, attr, value) {
-      return value ? jQuery(actual).attr(attr) == value:
-                     jQuery(actual).attr(attr)
-    },
-    
-    have_event_handlers : function(actual, expected) {
-      return jQuery(actual).data('events') ?
-        jQuery(actual).data('events').hasOwnProperty(expected) :
-          false
-    },
-    
-    'be disabled selected checked' : function(attr) {
-      return 'jQuery(actual).attr("' + attr + '")'
-    },
-    
-    'have type id title alt href src sel rev name target' : function(attr) {
-      return function(actual, value) {
-        return JSpec.does(actual, 'have_attr', attr, value)
-      }
-    }
-  }
-})
-
diff --git a/node/node_modules/jade/support/sass/spec/lib/jspec.js b/node/node_modules/jade/support/sass/spec/lib/jspec.js
deleted file mode 100644 (file)
index 131c745..0000000
+++ /dev/null
@@ -1,1893 +0,0 @@
-
-// JSpec - Core - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
-
-;(function(){
-
-  JSpec = {
-    version   : '4.3.2',
-    assert    : true,
-    cache     : {},
-    suites    : [],
-    modules   : [],
-    allSuites : [],
-               sharedBehaviors: [],
-    matchers  : {},
-    stubbed   : [],
-    options   : {},
-    request   : 'XMLHttpRequest' in this ? XMLHttpRequest : null,
-    stats     : { specs: 0, assertions: 0, failures: 0, passes: 0, specsFinished: 0, suitesFinished: 0 },
-
-    /**
-     * Default context in which bodies are evaluated.
-     *
-     * Replace context simply by setting JSpec.context
-     * to your own like below:
-     *
-     * JSpec.context = { foo : 'bar' }
-     *
-     * Contexts can be changed within any body, this can be useful
-     * in order to provide specific helper methods to specific suites.
-     *
-     * To reset (usually in after hook) simply set to null like below:
-     *
-     * JSpec.context = null
-     *
-     */
-
-     defaultContext : {
-      
-      /**
-       * Return an object used for proxy assertions. 
-       * This object is used to indicate that an object
-       * should be an instance of _object_, not the constructor
-       * itself.
-       *
-       * @param  {function} constructor
-       * @return {hash}
-       * @api public
-       */
-      
-      an_instance_of : function(constructor) {
-        return { an_instance_of : constructor }
-      },
-      
-      /**
-       * Load fixture at _path_.
-       *
-       * Fixtures are resolved as:
-       *
-       *  - <path>
-       *  - <path>.html
-       *
-       * @param  {string} path
-       * @return {string}
-       * @api public
-       */
-      
-      fixture : function(path) {
-        if (JSpec.cache[path]) return JSpec.cache[path]
-        return JSpec.cache[path] = 
-          JSpec.tryLoading(JSpec.options.fixturePath + '/' + path) ||
-          JSpec.tryLoading(JSpec.options.fixturePath + '/' + path + '.html')
-      },
-      
-      /**
-       * Load json fixture at _path_.
-       *
-       * JSON fixtures are resolved as:
-       *
-       *  - <path>
-       *  - <path>.json
-       *
-       * @param  {string} path
-       * @return {object}
-       * @api public
-       */
-      
-      json_fixture: function(path) {
-        if (!JSpec.cache['json:' + path])
-          JSpec.cache['json:' + path] =
-            JSpec.tryLoading(JSpec.options.fixturePath + '/' + path) ||
-            JSpec.tryLoading(JSpec.options.fixturePath + '/' + path + '.json')
-        try {
-          return eval('(' + JSpec.cache['json:' + path] + ')')
-        } catch (e) {
-          throw 'json_fixture("' + path + '"): ' + e
-        }
-      }
-    },
-
-    // --- Objects
-    
-    reporters : {
-      
-      /**
-       * Report to server.
-       * 
-       * Options:
-       *  - uri           specific uri to report to.
-       *  - verbose       weither or not to output messages
-       *  - failuresOnly  output failure messages only
-       *
-       * @api public
-       */
-      
-      Server : function(results, options) {
-        var uri = options.uri || 'http://' + window.location.host + '/results'
-        JSpec.post(uri, {
-          stats: JSpec.stats,
-          options: options,
-          results: map(results.allSuites, function(suite) {
-            if (suite.isExecutable())
-              return {
-                description: suite.description,
-                specs: map(suite.specs, function(spec) {
-                  return {
-                    description: spec.description,
-                    message: !spec.passed() ? spec.failure().message : null,
-                    status: spec.requiresImplementation() ? 'pending' :
-                              spec.passed() ? 'pass' :
-                                'fail',
-                    assertions: map(spec.assertions, function(assertion){
-                      return {
-                        passed: assertion.passed  
-                      }
-                    })
-                  }
-                })
-              }
-          })
-        })
-                       if ('close' in main) main.close()
-      },
-
-      /**
-       * Default reporter, outputting to the DOM.
-       *
-       * Options:
-       *   - reportToId    id of element to output reports to, defaults to 'jspec'
-       *   - failuresOnly  displays only suites with failing specs
-       *
-       * @api public
-       */
-
-      DOM : function(results, options) {
-        var id = option('reportToId') || 'jspec',
-            report = document.getElementById(id),
-            failuresOnly = option('failuresOnly'),
-            classes = results.stats.failures ? 'has-failures' : ''
-        if (!report) throw 'JSpec requires the element #' + id + ' to output its reports'
-        
-        function bodyContents(body) {
-          return JSpec.
-            escape(JSpec.contentsOf(body)).
-            replace(/^ */gm, function(a){ return (new Array(Math.round(a.length / 3))).join(' ') }).
-            replace(/\r\n|\r|\n/gm, '<br/>')
-        }
-        
-        report.innerHTML = '<div id="jspec-report" class="' + classes + '"><div class="heading"> \
-        <span class="passes">Passes: <em>' + results.stats.passes + '</em></span>                \
-        <span class="failures">Failures: <em>' + results.stats.failures + '</em></span>          \
-        <span class="passes">Duration: <em>' + results.duration + '</em> ms</span>          \
-        </div><table class="suites">' + map(results.allSuites, function(suite) {
-          var displaySuite = failuresOnly ? suite.ran && !suite.passed() : suite.ran
-          if (displaySuite && suite.isExecutable())
-            return '<tr class="description"><td colspan="2">' + escape(suite.description) + '</td></tr>' +
-              map(suite.specs, function(i, spec) {
-                return '<tr class="' + (i % 2 ? 'odd' : 'even') + '">' +
-                  (spec.requiresImplementation() ?
-                    '<td class="requires-implementation" colspan="2">' + escape(spec.description) + '</td>' :
-                      (spec.passed() && !failuresOnly) ?
-                        '<td class="pass">' + escape(spec.description)+ '</td><td>' + spec.assertionsGraph() + '</td>' :
-                          !spec.passed() ?
-                            '<td class="fail">' + escape(spec.description) + 
-                                                                                                       map(spec.failures(), function(a){ return '<em>' + escape(a.message) + '</em>' }).join('') +
-                                                                                                               '</td><td>' + spec.assertionsGraph() + '</td>' :
-                              '') +
-                  '<tr class="body"><td colspan="2"><pre>' + bodyContents(spec.body) + '</pre></td></tr>'
-              }).join('') + '</tr>'
-        }).join('') + '</table></div>'
-      },
-      
-      /**
-       * Terminal reporter.
-       *
-       * @api public
-       */
-       
-       Terminal : function(results, options) {
-         var failuresOnly = option('failuresOnly')
-         print(color("\n Passes: ", 'bold') + color(results.stats.passes, 'green') + 
-               color(" Failures: ", 'bold') + color(results.stats.failures, 'red') +
-               color(" Duration: ", 'bold') + color(results.duration, 'green') + " ms \n")
-              
-         function indent(string) {
-           return string.replace(/^(.)/gm, '  $1')
-         }
-         
-         each(results.allSuites, function(suite) {
-           var displaySuite = failuresOnly ? suite.ran && !suite.passed() : suite.ran
-            if (displaySuite && suite.isExecutable()) {
-              print(color(' ' + suite.description, 'bold'))
-              each(suite.specs, function(spec){
-                var assertionsGraph = inject(spec.assertions, '', function(graph, assertion){
-                  return graph + color('.', assertion.passed ? 'green' : 'red')
-                })
-                if (spec.requiresImplementation())
-                  print(color('  ' + spec.description, 'blue') + assertionsGraph)
-                else if (spec.passed() && !failuresOnly)
-                  print(color('  ' + spec.description, 'green') + assertionsGraph)
-                else if (!spec.passed())
-                  print(color('  ' + spec.description, 'red') + assertionsGraph + 
-                        "\n" + indent(map(spec.failures(), function(a){ return a.message }).join("\n")) + "\n")
-              })
-              print("")
-            }
-         })
-         
-         quit(results.stats.failures)
-       }
-    },
-    
-    Assertion : function(matcher, actual, expected, negate) {
-      extend(this, {
-        message: '',
-        passed: false,
-        actual: actual,
-        negate: negate,
-        matcher: matcher,
-        expected: expected,
-        
-        // Report assertion results
-        
-        report : function() {
-          if (JSpec.assert) 
-            this.passed ? JSpec.stats.passes++ : JSpec.stats.failures++
-          return this
-        },
-        
-        // Run the assertion
-        
-        run : function() {
-          // TODO: remove unshifting 
-          expected.unshift(actual)
-          this.result = matcher.match.apply(this, expected)
-          this.passed = negate ? !this.result : this.result
-          if (!this.passed) this.message = matcher.message.call(this, actual, expected, negate, matcher.name)
-          return this
-        }
-      })
-    },
-    
-    ProxyAssertion : function(object, method, times, negate) {
-      var self = this,
-          old = object[method]
-      
-      // Proxy
-      
-      object[method] = function(){
-        var args = toArray(arguments),
-            result = old.apply(object, args)
-        self.calls.push({ args : args, result : result })
-        return result
-      }
-      
-      // Times
-      
-      this.times = {
-        once  : 1,
-        twice : 2
-      }[times] || times || 1
-      
-      extend(this, {
-        calls: [],
-        message: '',
-        defer: true,
-        passed: false,
-        negate: negate,
-        object: object,
-        method: method,
-        
-        // Proxy return value
-        
-        and_return : function(result) {
-          this.expectedResult = result
-          return this
-        },
-        
-        // Proxy arguments passed
-        
-        with_args : function() {
-          this.expectedArgs = toArray(arguments)
-          return this
-        },
-        
-        // Check if any calls have failing results
-        
-        anyResultsFail : function() {
-          return any(this.calls, function(call){
-            return self.expectedResult.an_instance_of ?
-                     call.result.constructor != self.expectedResult.an_instance_of:
-                       !equal(self.expectedResult, call.result)
-          })
-        },
-        
-        // Check if any calls have passing results
-        
-        anyResultsPass : function() {
-          return any(this.calls, function(call){
-            return self.expectedResult.an_instance_of ?
-                     call.result.constructor == self.expectedResult.an_instance_of:
-                       equal(self.expectedResult, call.result)
-          })
-        },
-        
-        // Return the passing result
-        
-        passingResult : function() {
-          return this.anyResultsPass().result
-        },
-
-        // Return the failing result
-        
-        failingResult : function() {
-          return this.anyResultsFail().result
-        },
-        
-        // Check if any arguments fail
-        
-        anyArgsFail : function() {
-          return any(this.calls, function(call){
-            return any(self.expectedArgs, function(i, arg){
-              if (arg == null) return call.args[i] == null
-              return arg.an_instance_of ?
-                       call.args[i].constructor != arg.an_instance_of:
-                         !equal(arg, call.args[i])
-                       
-            })
-          })
-        },
-        
-        // Check if any arguments pass
-        
-        anyArgsPass : function() {
-          return any(this.calls, function(call){
-            return any(self.expectedArgs, function(i, arg){
-              return arg.an_instance_of ?
-                       call.args[i].constructor == arg.an_instance_of:
-                         equal(arg, call.args[i])
-                       
-            })
-          })
-        },
-        
-        // Return the passing args
-        
-        passingArgs : function() {
-          return this.anyArgsPass().args
-        },
-                
-        // Return the failing args
-        
-        failingArgs : function() {
-          return this.anyArgsFail().args
-        },
-        
-        // Report assertion results
-        
-        report : function() {
-          if (JSpec.assert) 
-            this.passed ? ++JSpec.stats.passes : ++JSpec.stats.failures
-          return this
-        },
-        
-        // Run the assertion
-                
-        run : function() {
-          var methodString = 'expected ' + object.toString() + '.' + method + '()' + (negate ? ' not' : '' )
-          
-          function times(n) {
-            return n > 2 ?  n + ' times' : { 1: 'once', 2: 'twice' }[n]
-          }
-          
-          if (this.expectedResult != null && (negate ? this.anyResultsPass() : this.anyResultsFail()))
-            this.message = methodString + ' to return ' + puts(this.expectedResult) + 
-              ' but ' + (negate ? 'it did' : 'got ' + puts(this.failingResult())) 
-
-          if (this.expectedArgs && (negate ? !this.expectedResult && this.anyArgsPass() : this.anyArgsFail()))
-            this.message = methodString + ' to be called with ' + puts.apply(this, this.expectedArgs) +
-             ' but was' + (negate ? '' : ' called with ' + puts.apply(this, this.failingArgs()))
-
-          if (negate ? !this.expectedResult && !this.expectedArgs && this.calls.length >= this.times : this.calls.length != this.times)
-            this.message = methodString + ' to be called ' + times(this.times) + 
-            ', but ' +  (this.calls.length == 0 ? ' was not called' : ' was called ' + times(this.calls.length))
-                
-          if (!this.message.length) 
-            this.passed = true
-          
-          return this
-        }
-      })
-    },
-      
-    /**
-     * Specification Suite block object.
-     *
-     * @param {string} description
-     * @param {function} body
-     * @api private
-     */
-
-    Suite : function(description, body, isShared) {
-      var self = this
-      extend(this, {
-        body: body,
-        description: description,
-        suites: [],
-                               sharedBehaviors: [],
-        specs: [],
-        ran: false,
-                               shared: isShared, 
-                               hooks: {        'before' : [], 'after' : [], 
-                                                                       'before_each' : [], 'after_each' : [],
-                                                                       'before_nested' : [], 'after_nested' : []},
-        
-                               // Add a spec to the suite
-
-        addSpec : function(description, body) {
-          var spec = new JSpec.Spec(description, body)
-          this.specs.push(spec)
-          JSpec.stats.specs++ // TODO: abstract
-          spec.suite = this
-        },
-
-        // Add a before hook to the suite
-
-        addBefore : function(options, body) {
-                                       body.options = options || {}
-          this.befores.push(body)
-        },
-
-        // Add an after hook to the suite
-
-        addAfter : function(options, body) {
-                                       body.options = options || {}
-          this.afters.unshift(body)
-        },
-
-        // Add a hook to the suite
-        addHook : function(hook, body) {
-          this.hooks[hook].push(body)
-        },
-
-        // Add a nested suite
-
-        addSuite : function(description, body, isShared) {
-          var suite = new JSpec.Suite(description, body, isShared)
-          JSpec.allSuites.push(suite)
-          suite.name = suite.description
-          suite.description = this.description + ' ' + suite.description
-          this.suites.push(suite)
-          suite.suite = this
-        },
-
-                               // Invoke a hook in context to this suite
-
-        hook : function(hook) {
-                                       if (hook != 'before' && hook != 'after')        
-               if (this.suite) this.suite.hook(hook)
-
-          each(this.hooks[hook], function(body) {
-            JSpec.evalBody(body, "Error in hook '" + hook + "', suite '" + self.description + "': ")
-          })
-        },
-                               
-        // Check if nested suites are present
-
-        hasSuites : function() {
-          return this.suites.length  
-        },
-
-        // Check if this suite has specs
-
-        hasSpecs : function() {
-          return this.specs.length
-        },
-
-        // Check if the entire suite passed
-
-        passed : function() {
-          return !any(this.specs, function(spec){
-            return !spec.passed() 
-          })
-        },
-
-                               isShared : function(){
-                                       return this.shared
-                               },
-
-                               isExecutable : function() {
-                                       return !this.isShared() && this.hasSpecs()
-                               }
-      })
-    },
-    
-    /**
-     * Specification block object.
-     *
-     * @param {string} description
-     * @param {function} body
-     * @api private
-     */
-
-    Spec : function(description, body) {
-      extend(this, {
-        body: body,
-        description: description,
-        assertions: [],
-        
-        // Add passing assertion
-        
-        pass : function(message) {
-          this.assertions.push({ passed: true, message: message })
-          if (JSpec.assert) ++JSpec.stats.passes
-        },
-        
-        // Add failing assertion
-        
-        fail : function(message) {
-          this.assertions.push({ passed: false, message: message })
-          if (JSpec.assert) ++JSpec.stats.failures
-        },
-                
-        // Run deferred assertions
-        
-        runDeferredAssertions : function() {
-          each(this.assertions, function(assertion){
-            if (assertion.defer) assertion.run().report(), hook('afterAssertion', assertion)
-          })
-        },
-        
-        // Find first failing assertion
-
-        failure : function() {
-          return find(this.assertions, function(assertion){
-            return !assertion.passed
-          })
-        },
-
-        // Find all failing assertions
-
-        failures : function() {
-          return select(this.assertions, function(assertion){
-            return !assertion.passed
-          })
-        },
-
-        // Weither or not the spec passed
-
-        passed : function() {
-          return !this.failure()
-        },
-
-        // Weither or not the spec requires implementation (no assertions)
-
-        requiresImplementation : function() {
-          return this.assertions.length == 0
-        },
-
-        // Sprite based assertions graph
-
-        assertionsGraph : function() {
-          return map(this.assertions, function(assertion){
-            return '<span class="assertion ' + (assertion.passed ? 'passed' : 'failed') + '"></span>'
-          }).join('')
-        }
-      })
-    },
-    
-    Module : function(methods) {
-      extend(this, methods)
-    },
-    
-    JSON : {
-      
-      /**
-       * Generic sequences.
-       */
-      
-      meta : {
-        '\b' : '\\b',
-        '\t' : '\\t',
-        '\n' : '\\n',
-        '\f' : '\\f',
-        '\r' : '\\r',
-        '"'  : '\\"',
-        '\\' : '\\\\'
-      },
-      
-      /**
-       * Escapable sequences.
-       */
-      
-      escapable : /[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-      
-      /**
-       * JSON encode _object_.
-       *
-       * @param  {mixed} object
-       * @return {string}
-       * @api private
-       */
-       
-      encode : function(object) {
-        var self = this
-        if (object == undefined || object == null) return 'null'
-        if (object === true) return 'true'
-        if (object === false) return 'false'
-        switch (typeof object) {
-          case 'number': return object
-          case 'string': return this.escapable.test(object) ?
-            '"' + object.replace(this.escapable, function (a) {
-              return typeof self.meta[a] === 'string' ? self.meta[a] :
-                '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4)
-            }) + '"' :
-            '"' + object + '"'
-          case 'object':  
-            if (object.constructor == Array)
-              return '[' + map(object, function(val){
-                return self.encode(val)
-              }).join(', ') + ']'
-            else if (object)
-              return '{' + map(object, function(key, val){
-                return self.encode(key) + ':' + self.encode(val)
-              }).join(', ') + '}'
-        }
-        return 'null'
-      }
-    },
-    
-    // --- DSLs
-    
-    DSLs : {
-      snake : {
-        expect : function(actual){
-          return JSpec.expect(actual)
-        },
-
-        describe : function(description, body) {
-          return JSpec.currentSuite.addSuite(description, body, false)
-        },
-
-        it : function(description, body) {
-          return JSpec.currentSuite.addSpec(description, body)
-        },
-
-        before : function(body) {
-          return JSpec.currentSuite.addHook('before', body)
-        },
-        after : function(body) {
-          return JSpec.currentSuite.addHook('after', body)
-        },
-        before_each : function(body) {
-          return JSpec.currentSuite.addHook('before_each', body)
-        },
-        after_each : function(body) {
-          return JSpec.currentSuite.addHook('after_each', body)
-        },
-
-                               before_nested : function(body) {
-                                       return JSpec.currentSuite.addHook('before_nested', body)
-                               },
-                               
-                               after_nested : function(body){
-                                       return JSpec.currentSuite.addhook('after_nested', body)
-                               },
-        
-                               shared_behaviors_for : function(description, body){
-                                 return JSpec.currentSuite.addSuite(description, body, true)
-                               },
-
-        should_behave_like : function(description) {
-          return JSpec.shareBehaviorsOf(description)
-        }
-      }
-    },
-
-    // --- Methods
-    
-    /**
-     * Check if _value_ is 'stop'. For use as a
-     * utility callback function.
-     *
-     * @param  {mixed} value
-     * @return {bool}
-     * @api public
-     */
-    
-    haveStopped : function(value) {
-      return value === 'stop'
-    },
-    
-    /**
-     * Include _object_ which may be a hash or Module instance.
-     *
-     * @param  {hash, Module} object
-     * @return {JSpec}
-     * @api public
-     */
-    
-    include : function(object) {
-      var module = object.constructor == JSpec.Module ? object : new JSpec.Module(object)
-      this.modules.push(module)
-      if ('init' in module) module.init()
-      if ('utilities' in module) extend(this.defaultContext, module.utilities)
-      if ('matchers' in module) this.addMatchers(module.matchers)
-      if ('reporters' in module) extend(this.reporters, module.reporters)
-      if ('DSLs' in module)
-        each(module.DSLs, function(name, methods){
-          JSpec.DSLs[name] = JSpec.DSLs[name] || {}
-          extend(JSpec.DSLs[name], methods)
-        })
-      return this
-    },
-    
-    /**
-     * Add a module hook _name_, which is immediately
-     * called per module with the _args_ given. An array of
-     * hook return values is returned.
-     *
-     * @param  {name} string
-     * @param  {...} args
-     * @return {array}
-     * @api private
-     */
-    
-    hook : function(name, args) {
-      args = toArray(arguments, 1)
-      return inject(JSpec.modules, [], function(results, module){
-        if (typeof module[name] == 'function')
-          results.push(JSpec.evalHook(module, name, args))
-      })
-    },
-    
-    /**
-     * Eval _module_ hook _name_ with _args_. Evaluates in context
-     * to the module itself, JSpec, and JSpec.context.
-     *
-     * @param  {Module} module
-     * @param  {string} name
-     * @param  {array} args
-     * @return {mixed}
-     * @api private
-     */
-    
-    evalHook : function(module, name, args) {
-      hook('evaluatingHookBody', module, name)
-      return module[name].apply(module, args)
-    },
-    
-    /**
-     * Same as hook() however accepts only one _arg_ which is
-     * considered immutable. This function passes the arg
-     * to the first module, then passes the return value of the last
-     * module called, to the following module. 
-     *
-     * @param  {string} name
-     * @param  {mixed} arg
-     * @return {mixed}
-     * @api private
-     */
-    
-    hookImmutable : function(name, arg) {
-      return inject(JSpec.modules, arg, function(result, module){
-        if (typeof module[name] == 'function')
-          return JSpec.evalHook(module, name, [result])
-      })
-    },
-    
-    /**
-     * Find a shared example suite by its description or name.
-     * First searches parent tree of suites for shared behavior
-     * before falling back to global scoped nested behaviors.
-     *
-     * @param  {string} description
-     * @return {Suite}
-     * @api private
-     */
-    
-    findSharedBehavior : function(description) {
-      var behavior
-      return (behavior = JSpec.findLocalSharedBehavior(description))
-        ? behavior
-        : JSpec.findGlobalSharedBehavior(description)
-    },
-
-    /**
-     * Find a shared example suite within the current suite's
-     * parent tree by its description or name.
-     *
-     * @param  {string} description
-     * @return {Suite}
-     * @api private
-     */
-     
-               findLocalSharedBehavior : function(description) {
-                       var behavior,
-                           currentSuite = JSpec.currentSuite.suite
-                       while (currentSuite)
-                               if (behavior = find(currentSuite.suites, JSpec.suiteDescriptionPredicate(description)))
-                                 return behavior
-                               else
-                                 currentSuite = currentSuite.suite
-               },
-               
-    /**
-     * Find a shared example suite within the global
-     * scope by its description or name.
-     *
-     * @param  {string} description
-     * @return {Suite}
-     * @api private
-     */
-     
-               findGlobalSharedBehavior : function(description) {
-          return find(JSpec.suites, JSpec.suiteDescriptionPredicate(description))
-               },
-    
-    /**
-     * Build a predicate that will match a suite based on name or description
-     *
-     * @param  {string} description
-     * @return {function}
-     * @api private
-     */
-     
-               suiteDescriptionPredicate : function(description) {
-                       return function(suite){
-                         return suite.name === description ||
-                                suite.description === description
-                       }
-               },
-
-    /**
-     * Share behaviors (specs) of the given suite with
-     * the current suite.
-     *
-     * @param  {string} description
-     * @api public
-     */
-    
-    shareBehaviorsOf : function(description) {
-      var suite = JSpec.findSharedBehavior(description)
-      if (suite)
-        JSpec.evalBody(suite.body)
-      else
-        throw new Error("failed to find shared behaviors named `" + description + "'")
-    },
-    
-    
-    /**
-     * Convert arguments to an array.
-     *
-     * @param  {object} arguments
-     * @param  {int} offset
-     * @return {array}
-     * @api public
-     */
-    
-    toArray : function(arguments, offset) {
-      return Array.prototype.slice.call(arguments, offset || 0)
-    },
-    
-    /**
-     * Return ANSI-escaped colored string.
-     *
-     * @param  {string} string
-     * @param  {string} color
-     * @return {string}
-     * @api public
-     */
-    
-    color : function(string, color) {
-      if (option('disableColors')) {
-        return string
-      } else {
-        return "\u001B[" + {
-         bold    : 1,
-         black   : 30,
-         red     : 31,
-         green   : 32,
-         yellow  : 33,
-         blue    : 34,
-         magenta : 35,
-         cyan    : 36,
-         white   : 37
-        }[color] + 'm' + string + "\u001B[0m"
-      }
-    },
-    
-    /**
-     * Default matcher message callback.
-     *
-     * @api private
-     */
-    
-    defaultMatcherMessage : function(actual, expected, negate, name) {
-      return 'expected ' + puts(actual) + ' to ' + 
-               (negate ? 'not ' : '') + 
-                  name.replace(/_/g, ' ') +
-                    ' ' + (expected.length > 1 ?
-                      puts.apply(this, expected.slice(1)) :
-                        '')
-    },
-    
-    /**
-     * Normalize a matcher message.
-     *
-     * When no messge callback is present the defaultMatcherMessage
-     * will be assigned, will suffice for most matchers.
-     *
-     * @param  {hash} matcher
-     * @return {hash}
-     * @api public
-     */
-    
-    normalizeMatcherMessage : function(matcher) {
-      if (typeof matcher.message != 'function') 
-        matcher.message = this.defaultMatcherMessage
-      return matcher
-    },
-    
-    /**
-     * Normalize a matcher body
-     * 
-     * This process allows the following conversions until
-     * the matcher is in its final normalized hash state.
-     *
-     * - '==' becomes 'actual == expected'
-     * - 'actual == expected' becomes 'return actual == expected'
-     * - function(actual, expected) { return actual == expected } becomes 
-     *   { match : function(actual, expected) { return actual == expected }}
-     *
-     * @param  {mixed} body
-     * @return {hash}
-     * @api public
-     */
-    
-    normalizeMatcherBody : function(body) {
-      var captures
-      switch (body.constructor) {
-        case String:
-          if (captures = body.match(/^alias (\w+)/)) return JSpec.matchers[last(captures)]
-          if (body.length < 4) body = 'actual ' + body + ' expected'
-          return { match: function(actual, expected) { return eval(body) }}  
-          
-        case Function:
-          return { match: body }
-          
-        default:
-          return body
-      }
-    },
-    
-    /**
-     * Get option value. This method first checks if
-     * the option key has been set via the query string,
-     * otherwise returning the options hash value.
-     *
-     * @param  {string} key
-     * @return {mixed}
-     * @api public
-     */
-     
-     option : function(key) {
-       return (value = query(key)) !== null ? value :
-                JSpec.options[key] || null
-     },
-     
-     /**
-      * Check if object _a_, is equal to object _b_.
-      *
-      * @param  {object} a
-      * @param  {object} b
-      * @return {bool}
-      * @api private
-      */
-     
-     equal: function(a, b) {
-       if (typeof a != typeof b) return
-       if (a === b) return true
-       if (a instanceof RegExp)
-         return a.toString() === b.toString()
-       if (a instanceof Date)
-         return Number(a) === Number(b)
-       if (typeof a != 'object') return
-       if (a.length !== undefined)
-         if (a.length !== b.length) return
-         else
-           for (var i = 0, len = a.length; i < len; ++i)
-             if (!equal(a[i], b[i]))
-               return
-       for (var key in a)
-         if (!equal(a[key], b[key]))
-           return
-       return true
-     },
-
-    /**
-     * Return last element of an array.
-     *
-     * @param  {array} array
-     * @return {object}
-     * @api public
-     */
-
-    last : function(array) {
-      return array[array.length - 1]
-    },
-
-    /**
-     * Convert object(s) to a print-friend string.
-     *
-     * @param  {...} object
-     * @return {string}
-     * @api public
-     */
-
-    puts : function(object) {
-      if (arguments.length > 1)
-        return map(toArray(arguments), function(arg){
-          return puts(arg)
-        }).join(', ')
-      if (object === undefined) return 'undefined'
-      if (object === null) return 'null'
-      if (object === true) return 'true'
-      if (object === false) return 'false'
-      if (object.an_instance_of) return 'an instance of ' + object.an_instance_of.name
-      if (object.jquery && object.selector.length > 0) return 'selector ' + puts(object.selector)
-      if (object.jquery) return object.get(0).outerHTML
-      if (object.nodeName) return object.outerHTML
-      switch (object.constructor) {
-        case Function: return object.name || object 
-        case String: 
-          return '"' + object
-            .replace(/"/g,  '\\"')
-            .replace(/\n/g, '\\n')
-            .replace(/\t/g, '\\t')
-            + '"'
-        case Array: 
-          return inject(object, '[', function(b, v){
-            return b + ', ' + puts(v)
-          }).replace('[,', '[') + ' ]'
-        case Object:
-          object.__hit__ = true
-          return inject(object, '{', function(b, k, v) {
-            if (k == '__hit__') return b
-            return b + ', ' + k + ': ' + (v && v.__hit__ ? '<circular reference>' : puts(v))
-          }).replace('{,', '{') + ' }'
-        default: 
-          return object.toString()
-      }
-    },
-
-    /**
-     * Parse an XML String and return a 'document'.
-     *
-     * @param {string} text
-     * @return {document}
-     * @api public
-     */
-
-    parseXML : function(text) {
-      var xmlDoc
-      if (window.DOMParser)
-        xmlDoc = (new DOMParser()).parseFromString(text, "text/xml")
-      else {
-        xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
-        xmlDoc.async = "false"
-        xmlDoc.loadXML(text)
-      }
-      return xmlDoc
-    },
-
-    /**
-     * Escape HTML.
-     *
-     * @param  {string} html
-     * @return {string}
-     * @api public
-     */
-
-     escape : function(html) {
-       return html.toString()
-         .replace(/&/gmi, '&amp;')
-         .replace(/"/gmi, '&quot;')
-         .replace(/>/gmi, '&gt;')
-         .replace(/</gmi, '&lt;')
-     },
-     
-     /**
-      * Perform an assertion without reporting.
-      *
-      * This method is primarily used for internal
-      * matchers in order retain DRYness. May be invoked 
-      * like below:
-      *
-      *   does('foo', 'eql', 'foo')
-      *   does([1,2], 'include', 1, 2)
-      *
-      * External hooks are not run for internal assertions
-      * performed by does().
-      *
-      * @param  {mixed} actual
-      * @param  {string} matcher
-      * @param  {...} expected
-      * @return {mixed}
-      * @api private
-      */
-     
-     does : function(actual, matcher, expected) {
-       var assertion = new JSpec.Assertion(JSpec.matchers[matcher], actual, toArray(arguments, 2))
-       return assertion.run().result
-     },
-
-    /**
-     * Perform an assertion.
-     *
-     *   expect(true).to('be', true)
-     *   expect('foo').not_to('include', 'bar')
-     *   expect([1, [2]]).to('include', 1, [2])
-     *
-     * @param  {mixed} actual
-     * @return {hash}
-     * @api public
-     */
-
-    expect : function(actual) {
-      function assert(matcher, args, negate) {
-        var expected = toArray(args, 1)
-        matcher.negate = negate  
-        var assertion = new JSpec.Assertion(matcher, actual, expected, negate)
-        hook('beforeAssertion', assertion)
-        if (matcher.defer) assertion.run()
-        else JSpec.currentSpec.assertions.push(assertion.run().report()), hook('afterAssertion', assertion)
-        return assertion.result
-      }
-      
-      function to(matcher) {
-        return assert(matcher, arguments, false)
-      }
-      
-      function not_to(matcher) {
-        return assert(matcher, arguments, true)
-      }
-      
-      return {
-        to : to,
-        should : to,
-        not_to: not_to,
-        should_not : not_to
-      }
-    },
-
-    /**
-     * Strim whitespace or chars.
-     *
-     * @param  {string} string
-     * @param  {string} chars
-     * @return {string}
-     * @api public
-     */
-
-     strip : function(string, chars) {
-       return string.
-         replace(new RegExp('['  + (chars || '\\s') + ']*$'), '').
-         replace(new RegExp('^[' + (chars || '\\s') + ']*'),  '')
-     },
-     
-     /**
-      * Call an iterator callback with arguments a, or b
-      * depending on the arity of the callback.
-      *
-      * @param  {function} callback
-      * @param  {mixed} a
-      * @param  {mixed} b
-      * @return {mixed}
-      * @api private
-      */
-     
-     callIterator : function(callback, a, b) {
-       return callback.length == 1 ? callback(b) : callback(a, b)
-     },
-     
-     /**
-      * Extend an object with another.
-      *
-      * @param  {object} object
-      * @param  {object} other
-      * @api public
-      */
-     
-     extend : function(object, other) {
-       each(other, function(property, value){
-         object[property] = value
-       })
-     },
-     
-     /**
-      * Iterate an object, invoking the given callback.
-      *
-      * @param  {hash, array} object
-      * @param  {function} callback
-      * @return {JSpec}
-      * @api public
-      */
-
-     each : function(object, callback) {
-       if (object.constructor == Array)
-         for (var i = 0, len = object.length; i < len; ++i)
-           callIterator(callback, i, object[i])
-       else
-         for (var key in object) 
-           if (object.hasOwnProperty(key))
-             callIterator(callback, key, object[key])
-     },
-
-     /**
-      * Iterate with memo.
-      *
-      * @param  {hash, array} object
-      * @param  {object} memo
-      * @param  {function} callback
-      * @return {object}
-      * @api public
-      */
-
-     inject : function(object, memo, callback) {
-       each(object, function(key, value){
-         memo = (callback.length == 2 ?
-                   callback(memo, value):
-                     callback(memo, key, value)) ||
-                       memo
-       })
-       return memo
-     },
-     
-     /**
-      * Destub _object_'s _method_. When no _method_ is passed
-      * all stubbed methods are destubbed. When no arguments
-      * are passed every object found in JSpec.stubbed will be
-      * destubbed.
-      *
-      * @param  {mixed} object
-      * @param  {string} method
-      * @api public
-      */
-     
-     destub : function(object, method) {
-       var captures
-       if (method) {
-         if (object['__prototype__' + method])
-           delete object[method]
-         else
-           object[method] = object['__original__' + method]
-         delete object['__prototype__' + method]
-         delete object['__original____' + method]
-       }
-       else if (object) {
-         for (var key in object)
-           if (captures = key.match(/^(?:__prototype__|__original__)(.*)/))
-             destub(object, captures[1])
-       }
-       else
-         while (JSpec.stubbed.length)
-            destub(JSpec.stubbed.shift())
-     },
-     
-     /**
-      * Stub _object_'s _method_. 
-      *
-      * stub(foo, 'toString').and_return('bar')
-      *
-      * @param  {mixed} object
-      * @param  {string} method
-      * @return {hash}
-      * @api public
-      */
-     
-     stub : function(object, method) {
-       hook('stubbing', object, method)
-       JSpec.stubbed.push(object)
-       var type = object.hasOwnProperty(method) ? '__original__' : '__prototype__'
-       object[type + method] = object[method]
-       object[method] = function(){}
-       return {
-         and_return : function(value) {
-           if (typeof value == 'function') object[method] = value
-           else object[method] = function(){ return value }
-         }
-      }
-     },
-     
-    /**
-     * Map callback return values.
-     *
-     * @param  {hash, array} object
-     * @param  {function} callback
-     * @return {array}
-     * @api public
-     */
-
-    map : function(object, callback) {
-      return inject(object, [], function(memo, key, value){
-        memo.push(callIterator(callback, key, value))
-      })
-    },
-    
-    /**
-     * Returns the first matching expression or null.
-     *
-     * @param  {hash, array} object
-     * @param  {function} callback
-     * @return {mixed}
-     * @api public
-     */
-         
-    any : function(object, callback) {
-      return inject(object, null, function(state, key, value){
-        if (state == undefined)
-          return callIterator(callback, key, value) ? value : state
-      })
-    },
-    
-    /**
-     * Returns an array of values collected when the callback
-     * given evaluates to true.
-     *
-     * @param  {hash, array} object
-     * @return {function} callback
-     * @return {array}
-     * @api public
-     */
-    
-    select : function(object, callback) {
-      return inject(object, [], function(selected, key, value){
-        if (callIterator(callback, key, value))
-          selected.push(value)
-      })
-    },
-
-    /**
-     * Define matchers.
-     *
-     * @param  {hash} matchers
-     * @api public
-     */
-
-    addMatchers : function(matchers) {
-      each(matchers, function(name, body){
-        JSpec.addMatcher(name, body)  
-      })
-    },
-    
-    /**
-     * Define a matcher.
-     *
-     * @param  {string} name
-     * @param  {hash, function, string} body
-     * @api public
-     */
-    
-    addMatcher : function(name, body) {
-      hook('addingMatcher', name, body)
-      if (name.indexOf(' ') != -1) {
-        var matchers = name.split(/\s+/)
-        var prefix = matchers.shift()
-        each(matchers, function(name) {
-          JSpec.addMatcher(prefix + '_' + name, body(name))
-        })
-      }
-      this.matchers[name] = this.normalizeMatcherMessage(this.normalizeMatcherBody(body))
-      this.matchers[name].name = name
-    },
-    
-    /**
-     * Add a root suite to JSpec.
-     *
-     * @param  {string} description
-     * @param  {body} function
-     * @api public
-     */
-    
-    describe : function(description, body) {
-      var suite = new JSpec.Suite(description, body, false)
-      hook('addingSuite', suite)
-      this.allSuites.push(suite)
-      this.suites.push(suite)
-    },
-    
-    /**
-     * Add a shared example suite to JSpec.
-     *
-     * @param  {string} description
-     * @param  {body} function
-     * @api public
-     */
-    
-    shared_behaviors_for : function(description, body) {
-      var suite = new JSpec.Suite(description, body, true)
-      hook('addingSuite', suite)
-      this.allSuites.push(suite)
-      this.suites.push(suite)
-    },
-
-    /**
-     * Return the contents of a function body.
-     *
-     * @param  {function} body
-     * @return {string}
-     * @api public
-     */
-    
-    contentsOf : function(body) {
-      return body.toString().match(/^[^\{]*{((.*\n*)*)}/m)[1]
-    },
-
-    /**
-     * Evaluate a JSpec capture body.
-     *
-     * @param  {function} body
-     * @param  {string} errorMessage (optional)
-     * @return {Type}
-     * @api private
-     */
-
-    evalBody : function(body, errorMessage) {
-      var dsl = this.DSL || this.DSLs.snake
-      var matchers = this.matchers
-      var context = this.context || this.defaultContext
-      var contents = this.contentsOf(body)
-                       hook('evaluatingBody', dsl, matchers, context, contents)
-      with (dsl){ with (context) { with (matchers) { eval(contents) }}}
-    },
-
-    /**
-     * Pre-process a string of JSpec.
-     *
-     * @param  {string} input
-     * @return {string}
-     * @api private
-     */
-
-    preprocess : function(input) {
-      if (typeof input != 'string') return
-      input = hookImmutable('preprocessing', input)
-      return input.
-        replace(/\t/g, '  ').
-        replace(/\r\n|\n|\r/g, '\n').
-        split('__END__')[0].
-        replace(/([\w\.]+)\.(stub|destub)\((.*?)\)$/gm, '$2($1, $3)').
-        replace(/describe\s+(.*?)$/gm, 'describe($1, function(){').
-        replace(/shared_behaviors_for\s+(.*?)$/gm, 'shared_behaviors_for($1, function(){').
-        replace(/^\s+it\s+(.*?)$/gm, ' it($1, function(){').
-                               replace(/^ *(before_nested|after_nested|before_each|after_each|before|after)(?= |\n|$)/gm, 'JSpec.currentSuite.addHook("$1", function(){').
-        replace(/^\s*end(?=\s|$)/gm, '});').
-        replace(/-\{/g, 'function(){').
-        replace(/(\d+)\.\.(\d+)/g, function(_, a, b){ return range(a, b) }).
-        replace(/\.should([_\.]not)?[_\.](\w+)(?: |;|$)(.*)$/gm, '.should$1_$2($3)').
-        replace(/([\/\s]*)(.+?)\.(should(?:[_\.]not)?)[_\.](\w+)\((.*)\)\s*;?$/gm, '$1 expect($2).$3($4, $5)').
-        replace(/, \)/g, ')').
-        replace(/should\.not/g, 'should_not')
-    },
-
-    /**
-     * Create a range string which can be evaluated to a native array.
-     *
-     * @param  {int} start
-     * @param  {int} end
-     * @return {string}
-     * @api public
-     */
-
-    range : function(start, end) {
-      var current = parseInt(start), end = parseInt(end), values = [current]
-      if (end > current) while (++current <= end) values.push(current)
-      else               while (--current >= end) values.push(current)
-      return '[' + values + ']'
-    },
-
-    /**
-     * Report on the results. 
-     *
-     * @api public
-     */
-
-    report : function() {
-      this.duration = Number(new Date) - this.start
-      hook('reporting', JSpec.options)
-      new (JSpec.options.reporter || JSpec.reporters.DOM)(JSpec, JSpec.options)
-    },
-
-    /**
-     * Run the spec suites. Options are merged
-     * with JSpec options when present.
-     *
-     * @param  {hash} options
-     * @return {JSpec}
-     * @api public
-     */
-
-    run : function(options) {
-      if (any(hook('running'), haveStopped)) return this
-      if (options) extend(this.options, options)
-      this.start = Number(new Date)
-      each(this.suites, function(suite) { JSpec.runSuite(suite) })
-      return this
-    },
-    
-    /**
-     * Run a suite.
-     *
-     * @param  {Suite} suite
-     * @api public
-     */
-
-    runSuite : function(suite) {
-                       if (!suite.isShared())
-                       {
-             this.currentSuite = suite
-             this.evalBody(suite.body)
-             suite.ran = true
-             hook('beforeSuite', suite), suite.hook('before'), suite.hook('before_nested')
-             each(suite.specs, function(spec) {
-               hook('beforeSpec', spec)
-               suite.hook('before_each')
-               JSpec.runSpec(spec)
-               hook('afterSpec', spec)
-               suite.hook('after_each')
-             })
-             if (suite.hasSuites()) {
-               each(suite.suites, function(suite) {
-                 JSpec.runSuite(suite)
-               })
-             }
-             hook('afterSuite', suite), suite.hook('after_nested'), suite.hook('after')
-             this.stats.suitesFinished++
-                       }       
-               },
-         
-    /**
-     * Report a failure for the current spec.
-     *
-     * @param  {string} message
-     * @api public
-     */
-     
-     fail : function(message) {
-       JSpec.currentSpec.fail(message)
-     },
-     
-     /**
-      * Report a passing assertion for the current spec.
-      *
-      * @param  {string} message
-      * @api public
-      */
-      
-     pass : function(message) {
-       JSpec.currentSpec.pass(message)
-     },
-
-    /**
-     * Run a spec.
-     *
-     * @param  {Spec} spec
-     * @api public
-     */
-
-    runSpec : function(spec) {
-      this.currentSpec = spec
-      try { this.evalBody(spec.body) }
-      catch (e) { fail(e) }
-      spec.runDeferredAssertions()
-      destub()
-      this.stats.specsFinished++
-      this.stats.assertions += spec.assertions.length
-    },
-
-    /**
-     * Require a dependency, with optional message.
-     *
-     * @param  {string} dependency
-     * @param  {string} message (optional)
-     * @return {JSpec}
-     * @api public
-     */
-
-    requires : function(dependency, message) {
-      hook('requiring', dependency, message)
-      try { eval(dependency) }
-      catch (e) { throw 'JSpec depends on ' + dependency + ' ' + message }
-      return this
-    },
-
-    /**
-     * Query against the current query strings keys
-     * or the queryString specified.
-     *
-     * @param  {string} key
-     * @param  {string} queryString
-     * @return {string, null}
-     * @api private
-     */
-
-    query : function(key, queryString) {
-      var queryString = (queryString || (main.location ? main.location.search : null) || '').substring(1)
-      return inject(queryString.split('&'), null, function(value, pair){
-        parts = pair.split('=')
-        return parts[0] == key ? parts[1].replace(/%20|\+/gmi, ' ') : value
-      })
-    },
-
-    /**
-     * Ad-hoc POST request for JSpec server usage.
-     *
-     * @param  {string} uri
-     * @param  {string} data
-     * @api private
-     */
-    
-    post : function(uri, data) {
-      if (any(hook('posting', uri, data), haveStopped)) return
-      var request = this.xhr()
-      request.open('POST', uri, false)
-      request.setRequestHeader('Content-Type', 'application/json')
-      request.send(JSpec.JSON.encode(data))
-    },
-
-    /**
-     * Instantiate an XMLHttpRequest.
-     *
-     * Here we utilize IE's lame ActiveXObjects first which
-     * allow IE access serve files via the file: protocol, otherwise
-     * we then default to XMLHttpRequest.
-     *
-     * @return {XMLHttpRequest, ActiveXObject}
-     * @api private
-     */
-    
-    xhr : function() {
-      return this.ieXhr() || new JSpec.request
-    },
-    
-    /**
-     * Return Microsoft piece of crap ActiveXObject.
-     *
-     * @return {ActiveXObject}
-     * @api public
-     */
-    
-    ieXhr : function() {
-      function object(str) {
-        try { return new ActiveXObject(str) } catch(e) {}
-      }
-      return object('Msxml2.XMLHTTP.6.0') ||
-        object('Msxml2.XMLHTTP.3.0') ||
-        object('Msxml2.XMLHTTP') ||
-        object('Microsoft.XMLHTTP')
-    },
-    
-    /**
-     * Check for HTTP request support.
-     *
-     * @return {bool}
-     * @api private
-     */
-    
-    hasXhr : function() {
-      return JSpec.request || 'ActiveXObject' in main
-    },
-    
-    /**
-     * Try loading _file_ returning the contents
-     * string or null. Chain to locate / read a file.
-     *
-     * @param  {string} file
-     * @return {string}
-     * @api public
-     */
-    
-    tryLoading : function(file) {
-      try { return JSpec.load(file) } catch (e) {}
-    },
-
-    /**
-     * Load a _file_'s contents.
-     *
-     * @param  {string} file
-     * @param  {function} callback
-     * @return {string}
-     * @api public
-     */
-
-    load : function(file, callback) {
-      if (any(hook('loading', file), haveStopped)) return
-      if ('readFile' in main)
-        return readFile(file)
-      else if (this.hasXhr()) {
-        var request = this.xhr()
-        request.open('GET', file, false)
-        request.send(null)
-        if (request.readyState == 4 && 
-           (request.status == 0 || 
-            request.status.toString().charAt(0) == 2)) 
-          return request.responseText
-      }
-      else
-        throw new Error("failed to load `" + file + "'")
-    },
-
-    /**
-     * Load, pre-process, and evaluate a file.
-     *
-     * @param {string} file
-     * @param {JSpec}
-     * @api public
-     */
-
-    exec : function(file) {
-      if (any(hook('executing', file), haveStopped)) return this
-      eval('with (JSpec){' + this.preprocess(this.load(file)) + '}')
-      return this
-    }
-  }
-  
-  // --- Node.js support
-  
-  if (typeof GLOBAL === 'object' && typeof exports === 'object') {
-    var fs = require('fs')
-    quit = process.exit
-    print = require('sys').puts
-    readFile = function(file){
-      return fs.readFileSync(file).toString('utf8')
-    }
-  }
-  
-  // --- Utility functions
-
-  var main = this,
-      find = JSpec.any,
-      utils = 'haveStopped stub hookImmutable hook destub map any last pass fail range each option inject select \
-               error escape extend puts query strip color does addMatchers callIterator toArray equal'.split(/\s+/)
-  while (utils.length) eval('var ' + utils[0] + ' = JSpec.' + utils.shift())
-  if (!main.setTimeout) main.setTimeout = function(callback){ callback() }
-
-  // --- Matchers
-
-  addMatchers({
-    equal              : "===",
-    eql                : "equal(actual, expected)",
-    be                 : "alias equal",
-    be_greater_than    : ">",
-    be_less_than       : "<",
-    be_at_least        : ">=",
-    be_at_most         : "<=",
-    be_a               : "actual.constructor == expected",
-    be_an              : "alias be_a",
-    be_an_instance_of  : "actual instanceof expected",
-    be_null            : "actual == null",
-    be_true            : "actual == true",
-    be_false           : "actual == false",
-    be_undefined       : "typeof actual == 'undefined'",
-    be_type            : "typeof actual == expected",
-    match              : "typeof actual == 'string' ? actual.match(expected) : false",
-    respond_to         : "typeof actual[expected] == 'function'",
-    have_length        : "actual.length == expected",
-    be_within          : "actual >= expected[0] && actual <= last(expected)",
-    have_length_within : "actual.length >= expected[0] && actual.length <= last(expected)",
-    
-    receive : { defer : true, match : function(actual, method, times) {
-      var proxy = new JSpec.ProxyAssertion(actual, method, times, this.negate)
-      JSpec.currentSpec.assertions.push(proxy)
-      return proxy
-    }},
-    
-    be_empty : function(actual) {
-      if (actual.constructor == Object && actual.length == undefined)
-        for (var key in actual)
-          return false;
-      return !actual.length
-    },
-
-    include : function(actual) {
-      for (var state = true, i = 1; i < arguments.length; i++) {
-        var arg = arguments[i]
-        switch (actual.constructor) {
-          case String: 
-          case Number:
-          case RegExp:
-          case Function:
-            state = actual.toString().indexOf(arg) !== -1
-            break
-         
-          case Object:
-            state = arg in actual
-            break
-          
-          case Array: 
-            state = any(actual, function(value){ return equal(value, arg) })
-            break
-        }
-        if (!state) return false
-      }
-      return true
-    },
-
-    throw_error : { match : function(actual, expected, message) {
-      try { actual() }
-      catch (e) {
-        this.e = e
-        var assert = function(arg) {
-          switch (arg.constructor) {
-            case RegExp   : return arg.test(e.message || e.toString())
-            case String   : return arg == (e.message || e.toString())
-            case Function : return e instanceof arg || e.name == arg.name
-          }
-        }
-        return message ? assert(expected) && assert(message) :
-                 expected ? assert(expected) :
-                   true
-      }
-    }, message : function(actual, expected, negate) {
-      // TODO: refactor when actual is not in expected [0]
-      var message_for = function(i) {
-        if (expected[i] == undefined) return 'exception'
-        switch (expected[i].constructor) {
-          case RegExp   : return 'exception matching ' + puts(expected[i])
-          case String   : return 'exception of ' + puts(expected[i])
-          case Function : return expected[i].name || 'Error'
-        }
-      }
-      var exception = message_for(1) + (expected[2] ? ' and ' + message_for(2) : '')
-      return 'expected ' + exception + (negate ? ' not ' : '' ) +
-               ' to be thrown, but ' + (this.e ? 'got ' + puts(this.e) : 'nothing was')
-    }},
-    
-    have : function(actual, length, property) {
-      return actual[property] == null ? false : actual[property].length == length
-    },
-    
-    have_at_least : function(actual, length, property) {
-      return actual[property] == null ? (length === 0) : actual[property].length >= length
-    },
-    
-    have_at_most :function(actual, length, property) {
-      return actual[property] == null || actual[property].length <= length
-    },
-    
-    have_within : function(actual, range, property) {
-      var length = actual[property] == undefined ? 0 : actual[property].length
-      return length >= range.shift() && length <= range.pop()
-    },
-    
-    have_prop : function(actual, property, value) {
-      var actualVal = actual[property], actualType = typeof actualVal
-      return (actualType == 'function' || actualType == 'undefined') ? false :
-        typeof value === 'undefined' ||
-        does(actual[property],'eql',value)
-    },
-    
-    have_property : function(actual, property, value) {
-      var actualVal = actual[property], actualType = typeof actualVal
-      return (actualType == 'function' || actualType == 'undefined') ? false :
-        typeof value === 'undefined' ||
-        value === actualVal
-    }
-  })
-  
-})()
diff --git a/node/node_modules/jade/support/sass/spec/lib/jspec.nodejs.js b/node/node_modules/jade/support/sass/spec/lib/jspec.nodejs.js
deleted file mode 100644 (file)
index 6765273..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// JSpec - node - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
-
-JSpec
-.include({
-  name: 'node',
-  
-  // --- Matchers
-  
-  matchers : {
-    have_enumerable_property: 'actual.propertyIsEnumerable(expected)',
-    have_writable_property: 'Object.getOwnPropertyDescriptor(actual, expected).writable === true',
-    have_configurable_property: 'Object.getOwnPropertyDescriptor(actual, expected).configurable === true',
-    have_keys: 'does(Object.keys(actual), "eql", expected)',
-    have_prototype: 'Object.getPrototypeOf(actual) === expected'
-  }
-})
-
diff --git a/node/node_modules/jade/support/sass/spec/lib/jspec.shell.js b/node/node_modules/jade/support/sass/spec/lib/jspec.shell.js
deleted file mode 100644 (file)
index cb19c69..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-// JSpec - Shell - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
-
-;(function(){
-  
-  var _quit = quit
-  
-  Shell = {
-    
-    // --- Global
-    
-    main: this,
-    
-    // --- Commands
-    
-    commands: {
-      quit: ['Terminate the shell', function(){ _quit() }],
-      exit: ['Terminate the shell', function(){ _quit() }],
-      p: ['Inspect an object', function(o){ return o.toSource() }]
-    },
-    
-    /**
-     * Start the interactive shell.
-     *
-     * @api public
-     */
-    
-    start : function() {
-      for (var name in this.commands)
-        if (this.commands.hasOwnProperty(name))
-          this.commands[name][1].length ?
-            this.main[name] = this.commands[name][1] :
-              this.main.__defineGetter__(name, this.commands[name][1])
-    }
-  }
-  
-  Shell.start()
-  
-})()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/lib/jspec.timers.js b/node/node_modules/jade/support/sass/spec/lib/jspec.timers.js
deleted file mode 100644 (file)
index c88d10b..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-
-// JSpec - Mock Timers - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
-
-;(function(){
-  
-  /**
-   * Version.
-   */
-   
-  mockTimersVersion = '1.0.2'
-  
-  /**
-   * Localized timer stack.
-   */
-  
-  var timers = []
-  
-  /**
-   * Set mock timeout with _callback_ and timeout of _ms_.
-   *
-   * @param  {function} callback
-   * @param  {int} ms
-   * @return {int}
-   * @api public
-   */
-  
-  setTimeout = function(callback, ms) {
-    var id
-       return id = setInterval(function(){
-         callback()
-         clearInterval(id)
-       }, ms)
-  }
-  
-  /**
-   * Set mock interval with _callback_ and interval of _ms_.
-   *
-   * @param  {function} callback
-   * @param  {int} ms
-   * @return {int}
-   * @api public
-   */
-
-  setInterval = function(callback, ms) {
-    callback.step = ms, callback.current = callback.last = 0
-    return timers[timers.length] = callback, timers.length
-  }
-  
-  /**
-   * Destroy timer with _id_.
-   *
-   * @param  {int} id
-   * @return {bool}
-   * @api public
-   */
-
-  clearInterval = clearTimeout = function(id) {
-    return delete timers[--id]
-  }
-  
-  /**
-   * Reset timers.
-   *
-   * @return {array}
-   * @api public
-   */
-  
-  resetTimers = function() {
-    return timers = []
-  }
-  
-  /**
-   * Increment each timers internal clock by _ms_.
-   *
-   * @param  {int} ms
-   * @api public
-   */
-  
-  tick = function(ms) {
-    for (var i = 0, len = timers.length; i < len; ++i)
-      if (timers[i] && (timers[i].current += ms))
-        if (timers[i].current - timers[i].last >= timers[i].step) {
-          var times = Math.floor((timers[i].current - timers[i].last) / timers[i].step)
-          var remainder = (timers[i].current - timers[i].last) % timers[i].step
-          timers[i].last = timers[i].current - remainder
-          while (times-- && timers[i]) timers[i]()
-        }
-  }
-  
-})()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/sass/spec/lib/jspec.xhr.js b/node/node_modules/jade/support/sass/spec/lib/jspec.xhr.js
deleted file mode 100644 (file)
index 3b96310..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-
-// JSpec - XHR - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
-
-(function(){
-
-  var lastRequest
-
-  // --- Original XMLHttpRequest
-
-  var OriginalXMLHttpRequest = 'XMLHttpRequest' in this ?
-                                 XMLHttpRequest :
-                                   function(){}
-  var OriginalActiveXObject = 'ActiveXObject' in this ?
-                                 ActiveXObject :
-                                   undefined
-
-  // --- MockXMLHttpRequest
-
-  var MockXMLHttpRequest = function() {
-    this.requestHeaders = {}
-  }
-
-  MockXMLHttpRequest.prototype = {
-    status: 0,
-    async: true,
-    readyState: 0,
-         responseXML: null,
-    responseText: '',
-    abort: function(){},
-    onreadystatechange: function(){},
-
-   /**
-    * Return response headers hash.
-    */
-
-    getAllResponseHeaders : function(){
-      return JSpec.inject(this.responseHeaders, '', function(buf, key, val){
-        return buf + key + ': ' + val + '\r\n'
-      })
-    },
-
-    /**
-     * Return case-insensitive value for header _name_.
-     */
-
-    getResponseHeader : function(name) {
-      return this.responseHeaders[name.toLowerCase()]
-    },
-
-    /**
-     * Set case-insensitive _value_ for header _name_.
-     */
-
-    setRequestHeader : function(name, value) {
-      this.requestHeaders[name.toLowerCase()] = value
-    },
-
-    /**
-     * Open mock request.
-     */
-
-    open : function(method, url, async, user, password) {
-      this.user = user
-      this.password = password
-      this.url = url
-      this.readyState = 1
-      this.method = method.toUpperCase()
-      if (async != undefined) this.async = async
-      if (this.async) this.onreadystatechange()
-    },
-
-    /**
-     * Send request _data_.
-     */
-
-    send : function(data) {
-      var self = this
-      this.data = data
-      this.readyState = 4
-      if (this.method == 'HEAD') this.responseText = null
-      this.responseHeaders['content-length'] = (this.responseText || '').length
-      if(this.async) this.onreadystatechange()
-           this.populateResponseXML()
-      lastRequest = function(){
-        return self
-      }
-    },
-
-       /**
-        * Parse request body and populate responseXML if response-type is xml
-        * Based on the standard specification : http://www.w3.org/TR/XMLHttpRequest/
-        */
-       populateResponseXML: function() {
-               var type = this.getResponseHeader("content-type")
-               if (!type || !this.responseText || !type.match(/(text\/xml|application\/xml|\+xml$)/g))
-                       return
-               this.responseXML = JSpec.parseXML(this.responseText)
-         }
-  }
-
-  // --- Response status codes
-
-  JSpec.statusCodes = {
-    100: 'Continue',
-    101: 'Switching Protocols',
-    200: 'OK',
-    201: 'Created',
-    202: 'Accepted',
-    203: 'Non-Authoritative Information',
-    204: 'No Content',
-    205: 'Reset Content',
-    206: 'Partial Content',
-    300: 'Multiple Choice',
-    301: 'Moved Permanently',
-    302: 'Found',
-    303: 'See Other',
-    304: 'Not Modified',
-    305: 'Use Proxy',
-    307: 'Temporary Redirect',
-    400: 'Bad Request',
-    401: 'Unauthorized',
-    402: 'Payment Required',
-    403: 'Forbidden',
-    404: 'Not Found',
-    405: 'Method Not Allowed',
-    406: 'Not Acceptable',
-    407: 'Proxy Authentication Required',
-    408: 'Request Timeout',
-    409: 'Conflict',
-    410: 'Gone',
-    411: 'Length Required',
-    412: 'Precondition Failed',
-    413: 'Request Entity Too Large',
-    414: 'Request-URI Too Long',
-    415: 'Unsupported Media Type',
-    416: 'Requested Range Not Satisfiable',
-    417: 'Expectation Failed',
-    422: 'Unprocessable Entity',
-    500: 'Internal Server Error',
-    501: 'Not Implemented',
-    502: 'Bad Gateway',
-    503: 'Service Unavailable',
-    504: 'Gateway Timeout',
-    505: 'HTTP Version Not Supported'
-  }
-
-  /**
-   * Mock XMLHttpRequest requests.
-   *
-   *   mockRequest().and_return('some data', 'text/plain', 200, { 'X-SomeHeader' : 'somevalue' })
-   *
-   * @return {hash}
-   * @api public
-   */
-
-  function mockRequest() {
-    return { and_return : function(body, type, status, headers) {
-      XMLHttpRequest = MockXMLHttpRequest
-      ActiveXObject = false
-      status = status || 200
-      headers = headers || {}
-      headers['content-type'] = type
-      JSpec.extend(XMLHttpRequest.prototype, {
-        responseText: body,
-        responseHeaders: headers,
-        status: status,
-        statusText: JSpec.statusCodes[status]
-      })
-    }}
-  }
-
-  /**
-   * Unmock XMLHttpRequest requests.
-   *
-   * @api public
-   */
-
-  function unmockRequest() {
-    XMLHttpRequest = OriginalXMLHttpRequest
-    ActiveXObject = OriginalActiveXObject
-  }
-
-  JSpec.include({
-    name: 'Mock XHR',
-
-    // --- Utilities
-
-    utilities : {
-      mockRequest: mockRequest,
-      unmockRequest: unmockRequest
-    },
-
-    // --- Hooks
-
-    afterSpec : function() {
-      unmockRequest()
-    },
-
-    // --- DSLs
-
-    DSLs : {
-      snake : {
-        mock_request: mockRequest,
-        unmock_request: unmockRequest,
-        last_request: function(){ return lastRequest() }
-      }
-    }
-
-  })
-})()
diff --git a/node/node_modules/jade/support/sass/spec/node.js b/node/node_modules/jade/support/sass/spec/node.js
deleted file mode 100644 (file)
index 07d9934..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-require.paths.unshift('spec', 'spec/lib', 'lib')
-require('jspec')
-sass = require('sass')
-
-JSpec
-  .exec('spec/spec.core.js')
-  .run({ reporter: JSpec.reporters.Terminal, fixturePath: 'spec/fixtures', failuresOnly: true })
-  .report()
diff --git a/node/node_modules/jade/support/sass/spec/spec.core.js b/node/node_modules/jade/support/sass/spec/spec.core.js
deleted file mode 100644 (file)
index 5ee3cb7..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-
-describe 'Sass'
-  before
-    render = function(path, options) {
-      return sass.render(fixture(path + '.sass'), options)
-    }
-    
-    expected = function(path) {
-      return fixture(path + '.css')
-    }
-    
-    assert = function(path, options) {
-      render(path, options).should.eql expected(path)
-    }
-  end
-  
-  describe '.version'
-    it 'should be a triplet'
-      sass.version.should.match(/^\d+\.\d+\.\d+$/)
-    end
-  end
-  
-  describe '.render()'
-    describe 'with "cache" enabled'
-      describe 'without "filename"'
-        it 'should throw an error'
-          -{ assert('selectors', { cache: true }) }.should.throw_error 'filename option must be passed when cache is enabled'
-        end
-      end
-      
-      describe 'with "filename"'
-        it 'should still work'
-          assert('selectors', { cache: true, filename: 'style.sass' })
-        end
-      end
-    end
-  
-    it 'should support complex selectors'
-      assert('selectors')
-    end
-    
-    describe '// ...'
-      it 'should be a sass-specific comment'
-        assert('comment')
-      end
-    end
-    
-    describe '& ...'
-      it 'should continue a selector'
-        assert('continuation')
-      end
-    end
-  
-    describe '{...}'
-      it 'should have access to variables'
-        assert('literal')
-      end
-    end
-    
-    describe ':key val'
-      it 'should define a property'
-        assert('properties')
-      end
-      
-      describe 'when nested'
-        it 'should traverse correctly'
-          assert('properties.nested')
-        end
-        
-        describe 'incorrectly'
-          it 'should throw an error'
-            try { assert('properties.nested.invalid') }
-            catch (e) {
-              e.message.should.eql 'ParseError: on line 3; invalid indentation, to much nesting'
-            }
-          end
-        end
-      end
-      
-      describe 'when at the top level'
-        it 'should throw an error'
-          try { assert('properties.invalid') }
-          catch (e) {
-            e.message.should.eql 'ParseError: on line 1; properties must be nested within a selector'
-          }
-        end
-      end
-    end
-    
-    describe '=:key val'
-      it 'should expand to -{moz, webkit}-border-radius'
-        assert('properties.expand')
-      end
-    end
-    
-    describe '!key = val'
-      it 'should define a variable'
-        assert('variables.regular')
-      end
-    end
-    
-    describe 'key: val'
-      it 'should define a variable'
-        assert('variables.alternate')
-      end
-    end
-  end
-  
-  describe '+mixin'
-    it 'should create a mixin'
-      assert('mixin')
-    end
-    
-    describe 'when the mixin does not exist'
-      try { assert('mixin.undefined') }
-      catch (e) {
-        e.message.should.eql 'ParseError: on line 2; mixin `large\' does not exist'
-      }
-    end
-  end
-  
-  describe '.collect()'
-    it 'should return variables defined'
-      var collected = sass.collect(fixture('collect.sass'))
-      collected.variables.should.eql { red: '#ff0000', black: '#000' }
-    end
-    
-    it 'should return mixins defined'
-      var collected = sass.collect(fixture('mixin.sass'))
-      collected.mixins.should.have_property 'large'
-      collected.mixins.should.have_property 'striped'
-    end
-  end
-end
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/.gitignore b/node/node_modules/jade/support/stylus/.gitignore
deleted file mode 100644 (file)
index 4be0b32..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-css
-lib-cov
-testing
-.DS_Store
diff --git a/node/node_modules/jade/support/stylus/.gitmodules b/node/node_modules/jade/support/stylus/.gitmodules
deleted file mode 100644 (file)
index 01e2298..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "support/should"]
-       path = support/should
-       url = git://github.com/visionmedia/should.js.git
diff --git a/node/node_modules/jade/support/stylus/.npmignore b/node/node_modules/jade/support/stylus/.npmignore
deleted file mode 100644 (file)
index 2ce29aa..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-test
-support
-testing
-docs
-examples
diff --git a/node/node_modules/jade/support/stylus/History.md b/node/node_modules/jade/support/stylus/History.md
deleted file mode 100644 (file)
index 3c186ae..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-
-0.9.2 / 2011-03-21 
-==================
-
-  * Removed a `console.log()` call
-
-0.9.1 / 2011-03-18 
-==================
-
-  * Fixed connect middleware `@import` support. Closes #168
-    The middleware is now smart enough to know when imports
-    change, and will re-compile the target file.
-
-  * Changed middleware `compile` function to return the `Renderer` (API change)
-
-0.9.0 / 2011-03-18 
-==================
-
-  * Added `-i, --interactive` for the Stylus REPL (eval stylus expressions, tab-completion etc)
-  * Added link to vim syntax
-  * Changed `p()` built-in to display parens
-  * Changed `--compress -C` to `-c`, and `-css -c` is now `-C`
-  * Fixed; preserve rest-arg expressions. Closes #194
-  * Fixed `*=` in selector, ex `[class*="foo"]`
-  * Fixed `--watch` issue with growl, updated to 1.1.0. Closes #188
-  * Fixed negative floats when compressed. Closes #193 [reported by ludicco]
-
-0.8.0 / 2011-03-14 
-==================
-
-  * Added postfix `for`-loop support.
-    Ex: `return n if n % 2 == 0 for n in nums` 
-  * Added support for several postfix operators
-    Ex: `border-radius: 5px if true unless false;`
-  * Added `last(expr)` built-in function
-  * Added `sum(nums)` built-in function
-  * Added `avg(nums)` built-in function
-  * Added `join(delim, vals)` built-in function
-  * Added `Evaluator#{currentScope,currentBlock}`
-  * Added multi-line function paramter definition support
-  * Changed; `0` is falsey, `0%`, `0em`, `0px` etc truthy. Closes #160
-  * Fixed `for` implicit __return__ value
-  * Fixed `for` explicit __return__ value
-  * Fixed mixin property ordering
-
-0.7.4 / 2011-03-10 
-==================
-
-  * Added `RGBA` node
-  * Added `is a "color"` special-case, true for `HSLA` and `RGBA` nodes.
-Closes #180
-  * Performance; 2.5x faster compiles due to removing use of getters in `Parser` and `Lexer` (yes, they are really slow).
-  * Removed `Color` node
-  * Fixed stylus(1) `--watch` support due to dynamic __@import__ support. Closes #176
-
-0.7.3 / 2011-03-09 
-==================
-
-  * Fixed; allow semi-colons for non-css syntax for one-liners
-
-0.7.2 / 2011-03-08 
-==================
-
-  * Added `isnt` operator, same as `is not`, and `!=`
-  * Added support for dynamic `@import` expressions
-  * Added `@import` index resolution support
-  * Added `light()` / `dark()` BIFs
-  * Added `compress` option for connect middleware [disfated]
-  * Changed; most built-in functions defined in stylus (`./lib/functions/index.styl`)
-  * Fixed dynamic expressions in `url()`. Closes #105
-
-0.7.1 / 2011-03-07 
-==================
-
-  * Fixed connect middleware for 0.4.x
-
-0.7.0 / 2011-03-02 
-==================
-
-  * Added `is` and `is not` aliases for `==` and `!=`
-  * Added __@keyframes__ dynamic name support
-  * Fixed units in interpolation
-  * Fixed clamping of HSLA degrees / percentages
-
-0.6.7 / 2011-03-01 
-==================
-
-  * Fixed __RGBA__ -> __HSLA__ conversion due to typo
-
-0.6.6 / 2011-03-01 
-==================
-
-  * Added string -> unit type coercion support aka `5px + "10"` will give `15px`
-  * Added `warn` option Closes #152
-    Currently this only reports on re-definition of functions
-  * Added '$' as a valid identifier character
-  * Added `mixin` local variable for function introspection capabilities. Closes #162
-  * Fixed typo, `Unit#toBoolean()` is now correct
-  * Fixed interpolation function calls. Closes #156
-  * Fixed mixins within Media node. Closes #153
-  * Fixed function call in ret val. Closes #154
-
-0.6.5 / 2011-02-24 
-==================
-
-  * Fixed parent ref `&` mid-selector bug. Closes #148 [reported by visnu]
-
-0.6.4 / 2011-02-24 
-==================
-
-  * Fixed for within brackets. Closes #146
-
-0.6.3 / 2011-02-22 
-==================
-
-  * Fixed single-ident selectors. Closes #142
-  * Fixed cyclic __@import__ with file of the same name. Closes #143
-
-0.6.2 / 2011-02-21 
-==================
-
-  * Added stylus(1) growl support when using `--watch`
-  * Added __@import__ watching support to stylus(1). Closes #134
-  * Changed; stylus(1) only throws when `--watch` is not used
-  * Fixed `darken-by()` BIF
-  * Fixed __@import__ literal semi-colon. Closes #140
-
-0.6.1 / 2011-02-18 
-==================
-
-  * Fixed evaluation of nodes after a return. Closes #139
-
-0.6.0 / 2011-02-18 
-==================
-
-  * Added `stylus(1)` direct css to stylus file conversion [Mario]
-    For example instead of `$ stylus --css < foo.css > foo.styl`
-    you may now either `$ stylus --css foo.css` or provide
-    a destination path `$ stylus --css foo.css /tmp/out.styl`.
-
-  * Added postfix conditionals. Closes #74
-    Expressive ruby-ish syntax, ex: `padding 5px if allow-padding`.
-
-0.5.3 / 2011-02-17 
-==================
-
-  * Added `in` operator. `3 in nums`, `padding in props` etc
-  * Added `Expression#hash`, hashing all of the nodes in order
-  * Added tests for conditionals with braces. Closes #136
-  * Fixed ids that are also valid colors. Closes #137
-
-0.5.2 / 2011-02-15 
-==================
-
-  * Fixed spaces after "}" with css-style. Closes #131
-  * Fixed single-line css-style support. Closes #130
-
-0.5.1 / 2011-02-11 
-==================
-
-  * Fixed mixin property ordering. Closes #125
-
-0.5.0 / 2011-02-09 
-==================
-
-  * Added `lighten-by()` BIF
-  * Added `darken-by()` BIF
-
-0.4.1 / 2011-02-09 
-==================
-
-  * Added support for function definition braces
-  * Fixed issue with invalid color output. Closes #127
-
-0.4.0 / 2011-02-07 
-==================
-
-  * Added css-style syntax support
-  * Fixed support for `*` selector within __@media__ blocks
-
-0.3.1 / 2011-02-04 
-==================
-
-  * Fixed property disambiguation logic. Closes #117
-    You no longer need to add a trailing comma when
-    chaining selectors such as 'td:nth-child(2)\ntd:nth-child(3)'
-
-0.3.0 / 2011-02-04 
-==================
-
-  * Added more assignment operators. Closes #77
-    +=, -=, *=, /=, and %=
-
-0.2.1 / 2011-02-02 
-==================
-
-  * Fixed `--compress` when passing files for stylus(1). Closes #115
-  * Fixed bug preventing absolute paths from being passed to `@import`
-  * Fixed `opposite-position()` with nested expressions, unwrapping
-  * Fixed a couple global var leaks [aheckmann]
-
-0.2.0 / 2011-02-01 
-==================
-
-  * Added; `url()` utilizing general lookup paths.
-    This means that `{ paths: [] }` is optional now, as lookups
-    will be relative to the file being rendered by default.
-
-  * Added `-w, --watch` support to stylus(1). Closes #113
-
-0.1.0 / 2011-02-01 
-==================
-
-  * Added `opposite-position(positions)` built-in function
-  * Added `image-lookup(path)` built-in function
-  * Added `-o, --out <dir>` support to stylus(1)
-  * Added `stylus [file|dir ...]` support
-  * Added; defaulting paths to `[CWD]` for stylus(1)
-  * Changed; `unquote()` using `Literal` node
-  * Changed; utilizing `Literal` in place of some `Ident`s
-
-0.0.2 / 2011-01-31 
-==================
-
-  * Added optional property colon support. Closes #110
-  * Added `--version` to stylus(1) 
-
-0.0.1 / 2011-01-31 
-==================
-
-  * Initial release
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/LICENSE b/node/node_modules/jade/support/stylus/LICENSE
deleted file mode 100644 (file)
index a206b68..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-(The MIT License)
-
-Copyright (c) 2010 LearnBoost <dev@learnboost.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.
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/Makefile b/node/node_modules/jade/support/stylus/Makefile
deleted file mode 100644 (file)
index 40a5dc8..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-SRC = $(shell find lib -name "*.js")
-TM_BUNDLE = editors/Stylus.tmbundle
-TM_BUNDLE_DEST = ~/Library/Application\ Support/TextMate/Bundles
-
-test: test-integration
-
-test-integration:
-       @node test/run.js
-
-install-bundle:
-       cp -fr $(TM_BUNDLE) $(TM_BUNDLE_DEST)
-
-update-bundle:
-       cp -fr $(TM_BUNDLE_DEST)/Stylus.tmbundle editors
-
-benchmark:
-       @node bm.js
-
-.PHONY: test test-integration install-bundle update-bundle benchmark
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/Readme.md b/node/node_modules/jade/support/stylus/Readme.md
deleted file mode 100644 (file)
index d2e57a9..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-
-# Stylus
-
- Stylus is a revolutionary new language, providing an efficient, dynamic, and expressive way to generate CSS.
-
-## Installation
-
-    $ npm install stylus
-
-### Example
-
-    border-radius()
-      -webkit-border-radius arguments
-      -moz-border-radius arguments
-      border-radius arguments
-
-    body a
-      font 12px/1.4 "Lucida Grande", Arial, sans-serif
-      background black
-      color #ccc
-
-    form input
-      padding 5px
-      border 1px solid
-      border-radius 5px
-
-compiles to:
-
-    body a {
-      font: 12px/1.4 "Lucida Grande", Arial, sans-serif;
-      background: #000;
-      color: #ccc;
-    }
-    form input {
-      padding: 5px;
-      border: 1px solid;
-      -webkit-border-radius: 5px;
-      -moz-border-radius: 5px;
-      border-radius: 5px;
-    }
-
-### Features
-
- Stylus has _many_ features, click the links below for detailed documentation.
-
-  - [css syntax](stylus/blob/master/docs/css-style.md) support
-  - [mixins](stylus/blob/master/docs/mixins.md)
-  - [variables](stylus/blob/master/docs/variables.md)
-  - [interpolation](stylus/blob/master/docs/interpolation.md)
-  - arithmetic, logical, and equality [operators](stylus/blob/master/docs/operators.md)
-  - [importing](stylus/blob/master/docs/import.md) of other stylus sheets
-  - [introspection api](stylus/blob/master/docs/introspection.md)
-  - type coercion
-  - [conditionals](stylus/blob/master/docs/conditionals.md)
-  - [iteration](stylus/blob/master/docs/iteration.md)
-  - nested [selectors](stylus/blob/master/docs/selectors.md)
-  - parent reference
-  - in-language [functions](stylus/blob/master/docs/functions.md)
-  - [variable arguments](stylus/blob/master/docs/vargs.md)
-  - built-in [functions](stylus/blob/master/docs/bifs.md) (over 25)
-  - optional [image inlining](stylus/blob/master/docs/functions.url.md)
-  - optional compression
-  - JavaScript [API](stylus/blob/master/docs/js.md)
-  - extremely terse syntax
-  - stylus [executable](stylus/blob/master/docs/executable.md)
-  - [error reporting](stylus/blob/master/docs/error-reporting.md)
-  - single-line and multi-line [comments](stylus/blob/master/docs/comments.md)
-  - css [literal](stylus/blob/master/docs/literal.md)
-  - character [escaping](stylus/blob/master/docs/escape.md)
-  - [@keyframes](stylus/blob/master/docs/keyframes.md) support
-  - [@font-face](stylus/blob/master/docs/font-face.md) support
-  - [@media](stylus/blob/master/docs/media.md) support
-  - Connect [Middleware](stylus/blob/master/docs/middleware.md)
-  - TextMate [bundle](stylus/blob/master/docs/textmates.md)
-  - VIM [Syntax](https://github.com/wavded/vim-stylus)
-
-### Framework Support
-
-   - [Connect](stylus/blob/master/docs/middleware.md)
-   - [Ruby On Rails](https://github.com/lucasmazza/stylus_rails)
-
-### Screencasts
-
-  - [Stylus Intro](http://screenr.com/bNY)
-  - [CSS Syntax & Postfix Conditionals](http://screenr.com/A8v)
-
-### Authors
-
-  - [TJ Holowaychuk (visionmedia)](http://github.com/visionmedia)
-
-### More Information
-
-  - Language [comparisons](stylus/blob/master/docs/compare.md)
-
-## License 
-
-(The MIT License)
-
-Copyright (c) 2010 LearnBoost &lt;dev@learnboost.com&gt;
-
-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.
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/bin/stylus b/node/node_modules/jade/support/stylus/bin/stylus
deleted file mode 100755 (executable)
index f9a5008..0000000
+++ /dev/null
@@ -1,456 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * Module dependencies.
- */
-
-var fs = require('fs')
-  , stylus = require('../')
-  , basename = require('path').basename
-  , dirname = require('path').dirname
-  , join = require('path').join
-  , growl = require('growl');
-
-/**
- * Arguments.
- */
-
-var args = process.argv.slice(2);
-
-/**
- * Compare flag.
- */
-
-var compare = false;
-
-/**
- * Compress flag.
- */
-
-var compress = false;
-
-/**
- * CSS conversion flag.
- */
-
-var convertCSS = false;
-
-/**
- * Files to processes.
- */
-
-var files = [];
-
-/**
- * Destination directory.
- */
-
-var dest;
-
-/**
- * Watcher hash.
- */
-
-var watchers;
-
-/**
- * Enable REPL.
- */
-
-var interactive;
-
-/**
- * Usage docs.
- */
-
-var usage = [
-    ''
-  , '  Usage: stylus [options] [command] [< in [> out]]'
-  , '                [file|dir ...]'
-  , ''
-  , '  Commands:'
-  , ''
-  , '    help <prop>     Opens help info for <prop> in'
-  , '                    your default browser. (osx only)'
-  , ''
-  , '  Options:'
-  , ''
-  , '    -i, --interactive       Start interactive REPL'
-  , '    -w, --watch             Watch file(s) for changes and re-compile'
-  , '    -o, --out <dir>         Output to <dir> when passing files'
-  , '    -C, --css <src> [dest]  Convert css input to stylus'
-  , '    -c, --compress          Compress css output'
-  , '    -d, --compare           Display input along with output'
-  , '    -V, --version           Display the version of stylus'
-  , '    -h, --help              Display help information'
-  , ''
-].join('\n');
-
-/**
- * Handle arguments.
- */
-
-var arg;
-while (args.length) {
-  arg = args.shift();
-  switch (arg) {
-    case '-h':
-    case '--help':
-      console.log(usage);
-      process.exit(1);
-    case '-d':
-    case '--compare':
-      compare = true;
-      break;
-    case '-c':
-    case '--compress':
-      compress = true;
-      break;
-    case '-C':
-    case '--css':
-      convertCSS = true;
-      break;
-    case '-V':
-    case '--version':
-      console.log(stylus.version);
-      process.exit(0);
-      break;
-    case '-o':
-    case '--out':
-      dest = args.shift();
-      if (!dest) throw new Error('--out <dir> required');
-      break;
-    case 'help':
-      var name = args.shift();
-      if (!name) throw new Error('help <property> required');
-      help(name);
-      break;
-    case '-i':
-    case '--repl':
-    case '--interactive':
-      interactive = true;
-      break;
-    case '-w':
-    case '--watch':
-      watchers = {};
-      break;
-    default:
-      files.push(arg);
-  }
-}
-
-// if --watch is used, assume we are
-// not working with stdio
-
-if (watchers && !files.length) {
-  files = fs.readdirSync(process.cwd())
-    .filter(function(file){
-    return file.match(/\.styl$/);
-  });
-}
-
-/**
- * Open the default browser to the CSS property `name`.
- *
- * @param {String} name
- */
-
-function help(name) {
-  var url = 'https://developer.mozilla.org/en/CSS/' + name
-    , exec = require('child_process').exec;
-  exec('open "' + url + '"', function(){
-    process.exit(0);
-  });
-}
-
-// Compilation options
-
-var options = {
-    filename: 'stdin'
-  , compress: compress
-  , paths: [process.cwd()]
-};
-
-// Buffer stdin
-
-var str = '';
-
-// Convert css to stylus
-
-if (convertCSS) {  
-       switch (files.length) {
-    case 2:
-      compileCSSFile(files[0], files[1]);   
-      break;
-    case 1:
-      compileCSSFile(files[0], files[0].replace('.css', '.styl'));   
-      break;
-    default:
-      var stdin = process.openStdin();
-      stdin.setEncoding('utf8');
-      stdin.on('data', function(chunk){ str += chunk; });
-      stdin.on('end', function(){
-        var out = stylus.convertCSS(str);
-        console.log(out);      
-      });
-  }
-} else if (interactive) {
-  repl();
-} else {
-  if (files.length) {
-    compileFiles(files);
-  } else {
-    compileStdio();
-  }
-}
-
-/**
- * Start stylus REPL.
- */
-
-function repl() {
-  var options = { filename: 'stdin', imports: [__dirname + '/../lib/functions'] }
-    , parser = new stylus.Parser('', options)
-    , evaluator = new stylus.Evaluator(parser.parse(), options)
-    , rl = require('readline')
-    , repl = rl.createInterface(process.stdin, process.stdout, true)
-    , global = evaluator.global.scope;
-
-  // expose BIFs
-  evaluator.evaluate();
-
-  // readline
-  repl.setPrompt('> ');
-  repl.prompt();
-
-  // HACK: flat-list auto-complete
-  repl._tabComplete = function(){
-    var out = this.output
-      , line = this.line
-      , keys = Object.keys(global.locals)
-      , len = keys.length
-      , words = line.split(/\s+/)
-      , word = words.pop()
-      , names = []
-      , name
-      , obj
-      , key;
-
-    // find words that match
-    for (var i = 0; i < len; ++i) {
-      key = keys[i];
-      if (0 == key.indexOf(word)) {
-        names.push(key);
-      }
-    }
-
-    // several candidates
-    if (names.length > 1) {
-      out.write('\r\n\r\n\033[90m');
-      names.forEach(function(name){
-        var node = global.lookup(name);
-        switch (node.nodeName) {
-          case 'function':
-            out.write('  - ' + node + '\r\n');
-            break;
-          default:
-            out.write('  - ' + name + '\r\n');
-        }
-      });
-      out.write('\r\n\033[0m');
-      this._refreshLine();
-    // single candidate
-    } else if (names.length) {
-      name = names.pop();
-      obj = global.lookup(name);
-      name = name.replace(word, '');
-      switch (obj.nodeName) {
-        case 'function':
-          this._insertString(name + '()');
-          this.cursor--;
-          break;
-        default:
-          this._insertString(name);
-      }
-      this._refreshLine();
-    }
-  };
-  
-  repl.on('line', function(line){
-    if (!line.trim().length) return repl.prompt();
-    parser = new stylus.Parser(line, options);
-    parser.state.push('expression');
-    evaluator.return = true;
-    try {
-      var expr = parser.parse();
-      var ret = evaluator.visit(expr);
-      ret = ret.nodes[ret.nodes.length - 1];
-      ret = ret.toString();
-      if ('(' == ret[0]) ret = ret.replace(/^\(|\)$/g, '');
-      console.log('\033[90m=> \033[0m' + highlight(ret));
-      repl.prompt();
-    } catch (err) {
-      console.error('\033[31merror: %s\033[0m', err.message || err.stack);
-      repl.prompt();
-    }
-  });
-
-  repl.on('SIGINT', function(){
-    console.log();
-    process.exit(0);
-  });
-}
-
-/**
- * Highlight the given string of stylus.
- */
-
-function highlight(str) {
-  return str
-    .replace(/(#)?(\d+(\.\d+)?)/g, function($0, $1, $2){
-      return $1 ? $0 : '\033[36m' + $2 + '\033[0m';
-    })
-    .replace(/(#[\da-fA-F]+)/g, '\033[33m$1\033[0m')
-    .replace(/('.*?'|".*?")/g, '\033[32m$1\033[0m');
-}
-
-/**
- * Convert a CSS file to a Styl file 
- */     
-
-function compileCSSFile(file, fileOut) {
-  fs.lstat(file, function(err, stat){
-    if (err) throw err;
-    if (stat.isFile()) {
-      fs.readFile(file, 'utf8', function(err, str){
-        if (err) throw err;
-        var styl = stylus.convertCSS(str); 
-        fs.writeFile(fileOut, styl, function(err){  
-         if (err) throw err; 
-        });
-      });
-    } 
-  });
-}
-
-/**
- * Compile with stdio.
- */
-
-function compileStdio() {
-  var stdin = process.openStdin();
-  stdin.setEncoding('utf8');
-  stdin.on('data', function(chunk){ str += chunk; });
-  stdin.on('end', function(){
-    // Compile to css
-    stylus(str, options).render(function(err, css){
-      if (err) throw err;
-      if (compare) {
-        console.log('\n\x1b[1mInput:\x1b[0m');
-        console.log(str);
-        console.log('\n\x1b[1mOutput:\x1b[0m');
-      }
-      console.log(css);
-      if (compare) console.log();
-    });
-  });
-}
-
-/**
- * Compile the given files.
- */
-
-function compileFiles(files) {
-  files.forEach(compileFile);
-}
-
-/**
- * Compile the given file.
- */
-
-function compileFile(file) {
-  // ensure file exists
-  fs.lstat(file, function(err, stat){
-    if (err) throw err;
-    // file
-    if (stat.isFile()) {
-      fs.readFile(file, 'utf8', function(err, str){
-        if (err) throw err;
-        options.filename = file;
-        options._imports = [];
-        stylus(str, options).render(function(err, css){
-          watchImports(file, options._imports);
-          if (err) {
-            if (watchers) {
-              console.error(err.stack || err.message);
-              growl.notify(err.message, { title: 'Stylus error' });
-            } else {
-              throw err;
-            }
-          } else {
-            writeFile(file, css);
-          }
-        });
-      });
-    // directory
-    } else if (stat.isDirectory()) {
-      fs.readdir(file, function(err, files){
-        if (err) throw err;
-        files.filter(function(path){
-          return path.match(/\.styl$/);
-        }).map(function(path){
-          return file + '/' + path;
-        }).forEach(compileFile);
-      });
-    }
-  });
-}
-
-/**
- * Write the given css output.
- */
-
-function writeFile(file, css) {
-  // --out support
-  var path = dest
-    ? dest + '/' + basename(file, '.styl') + '.css'
-    : file.replace('.styl', '.css');
-  fs.writeFile(path, css, function(err){
-    if (err) throw err;
-    console.log('  \033[90mcompiled\033[0m %s', path);
-    // --watch support
-    watch(file, compileFile);
-  });
-}
-
-/**
- * Watch the given `file` and invoke `fn` when modified.
- */
-
-function watch(file, fn) {
-  // not watching
-  if (!watchers) return;
-
-  // already watched
-  if (watchers[file]) return;
-
-  // watch the file itself
-  watchers[file] = true;
-  console.log('  \033[90mwatching\033[0m %s', file);
-  fs.watchFile(file, { interval: 50 }, function(curr, prev){
-    if (curr.mtime > prev.mtime) fn(file);
-  });
-}
-
-/**
- * Watch `imports`, re-compiling `file` when they change.
- */
-
-function watchImports(file, imports) {
-  imports.forEach(function(import){
-    if (!import.path) return;
-    watch(import.path, function(){
-      compileFile(file);
-    });
-  });
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/bin/stylus-tutorial b/node/node_modules/jade/support/stylus/bin/stylus-tutorial
deleted file mode 100755 (executable)
index 5ab1c61..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * Module dependencies.
- */
-
-try {
-  var stylus = require('stylus');
-} catch (err) {
-  var stylus = require('../lib/stylus');
-}
-
-/**
- * Banner.
- */
-
-var banner = '\n\
-                                    \n\
-             _         _            \n\
-         ___| |_ _   _| |_   _ ___  \n\
-        / __| __| | | | | | | / __| \n\
-        \\__ \\ |_| |_| | | |_| \\__ \\ \n\
-        |___/\\__|\\__, |_|\\__,_|___/ \n\
-                 |___/              \n\
-                                    \n\
-';
-
-/**
- * Steps.
- */
-
-var steps = [];
-
-/**
- * Clear the screen and move the cursor up.
- */
-
-function clear() {
-  console.log('\x1b[1J\x1b[H');
-}
-
-/**
- * Output "press enter" message.
- */
-
-function enter() {
-  process.stdout.write('\x1b[90mpress enter to continue:\x1b[0m ');
-}
-
-/**
- * Initialize a `Step` with the given data.
- *
- * @param {String} title
- * @param {String} desc
- * @param {String} src
- * @param {Function} fn
- */
-
-function Step(title, desc, src, fn) {
-  var self = this;
-  this.n = steps.length;
-  this.src = src;
-  desc = desc.replace(/\_([^_]+)\_/g, '\x1b[33m$1\x1b[90m');
-  
-  this.next = function(){
-    var step = steps[self.n + 1];
-    if (step) {
-      step.display();
-    } else {
-      console.log('     THE END\n');
-      process.exit(0);
-    }
-  };
-  
-  this.display = function(retry){
-    if (!retry) {
-      console.log(' %d) \x1b[1m%s\x1b[0m\n', self.n, title);
-      console.log(' \x1b[90m%s\x1b[0m', desc);
-    }
-    console.log('\n%s\n', src);
-    console.log('\x1b[90m--------------------\x1b[0m \n');
-    this.input();
-  };
-  
-  this.input = function(){
-    stdin.resume();
-    var buf = '';
-    stdin.on('data', function callback(chunk){
-      if (0 == chunk.indexOf('quit')) process.exit(1);
-      var dot = '.' == chunk[0] && '\n' == chunk[1]
-        , equal = buf.trim() == self.src.trim();
-      if (dot || equal) {
-        stdin.pause();
-        stdin.removeListener('data', callback);
-        stylus.render(buf, { filename: 'stdin' }, function(err, css){
-          if (err) {
-            console.log('\n\x1b[31mError: ' + err.message + '\x1b[0m\n');
-            self.display(true);
-            return;
-          }
-          clear();
-          console.log('\x1b[90m-------------------- stylus\x1b[0m \n');
-          console.log(buf.replace(/^/gm, '  '));
-          console.log('\x1b[90m-------------------- css\x1b[0m \n');
-          console.log(css.replace(/^/gm, '  '));
-          console.log();
-          enter();
-          stdin.resume();
-          stdin.once('data', function(){
-            clear();
-            self.next();
-          });
-        });
-        return;
-      }
-      buf += chunk;
-    });
-  };
-}
-
-/**
- * Step definitions.
- */
-
-steps.push(new Step(
-    'Selector Properties'
-  , 'The Stylus grammar has indentation-based blocks,\n'
-  + ' meaning one does not surround selector properties\n'
-  + ' using braces _{_ _}_, but uses an indent of two \n'
-  + ' spaces, or a single tab.\n'
-  + '\n'
-  + ' To get started, type the stylus you see below\n'
-  + ' and then press return a few times or type _"."_ to render.'
-  , 'body\n  color black'));
-
-steps.push(new Step(
-    'Multiple Selectors'
-  , 'Blocks can be applied to several selectors at once\n'
-  + ' by separating them via comma, or newline.\n'
-  + '\n'
-  + ' Both examples shown below are equivalent.'
-  
-  , 'a.button, input[type=button]\n'
-  + '  border 1px solid #eee\n'
-  + '  padding 5px\n\n'
-  + 'a.button\n'
-  + 'input[type=button]\n'
-  + '  border 1px solid #eee\n'
-  + '  padding 5px'
-  ));
-
-steps.push(new Step(
-    'Nested Selectors'
-  , 'Selectors may also be nested.\n'
-  
-  , 'ul\n'
-  + '  li\n'
-  + '    a\n'
-  + '      color black\n'
-  ));
-
-steps.push(new Step(
-    'Variables'
-  , 'Stylus allows you to define variables by utilizing\n'
-  + ' the _=_ operator, much like you would in any other language.\n'
-  + '\n'
-  + ' These variables may be assigned to _numbers_, _strings_, _booleans_,\n'
-  + ' and virtually everything else you see in css.'
-  
-  , 'size = 14px\n\n'
-  + 'body\n'
-  + '  font size Arial, sans-serif'
-  ));
-
-steps.push(new Step(
-    'Conditional Assignment'
-  , 'The conditional assignment operator _?=_ may be used to\n'
-  + ' define a variable only when previously undefined.'
-  
-  , 'size = 14px\n\n'
-  + 'body\n'
-  + '  size ?= 22px\n'
-  + '  font size Arial, sans-serif'
-  ));
-
-steps.push(new Step(
-    'Arithmetic'
-  , 'A variety of binary arithmetic operators are supported\n'
-  + ' as well as unary operators such as _-_, _+_, and _~_.'
-  
-  , 'size = 14px\n'
-  + 'large-size = size * 2\n'
-  + '\n'
-  + 'body\n'
-  + '  font large-size\n'
-  + '\n'
-  + 'p\n'
-  + '  margin-left -(size - 2)'
-  ));
-
-steps.push(new Step(
-    'Coercion'
-  , 'Arithmetic operations coerce the right-hand operand when\n'
-  + ' applicable, for example converting _2s_ in _1000ms + 2s_\n'
-  + ' into _2000ms_ before evaluating the expression.\n'
-  + '\n'
-  + ' Examples:\n'
-  + '    _15px_ - _5_\n'
-  + '    _#000_ + _#eee_\n'
-  + '    _#fff_ - rgba(_0_,_0_,_0_,_.5_)\n'
-  + '    _#fff_ / _2_\n'
-  + '    _5in_ - _3cm_\n'
-  
-  , 'duration = 2s\n\n'
-  + '.fade\n'
-  + '  -webkit-transition opacity duration - 1500ms linear'
-  ));
-
-steps.push(new Step(
-    'Functions'
-  , 'Stylus functions may act as mixins or have a return value.\n'
-  + 'For example here we use the unit() built-in function to.\n'
-  + 'forcing both unit\'s type to _px_, and then add them.\n'
-  + '\n'
-  + 'Note that we may also use the _return_ keyword, however it\n'
-  + 'is optional in most cases.'
-  
-  , 'add(a, b)\n'
-  + '  a = unit(a, "px")\n'
-  + '  b = unit(b, "px")\n'
-  + '  a + b\n'
-  + '\n'
-  + 'body\n'
-  + '  padding add(5px, 10px)\n'
-  + '  margin add(5, 10)'
-  ));
-
-steps.push(new Step(
-    'Mixins'
-  , 'Mixins are defined in the same manner as functions\n'
-  + 'with return values, however they "mix in" their properties\n'
-  + 'and selectors into the caller.\n'
-  + '\n'
-  + 'Mixin parens are optional in most cases, so we may apply\n'
-  + 'the transparently.'
-  
-  , 'border-radius(n)\n'
-  + '  -webkit-border-radius n\n'
-  + '  -moz-border-radius n\n'
-  + '  border-radius n\n'
-  + '\n'
-  + 'body\n'
-  + '  border-radius(5px)\n'
-  + '\n'
-  + 'form input\n'
-  + '  border-radius 5px'
-  ));
-
-/**
- * Start tutorial.
- */
-
-clear();
-console.log('\x1b[1m' + banner + '\x1b[0m');
-console.log('\n Welcome to the stylus interactive tutorial.\n');
-console.log('  - To quit at any time type \x1b[1mquit\x1b[0m.');
-console.log('  - To force rendering type "." and press enter,');
-console.log('    however source will be automatically rendered');
-console.log('    when it matches the step\'s source.');
-console.log();
-enter();
-
-var stdin = process.openStdin();
-stdin.setEncoding('utf8');
-
-stdin.once = function(event, fn){
-  this.on(event, function callback(chunk){
-    stdin.removeListener(event, callback);
-    fn(chunk);
-  });
-};
-
-stdin.once('data', function(chunk){
-  stdin.pause();
-  clear();
-  steps[0].display();
-});
diff --git a/node/node_modules/jade/support/stylus/bm.js b/node/node_modules/jade/support/stylus/bm.js
deleted file mode 100644 (file)
index ce1acfa..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var stylus = require('./');
-
-var times = 200
-  , n = times
-  , start = new Date;
-
-console.log('compiling %d times', times);
-
-while (n--) {
-  stylus('body\n  color: white;\n  background: url(/images/foo.png)\n  a\n    &:hover\n      text-decoration: underline;')
-    .render(function(err, css){});
-}
-
-var duration = new Date - start;
-console.log('  duration: %dms', duration);
-console.log('  average: %dms', duration / times);
-console.log('  per second: %d', (times / (duration / 1000)).toFixed(1));
diff --git a/node/node_modules/jade/support/stylus/docs/bifs.md b/node/node_modules/jade/support/stylus/docs/bifs.md
deleted file mode 100644 (file)
index 75e599f..0000000
+++ /dev/null
@@ -1,453 +0,0 @@
-
-## Built-in Functions
-
-### red(color)
-
-Return the red component of the given `color`.
-
-     red(#c00)
-     // => 204
-
-### green(color)
-
-Return the green component of the given `color`.
-
-     green(#0c0)
-     // => 204
-
-### blue(color)
-
-Return the blue component of the given `color`.
-
-     red(#00c)
-     // => 204
-
-### alpha(color)
-
-Return the alpha component of the given `color`.
-
-      alpha(#fff)
-      // => 1
-      
-      alpha(rgba(0,0,0,0.3))
-      // => 0.3
-
-### dark(color)
-
-Check if `color` is dark:
-
-      dark(black)
-      // => true
-
-      dark(#005716)
-      // => true
-
-      dark(white)
-      // => false
-
-
-### light(color)
-
-Check if `color` is light:
-
-    light(black)
-    // => false
-
-    light(white)
-    // => true
-    
-    light(#00FF40)
-    // => true
-
-### hue(color)
-
-Return the hue of the given `color`.
-
-    hue(hsla(50deg, 100%, 80%))
-    // => 50deg
-
-### saturation(color)
-
-Return the saturation of the given `color`.
-
-    hue(hsla(50deg, 100%, 80%))
-    // => 100%
-
-### lightness(color)
-
-Return the lightness of the given `color`.
-
-    hue(hsla(50deg, 100%, 80%))
-    // => 80%
-
-### typeof(node)
-
-Return type of `node` as a string.
-
-      type(12)
-      // => 'unit'
-
-      typeof(12)
-      // => 'unit'
-      
-      typeof(#fff)
-      // => 'rgba'
-
-      type-of(#fff)
-      // => 'rgba'
-
-Aliased as `type-of` and `type`.
-
-### unit(unit[, type])
-
-Return a string for the type of `unit` or an empty string,
-or assign the given `type` without unit conversion.
-
-    unit(10)
-    // => ''
-    
-    unit(15in)
-    // => 'in'
-    
-    unit(15%, 'px')
-    // => 15px
-
-    unit(15%, px)
-    // => 15px
-
-### match(pattern, string)
-
-Test if `string` matches the given `pattern`.
-
-    match('^foo(bar)?', foo)
-    match('^foo(bar)?', foobar)
-    // => true
-
-    match('^foo(bar)?', 'foo')
-    match('^foo(bar)?', 'foobar')
-    // => true
-    
-    match('^foo(bar)?', 'bar')
-    // => false
-
-### abs(unit)
-
-      abs(-5px)
-      // => 5px
-
-      abs(5px)
-      // => 5px
-
-### ceil(unit)
-
-      ceil(5.5in)
-      // => 6in
-
-### floor(unit)
-
-      floor(5.6px)
-      // => 5px
-
-### round(unit)
-
-      round(5.5px)
-      // => 6px
-
-      round(5.4px)
-      // => 5px
-
-### min(a, b)
-
-      min(1, 5)
-      // => 1
-
-### max(a, b)
-
-      max(1, 5)
-      // => 5
-
-### even(unit)
-
-      even(6px)
-      // => true
-
-### odd(unit)
-
-      odd(5mm)
-      // => true
-
-### sum(nums)
-
-      sum(1 2 3)
-      // => 6
-
-### avg(nums)
-
-     avg(1 2 3)
-     // => 2
-
-### join(delim, vals...)
-
-  Join the given `vals` with `delim`.
-
-      join(' ', 1 2 3)
-      // => "1 2 3"
-      
-      join(',', 1 2 3)
-      // => "1,2,3"
-      
-      join(', ', foo bar baz)
-      // => "foo, bar, baz"
-
-      join(', ', foo, bar, baz)
-      // => "foo, bar, baz"
-
-### hsla(color | h[, s, l, a])
-
-Convert the given `color` to an `HSLA` node,
-or h,s,l,a component values.
-
-     hslaa(10deg, 50%, 30%, 0.5)
-     // => HSLA
-
-     hslaa(#ffcc00)
-     // => HSLA
-
-### hsla(color | h[, s, l])
-
-Convert the given `color` to an `HSLA` node,
-or h,s,l component values.
-
-     hsla(10, 50, 30)
-     // => HSLA
-
-     hsla(#ffcc00)
-     // => HSLA
-
-### rgba(color | r[, g, b, a])
-
-Return `RGBA` from the r,g,b,a channels or provide a `color` to tweak the alpha.
-
-      rgba(255,0,0,0.5)
-      // => rgba(255,0,0,0.5)
-  
-      rgba(255,0,0,1)
-      // => #ff0000
-  
-      rgba(#ffcc00, 0.5)
-      // rgba(255,204,0,0.5)
-
-### rgb(color | r[, g, b])
-
-Return a `RGBA` from the r,g,b channels or cast to an `RGBA` node.
-    
-    rgb(255,204,0)
-    // => #ffcc00
-    
-    rgb(#fff)
-    // => #fff
-
-### lighten(color, amount)
-
-Lighten the given `color` by `amount`.
-
-    lighten(black, 50%)
-    // => #808080
-
-### darken(color, amount)
-
-Darken the given `color` by `amount`.
-
-    darken(white, 50%)
-    // => #808080
-
-### lighten-by(color, amount)
-
- Lighten by `amount` of the current lightness value.
-    
-    lighten-by(black, 50%)
-    // => #808080
-    
-    lighten-by(lighten-by(black, 50%), 50%)
-    // => #bfbfbf
-
-    lighten-by(lighten-by(lighten-by(black, 50%), 50%), 50%)
-    // => #fff
-
-essentially the same as:
-
-    black + hsla(0,0,50%)
-    black + hsla(0,0,75%)
-    black + hsla(0,0,100%)
-
-### darken-by(color, amount)
-
- Darken by `amount` of the current lightness value.
-
-    darken-by(white, 50%)
-    // => #808080
-    
-    darken-by(darken-by(white, 50%), 50%)
-    // => #404040
-    
-    darken-by(darken-by(darken-by(white, 50%), 50%), 50%)
-    // => #202020
-
-### desaturate(color, amount)
-
-Desaturate the given `color` by `amount`.
-
-    desaturate(#f00, 40%)
-    // => #c33
-
-### saturate(color, amount)
-
-Saturate the given `color` by `amount`.
-
-    saturate(#c33, 40%)
-    // => #f00
-
-### unquote(str | ident)
-
-  Unquote the given `str` and returned as a `Literal` node.
-       unquote("sans-serif")
-       // => sans-serif
-       unquote(sans-serif)
-       // => sans-serif
-
-       unquote('1px / 2px')
-       // => 1px / 2px
-
-### operate(op, left, right)
-
-  Perform the given `op` on the `left` and `right` operands:
-  
-      op = '+'
-      operate(op, 15, 5)
-      // => 20
-
-### length([expr])
-
-  Parenthesized expressions may act as tuples, the `length()` function returns the length of such expressions.
-
-    length((1 2 3 4))
-    // => 4
-
-    length((1 2))
-    // => 2
-  
-    length((1))
-    // => 1
-  
-    length(())
-    // => 0
-  
-    length(1 2 3)
-    // => 3
-
-    length(1)
-    // => 1
-
-    length()
-    // => 0
-
-### warn(msg)
-
-  Warn with the given error `msg`, does not exit.
-
-      warn("oh noes!")
-
-### error(msg)
-
-  Exits with the given error `msg`.
-
-    add(a, b)
-      unless a is a 'unit' and b is a 'unit'
-        error('add() expects units')
-      a + b
-
-### last(expr)
-
- Return the _last_ value in the given `expr`:
-      nums = 1 2 3
-      last(nums)
-      last(1 2 3)
-      // => 3
-      
-      list = (one 1) (two 2) (three 3)
-      last(list)
-      // => (three 3)
-
-### p(expr)
-
- Inspect the given `expr`:
-     fonts = Arial, sans-serif
-     p('test')
-     p(123)
-     p((1 2 3))
-     p(fonts)
-     p(#fff)
-     p(rgba(0,0,0,0.2))
-     
-     add(a, b)
-       a + b
-    
-     p(add)
-
-stdout:
-
-     inspect: "test"
-     inspect: 123
-     inspect: 1 2 3
-     inspect: Arial, sans-serif
-     inspect: #fff
-     inspect: rgba(0,0,0,0.2)
-     inspect: add(a, b)
-
-### opposite-position(positions)
-
- Return the opposites of the given `positions`.
-  
-     opposite-position(right)
-     // => left
-
-     opposite-position(top left)
-     // => bottom right
-
-     opposite-position('top' 'left')
-     // => bottom right
-
-### image-size(path)
-
-  Returns the `width` and `height` of the image found at `path`. Lookups are performed in the same manner as `@import`, altered by the `paths` setting.
-
-      width(img)
-        return image-size(img)[0]
-
-      height(img)
-        return image-size(img)[1]
-
-      image-size('tux.png')
-      // => 405px 250px
-
-      image-size('tux.png')[0] == width('tux.png')
-      // => true
-
-### Undefined Functions
-
-  Undefined functions will output as literals, so for example
-  we may call `rgba-stop(50%, #fff)` within our css, and it will
-  output as you would expect. We can use this within helpers as well.
-  
-  In the example below we simply define the function `stop()` which 
-  returns the literal `rgba-stop()` call.
-  
-    stop(pos, rgba)
-      rgba-stop(pos, rgba)
-
-    stop(50%, orange)
-    // => rgba-stop(50%, #ffa500)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/comments.md b/node/node_modules/jade/support/stylus/docs/comments.md
deleted file mode 100644 (file)
index 37e9be2..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-## Comments
-
-  Stylus supports two kinds of comments, single-line, and multi-line comments, using the same syntax found in JavaScript.
-
-
-    // I'm a comment!
-    body
-      padding 5px // some awesome padding
-
-
-    /*
-     * Adds the given numbers together.
-     */
-    
-    add(a, b)
-      a + b
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/compare.md b/node/node_modules/jade/support/stylus/docs/compare.md
deleted file mode 100644 (file)
index e823b3d..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-
-## Implementation Comparisons
-
-Below we go head to head with other implementations.
-
-### Variables
-
-SCSS:
-
-     $main-color: #006;
-     color: $main-color;
-
-Less:
-
-     @main-color: #006;
-     color: @main-color;
-
-Stylus:
-
-     main-color = #006
-     color main-color
-
-### Mixins
-
-SCSS:
-
-     @mixin pad($x, $y) {
-       padding: $y $x;
-     }
-   
-     .msg {
-       @include pad(5px, 10px);
-     }
-
-Less:
-
-      .pad(@x, @y) {
-        padding: @y @x;
-      }
-    
-      .msg {
-        .pad(5px, 10px);
-      }
-
-Stylus:
-
-      pad(x, y)
-        padding y x
-
-      .msg
-        pad(5px, 10px)
-
-### Larger Example
-
-Less:
-
-    .box-shadow (@x: 0, @y: 0, @blur: 1px, @alpha) {
-      @val: @x @y @blur rgba(0, 0, 0, @alpha);
-      box-shadow:         @val;
-      -webkit-box-shadow: @val;
-      -moz-box-shadow:    @val;
-    }
-    .box {
-      @base: #f938ab;
-      color:        saturate(@base, 5%);
-      border-color: lighten(@base, 30%);
-      div { .box-shadow(0, 0, 5px, 0.4) }
-    }
-
-Stylus:
-    box-shadow()
-      -webkit-box-shadow arguments
-      -moz-box-shadow arguments
-      box-shadow arguments
-
-    .box
-      base = #f938ab
-      color saturate(base, 5%)
-      border-color lighten(base, 30%)
-      div
-        box-shadow 0 0 5px 0.4
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/conditionals.md b/node/node_modules/jade/support/stylus/docs/conditionals.md
deleted file mode 100644 (file)
index 8d6d322..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-
-## Conditionals
-
- Conditionals provide control flow to a language which is otherwise static, providing conditional imports, mixins, functions, and more. The examples below are simply examples, and not recommended :)
-
-### if / else if / else
-
- The `if` conditional works as you would expect, simply accepting an expression, evaluating the following block when `true`. Along with `if` are the typical `else if` and `else` tokens, acting as fallbacks.
- The example below would conditionally overload the `padding` property, swapping it for margin.
-
-    overload-padding = true
-
-    if overload-padding
-      padding(y, x)
-        margin y x
-
-    body
-      padding 5px 10px
-
-Another example:
-
-    box(x, y, margin = false)
-      padding y x
-      if margin
-        margin y x
-
-    body
-      box(5px, 10px, true)
-
-Another `box()` helper:
-
-    box(x, y, margin-only = false)
-      if margin-only
-        margin y x
-      else
-        padding y x
-
-### unless
-
- For users familiar with the ruby programming language, we have the `unless` conditional, which is essentially the opposite of `if`, essentially `if (!(expr))`.
-
-In the example below, if `disable-padding-override` is undefined or `false` padding will be overridden, displaying `margin` instead. However when `true` padding will remain outputting `padding 5px 10px` as expected.
-
-     disable-padding-override = true
-
-     unless disable-padding-override is defined and disable-padding-override
-       padding(x, y)
-         margin y x
-
-     body
-       padding 5px 10px
-
-### Postfix Conditionals
-
-  Stylus supports postfix conditionals, meaning the `if` and `unless` act as operators, evaluating the left-hand operand, when the right-hand expression is truthy.
-  
-  
-  For example let's define `negative()`, performing some basic type checking. Below we use block-style conditionals:
-  
-      negative(n)
-        unless n is a 'unit'
-          error('invalid number')
-        if n < 0
-          yes
-        else
-          no
-
-  Next we utilize postfix conditionals to keep our function terse.
-
-      negative(n)
-        error('invalid number') unless n is a 'unit'
-        return yes if n < 0
-        no
-
-  Of course we could take this further, and utilize `n < 0 ? yes : no`, or simply stick with booleans, and use only `n < 0`.
-
-  Postfix conditionals may be applied to most single-line statements, for example `@import`, `@charset`, mixins, and of course properties as shown below:
-  
-  
-      pad(types = margin padding, n = 5px)
-        padding unit(n, px) if padding in types
-        margin unit(n, px) if margin in types
-
-      body
-        pad()
-
-      body
-        pad(margin)
-
-      body
-        apply-mixins = true
-        pad(padding, 10) if apply-mixins
-
-yielding:
-
-      body {
-        padding: 5px;
-        margin: 5px;
-      }
-      body {
-        margin: 5px;
-      }
-      body {
-        padding: 10px;
-      }
-
diff --git a/node/node_modules/jade/support/stylus/docs/css-style.md b/node/node_modules/jade/support/stylus/docs/css-style.md
deleted file mode 100644 (file)
index 3d433c4..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-
-## CSS Style
-
- Stylus transparently supports a regular css-style syntax, meaning you do not need to use an alternative parser, or specify that a certain file is using a specific style.
-
-### Example
-
- Below is a small style using the indented approach:
-     border-radius()
-       -webkit-border-radius arguments
-       -moz-border-radius arguments
-       border-radius arguments
-
-     body a
-       font 12px/1.4 "Lucida Grande", Arial, sans-serif
-       background black
-       color #ccc
-
-     form input
-       padding 5px
-       border 1px solid
-       border-radius 5px
-
- Since braces, colons, and semi-colons are optional, we could write this example just as we would with normal css:
-     border-radius() {
-       -webkit-border-radius: arguments;
-       -moz-border-radius: arguments;
-       border-radius: arguments;
-     }
-
-     body a {
-       font: 12px/1.4 "Lucida Grande", Arial, sans-serif;
-       background: black;
-       color: #ccc;
-     }
-
-     form input {
-       padding: 5px;
-       border: 1px solid;
-       border-radius: 5px;
-     }
-
- Since we may mix and match the two variants, the following is valid as well:
-     border-radius()
-       -webkit-border-radius: arguments;
-       -moz-border-radius: arguments;
-       border-radius: arguments;
-
-     body a {
-       font: 12px/1.4 "Lucida Grande", Arial, sans-serif;
-       background: black;
-       color: #ccc;
-     }
-
-     form input
-       padding: 5px;
-       border: 1px solid;
-       border-radius: 5px;
-
- Variables, functions, mixins, and all of the other features that Stylus provides still work as expected:
-     main-color = white
-     main-hover-color = black
-
-     body a {
-       color: main-color;
-       &:hover { color: main-hover-color; }
-     }
-
-     body a { color: main-color; &:hover { color: main-hover-color; }}
-
- There are currently a few exceptions to this rule, since the two styles may be mixed and matched some indentation rules still apply. So although not _every_ plain-css stylesheet will work without modification this feature still allows those who prefer css syntax may still utilize the other powerful features provided by Stylus.
-
diff --git a/node/node_modules/jade/support/stylus/docs/error-reporting.md b/node/node_modules/jade/support/stylus/docs/error-reporting.md
deleted file mode 100644 (file)
index 5b2def2..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-## Error Reporting
-
- Stylus has fantastic error reporting built in for syntax, parse, and evaluation errors, complete with stack traces, line numbers, and filenames.
-
-### Parse Error
-
-Parse error example:
-
-     body
-       form input
-         == padding 5px
-
-yielding:
-
-     Error: /Users/tj/Projects/stylus/testing/test.styl:4
-       3: '  form input'
-       4: '    == padding 5px'
-
-     illegal unary ==
-
-### Evaluation Error
-
- This "runtime" or evaluation error is caused due to passing a string to `border-radius()` instead of the expected `Unit` by using our helper `ensure(n, 'unit')`.
-
-      ensure(val, type)
-        unless val is a type
-          error('expected a ' + type + ', but got ' + typeof(val))
-
-      border-radius(n)
-        ensure(n, 'unit')
-        -webkit-border-radius n
-        -moz-border-radius n
-        border-radius n
-
-      body
-        border-radius '5px'
-
-yielding:
-
-      Error: /Users/tj/Projects/stylus/examples/error.styl:12
-        11: ''
-        12: 'body'
-        13: '  border-radius \'5px\''
-        14: ''
-
-      expected a unit, but got string
-          at ensure() (/Users/tj/Projects/stylus/examples/error.styl:2)
-          at border-radius() (/Users/tj/Projects/stylus/examples/error.styl:5)
-          at "body" (/Users/tj/Projects/stylus/examples/error.styl:10)
diff --git a/node/node_modules/jade/support/stylus/docs/escape.md b/node/node_modules/jade/support/stylus/docs/escape.md
deleted file mode 100644 (file)
index f2d7348..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-## Escaping
-
- Stylus allows you to escape characters, effectively turning them into identifiers, so that they can be rendered as literals. For example:
-
-     body
-       padding 1 \+ 2
-
-will compile to:
-
-     body {
-       padding: 1 + 2;
-     }
-
-
-Not that Stylus requires that `/` is parenthesized when used in a property:
-
-    body
-      font 14px/1.4
-      font (14px/1.4)
-
-yields:
-
-    body {
-      font: 14px/1.4;
-      font: 10px;
-    }
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/executable.md b/node/node_modules/jade/support/stylus/docs/executable.md
deleted file mode 100644 (file)
index 2303a6d..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-
-## Stylus Executable
-
-Stylus ships with the `stylus` executable for converting stylus to css.
-
-      Usage: stylus [options] [command] [< in [> out]]
-                    [file|dir ...]
-
-      Commands:
-
-        help <prop>     Opens help info for <prop> in
-                        your default browser. (osx only)
-
-      Options:
-
-        -i, --interactive       Start interactive REPL
-        -w, --watch             Watch file(s) for changes and re-compile
-        -o, --out <dir>         Output to <dir> when passing files
-        -C, --css <src> [dest]  Convert css input to stylus
-        -c, --compress          Compress css output
-        -d, --compare           Display input along with output
-        -V, --version           Display the version of stylus
-        -h, --help              Display help information
-
-### STDIO Compilation Example
-
- `stylus` reads from _stdin_ and outputs to _stdout_, so for example:
-
-      $ stylus --compress < some.styl > some.css
-
-Try stylus some in the terminal, type below and press CTRL-D for __EOF__:
-
-      $ stylus
-      body
-        color red
-        font 14px Arial, sans-serif
-
-### Compiling Files Example
-
- `stylus` also accepts files and directories, for example a directory named `css` will compile and output the `.css` files in the same directory.
-      $ stylus css
-
-  The following will output to `./public/stylesheets`:
-  
-      $ stylus css --out public/stylesheets
-
-  Or a few files:
-  
-      $ stylus one.styl two.styl
-
-### Converting CSS
-
- If we wish to convert css to the terse Stylus syntax, we can utilize the `--css` flag.
-
- Via stdio:
-      $ stylus --css < test.css > test.styl
-
- Output a `.styl` file of the same basename:
-      $ stylus --css test.css
-
- Output to a specific destination:
-      $ stylus --css test.css /tmp/out.styl
-
-### CSS Property Help
-
-  On osx `stylus help <prop>` will open your default browser and display help documentation for the given `<prop>`.
-
-    $ stylus help box-shadow
-
-### Interactive Shell
-
- The Stylus REPL (Read-Eval-Print-Loop) or "interactive shell" allows you to
- play around with Stylus expressions directly from your terminal. Note that this works only for expressions, not selectors etc. To use simple add the `-i`, or `--interactive` flag:
-     $ stylus -i
-     > color = white
-     => #fff
-     > color - rgb(200,50,0)
-     => #37cdff
-     > color
-     => #fff
-     > color -= rgb(200,50,0)
-     => #37cdff
-     > color
-     => #37cdff
-     > rgba(color, 0.5)
-     => rgba(55,205,255,0.5)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/font-face.md b/node/node_modules/jade/support/stylus/docs/font-face.md
deleted file mode 100644 (file)
index 408b491..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-## @font-face
-
- The `@font-face` at-rule expects as you would expect, simply followed by a block of properties:
-     @font-face
-       font-family Geo
-       font-style normal
-       src url(fonts/geo_sans_light/GensansLight.ttf)
-
-     .ingeo
-       font-family Geo
-
-yielding:
-
-
-      @font-face {
-        font-family: Geo;
-        font-style: normal;
-        src: url("fonts/geo_sans_light/GensansLight.ttf");
-      }
-      .ingeo {
-        font-family: Geo;
-      }
-
diff --git a/node/node_modules/jade/support/stylus/docs/functions.md b/node/node_modules/jade/support/stylus/docs/functions.md
deleted file mode 100644 (file)
index d762104..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-
-## Functions
-
- Stylus features powerful in-language function definition. Function definition appears identical to mixins, however functions may return a value.
-
-### Return Values
-
- Let's try a trivial example, creating a function that adds two numbers.
-
-    add(a, b)
-      a + b
-
- We may then utilize this function in conditions, as property values, etc.
-     body 
-       padding add(10px, 5)
-
- Rendering
-     
-     body {
-       padding: 15px;
-     }
-
-### Argument Defaults
-
- Optional arguments may default to a given expression. With Stylus we may even default arguments to leading arguments! For example:
-     add(a, b = a)
-       a + b
-
-     add(10, 5)
-     // => 15
-     
-     add(10)
-     // => 20
-
-note that since argument defaults are assignments, we can also utilize function calls for defaults:
-
-     add(a, b = unit(a, px))
-       a + b
-
-### Function Bodies
-
- We can take our simple `add()` function further, by casting all units passed as `px` via the `unit()` built-in. Re-assigning each argument and providing a unit type string (or identifier), which disregards unit conversion.
-     add(a, b = a)
-       a = unit(a, px)
-       b = unit(b, px)
-       a + b
-
-     add(15%, 10deg)
-     // => 25
-
-### Multiple Return Values
-
- Stylus functions can return several values, just as you can assign several values to a variable. For example the following is a valid assignment:
-       sizes = 15px 10px
-     
-       sizes[0]
-       // => 15px 
-
-Similarly we may return several values:
-
-       sizes()
-         15px 10px
-
-       sizes()[0]
-       // => 15px
-
-One slight exception is when return values are identifiers, for example the following looks like a property assignment to Stylus since no operators are present.
-
-     swap(a, b)
-       b a
-
-To disambiguate we may either wrap in parens, or utilize the `return` keyword.
-
-      swap(a, b)
-        (b a)
-
-      swap(a, b)
-        return b a
-
-### Conditionals
-
- Let's say we want to create a function named `stringish()` to see if the value given can be transformed to a string. We check if `val` is a string, or an ident which is string-like. Because undefined identifiers yield themselves as the value, we may compare them to them-selves as shown below, where `yes` and `no` are used in place of `true` and `false`.
-     stringish(val)
-       if val is a 'string' or val is a 'ident'
-         yes
-       else
-         no
-
-usage:
-
-     stringish('yay') == yes
-     // => true
-   
-     stringish(yay) == yes
-     // => true
-   
-     stringish(0) == no
-     // => true
-
-__note__: `yes` and `no` are not boolean literals, they are simply undefined identifiers in this case.
-
-Another example:
-
-
-    compare(a, b)
-      if a > b
-        higher
-      else if a < b
-        lower
-      else
-        equal
-
-usage:
-
-    compare(5, 2)
-    // => higher
-
-    compare(1, 5)
-    // => lower
-
-    compare(10, 10)
-    // => equal
-
-### Aliasing
-
-  To alias a function we can simply assign a function's name to a new identifier. For example our previous `add()` function could be exposed as `plus()` as well, simply by:
-  
-      plus = add
-      
-      plus(1, 2)
-      // => 3
-
-### Variable Functions
-
-  In the same way that we can "alias" a function, we can pass a function as well, here our `invoke()` function accepts a function, so we can pass it `add()` or `sub()`.
-
-    invoke(a, b, fn)
-      fn(a, b)
-
-    add(a, b)
-      a + b
-
-    body
-      padding invoke(5, 10, add)
-      padding invoke(5, 10, sub)
-
-yielding:
-
-    body {
-      padding: 15;
-      padding: -5;
-    }
-
-### arguments
-
- The `arguments` local is available to all function bodies, and contains all the arguments passed. For example:
-     sum()
-       n = 0
-       for num in arguments
-         n = n + num
-
-     sum(1,2,3,4,5)
-     // => 15
-
-### Hash Example
-
- Below we define the `get(hash, key)` function, which will return the
- value of `key`, or `null`. We iterate each `pair` in `hash`, returning the pair's second node when the first (the `key`) matches. 
-
-      get(hash, key)
-        return pair[1] if pair[0] == key for pair in hash
-
-As you can see below, in-language functions paired with robust stylus expressions can provide great flexibility. 
-      
-      hash = (one 1) (two 2) (three 3)
-      
-      get(hash, two)
-      // => 2
-
-      get(hash, three)
-      // => 3
-
-      get(hash, something)
-      // => null
diff --git a/node/node_modules/jade/support/stylus/docs/functions.url.md b/node/node_modules/jade/support/stylus/docs/functions.url.md
deleted file mode 100644 (file)
index 693bbaa..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-## Data URI Image Inlining
-
-Stylus is bundled with an optional function named `url()`, which replaces the literal `url()` calls, and conditionally inlines them using base64 [Data URIs](http://en.wikipedia.org/wiki/Data_URI_scheme).
-
-### Example
-
-The function itself is available via `require('stylus').url`, and accepts an options object, returning a function that Stylus calls internally when it sees `url()`.
-
-The `.define(name, callback)` method assigned a JavaScript function that can be called from stylus source. In this case we have our images in `./css/images` then we can ignore the `paths` option, since image lookups are performed relative to the file being rendered (by default), we may alter this with the option.
-
-      stylus(str)
-        .set('filename', __dirname + '/css/test.styl')
-        .define('url', stylus.url())
-        .render(function(err, css){
-    
-        });
-
-For example if our images live in `./public/images` and we wish to use `url(images/tobi.png)`, we can pass `paths` with our public directory, which will become part of the lookup process. Like-wise if we wanted `url(tobi.png)` instead, we would pass `paths: [__dirname + '/public/images']`.
-
-      stylus(str)
-        .set('filename', __dirname + '/css/test.styl')
-        .define('url', stylus.url({ paths: [__dirname + '/public'] }))
-        .render(function(err, css){
-          
-        });
-  
-### Options
-
-  - `limit` bytesize limit defaulting to 30Kb (30000)
-  - `paths` image resolution path(s)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/import.md b/node/node_modules/jade/support/stylus/docs/import.md
deleted file mode 100644 (file)
index 1db388a..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-
-## Import
-
- Stylus supports both literal __@import__ for CSS, as well as dynamic importing of other Stylus sheets.
-
-### Literal CSS
-
-  Any filename with the extension `.css` will become a literal, for example:
-  
-     @import "reset.css"
-
-will render to the literal css __@import__ shown below:
-
-     @import "reset.css"
-
-### Stylus Import
-
- When using __@import__ without the `.css` extension, it is assumed to be a Stylus sheet, for example `@import "mixins/border-radius"`.
-
- __@import__ works by iterating an array of directories, and seeing if this file lives in any of them, similar to node's `require.paths`. This array defaults to a single path which is derived from the `filename` option's dirname. So if your filename is `/tmp/testing/stylus/main.styl`, then import will look in `/tmp/testing/stylus/`.
- __@import__ also supports index styles, meaning if you `@import blueprint`, it will resolve either `blueprint.styl` or `blueprint/index.styl`, useful for libraries to expose all of their features, but still allow a subset of the library to be imported. For example a common lib structure might be:
-
-    ./tablet
-      |-- index.styl 
-      |-- vendor.styl 
-      |-- buttons.styl 
-      |-- images.styl 
-
- In the example below we set the `paths` options to provide additional paths to Stylus. Within `./test.styl` we could then `@import "mixins/border-radius"` or `@import "border-radius"` since `./mixins` is exposed to Stylus.
-
-      /**
-       * Module dependencies.
-       */
-
-      var stylus = require('../')
-        , str = require('fs').readFileSync(__dirname + '/test.styl', 'utf8');
-
-      var paths = [
-          __dirname
-        , __dirname + '/mixins'
-      ];
-
-      stylus(str)
-        .set('filename', __dirname + '/test.styl')
-        .set('paths', paths)
-        .render(function(err, css){
-          if (err) throw err;
-          console.log(css);
-        });
-
-### JavaScript Import API
-
- When using the `.import(path)` method, these imports are deferred until evaluation:
-       var stylus = require('../')
-         , str = require('fs').readFileSync(__dirname + '/test.styl', 'utf8');
-
-       stylus(str)
-         .set('filename', __dirname + '/test.styl')
-         .import('mixins/vendor')
-         .render(function(err, css){
-         if (err) throw err;
-         console.log(css);
-       });
-
- The following are essentially equivalent:
-     @import 'mixins/vendor'
-
-and
-     .import('mixins/vendor') 
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/interpolation.md b/node/node_modules/jade/support/stylus/docs/interpolation.md
deleted file mode 100644 (file)
index c59bd9b..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-## Interpolation
-
-  Stylus supports interpolation by using the `{}` characters to surround an expression, which then becomes part of the identifier. For example `-webkit-{'border' + '-radius'}` would evaluate to `-webkit-border-radius`.
-
- A great example use-case for this is expanding properties with vendor prefixes.
-
-      vendor(prop, args)
-        -webkit-{prop} args
-        -moz-{prop} args
-        {prop} args
-
-      border-radius()
-        vendor('border-radius', arguments)
-      
-      box-shadow()
-        vendor('box-shadow', arguments)
-
-      button
-        border-radius 1px 2px / 3px 4px
-
-yielding:
-
-      button {
-        -webkit-border-radius: 1px 2px / 3px 4px;
-        -moz-border-radius: 1px 2px / 3px 4px;
-        border-radius: 1px 2px / 3px 4px;
-      }
-
-## Property Hacks
-
-Interpolation can be used for property hacks as well, since all string values
-within the delimiters are transformed to literals. For example:
-
-    body
-      {'*foo-bar'} baz
-
-yields:
-
-    body {
-      *foo-bar: baz;
-    }
-      
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/introspection.md b/node/node_modules/jade/support/stylus/docs/introspection.md
deleted file mode 100644 (file)
index 06d7c49..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-## Introspection API
-
- Stylus supports an introspection API, allowing mixins and functions to reflect relative to the caller etc.
-
-
-## mixin
-
-  The `mixin` local variable is automatically assigned within function bodies,
-  containing the string "root" indicating the function is called at the root
-  level, or "block" indicating otherwise, and finally `false` if the function
-  is invoked expecting a return value.
-
-  In the following example we define `reset()` altering its behaviour when mixed in to root, another block, or a return value as used in the `foo` property below. 
-
-      reset()
-        if mixin == 'root'
-          got
-            root true
-        else if mixin
-          got 'a mixin'
-        else
-          'not a mixin'
-
-      reset()
-
-      body
-        reset()
-        foo reset()
-
-compiles to:
-
-        got {
-          root: true;
-        }
-        body {
-          foo: "not a mixin";
-          got: "a mixin";
-        }
diff --git a/node/node_modules/jade/support/stylus/docs/iteration.md b/node/node_modules/jade/support/stylus/docs/iteration.md
deleted file mode 100644 (file)
index b309840..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-
-## Iteration
-
- Stylus allows you to iterate expressions via the `for/in` construct, taking the form of:
-      for <val-name> [, <key-name>] in <expression>
-
-For example:
-
-    body
-      for num in 1 2 3
-        foo num
-
-yields:
-
-      body {
-        foo: 1;
-        foo: 2;
-        foo: 3;
-      }
-
-The example below shows how to use the `<key-name>`:
-
-      body
-        fonts = Impact Arial sans-serif
-        for font, i in fonts
-          foo i font
-
-yielding:
-
-        body {
-          foo: 0 Impact;
-          foo: 1 Arial;
-          foo: 2 sans-serif;
-        }
-
-### Mixins
-
- We may utilize iteration within mixins to produce powerful functionality, for example we can apply expression pairs as properties using interpolation and iteration. Below we define `apply()`, conditionally utilizing all the `arguments` so that comma-delimited _and_ expression lists are supported:
-     apply(props)
-       props = arguments if length(arguments) > 1
-       for prop in props
-         {prop[0]} prop[1]
-
-     body
-       apply(one 1, two 2, three 3)
-
-     body
-       list = (one 1) (two 2) (three 3)
-       apply(list)
-
-### Functions
-
- Stylus functions may also contain for-loops, below are some example use-cases:
-
-sum:
-
-      sum(nums)
-        sum = 0
-        for n in nums
-          sum += n
-
-      sum(1 2 3)
-      // => 6
-
-join:
-
-      join(delim, args)
-        buf = ''
-        for arg, index in args
-          if index
-            buf += delim + arg
-          else
-            buf += arg
-
-      join(', ', foo bar baz)
-      // => "foo, bar, baz"
-
-### Postfix
-
- Much like `if` / `unless` may be utilized post-statement, the same can be done with `for`. Below are the same examples as above utilizing the postfix syntax:
-       sum(nums)
-         sum = 0
-         sum += n for n in nums
-
-
-       join(delim, args)
-         buf = ''
-         buf += i ? delim + arg : arg for arg, i in args
-
- We can also __return__ from within a loop, below is an example returning the
- number when `n % 2 == 0` evaluates to __true__.
-     first-even(nums)
-       return n if n % 2 == 0 for n in nums
-
-     first-even(1 3 5 5 6 3 2)
-     // => 6
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/js.md b/node/node_modules/jade/support/stylus/docs/js.md
deleted file mode 100644 (file)
index 2bcacaf..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-## JavaScript API
-
-Simply require the module, and call `render()` with the given string of stylus code, and (optional) options object. Frameworks utilizing stylus should pass the `filename` option to provide better error reporting.
-
-    var stylus = require('stylus');
-
-    stylus.render(str, { filename: 'nesting.css' }, function(err, css){
-      if (err) throw err;
-      console.log(css);
-    });
-
-We can also do the same thing in a more progressive manner:
-
-    var stylus = require('stylus');
-
-    stylus(str)
-      .set('filename', 'nesting.css')
-      .render(function(err, css){
-        // logic
-      });
-
-### .set(setting, value)
-
- Apply a setting such as a `filename`, or import `paths`:
-     .set('filename', __dirname + '/test.styl')
-     .set('paths', [__dirname, __dirname + '/mixins'])
-
-### .import(path)
-
-Defer importing of the given `path` until evaluation is performed. The example below is essentially the same as doing `@import 'mixins/vendor'` within your Stylus sheet.
-
-      var stylus = require('../')
-        , str = require('fs').readFileSync(__dirname + '/test.styl', 'utf8');
-
-      stylus(str)
-        .set('filename', __dirname + '/test.styl')
-        .import('mixins/vendor')
-        .render(function(err, css){
-        if (err) throw err;
-        console.log(css);
-      });
-
-### .define(name, fn)
-
- This method allows you to provide a JavaScript-defined function to Stylus, think of these as you would JavaScript to C++ bindings. When you have something you cannot do within Stylus, you define it in JavaScript.
-
-In our example we define four functions `add()`, `sub()`, `image-width()`, and `image-height()`. These functions must return a `Node`, this constructor and the other nodes are available via `stylus.nodes`.
-
-      var stylus = require('../')
-        , nodes = stylus.nodes
-        , utils = stylus.utils
-        , fs = require('fs');
-
-      function add(a, b) {
-        return a.operate('+', b);
-      }
-
-      function sub(a, b) {
-        return a.operate('-', b);
-      }
-
-      function imageDimensions(img) {
-        // assert that the node (img) is a String node, passing
-        // the param name for error reporting
-        utils.assertType(img, nodes.String, 'img');
-        var path = img.val;
-
-        // Grab bytes necessary to retrieve dimensions.
-        // if this was real you would do this per format,
-        // instead of reading the entire image :)
-        var data = fs.readFileSync(__dirname + '/' + path);
-
-        // GIF
-        // of course you would support.. more :)
-        if ('GIF' == data.slice(0, 3).toString()) {
-          var w = data.slice(6, 8)
-            , h = data.slice(8, 10);
-          w = w[1] << 8 | w[0];
-          h = h[1] << 8 | h[0];
-        }
-
-        return [w, h];
-      }
-
-      function imageWidth(img) {
-        return new nodes.Unit(imageDimensions(img)[0]);
-      }
-
-      function imageHeight(img) {
-        return new nodes.Unit(imageDimensions(img)[1]);
-      }
-
-      stylus(str)
-        .set('filename', 'js-functions.styl')
-        .define('add', add)
-        .define('sub', sub)
-        .define('image-width', imageWidth)
-        .define('image-height', imageHeight)
-        .render(function(err, css){
-          if (err) throw err;
-          console.log(css);
-        });
-
- For further reference until documentation is complete please reference the following files:
-   - lib/nodes/*
-   - lib/utils.js
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/keyframes.md b/node/node_modules/jade/support/stylus/docs/keyframes.md
deleted file mode 100644 (file)
index 48ee6c4..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-
-## @keyframes
-
- Stylus supports the `@keyframes` at-rule, which is converted to `@-webkit-keyframes` when compiled:
-
-
-     @keyframes pulse
-       0%
-         background-color red
-         opacity 1.0
-         -webkit-transform scale(1.0) rotate(0deg)
-       33%
-         background-color blue
-         opacity 0.75
-         -webkit-transform scale(1.1) rotate(-5deg)
-       67%
-         background-color green
-         opacity 0.5
-         -webkit-transform scale(1.1) rotate(5deg)
-       100%
-         background-color red
-         opacity 1.0
-         -webkit-transform scale(1.0) rotate(0deg)
-
-yielding:
-
-      @-webkit-keyframes pulse {
-        0% {
-          background-color: red;
-          opacity: 1;
-          -webkit-transform: scale(1) rotate(0deg);
-        }
-
-        33% {
-          background-color: blue;
-          opacity: 0.75;
-          -webkit-transform: scale(1.1) rotate(-5deg);
-        }
-
-        67% {
-          background-color: green;
-          opacity: 0.5;
-          -webkit-transform: scale(1.1) rotate(5deg);
-        }
-
-        100% {
-          background-color: red;
-          opacity: 1;
-          -webkit-transform: scale(1) rotate(0deg);
-        }
-
-      }
diff --git a/node/node_modules/jade/support/stylus/docs/literal.md b/node/node_modules/jade/support/stylus/docs/literal.md
deleted file mode 100644 (file)
index 52f84c7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-## Literal CSS
-
- If for any reason Stylus cannot accommodate a specific need, you can always resort to literal css via `@css`:
-     
-     @css {
-       body {
-         font: 14px;
-       }
-     }
-
-compiling to:
-
-    body {
-      font: 14px;
-    }
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/media.md b/node/node_modules/jade/support/stylus/docs/media.md
deleted file mode 100644 (file)
index 5603c4f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-## @media
-
- The `@media` works just as it does within regular css, however with Stylus block notation:
-
-     @media print
-       #header
-       #footer
-         display none
-
-yielding:
-
-      @media print {
-        #header,
-        #footer {
-          display: none;
-        }
-      }
diff --git a/node/node_modules/jade/support/stylus/docs/middleware.md b/node/node_modules/jade/support/stylus/docs/middleware.md
deleted file mode 100644 (file)
index 1aa414e..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-## Connect Middleware
-
- Stylus ships with Connect middleware for auto-compiling Stylus sheets when modified.
-
-## stylus.middleware(options)
-
- Return Connect middleware with the given `options`.
-
-#### Options
-
-      `force`     When __true__ styles will always re-compile
-      `src`       Source directory used to find .styl files
-      `dest`      Destination directory used to output .css files
-                  when undefined defaults to `src`.
-      `compress`  Whether the output .css files should be compressed
-      `compile`   Custom compile function, accepting the arguments
-                  `(str, path)` returning the renderer.
-
-#### Examples
- Here we set up the custom compile function so that we may
- alter the renderer by providing additional settings.
- By default the compile function simply sets the `filename`
- and renders the CSS.
-        function compile(str, path) {
-          return stylus(str)
-            .import(__dirname + '/css/mixins/blueprint')
-            .import(__dirname + '/css/mixins/css3')
-            .set('filename', path)
-            .set('warn', true)
-            .set('compress', true);
-        }
- Pass the middleware to Connect, grabbing .styl files from this directory
- and saving .css files to _./public_. Also supplying our custom `compile` function.
- Following that we have a `staticProvider` layer setup to serve the .css
- files generated by Stylus.
-        var stylus = require('stylus');
-        var server = connect.createServer(
-            stylus.middleware({
-                src: __dirname
-              , dest: __dirname + '/public'
-              , compile: compile
-            })
-          , connect.staticProvider(__dirname + '/public')
-        );
-
- When `force` is used, the styles will be unconditionally re-compiled, however
- even without this option the Stylus middleware is smart enough to detect changes in `@import`ed files.
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/mixins.md b/node/node_modules/jade/support/stylus/docs/mixins.md
deleted file mode 100644 (file)
index 5ec7a73..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-
-## Mixins
-
-Both mixins and functions are defined in the same manor, however they are applied in different ways. For example we have a `border-radius(n)` function defined below, which is invoked as a _mixin_, aka a statement rather than part of an expression.
-
-When `border-radius()` is invoked within a selector, the properties are expanded and copied into the selector.
-
-    border-radius(n)
-      -webkit-border-radius n
-      -moz-border-radius n
-      border-radius n
-
-    form input[type=button]
-      border-radius(5px)
-
-compiles to:
-
-    form input[type=button] {
-      -webkit-border-radius: 5px;
-      -moz-border-radius: 5px;
-      -webkit-border-radius: 5px;
-      -moz-border-radius: 5px;
-      border-radius: 5px;
-    }
-
-When utilizing mixins, we can omit the parens all together, providing is with fantastic transparent vendor property support:
-
-    border-radius(n)
-      -webkit-border-radius n
-      -moz-border-radius n
-      border-radius n
-
-    form input[type=button]
-      border-radius 5px
-
-Note that the `border-radius` within our mixin is treated as a property, and not a recursive function invocation. To take this further we we may utilize the automatic `arguments` local variable, containing the expression passed, allowing more than one value to be passed:
-
-    border-radius()
-      -webkit-border-radius arguments
-      -moz-border-radius arguments
-      border-radius arguments
-
-now allowing us to pass values such as `border-radius 1px 2px / 3px 4px`.
-
-Another great example of this, is adding transparent support for vendor specifics such as `opacity` support for IE:
-
-        support-for-ie ?= true
-
-        opacity(n)
-          opacity n
-          if support-for-ie
-            filter unquote('progid:DXImageTransform.Microsoft.Alpha(Opacity=' + round(n * 100) + ')')
-
-        #logo
-          &:hover
-            opacity 0.5
-
-rendering:
-
-        #logo:hover {
-          opacity: 0.5;
-          filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
-        }
-
-### Parent References
-
- Mixins may utilize the parent reference character `&`, acting on the parent instead of further nesting. For example lets say we wish to create a `stripe(even, odd)` mixin for striping table row, we provide both `even` and `odd` with default color values, and assign the `background-color` property on the row. Nested within the `tr` we use `&` to reference the `tr`, providing the `even` color.
-     stripe(even = #fff, odd = #eee)
-       tr
-         background-color odd
-         &.even
-         &:nth-child(even)
-           background-color even
-
-We may then utilize the mixin as shown below:
-
-     table
-       stripe()
-       td
-         padding 4px 10px
-
-     table#users
-       stripe(#303030, #494848)
-       td
-         color white
-
-Another way to define the `stripe()` mixin without parent reference:
-
-    stripe(even = #fff, odd = #eee)
-      tr
-        background-color odd
-      tr.even
-      tr:nth-child(even)
-        background-color even
-
-If we wished, we could invoke `stripe()` as if it were a property:
-
-    stripe #fff #000
-
-### Mixing Mixins in Mixins
-
- Mixins can of course utilize other mixins, to build up their own selector's and properties. For example, below we create `comma-list()` to inline (via `inline-list()`) and comma-separate an un-ordered list.
-     inline-list()
-       li
-         display inline
-
-     comma-list()
-       inline-list()
-       li
-         &:after
-           content ', '
-         &:last-child:after
-           content ''
-
-     ul
-       comma-list()
-
-rendering:
-
-    ul li:after {
-      content: ", ";
-    }
-    ul li:last-child:after {
-      content: "";
-    }
-    ul li {
-      display: inline;
-    }
-
diff --git a/node/node_modules/jade/support/stylus/docs/operators.md b/node/node_modules/jade/support/stylus/docs/operators.md
deleted file mode 100644 (file)
index b2a22d2..0000000
+++ /dev/null
@@ -1,418 +0,0 @@
-
-## Operator Precedence
-
-Below is the operator precedence table, highest to lowest:
-
-     []
-     ! ~ + -
-     is defined
-     ** * / %
-     + -
-     ... ..
-     <= >= < >
-     in
-     == is != is not
-     is a
-     && and || or
-     ?:
-     = ?= += -= *= /= %=
-     not
-     if unless
-
-## Unary Operators
-
-The following unary operators are available, `!`, `not`, `-`, `+`, and `~`.
-
-    !0
-    // => true
-    
-    !!0
-    // => false
-
-    !1
-    // => false
-    
-    !!5px
-    // => true
-
-    -5px
-    // => -5px
-    
-    --5px
-    // => 5px
-
-    not true
-    // => false
-    
-    not not true
-    // => true
-    
-The logical `not` operator has low precedence, therefore the following example could be replaced with
-
-    a = 0
-    b = 1
-    
-    !a and !b
-    // => false
-    // pased as: (!a) and (!b)
-
-with:
-
-    not a or b
-    // => false
-    // parsed as: not (a or b)
-
-## Binary Operators
-
-### Subscript []
-
- The subscript operator allows us to grab a value in an expression via index. Parenthesized expressions may act as tuples, so for example `(15px 5px)`, `(1 2 3)`.
- Below is an example where we utilize tuples for error handling, showing the versatility of such a construct. As 
-     add(a, b)
-       if a is a 'unit' and b is a 'unit'
-         a + b
-       else
-         (error 'a and b must be units!')
-
-     body
-       padding add(1,'5')
-       // => padding: error "a and b must be units";
-       
-       padding add(1,'5')[0]
-       // => padding: error;
-       
-       padding add(1,'5')[0] == error
-       // => padding: true;
-
-       padding add(1,'5')[1]
-       // => padding: "a and b must be units";
-
- A more complex example, invoking the `error()` built-in function with the error message returned, when the ident (the first value) equals `error`.
-     if (val = add(1,'5'))[0] == error
-       error(val[1])
-
-## Range .. ...
-
- Both the inclusive (`..`) and exclusive (`...`) range operators are provided, expanding to expressions:
-     1..5
-     // => 1 2 3 4 5
-
-     1...5
-     // => 1 2 3 4
-
-### Additive: + -
-
-multiplicative and additive binary operators work as expected, and type conversion is applied within unit type classes, or default to the literal value. For example if we perform `5s - 2px` we will get `3s`.
-
-    15px - 5px
-    // => 10px
-    
-    5 - 2
-    // => 3
-    
-    5in - 50mm
-    // => 3.031in
-    
-    5s - 1000ms
-    // => 4s
-    
-    20mm + 4in
-    // => 121.6mm
-
-    "foo " + "bar"
-    // => "foo bar"
-
-    "num " + 15
-    // => "num 15"
-
-We can also operator on colors, and values are clamped appropriately.
-
-    #fff - #111
-    => #eee
-    
-    #111 + #fco
-    // => #fd1
-    
-    #fff - rgba(255,0,0,0.3)
-    // => rgba(0,255,255,0.7)
-    
-    #fff / 2
-    // => #808080
-    
-    #fff / rgb(2,0,4)
-    // #80ff40
-
-### Multiplicative: / * %
-
-    2000ms + (1s * 2)
-    // => 4ms
-
-    5s / 2
-    // => 2.5s
-
-    4 % 2
-    // => 0
-
-When using `/` within a property value you must wrap with parens. The following for example is taken literally, to support css line-height:
-
-    font: 14px/1.5;
-
-whereas the following is evaluated, dividing `14px` by `1.5`:
-
-    font: (14px/1.5);
-
-this exception is _only_ required for the `/` operator.
-
-### Exponent: **
-
-The Exponent operator:
-
-    2 ** 8
-    // => 256
-
-### Equality: == != >= <= > <
-
-Equality operators can be used to equate units, colors, strings, and even identifiers. This is a powerful concept, as even arbitrary identifiers such as as `wahoo` can be utilized as atoms, a function could return `yes` or `no` instead of `true` or `false` (although not advised). 
-
-    5 == 5
-    // => true
-    
-    10 < 5
-    // => true
-    
-    #fff == #fff
-    // => true
-    
-    true == false
-    // => false
-    
-    wahoo == yay
-    // => false
-    
-    wahoo == wahoo
-    // => true
-    
-    "test" == "test"
-    // => true
-
-    true is true
-    // => true
-
-    'hey' is not 'bye'
-    // => true
-
-    'hey' isnt 'bye'
-    // => true
-
-Only exact values match, for example `0 == false`, and `null == false` are both `false`.
-
-Aliases:
-
-    ==    is
-    !=    is not
-    !=    isnt
-
-## Truthfulness
-
- Nearly everything within Stylus resolves to `true`, including units with a suffix, for example even `0%`, `0px`, etc will resolve to `true`, since commonly in Stylus a mixin or function may accept such units as valid, however `0` itself is `false` in terms of arithmetic.
-
-`true` examples:
-
-      0% 
-      0px
-      1px 
-      -1
-      -1px
-      hey
-      'hey'
-
-`false` examples:
-
-     0 
-     null
-     false
-     ''
-
-### Logical Operators: && || and or
-
-Logical operators `&&` and `||` are aliased `and` / `or` which apply the same precedence.
-
-    5 && 3
-    // => 3
-    
-    0 || 5
-    // => 5
-    
-    0 && 5
-    // => 0
-    
-    #fff is a 'rgba' and 15 is a 'unit'
-    // => true
-
-### Existence Operator: in
-
- Checks for the existence of the _left-hand_ operand within the _right-hand_ expression.
-
-Simple examples:
-
-      nums = 1 2 3
-      1 in nums
-      // => true
-
-      5 in nums
-      // => false
-
-Some undefined identifiers:
-
-      words = foo bar baz
-      bar in words
-      // => true
-
-      HEY in words
-      // => false
-
-Works with tuples too:
-
-      vals = (error 'one') (error 'two')
-      error in vals
-      // => false
-      
-      (error 'one') in vals
-      // => true
-
-      (error 'two') in vals
-      // => true
-
-      (error 'something') in vals
-      // => false
-
-Example usage in mixin:
-
-      pad(types = padding, n = 5px)
-        if padding in types
-          padding n
-        if margin in types
-          margin n
-
-      body
-        pad()
-
-      body
-        pad(margin)
-
-      body
-        pad(padding margin, 10px)
-
-yielding:
-
-      body {
-        padding: 5px;
-      }
-      body {
-        margin: 5px;
-      }
-      body {
-        padding: 10px;
-        margin: 10px;
-      }
-
-### Conditional Assignment: ?=
-
-The conditional assignment operator `?=` lets us define variables without clobbering old values (when present). This operator expands to an `is defined` binary operation within a ternary, for example the following are equivalent:
-
-    color ?= white
-    color = color is defined ? color : white
-
-For example when using `=` we simply re-assign:
-
-    color = white
-    color = black
-    
-    color
-    // => black
-
-However when using `?=` our second attempt fails since the variable is already defined:
-
-    color = white
-    color ?= black
-    
-    color
-    // => white
-
-### Instance Check: is a
-
-Stylus provides a binary operator named `is a` used to type check.
-
-    15 is a 'unit'
-    // => true
-    
-    #fff is a 'rgba'
-    // => true
-    
-    15 is a 'rgba'
-    // => false
-
-Alternatively we could use the `type()` BIF:
-
-    type(#fff) == 'rgba'
-    // => true                                                                            
-
-'color' is the one special-case, evaluating to true when the
-left-hand operand is an `RGBA` or `HSLA` node.
-
-### Variable Definition: is defined
-
-This pseudo binary operator does not accept a right-hand operator, and does _not_ evaluate the left. This allows us to check if a variable has a value assigned to it.
-
-    foo is defined
-    // => false
-    
-    foo = 15px
-    foo is defined
-    // => true
-    
-    #fff is defined
-    // => 'invalid "is defined" check on non-variable #fff'
-
-Alternatively one can use the `lookup(name)` built-in function to do this, or to perform dynamic lookups:
-
-    name = 'blue'
-    lookup('light-' + name)
-    // => null
-    
-    light-blue = #80e2e9
-    lookup('light-' + name)
-    // => #80e2e9
-
-This operator is essential, as an undefined identifier is still a truthy value. For example:
-
-    body
-      if ohnoes
-        padding 5px
-
-_will_ yield the following css when undefined:
-
-    body {
-      padding: 5px;
-    }
-
-however this will be safe:
-
-    body
-      if ohnoes is defined
-        padding 5px
-
-## Ternary
-
-The ternary operator works as we would expect in most languages, being the only operator with three operands, the _condition_ expression, the _truth_ expression and the _false_ expression.
-
-    num = 15
-    num ? unit(num, 'px') : 20px
-    // => 15px
-
-
diff --git a/node/node_modules/jade/support/stylus/docs/selectors.md b/node/node_modules/jade/support/stylus/docs/selectors.md
deleted file mode 100644 (file)
index 4afb073..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-
-## Selectors
-
-### Indentation
-
-Stylus is "pythonic" aka indentation-based. Whitespace is significant, so we substitute { and } with an _indent_, and an _outdent_ as shown below:
-
-    body
-      color white
-
-which compiles to:
-
-    body {
-      color: #fff;
-    }
-
-Optionally if preferred we may utilize colons to separate properties and their values:
-
-    body
-      color: white
-
-### Rule Sets
-
-Stylus, just like css allows you to define properties for several selectors at once through comma separation.
-
-    textarea, input
-      border 1px solid #eee
-
-The same can be done with a newline:
-
-    textarea
-    input
-      border 1px solid #eee
-
-both compiling to:
-
-    textarea,
-    input {
-      border: 1px solid #eee;
-    }
-
-The one exception to this rule, are selectors that look like properties, for example `foo bar baz` in the following may be a property, or a selector:
-
-    foo bar baz
-    > input
-      border 1px solid
-
-so for this reason, or if simply preferred we may trail with a comma:
-
-    foo bar baz,
-    form input,
-    > a
-      border 1px solid
-
-### Parent Reference
-
-The `&` character references the parent selector(s). In the example below our two selectors `textarea`, and `input` both alter the `color` on the `:hover` pseudo selector. 
-
-    textarea
-    input
-      color #A7A7A7
-      &:hover
-        color #000
-
-compiles to:
-
-    textarea,
-    input {
-      color: #a7a7a7;
-    }
-    textarea:hover,
-    input:hover {
-      color: #000;
-    }
-
-below is an example providing a simple `2px` border for internet exploder utilizing the parent reference within a mixin:
-
-      box-shadow()
-        -webkit-box-shadow arguments
-        -moz-box-shadow arguments
-        box-shadow arguments
-        html.ie8 &,
-        html.ie7 &,
-        html.ie6 &
-          border 2px solid arguments[length(arguments) - 1]
-
-      body
-        #login
-          box-shadow 1px 1px 3px #eee
-
-yielding:
-
-      body #login {
-        -webkit-box-shadow: 1px 1px 3px #eee;
-        -moz-box-shadow: 1px 1px 3px #eee;
-        box-shadow: 1px 1px 3px #eee;
-      }
-      html.ie8 body #login,
-      html.ie7 body #login,
-      html.ie6 body #login {
-        border: 1px solid #eee;
-      }
-
-### Disambiguation
-
-Expressions such as `padding - n` could be interpreted both as a subtraction operation, as well as a property with an unary minus. To disambiguate we can wrap the expression with parens:
-
-    pad(n)
-      padding (- n)
-
-    body
-      pad(5px)
-
-compiles to:
-
-    body {
-      padding: -5px;
-    }
-
-however this is only true in functions, since functions act both as mixins, or calls with return values. For example this is fine, and will yield the same results as above:
-
-    body
-      padding -5px
-
-Have weird property values that Stylus cannot process? `unquote()` can help you out:
-
-    filter unquote('progid:DXImageTransform.Microsoft.BasicImage(rotation=1)')
-
-yields:
-
-    filter progid:DXImageTransform.Microsoft.BasicImage(rotation=1)
-    
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/textmate.md b/node/node_modules/jade/support/stylus/docs/textmate.md
deleted file mode 100644 (file)
index b29e148..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-## TextMate Bundle
-
- Stylus ships with a TextMate bundle, located within `./editors`. To install simply execute `make install-bundle`, or place `./editors/Stylus.tmbundle` in the appropriate location.
-
-
- ![Stylus TextMate Bundle](http://cl.ly/4CA7)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/docs/vargs.md b/node/node_modules/jade/support/stylus/docs/vargs.md
deleted file mode 100644 (file)
index fba09cb..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-
-## Rest Parameters
-
- Stylus supports rest parameters in the form of `name...`. These params consume the remaining arguments passed to a mixin or function. This is useful for example when utilizing the implicit function call support to apply vendor prefixes like `-webkit` or `-moz`.
-
-In the example below we consume all the arguments passed and simply apply them to multiple properties.
-
-     box-shadow(args...)
-       -webkit-box-shadow args
-       -moz-box-shadow args
-       box-shadow args
-
-     #login
-       box-shadow 1px 2px 5px #eee
-
-yielding:
-
-      #login {
-        -webkit-box-shadow: 1px 2px 5px #eee;
-        -moz-box-shadow: 1px 2px 5px #eee;
-        box-shadow: 1px 2px 5px #eee;
-      }
-
-If we wanted to peek at a specific argument, for example the x-offset we could simply use `args[0]`, or for example we may wish to re-define the mixin:
-
-        box-shadow(offset-x, args...)
-          got-offset-x offset-x
-          -webkit-box-shadow offset-x args
-          -moz-box-shadow offset-x args
-          box-shadow offset-x args
-
-        #login
-          box-shadow 1px 2px 5px #eee
-
-yielding:
-
-        #login {
-          got-offset-x: 1px;
-          -webkit-box-shadow: 1px 2px 5px #eee;
-          -moz-box-shadow: 1px 2px 5px #eee;
-          box-shadow: 1px 2px 5px #eee;
-        }
-
-### arguments
-
-  The `arguments` variable is injected into mixin and function bodies, containing the exact expression passed. This is useful for several reasons, primarily for vendor support, as you get the _exact_ expression, commas and all.
-
-  For example, if we use a rest param, the comma is simply consumed since it is an expression delimiter:
-  
-      box-shadow(args...)
-        -webkit-box-shadow args
-        -moz-box-shadow args
-        box-shadow args
-
-      #login
-        box-shadow #ddd 1px 1px, #eee 2px 2px 
-
-yielding slightly unexpected results:
-
-      #login {
-        -webkit-box-shadow: #ddd 1px 1px #eee 2px 2px;
-        -moz-box-shadow: #ddd 1px 1px #eee 2px 2px;
-        box-shadow: #ddd 1px 1px #eee 2px 2px;
-      }
-
-Let's redefine the mixin using `arguments`:
-
-      box-shadow()
-        -webkit-box-shadow arguments
-        -moz-box-shadow arguments
-        box-shadow arguments
-
-      body
-        box-shadow #ddd 1px 1px, #eee 2px 2px
-
-now yielding the desired result:
-
-      body {
-        -webkit-box-shadow: #ddd 1px 1px, #eee 2px 2px;
-        -moz-box-shadow: #ddd 1px 1px, #eee 2px 2px;
-        box-shadow: #ddd 1px 1px, #eee 2px 2px;
-      }
-
diff --git a/node/node_modules/jade/support/stylus/docs/variables.md b/node/node_modules/jade/support/stylus/docs/variables.md
deleted file mode 100644 (file)
index 28d595f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-## Variables
-
-We may assign expressions to variables and use them throughout our stylesheet:
-
-     font-size = 14px
-
-     body
-       font font-size Arial, sans-serif
-
-compiles to:
-
-     body {
-       font: 14px Arial, sans-serif;
-     }
-
-Variables can even consist of an expression list:
-
-    font-size = 14px
-    font = font-size "Lucida Grande", Arial
-
-    body
-      font font sans-serif
-
-compiles to:
-
-    body {
-      font: 14px "Lucida Grande", Arial sans-serif;
-    }
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/editors/Stylus.tmbundle/Syntaxes/Stylus.tmLanguage b/node/node_modules/jade/support/stylus/editors/Stylus.tmbundle/Syntaxes/Stylus.tmLanguage
deleted file mode 100644 (file)
index 749ee49..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>fileTypes</key>
-       <array>
-               <string>styl</string>
-               <string>stylus</string>
-       </array>
-       <key>name</key>
-       <string>Stylus</string>
-       <key>patterns</key>
-       <array>
-               <dict>
-                       <key>match</key>
-                       <string>^ *(&amp;|)</string>
-                       <key>name</key>
-                       <string>variable.language.stylus</string>
-               </dict>
-               <dict>
-                       <key>match</key>
-                       <string>(arguments)</string>
-                       <key>name</key>
-                       <string>variable.language.stylus</string>
-               </dict>
-               <dict>
-                       <key>match</key>
-                       <string>@([-\w]+)</string>
-                       <key>name</key>
-                       <string>keyword.stylus</string>
-               </dict>
-               <dict>
-                       <key>captures</key>
-                       <dict>
-                               <key>1</key>
-                               <dict>
-                                       <key>name</key>
-                                       <string>punctuation.definition.entity.stylus</string>
-                               </dict>
-                       </dict>
-                       <key>match</key>
-                       <string>(\.)[a-zA-Z0-9_-]+</string>
-                       <key>name</key>
-                       <string>entity.other.attribute-name.class.stylus</string>
-               </dict>
-               <dict>
-                       <key>captures</key>
-                       <dict>
-                               <key>1</key>
-                               <dict>
-                                       <key>name</key>
-                                       <string>punctuation.definition.entity.stylus</string>
-                               </dict>
-                       </dict>
-                       <key>match</key>
-                       <string>(:+)\b(after|before|first-child|first-letter|first-line|selection)\b</string>
-                       <key>name</key>
-                       <string>entity.other.attribute-name.pseudo-element.stylus</string>
-               </dict>
-               <dict>
-                       <key>captures</key>
-                       <dict>
-                               <key>1</key>
-                               <dict>
-                                       <key>name</key>
-                                       <string>punctuation.definition.entity.stylus</string>
-                               </dict>
-                       </dict>
-                       <key>match</key>
-                       <string>(:)\b(active|hover|link|visited|focus)\b</string>
-                       <key>name</key>
-                       <string>entity.other.attribute-name.pseudo-class.stylus</string>
-               </dict>
-               <dict>
-                       <key>captures</key>
-                       <dict>
-                               <key>1</key>
-                               <dict>
-                                       <key>name</key>
-                                       <string>punctuation.definition.entity.css</string>
-                               </dict>
-                       </dict>
-                       <key>match</key>
-                       <string>(#)[a-zA-Z][a-zA-Z0-9_-]*</string>
-                       <key>name</key>
-                       <string>entity.other.attribute-name.id.stylus</string>
-               </dict>
-               <dict>
-                       <key>match</key>
-                       <string>\b(!important|for|in|return|true|false|null|if|else|unless|return)\b</string>
-                       <key>name</key>
-                       <string>keyword.control.stylus</string>
-               </dict>
-               <dict>
-                       <key>begin</key>
-                       <string>"</string>
-                       <key>end</key>
-                       <string>"</string>
-                       <key>name</key>
-                       <string>string.quoted.double.stylus</string>
-               </dict>
-               <dict>
-                       <key>begin</key>
-                       <string>'</string>
-                       <key>end</key>
-                       <string>'</string>
-                       <key>name</key>
-                       <string>string.quoted.single.stylus</string>
-               </dict>
-               <dict>
-                       <key>begin</key>
-                       <string>/\*</string>
-                       <key>captures</key>
-                       <dict>
-                               <key>0</key>
-                               <dict>
-                                       <key>name</key>
-                                       <string>punctuation.definition.comment.js</string>
-                               </dict>
-                       </dict>
-                       <key>end</key>
-                       <string>\*/</string>
-                       <key>name</key>
-                       <string>comment.block.js</string>
-               </dict>
-               <dict>
-                       <key>match</key>
-                       <string>(?:\b(\d+))|(#[a-fA-F0-9]+)</string>
-                       <key>name</key>
-                       <string>constant.numeric.stylus</string>
-               </dict>
-               <dict>
-                       <key>captures</key>
-                       <dict>
-                               <key>1</key>
-                               <dict>
-                                       <key>name</key>
-                                       <string>punctuation.definition.comment.stylus</string>
-                               </dict>
-                       </dict>
-                       <key>match</key>
-                       <string>(?:^[ \t]+)?(\/\/).*$\n?</string>
-                       <key>name</key>
-                       <string>comment.line.stylus</string>
-               </dict>
-               <dict>
-                       <key>captures</key>
-                       <dict>
-                               <key>1</key>
-                               <dict>
-                                       <key>name</key>
-                                       <string>entity.name.function.stylus</string>
-                               </dict>
-                       </dict>
-                       <key>match</key>
-                       <string>([-a-zA-Z_][-\w]*)?(\()</string>
-                       <key>name</key>
-                       <string>meta.function.stylus</string>
-               </dict>
-       </array>
-       <key>scopeName</key>
-       <string>source.stylus</string>
-       <key>uuid</key>
-       <string>60519324-6A3A-4382-9E0B-546993A3869A</string>
-</dict>
-</plist>
diff --git a/node/node_modules/jade/support/stylus/editors/Stylus.tmbundle/info.plist b/node/node_modules/jade/support/stylus/editors/Stylus.tmbundle/info.plist
deleted file mode 100644 (file)
index e0e962b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>name</key>
-       <string>Stylus</string>
-       <key>uuid</key>
-       <string>DD7889E4-2ACA-4DF5-838F-FC9D7AEAF3F1</string>
-</dict>
-</plist>
diff --git a/node/node_modules/jade/support/stylus/examples/arithmetic.js b/node/node_modules/jade/support/stylus/examples/arithmetic.js
deleted file mode 100644 (file)
index 9658fae..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/arithmetic.styl', 'utf8');
-
-css.render(str, { filename: 'arithmetic.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/arithmetic.styl b/node/node_modules/jade/support/stylus/examples/arithmetic.styl
deleted file mode 100644 (file)
index 4c9cbd1..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-font-families = "Lucida Grande", Arial, sans-serif
-font-size = 14px
-primary-color = #3a3a3a
-width = 800px
-pad = 20px
-
-body
-  font font-size/1.5 font-families
-  background white
-  color primary-color
-
-h1
-  font-size font-size * (5 - 3)
-  color primary-color + #030303
-
-h2
-  color primary-color - rgba(0,0,0,0.5)
-
-#wrapper
-  width width
-
-.side-bar
-  padding pad
-  width (width / 3) - pad
-  // 6
-  height 3 - - - - 3
-  // 7
-  height 1 + 2 * 3
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/basic.js b/node/node_modules/jade/support/stylus/examples/basic.js
deleted file mode 100644 (file)
index a20e5ee..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/basic.styl', 'utf8');
-
-css.render(str, { filename: 'basic.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/basic.styl b/node/node_modules/jade/support/stylus/examples/basic.styl
deleted file mode 100644 (file)
index 353ef05..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-body a
-  font 12px/1.3 "Lucida Grande", Arial, sans-serif
-  background black
-  color #ccc
-
-form input
-  padding 5px
-  border 1px solid
diff --git a/node/node_modules/jade/support/stylus/examples/builtins.js b/node/node_modules/jade/support/stylus/examples/builtins.js
deleted file mode 100644 (file)
index ba37808..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/builtins.styl', 'utf8');
-
-css.render(str, { filename: 'builtins.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/builtins.styl b/node/node_modules/jade/support/stylus/examples/builtins.styl
deleted file mode 100644 (file)
index 91e043a..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-// color manipulation
-
-body
-  color darken(#eee, 50%)
-  color darken-by(#eee, 50%)
-  color #eee - rgba(100,0,0,0.5)
-  color rgba(#eee,.5)
-
-// expression node access
-
-body
-  list = (one 1) (two 2) (three 3)
-  foo last(list)
-
-// pseudo hashes
-
-get(hash, key)
-  return pair[1] if pair[0] == key for pair in hash
-
-body
-  hash = (one 1) (two 2) (three 3)
-  foo get(hash, two)
-  foo get(hash, one)
-  foo get(hash, none) == null
-  foo length(hash)
-
-// color components
-
-body
-  foo red(#c00)
-  foo lightness(#c00)
-
-// units
-
-body
-  foo unit(15%)
-  foo unit(15%, px)
-  foo unit(15px, '%')
-
-// math
-
-body
-  foo abs(-5)
-  foo sum(1 2 3 4)
-  foo avg(1 2 3 4)
-
-// literals
-
-body
-  foo unquote('X::MessedUp::IE.crap(here)')
-
-// inspection
-
-p(1 + 5 / 10)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/comments.js b/node/node_modules/jade/support/stylus/examples/comments.js
deleted file mode 100644 (file)
index f28270a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/comments.styl', 'utf8');
-
-css.render(str, { filename: 'comments.styl' }, function(err, css){
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/comments.styl b/node/node_modules/jade/support/stylus/examples/comments.styl
deleted file mode 100644 (file)
index 9f9ace4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-// This is a comment
-body
-  color white
-  // You can nest them as you wish
-  // and have more comments
-  // and more!
-
-/*
-We can also use multi-line comments
-like this, which are native to css
-*/
-
-form
-  /* color black */
diff --git a/node/node_modules/jade/support/stylus/examples/compress.js b/node/node_modules/jade/support/stylus/examples/compress.js
deleted file mode 100644 (file)
index e9b570f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/basic.styl', 'utf8');
-
-css.render(str, { filename: 'basic.styl', compress: true }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/conversions.js b/node/node_modules/jade/support/stylus/examples/conversions.js
deleted file mode 100644 (file)
index b48e510..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/conversions.styl', 'utf8');
-
-css.render(str, { filename: 'conversions.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/conversions.styl b/node/node_modules/jade/support/stylus/examples/conversions.styl
deleted file mode 100644 (file)
index ec3488b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-seconds(n)
-  0s + n
-
-body
-  foo 15px - 5px
-  foo 15px - 5
-  
-  // 60.8mm
-  foo 5cm - 2mm
-  foo 10mm + 2in
-  
-  // 3.54cm
-  foo 1cm + 1in
-  
-  // 3in
-  foo 5in - 5.08cm
-  
-  // 0.8s
-  foo 1s - 200ms
-  
-  // 3500ms
-  foo 1500ms + 2s
-  
-  // 3000Hz
-  foo 1000Hz + 2kHz
-  
-  // 1kHz
-  foo 3kHz - (1000Hz * 2)
-  
-  n = 30%
-  foo unit(n, 'px')
-  
-  foo seconds(1500ms)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/functions.js b/node/node_modules/jade/support/stylus/examples/functions.js
deleted file mode 100644 (file)
index db4c88a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/functions.styl', 'utf8');
-
-css.render(str, { filename: 'functions.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/functions.styl b/node/node_modules/jade/support/stylus/examples/functions.styl
deleted file mode 100644 (file)
index fa576fa..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-// ?= would allow us to define the images global before @importing 
-// the file if we were to distribute this
-
-images ?= '/images'
-
-image(path)
-  url(join('/', images path))
-
-// or
-
-image(path)
-  url(images + '/' + path)
-
-body
-  background image('foo.png')
-
-// functions can act as both mixins
-// or have a return value
-
-image(path)
-  if mixin
-    background image(path)
-  else
-    url(images + '/' + path)
-
-body
-  image('something.png')
-  background image('something.png')
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/images.js b/node/node_modules/jade/support/stylus/examples/images.js
deleted file mode 100644 (file)
index 4f5f9ed..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var stylus = require('../')
-  , nodes = stylus.nodes
-  , path = __dirname + '/images.styl'
-  , str = require('fs').readFileSync(path, 'utf8');
-
-// the paths option is merged with the general options
-// so it is completely optional, however this now allows us to use
-// url(sprite.gif) instead of url(images/sprite.gif) 
-stylus(str)
-  .set('filename', path)
-  .define('url', stylus.url({ paths: [__dirname + '/images'] }))
-  .render(function(err, css){
-    if (err) throw err;
-    console.log(css);
-  });
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/images.styl b/node/node_modules/jade/support/stylus/examples/images.styl
deleted file mode 100644 (file)
index b84b699..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-body
-  background url("http://foo.com/bar.png")
-
-#wrapper
-  background url(/images/gopher.jpg)
-
-.sprite
-  // both work due to the additional paths option
-  // passed to stylus.url()
-  background url(/images/sprite.gif)
-  background url(sprite.gif)
diff --git a/node/node_modules/jade/support/stylus/examples/images/gopher.jpg b/node/node_modules/jade/support/stylus/examples/images/gopher.jpg
deleted file mode 100644 (file)
index 9f7f12b..0000000
Binary files a/node/node_modules/jade/support/stylus/examples/images/gopher.jpg and /dev/null differ
diff --git a/node/node_modules/jade/support/stylus/examples/images/jesus.gif b/node/node_modules/jade/support/stylus/examples/images/jesus.gif
deleted file mode 100644 (file)
index 51f6522..0000000
Binary files a/node/node_modules/jade/support/stylus/examples/images/jesus.gif and /dev/null differ
diff --git a/node/node_modules/jade/support/stylus/examples/images/sprite.gif b/node/node_modules/jade/support/stylus/examples/images/sprite.gif
deleted file mode 100644 (file)
index d6b7d39..0000000
Binary files a/node/node_modules/jade/support/stylus/examples/images/sprite.gif and /dev/null differ
diff --git a/node/node_modules/jade/support/stylus/examples/implicit-functions.js b/node/node_modules/jade/support/stylus/examples/implicit-functions.js
deleted file mode 100644 (file)
index c2df4ea..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/implicit-functions.styl', 'utf8');
-
-css.render(str, { filename: 'implicit-functions.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/implicit-functions.styl b/node/node_modules/jade/support/stylus/examples/implicit-functions.styl
deleted file mode 100644 (file)
index 3921052..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-border-radius()
-  -webkit-border-radius arguments
-  -moz-border-radius arguments
-  border-radius arguments
-
-form
-  border-radius 5px
-
-a.button
-  border-radius 10px
-
-
-support-for-ie ?= true
-
-opacity(n)
-  opacity n
-  if support-for-ie
-    filter unquote('progid:DXImageTransform.Microsoft.Alpha(Opacity=' + round(n * 100) + ')')
-
-#logo
-  &:hover
-    opacity 0.5
diff --git a/node/node_modules/jade/support/stylus/examples/import.js b/node/node_modules/jade/support/stylus/examples/import.js
deleted file mode 100644 (file)
index a514721..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/import.styl', 'utf8');
-
-css.render(str, { filename: __dirname + '/import.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/import.styl b/node/node_modules/jade/support/stylus/examples/import.styl
deleted file mode 100644 (file)
index 69b1d8d..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-@import "mixins/box"
-
-body
-  pad 10px 5px
-
-body
-  pad 5px
-
-body
-  pad-x 5px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/js-functions.js b/node/node_modules/jade/support/stylus/examples/js-functions.js
deleted file mode 100644 (file)
index 9076d30..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , nodes = css.nodes
-  , str = require('fs').readFileSync(__dirname + '/js-functions.styl', 'utf8')
-  , fs = require('fs');
-
-function add(a, b) {
-  return a.operate('+', b);
-}
-
-function sub(a, b) {
-  return a.operate('-', b);
-}
-
-function imageSize(img) {
-  // assert that the node (img) is a String node, passing
-  // the param name for error reporting
-  css.utils.assertType(img, nodes.String, 'img');
-  var path = img.val;
-
-  // Grab bytes necessary to retrieve dimensions.
-  // if this was real you would do this per format,
-  // instead of reading the entire image :)
-  var data = fs.readFileSync(__dirname + '/' + path);
-
-  // GIF
-  // of course you would support.. more :)
-  if ('GIF' == data.slice(0, 3).toString()) {
-    var w = data.slice(6, 8)
-      , h = data.slice(8, 10);
-    w = w[1] << 8 | w[0];
-    h = h[1] << 8 | h[0];
-  }
-
-  // Return (w h)
-  var expr = new nodes.Expression;
-  expr.push(new nodes.Unit(w));
-  expr.push(new nodes.Unit(h));
-
-  return expr;
-}
-
-css(str)
-  .set('filename', 'js-functions.styl')
-  .define('add', add)
-  .define('sub', sub)
-  .define('image-size', imageSize)
-  .render(function(err, css){
-    if (err) throw err;
-    console.log(css);
-  });
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/js-functions.styl b/node/node_modules/jade/support/stylus/examples/js-functions.styl
deleted file mode 100644 (file)
index 8460b3c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-image-width(path)
-  return image-size(path)[0]
-
-image-height(path)
-  return image-size(path)[1]
-
-body
-  font add(5px, 10px)
-  font sub(5px, 10px)
-
-#jesus
-  width image-width('images/jesus.gif')
-  height image-height('images/jesus.gif')
-
-#jesus-2
-  width image-size('images/jesus.gif')[0]
-  height image-size('images/jesus.gif')[1]
-
-#jesus-3
-  size = image-size('images/jesus.gif')
-  width size[0]
-  height size[1]
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/literal.js b/node/node_modules/jade/support/stylus/examples/literal.js
deleted file mode 100644 (file)
index 5b80b10..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/literal.styl', 'utf8');
-
-css.render(str, { filename: 'literal.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/literal.styl b/node/node_modules/jade/support/stylus/examples/literal.styl
deleted file mode 100644 (file)
index e9a45ee..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-@css {
-  body {
-    font: 14px;
-  }
-  
-  a { text-decoration: none; }
-}
diff --git a/node/node_modules/jade/support/stylus/examples/middleware.js b/node/node_modules/jade/support/stylus/examples/middleware.js
deleted file mode 100644 (file)
index 8a500f9..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var connect = require('connect')
-  , stylus = require('../');
-
-// Setup server
-// $ curl http://localhost:3000/functions.css
-
-var server = connect.createServer(
-  stylus.middleware({
-      src: __dirname
-    , dest: __dirname + '/public'
-    , compress: true
-  }),
-  connect.static(__dirname + '/public')
-);
-
-server.listen(3000);
-console.log('server listening on port 3000');
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/mixins/box.styl b/node/node_modules/jade/support/stylus/examples/mixins/box.styl
deleted file mode 100644 (file)
index 6004d86..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-pad(x, y = x)
-  if y == x
-    padding y
-  else
-    padding y x y x
-
-pad-x(n)
-  padding-left n
-  padding-right n
-
-pad-y(n)
-  padding-top n
-  padding-bottom n
diff --git a/node/node_modules/jade/support/stylus/examples/nesting.js b/node/node_modules/jade/support/stylus/examples/nesting.js
deleted file mode 100644 (file)
index ef3e968..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/nesting.styl', 'utf8');
-
-css.render(str, { filename: 'nesting.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/nesting.styl b/node/node_modules/jade/support/stylus/examples/nesting.styl
deleted file mode 100644 (file)
index df0206d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-body
-  background #ccc
-  color #000
-
-form
-  .buttons
-    margin 10px 0
-    padding 5px
-    [type=submit]
-      padding 5px
-      border none
-  input
-    border 1px solid #ccc
diff --git a/node/node_modules/jade/support/stylus/examples/public/.gitignore b/node/node_modules/jade/support/stylus/examples/public/.gitignore
deleted file mode 100644 (file)
index 2318862..0000000
+++ /dev/null
@@ -1 +0,0 @@
-*.css
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/variables.js b/node/node_modules/jade/support/stylus/examples/variables.js
deleted file mode 100644 (file)
index cd55b88..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var css = require('../')
-  , str = require('fs').readFileSync(__dirname + '/variables.styl', 'utf8');
-
-css.render(str, { filename: 'variables.styl' }, function(err, css){
-  if (err) throw err;
-  console.log(css);
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/examples/variables.styl b/node/node_modules/jade/support/stylus/examples/variables.styl
deleted file mode 100644 (file)
index 319330c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-
-font-families = "Lucida Grande", Arial
-main-width = 80%
-main-color = #fff
-sidebar-width = main-width / 2
-
-// Mixins can use conditionals
-// to supply defaults
-unless font-families is defined
-  font-families = 'WAHOO'
-
-// Alternatively we may use ?=
-font-families ?= 'WAHOO'
-
-body
-  size = 12px
-  font size font-families, sans-serif
-  color main-color
-
-#wrapper
-  width main-width
-
-.sidebar
-  width sidebar-width
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/index.js b/node/node_modules/jade/support/stylus/index.js
deleted file mode 100644 (file)
index bd486f6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-module.exports = require('./lib/stylus');
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/colors.js b/node/node_modules/jade/support/stylus/lib/colors.js
deleted file mode 100644 (file)
index 9f465a2..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-
-/*!
- * Stylus - colors
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-module.exports = {
-    aliceblue: [240, 248, 255]
-  , antiquewhite: [250, 235, 215]
-  , aqua: [0, 255, 255]
-  , aquamarine: [127, 255, 212]
-  , azure: [240, 255, 255]
-  , beige: [245, 245, 220]
-  , bisque: [255, 228, 196]
-  , black: [0, 0, 0]
-  , blanchedalmond: [255, 235, 205]
-  , blue: [0, 0, 255]
-  , blueviolet: [138, 43, 226]
-  , brown: [165, 42, 42]
-  , burlywood: [222, 184, 135]
-  , cadetblue: [95, 158, 160]
-  , chartreuse: [127, 255, 0]
-  , chocolate: [210, 105, 30]
-  , coral: [255, 127, 80]
-  , cornflowerblue: [100, 149, 237]
-  , cornsilk: [255, 248, 220]
-  , crimson: [220, 20, 60]
-  , cyan: [0, 255, 255]
-  , darkblue: [0, 0, 139]
-  , darkcyan: [0, 139, 139]
-  , darkgoldenrod: [184, 132, 11]
-  , darkgray: [169, 169, 169]
-  , darkgreen: [0, 100, 0]
-  , darkgrey: [169, 169, 169]
-  , darkkhaki: [189, 183, 107]
-  , darkmagenta: [139, 0, 139]
-  , darkolivegreen: [85, 107, 47]
-  , darkorange: [255, 140, 0]
-  , darkorchid: [153, 50, 204]
-  , darkred: [139, 0, 0]
-  , darksalmon: [233, 150, 122]
-  , darkseagreen: [143, 188, 143]
-  , darkslateblue: [72, 61, 139]
-  , darkslategray: [47, 79, 79]
-  , darkslategrey: [47, 79, 79]
-  , darkturquoise: [0, 206, 209]
-  , darkviolet: [148, 0, 211]
-  , deeppink: [255, 20, 147]
-  , deepskyblue: [0, 191, 255]
-  , dimgray: [105, 105, 105]
-  , dimgrey: [105, 105, 105]
-  , dodgerblue: [30, 144, 255]
-  , firebrick: [178, 34, 34]
-  , floralwhite: [255, 255, 240]
-  , forestgreen: [34, 139, 34]
-  , fuchsia: [255, 0, 255]
-  , gainsboro: [220, 220, 220]
-  , ghostwhite: [248, 248, 255]
-  , gold: [255, 215, 0]
-  , goldenrod: [218, 165, 32]
-  , gray: [128, 128, 128]
-  , green: [0, 128, 0]
-  , greenyellow: [173, 255, 47]
-  , grey: [128, 128, 128]
-  , honeydew: [240, 255, 240]
-  , hotpink: [255, 105, 180]
-  , indianred: [205, 92, 92]
-  , indigo: [75, 0, 130]
-  , ivory: [255, 255, 240]
-  , khaki: [240, 230, 140]
-  , lavender: [230, 230, 250]
-  , lavenderblush: [255, 240, 245]
-  , lawngreen: [124, 252, 0]
-  , lemonchiffon: [255, 250, 205]
-  , lightblue: [173, 216, 230]
-  , lightcoral: [240, 128, 128]
-  , lightcyan: [224, 255, 255]
-  , lightgoldenrodyellow: [250, 250, 210]
-  , lightgray: [211, 211, 211]
-  , lightgreen: [144, 238, 144]
-  , lightgrey: [211, 211, 211]
-  , lightpink: [255, 182, 193]
-  , lightsalmon: [255, 160, 122]
-  , lightseagreen: [32, 178, 170]
-  , lightskyblue: [135, 206, 250]
-  , lightslategray: [119, 136, 153]
-  , lightslategrey: [119, 136, 153]
-  , lightsteelblue: [176, 196, 222]
-  , lightyellow: [255, 255, 224]
-  , lime: [0, 255, 0]
-  , limegreen: [50, 205, 50]
-  , linen: [250, 240, 230]
-  , magenta: [255, 0, 255]
-  , maroon: [128, 0, 0]
-  , mediumaquamarine: [102, 205, 170]
-  , mediumblue: [0, 0, 205]
-  , mediumorchid: [186, 85, 211]
-  , mediumpurple: [147, 112, 219]
-  , mediumseagreen: [60, 179, 113]
-  , mediumslateblue: [123, 104, 238]
-  , mediumspringgreen: [0, 250, 154]
-  , mediumturquoise: [72, 209, 204]
-  , mediumvioletred: [199, 21, 133]
-  , midnightblue: [25, 25, 112]
-  , mintcream: [245, 255, 250]
-  , mistyrose: [255, 228, 225]
-  , moccasin: [255, 228, 181]
-  , navajowhite: [255, 222, 173]
-  , navy: [0, 0, 128]
-  , oldlace: [253, 245, 230]
-  , olive: [128, 128, 0]
-  , olivedrab: [107, 142, 35]
-  , orange: [255, 165, 0]
-  , orangered: [255, 69, 0]
-  , orchid: [218, 112, 214]
-  , palegoldenrod: [238, 232, 170]
-  , palegreen: [152, 251, 152]
-  , paleturquoise: [175, 238, 238]
-  , palevioletred: [219, 112, 147]
-  , papayawhip: [255, 239, 213]
-  , peachpuff: [255, 218, 185]
-  , peru: [205, 133, 63]
-  , pink: [255, 192, 203]
-  , plum: [221, 160, 203]
-  , powderblue: [176, 224, 230]
-  , purple: [128, 0, 128]
-  , red: [255, 0, 0]
-  , rosybrown: [188, 143, 143]
-  , royalblue: [65, 105, 225]
-  , saddlebrown: [139, 69, 19]
-  , salmon: [250, 128, 114]
-  , sandybrown: [244, 164, 96]
-  , seagreen: [46, 139, 87]
-  , seashell: [255, 245, 238]
-  , sienna: [160, 82, 45]
-  , silver: [192, 192, 192]
-  , skyblue: [135, 206, 235]
-  , slateblue: [106, 90, 205]
-  , slategray: [119, 128, 144]
-  , slategrey: [119, 128, 144]
-  , snow: [255, 255, 250]
-  , springgreen: [0, 255, 127]
-  , steelblue: [70, 130, 180]
-  , tan: [210, 180, 140]
-  , teal: [0, 128, 128]
-  , thistle: [216, 191, 216]
-  , tomato: [255, 99, 71]
-  , turquoise: [64, 224, 208]
-  , violet: [238, 130, 238]
-  , wheat: [245, 222, 179]
-  , white: [255, 255, 255]
-  , whitesmoke: [245, 245, 245]
-  , yellow: [255, 255, 0]
-  , yellowgreen: [154, 205, 5]
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/convert/css.js b/node/node_modules/jade/support/stylus/lib/convert/css.js
deleted file mode 100644 (file)
index a1bb89f..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-
-/*!
- * Stylus - css to stylus conversion
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Convert the given `css` to stylus source.
- *
- * @param {String} css
- * @return {String}
- * @api public
- */
-
-module.exports = function(css){
-  return new Converter(css).stylus();
-};
-
-/**
- * Initialize a new `Converter` with the given `css`.
- *
- * @param {String} css
- * @api private
- */
-
-function Converter(css) {
-  var cssom = require('cssom');
-  this.css = css;
-  this.types = cssom.CSSRule;
-  this.root = cssom.parse(css);
-  this.indents = 0;
-}
-
-/**
- * Convert to stylus.
- *
- * @return {String}
- * @api private
- */
-
-Converter.prototype.stylus = function(){
-  return this.visitRules(this.root.cssRules);
-};
-
-/**
- * Return indent string.
- *
- * @return {String}
- * @api private
- */
-
-Converter.prototype.__defineGetter__('indent', function(){
-  return Array(this.indents + 1).join('  ');
-});
-
-/**
- * Visit `node`.
- *
- * @param {CSSRule} node
- * @return {String}
- * @api private
- */
-
-Converter.prototype.visit = function(node){
-  switch (node.type) {
-    case this.types.STYLE_RULE:
-      return this.visitStyle(node);
-    case this.types.MEDIA_RULE:
-      return this.visitMedia(node);
-  }
-};
-
-/**
- * Visit the rules on `node`.
- *
- * @param {CSSRule} node
- * @return {String}
- * @api private
- */
-
-Converter.prototype.visitRules = function(node){
-  var buf = '';
-  for (var i = 0, len = node.length; i < len; ++i) {
-    buf += this.visit(node[i]);
-  }
-  return buf;
-};
-
-/**
- * Visit CSSMediaRule `node`.
- *
- * @param {CSSMediaRule} node
- * @return {String}
- * @api private
- */
-
-Converter.prototype.visitMedia = function(node){
-  var buf = this.indent + '@media ';
-  for (var i = 0, len = node.media.length; i < len; ++i) {
-    buf += node.media[i];
-  }
-  buf += '\n';
-  ++this.indents;
-  buf += this.visitRules(node.cssRules);
-  --this.indents;
-  return buf;
-};
-
-/**
- * Visit CSSStyleRule `node`.`
- *
- * @param {CSSStyleRule} node
- * @return {String}
- * @api private
- */
-
-Converter.prototype.visitStyle = function(node){
-  var buf = this.indent + node.selectorText + '\n';
-  ++this.indents;
-  for (var i = 0, len = node.style.length; i < len; ++i) {
-    var prop = node.style[i]
-      , val = node.style[prop];
-    if (prop) {
-      buf += this.indent + prop + ' ' + val + '\n';
-    }
-  }
-  --this.indents;
-  return buf + '\n';
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/functions/image.js b/node/node_modules/jade/support/stylus/lib/functions/image.js
deleted file mode 100644 (file)
index ba37f1b..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-/*!
- * Stylus - plugin - url
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var utils = require('../utils')
-  , nodes = require('../nodes')
-  , fs = require('fs');
-
-/**
- * Initialize a new `Image` with the given `ctx` and `path.
- *
- * @param {Evaluator} ctx
- * @param {String} path
- * @api private
- */
-
-var Image = module.exports = function Image(ctx, path) {
-  this.ctx = ctx;
-  this.path = utils.lookup(path, ctx.paths);
-  if (!this.path) throw new Error('failed to locate file ' + path);
-};
-
-/**
- * Open the image for reading.
- *
- * @api private
- */
-
-Image.prototype.open = function(){
-  this.fd = fs.openSync(this.path, 'r');
-};
-
-/**
- * Close the file.
- *
- * @api private
- */
-
-Image.prototype.close = function(){
-  if (this.fd) fs.closeSync(this.fd);
-};
-
-/**
- * Return the type of image, supports:
- *
- *  - gif
- *  - png
- *  - jpeg
- *
- * @return {String}
- * @api private
- */
-
-Image.prototype.type = function(){
-  var type
-    , buf = new Buffer(4);
-  
-  fs.readSync(this.fd, buf, 0, 4, 0);
-
-  // GIF
-  if (0x47 == buf[0] && 0x49 == buf[1] && 0x46 == buf[2]) type = 'gif';
-
-  // PNG
-  else if (0x50 == buf[1] && 0x4E == buf[2] && 0x47 == buf[3]) type = 'png';
-
-  // JPEG
-  else if (0xff == buf[0] && 0xd8 == buf[1]) type = 'jpeg';
-
-  return type;
-};
-
-/**
- * Return image dimensions `[width, height]`.
- *
- * @return {Array}
- * @api private
- */
-
-Image.prototype.size = function(){
-  var width
-    , height
-    , type = this.type();
-
-  function uint16(b) { return b[1] << 8 | b[0]; }
-  function uint32(b) { return b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]; } 
-
-  // Determine dimensions
-  switch (type) {
-    case 'jpeg':
-      throw new Error('image-size() jpeg support not yet implemented');
-      break;
-    case 'png':
-      var buf = new Buffer(8);
-      // IHDR chunk width / height uint32_t big-endian
-      fs.readSync(this.fd, buf, 0, 8, 16);
-      width = uint32(buf);
-      height = uint32(buf.slice(4, 8));
-      break;
-    case 'gif':
-      var buf = new Buffer(4);
-      // width / height uint16_t little-endian
-      fs.readSync(this.fd, buf, 0, 4, 6);
-      width = uint16(buf);
-      height = uint16(buf.slice(2, 4));
-      break;
-  }
-
-  if ('number' != typeof width) throw new Error('failed to find width of "' + this.path + '"');
-  if ('number' != typeof height) throw new Error('failed to find height of "' + this.path + '"');
-
-  return [width, height];
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/functions/index.js b/node/node_modules/jade/support/stylus/lib/functions/index.js
deleted file mode 100644 (file)
index cd3f61c..0000000
+++ /dev/null
@@ -1,554 +0,0 @@
-
-/*!
- * Stylus - Evaluator - built-in functions
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var nodes = require('../nodes')
-  , utils = require('../utils')
-  , Image = require('./image');
-
-/**
- * Color component name map.
- */
-
-var componentMap = {
-    red: 'r'
-  , green: 'g'
-  , blue: 'b'
-  , alpha: 'a'
-  , hue: 'h'
-  , saturation: 's'
-  , lightness: 'l'
-};
-
-/**
- * Color component type map.
- */
-
-var typeMap = {
-    hue: 'deg'
-  , saturation: '%'
-  , lightness: '%'
-};
-
-/**
- * Convert the given `color` to an `HSLA` node,
- * or h,s,l,a component values.
- *
- * Examples:
- *
- *    hsla(10deg, 50%, 30%, 0.5)
- *    // => HSLA
- *
- *    hsla(#ffcc00)
- *    // => HSLA
- *
- * @param {RGBA|HSLA|Unit} h
- * @param {Unit} s
- * @param {Unit} l
- * @param {Unit} a
- * @return {HSLA}
- * @api public
- */
-
-exports.hsla = function(h,s,l,a){
-  switch (arguments.length) {
-    case 1:
-      utils.assertColor(h);
-      return h.hsla;
-    default:
-      utils.assertType(h, nodes.Unit, 'hue');
-      utils.assertType(s, nodes.Unit, 'saturation');
-      utils.assertType(l, nodes.Unit, 'lightness');
-      utils.assertType(a, nodes.Unit, 'alpha');
-      return new nodes.HSLA(h.val,s.val,l.val,a.val);
-  }
-};
-
-/**
- * Convert the given `color` to an `HSLA` node,
- * or h,s,l component values.
- *
- * Examples:
- *
- *    hsl(10, 50, 30)
- *    // => HSLA
- *
- *    hsl(#ffcc00)
- *    // => HSLA
- *
- * @param {Unit|HSLA|RGBA} h
- * @param {Unit} s
- * @param {Unit} l
- * @return {HSLA}
- * @api public
- */
-
-exports.hsl = function(h,s,l){
-  if (arguments.length > 1) {
-    return exports.hsla(h,s,l,new nodes.Unit(1));
-  }
-  utils.assertColor(h, 'color');
-  return h.hsla;
-};
-
-/**
- * Return type of `node`.
- *
- * Examples:
- * 
- *    type(12)
- *    // => 'unit'
- *
- *    type(#fff)
- *    // => 'color'
- *
- *    type(type)
- *    // => 'function'
- *
- *    type(unbound)
- *    typeof(unbound)
- *    type-of(unbound)
- *    // => 'ident'
- *
- * @param {Node} node
- * @return {String}
- * @api public
- */
-
-exports.type =
-exports.typeof =
-exports['type-of'] = function(node){
-  utils.assertPresent(node, 'expression');
-  var type = node.nodeName;
-  return new nodes.String(type);
-};
-
-/**
- * Return component `name` for the given `color`.
- *
- * @param {RGBA|HSLA} color
- * @param {String} na,e
- * @return {Unit}
- * @api public
- */
-
-exports.component = function(color, name) {
-  utils.assertColor(color, 'color');
-  utils.assertString(name, 'name');
-  var name = name.string
-    , type = typeMap[name]
-    , name = componentMap[name];
-  if (!name) throw new Error('invalid color component "' + name + '"');
-  return new nodes.Unit(color[name], type);
-};
-
-/**
- * Return the red component of the given `color`.
- *
- * Examples:
- *
- *    red(#c00)
- *    // => 204
- *
- * @param {RGBA|HSLA} color
- * @return {Unit}
- * @api public
- */
-
-exports.red = function(color){
-  return exports.component(color, new nodes.String('red'));
-};
-
-/**
- * Return the green component of the given `color`.
- *
- * Examples:
- *
- *    green(#0c0)
- *    // => 204
- *
- * @param {RGBA|HSLA} color
- * @return {Unit}
- * @api public
- */
-
-exports.green = function(color){
-  return exports.component(color, new nodes.String('green'));
-};
-
-/**
- * Return the blue component of the given `color`.
- *
- * Examples:
- *
- *    blue(#00c)
- *    // => 204
- *
- * @param {RGBA|HSLA} color
- * @return {Unit}
- * @api public
- */
-
-exports.blue = function(color){
-  return exports.component(color, new nodes.String('blue'));
-};
-
-/**
- * Return a `RGBA` from the r,g,b,a channels.
- *
- * Examples:
- *
- *    rgba(255,0,0,0.5)
- *    // => rgba(255,0,0,0.5)
- *
- *    rgba(255,0,0,1)
- *    // => #ff0000
- *
- *    rgba(#ffcc00, 0.5)
- *    // rgba(255,204,0,0.5)
- *
- * @param {Unit|RGBA|HSLA} r
- * @param {Unit} g
- * @param {Unit} b
- * @param {Unit} a
- * @return {RGBA}
- * @api public
- */
-
-exports.rgba = function(r,g,b,a){
-  switch (arguments.length) {
-    case 1:
-      utils.assertColor(r);
-      var color = r.rgba;
-      return new nodes.RGBA(
-          color.r
-        , color.g
-        , color.b
-        , color.a);
-    case 2:
-      utils.assertColor(r);
-      var color = r.rgba;
-      utils.assertType(g, nodes.Unit);
-      return new nodes.RGBA(
-          color.r
-        , color.g
-        , color.b
-        , g.val);
-    default:
-      utils.assertType(r, nodes.Unit, 'red');
-      utils.assertType(g, nodes.Unit, 'green');
-      utils.assertType(b, nodes.Unit, 'blue');
-      utils.assertType(a, nodes.Unit, 'alpha');
-      return new nodes.RGBA(
-          r.val
-        , g.val
-        , b.val
-        , a.val);
-  }
-};
-
-/**
- * Return a `RGBA` from the r,g,b channels.
- *
- * Examples:
- *
- *    rgb(255,204,0)
- *    // => #ffcc00
- *
- *    rgb(#fff)
- *    // => #fff
- *
- * @param {Unit|RGBA|HSLA} r
- * @param {Unit} g
- * @param {Unit} b
- * @return {RGBA}
- * @api public
- */
-
-exports.rgb = function(r,g,b){
-  switch (arguments.length) {
-    case 1:
-      utils.assertColor(r);
-      var color = r.rgba;
-      return new nodes.RGBA(
-          color.r
-        , color.g
-        , color.b
-        , 1);
-    default:
-      return exports.rgba(r,g,b,new nodes.Unit(1));
-  }
-};
-
-/**
- * Unquote the given `str`.
- *
- * Examples:
- *
- *    unquote("sans-serif")
- *    // => sans-serif
- *
- *    unquote(sans-serif)
- *    // => sans-serif
- *
- * @param {String|Ident} val
- * @return {Literal}
- * @api public
- */
-
-exports.unquote = function(val){
-  utils.assertString(val, 'string');
-  return new nodes.Literal(val.string);
-};
-
-/**
- * Assign `type` to the given `unit` or return `unit`'s type.
- *
- * @param {Unit} unit
- * @param {String|Ident} type
- * @return {Unit}
- * @api public
- */
-
-exports.unit = function(unit, type){
-  utils.assertType(unit, nodes.Unit, 'unit');
-
-  // Assign
-  if (type) {
-    utils.assertString(type, 'type');
-    return new nodes.Unit(unit.val, type.string);
-  } else {
-    return new nodes.String(unit.type || '');
-  }
-};
-
-/**
- * Lookup variable `name` or return Null.
- *
- * @param {String} name
- * @return {Mixed}
- * @api public
- */
-
-exports.lookup = function(name){
-  utils.assertType(name, nodes.String, 'name');
-  var node = this.lookup(name.val);
-  if (!node) return nodes.null;
-  return this.visit(node);
-};
-
-/**
- * Perform `op` on the `left` and `right` operands.
- *
- * @param {String} op
- * @param {Node} left
- * @param {Node} right
- * @return {Node}
- * @api public
- */
-
-exports.operate = function(op, left, right){
-  utils.assertType(op, nodes.String, 'op');
-  utils.assertPresent(left, 'left');
-  utils.assertPresent(right, 'right');
-  return left.operate(op.val, right);
-};
-
-/**
- * Test if `val` matches the given `pattern`.
- *
- * Examples:
- *
- *     match('^foo(bar)?', foo)
- *     match('^foo(bar)?', foobar)
- *     match('^foo(bar)?', 'foo')
- *     match('^foo(bar)?', 'foobar')
- *     // => true
- *
- *     match('^foo(bar)?', 'bar')
- *     // => false
- *
- * @param {String} pattern
- * @param {String|Ident} val
- * @return {Boolean}
- * @api public
- */
-
-exports.match = function(pattern, val){
-  utils.assertType(pattern, nodes.String, 'pattern');
-  utils.assertString(val, 'val');
-  var re = new RegExp(pattern.val);
-  return nodes.Boolean(re.test(val.string));
-};
-
-/**
- * Return length of the given `expr`.
- *
- * @param {Expression} expr
- * @return {Unit}
- * @api public
- */
-
-(exports.length = function(expr){
-  if (expr) {
-    if (expr.nodes) {
-      return new nodes.Unit(utils.unwrap(expr).nodes.length);
-    } else {
-      return new nodes.Unit(1);
-    }
-  }
-  return new nodes.Unit(0);
-}).raw = true;
-
-/**
- * Inspect the given `expr`.
- *
- * @param {Expression} expr
- * @api public
- */
-
-(exports.p = function(expr){
-  expr = utils.unwrap(expr);
-  console.log('\033[90minspect:\033[0m %s'
-    , expr.toString().replace(/^\(|\)$/g, ''));
-  return nodes.null;
-}).raw = true;
-
-/**
- * Throw an error with the given `msg`.
- *
- * @param {String} msg
- * @api public
- */
-
-exports.error = function(msg){
-  utils.assertType(msg, nodes.String, 'msg');
-  throw new Error(msg.val);
-};
-
-/**
- * Warn with the given `msg` prefixed by "Warning: ".
- *
- * @param {String} msg
- * @api public
- */
-
-exports.warn = function(msg){
-  utils.assertType(msg, nodes.String, 'msg');
-  console.warn('Warning: %s', msg.val);
-  return nodes.null;
-};
-
-/**
- * Output stack trace.
- *
- * @api public
- */
-
-exports.trace = function(){
-  console.log(this.stack);
-  return nodes.null;
-};
-
-/**
- * Return the opposites of the given `positions`.
- *
- * Examples:
- *
- *    opposite-position(top left)
- *    // => bottom right
- *
- * @param {Expression} positions
- * @return {Expression}
- * @api public
- */
-
-(exports['opposite-position'] = function(positions){
-  var expr = new nodes.Expression;
-  utils.unwrap(positions).nodes.forEach(function(pos, i){
-    utils.assertString(pos, 'position ' + i);
-    pos = (function(){ switch (pos.string) {
-      case 'top': return 'bottom';
-      case 'bottom': return 'top';
-      case 'left': return 'right';
-      case 'right': return 'left';
-      default: throw new Error('invalid position ' + pos);
-    }})();
-    expr.push(new nodes.Literal(pos));
-  });
-  return expr;
-}).raw = true;
-
-/**
- * Return the width and height of the given `img` path.
- *
- * Examples:
- *
- *    image-size('foo.png')
- *    // => 200px 100px
- *
- *    image-size('foo.png')[0]
- *    // => 200px
- *
- *    image-size('foo.png')[1]
- *    // => 100px
- *
- * @param {String} img
- * @return {Expression}
- * @api public
- */
-
-exports['image-size'] = function(img) {
-  utils.assertType(img, nodes.String, 'img');
-  var img = new Image(this, img.string);
-
-  // Read size
-  img.open();
-  var size = img.size();
-  img.close();
-
-  // Return (w h)
-  var expr = new nodes.Expression;
-  expr.push(new nodes.Unit(size[0], 'px'));
-  expr.push(new nodes.Unit(size[1], 'px'));
-
-  return expr;
-};
-
-/**
- * Apply Math `fn` to `n`
- *
- * @param {Unit} n
- * @param {String} fn
- * @return {Unit}
- * @api private
- */
-
-exports['-math'] = function(n, fn){
-  return new nodes.Unit(Math[fn.string](n.val), n.type);
-};
-
-/**
- * Adjust HSL `color` `prop` by `amount`.
- *
- * @param {RGBA|HSLA} color
- * @param {String} prop
- * @param {Unit} amount
- * @return {HSLA}
- * @api private
- */
-
-exports['-adjust'] = function(color, prop, amount){
-  var hsl = color.hsla;
-  prop = { hue: 'h', saturation: 's', lightness: 'l' }[prop.string];
-  if (!prop) throw new Error('invalid adjustment property');
-  hsl[prop] = hsl[prop] + amount.val;
-  return hsl.clone();
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/functions/index.styl b/node/node_modules/jade/support/stylus/lib/functions/index.styl
deleted file mode 100644 (file)
index 66e656a..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-
-// stringify the given arg
-
--string(arg)
-  type(arg) + ' ' + arg
-
-// require a color
-
-require-color(color)
-  unless color is a 'color' 
-    error('RGB or HSL value expected, got a ' + -string(color))
-
-// require a unit
-
-require-unit(n)
-  unless n is a 'unit'
-    error('unit expected, got a ' + -string(n))
-
-// require a string
-
-require-string(str)
-  unless str is a 'string' or str is a 'ident'
-    error('string expected, got a ' + -string(str))
-
-// apply js Math function
-
-math(n, fn) 
-  require-unit(n)
-  require-string(fn)
-  -math(n, fn)
-
-// adjust the given color's property by amount
-
-adjust(color, prop, amount)
-  require-color(color)
-  require-string(prop)
-  require-unit(amount)
-  -adjust(color, prop, amount)
-
-// Math functions
-
-abs(n) { math(n, 'abs') }
-ceil(n) { math(n, 'ceil') }
-floor(n) { math(n, 'floor') }
-round(n) { math(n, 'round') }
-min(a, b) { a < b ? a : b }
-max(a, b) { a > b ? a : b }
-
-// return the sum of the given numbers
-
-sum(nums)
-  sum = 0
-  sum += n for n in nums
-
-// return the average of the given numbers
-
-avg(nums)
-  sum(nums) / length(nums)
-
-// color components
-
-alpha(color) { component(hsl(color), 'alpha') }
-hue(color) { component(hsl(color), 'hue') }
-saturation(color) { component(hsl(color), 'saturation') }
-lightness(color) { component(hsl(color), 'lightness') }
-
-// check if n is an odd number
-
-odd(n)
-  1 == n % 2
-
-// check if n is an even number
-
-even(n)
-  0 == n % 2
-
-// check if color is light
-
-light(color)
-  lightness(color) >= 50%
-
-// check if color is dark
-
-dark(color)
-  lightness(color) < 50%
-
-// desaturate color by amount
-
-desaturate(color, amount)
-  adjust(color, 'saturation', - amount)
-
-// saturate color by amount
-
-saturate(color, amount)
-  adjust(color, 'saturation', amount)
-
-// darken by the given amount
-
-darken(color, amount)
-  adjust(color, 'lightness', - amount)
-
-// lighten by the given amount
-
-lighten(color, amount)
-  adjust(color, 'lightness', amount)
-
-// increase the current lightness value by the given amount
-
-lighten-by(color, amount)
-  l = lightness(color)
-  l = 100 if 0 == l
-  adjust(color, 'lightness', l * amount / 100)
-
-// decrease the current lightness value by the given amount
-
-darken-by(color, amount)
-  l = lightness(color)
-  adjust(color, 'lightness', - (l * amount / 100))
-
-// return the last value in the given expr
-
-last(expr)
-  expr[length(expr) - 1]
-
-// join values with the given delimiter
-
-join(delim, vals...)
-  buf = ''
-  vals = vals[0] if length(vals) == 1
-  for val, i in vals
-    buf += i ? delim + val : val
diff --git a/node/node_modules/jade/support/stylus/lib/functions/url.js b/node/node_modules/jade/support/stylus/lib/functions/url.js
deleted file mode 100644 (file)
index 66a2832..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-
-/*!
- * Stylus - plugin - url
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Compiler = require('../visitor/compiler')
-  , nodes = require('../nodes')
-  , parse = require('url').parse
-  , extname = require('path').extname
-  , utils = require('../utils')
-  , fs = require('fs');
-
-/**
- * Mime table.
- */
-
-var mimes = {
-    '.gif': 'image/gif'
-  , '.png': 'image/png'
-  , '.jpg': 'image/jpeg'
-  , '.jpeg': 'image/jpeg'
-};
-
-/**
- * Return a url() function with the given `options`.
- *
- * Options:
- *
- *    - `limit` bytesize limit defaulting to 30Kb
- *    - `paths` image resolution path(s), merged with general lookup paths
- *
- * Examples:
- *
- *    stylus(str)
- *      .set('filename', __dirname + '/css/test.styl')
- *      .define('url', stylus.url({ paths: [__dirname + '/public'] }))
- *      .render(function(err, css){ ... })
- *
- * @param {Object} options
- * @return {Function}
- * @api public
- */
-
-module.exports = function(options) {
-  options = options || {};
-
-  var sizeLimit = options.limit || 30000
-    , _paths = options.paths || [];
-
-  function url(url){
-    // Compile the url
-    var compiler = new Compiler(url);
-    compiler.isURL = true;
-    var url = url.nodes.map(function(node){
-      return compiler.visit(node);
-    }).join('');
-
-    // Parse literal 
-    var url = parse(url)
-      , ext = extname(url.pathname)
-      , mime = mimes[ext]
-      , literal = new nodes.Literal('url("' + url.href + '")')
-      , paths = _paths.concat(this.paths)
-      , founds
-      , buf;
-
-    // Not supported
-    if (!mime) return literal;
-
-    // Absolute
-    if (url.protocol) return literal;
-
-    // Lookup
-    found = utils.lookup(url.pathname, paths);
-
-    // Failed to lookup
-    if (!found) return literal;
-
-    // Read data
-    buf = fs.readFileSync(found);
-
-    // To large
-    if (buf.length > sizeLimit) return literal;
-
-    // Encode
-    return new nodes.Literal('url("data:' + mime + ';base64,' + buf.toString('base64') + '")');
-  };
-
-  url.raw = true;
-  return url;
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/lexer.js b/node/node_modules/jade/support/stylus/lib/lexer.js
deleted file mode 100644 (file)
index 0ca2e1d..0000000
+++ /dev/null
@@ -1,672 +0,0 @@
-
-/*!
- * Stylus - Lexer
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Token = require('./token')
-  , nodes = require('./nodes');
-
-/**
- * Operator aliases.
- */
-
-var alias = {
-    'and': '&&'
-  , 'or': '||'
-  , 'is': '=='
-  , 'isnt': '!='
-  , 'is not': '!='
-};
-
-/**
- * Units.
- */
-
-var units = [
-    'em'
-  , 'ex'
-  , 'px'
-  , 'mm'
-  , 'cm'
-  , 'in'
-  , 'pt'
-  , 'pc'
-  , 'deg'
-  , 'rad'
-  , 'grad'
-  , 'ms'
-  , 's'
-  , 'Hz'
-  , 'kHz'
-  , '%'].join('|');
-
-/**
- * Unit RegExp.
- */
-
-var unit = new RegExp('^(-)?(\\d+\\.\\d+|\\d+|\\.\\d+)(' + units + ')? *');
-
-/**
- * Initialize a new `Lexer` with the given `str` and `options`.
- *
- * @param {String} str
- * @param {Object} options
- * @api private
- */
-
-var Lexer = module.exports = function Lexer(str, options) {
-  options = options || {};
-  this.str = str.replace(/\r\n?/g, '\n');
-  this.stash = [];
-  this.indentStack = [];
-  this.indentRe = null;
-  this.lineno = 0;
-};
-
-/**
- * Lexer prototype.
- */
-
-Lexer.prototype = {
-  
-  /**
-   * Custom inspect.
-   */
-  
-  inspect: function(){
-    var tok
-      , tmp = this.str
-      , buf = [];
-    while ('eos' != (tok = this.next()).type) {
-      buf.push(tok.inspect());
-    }
-    this.str = tmp;
-    this.prevIndents = 0;
-    return buf.concat(tok.inspect()).join('\n');
-  },
-
-  /**
-   * Lookahead `n` tokens.
-   *
-   * @param {Number} n
-   * @return {Object}
-   * @api private
-   */
-  
-  lookahead: function(n){
-    var fetch = n - this.stash.length;
-    while (fetch-- > 0) this.stash.push(this.advance());
-    return this.stash[--n];
-  },
-  
-  /**
-   * Consume the given `len`.
-   *
-   * @param {Number|Array} len
-   * @api private
-   */
-
-  skip: function(len){
-    this.str = this.str.substr(Array.isArray(len)
-      ? len[0].length
-      : len);
-  },
-
-  /**
-   * Fetch next token including those stashed by peek.
-   *
-   * @return {Token}
-   * @api private
-   */
-
-  next: function() {
-    var tok = this.stashed() || this.advance();
-    switch (tok.type) {
-      case 'newline':
-      case 'selector':
-      case 'indent':
-        ++this.lineno;
-    }
-    tok.lineno = this.lineno;
-    return tok;
-  },
-
-  /**
-   * Fetch next token.
-   *
-   * @return {Token}
-   * @api private
-   */
-
-  advance: function() {
-    return this.eos()
-      || this.null()
-      || this.sep()
-      || this.keyword()
-      || this.urlchars()
-      || this.atrule()
-      || this.media()
-      || this.comment()
-      || this.newline()
-      || this.escaped()
-      || this.important()
-      || this.literal()
-      || this.function()
-      || this.brace()
-      || this.paren()
-      || this.color()
-      || this.string()
-      || this.unit()
-      || this.namedop()
-      || this.boolean()
-      || this.ident()
-      || this.op()
-      || this.space()
-      || this.selector();
-  },
-
-  /**
-   * Lookahead a single token.
-   *
-   * @return {Token}
-   * @api private
-   */
-  
-  peek: function() {
-    return this.lookahead(1);
-  },
-  
-  /**
-   * Return the next possibly stashed token.
-   *
-   * @return {Token}
-   * @api private
-   */
-
-  stashed: function() {
-    return this.stash.shift();
-  },
-
-  /**
-   * EOS | trailing outdents.
-   */
-
-  eos: function() {
-    if (this.str.length) return;
-    if (this.indentStack.length) {
-      this.indentStack.shift();
-      return new Token('outdent');
-    } else {
-      return new Token('eos');
-    }
-  },
-
-  /**
-   * url char
-   */
-
-  urlchars: function() {
-    var captures;
-    if (!this.isURL) return;
-    if (captures = /^[\/:@.;?&=*!,<>#%0-9]+/.exec(this.str)) {
-      this.skip(captures);
-      return new Token('literal', new nodes.Literal(captures[0]));
-    }
-  },
-
-  /**
-   * ';' ' '*
-   */
-
-  sep: function() {
-    var captures;
-    if (captures = /^; */.exec(this.str)) {
-      this.skip(captures);
-      return new Token(';');
-    }
-  },
-  
-  /**
-   * ' '+
-   */
-
-  space: function() {
-    var captures;
-    if (captures = /^( +)/.exec(this.str)) {
-      this.skip(captures);
-      return new Token('space');
-    }
-  },
-  
-  /**
-   * '\\' . ' '*
-   */
-   
-  escaped: function() {
-    var captures;
-    if (captures = /^\\(.) */.exec(this.str)) {
-      var c = captures[1];
-      this.skip(captures);
-      return new Token('ident', new nodes.Literal(c));
-    }
-  },
-  
-  /**
-   * '@css' ' '* '{' .* '}' ' '*
-   */
-  
-  literal: function() {
-    // HACK attack !!!
-    var captures;
-    if (captures = /^@css *\{/.exec(this.str)) {
-      this.skip(captures);
-      var c
-        , braces = 1
-        , css = '';
-      while (c = this.str[0]) {
-        this.str = this.str.substr(1);
-        switch (c) {
-          case '{': ++braces; break;
-          case '}': --braces; break;
-        }
-        css += c;
-        if (!braces) break;
-      }
-      css = css.replace(/\s*}$/, '');
-      return new Token('literal', new nodes.Literal(css));
-    }
-  },
-  
-  /**
-   * '!important' ' '*
-   */
-  
-  important: function() {
-    var captures;
-    if (captures = /^!important */.exec(this.str)) {
-      this.skip(captures);
-      return new Token('ident', new nodes.Literal('!important'));
-    }
-  },
-  
-  /**
-   * '{' | '}'
-   */
-  
-  brace: function() {
-    var captures;
-    if (captures = /^([{}])/.exec(this.str)) {
-      this.skip(1);
-      var brace = captures[1];
-      return new Token(brace, brace);
-    }
-  },
-  
-  /**
-   * '(' | ')' ' '*
-   */
-  
-  paren: function() {
-    var captures;
-    if (captures = /^([()]) */.exec(this.str)) {
-      var paren = captures[1];
-      this.skip(captures);
-      if (')' == paren) this.isURL = false;
-      return new Token(paren, paren);
-    }
-  },
-  
-  /**
-   * 'null'
-   */
-  
-  null: function() {
-    var captures;
-    if (captures = /^(null)\b */.exec(this.str)) {
-      this.skip(captures);
-      return new Token('null', nodes.null);
-    }
-  },
-  
-  /**
-   *   'if'
-   * | 'else'
-   * | 'unless'
-   * | 'return'
-   * | 'for'
-   * | 'in'
-   */
-  
-  keyword: function() {
-    var captures;
-    if (captures = /^(return|if|else|unless|for|in)\b */.exec(this.str)) {
-      var keyword = captures[1];
-      this.skip(captures);
-      return new Token(keyword, keyword);
-    }
-  },
-  
-  /**
-   *   'not'
-   * | 'and'
-   * | 'or'
-   * | 'is'
-   * | 'is not'
-   * | 'isnt'
-   * | 'is a'
-   * | 'is defined'
-   */
-  
-  namedop: function() {
-    var captures;
-    if (captures = /^(not|and|or|is a|is defined|isnt|is not|is)\b( *)/.exec(this.str)) {
-      var op = captures[1];
-      this.skip(captures);
-      op = alias[op] || op;
-      var tok = new Token(op, op);
-      tok.space = captures[2];
-      return tok;
-    }
-  },
-  
-  /**
-   *   ','
-   * | '+'
-   * | '+='
-   * | '-'
-   * | '-='
-   * | '*'
-   * | '*='
-   * | '/'
-   * | '/='
-   * | '%'
-   * | '%='
-   * | '**'
-   * | '!'
-   * | '&'
-   * | '&&'
-   * | '||'
-   * | '>'
-   * | '>='
-   * | '<'
-   * | '<='
-   * | '='
-   * | '=='
-   * | '!='
-   * | '!'
-   * | '~'
-   * | '?='
-   * | '?'
-   * | ':'
-   * | '['
-   * | ']'
-   * | '..'
-   * | '...'
-   */
-  
-  op: function() {
-    var captures;
-    if (captures = /^([.]{2,3}|&&|\|\||[!<>=?]=|\*\*|[-+*\/%]=?|[,=?:!~<>&\[\]])( *)/.exec(this.str)) {
-      var op = captures[1];
-      this.skip(captures);
-      op = alias[op] || op;
-      var tok = new Token(op, op);
-      tok.space = captures[2];
-      return tok;
-    }
-  },
-
-  /**
-   * '@media' ([^{\n]+)
-   */
-  
-  media: function() {
-    var captures;
-    if (captures = /^@media *([^{\n]+)/.exec(this.str)) {
-      this.skip(captures);
-      return new Token('media', captures[1].trim());
-    }
-  },
-  
-  /**
-   * '@' ('import' | 'keyframes' | 'charset' | 'page')
-   */
-  
-  atrule: function() {
-    var captures;
-    if (captures = /^@(import|keyframes|charset|page) */.exec(this.str)) {
-      this.skip(captures);
-      return new Token(captures[1]);
-    }
-  },
-
-  /**
-   * '//' *
-   */
-  
-  comment: function() {
-    // Single line
-    if ('/' == this.str[0] && '/' == this.str[1]) {
-      var end = this.str.indexOf('\n');
-      if (-1 == end) end = this.str.length;
-      this.skip(end);
-      return this.advance();
-    }
-
-    // Multi-line
-    if ('/' == this.str[0] && '*' == this.str[1]) {
-      var end = this.str.indexOf('*/');
-      if (-1 == end) end = this.str.length;
-      var str = this.str.substr(0, end + 2)
-        , lines = str.split('\n').length - 1;
-      this.lineno += lines;
-      this.skip(end + 2);
-      return this.allowComments
-        ? new Token('comment', str)
-        : this.advance();
-    }
-  },
-
-  /**
-   * 'true' | 'false'
-   */
-  
-  boolean: function() {
-    var captures;
-    if (captures = /^(true|false)\b( *)/.exec(this.str)) {
-      var val = 'true' == captures[1]
-        ? nodes.true
-        : nodes.false;
-      this.skip(captures);
-      var tok = new Token('boolean', val);
-      tok.space = captures[2];
-      return tok;
-    }
-  },
-
-  /**
-   * -?[a-zA-Z$] [-\w\d$]* '('
-   */
-  
-  function: function() {
-    var captures;
-    if (captures = /^(-?[a-zA-Z$][-\w\d$]*)\(( *)/.exec(this.str)) {
-      var name = captures[1];
-      this.skip(captures);
-      this.isURL = 'url' == name;
-      var tok = new Token('function', new nodes.Ident(name));
-      tok.space = captures[2];
-      return tok;
-    } 
-  },
-
-  /**
-   * -?[a-zA-Z$] [-\w\d$]*
-   */
-  
-  ident: function() {
-    var captures;
-    if (captures = /^(-?[a-zA-Z$][-\w\d$]*)/.exec(this.str)) {
-      var name = captures[1];
-      this.skip(captures);
-      return new Token('ident', new nodes.Ident(name));
-    }
-  },
-  
-  /**
-   * '\n' ' '+
-   */
-
-  newline: function() {
-    var captures, re;
-
-    // we have established the indentation regexp
-    if (this.indentRe){
-      captures = this.indentRe.exec(this.str);
-    // figure out if we are using tabs or spaces
-    } else {
-      // try tabs
-      re = /^\n([\t]*) */;
-      captures = re.exec(this.str);
-
-      // nope, try spaces
-      if (captures && !captures[1].length) {
-        re = /^\n( *)/;
-        captures = re.exec(this.str);
-      }
-
-      // established
-      if (captures && captures[1].length) this.indentRe = re;
-    }
-
-
-    if (captures) {
-      var tok
-        , indents = captures[1].length;
-
-      this.skip(captures);
-      if (this.str[0] === ' ' || this.str[0] === '\t') {
-        throw new Error('Invalid indentation, you can use tabs or spaces to indent but not both');
-      }
-
-      // Reset state
-      this.isVariable = false;
-
-      // Blank line
-      if ('\n' == this.str[0]) {
-        ++this.lineno;
-        return this.advance();
-      }
-
-      // Outdent
-      if (this.indentStack.length && indents < this.indentStack[0]) {
-        while (this.indentStack.length && this.indentStack[0] > indents) {
-          this.stash.push(new Token('outdent'));
-          this.indentStack.shift();
-        }
-        tok = this.stash.pop();
-      // Indent
-      } else if (indents && indents != this.indentStack[0]) {
-        this.indentStack.unshift(indents);
-        tok = new Token('indent');
-      // Newline
-      } else {
-        tok = new Token('newline');
-      }
-
-      return tok;
-    }
-  },
-
-  /**
-   * '-'? (digit+ | digit* '.' digit+) unit
-   */
-
-  unit: function() {
-    var captures;
-    if (captures = unit.exec(this.str)) {
-      this.skip(captures);
-      var n = parseFloat(captures[2]);
-      if ('-' == captures[1]) n = -n;
-      var node = new nodes.Unit(n, captures[3]);
-      return new Token('unit', node);
-    }
-  },
-
-  /**
-   * '"' [^"]+ '"' | "'"" [^']+ "'"
-   */
-
-  string: function() {
-    var captures;
-    if (captures = /^("[^"]*"|'[^']*') */.exec(this.str)) {
-      var str = captures[1];
-      this.skip(captures);
-      return new Token('string', new nodes.String(str.slice(1,-1)));
-    }
-  },
-
-  /**
-   * #nnnnnn | #nnn
-   */
-
-  color: function() {
-    return this.hex6()
-      || this.hex3();
-  },
-  
-  /**
-   * #nnn
-   */
-  
-  hex3: function() {
-    var captures;
-    if (captures = /^#([a-fA-F0-9]{3}) */.exec(this.str)) {
-      this.skip(captures);
-      var rgb = captures[1]
-        , r = parseInt(rgb[0] + rgb[0], 16)
-        , g = parseInt(rgb[1] + rgb[1], 16)
-        , b = parseInt(rgb[2] + rgb[2], 16)
-        , color = new nodes.RGBA(r, g, b, 1);
-      color.raw = captures[0];
-      return new Token('color', color); 
-    }
-  },
-  
-  /**
-   * #nnnnnn
-   */
-  
-  hex6: function() {
-    var captures;
-    if (captures = /^#([a-fA-F0-9]{6}) */.exec(this.str)) {
-      this.skip(captures);
-      var rgb = captures[1]
-        , r = parseInt(rgb.substr(0, 2), 16)
-        , g = parseInt(rgb.substr(2, 2), 16)
-        , b = parseInt(rgb.substr(4, 2), 16)
-        , color = new nodes.RGBA(r, g, b, 1);
-      color.raw = captures[0];
-      return new Token('color', color); 
-    }
-  },
-  
-  /**
-   * [^\n,;]+
-   */
-  
-  selector: function() {
-    var captures;
-    if (captures = /^[^{\n,]+/.exec(this.str)) {
-      var selector = captures[0];
-      this.skip(captures);
-      return new Token('selector', selector);
-    }
-  }
-};
diff --git a/node/node_modules/jade/support/stylus/lib/middleware.js b/node/node_modules/jade/support/stylus/lib/middleware.js
deleted file mode 100644 (file)
index fdd890d..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*!
- * Stylus - middleware
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var stylus = require('./stylus')
-  , fs = require('fs')
-  , url = require('url')
-  , basename = require('path').basename
-  , join = require('path').join
-  , ENOENT;
-
-// COMPAT:
-
-try {
-  ENOENT = require('constants').ENOENT;
-} catch (err) {
-  ENOENT = process.ENOENT;
-}
-
-/**
- * Import map.
- */
-
-var imports = {};
-
-/**
- * Return Connect middleware with the given `options`.
- *
- * Options:
- *
- *    `force`     Always re-compile
- *    `src`       Source directory used to find .styl files
- *    `dest`      Destination directory used to output .css files
- *                when undefined defaults to `src`.
- *    `compile`   Custom compile function, accepting the arguments
- *                `(str, path)`.
- *    `compress`  Whether the output .css files should be compressed
- *
- * Examples:
- * 
- * Here we set up the custom compile function so that we may
- * set the `compress` option, or define additional functions.
- * 
- * By default the compile function simply sets the `filename`
- * and renders the CSS.
- * 
- *      function compile(str, path) {
- *        return stylus(str)
- *          .set('filename', path)
- *          .set('compress', true);
- *      }
- * 
- * Pass the middleware to Connect, grabbing .styl files from this directory
- * and saving .css files to _./public_. Also supplying our custom `compile` function.
- * 
- * Following that we have a `staticProvider` layer setup to serve the .css
- * files generated by Stylus.
- * 
- *      var server = connect.createServer(
- *          stylus.middleware({
- *              src: __dirname
- *            , dest: __dirname + '/public'
- *            , compile: compile
- *          })
- *        , connect.static(__dirname + '/public')
- *      );
- * 
- * @param {Object} options
- * @return {Function}
- * @api public
- */
-
-module.exports = function(options){
-  options = options || {};
-
-  // Accept src/dest dir
-  if ('string' == typeof options) {
-    options = { src: options };
-  }
-
-  // Force compilation
-  var force = options.force;
-
-  // Source dir required
-  var src = options.src;
-  if (!src) throw new Error('stylus.middleware() requires "src" directory');
-
-  // Default dest dir to source
-  var dest = options.dest
-    ? options.dest
-    : src;
-
-  // Default compile callback
-  options.compile = options.compile || function(str, path){
-    return stylus(str)
-      .set('filename', path)
-      .set('compress', options.compress);
-  };
-
-  // Middleware
-  return function(req, res, next){
-    if ('GET' != req.method && 'HEAD' != req.method) return next();
-    var path = url.parse(req.url).pathname;
-    if (/\.css$/.test(path)) {
-      var cssPath = join(dest, path)
-        , stylusPath = join(src, path.replace('.css', '.styl'));
-
-      // Ignore ENOENT to fall through as 404
-      function error(err) {
-        next(ENOENT == err.errno
-          ? null
-          : err);
-      }
-
-      // Force
-      if (force) return compile();
-
-      // Compile to cssPath
-      function compile() {
-        fs.readFile(stylusPath, 'utf8', function(err, str){
-          if (err) return error(err);
-          var style = options.compile(str, stylusPath);
-          var paths = style.options._imports = [];
-          style.render(function(err, css){
-            imports[stylusPath] = imports[stylusPath] || paths;
-            if (err) return next(err);
-            fs.writeFile(cssPath, css, 'utf8', function(err){
-              next(err);
-            });
-          });
-        });
-      }
-
-      // Compare mtimes
-      fs.stat(stylusPath, function(err, stylusStats){
-        if (err) return error(err);
-        fs.stat(cssPath, function(err, cssStats){
-          // CSS has not been compiled, compile it!
-          if (err) {
-            if (ENOENT == err.errno) {
-              compile();
-            } else {
-              next(err);
-            }
-          } else {
-            // Source has changed, compile it
-            if (stylusStats.mtime > cssStats.mtime) {
-              compile();
-            // Already compiled, check imports
-            } else {
-              checkImports(stylusPath, function(changed){
-                changed ? compile() : next();
-              });
-            }
-          }
-        });
-      });
-    } else {
-      next();
-    }
-  }
-};
-
-/**
- * Check `path`'s imports to see if they have been altered.
- *
- * @param {String} path
- * @param {Function} fn
- * @api private
- */
-
-function checkImports(path, fn) {
-  var nodes = imports[path];
-  if (!nodes) return fn();
-  if (!nodes.length) return fn();
-  var pending = nodes.length
-    , changed = false;
-  nodes.forEach(function(import){
-    fs.stat(import.path, function(err, stat){
-      if (err) {
-        --pending || fn(changed);
-      } else if (import.mtime) {
-        changed = changed || stat.mtime > import.mtime;
-        import.mtime = stat.mtime;
-        --pending || fn(changed);
-      } else {
-        import.mtime = stat.mtime;
-        --pending || fn(changed = true);
-      }
-    });
-  });
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/binop.js b/node/node_modules/jade/support/stylus/lib/nodes/binop.js
deleted file mode 100644 (file)
index 3dbe4b2..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-
-/*!
- * Stylus - BinOp
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `BinOp` with `op`, `left` and `right`.
- *
- * @param {String} op
- * @param {Node} left
- * @param {Node} right
- * @api public
- */
-
-var BinOp = module.exports = function BinOp(op, left, right){
-  Node.call(this);
-  this.op = op;
-  this.left = left;
-  this.right = right;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-BinOp.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-BinOp.prototype.clone = function(){
-  var clone = new BinOp(
-      this.op
-    , this.left.clone()
-    , this.right ?
-      this.right.clone()
-      : null);
-  clone.lineno = this.lineno;
-  return clone;
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/block.js b/node/node_modules/jade/support/stylus/lib/nodes/block.js
deleted file mode 100644 (file)
index 7db0d62..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-
-/*!
- * Stylus - Block
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Block` node with `parent` Block.
- *
- * @param {Block} parent
- * @api public
- */
-
-var Block = module.exports = function Block(parent, node){
-  Node.call(this);
-  this.nodes = [];
-  this.parent = parent;
-  this.node = node;
-  this.scope = true;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Block.prototype.__proto__ = Node.prototype;
-
-/**
- * Check if this block has properties..
- *
- * @return {Boolean}
- * @api public
- */
-
-Block.prototype.__defineGetter__('hasProperties', function(){
-  for (var i = 0, len = this.nodes.length; i < len; ++i) {
-    if ('property' == this.nodes[i].nodeName) {
-      return true;
-    }
-  }
-});
-
-/**
- * Check if this block is empty.
- *
- * @return {Boolean}
- * @api public
- */
-
-Block.prototype.__defineGetter__('isEmpty', function(){
-  return !this.nodes.length;
-});
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Block.prototype.clone = function(){
-  var clone = new Block(this.parent, this.node);
-  clone.lineno = this.lineno;
-  clone.scope = this.scope;
-  this.nodes.forEach(function(node){
-    node = node.clone();
-    switch (node.nodeName) {
-      case 'each':
-      case 'group':
-        node.block.parent = clone;
-        break;
-      case 'ident':
-        if ('function' == node.val.nodeName) {
-          node.val.block.parent = clone;
-        }
-    }
-    clone.push(node);
-  });
-  return clone;
-};
-
-/**
- * Push a `node` to this block.
- *
- * @param {Node} node
- * @api public
- */
-
-Block.prototype.push = function(node){
-  this.nodes.push(node);
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/boolean.js b/node/node_modules/jade/support/stylus/lib/nodes/boolean.js
deleted file mode 100644 (file)
index a71c327..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-
-/*!
- * Stylus - Boolean
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Boolean` node with the given `val`.
- *
- * @param {Boolean} val
- * @api public
- */
-
-var Boolean = module.exports = function Boolean(val){
-  Node.call(this);
-  if (this instanceof Boolean) {
-    this.val = !!val;
-  } else {
-    return val ? nodes.true : nodes.false;
-  }
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Boolean.prototype.__proto__ = Node.prototype;
-
-/**
- * Return `this` node.
- *
- * @return {Boolean}
- * @api public
- */
-
-Boolean.prototype.toBoolean = function(){
-  return this;
-};
-
-/**
- * Negate the value.
- *
- * @return {Boolean}
- * @api public
- */
-
-Boolean.prototype.negate = function(){
-  return this.val
-    ? nodes.false
-    : nodes.true;
-};
-
-/**
- * Return 'Boolean'.
- *
- * @return {String}
- * @api public
- */
-
-Boolean.prototype.inspect = function(){
-  return '[Boolean ' + this.val + ']';
-};
-
-/**
- * Return 'true' or 'false'.
- *
- * @return {String}
- * @api public
- */
-
-Boolean.prototype.toString = function(){
-  return this.val
-    ? 'true'
-    : 'false';
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/call.js b/node/node_modules/jade/support/stylus/lib/nodes/call.js
deleted file mode 100644 (file)
index b0d20f5..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-
-/*!
- * Stylus - Call
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Call` with `name` and `args`.
- *
- * @param {String} name
- * @param {Expression} args
- * @api public
- */
-
-var Call = module.exports = function Call(name, args){
-  Node.call(this);
-  this.name = name;
-  this.args = args;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Call.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Call.prototype.clone = function(){
-  var clone = new Call(this.name, this.args.clone());
-  clone.lineno = this.lineno;
-  return clone;
-};
-
-/**
- * Return <name>().
- *
- * @return {String}
- * @api public
- */
-
-Call.prototype.toString = function(){
-  return this.name + '()';
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/charset.js b/node/node_modules/jade/support/stylus/lib/nodes/charset.js
deleted file mode 100644 (file)
index 2e95c34..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*!
- * Stylus - Charset
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Charset` with the given `val`
- *
- * @param {String} val
- * @api public
- */
-
-var Charset = module.exports = function Charset(val){
-  Node.call(this);
-  this.val = val;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Charset.prototype.__proto__ = Node.prototype;
-
-/**
- * Return @charset "val".
- *
- * @return {String}
- * @api public
- */
-
-Charset.prototype.toString = function(){
-  return '@charset ' + this.val;
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/each.js b/node/node_modules/jade/support/stylus/lib/nodes/each.js
deleted file mode 100644 (file)
index 7268dec..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*!
- * Stylus - Each
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Each` node with the given `val` name,
- * `key` name, `expr`, and `block`.
- *
- * @param {String} val
- * @param {String} key
- * @param {Expression} expr
- * @param {Block} block
- * @api public
- */
-
-var Each = module.exports = function Each(val, key, expr, block){
-  Node.call(this);
-  this.val = val;
-  this.key = key;
-  this.expr = expr;
-  this.block = block;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Each.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Each.prototype.clone = function(){
-  var clone = new Each(
-      this.val
-    , this.key
-    , this.expr.clone()
-    , this.block.clone());
-  clone.lineno = this.lineno;
-  return clone;
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/expression.js b/node/node_modules/jade/support/stylus/lib/nodes/expression.js
deleted file mode 100644 (file)
index ae7205f..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/*!
- * Stylus - Expression
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('../nodes')
-  , utils = require('../utils');
-
-/**
- * Initialize a new `Expression`.
- *
- * @param {Boolean} isList
- * @api public
- */
-
-var Expression = module.exports = function Expression(isList){
-  Node.call(this);
-  this.nodes = [];
-  this.isList = isList;
-};
-
-/**
- * Check if the variable has a value.
- *
- * @return {Boolean}
- * @api public
- */
-
-Expression.prototype.__defineGetter__('isEmpty', function(){
-  return !this.nodes.length;
-});
-
-/**
- * Return the first node in this expression.
- *
- * @return {Node}
- * @api public
- */
-
-Expression.prototype.__defineGetter__('first', function(){
-  return this.nodes[0]
-    ? this.nodes[0].first
-    : nodes.null;
-});
-
-/**
- * Hash all the nodes in order.
- *
- * @return {String}
- * @api public
- */
-
-Expression.prototype.__defineGetter__('hash', function(){
-  return this.nodes.map(function(node){
-    return node.hash;
-  }).join('::');
-});
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Expression.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Expression.prototype.clone = function(){
-  var clone = new Expression(this.isList);
-  clone.preserve = this.preserve;
-  clone.lineno = this.lineno;
-  for (var i = 0; i < this.nodes.length; ++i) {
-    clone.push(this.nodes[i].clone());
-  }
-  return clone;
-};
-
-/**
- * Push the given `node`.
- *
- * @param {Node} node
- * @api public
- */
-
-Expression.prototype.push = function(node){
-  this.nodes.push(node);
-};
-
-/**
- * Operate on `right` with the given `op`.
- *
- * @param {String} op
- * @param {Node} right
- * @return {Node}
- * @api public
- */
-
-Expression.prototype.operate = function(op, right){
-  switch (op) {
-    case '[]':
-      var expr = new nodes.Expression
-        , vals = utils.unwrap(this).nodes
-        , range = utils.unwrap(right).nodes;
-      range.forEach(function(unit){
-        if ('unit' == unit.nodeName) {
-          var node = vals[unit.val];
-          if (node) expr.push(node);
-        }
-      });
-      return expr.isEmpty
-        ? nodes.null
-        : expr;
-    default:
-      return Node.prototype.operate.call(this, op, right);
-  }
-};
-
-/**
- * Return "<a> <b> <c>" or "<a>, <b>, <c>" if
- * the expression represents a list.
- *
- * @return {String}
- * @api public
- */
-
-Expression.prototype.toString = function(){
-  return '(' + this.nodes.map(function(node){
-    return node.toString();
-  }).join(this.isList ? ', ' : ' ') + ')';
-};
-
-
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/function.js b/node/node_modules/jade/support/stylus/lib/nodes/function.js
deleted file mode 100644 (file)
index ba0c214..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-
-/*!
- * Stylus - Function
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Function` with `name`, `params`, and `body`.
- *
- * @param {String} name
- * @param {Params|Function} params
- * @param {Block} body
- * @api public
- */
-
-var Function = module.exports = function Function(name, params, body){
-  Node.call(this);
-  this.name = name;
-  this.params = params;
-  this.block = body;
-  if ('function' == typeof params) this.fn = params;
-};
-
-/**
- * Check function arity.
- *
- * @return {Boolean}
- * @api public
- */
-
-Function.prototype.__defineGetter__('arity', function(){
-  return this.params.length;
-});
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Function.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Function.prototype.clone = function(){
-  if (this.fn) {
-    var clone = new Function(
-        this.name
-      , this.fn);
-  } else {
-    var clone = new Function(
-        this.name
-      , this.params.clone()
-      , this.block.clone());
-  }
-  clone.lineno = this.lineno;
-  return clone;
-};
-
-/**
- * Return <name>(param1, param2, ...).
- *
- * @return {String}
- * @api public
- */
-
-Function.prototype.toString = function(){
-  if (this.fn) {
-    return this.name
-      + '('
-      + this.fn.toString()
-        .match(/^function *\((.*?)\)/)
-        .slice(1)
-        .join(', ')
-      + ')';
-  } else {
-    return this.name
-      + '('
-      + this.params.nodes.join(', ')
-      + ')';
-  }
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/group.js b/node/node_modules/jade/support/stylus/lib/nodes/group.js
deleted file mode 100644 (file)
index 1d36b81..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-
-/*!
- * Stylus - Group
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Group`.
- *
- * @api public
- */
-
-var Group = module.exports = function Group(){
-  Node.call(this);
-  this.nodes = [];
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Group.prototype.__proto__ = Node.prototype;
-
-/**
- * Push the given `selector` node.
- *
- * @param {Selector} selector
- * @api public
- */
-
-Group.prototype.push = function(selector){
-  this.nodes.push(selector);
-};
-
-/**
- * Return this set's `Block`.
- */
-
-Group.prototype.__defineGetter__('block', function(){
-  return this.nodes[0].block;
-});
-
-/**
- * Assign `block` to each selector in this set.
- *
- * @param {Block} block
- * @api public
- */
-
-Group.prototype.__defineSetter__('block', function(block){
-  for (var i = 0, len = this.nodes.length; i < len; ++i) {
-    this.nodes[i].block = block;
-  }
-});
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Group.prototype.clone = function(){
-  var clone = new Group;
-  clone.lineno = this.lineno;
-  this.nodes.forEach(function(node){
-    clone.push(node.clone());
-  });
-  clone.block = this.block.clone();
-  return clone;
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/hsla.js b/node/node_modules/jade/support/stylus/lib/nodes/hsla.js
deleted file mode 100644 (file)
index 9be887d..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-
-/*!
- * Stylus - HSLA
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `HSLA` with the given h,s,l,a component values.
- *
- * @param {Number} h
- * @param {Number} s
- * @param {Number} l
- * @param {Number} a
- * @api public
- */
-
-var HSLA = exports = module.exports = function HSLA(h,s,l,a){
-  Node.call(this);
-  this.h = clampDegrees(h);
-  this.s = clampPercentage(s);
-  this.l = clampPercentage(l);
-  this.a = clampAlpha(a);
-  this.hsla = this;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-HSLA.prototype.__proto__ = Node.prototype;
-
-/**
- * Return hsla(n,n,n,n).
- *
- * @return {String}
- * @api public
- */
-
-HSLA.prototype.toString = function(){
-  return 'hsla('
-    + this.h + ','
-    + this.s + ','
-    + this.l + ','
-    + this.a + ')';
-};
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-HSLA.prototype.clone = function(){
-  var clone = new HSLA(
-      this.h
-    , this.s
-    , this.l
-    , this.a);
-  clone.lineno = this.lineno;
-  return clone;
-};
-
-/**
- * Return rgba `RGBA` representation.
- *
- * @return {RGBA}
- * @api public
- */
-
-HSLA.prototype.__defineGetter__('rgba', function(){
-  return nodes.RGBA.fromHSLA(this);
-});
-
-/**
- * Return hash.
- *
- * @return {String}
- * @api public
- */
-
-HSLA.prototype.__defineGetter__('hash', function(){
-  return this.rgba.toString();
-});
-
-/**
- * Coerce RGBA to HSLA.
- *
- * @param {Node} other
- * @return {Node}
- * @api public
- */
-
-HSLA.prototype.coerce = function(other){
-  if (other instanceof nodes.RGBA) {
-    return other.hsla;
-  } else {
-    return Node.prototype.coerce.call(this, other);
-  }
-};
-
-/**
- * Operate on `right` with the given `op`.
- *
- * @param {String} op
- * @param {Node} right
- * @return {Node}
- * @api public
- */
-
-HSLA.prototype.operate = function(op, right){
-  switch (op) {
-    case '+':
-      return new HSLA(
-          this.h + right.h
-        , this.s + right.s
-        , this.l + right.l
-        , 1 == right.a ? this.a : (this.a + right.a)
-        );
-    case '-':
-      return new HSLA(
-          this.h - right.h
-        , this.s - right.s
-        , this.l - right.l
-        , 1 == right.a ? this.a : (this.a - right.a)
-        );
-    case '*':
-      return new HSLA(
-          this.h * right.h
-        , this.s * right.s
-        , this.l * right.l
-        , this.a * right.a
-        );
-    case '/':
-      return new HSLA(
-          this.h / right.h
-        , this.s / right.s
-        , this.l / right.l
-        , this.a / right.a
-        );
-    default:
-      return Node.prototype.operate.call(this, op, right);
-  }
-};
-
-/**
- * Return `HSLA` representation of the given `color`.
- *
- * @param {RGBA} color
- * @return {HSLA}
- * @api public
- */
-
-exports.fromRGBA = function(rgba){
-  var r = rgba.r / 255
-    , g = rgba.g / 255
-    , b = rgba.b / 255
-    , a = rgba.a;
-
-  var min = Math.min(r,g,b)
-    , max = Math.max(r,g,b)
-    , l = (max + min) / 2
-    , d = max - min
-    , h, s;
-
-  switch (max) {
-    case min: h = 0; break;
-    case r: h = 60 * (g-b) / d; break;
-    case g: h = 60 * (b-r) / d + 120; break;
-    case b: h = 60 * (r-g) / d + 240; break;
-  }
-
-  if (max == min) {
-    s = 0;
-  } else if (l < .5) {
-    s = d / (2 * l);
-  } else {
-    s = d / (2 - 2 * l);
-  }
-
-  h %= 360;
-  s *= 100;
-  l *= 100;
-
-  return new HSLA(h,s,l,a);
-};
-
-/**
- * Clamp degree `n` >= 0 and <= 360.
- *
- * @param {Number} n
- * @return {Number}
- * @api private
- */
-
-function clampDegrees(n) {
-  return Math.max(0, Math.min(n, 360));
-}
-
-/**
- * Clamp percentage `n` >= 0 and <= 100.
- *
- * @param {Number} n
- * @return {Number}
- * @api private
- */
-
-function clampPercentage(n) {
-  return Math.max(0, Math.min(n, 100));
-}
-
-/**
- * Clamp alpha `n` >= 0 and <= 1.
- *
- * @param {Number} n
- * @return {Number}
- * @api private
- */
-
-function clampAlpha(n) {
-  return Math.max(0, Math.min(n, 1));
-}
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/ident.js b/node/node_modules/jade/support/stylus/lib/nodes/ident.js
deleted file mode 100644 (file)
index e307bc8..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-
-/*!
- * Stylus - Ident
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Ident` by `name` with the given `val` node.
- *
- * @param {String} name
- * @param {Node} val
- * @api public
- */
-
-var Ident = module.exports = function Ident(name, val){
-  Node.call(this);
-  this.name = name;
-  this.string = name;
-  this.val = val || nodes.null;
-};
-
-/**
- * Check if the variable has a value.
- *
- * @return {Boolean}
- * @api public
- */
-
-Ident.prototype.__defineGetter__('isEmpty', function(){
-  return undefined == this.val;
-});
-
-/**
- * Return hash.
- *
- * @return {String}
- * @api public
- */
-
-Ident.prototype.__defineGetter__('hash', function(){
-  return this.name;
-});
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Ident.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Ident.prototype.clone = function(){
-  var clone = new Ident(this.name, this.val.clone());
-  clone.lineno = this.lineno;
-  return clone;
-};
-
-/**
- * Return <name>.
- *
- * @return {String}
- * @api public
- */
-
-Ident.prototype.toString = function(){
-  return this.name;
-};
-
-/**
- * Coerce `other` to an ident.
- *
- * @param {Node} other
- * @return {String}
- * @api public
- */
-
-Ident.prototype.coerce = function(other){
-  if (other instanceof nodes.Literal ||
-      other instanceof Ident) {
-    return other;
-  } else {
-    return Node.prototype.coerce.call(this, other);
-  }
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/if.js b/node/node_modules/jade/support/stylus/lib/nodes/if.js
deleted file mode 100644 (file)
index ec7a977..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*!
- * Stylus - If
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `If` with the given `cond`.
- *
- * @param {Expression} cond
- * @param {Boolean|Block} negate, block
- * @api public
- */
-
-var If = module.exports = function If(cond, negate){
-  Node.call(this);
-  this.cond = cond;
-  this.elses = [];
-  if (negate instanceof Node) {
-    this.block = negate;
-  } else {
-    this.negate = negate;
-  }
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-If.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-If.prototype.clone = function(){
-  var cond = this.cond.clone()
-    , block = this.block.clone();
-  var clone = new If(cond, block);
-  clone.elses = this.elses.map(function(node){ return node.clone(); });
-  clone.negate = this.negate;
-  clone.lineno = this.lineno;
-  return clone;
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/import.js b/node/node_modules/jade/support/stylus/lib/nodes/import.js
deleted file mode 100644 (file)
index 9356c30..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-/*!
- * Stylus - Import
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Import` with the given `expr`.
- *
- * @param {Expression} expr
- * @api public
- */
-
-var Import = module.exports = function Import(expr){
-  Node.call(this);
-  this.path = expr;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Import.prototype.__proto__ = Node.prototype;
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/index.js b/node/node_modules/jade/support/stylus/lib/nodes/index.js
deleted file mode 100644 (file)
index 671344c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-
-/*!
- * Stylus - nodes
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Constructors
- */
-
-exports.Node = require('./node');
-exports.Root = require('./root');
-exports.Null = require('./null');
-exports.Each = require('./each');
-exports.If = require('./if');
-exports.Call = require('./call');
-exports.Page = require('./page');
-exports.UnaryOp = require('./unaryop');
-exports.BinOp = require('./binop');
-exports.Ternary = require('./ternary');
-exports.Block = require('./block');
-exports.Unit = require('./unit');
-exports.String = require('./string');
-exports.HSLA = require('./hsla');
-exports.RGBA = require('./rgba');
-exports.Ident = require('./ident');
-exports.Group = require('./group');
-exports.Literal = require('./literal');
-exports.Boolean = require('./boolean');
-exports.Return = require('./return');
-exports.Media = require('./media');
-exports.Params = require('./params');
-exports.Keyframes = require('./keyframes');
-exports.Charset = require('./charset');
-exports.Import = require('./import');
-exports.Function = require('./function');
-exports.Property = require('./property');
-exports.Selector = require('./selector');
-exports.Expression = require('./expression');
-
-/**
- * Singletons.
- */
-
-exports.true = new exports.Boolean(true);
-exports.false = new exports.Boolean(false);
-exports.null = new exports.Null;
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/keyframes.js b/node/node_modules/jade/support/stylus/lib/nodes/keyframes.js
deleted file mode 100644 (file)
index cd15604..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/*!
- * Stylus - Keyframes
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Keyframes` with the given `name`.
- *
- * @param {String} name
- * @api public
- */
-
-var Keyframes = module.exports = function Keyframes(name){
-  Node.call(this);
-  this.name = name;
-  this.frames = [];
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Keyframes.prototype.__proto__ = Node.prototype;
-
-/**
- * Push the given `block` at `pos`.
- *
- * @param {Unit} pos
- * @param {Block} block
- * @api public
- */
-
-Keyframes.prototype.push = function(pos, block){
-  this.frames.push({
-      pos: pos
-    , block: block
-  });
-};
-
-/**
- * Return `@keyframes name`.
- *
- * @return {String}
- * @api public
- */
-
-Keyframes.prototype.toString = function(){
-  return '@keyframes ' + this.name;
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/literal.js b/node/node_modules/jade/support/stylus/lib/nodes/literal.js
deleted file mode 100644 (file)
index 1b94867..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-
-/*!
- * Stylus - Literal
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Literal` with the given `str`.
- *
- * @param {String} str
- * @api public
- */
-
-var Literal = module.exports = function Literal(str){
-  Node.call(this);
-  this.val = str;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Literal.prototype.__proto__ = Node.prototype;
-
-/**
- * Return hash.
- *
- * @return {String}
- * @api public
- */
-
-Literal.prototype.__defineGetter__('hash', function(){
-  return this.val;
-});
-
-/**
- * Return literal value.
- *
- * @return {String}
- * @api public
- */
-
-Literal.prototype.toString = function(){
-  return this.val;
-};
-
-/**
- * Coerce `other` to a literal.
- *
- * @param {Node} other
- * @return {String}
- * @api public
- */
-
-Literal.prototype.coerce = function(other){
-  if (other instanceof Literal ||
-      other instanceof nodes.Ident) {
-    return other;
-  } else {
-    return Node.prototype.coerce.call(this, other);
-  }
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/media.js b/node/node_modules/jade/support/stylus/lib/nodes/media.js
deleted file mode 100644 (file)
index 142fb24..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*!
- * Stylus - Media
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Media` with the given `val`
- *
- * @param {String} val
- * @api public
- */
-
-var Media = module.exports = function Media(val){
-  Node.call(this);
-  this.val = val;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Media.prototype.__proto__ = Node.prototype;
-
-/**
- * Return @media "val".
- *
- * @return {String}
- * @api public
- */
-
-Media.prototype.toString = function(){
-  return '@media ' + this.val;
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/node.js b/node/node_modules/jade/support/stylus/lib/nodes/node.js
deleted file mode 100644 (file)
index 266c118..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-
-/*!
- * Stylus - Node
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Evaluator = require('../visitor/evaluator')
-  , utils = require('../utils')
-  , nodes = require('./');
-
-/**
- * Node constructor.
- *
- * @api public
- */
-
-var Node = module.exports = function Node(){
-  this.lineno = nodes.lineno;
-  Object.defineProperty(this, 'filename', { value: nodes.filename });
-  Object.defineProperty(this, 'source', { value: nodes.source });
-};
-
-/**
- * Return this node.
- *
- * @return {Node}
- * @api public
- */
-
-Node.prototype.__defineGetter__('first', function(){
-  return this;
-});
-
-/**
- * Return hash.
- *
- * @return {String}
- * @api public
- */
-
-Node.prototype.__defineGetter__('hash', function(){
-  return this.val;
-});
-
-/**
- * Return node name.
- *
- * @return {String}
- * @api public
- */
-
-Node.prototype.__defineGetter__('nodeName', function(){
-  return this.constructor.name.toLowerCase();
-});
-
-/**
- * Return this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Node.prototype.clone = function(){
-  return this;
-};
-
-/**
- * Nodes by default evaluate to themselves.
- *
- * @return {Node}
- * @api public
- */
-
-Node.prototype.eval = function(){
-  return new Evaluator(this).evaluate();
-};
-
-/**
- * Return true.
- *
- * @return {Boolean}
- * @api public
- */
-
-Node.prototype.toBoolean = function(){
-  return nodes.true;
-};
-
-/**
- * Operate on `right` with the given `op`.
- *
- * @param {String} op
- * @param {Node} right
- * @return {Node}
- * @api public
- */
-
-Node.prototype.operate = function(op, right){
-  switch (op) {
-    case 'is a':
-      if ('string' == right.nodeName) {
-        if ('color' == right.string) {
-          return nodes.Boolean('rgba' == this.nodeName || 'hsla' == this.nodeName);
-        } else {
-          return nodes.Boolean(this.nodeName == right.val);
-        }
-      } else {
-        throw new Error('"is a" expects a string, got ' + right.nodeName);
-      }
-    case '==':
-      return nodes.Boolean(this.hash == right.hash);
-    case '!=':
-      return nodes.Boolean(this.hash != right.hash);
-    case '>=':
-      return nodes.Boolean(this.hash >= right.hash);
-    case '<=':
-      return nodes.Boolean(this.hash <= right.hash);
-    case '>':
-      return nodes.Boolean(this.hash > right.hash);
-    case '<':
-      return nodes.Boolean(this.hash < right.hash);
-    case '||':
-      return nodes.true == this.toBoolean()
-        ? this
-        : right;
-    case 'in':
-      var vals = utils.unwrap(right).nodes
-        , hash = this.hash;
-      if (!vals) throw new Error('"in" given invalid right-hand operand, expecting an expression');
-      for (var i = 0, len = vals.length; i < len; ++i) {
-        if (hash == vals[i].hash) {
-          return nodes.true;
-        }
-      }
-      return nodes.false;
-    case '&&':
-      var a = this.toBoolean()
-        , b = right.toBoolean();
-      return nodes.true == a && nodes.true == b
-        ? right
-        : nodes.false == a
-          ? this
-          : right;
-    default:
-      if ('[]' == op) {
-        var msg = 'cannot perform '
-          + this
-          + '[' + right + ']';
-      } else {
-        var msg = 'cannot perform'
-          + ' ' + this
-          + ' ' + op
-          + ' ' + right;
-      }
-      throw new Error(msg);
-  }
-};
-
-/**
- * Default coercion throws.
- *
- * @param {Node} other
- * @return {Node}
- * @api public
- */
-
-Node.prototype.coerce = function(other){
-  if (other.nodeName == this.nodeName) return other;
-  throw new Error('cannot coerce ' + other + ' to ' + this.nodeName);
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/null.js b/node/node_modules/jade/support/stylus/lib/nodes/null.js
deleted file mode 100644 (file)
index 579e4c3..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/*!
- * Stylus - Null
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Null` node.
- *
- * @api public
- */
-
-var Null = module.exports = function Null(){};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Null.prototype.__proto__ = Node.prototype;
-
-/**
- * Return 'Null'.
- *
- * @return {String}
- * @api public
- */
-
-Null.prototype.inspect = 
-Null.prototype.toString = function(){
-  return '[Null]';
-};
-
-/**
- * Return false.
- *
- * @return {Boolean}
- * @api public
- */
-
-Null.prototype.toBoolean = function(){
-  return nodes.false;
-};
-
-/**
- * Return hash.
- *
- * @return {String}
- * @api public
- */
-
-Null.prototype.__defineGetter__('hash', function(){
-  return null;
-});
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/page.js b/node/node_modules/jade/support/stylus/lib/nodes/page.js
deleted file mode 100644 (file)
index e60648e..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*!
- * Stylus - Page
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Page` with the given `selector` and `block`.
- *
- * @param {Selector} selector
- * @param {Block} block
- * @api public
- */
-
-var Page = module.exports = function Page(selector, block){
-  Node.call(this);
-  this.selector = selector;
-  this.block = block;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Page.prototype.__proto__ = Node.prototype;
-
-/**
- * Return `@oage name`.
- *
- * @return {String}
- * @api public
- */
-
-Page.prototype.toString = function(){
-  return '@page ' + this.selector;
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/params.js b/node/node_modules/jade/support/stylus/lib/nodes/params.js
deleted file mode 100644 (file)
index 9bbe9cb..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-
-/*!
- * Stylus - Params
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Params` with `name`, `params`, and `body`.
- *
- * @param {String} name
- * @param {Params} params
- * @param {Expression} body
- * @api public
- */
-
-var Params = module.exports = function Params(){
-  Node.call(this);
-  this.nodes = [];
-};
-
-/**
- * Check function arity.
- *
- * @return {Boolean}
- * @api public
- */
-
-Params.prototype.__defineGetter__('length', function(){
-  return this.nodes.length;
-});
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Params.prototype.__proto__ = Node.prototype;
-
-/**
- * Push the given `node`.
- *
- * @param {Node} node
- * @api public
- */
-
-Params.prototype.push = function(node){
-  this.nodes.push(node);
-};
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Params.prototype.clone = function(){
-  var clone = new Params;
-  clone.lineno = this.lineno;
-  this.nodes.forEach(function(node){
-    clone.push(node.clone());
-  });
-  return clone;
-};
-
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/property.js b/node/node_modules/jade/support/stylus/lib/nodes/property.js
deleted file mode 100644 (file)
index 6d3167c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/*!
- * Stylus - Property
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Property` with the given `segs` and optional `expr`.
- *
- * @param {Array} segs
- * @param {Expression} expr
- * @api public
- */
-
-var Property = module.exports = function Property(segs, expr){
-  Node.call(this);
-  this.segments = segs;
-  this.expr = expr;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Property.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Property.prototype.clone = function(){
-  var clone = new Property(this.segments);
-  clone.lineno = this.lineno;
-  this.segments = this.segments.map(function(node){ return node.clone(); });
-  if (this.expr) clone.expr = this.expr.clone();
-  return clone;
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/return.js b/node/node_modules/jade/support/stylus/lib/nodes/return.js
deleted file mode 100644 (file)
index 86ca751..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-/*!
- * Stylus - Return
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Return` node with the given `expr`.
- *
- * @param {Expression} expr
- * @api public
- */
-
-var Return = module.exports = function Return(expr){
-  this.expr = expr || nodes.null;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Return.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Return.prototype.clone = function(){
-  var clone = new Return(this.expr.clone());
-  clone.lineno = this.lineno;
-  return clone;
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/rgba.js b/node/node_modules/jade/support/stylus/lib/nodes/rgba.js
deleted file mode 100644 (file)
index 8648db9..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-
-/*!
- * Stylus - RGBA
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , HSLA = require('./hsla')
-  , nodes = require('./');
-
-/**
- * Initialize a new `RGBA` with the given r,g,b,a component values.
- *
- * @param {Number} r
- * @param {Number} g
- * @param {Number} b
- * @param {Number} a
- * @api public
- */
-
-var RGBA = exports = module.exports = function RGBA(r,g,b,a){
-  Node.call(this);
-  this.r = clamp(r);
-  this.g = clamp(g);
-  this.b = clamp(b);
-  this.a = clampAlpha(a);
-  this.rgba = this;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-RGBA.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-RGBA.prototype.clone = function(){
-  var clone = new RGBA(
-      this.r
-    , this.g
-    , this.b
-    , this.a);
-  clone.lineno = this.lineno;
-  return clone;
-};
-
-/**
- * Return true.
- *
- * @return {Boolean}
- * @api public
- */
-
-RGBA.prototype.toBoolean = function(){
-  return nodes.true;
-};
-
-/**
- * Return `HSLA` representation.
- *
- * @return {HSLA}
- * @api public
- */
-
-RGBA.prototype.__defineGetter__('hsla', function(){
-  return HSLA.fromRGBA(this);
-});
-
-/**
- * Return hash.
- *
- * @return {String}
- * @api public
- */
-
-RGBA.prototype.__defineGetter__('hash', function(){
-  return this.toString();
-});
-
-/**
- * Coerce HSLA and Unit to RGBA.
- *
- * @param {Node} other
- * @return {Node}
- * @api public
- */
-
-RGBA.prototype.coerce = function(other){
-  if (other instanceof nodes.HSLA) {
-    return other.rgba;
-  } else if (other instanceof nodes.Unit) {
-    var n = other.val;
-    return new RGBA(n,n,n,1);
-  } else {
-    return Node.prototype.coerce.call(this, other);
-  }
-};
-
-/**
- * Operate on `right` with the given `op`.
- *
- * @param {String} op
- * @param {Node} right
- * @return {Node}
- * @api public
- */
-
-RGBA.prototype.operate = function(op, right){
-  switch (op) {
-    case '+':
-      return new RGBA(
-          this.r + right.r
-        , this.g + right.g
-        , this.b + right.b
-        , 1 == right.a ? this.a : (this.a + right.a)
-        );
-    case '-':
-      return new RGBA(
-          this.r - right.r
-        , this.g - right.g
-        , this.b - right.b
-        , 1 == right.a ? this.a : (this.a - right.a)
-        );
-    case '*':
-      return new RGBA(
-          this.r * right.r
-        , this.g * right.g
-        , this.b * right.b
-        , this.a * right.a
-        );
-    case '/':
-      return new RGBA(
-          this.r / right.r
-        , this.g / right.g
-        , this.b / right.b
-        , this.a / right.a
-        );
-    default:
-      return Node.prototype.operate.call(this, op, right);
-  }
-};
-
-/**
- * Return #nnnnnn, #nnn, or rgba(n,n,n,n) string representation of the color.
- *
- * @return {String}
- * @api public
- */
-
-RGBA.prototype.toString = function(){
-  function pad(n) {
-    return n < 16
-      ? '0' + n.toString(16)
-      : n.toString(16);
-  }
-
-  if (1 == this.a) {
-    var r = pad(this.r)
-      , g = pad(this.g)
-      , b = pad(this.b);
-
-    // Compress
-    if (r[0] == r[1] && g[0] == g[1] && b[0] == b[1]) {
-      return '#' + r[0] + g[0] + b[0];
-    } else {
-      return '#' + r + g + b;
-    }
-  } else {
-    return 'rgba('
-      + this.r + ','
-      + this.g + ','
-      + this.b + ','
-      + this.a + ')';
-  }
-};
-
-/**
- * Return a `RGBA` from the given `hsla`.
- *
- * @param {HSLA} hsla
- * @return {RGBA}
- * @api public
- */
-
-exports.fromHSLA = function(hsla){
-  var h = hsla.h / 360
-    , s = hsla.s / 100
-    , l = hsla.l / 100
-    , a = hsla.a;
-
-  var m2 = l <= .5 ? l * (s + 1) : l + s - l * s
-    , m1 = l * 2 - m2;
-
-  var r = hue(h + 1/3) * 0xff
-    , g = hue(h) * 0xff
-    , b = hue(h - 1/3) * 0xff;
-
-  function hue(h) {
-    if (h < 0) ++h;
-    if (h > 1) --h;
-    if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
-    if (h * 2 < 1) return m2;
-    if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;
-    return m1;
-  }
-  
-  return new RGBA(r,g,b,a);
-};
-
-/**
- * Clamp `n` >= 0 and <= 255.
- *
- * @param {Number} n
- * @return {Number}
- * @api private
- */
-
-function clamp(n) {
-  return Math.max(0, Math.min(n.toFixed(0), 255));
-}
-
-/**
- * Clamp alpha `n` >= 0 and <= 1.
- *
- * @param {Number} n
- * @return {Number}
- * @api private
- */
-
-function clampAlpha(n) {
-  return Math.max(0, Math.min(n, 1));
-}
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/root.js b/node/node_modules/jade/support/stylus/lib/nodes/root.js
deleted file mode 100644 (file)
index d5e14c5..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-/*!
- * Stylus - Root
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Root` node.
- *
- * @api public
- */
-
-var Root = module.exports = function Root(){
-  this.nodes = [];
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Root.prototype.__proto__ = Node.prototype;
-
-/**
- * Push a `node` to this block.
- *
- * @param {Node} node
- * @api public
- */
-
-Root.prototype.push = function(node){
-  this.nodes.push(node);
-};
-
-/**
- * Return "root".
- *
- * @return {String}
- * @api public
- */
-
-Root.prototype.toString = function(){
-  return '[Root]';
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/selector.js b/node/node_modules/jade/support/stylus/lib/nodes/selector.js
deleted file mode 100644 (file)
index c7d308f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*!
- * Stylus - Selector
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Block = require('./block')
-  , Node = require('./node');
-
-/**
- * Initialize a new `Selector` with the given `val`.
- *
- * @param {String} val
- * @api public
- */
-
-var Selector = module.exports = function Selector(val){
-  Node.call(this);
-  this.val = val.replace(/ +$/, '');
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Selector.prototype.__proto__ = Node.prototype;
-
-/**
- * Return the selector string.
- *
- * @return {String}
- * @api public
- */
-
-Selector.prototype.toString = function(){
-  return this.val;
-};
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Selector.prototype.clone = function(){
-  var clone = new Selector(this.val);
-  clone.lineno = this.lineno;
-  return clone;
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/string.js b/node/node_modules/jade/support/stylus/lib/nodes/string.js
deleted file mode 100644 (file)
index 2e9e6e6..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-
-/*!
- * Stylus - String
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `String` with the given `val`.
- *
- * @param {String} val
- * @api public
- */
-
-var String = module.exports = function String(val){
-  Node.call(this);
-  this.val = val;
-  this.string = val;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-String.prototype.__proto__ = Node.prototype;
-
-/**
- * Return quoted string.
- *
- * @return {String}
- * @api public
- */
-
-String.prototype.toString = function(){
-  return '"' + this.val + '"';
-};
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-String.prototype.clone = function(){
-  var clone = new String(this.val);
-  clone.lineno = this.lineno;
-  return clone;
-};
-
-/**
- * Return Boolean based on the length of this string.
- *
- * @return {Boolean}
- * @api public
- */
-
-String.prototype.toBoolean = function(){
-  return nodes.Boolean(this.val.length);
-};
-
-/**
- * Coerce `other` to a string.
- *
- * @param {Node} other
- * @return {String}
- * @api public
- */
-
-String.prototype.coerce = function(other){
-  if (other instanceof String) {
-    return other;
-  } else {
-    return new String(other.toString());
-  }
-};
-
-/**
- * Operate on `right` with the given `op`.
- *
- * @param {String} op
- * @param {Node} right
- * @return {Node}
- * @api public
- */
-
-String.prototype.operate = function(op, right){
-  switch (op) {
-    case '+':
-      return new String(this.val + right.val);
-    default:
-      return Node.prototype.operate.call(this, op, right);
-  }
-};
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/ternary.js b/node/node_modules/jade/support/stylus/lib/nodes/ternary.js
deleted file mode 100644 (file)
index f82157e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-/*!
- * Stylus - Ternary
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `Ternary` with `cond`, `trueExpr` and `falseExpr`.
- *
- * @param {Expression} cond
- * @param {Expression} trueExpr
- * @param {Expression} falseExpr
- * @api public
- */
-
-var Ternary = module.exports = function Ternary(cond, trueExpr, falseExpr){
-  Node.call(this);
-  this.cond = cond;
-  this.trueExpr = trueExpr;
-  this.falseExpr = falseExpr;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Ternary.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Ternary.prototype.clone = function(){
-  var clone = new Ternary(
-      this.cond.clone()
-    , this.trueExpr.clone()
-    , this.falseExpr.clone());
-  clone.lineno = this.lineno;
-  return clone;
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/unaryop.js b/node/node_modules/jade/support/stylus/lib/nodes/unaryop.js
deleted file mode 100644 (file)
index a409fc6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*!
- * Stylus - UnaryOp
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node');
-
-/**
- * Initialize a new `UnaryOp` with `op`, and `expr`.
- *
- * @param {String} op
- * @param {Node} expr
- * @api public
- */
-
-var UnaryOp = module.exports = function UnaryOp(op, expr){
-  Node.call(this);
-  this.op = op;
-  this.expr = expr;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-UnaryOp.prototype.__proto__ = Node.prototype;
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-UnaryOp.prototype.clone = function(){
-  var clone = new UnaryOp(this.op, this.expr.clone());
-  clone.lineno = this.lineno;
-  return clone;
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/nodes/unit.js b/node/node_modules/jade/support/stylus/lib/nodes/unit.js
deleted file mode 100644 (file)
index 5e4e342..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-
-/*!
- * Stylus - Unit
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Node = require('./node')
-  , nodes = require('./');
-
-/**
- * Initialize a new `Unit` with the given `val` and unit `type`
- * such as "px", "pt", "in", etc.
- *
- * @param {String} val
- * @param {String} type
- * @api public
- */
-
-var Unit = module.exports = function Unit(val, type){
-  Node.call(this);
-  this.val = val;
-  this.type = type;
-};
-
-/**
- * Inherit from `Node.prototype`.
- */
-
-Unit.prototype.__proto__ = Node.prototype;
-
-/**
- * Return Boolean based on the unit value.
- *
- * @return {Boolean}
- * @api public
- */
-
-Unit.prototype.toBoolean = function(){
-  return nodes.Boolean(this.type
-      ? true
-      : this.val);
-};
-
-/**
- * Return unit string.
- *
- * @return {String}
- * @api public
- */
-
-Unit.prototype.toString = function(){
-  var n = this.val;
-  if ('px' == this.type) n = n.toFixed(0);
-  return n + (this.type || '');
-};
-
-/**
- * Return a clone of this node.
- * 
- * @return {Node}
- * @api public
- */
-
-Unit.prototype.clone = function(){
-  var clone = new Unit(this.val, this.type);
-  clone.lineno = this.lineno;
-  return clone;
-};
-
-/**
- * Operate on `right` with the given `op`.
- *
- * @param {String} op
- * @param {Node} right
- * @return {Node}
- * @api public
- */
-
-Unit.prototype.operate = function(op, right){
-  switch (op) {
-    case '-':
-      return new Unit(this.val - right.val, this.type);
-    case '+':
-      return new Unit(this.val + right.val, this.type);
-    case '/':
-      return new Unit(this.val / right.val, this.type);
-    case '*':
-      return new Unit(this.val * right.val, this.type);
-    case '%':
-      return new Unit(this.val % right.val, this.type);
-    case '**':
-      return new Unit(Math.pow(this.val, right.val), this.type);
-    case '..':
-    case '...':
-      var start = this.val
-        , end = right.val
-        , expr = new nodes.Expression
-        , inclusive = '..' == op;
-      do {
-        expr.push(new nodes.Unit(start));
-      } while (inclusive ? ++start <= end : ++start < end);
-      return expr;
-    default:
-      return Node.prototype.operate.call(this, op, right);
-  }
-};
-
-/**
- * Coerce `other` unit to the same type as `this` unit.
- *
- * Supports:
- *
- *    mm -> cm | in
- *    cm -> mm | in
- *    in -> mm | cm
- *    
- *    ms -> s
- *    s  -> ms
- *    
- *    Hz  -> kHz
- *    kHz -> Hz
- *
- * @param {Unit} other
- * @return {Unit}
- * @api public
- */
-
-Unit.prototype.coerce = function(other){
-  if (other instanceof Unit) {
-    var a = this
-      , b = other;
-    switch (a.type) {
-      case 'mm':
-        switch (b.type) {
-          case 'cm':
-            return new nodes.Unit(b.val * 2.54, 'mm');
-          case 'in':
-            return new nodes.Unit(b.val * 25.4, 'mm');
-        }
-      case 'cm':
-        switch (b.type) {
-          case 'mm':
-            return new nodes.Unit(b.val / 10, 'cm');
-          case 'in':
-            return new nodes.Unit(b.val * 2.54, 'cm');
-        }
-      case 'in':
-        switch (b.type) {
-          case 'mm':
-            return new nodes.Unit(b.val / 25.4, 'in');
-          case 'cm':
-            return new nodes.Unit(b.val / 2.54, 'in');
-        }
-      case 'ms':
-        switch (b.type) {
-          case 's':
-            return new nodes.Unit(b.val * 1000, 'ms');
-        }
-      case 's':
-        switch (b.type) {
-          case 'ms':
-            return new nodes.Unit(b.val / 1000, 's');
-        }
-      case 'Hz':
-        switch (b.type) {
-          case 'kHz':
-            return new nodes.Unit(b.val * 1000, 'Hz');
-        }
-      case 'kHz':
-        switch (b.type) {
-          case 'Hz':
-            return new nodes.Unit(b.val / 1000, 'kHz');
-        }
-    }
-    return new nodes.Unit(b.val, a.type);
-  } else if (other instanceof nodes.String) {
-    var val = parseInt(other.val, 10);
-    if (isNaN(val)) Node.prototype.coerce.call(this, other);
-    return new nodes.Unit(val);
-  } else {
-    return Node.prototype.coerce.call(this, other);
-  }
-};
diff --git a/node/node_modules/jade/support/stylus/lib/parser.js b/node/node_modules/jade/support/stylus/lib/parser.js
deleted file mode 100644 (file)
index 73ec075..0000000
+++ /dev/null
@@ -1,1360 +0,0 @@
-/*!
- * Stylus - Parser
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Lexer = require('./lexer')
-  , nodes = require('./nodes')
-  , inspect = require('sys').inspect;
-
-/**
- * Selector composite tokens.
- */
-
-var selectorTokens = [
-    'ident'
-  , 'string'
-  , 'selector'
-  , 'function'
-  , 'comment'
-  , 'space'
-  , 'color'
-  , 'unit'
-  , 'for'
-  , '['
-  , ']'
-  , '('
-  , ')'
-  , '+'
-  , '-'
-  , '*'
-  , '*='
-  , '<'
-  , '>'
-  , '='
-  , ':'
-  , '&'
-  , '~'
-];
-
-/**
- * CSS3 pseudo-selectors.
- */
-
-var pseudoSelectors = [
-    'root'
-  , 'nth-child'
-  , 'nth-last-child'
-  , 'nth-of-type'
-  , 'nth-last-of-type'
-  , 'first-child'
-  , 'last-child'
-  , 'first-of-type'
-  , 'last-of-type'
-  , 'only-child'
-  , 'only-of-type'
-  , 'empty'
-  , 'link'
-  , 'visited'
-  , 'active'
-  , 'hover'
-  , 'focus'
-  , 'target'
-  , 'lang'
-  , 'enabled'
-  , 'disabled'
-  , 'checked'
-  , 'not'
-];
-
-/**
- * Initialize a new `Parser` with the given `str` and `options`.
- *
- * @param {String} str
- * @param {Object} options
- * @api private
- */
-
-var Parser = module.exports = function Parser(str, options) {
-  var self = this;
-  options = options || {};
-  this.str = nodes.source = str;
-  this.lexer = new Lexer(str, options);
-  this.root = options.root || new nodes.Root;
-  this.state = ['root'];
-  this.state.pop = function(){
-    self.prevState = [].pop.call(this);
-  };
-};
-
-/**
- * Parser prototype.
- */
-
-Parser.prototype = {
-  
-  /**
-   * Constructor.
-   */
-  
-  constructor: Parser,
-  
-  /**
-   * Return current state.
-   *
-   * @return {String}
-   * @api private
-   */
-  
-  currentState: function() {
-    return this.state[this.state.length - 1];
-  },
-  
-  /**
-   * Parse the input, then return the root node.
-   *
-   * @return {Node}
-   * @api private
-   */
-  
-  parse: function(){
-    var block = this.parent = this.root;
-    while ('eos' != this.peek().type) {
-      if (this.accept('newline')) continue;
-      var stmt = this.statement();
-      this.accept(';');
-      if (!stmt) this.error('unexpected token {peek}, not allowed at the root level');
-      block.push(stmt);
-    }
-    return block;
-  },
-  
-  /**
-   * Throw an `Error` with the given `msg`.
-   *
-   * @param {String} msg
-   * @api private
-   */
-  
-  error: function(msg){
-    var type = this.peek().type
-      , val = undefined == this.peek().val
-        ? ''
-        : ' ' + this.peek().toString();
-    if (val.trim() == type.trim()) val = '';
-    throw new Error(msg.replace('{peek}', type + val));
-  },
-  
-  /**
-   * Accept the given token `type`, and return it,
-   * otherwise return `undefined`.
-   *
-   * @param {String} type
-   * @return {Token}
-   * @api private
-   */
-
-  accept: function(type){
-    if (type == this.peek().type) {
-      return this.next();
-    }
-  },
-
-  /**
-   * Expect token `type` and return it, throw otherwise.
-   *
-   * @param {String} type
-   * @return {Token}
-   * @api private
-   */
-
-  expect: function(type){
-    if (type != this.peek().type) {
-      throw new Error('expected ' + type + ', got ' + this.peek());
-    }
-    return this.next();
-  },
-  
-  /**
-   * Get the next token.
-   *
-   * @return {Token}
-   * @api private
-   */
-  
-  next: function() {
-    var tok = this.lexer.next();
-    nodes.lineno = tok.lineno;
-    return tok;
-  },
-  
-  /**
-   * Peek with lookahead(1).
-   *
-   * @return {Token}
-   * @api private
-   */
-  
-  peek: function() {
-    return this.lexer.peek();
-  },
-  
-  /**
-   * Lookahead `n` tokens.
-   *
-   * @param {Number} n
-   * @return {Token}
-   * @api private
-   */
-  
-  lookahead: function(n){
-    return this.lexer.lookahead(n);
-  },
-  
-  /**
-   * Check if the token at `n` is a valid selector token. 
-   *
-   * @param {Number} n
-   * @return {Boolean}
-   * @api private
-   */
-  
-  isSelectorToken: function(n) {
-    var la = this.lookahead(n).type;
-    switch (la) {
-      case 'for':
-        return this.bracketed;
-      case '[':
-        this.bracketed = true;
-        return true;
-      case ']':
-        this.bracketed = false;
-        return true;
-      default:
-        return ~selectorTokens.indexOf(la);
-    }
-  },
-  
-  /**
-   * Check if the token at `n` is a pseudo selector.
-   *
-   * @param {Number} n
-   * @return {Boolean}
-   * @api private
-   */
-  
-  isPseudoSelector: function(n){
-    return ~pseudoSelectors.indexOf(this.lookahead(n).val.name);
-  },
-  
-  /**
-   * Valid selector tokens.
-   */
-  
-  selectorToken: function() {
-    if (this.isSelectorToken(1)) return this.next();
-  },
-  
-  /**
-   * Consume whitespace.
-   */
-
-  skipWhitespace: function() {
-    while (~['space', 'indent', 'outdent', 'newline'].indexOf(this.peek().type))
-      this.next();
-  },
-
-  /**
-   * Consume spaces.
-   */
-  
-  skipSpaces: function() {
-    while ('space' == this.peek().type)
-      this.next();
-  },
-  
-  /**
-   * Check if the following sequence of tokens
-   * forms a function definition, ie trailing
-   * `{` or indentation.
-   */
-
-  looksLikeFunctionDefinition: function(i) {
-    return 'indent' == this.lookahead(i).type
-      || '{' == this.lookahead(i).type;
-  },
-  
-  /**
-   * Check if the following sequence of tokens
-   * forms a selector.
-   */
-  
-  looksLikeSelector: function() {
-    var i = 1;
-
-    // Assume selector when an ident is
-    // followed by a selector
-    while ('ident' == this.lookahead(i).type
-      && 'newline' == this.lookahead(i + 1).type) i += 2;
-
-    // Assume pseudo selectors are NOT properties
-    // as 'td:th-child(1)' may look like a property
-    // and function call to the parser otherwise
-    while (this.isSelectorToken(i)) {
-      if (':' == this.lookahead(i++).type
-        && this.isPseudoSelector(i))
-        return true;
-    }
-
-    // Trailing comma
-    if (',' == this.lookahead(i).type
-      && 'newline' == this.lookahead(i + 1).type)
-      return true;
-
-    // Trailing brace
-    if ('{' == this.lookahead(i).type
-      && 'newline' == this.lookahead(i + 1).type)
-      return true;
-
-    // css-style mode, false on ; }
-    if (this.css) {
-      if (';' == this.lookahead(i) ||
-          '}' == this.lookahead(i))
-        return false;
-    }
-
-    // Trailing separators
-    while (!~[
-        'newline'
-      , 'indent'
-      , 'outdent'
-      , 'for'
-      , 'if'
-      , ';'
-      , '}'].indexOf(this.lookahead(i).type))
-      ++i;
-
-    if ('indent' == this.lookahead(i).type)
-      return true;
-  },
-  
-  /**
-   *   statement
-   * | statement 'if' expression
-   * | statement 'unless' expression
-   */
-  
-  statement: function() {
-    var stmt = this.stmt()
-      , state = this.prevState
-      , block
-      , op;
-
-    // special-case statements since it
-    // is not an expression. We could
-    // implement postfix conditionals at
-    // the expression level, however they
-    // would then fail to enclose properties
-    if (this.allowPostfix) {
-      delete this.allowPostfix;
-      state = 'expression';
-    }
-
-    switch (state) {
-      case 'assignment':
-      case 'expression':
-      case 'function arguments':
-        while (op =
-             this.accept('if')
-          || this.accept('unless')
-          || this.accept('for')) {
-          switch (op.type) {
-            case 'if':
-            case 'unless':
-              stmt = new nodes.If(this.expression(), stmt);
-              stmt.postfix = true;
-              stmt.negate = 'unless' == op.type;
-              this.accept(';');
-              break;
-            case 'for':
-              var key
-                , val = this.id().name;
-              if (this.accept(',')) key = this.id().name;
-              this.expect('in');
-              var each = new nodes.Each(val, key, this.expression());
-              block = new nodes.Block;
-              block.push(stmt);
-              each.block = block;
-              stmt = each;
-          }
-        }
-    }
-
-    return stmt;
-  },
-  
-  /**
-   *    ident
-   *  | selector
-   *  | literal
-   *  | charset
-   *  | import
-   *  | media
-   *  | keyframes
-   *  | page
-   *  | for
-   *  | if
-   *  | unless
-   *  | expression
-   *  | 'return' expression
-   */
-  
-  stmt: function() {
-    var type = this.peek().type;
-    switch (type) {
-      case 'selector':
-      case 'literal':
-      case 'keyframes':
-      case 'charset':
-      case 'import':
-      case 'media':
-      case 'page':
-      case 'ident':
-      case 'unless':
-      case 'function':
-      case 'for':
-      case 'if':
-        return this[type]();
-      case 'return':
-        return this.return();
-      case '{':
-        return this.property();
-      default:
-        // Contextual selectors
-        switch (this.currentState()) {
-          case 'root':
-          case 'selector':
-          case 'conditional':
-          case 'keyframe':
-          case 'function':
-          case 'media':
-          case 'for':
-            switch (type) {
-              case 'color':
-              case '~':
-              case '+':
-              case '>':
-              case '<':
-              case '*':
-              case ':':
-              case '&':
-              case '[':
-                return this.selector();
-            }
-        }
-
-        // Expression fallback
-        var expr = this.expression();
-        if (expr.isEmpty) this.error('unexpected {peek}');
-        return expr;
-    }
-  },
-  
-  /**
-   * indent (!outdent)+ outdent
-   */
-
-  block: function(node, scope) {
-    var delim
-      , stmt
-      , _ = this.css
-      , block = this.parent = new nodes.Block(this.parent, node);
-
-    if (false === scope) block.scope = false;
-
-    // css-style
-    if (this.css = this.accept('{')) {
-      delim = '}';
-      this.skipWhitespace();
-    } else {
-      delim = 'outdent';
-      this.expect('indent');
-    }
-
-    while (delim != this.peek().type) {
-      // css-style
-      if (this.css) {
-        if (this.accept('newline')) continue;
-        stmt = this.statement();
-        this.accept(';');
-        this.skipWhitespace();
-      } else {
-        if (this.accept('newline')) continue;
-        stmt = this.statement();
-        this.accept(';');
-      }
-      if (!stmt) this.error('unexpected token {peek} in block');
-      block.push(stmt);
-    }
-
-    // css-style
-    if (this.css) {
-      this.skipWhitespace();
-      this.expect('}');
-      this.skipSpaces();
-      this.css = _;
-    } else {
-      this.expect('outdent');
-    }
-
-    this.parent = block.parent;
-    return block;
-  },
-  
-  /**
-   * for val (',' key) in expr
-   */
-  
-  for: function() {
-    this.expect('for');
-    var key
-      , val = this.id().name;
-    if (this.accept(',')) key = this.id().name;
-    this.expect('in');
-    var each = new nodes.Each(val, key, this.expression());
-    this.state.push('for');
-    each.block = this.block(each, false);
-    this.state.pop();
-    return each;
-  },
-  
-  /**
-   * return expression
-   */
-  
-  return: function() {
-    this.expect('return');
-    var expr = this.expression();
-    return expr.isEmpty
-      ? new nodes.Return
-      : new nodes.Return(expr);
-  },
-  
-  /**
-   * unless expression block
-   */
-  
-  unless: function() {
-    this.expect('unless');
-    var node = new nodes.If(this.expression(), true);
-    this.state.push('conditional');
-    node.block = this.block(node, false);
-    this.state.pop();
-    return node;
-  },
-  
-  /**
-   * if expression block (else block)?
-   */
-
-  if: function() {
-    this.expect('if');
-    var node = new nodes.If(this.expression());
-    this.state.push('conditional');
-    node.block = this.block(node, false);
-    while (this.accept('else')) {
-      if (this.accept('if')) {
-        var cond = this.expression()
-          , block = this.block(node, false);
-        node.elses.push(new nodes.If(cond, block));
-      } else {
-        node.elses.push(this.block(node, false));
-        break;
-      }
-    }
-    this.state.pop();
-    return node;
-  },
-  
-  /**
-   * media
-   */
-  
-  media: function() {
-    var val = this.expect('media').val
-      , media = new nodes.Media(val);
-    this.state.push('media');
-    media.block = this.block(media);
-    this.state.pop();
-    return media;
-  },
-
-  /**
-   * import expression
-   */
-   
-  import: function() {
-    this.expect('import');
-    this.allowPostfix = true;
-    return new nodes.Import(this.expression());
-  },
-  
-  /**
-   * charset string
-   */
-  
-  charset: function() {
-    this.expect('charset');
-    var str = this.expect('string').val;
-    this.allowPostfix = true;
-    return new nodes.Charset(str);
-  },
-  
-  /**
-   * page selector? block
-   */
-
-  page: function() {
-    var selector;
-    this.expect('page');
-    if (this.accept(':')) {
-      var str = this.expect('ident').val.name;
-      selector = new nodes.Literal(':' + str);
-    }
-    var page = new nodes.Page(selector);
-    this.state.push('page');
-    page.block = this.block(page);
-    this.state.pop();
-    return page;
-  },
-
-  /**
-   * keyframes name ((unit | from | to) block)+
-   */
-   
-  keyframes: function() {
-    this.expect('keyframes');
-    var pos
-      , _ = this.css
-      , keyframes = new nodes.Keyframes(this.id());
-
-    // css-sty;e
-    if (this.css = this.accept('{')) {
-      this.skipWhitespace();
-    } else {
-      this.expect('indent');
-    }
-
-    while (pos = this.accept('unit') || this.accept('ident')) {
-      // from | to
-      if ('ident' == pos.type) {
-        this.accept('space');
-        switch (pos.val.name) {
-          case 'from':
-            pos = new nodes.Unit(0, '%');
-            break;
-          case 'to':
-            pos = new nodes.Unit(100, '%');
-            break;
-          default:
-            throw new Error('invalid ident "' + pos.val.name + '" in selector');
-        }
-      } else {
-        pos = pos.val;
-      }
-
-      // block
-      this.state.push('keyframe');
-      var block = this.block(keyframes);
-      keyframes.push(pos, block);
-      this.state.pop();
-      if (this.css) this.skipWhitespace();
-    }
-
-    // css-style
-    if (this.css) {
-      this.skipWhitespace();
-      this.expect('}');
-      this.css = _;
-    } else {
-      this.expect('outdent');
-    }
-
-    return keyframes;
-  },
-  
-  /**
-   * literal
-   */
-  
-  literal: function() {
-    return this.expect('literal').val;
-  },
-  
-  /**
-   * ident space?
-   */
-  
-  id: function() {
-    var tok = this.expect('ident');
-    this.accept('space');
-    return tok.val;
-  },
-  
-  /**
-   *   ident
-   * | assignment
-   * | property
-   * | selector
-   */
-  
-  ident: function() {
-    var i = 2
-      , la = this.lookahead(i).type;
-
-    while ('space' == la) la = this.lookahead(++i).type;
-
-    switch (la) {
-      // Assignment
-      case '=':
-      case '?=':
-      case '-=':
-      case '+=':
-      case '*=':
-      case '/=':
-      case '%=':
-        return this.assignment();
-      // Operation
-      case '-':
-      case '+':
-      case '/':
-      case '*':
-      case '%':
-      case '**':
-      case 'and':
-      case 'or':
-      case '&&':
-      case '||':
-      case '>':
-      case '<':
-      case '>=':
-      case '<=':
-      case '!=':
-      case '==':
-      case '[':
-      case '?':
-      case 'in':
-      case 'is a':
-      case 'is defined':
-        // Prevent cyclic .ident, return literal
-        if (this._ident == this.peek()) {
-          return this.id();
-        } else {
-          this._ident = this.peek();
-          switch (this.currentState()) {
-            // unary op or selector in property / for
-            case 'for':
-            case 'selector':
-              return this.property();
-            // Part of a selector
-            case 'root':
-              return this.selector();
-            // Do not disrupt the ident when an operand
-            default:
-              return this.operand
-                ? this.id()
-                : this.expression();
-          }
-        }
-      // Selector or property
-      default:
-        switch (this.currentState()) {
-          case 'root':
-            return this.selector();
-          case 'for':
-          case 'page':
-          case 'media':
-          case 'selector':
-          case 'function':
-          case 'keyframe':
-          case 'conditional':
-            return this.property();
-          default:
-            return this.id();
-        }
-    }
-  },
-  
-  /**
-   * (ident | '{' expression '}')+
-   */
-  
-  interpolate: function() {
-    var node
-      , segs = [];
-    while (true) {
-      if (this.accept('{')) {
-        this.state.push('interpolation');
-        segs.push(this.expression());
-        this.expect('}');
-        this.state.pop();
-      } else if (node = this.accept('ident')){
-        segs.push(node.val);
-      } else {
-        break;
-      }
-    }
-    if (!segs.length) this.expect('ident');
-    return segs;
-  },
-  
-  /**
-   *   property ':'? expression
-   * | ident
-   */
-
-  property: function() {
-    if (this.looksLikeSelector()) return this.selector();
-
-    // property
-    var ident = this.interpolate()
-      , ret = prop = new nodes.Property(ident);
-
-    // optional ':'
-    this.accept('space');
-    if (this.accept(':')) this.accept('space');
-
-    this.state.push('property');
-    this.inProperty = true;
-    prop.expr = this.list();
-    if (prop.expr.isEmpty) ret = ident[0];
-    this.inProperty = false;
-    this.allowPostfix = true;
-    this.state.pop();
-
-    // optional ';'
-    this.accept(';');
-
-    return ret;
-  },
-  
-  /**
-   *   selector ',' selector
-   * | selector newline selector
-   * | selector block
-   */
-
-  selector: function() {
-    var tok
-      , arr
-      , val
-      , prev
-      , parent
-      , group = new nodes.Group;
-
-    // Allow comments in selectors
-    // for hacks
-    this.lexer.allowComments = true;
-
-    do {
-      val = prev = null;
-      arr = [];
-
-      // Clobber newline after ,
-      this.accept('newline');
-
-      // Selector candidates,
-      // stitched together to
-      // form a selector.
-      while (tok = this.selectorToken()) {
-        // Selector component
-        switch (tok.type) {
-          case 'unit': val = tok.val.val; break;
-          case 'ident': val = tok.val.name; break;
-          case 'function': val = tok.val.name + '('; break;
-          case 'string': val = tok.val.toString(); break;
-          case 'color': val = tok.val.raw; break;
-          case 'space': val = ' '; break;
-          default: val = tok.val;
-        }
-
-        // Whitespace support
-        if (!prev || prev.space) {
-          arr.push(val);
-        } else {
-          arr[arr.length-1] += val;
-        }
-        prev = tok;
-      }
-
-      // Push the selector
-      group.push(new nodes.Selector(arr.join(' '), parent));
-    } while (this.accept(',') || this.accept('newline'));
-
-    this.lexer.allowComments = false;
-    this.state.push('selector');
-    group.block = this.block(group);
-    this.state.pop();
-
-
-    return group;
-  },
-  
-  /**
-   * ident ('=' | '?=') expression
-   */
-  
-  assignment: function() {
-    var op
-      , node
-      , name = this.id().name;
-
-    if (op =
-         this.accept('=')
-      || this.accept('?=')
-      || this.accept('+=')
-      || this.accept('-=')
-      || this.accept('*=')
-      || this.accept('/=')
-      || this.accept('%=')) {
-      this.state.push('assignment');
-      var expr = this.list();
-      if (expr.isEmpty) this.error('invalid right-hand side operand in assignment, got {peek}')
-      node = new nodes.Ident(name, expr);
-      this.state.pop();
-
-      switch (op.type) {
-        case '?=':
-          var defined = new nodes.BinOp('is defined', node)
-            , lookup = new nodes.Ident(name);
-          node = new nodes.Ternary(defined, lookup, node);
-          break;
-        case '+=':
-        case '-=':
-        case '*=':
-        case '/=':
-        case '%=':
-          node.val = new nodes.BinOp(op.type[0], new nodes.Ident(name), expr);
-          break;
-      }
-    }
-
-    return node;
-  },
-  
-  /**
-   *   definition
-   * | call
-   */
-  
-  function: function() {
-    var parens = 1
-      , i = 2
-      , tok;
-
-    // Lookahead and determine if we are dealing
-    // with a function call or definition. Here
-    // we pair parens to prevent false negatives
-    out:
-    while (tok = this.lookahead(i++)) {
-      switch (tok.type) {
-        case 'function': case '(': ++parens; break;
-        case ')': if (!--parens) break out;
-      }
-    }
-    
-    // Definition or call
-    switch (this.currentState()) {
-      case 'expression':
-        return this.functionCall();
-      default:
-        return this.looksLikeFunctionDefinition(i)
-          ? this.functionDefinition()
-          : this.expression();
-    }
-  },
-
-  /**
-   * url '(' (expression | urlchars)+ ')'
-   */
-
-  url: function() {
-    this.expect('function');
-    this.state.push('function arguments');
-    var args = this.args();
-    this.expect(')');
-    this.state.pop();
-    return new nodes.Call('url', args);
-  },
-
-  /**
-   * ident '(' expression ')'
-   */
-  
-  functionCall: function() {
-    if ('url' == this.peek().val.name) return this.url();
-    var name = this.expect('function').val.name;
-    this.state.push('function arguments');
-    var args = this.args();
-    this.expect(')');
-    this.state.pop();
-    return new nodes.Call(name, args);
-  },
-  
-  /**
-   * ident '(' params ')' block
-   */
-  
-  functionDefinition: function() {
-    var name = this.expect('function').val.name;
-
-    // params
-    this.state.push('function params');
-    this.skipWhitespace();
-    var params = this.params();
-    this.skipWhitespace();
-    this.expect(')');
-    this.state.pop();
-
-    // Body
-    this.state.push('function');
-    var fn = new nodes.Function(name, params);
-    fn.block = this.block(fn);
-    this.state.pop();
-    return new nodes.Ident(name, fn);
-  },
-  
-  /**
-   *   ident
-   * | ident '...'
-   * | ident '=' expression
-   * | ident ',' ident
-   */
-  
-  params: function() {
-    var tok
-      , node
-      , params = new nodes.Params;
-    while (tok = this.accept('ident')) {
-      this.accept('space');
-      params.push(node = tok.val);
-      if (this.accept('...')) {
-        node.rest = true;
-      } else if (this.accept('=')) {
-        node.val = this.expression();
-      }
-      this.skipWhitespace();
-      this.accept(',');
-      this.skipWhitespace();
-    }
-    return params;
-  },
-  
-  /**
-   * expression (',' expression)*
-   */
-
-  args: function() {
-    var args = new nodes.Expression;
-    do {
-      args.push(this.expression());
-    } while (this.accept(','));
-    return args;
-  },
-  /**
-   * expression (',' expression)*
-   */
-
-  list: function() {
-    var node = this.expression();
-    while (this.accept(',')) {
-      if (node.isList) {
-        list.push(this.expression());
-      } else {
-        var list = new nodes.Expression(true);
-        list.push(node);
-        list.push(this.expression());
-        node = list;
-      }
-    }
-    return node;
-  },
-  
-  /**
-   * negation+
-   */
-
-  expression: function() {
-    var node
-      , expr = new nodes.Expression;
-    this.state.push('expression');
-    while (node = this.negation()) {
-      if (!node) this.error('unexpected token {peek} in expression');
-      expr.push(node);
-    }
-    this.state.pop();
-    return expr;
-  },
-  
-  /**
-   *   'not' ternary
-   * | ternary
-   */
-  
-  negation: function() {
-    if (this.accept('not')) {
-      return new nodes.UnaryOp('!', this.negation());
-    }
-    return this.ternary();
-  },
-  
-  /**
-   * logical ('?' expression ':' expression)?
-   */
-  
-  ternary: function() {
-    var node = this.logical();
-    if (this.accept('?')) {
-      var trueExpr = this.expression();
-      this.expect(':');
-      var falseExpr = this.expression();
-      node = new nodes.Ternary(node, trueExpr, falseExpr);
-    }
-    return node;
-  },
-  
-  /**
-   * typecheck (('&&' | '||') typecheck)*
-   */
-  
-  logical: function() {
-    var op
-      , node = this.typecheck();
-    while (op = this.accept('&&') || this.accept('||')) {
-      node = new nodes.BinOp(op.type, node, this.typecheck());
-    }
-    return node;
-  },
-  
-  /**
-   * equality ('is a' equality)*
-   */
-  
-  typecheck: function() {
-    var op
-      , node = this.equality();
-    while (op = this.accept('is a')) {
-      this.operand = true;
-      if (!node) throw new Error('illegal unary ' + op);
-      node = new nodes.BinOp(op.type, node, this.equality());
-      this.operand = false;
-    }
-    return node;
-  },
-  
-  /**
-   * in (('==' | '!=') in)*
-   */
-  
-  equality: function() {
-    var op
-      , node = this.in();
-    while (op = this.accept('==') || this.accept('!=')) {
-      this.operand = true;
-      if (!node) throw new Error('illegal unary ' + op);
-      node = new nodes.BinOp(op.type, node, this.in());
-      this.operand = false;
-    }
-    return node;
-  },
-
-  /**
-   * relational ('in' relational)*
-   */
-
-  in: function() {
-    var node = this.relational();
-    while (this.accept('in')) {
-      this.operand = true;
-      if (!node) throw new Error('illegal unary in');
-      node = new nodes.BinOp('in', node, this.relational());
-      this.operand = false;
-    }
-    return node;
-  },
-  
-  /**
-   * range (('>=' | '<=' | '>' | '<') range)*
-   */
-  
-  relational: function() {
-    var op
-      , node = this.range();
-    while (op = 
-         this.accept('>=')
-      || this.accept('<=')
-      || this.accept('<')
-      || this.accept('>')
-      ) {
-      this.operand = true;
-      if (!node) throw new Error('illegal unary ' + op);
-      node = new nodes.BinOp(op.type, node, this.range());
-      this.operand = false;
-    }
-    return node;
-  },
-  
-  /**
-   * additive (('..' | '...') additive)*
-   */
-  
-  range: function() {
-    var op
-      , node = this.additive();
-    if (op = this.accept('...') || this.accept('..')) {
-      this.operand = true;
-      if (!node) throw new Error('illegal unary ' + op);
-      node = new nodes.BinOp(op.val, node, this.additive());
-      this.operand = false;
-    }
-    return node;
-  },
-  
-  /**
-   * multiplicative (('+' | '-') multiplicative)*
-   */
-  
-  additive: function() {
-    var op
-      , node = this.multiplicative();
-    while (op = this.accept('+') || this.accept('-')) {
-      this.operand = true;
-      node = new nodes.BinOp(op.type, node, this.multiplicative());
-      this.operand = false;
-    }
-    return node;
-  },
-  
-  /**
-   * defined (('**' | '*' | '/' | '%') defined)*
-   */
-  
-  multiplicative: function() {
-    var op
-      , node = this.defined();
-    while (op =
-         this.accept('**')
-      || this.accept('*')
-      || this.accept('/')
-      || this.accept('%')) {
-      this.operand = true;
-      if ('/' == op && this.inProperty && !this.parens) {
-        var expr = new nodes.Expression;
-        expr.push(node);
-        expr.push(new nodes.Literal('/'));
-        return expr;
-      } else {
-        if (!node) throw new Error('illegal unary ' + op);
-        node = new nodes.BinOp(op.type, node, this.defined());
-        this.operand = false;
-      }
-    }
-    return node;
-  },
-  
-  /**
-   *    unary 'is defined'
-   *  | unary
-   */
-  
-  defined: function() {
-    var node = this.unary();
-    if (this.accept('is defined')) {
-      if (!node) throw new Error('illegal use of "is defined"');
-      node = new nodes.BinOp('is defined', node);
-    }
-    return node;
-  },
-  
-  /**
-   *   ('!' | '~' | '+' | '-') unary
-   * | subscript
-   */
-  
-  unary: function() {
-    var op
-      , node;
-    if (op =
-         this.accept('!')
-      || this.accept('~')
-      || this.accept('+')
-      || this.accept('-')) {
-      this.operand = true;
-      node = new nodes.UnaryOp(op.type, this.unary());
-      this.operand = false;
-      return node;
-    }
-    return this.subscript();
-  },
-  
-  /**
-   *   primary ('[' expression ']')+
-   * | primary
-   */
-  
-  subscript: function() {
-    var node = this.primary();
-    while (this.accept('[')) {
-      node = new nodes.BinOp('[]', node, this.expression());
-      this.expect(']');
-    }
-    return node;
-  },
-  
-  /**
-   *   unit
-   * | null
-   * | color
-   * | string
-   * | ident
-   * | boolean
-   * | literal
-   * | '(' expression ')'
-   */
-
-  primary: function() {
-    var op
-      , node;
-
-    // Parenthesis
-    if (this.accept('(')) {
-      this.parens = true;
-      var expr = this.expression();
-      this.expect(')');
-      this.parens = false;
-      return expr;
-    }
-
-    // Primitive
-    switch (this.peek().type) {
-      case 'null':
-      case 'unit':
-      case 'color':
-      case 'string':
-      case 'literal':
-      case 'boolean':
-        return this.next().val;
-      case 'ident':
-        return this.ident();
-      case 'function':
-        return this.functionCall();
-    }
-  }
-};
diff --git a/node/node_modules/jade/support/stylus/lib/renderer.js b/node/node_modules/jade/support/stylus/lib/renderer.js
deleted file mode 100644 (file)
index db98bf7..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*!
- * Stylus - Renderer
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Parser = require('./parser')
-  , Compiler = require('./visitor/compiler')
-  , Evaluator = require('./visitor/evaluator')
-  , utils = require('./utils')
-  , nodes = require('./nodes');
-
-/**
- * Initialize a new `Renderer` with the given `str` and `options`.
- *
- * @param {String} str
- * @param {Object} options
- * @api public
- */
-
-var Renderer = module.exports = function Renderer(str, options) {
-  options = options || {};
-  options.functions = {};
-  options.imports = [__dirname + '/functions'];
-  options.filename = options.filename || 'stylus';
-  this.str = str;
-  this.options = options;
-  this.parser = new Parser(str, options);
-};
-
-/**
- * Parse and evaluate AST, then callback `fn(err, css)`.
- *
- * @param {Function} fn
- * @api public
- */
-
-Renderer.prototype.render = function(fn){
-  try {
-    var ast = this.parser.parse()
-      , expr;
-    this.evaluator = new Evaluator(ast, this.options);
-    ast = this.evaluator.evaluate();
-    new Compiler(ast, this.options).compile(fn);
-  } catch (err) {
-    fn(utils.formatException(
-        this
-      , err
-      , this.options));
-  }
-  nodes.source = null;
-};
-
-/**
- * Set option `key` to `val`.
- *
- * @param {String} key
- * @param {Mixed} val
- * @return {Renderer} for chaining
- * @api public
- */
-
-Renderer.prototype.set = function(key, val){
-  this.options[key] = val;
-  return this;
-};
-
-/**
- * Define function with the given `name`. Optionally
- * the function may accept full expressions, by setting `raw`
- * to `true`.
- *
- * @param {String} name
- * @param {Function} fn
- * @return {Renderer} for chaining
- * @api public
- */
-
-Renderer.prototype.define = function(name, fn, raw){
-  this.options.functions[name] = fn;
-  if (undefined != raw) fn.raw = raw;
-  return this;
-};
-
-/**
- * Import the given `file`.
- *
- * @param {String} file
- * @return {Renderer} for chaining
- * @api public
- */
-
-Renderer.prototype.import = function(file){
-  this.options.imports.push(file);
-  return this;
-};
-
-
diff --git a/node/node_modules/jade/support/stylus/lib/stack/frame.js b/node/node_modules/jade/support/stylus/lib/stack/frame.js
deleted file mode 100644 (file)
index 580f9cb..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-
-/*!
- * Stylus - stack - Frame
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Scope = require('./scope')
-  , blocks = require('../nodes');
-
-/**
- * Initialize a new `Frame` with the given `block`.
- *
- * @param {Block} block
- * @api private
- */
-
-var Frame = module.exports = function Frame(block) {
-  this._scope = false === block.scope
-    ? null
-    : new Scope;
-  this.block = block;
-};
-
-/**
- * Return this frame's scope or the parent scope
- * for scope-less blocks.
- *
- * @return {Scope}
- * @api public
- */
-
-Frame.prototype.__defineGetter__('scope', function(){
-  return this._scope || this.parent.scope;
-});
-
-/**
- * Lookup the given local variable `name`.
- *
- * @param {String} name
- * @return {Node}
- * @api private
- */
-
-Frame.prototype.lookup = function(name){
-  return this.scope.lookup(name)
-};
-
-/**
- * Custom inspect.
- *
- * @return {String}
- * @api public
- */
-
-Frame.prototype.inspect = function(){
-  return '[Frame '
-    + (false === this.block.scope
-        ? 'scope-less'
-        : this.scope.inspect())
-    + ']';
-};
diff --git a/node/node_modules/jade/support/stylus/lib/stack/index.js b/node/node_modules/jade/support/stylus/lib/stack/index.js
deleted file mode 100644 (file)
index fc6fa53..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-
-/*!
- * Stylus - Stack
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Frame = require('./frame');
-
-/**
- * Initialize a new `Stack`.
- *
- * @api private
- */
-
-var Stack = module.exports = function Stack() {
-  Array.apply(this, arguments);
-};
-
-/**
- * Inherit from `Array.prototype`.
- */
-
-Stack.prototype.__proto__ = Array.prototype;
-
-/**
- * Push the given `frame`.
- *
- * @param {Frame} frame
- * @api public
- */
-
-Stack.prototype.push = function(frame){
-  frame.stack = this;
-  frame.parent = this.currentFrame;
-  return [].push.apply(this, arguments);
-};
-
-/**
- * Return the current stack `Frame`.
- *
- * @return {Frame}
- * @api private
- */
-
-Stack.prototype.__defineGetter__('currentFrame', function(){
-  return this[this.length - 1];
-});
-
-/**
- * Lookup stack frame for the given `block`.
- *
- * @param {Block} block
- * @return {Frame}
- * @api private
- */
-
-Stack.prototype.getBlockFrame = function(block){
-  for (var i = 0; i < this.length; ++i) {
-    if (block == this[i].block) {
-      return this[i];
-    }
-  }
-};
-
-/**
- * Lookup the given local variable `name`, relative
- * to the lexical scope of the current frame's `Block`.
- *
- * When the result of a lookup is an identifier
- * a recursive lookup is performed, defaulting to
- * returning the identifier itself.
- *
- * @param {String} name
- * @return {Node}
- * @api private
- */
-
-Stack.prototype.lookup = function(name){
-  var block = this.currentFrame.block
-    , val
-    , ret;
-
-  do {
-    var frame = this.getBlockFrame(block);
-    if (frame && (val = frame.lookup(name))) {
-      switch (val.first.nodeName) {
-        case 'ident':
-          return this.lookup(val.first.name) || val;
-        default:
-          return val;
-      }
-    }
-  } while (block = block.parent);
-};
-
-/**
- * Custom inspect.
- *
- * @return {String}
- * @api private
- */
-
-Stack.prototype.inspect = function(){
-  return this.reverse().map(function(frame){
-    return frame.inspect();
-  }).join('\n');
-};
-
-/**
- * Return stack string formatted as:
- *
- *   at <context> (<filename>:<lineno>)
- *
- * @return {String}
- * @api private
- */
-
-Stack.prototype.toString = function(){
-  var block
-    , node
-    , buf = []
-    , location
-    , len = this.length;
-
-  while (len--) {
-    block = this[len].block;
-    if (node = block.node) {
-      location = '(' + node.filename + ':' + node.lineno + ')';
-      switch (node.nodeName) {
-        case 'function':
-          buf.push('    at ' + node.name + '() ' + location);
-          break;
-        case 'group':
-          buf.push('    at "' + node.nodes[0].val + '" ' + location);
-          break;
-      }
-    }
-  }
-
-  return buf.join('\n');
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/stack/scope.js b/node/node_modules/jade/support/stylus/lib/stack/scope.js
deleted file mode 100644 (file)
index e2dc4da..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/*!
- * Stylus - stack - Scope
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Initialize a new `Scope`.
- *
- * @api private
- */
-
-var Scope = module.exports = function Scope() {
-  this.locals = {};
-};
-
-/**
- * Add `ident` node to the current scope.
- *
- * @param {Ident} ident
- * @api private
- */
-
-Scope.prototype.add = function(ident){
-  this.locals[ident.name] = ident.val;
-};
-
-/**
- * Lookup the given local variable `name`.
- *
- * @param {String} name
- * @return {Node}
- * @api private
- */
-
-Scope.prototype.lookup = function(name){
-  return this.locals[name];
-};
-
-/**
- * Custom inspect.
- *
- * @return {String}
- * @api public
- */
-
-Scope.prototype.inspect = function(){
-  var keys = Object.keys(this.locals).map(function(key){ return '@' + key; });
-  return '[Scope'
-    + (keys.length ? ' ' + keys.join(', ') : '')
-    + ']';
-};
diff --git a/node/node_modules/jade/support/stylus/lib/stylus.js b/node/node_modules/jade/support/stylus/lib/stylus.js
deleted file mode 100644 (file)
index 8349248..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-
-/*!
- * Stylus
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Renderer = require('./renderer')
-  , nodes = require('./nodes')
-  , utils = require('./utils');
-
-/**
- * Export render as the module.
- */
-
-exports = module.exports = render;
-
-/**
- * Library version.
- */
-
-exports.version = '0.9.2';
-
-/**
- * Expose nodes.
- */
-
-exports.nodes = nodes;
-
-/**
- * Expose BIFs.
- */
-
-exports.functions = require('./functions');
-
-/**
- * Expose utils.
- */
-
-exports.utils = require('./utils');
-
-/**
- * Expose middleware.
- */
-
-exports.middleware = require('./middleware');
-
-/**
- * Expose constructors.
- */
-
-exports.Parser = require('./parser');
-exports.Evaluator = require('./visitor/evaluator');
-
-/**
- * Convert the given `css` to `stylus` source.
- *
- * @param {String} css
- * @return {String}
- * @api public
- */
-
-exports.convertCSS = require('./convert/css');
-
-/**
- * Parse the given `str` with `options` and return the AST.
- *
- * Examples:
- *
- *     css.parse(str);
- *     // raw ast comprised of nodes
- *
- *     css.parse(str).toObject();
- *     // plain object representation
- *     
- *     css.parse(str).toJSON();
- *     // JSON representation
- *
- * @param {String} str
- * @param {Object} options
- * @return {Object}
- * @api public
- */
-
-exports.parse = function(str, options){
-  var renderer = new Renderer(str, options);
-  try {
-    return renderer.parser.parse();
-  } catch (err) {
-    throw utils.formatException(
-        renderer
-      , err
-      , options);
-  }
-};
-
-/**
- * Render the given `str` with `options` and callback `fn(err, css)`.
- *
- * @param {String} str
- * @param {Object|Function} options
- * @param {Function} fn
- * @api public
- */
-
-exports.render = function(str, options, fn){
-  if ('function' == typeof options) fn = options, options = {};
-  new Renderer(str, options).render(fn);
-};
-
-/**
- * Return a new `Renderer` for the given `str` and `options`.
- *
- * @param {String} str
- * @param {Object} options
- * @return {Renderer}
- * @api public
- */
-
-function render(str, options) {
-  return new Renderer(str, options);
-}
-
-/**
- * Expose optional functions.
- */
-
-exports.url = require('./functions/url');
diff --git a/node/node_modules/jade/support/stylus/lib/token.js b/node/node_modules/jade/support/stylus/lib/token.js
deleted file mode 100644 (file)
index 80f2a34..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/*!
- * Stylus - Token
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var inspect = require('sys').inspect;
-
-/**
- * Initialize a new `Token` with the given `type` and `val`.
- *
- * @param {String} type
- * @param {Mixed} val
- * @api private
- */
-
-var Token = exports = module.exports = function Token(type, val) {
-  this.type = type;
-  this.val = val;
-};
-
-/**
- * Custom inspect.
- *
- * @return {String}
- * @api public
- */
-
-Token.prototype.inspect = function(){
-  var val = ' ' + inspect(this.val);
-  return '[Token:' + this.lineno + ' '
-    + '\x1b[32m' + this.type + '\x1b[0m'
-    + '\x1b[33m' + (this.val ? val : '') + '\x1b[0m'
-    + ']';
-};
-
-/**
- * Return type or val.
- *
- * @return {String}
- * @api public
- */
-
-Token.prototype.toString = function(){
-  return (undefined === this.val
-    ? this.type
-    : this.val).toString();
-};
diff --git a/node/node_modules/jade/support/stylus/lib/utils.js b/node/node_modules/jade/support/stylus/lib/utils.js
deleted file mode 100644 (file)
index aa06b31..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-
-/*!
- * Stylus - utils
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var nodes = require('./nodes')
-  , inspect = require('sys').inspect
-  , fs = require('fs');
-
-/**
- * Attempt to lookup `path` within `paths` from tail to head.
- * Optionally a path to `ignore` may be passed.
- *
- * @param {String} path
- * @param {String} paths
- * @param {String} ignore
- * @return {String}
- * @api private
- */
-
-exports.lookup = function(path, paths, ignore){
-  var lookup
-    , i = paths.length;
-
-  // Absolute
-  if ('/' == path[0]) {
-    try {
-      fs.statSync(path);
-      return path;
-    } catch (err) {
-      // Ignore, continue on
-      // to trying relative lookup.
-      // Needed for url(/images/foo.png)
-      // for example
-    }
-  }
-
-  // Relative
-  while (i--) {
-    try {
-      lookup = paths[i] + '/' + path;
-      if (ignore == lookup) continue;
-      fs.statSync(lookup);
-      return lookup;
-    } catch (err) {
-      // Ignore
-    }
-  }
-};
-
-/**
- * Format the given `err` in context to `renderer`.
- *
- * @param {Renderer} renderer
- * @param {Error} err
- * @param {Object} options
- * @return {Error}
- * @api private
- */
-
-exports.formatException = function(renderer, err, options){
-  var lineno = renderer.evaluator
-      ? renderer.evaluator.lineno
-      : renderer.parser.lexer.lineno
-    , contextLineno = lineno - 2
-    , contextLines = options.context || 8
-    , lastWidth = (contextLineno + contextLines).toString().length;
-
-  var src = (err.str || renderer.str).split('\n')
-    .slice(contextLineno, contextLineno + contextLines)
-    .map(function(line){
-      var n = ++contextLineno
-        , width = n.toString().length
-        , pad = Array(lastWidth - width + 1).join(' ');
-      return '  ' + pad + n + ': ' + inspect(line);
-    }).join('\n');
-
-  err.message = renderer.options.filename
-    + ':' + lineno
-    + '\n' + src
-    + '\n\n' + err.message + '\n'
-    + (err.stylusStack ? err.stylusStack + '\n' : '');
-
-  return err;
-};
-
-/**
- * Assert that `node` is of the given `type`, or throw.
- *
- * @param {Node} node
- * @param {Function} type
- * @param {String} param
- * @api public
- */
-
-exports.assertType = function(node, type, param){
-  exports.assertPresent(node, param);
-  if (node instanceof type) return;
-  var actual = node.constructor.name
-    , msg = 'expected ' + type.name + ', but got ' + actual + ':' + node;
-  throw new Error('TypeError: ' + msg);
-};
-
-/**
- * Assert that `node` is a `String` or `Ident`.
- *
- * @param {Node} node
- * @param {String} param
- * @api public
- */
-
-exports.assertString = function(node, param){
-  exports.assertPresent(node, param);
-  if (node instanceof nodes.String) return;
-  if (node instanceof nodes.Ident) return;
-  var actual = node.constructor.name
-    , msg = 'expected String or Ident, but got ' + actual + ':' + node;
-  throw new Error('TypeError: ' + msg);
-};
-
-/**
- * Assert that `node` is a `RGBA` or `HSLA`.
- *
- * @param {Node} node
- * @param {String} param
- * @api public
- */
-
-exports.assertColor = function(node, param){
-  exports.assertPresent(node, param);
-  if (node instanceof nodes.RGBA) return;
-  if (node instanceof nodes.HSLA) return;
-  var actual = node.constructor.name
-    , msg = 'expected RGBA or HSLA, but got ' + actual + ':' + node;
-  throw new Error('TypeError: ' + msg);
-};
-
-/**
- * Assert that param `name` is given, aka the `node` is passed.
- *
- * @param {Node} node
- * @param {String} name
- * @api public
- */
-
-exports.assertPresent = function(node, name){
-  if (node) return;
-  if (name) throw new Error('ArgumentError: argument ' + name + ' required');
-  throw new Error('ArgumentError: argument missing');
-};
-
-/**
- * Unwrap `expr`.
- *
- * Takes an expressions with length of 1
- * such as `((1 2 3))` and unwraps it to `(1 2 3)`.
- *
- * @param {Expression} expr
- * @return {Node}
- * @api public
- */
-
-exports.unwrap = function(expr){
-  if (expr.preserve) return expr;
-  if ('expression' != expr.nodeName) return expr;
-  if (1 != expr.nodes.length) return expr;
-  if ('expression' != expr.nodes[0].nodeName) return expr;
-  return exports.unwrap(expr.nodes[0]);
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/lib/visitor/compiler.js b/node/node_modules/jade/support/stylus/lib/visitor/compiler.js
deleted file mode 100644 (file)
index f39ee04..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-
-/*!
- * Stylus - Compiler
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Visitor = require('./')
-  , nodes = require('../nodes');
-
-/**
- * Initialize a new `Compiler` with the given `root` Node
- * and the following `options`.
- *
- * Options:
- *
- *   - `compress`  Compress the css output, defaults to false
- *
- * @param {Node} root
- * @api public
- */
-
-var Compiler = module.exports = function Compiler(root, options) {
-  options = options || {};
-  this.compress = options.compress;
-  this.indents = 1;
-  Visitor.call(this, root);
-  this.tree = [];
-};
-
-/**
- * Inherit from `Visitor.prototype`.
- */
-
-Compiler.prototype.__proto__ = Visitor.prototype;
-
-/**
- * Compile to css, and callback `fn(err, css)`.
- *
- * @param {Function} fn
- * @api public
- */
-
-Compiler.prototype.compile = function(fn){
-  this.callback = fn;
-  this.css = this.visit(this.root);
-  fn(null, this.css);
-};
-
-/**
- * Return indentation string.
- *
- * @return {String}
- * @api private
- */
-
-Compiler.prototype.__defineGetter__('indent', function(){
-  return this.compress
-     ? ''
-     : new Array(this.indents).join('  ');
-});
-
-/**
- * Visit Root.
- */
-
-Compiler.prototype.visitRoot = function(block){
-  this.buf = '';
-  for (var i = 0, len = block.nodes.length; i < len; ++i) {
-    var node = block.nodes[i];
-    if (node instanceof nodes.Null
-      || node instanceof nodes.Expression
-      || node instanceof nodes.Function
-      || node instanceof nodes.Unit) continue;
-    var ret = this.visit(node);
-    if (ret) this.buf += ret + '\n';
-  }
-  return this.buf;
-};
-
-/**
- * Visit Block.
- */
-
-Compiler.prototype.visitBlock = function(block){
-  if (block.hasProperties) {
-    var arr = [this.compress ? '{' : ' {'];
-    ++this.indents;
-    for (var i = 0, len = block.nodes.length; i < len; ++i) {
-      this.last = len - 1 == i;
-      var node = block.nodes[i];
-      if (node instanceof nodes.Null
-        || node instanceof nodes.Expression
-        || node instanceof nodes.Function
-        || node instanceof nodes.Group
-        || node instanceof nodes.Unit) continue;
-      arr.push(this.visit(node));
-    }
-    --this.indents;
-    arr.push(this.indent + '}');
-    this.buf += arr.join(this.compress ? '' : '\n');
-    this.buf += '\n';
-  }
-
-  // Nesting
-  for (var i = 0, len = block.nodes.length; i < len; ++i) {
-    this.visit(block.nodes[i]);
-  }
-};
-
-/**
- * Visit Keyframes.
- */
-
-Compiler.prototype.visitKeyframes = function(node){
-  this.buf += '@-webkit-keyframes '
-    + this.visit(node.name)
-    + (this.compress ? '{' : ' {');
-  ++this.indents;
-  node.frames.forEach(function(frame){
-    if (!this.compress) this.buf += '\n  ';
-    this.buf += this.visit(frame.pos);
-    this.visit(frame.block);
-  }, this);
-  --this.indents;
-  this.buf += '}' + (this.compress ? '' : '\n');
-};
-
-/**
- * Visit Media.
- */
-
-Compiler.prototype.visitMedia = function(media){
-  this.buf += '@media ' + media.val;
-  this.buf += this.compress ? '{' : ' {\n';
-  ++this.indents;
-  this.visit(media.block);
-  --this.indents;
-  this.buf += '}' + (this.compress ? '' : '\n');
-};
-
-/**
- * Visit Page.
- */
-
-Compiler.prototype.visitPage = function(page){
-  this.buf += this.indent + '@page';
-  this.buf += page.selector ? ' ' + page.selector : '';
-  this.visit(page.block);
-};
-
-/**
- * Visit Function.
- */
-
-Compiler.prototype.visitFunction = function(fn){
-  return fn.name;
-};
-
-/**
- * Visit Variable.
- */
-
-Compiler.prototype.visitVariable = function(variable){
-  return '';
-};
-
-/**
- * Visit Charset.
- */
-
-Compiler.prototype.visitCharset = function(charset){
-  return '@charset ' + this.visit(charset.val);
-};
-
-/**
- * Visit Literal.
- */
-
-Compiler.prototype.visitLiteral = function(lit){
-  return lit.val.trim().replace(/^  /gm, '');
-};
-
-/**
- * Visit Boolean.
- */
-
-Compiler.prototype.visitBoolean = function(bool){
-  return bool.toString();
-};
-
-/**
- * Visit RGBA.
- */
-
-Compiler.prototype.visitRGBA = function(rgba){
-  return rgba.toString();
-};
-
-/**
- * Visit HSLA.
- */
-
-Compiler.prototype.visitHSLA = function(hsla){
-  return hsla.rgba.toString();
-};
-
-/**
- * Visit Unit.
- */
-
-Compiler.prototype.visitUnit = function(unit){
-  var type = unit.type || ''
-    , n = unit.val
-    , float = n != (n | 0);
-
-  // Int
-  if ('px' == type) n = n.toFixed(0);
-  // Compress
-  if (this.compress) {
-    // Zero is always '0'
-    if (0 == n) return '0';
-    // Omit leading '0' on floats
-    if (float && n < 1 && n > -1) {
-      return n.toString().replace('0.', '.') + type;
-    }
-  }
-
-  return n.toString() + type;
-};
-
-/**
- * Visit Group.
- */
-
-Compiler.prototype.visitGroup = function(group){
-  var self = this
-    , tree = this.tree
-    , prev = tree[tree.length - 1]
-    , curr = [];
-
-  // Construct an array of arrays
-  // representing the selector hierarchy
-  group.nodes.forEach(function(node){
-    curr.push(node.parent
-        ? node
-        : node.val);
-  });
-
-  tree.push(curr);
-
-  // Reverse recurse the
-  // hierarchy array to build
-  // up the selector permutations.
-  // When we reach root, we have our
-  // selector string built
-  var selectors = []
-    , buf = [];
-  function join(arr, i) {
-    if (i) {
-      arr[i].forEach(function(str){
-        buf.unshift(str);
-        join(arr, i - 1);
-        buf.shift();
-      });
-    } else {
-      arr[0].forEach(function(selector){
-        var str = selector;
-        if (buf.length) {
-          for (var i = 0, len = buf.length; i < len; ++i) {
-            if (~buf[i].indexOf('&')) {
-              str = buf[i].replace('&', str);
-            } else {
-              str += ' ' + buf[i];
-            }
-          }
-        }
-        selectors.push(self.indent + str);
-      });
-    }
-  }
-
-  // Join selectors
-  if (group.block.hasProperties) {
-    join(tree, tree.length - 1);
-    this.buf += selectors.join(this.compress ? ',' : ',\n');
-  }
-
-  // Output blocks
-  this.visit(group.block);
-  tree.pop();
-};
-
-/**
- * Visit Ident.
- */
-
-Compiler.prototype.visitIdent = function(ident){
-  return ident.name;
-};
-
-/**
- * Visit String.
- */
-
-Compiler.prototype.visitString = function(string){
-  return this.isURL
-    ? string.val
-    : string.toString();
-};
-
-/**
- * Visit Null.
- */
-
-Compiler.prototype.visitNull = function(node){
-  return '';
-};
-
-/**
- * Visit Call.
- */
-
-Compiler.prototype.visitCall = function(call){
-  this.isURL = 'url' == call.name;
-  var args = call.args.nodes.map(function(arg){
-    return this.visit(arg);
-  }, this).join(this.compress ? ',' : ', ');
-  if (this.isURL) args = '"' + args + '"';
-  delete this.isURL;
-  return call.name + '(' + args + ')';
-};
-
-/**
- * Visit Import.
- */
-
-Compiler.prototype.visitImport = function(import){
-  return '@import ' + this.visit(import.path) + ';';
-};
-
-/**
- * Visit Expression.
- */
-
-Compiler.prototype.visitExpression = function(expr){
-  return expr.nodes.map(function(node){
-    return this.visit(node);
-  }, this).join(expr.isList
-      ? (this.compress ? ',' : ', ')
-      : (this.isURL ? '' : ' '));
-};
-
-/**
- * Visit Property.
- */
-
-Compiler.prototype.visitProperty = function(prop){
-  var self = this
-    , val = this.visit(prop.expr);
-  return this.indent + (prop.name || prop.segments.join(''))
-    + (this.compress ? ':' + val : ': ' + val)
-    + (this.compress
-        ? (this.last ? '' : ';')
-        : ';');
-};
diff --git a/node/node_modules/jade/support/stylus/lib/visitor/evaluator.js b/node/node_modules/jade/support/stylus/lib/visitor/evaluator.js
deleted file mode 100644 (file)
index 1b166b4..0000000
+++ /dev/null
@@ -1,911 +0,0 @@
-
-/*!
- * Stylus - Evaluator
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var Visitor = require('./')
-  , nodes = require('../nodes')
-  , Stack = require('../stack')
-  , Frame = require('../stack/frame')
-  , Scope = require('../stack/scope')
-  , utils = require('../utils')
-  , bifs = require('../functions')
-  , dirname = require('path').dirname
-  , colors = require('../colors')
-  , fs = require('fs');
-
-/**
- * Initialize a new `Evaluator` with the given `root` Node
- * and the following `options`.
- *
- * Options:
- *
- *   - `compress`  Compress the css output, defaults to false
- *   - `warn`  Warn the user of duplicate function definitions etc
- *
- * @param {Node} root
- * @api private
- */
-
-var Evaluator = module.exports = function Evaluator(root, options) {
-  options = options || {};
-  Visitor.call(this, root);
-  this.stack = new Stack;
-  this.imports = options.imports || [];
-  this.functions = options.functions || {};
-  this.paths = options.paths || [];
-  this.filename = options.filename;
-  this.paths.push(dirname(options.filename || '.'));
-  this.stack.push(this.global = new Frame(root));
-  this.warnings = options.warn;
-  this.options = options;
-  this.calling = []; // TODO: remove, use stack
-};
-
-/**
- * Inherit from `Visitor.prototype`.
- */
-
-Evaluator.prototype.__proto__ = Visitor.prototype;
-
-/**
- * Proxy visit to expose node line numbers.
- *
- * @param {Node} node
- * @return {Node}
- * @api private
- */
-
-var visit = Visitor.prototype.visit;
-Evaluator.prototype.visit = function(node){
-  try {
-    return visit.call(this, node);
-  } catch (err) {
-    // TODO: less-lame hack to reference
-    // the origin node source input
-    this.lineno = this.lineno || node.lineno;
-    err.str = err.str || node.source;
-    err.stylusStack = err.stylusStack || this.stack.toString();
-    throw err;
-  }
-};
-
-/**
- * Perform evaluation setup:
- *
- *   - populate global scope
- *   - iterate imports
- *
- * @api private
- */
-
-Evaluator.prototype.setup = function(){
-  this.populateGlobalScope();
-  this.imports.forEach(function(file){
-    var expr = new nodes.Expression;
-    expr.push(new nodes.String(file));
-    this.visit(new nodes.Import(expr));
-  }, this);
-};
-
-/**
- * Populate the global scope with:
- * 
- *   - css colors
- * 
- * @api private
- */
-
-Evaluator.prototype.populateGlobalScope = function(){
-  var scope = this.global.scope;
-  Object.keys(colors).forEach(function(name){
-    var rgb = colors[name]
-      , rgba = new nodes.RGBA(rgb[0], rgb[1], rgb[2], 1)
-      , node = new nodes.Ident(name, rgba);
-    scope.add(node);
-  });
-};
-
-/**
- * Evaluate the tree.
- *
- * @return {Node}
- * @api private
- */
-
-Evaluator.prototype.evaluate = function(){
-  this.setup();
-  return this.visit(this.root);
-};
-
-/**
- * Visit Group.
- */
-
-Evaluator.prototype.visitGroup = function(group){
-  group.block = this.visit(group.block);
-  return group;
-};
-
-/**
- * Visit Charset.
- */
-
-Evaluator.prototype.visitCharset = function(charset){
-  return charset;
-};
-
-/**
- * Visit Return.
- */
-
-Evaluator.prototype.visitReturn = function(ret){
-  ret.expr = this.visit(ret.expr);
-  throw ret;
-};
-
-/**
- * Visit Media.
- */
-
-Evaluator.prototype.visitMedia = function(media){
-  media.block = this.visit(media.block);
-  return media;
-};
-
-/**
- * Visit Keyframes.
- */
-
-Evaluator.prototype.visitKeyframes = function(keyframes){
-  keyframes.name = this.visit(keyframes.name).first.name;
-  return keyframes;
-};
-
-/**
- * Visit Function.
- */
-
-Evaluator.prototype.visitFunction = function(fn){
-  // check local
-  var local = this.stack.currentFrame.scope.lookup(fn.name);
-  if (local) this.warn('local ' + local.nodeName + ' "' + fn.name + '" previously defined in this scope');
-
-  // user-defined
-  var user = this.functions[fn.name];
-  if (user) this.warn('user-defined function "' + fn.name + '" is already defined');
-
-  // BIF
-  var bif = bifs[fn.name];
-  if (bif) this.warn('built-in function "' + fn.name + '" is already defined');
-
-  return fn;
-};
-
-/**
- * Visit Each.
- */
-
-Evaluator.prototype.visitEach = function(each){
-  var expr = utils.unwrap(this.visit(utils.unwrap(each.expr)))
-    , len = expr.nodes.length
-    , val = new nodes.Ident(each.val)
-    , key = new nodes.Ident(each.key || '__index__')
-    , scope = this.currentScope
-    , block = this.currentBlock
-    , vals = []
-    , body;
-
-  each.block.scope = false;
-  for (var i = 0; i < len; ++i) {
-    val.val = expr.nodes[i];
-    key.val = new nodes.Unit(i);
-    scope.add(val);
-    scope.add(key);
-    body = this.visit(each.block.clone());
-    vals = vals.concat(body.nodes);
-  }
-
-  this.mixin(vals, block);
-  return vals[vals.length - 1] || nodes.null;
-};
-
-/**
- * Visit Call.
- */
-
-Evaluator.prototype.visitCall = function(call){
-  var fn = this.lookup(call.name)
-    , ret;
-
-  // Variable function
-  if (fn && 'expression' == fn.nodeName) {
-    fn = fn.nodes[0];
-  }
-
-  // Not a function? try user-defined or built-ins
-  if (fn && 'function' != fn.nodeName) {
-    fn = this.lookupFunction(call.name);
-  }
-
-  // Undefined function, render literal css
-  if (!fn || fn.nodeName != 'function') return this.literalCall(call);
-  this.calling.push(call.name);
-
-  // Massive stack
-  if (this.calling.length > 200) {
-    throw new RangeError('Maximum call stack size exceeded');
-  }
-
-  // First node in expression
-  if (fn instanceof nodes.Expression) fn = fn.first;
-
-  // Evaluate arguments
-  var _ = this.return;
-  this.return = true;
-  var args = this.visit(call.args);
-  this.return = _;
-
-  // Built-in
-  if (fn.fn) {
-    ret = this.invokeBuiltin(fn.fn, args);
-  // User-defined
-  } else if (fn instanceof nodes.Function) {
-    ret = this.invokeFunction(fn, args);
-  }
-
-  this.calling.pop();
-  return ret;
-};
-
-/**
- * Visit Ident.
- */
-
-Evaluator.prototype.visitIdent = function(ident){
-  // Lookup
-  if (nodes.null == ident.val) {
-    var val = this.lookup(ident.name);
-    return val ? this.visit(val) : ident;
-  // Assign  
-  } else {
-    var _ = this.return;
-    this.return = true;
-    ident.val = this.visit(ident.val);
-    this.return = _;
-    this.currentScope.add(ident);
-    return ident.val;
-  }
-};
-
-/**
- * Visit BinOp.
- */
-
-Evaluator.prototype.visitBinOp = function(binop){
-  // Special-case "is defined" pseudo binop
-  if ('is defined' == binop.op) return this.isDefined(binop.left);
-
-  var _ = this.return;
-  this.return = true;
-  // Visit operands
-  var op = binop.op
-    , ident = 'ident' == binop.left.nodeName
-    , left = this.visit(binop.left)
-    , right = this.visit(binop.right);
-  this.return = _;
-
-  // First node in expression
-  if (!~['[]', 'in'].indexOf(op)) {
-    left = left.first;
-    right = right.first;
-  }
-
-  // Coercion
-  switch (op) {
-    case '[]':
-    case 'in':
-    case '||':
-    case '&&':
-    case 'is a':
-      break;
-    default:
-      // Special-case '-' against ident
-      if ('-' == op
-        && 'ident' == left.nodeName
-        && 'unit' == right.nodeName) {
-        var expr = new nodes.Expression;
-        right.val = -right.val;
-        expr.push(left);
-        expr.push(right);
-        return expr;
-      }
-
-      // Attempt coercion
-      try {
-        right = left.coerce(right);
-      } catch (err) {
-        // Disgregard coercion issues
-        // and simply return false
-        if ('==' == op || '!=' == op) {
-          return nodes.false;
-        } else {
-          throw err;
-        }
-      }
-  }
-
-  // Operate
-  return this.visit(left.operate(op, right));
-};
-
-/**
- * Visit UnaryOp.
- */
-
-Evaluator.prototype.visitUnaryOp = function(unary){
-  var op = unary.op
-    , node = this.visit(unary.expr).first;
-
-  if ('!' != op) utils.assertType(node, nodes.Unit);
-
-  switch (op) {
-    case '-':
-      node.val = -node.val;
-      break;
-    case '+':
-      node.val = +node.val;
-      break;
-    case '~':
-      node.val = ~node.val;
-      break;
-    case '!':
-      return node.toBoolean().negate();
-  }
-  
-  return node;
-};
-
-/**
- * Visit TernaryOp.
- */
-
-Evaluator.prototype.visitTernary = function(ternary){
-  var ok = this.visit(ternary.cond).toBoolean();
-  return nodes.true == ok
-    ? this.visit(ternary.trueExpr)
-    : this.visit(ternary.falseExpr);
-};
-
-/**
- * Visit Expression.
- */
-
-Evaluator.prototype.visitExpression = function(expr){
-  for (var i = 0, len = expr.nodes.length; i < len; ++i) {
-    expr.nodes[i] = this.visit(expr.nodes[i]);
-  }
-  return expr;
-};
-
-/**
- * Visit Property.
- */
-
-Evaluator.prototype.visitProperty = function(prop){
-  var name = this.interpolate(prop)
-    , fn = this.lookup(name)
-    , call = fn instanceof nodes.Function
-    , literal = ~this.calling.indexOf(name);
-
-  // Function of the same name
-  if (call && !literal && !prop.literal) {
-    this.calling.push(name);
-    var ret = this.visit(new nodes.Call(name, prop.expr));
-    this.calling.pop();
-    return ret;
-  // Regular property
-  } else {
-    var _ = this.return;
-    this.return = true;
-    prop.expr = this.visit(prop.expr);
-    prop.name = name;
-    prop.literal = true;
-    this.return = _;
-    return prop;
-  }
-};
-
-/**
- * Visit Root.
- */
-
-Evaluator.prototype.visitRoot = function(block){
-  for (var i = 0; i < block.nodes.length; ++i) {
-    block.index = this.rootIndex = i;
-    block.nodes[i] = this.visit(block.nodes[i]);
-  }
-  return block;
-};
-
-/**
- * Visit Block.
- */
-
-Evaluator.prototype.visitBlock = function(block){
-  this.stack.push(new Frame(block));
-  for (var i = 0; i < block.nodes.length; ++i) {
-    block.index = i;
-    try {
-      block.nodes[i] = this.visit(block.nodes[i]);
-    } catch (err) {
-      if (err instanceof nodes.Return) {
-        if (this.return) {
-          this.stack.pop();
-          throw err;
-        } else {
-          block.nodes[i] = err;
-          break;
-        }
-      } else {
-        throw err;
-      }
-    }
-  }
-  this.stack.pop();
-  return block;
-};
-
-/**
- * Visit If.
- */
-
-Evaluator.prototype.visitIf = function(node){
-  var ret
-    , _ = this.return
-    , block = this.currentBlock
-    , negate = node.negate;
-
-  this.return = true;
-  var ok = this.visit(node.cond).first.toBoolean();
-  this.return = _;
-
-  // Evaluate body
-  if (negate) {
-    // unless
-    if (nodes.false == ok) {
-      ret = this.visit(node.block);
-    }
-  } else {
-    // if
-    if (nodes.true == ok) {
-      ret = this.visit(node.block);
-    // else
-    } else if (node.elses.length) {
-      var elses = node.elses
-        , len = elses.length;
-      for (var i = 0; i < len; ++i) {
-        // else if
-        if (elses[i].cond) {
-          if (nodes.true == this.visit(elses[i].cond).first.toBoolean()) {
-            ret = this.visit(elses[i].block);
-            break;
-          }
-        // else 
-        } else {
-          ret = this.visit(elses[i]);
-        }
-      }
-    }
-  }
-
-  // mixin conditional statements within a selector group
-  if (ret && !node.postfix && block.node && 'group' == block.node.nodeName) {
-    this.mixin(ret.nodes, block);
-    return nodes.null;
-  }
-
-  return ret || nodes.null;
-};
-
-/**
- * Visit Import.
- */
-
-Evaluator.prototype.visitImport = function(import){
-  var found
-    , root = this.root
-    , i = this.rootIndex
-    , stylus = require('../stylus')
-    , path = this.visit(import.path).first
-    , relative = this.importPath;
-
-  // Enusre string
-  if (!path.string) throw new Error('@import string expected');
-  var name = path = path.string;
-
-  // Literal
-  if (/\.css$/.test(path)) return import;
-  path += '.styl';
-
-  // Lookup
-  if (relative) this.paths.push(relative);
-  found = utils.lookup(path, this.paths, this.filename);
-  found = found || utils.lookup(name + '/index.styl', this.paths, this.filename);
-  if (relative) this.paths.pop();
-
-  // Expose imports
-  import.path = found;
-  if (this.options._imports) this.options._imports.push(import);
-
-  // Throw if import failed
-  if (!found) throw new Error('failed to locate @import file ' + path);
-  this.importPath = dirname(found);
-
-  // Parse the file
-  var str = fs.readFileSync(found, 'utf8')
-    , rest = root.nodes.splice(++i, root.nodes.length);
-
-  stylus.parse(str, {
-      filename: found
-    , root: root
-  });
-
-  rest.forEach(function(node){
-    root.push(node);
-  });
-
-  return nodes.null;
-};
-
-/**
- * Invoke `fn` with `args`.
- *
- * @param {Function} fn
- * @param {Array} args
- * @return {Node}
- * @api private
- */
-
-Evaluator.prototype.invokeFunction = function(fn, args){
-  var block = new nodes.Block(fn.block.parent);
-  fn.block.parent = block;
-
-  // Clone the function body
-  // to prevent mutation of subsequent calls
-  // inject argument scope
-  var body = fn.block.clone();
-
-  // mixin block
-  var mixinBlock = this.stack.currentFrame.block;
-
-  // new block scope
-  this.stack.push(new Frame(block));
-  var scope = this.currentScope;
-
-  // arguments local
-  scope.add(new nodes.Ident('arguments', args));
-
-  // mixin scope introspection
-  scope.add(new nodes.Ident('mixin', this.return
-    ? nodes.false
-    : new nodes.String(mixinBlock.nodeName)));
-
-  // inject arguments as locals
-  fn.params.nodes.forEach(function(node, i){
-    // rest param support
-    if (node.rest) {
-      node.val = new nodes.Expression;
-      for (var len = args.nodes.length; i < len; ++i) {
-        node.val.push(args.nodes[i]);
-      }
-      node.val.preserve = true;
-    // argument default support
-    } else {
-      var arg = args.nodes[i];
-      var val = arg && !arg.isEmpty
-        ? args.nodes[i]
-        : node.val;
-      node = node.clone();
-      node.val = val;
-      // required argument not satisfied
-      if (node.val instanceof nodes.Null) {
-        throw new Error('argument ' + node + ' required for ' + fn);
-      }
-    }
-
-    scope.add(node);
-  });
-
-  // invoke
-  return this.invoke(body, true);
-};
-
-/**
- * Invoke built-in `fn` with `args`.
- *
- * @param {Function} fn
- * @param {Array} args
- * @return {Node}
- * @api private
- */
-
-Evaluator.prototype.invokeBuiltin = function(fn, args){
-  // Map arguments to first node
-  // providing a nicer js api for
-  // BIFs. Functions may specify that
-  // they wish to accept full expressions
-  // via .raw
-  if (fn.raw) {
-    args = args.nodes;
-  } else {
-    args = args.nodes.map(function(node){
-      return node.first;
-    });
-  }
-
-  // Invoke the BIF
-  var body = fn.apply(this, args);
-
-  // Always wrapping allows js functions
-  // to return several values with a single
-  // Expression node
-  var expr = new nodes.Expression;
-  expr.push(body);
-  body = expr;
-
-  // Invoke
-  return this.invoke(body);
-};
-
-/**
- * Invoke the given function `body`.
- *
- * @param {Block} body
- * @return {Node}
- * @api private
- */
-
-Evaluator.prototype.invoke = function(body, stack){
-  var self = this
-    , ret;
-
-  // Return
-  if (this.return) {
-    ret = this.eval(body.nodes);
-    if (stack) this.stack.pop();
-  // Mixin
-  } else {
-    body = this.visit(body);
-    if (stack) this.stack.pop();
-    this.mixin(body.nodes, this.currentBlock);
-    ret = nodes.null;
-  }
-
-  return ret;
-};
-
-/**
- * Mixin the given `nodes` to the given `block`.
- *
- * @param {Array} nodes
- * @param {Block} block
- * @api private
- */
-
-Evaluator.prototype.mixin = function(nodes, block){
-  var len = block.nodes.length
-    , head = block.nodes.slice(0, block.index)
-    , tail = block.nodes.slice(block.index + 1, len);
-  this._mixin(nodes, head);
-  block.nodes = head.concat(tail);
-};
-
-/**
- * Mixin the given `nodes` to the `dest` array.
- *
- * @param {Array} nodes
- * @param {Array} dest
- * @api private
- */
-
-Evaluator.prototype._mixin = function(nodes, dest){
-  var node
-    , len = nodes.length;
-  for (var i = 0; i < len; ++i) {
-    switch ((node = nodes[i]).nodeName) {
-      case 'return':
-        return;
-      case 'block':
-        this._mixin(node.nodes, dest);
-        break;
-      default:
-        dest.push(node);
-    }
-  }
-};
-
-/**
- * Evaluate the given `vals`.
- *
- * @param {Array} vals
- * @return {Node}
- * @api private
- */
-
-Evaluator.prototype.eval = function(vals){
-  if (!vals) return nodes.null;
-  var len = vals.length
-    , node = nodes.null;
-
-  try {
-    for (var i = 0; i < len; ++i) {
-      node = vals[i];
-      switch (node.nodeName) {
-        case 'if':
-          if ('block' != node.block.nodeName) {
-            node = this.visit(node);
-            break;
-          }
-        case 'each':
-        case 'block':
-          node = this.visit(node);
-          if (node.nodes) node = this.eval(node.nodes);
-          break;
-        default:
-          node = this.visit(node);
-      }
-    }
-  } catch (err) {
-    if (err instanceof nodes.Return) {
-      return err.expr;
-    } else {
-      throw err;
-    }
-  }
-
-  return node;
-};
-
-/**
- * Literal function `call`.
- *
- * @param {Call} call
- * @return {call}
- * @api private
- */
-
-Evaluator.prototype.literalCall = function(call){
-  call.args = this.visit(call.args);
-  return call;
-};
-
-/**
- * Lookup `name`, with support for JavaScript
- * functions, and BIFs.
- *
- * @param {String} name
- * @return {Node}
- * @api private
- */
-
-Evaluator.prototype.lookup = function(name){
-  var val;
-  if (val = this.stack.lookup(name)) {
-    return utils.unwrap(val);
-  } else {
-    return this.lookupFunction(name);
-  }
-};
-
-/**
- * Map segments in `node` returning a string.
- *
- * @param {Node} node
- * @return {String}
- * @api private
- */
-
-Evaluator.prototype.interpolate = function(node){
-  var self = this;
-  return node.segments.map(function(node){
-    function toString(node) {
-      switch (node.nodeName) {
-        case 'function':
-        case 'ident':
-          return node.name;
-        case 'literal':
-        case 'string':
-        case 'unit':
-          return node.val;
-        case 'expression':
-          var _ = self.return;
-          self.return = true;
-          var ret = toString(self.visit(node).first); 
-          self.return = _;
-          return ret;
-      }
-    }
-    return toString(node);
-  }).join('');
-};
-
-/**
- * Lookup JavaScript user-defined or built-in function.
- *
- * @param {String} name
- * @return {Function}
- * @api private
- */
-
-Evaluator.prototype.lookupFunction = function(name){
-  var fn = this.functions[name] || bifs[name];
-  if (fn) return new nodes.Function(name, fn);
-};
-
-/**
- * Check if the given `node` is an ident, and if it is defined.
- *
- * @param {Node} node
- * @return {Boolean}
- * @api private
- */
-
-Evaluator.prototype.isDefined = function(node){
-  if (node instanceof nodes.Ident) {
-    return nodes.Boolean(this.lookup(node.name));
-  } else {
-    throw new Error('invalid "is defined" check on non-variable ' + node);
-  }
-};
-
-/**
- * Warn with the given `msg`.
- *
- * @param {String} msg
- * @api private
- */
-
-Evaluator.prototype.warn = function(msg){
-  if (!this.warnings) return;
-  console.warn('\033[33mWarning:\033[0m ' + msg);
-};
-
-/**
- * Return the current `Block`.
- *
- * @return {Block}
- * @api private
- */
-
-Evaluator.prototype.__defineGetter__('currentBlock', function(){
-  return this.stack.currentFrame.block;
-});
-
-/**
- * Return the current frame `Scope`.
- *
- * @return {Scope}
- * @api private
- */
-
-Evaluator.prototype.__defineGetter__('currentScope', function(){
-  return this.stack.currentFrame.scope;
-});
-
-/**
- * Return the current `Frame`.
- *
- * @return {Frame}
- * @api private
- */
-
-Evaluator.prototype.__defineGetter__('currentFrame', function(){
-  return this.stack.currentFrame;
-});
diff --git a/node/node_modules/jade/support/stylus/lib/visitor/index.js b/node/node_modules/jade/support/stylus/lib/visitor/index.js
deleted file mode 100644 (file)
index d7f9207..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-
-/*!
- * Stylus - Visitor
- * Copyright(c) 2010 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Initialize a new `Visitor` with the given `root` Node.
- *
- * @param {Node} root
- * @api private
- */
-
-var Visitor = module.exports = function Visitor(root) {
-  this.root = root;
-};
-
-/**
- * Visit the given `node`.
- *
- * @param {Node|Array} node
- * @api public
- */
-
-Visitor.prototype.visit = function(node, fn){
-  var method = 'visit' + node.constructor.name
-    , cons = this.constructor.name;
-  if (this[method]) return this[method](node);
-  return node;
-};
-
diff --git a/node/node_modules/jade/support/stylus/package.json b/node/node_modules/jade/support/stylus/package.json
deleted file mode 100644 (file)
index 55f36ed..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-{   "name": "stylus"
-  , "description": "Robust, expressive language which compiles to CSS"
-  , "version": "0.9.2"
-  , "author": "TJ Holowaychuk <tj@vision-media.ca>"
-  , "keywords": ["css", "parser", "style", "stylesheets", "jade", "language"]
-  , "main": "./index.js"
-  , "engines": { "node": ">= 0.2.4" }
-  , "bin": {
-      "stylus": "./bin/stylus"
-    , "stylus-tutorial": "./bin/stylus-tutorial"
-  }
-  , "dependencies": {
-      "cssom": "0.2.0"
-    , "growl": "1.1.0"
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/arithmetic.color.css b/node/node_modules/jade/support/stylus/test/cases/arithmetic.color.css
deleted file mode 100644 (file)
index d6fe9f0..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-body {
-  background: rgba(0,255,255,0.5);
-  color: #0c0;
-}
-a {
-  color: #808080;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/arithmetic.color.styl b/node/node_modules/jade/support/stylus/test/cases/arithmetic.color.styl
deleted file mode 100644 (file)
index e27ead0..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-body
-  background #fff - (rgba(250,0,0,0.5) + rgba(5,0,0,0))
-  color #ffcc00 - #f00
-
-a
-  color (#fff / 2)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/arithmetic.css b/node/node_modules/jade/support/stylus/test/cases/arithmetic.css
deleted file mode 100644 (file)
index 9bc514d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-body {
-  font-size: 12px;
-}
-h1 {
-  font-size: 36px;
-}
-h2 {
-  font-size: 24px;
-  font: 2px;
-  font: 0px;
-  font: 16px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/arithmetic.styl b/node/node_modules/jade/support/stylus/test/cases/arithmetic.styl
deleted file mode 100644 (file)
index a4ddbf4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-size = 12px
-large = size * (3 - 1)
-huge = size * 3
-
-body
-  font-size size
-
-h1
-  font-size huge
-
-h2
-  font-size large
-  font 5px % 3
-  font 5px % 5
-  font 2px ** 4
-  y = 10
-  x = 15
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/arithmetic.unary.css b/node/node_modules/jade/support/stylus/test/cases/arithmetic.unary.css
deleted file mode 100644 (file)
index 5766529..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-h1#logo {
-  margin-top: -15px;
-  margin-left: 3px;
-  foo: false;
-  foo: false;
-  foo: false;
-  foo: false;
-  foo: false;
-  foo: false;
-  foo: 0px -2px -3px;
-  foo: 1px;
-}
-body {
-  text-indent: -99999px;
-  background: #fff url("/some/image.png") no-repeat -29px 1px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/arithmetic.unary.styl b/node/node_modules/jade/support/stylus/test/cases/arithmetic.unary.styl
deleted file mode 100644 (file)
index fc5aa6f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-h1#logo
-  margin-top - - - 15px
-  margin-left ~ - 4px
-  foo !true
-  foo !!0
-  foo !-1
-  foo !99
-  foo !((99))
-  foo not not 0
-  foo 0px -2px -3px
-  foo -2px --3px
-
-body
-  text-indent -99999px
-  background #fff url('/some/image.png') no-repeat -29px 1px
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.components.css b/node/node_modules/jade/support/stylus/test/cases/bifs.components.css
deleted file mode 100644 (file)
index dc77fa4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  background: 255;
-  background: 204;
-  background: 0;
-  background: 0.4;
-  background: 15deg;
-  background: 100%;
-  background: 60%;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.components.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.components.styl
deleted file mode 100644 (file)
index dc8b9a6..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body
-  background red(#fc0)
-  background green(#fc0)
-  background blue(#fc0)
-  background alpha(#fff - rgba(0,0,0,.6))
-  
-  background hue(hsl(15deg,100%,60%))
-  background saturation(hsl(15deg,100%,60%))
-  background lightness(hsl(15deg,100%,60%))
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.dark.css b/node/node_modules/jade/support/stylus/test/cases/bifs.dark.css
deleted file mode 100644 (file)
index a336a0f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  foo: true;
-  foo: true;
-  foo: true;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.dark.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.dark.styl
deleted file mode 100644 (file)
index fe9a18e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body
-  foo dark(black) == true
-  foo dark(#005716) == true
-  foo dark(white) == false
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.darken-by.css b/node/node_modules/jade/support/stylus/test/cases/bifs.darken-by.css
deleted file mode 100644 (file)
index ef30453..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  background: #808080;
-  background: #404040;
-  background: #202020;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.darken-by.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.darken-by.styl
deleted file mode 100644 (file)
index 85e5fea..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body
-  background: darken-by(white, 50%)
-  background: darken-by(darken-by(white, 50%), 50%)
-  background: darken-by(darken-by(darken-by(white, 50%), 50%), 50%)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.image-size.css b/node/node_modules/jade/support/stylus/test/cases/bifs.image-size.css
deleted file mode 100644 (file)
index e26d4ac..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  foo: 315px 450px;
-  foo: true;
-  foo: true;
-}
-body {
-  foo: 400px 479px;
-  foo: 400px 479px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.image-size.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.image-size.styl
deleted file mode 100644 (file)
index d981a31..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-width(img)
-  return image-size(img)[0]
-
-height(img)
-  return image-size(img)[1]
-
-body
-  foo image-size('gif')
-  foo image-size('gif')[0] == width('gif')
-  foo image-size('gif')[1] == height('gif')
-
-body
-  foo image-size('tux.png')
-  foo image-size('tux.png')
-/*
-body
-  foo image-size('jpeg')
-
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.join.css b/node/node_modules/jade/support/stylus/test/cases/bifs.join.css
deleted file mode 100644 (file)
index 17097cf..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-body {
-  foo: "1 2 3";
-  foo: "1, 2, 3";
-  foo: "1,2,3";
-  foo: "1";
-  foo: true;
-}
-body {
-  foo: "1, 2, 3";
-  foo: "one, two, three";
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.join.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.join.styl
deleted file mode 100644 (file)
index 6599124..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-body
-  foo join(' ', 1 2 3)
-  foo join(', ', 1 2 3)
-  foo join(',', 1 2 3)
-  foo join(',', 1)
-  foo join(',') == null
-
-body
-  foo join(', ', 1, 2, 3)
-  foo join(', ', one 1, two 2, three 3)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.last.css b/node/node_modules/jade/support/stylus/test/cases/bifs.last.css
deleted file mode 100644 (file)
index a336a0f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  foo: true;
-  foo: true;
-  foo: true;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.last.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.last.styl
deleted file mode 100644 (file)
index ef13055..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-body
-  nums = 1 2 3 4
-  foo last(nums) == 4
-  foo last(foo bar baz) == baz
-  foo last(()) == null
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.length.css b/node/node_modules/jade/support/stylus/test/cases/bifs.length.css
deleted file mode 100644 (file)
index 670982d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-body {
-  foo: 0;
-  foo: 1;
-  foo: 1;
-  foo: 2;
-  foo: 3;
-  foo: 4;
-  foo: 5;
-  foo: 6;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.length.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.length.styl
deleted file mode 100644 (file)
index 762beb6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-args(n = null)
-  length(n)
-
-vargs(args...)
-  length(args)
-
-arguments()
-  length(arguments)
-
-body
-  foo length()
-  foo length(args())
-  foo length(1)
-  foo length((1 2) (3 4))
-  foo length(1 2 3)
-  foo vargs(1, 2, 3, 4)
-  foo args(1 2 3 4 5)
-  foo arguments(1,2,3,4,5,6)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.light.css b/node/node_modules/jade/support/stylus/test/cases/bifs.light.css
deleted file mode 100644 (file)
index a336a0f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  foo: true;
-  foo: true;
-  foo: true;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.light.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.light.styl
deleted file mode 100644 (file)
index 162cfe7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body
-  foo light(black) == false
-  foo light(white) == true
-  foo light(#00FF40) == true
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.lighten-by.css b/node/node_modules/jade/support/stylus/test/cases/bifs.lighten-by.css
deleted file mode 100644 (file)
index da74b89..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body {
-  background: #808080;
-  background: #bfbfbf;
-  background: #fff;
-  foo: #7fbfee;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.lighten-by.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.lighten-by.styl
deleted file mode 100644 (file)
index 8f448e7..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body
-  background: lighten-by(black, 50%)
-  background: lighten-by(lighten-by(black, 50%), 50%)
-  background: lighten-by(lighten-by(lighten-by(black, 50%), 50%), 50%)
-  foo lighten(#52a8e8, 10%)
-  // => #7fbfee
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.lookup.complex.css b/node/node_modules/jade/support/stylus/test/cases/bifs.lookup.complex.css
deleted file mode 100644 (file)
index cbb003b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body {
-  color: #80e2e9;
-  border: 1px solid #f00;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.lookup.complex.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.lookup.complex.styl
deleted file mode 100644 (file)
index cddf1fa..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-border-type = solid
-dark-blue = #006269
-light-blue = dark-blue + hsl(0,0,50%)
-
-light(color-name)
-  lookup('light-' + color-name)
-
-body
-  color light('blue')
-  border 1px lookup('border-type') red
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.lookup.css b/node/node_modules/jade/support/stylus/test/cases/bifs.lookup.css
deleted file mode 100644 (file)
index a5209ce..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  color: #006269;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.lookup.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.lookup.styl
deleted file mode 100644 (file)
index 7f404f0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-dark-blue = #006269
-
-dark(color-name)
-  lookup('dark-' + color-name)
-
-body
-  color dark('blue')
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.match.css b/node/node_modules/jade/support/stylus/test/cases/bifs.match.css
deleted file mode 100644 (file)
index 70483e0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body {
-  margin: 5px;
-  padding: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.match.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.match.styl
deleted file mode 100644 (file)
index eb2c7b9..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-pad(type = padding)
-  if match('^pad', type)
-    padding 5px
-  else
-    margin 5px
-
-body
-  pad(margin)
-  pad(padding)
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.opposite-position.css b/node/node_modules/jade/support/stylus/test/cases/bifs.opposite-position.css
deleted file mode 100644 (file)
index dc41fa6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-body {
-  foo: ;
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: bottom right;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.opposite-position.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.opposite-position.styl
deleted file mode 100644 (file)
index 1809da5..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-body
-  foo opposite-position()
-  foo opposite-position(top) == bottom
-  foo opposite-position(left) == right
-  foo opposite-position(top left)[0] == bottom
-  foo opposite-position(top left)[1] == right
-  val = top left
-  foo opposite-position(val)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.rgba.css b/node/node_modules/jade/support/stylus/test/cases/bifs.rgba.css
deleted file mode 100644 (file)
index 15da40d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  background: #ff0800;
-  background: rgba(255,255,0,0.2);
-  background: rgba(255,204,0,0.5);
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.rgba.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.rgba.styl
deleted file mode 100644 (file)
index 9c50ca4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body
-  background rgba(255,8,0,1)
-  background rgba(255,255,0,0.2)
-  background rgba(#fc0, 0.5)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.type.css b/node/node_modules/jade/support/stylus/test/cases/bifs.type.css
deleted file mode 100644 (file)
index 647b227..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-body {
-  background: "string";
-  background: "unit";
-  background: "unit";
-  background: "hsla";
-  background: "rgba";
-  background: "ident";
-  background: "unit";
-  background: "function";
-  background: "ident";
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.type.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.type.styl
deleted file mode 100644 (file)
index e67eec3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-body
-  border-type = solid
-  size = 15px
-  background type('test')
-  background type(12px)
-  background type(12)
-  background type(hsl(100deg, 50%, 50%))
-  background type(#fff)
-  background type(something)
-  background type(size)
-  background type(type)
-  background type(border-type)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.unit.css b/node/node_modules/jade/support/stylus/test/cases/bifs.unit.css
deleted file mode 100644 (file)
index 35febfd..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body {
-  foo: 20px;
-  foo: 20px;
-  foo: 20px;
-  foo: 20%;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.unit.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.unit.styl
deleted file mode 100644 (file)
index 336dabc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body
-  foo unit(20, 'px')
-  foo unit(20, px)
-  foo unit(20%, px)
-  foo unit(20, '%')
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.unquote.css b/node/node_modules/jade/support/stylus/test/cases/bifs.unquote.css
deleted file mode 100644 (file)
index 1a3643f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  background: testing;
-  background: testing;
-  font: 14px / 1.5;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.unquote.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.unquote.styl
deleted file mode 100644 (file)
index d101806..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-line-height(n)
-  unquote('/ ' + n)
-
-body
-  background unquote(testing)
-  background unquote('testing')
-  font 14px line-height(1.5)
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.url.css b/node/node_modules/jade/support/stylus/test/cases/bifs.url.css
deleted file mode 100644 (file)
index ab4a9f4..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-body {
-  background: url("/images/foo.png");
-  background: url("/images/foo.png");
-  background: url("/images/foo.png");
-  background: url("/images/foo.png");
-  background: url("/images/foo.png");
-  background: url("/images/foo.png");
-  background: url("/images/foo.png");
-  background: url("/images/foo.png");
-  background: url("http://foo.com/images/bar.png");
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/bifs.url.styl b/node/node_modules/jade/support/stylus/test/cases/bifs.url.styl
deleted file mode 100644 (file)
index 691d33c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-body
-  background url("/images/foo.png")
-  background url(/images/foo.png)
-
-  dir = '/images'
-  img = 'foo.png'
-  background url(dir/foo.png)
-  background url(dir/img)
-
-  background url('/images/' + img)
-  background url(dir'/foo.png')
-  background url(dir + '/foo.png')
-  background url(dir + '/' + img)
-
-  background url(http://foo.com/images/bar.png)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/coercion.css b/node/node_modules/jade/support/stylus/test/cases/coercion.css
deleted file mode 100644 (file)
index 1c54cd5..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body {
-  foo: 10px;
-  foo: 6px;
-  foo: "foo bar";
-  foo: "value: 5px";
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/coercion.styl b/node/node_modules/jade/support/stylus/test/cases/coercion.styl
deleted file mode 100644 (file)
index 8925fc1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body
-  foo 5px + '5'
-  foo 5px + '1 23'
-  foo 'foo ' + 'bar'
-  foo 'value: ' + 5px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/comments.css b/node/node_modules/jade/support/stylus/test/cases/comments.css
deleted file mode 100644 (file)
index a11dd7a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-body {
-  color: #f00;
-}
-form {
-  background: #fff;
-}
-html>/**/body select,
-x:-moz-any-link,
-x:default select {
-  font-weight: bold !important;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/comments.styl b/node/node_modules/jade/support/stylus/test/cases/comments.styl
deleted file mode 100644 (file)
index 82cb469..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-// foo = 'bar'
-
-body
-  color red
-  // lots of stuff
-  // wahoo
-
-  // super cool
-  // background green
-
-form
-  background white
-
-/*
-
-body
-  a
-    color blue
-
-*/
-// rawr
-
-html>/**/body select
-x:-moz-any-link
-x:default select
-  font-weight bold !important
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/compress.units.css b/node/node_modules/jade/support/stylus/test/cases/compress.units.css
deleted file mode 100644 (file)
index d07704f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body{foo:0;foo:0;foo:15;foo:-15;foo:15px;foo:-15px}
-body{foo:.1;foo:-.1;foo:1.1;foo:-1.1;foo:.1;foo:-.1;foo:10.1;foo:-10.1}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/compress.units.styl b/node/node_modules/jade/support/stylus/test/cases/compress.units.styl
deleted file mode 100644 (file)
index 3f3bf28..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-body
-  foo 0
-  foo 0px
-  foo 15
-  foo -15
-  foo 15px
-  foo -15px
-
-body
-  foo 0.1
-  foo -0.1
-  foo 1.1
-  foo -1.1
-  foo 0.1
-  foo -0.1
-  foo 10.1
-  foo -10.1
-  
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/conditional-assignment.css b/node/node_modules/jade/support/stylus/test/cases/conditional-assignment.css
deleted file mode 100644 (file)
index e02b387..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-a.button {
-  font: 14px;
-  background: #fff;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/conditional-assignment.styl b/node/node_modules/jade/support/stylus/test/cases/conditional-assignment.styl
deleted file mode 100644 (file)
index 4431b33..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-color ?= white
-color ?= black
-
-font-size ?= 14px
-
-a.button
-  font font-size
-  background color
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.functions.single-line.css b/node/node_modules/jade/support/stylus/test/cases/css.functions.single-line.css
deleted file mode 100644 (file)
index 08b9e7c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  foo: false;
-  foo: true;
-}
-body {
-  foo: false;
-  foo: true;
-  foo: ;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.functions.single-line.styl b/node/node_modules/jade/support/stylus/test/cases/css.functions.single-line.styl
deleted file mode 100644 (file)
index 4ac7a65..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-large(n){ n > 100 }
-
-body
-  foo large(5)
-  foo large(300)
-
-large(n){ n > 100 if n is a 'unit' }
-
-body
-  foo large(5)
-  foo large(300)
-  foo large('test')
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.if.css b/node/node_modules/jade/support/stylus/test/cases/css.if.css
deleted file mode 100644 (file)
index 5ed0353..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-body {
-  color: #fff;
-  color: #fff;
-}
-body {
-  padding: 5px;
-  margin: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.if.styl b/node/node_modules/jade/support/stylus/test/cases/css.if.styl
deleted file mode 100644 (file)
index 2ff1b4f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-body
-  if true {
-    color: white;
-  }
-  unless (false) {
-    color: white;
-  }
-
-mixin(pad, margin) {
-  if (pad) {
-    padding: 5px;
-  }
-  if (margin) {
-    margin: 5px;
-  }
-}
-
-body
-  mixin(true, true)
-
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.keyframes.css b/node/node_modules/jade/support/stylus/test/cases/css.keyframes.css
deleted file mode 100644 (file)
index be727ff..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-@-webkit-keyframes bouce {
-  0% {
-    foo: bar;
-  }
-
-  50% {
-    foo: bar;
-  }
-
-  100% {
-    foo: bar;
-  }
-}
-@-webkit-keyframes bouce {
-  0% {
-    foo: bar;
-  }
-
-  50% {
-    foo: bar;
-  }
-
-  100% {
-    foo: bar;
-  }
-}
-@-webkit-keyframes bouce {
-  0% {
-    foo: bar;
-  }
-
-  50% {
-    foo: bar;
-  }
-
-  100% {
-    foo: bar;
-  }
-}
-@-webkit-keyframes something {
-  0% {
-    color: red;
-  }
-
-  100% {
-    color: blue;
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.keyframes.styl b/node/node_modules/jade/support/stylus/test/cases/css.keyframes.styl
deleted file mode 100644 (file)
index 7ce1c3f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-@keyframes bouce {
-  from {
-    foo: bar;
-  }
-
-  50% {
-    foo: bar;
-  }
-
-  to {
-    foo: bar;
-  }
-}
-
-@keyframes bouce {
-  from { foo: bar; }
-  50% { foo: bar; }
-  to { foo: bar; }
-}
-
-
-@keyframes bouce {
-  from { foo: bar; }
-  
-  
-  50% { foo: bar; }
-  
-  to { foo: bar; }
-}
-
-animate(name) {
-  @keyframes name {
-    from { color: red; }
-    to { color: blue; }
-  }
-}
-
-animate(something)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.large.css b/node/node_modules/jade/support/stylus/test/cases/css.large.css
deleted file mode 100644 (file)
index b63459b..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-html {
-  background: #dadada;
-  background: -moz-linear-gradient(-90deg, #fff, #dadada) fixed;
-  background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#dadada)) fixed;
-}
-body {
-  padding: 120px 150px;
-  font: 14px / 1.4 "helvetica neue", helvetica, arial, sans-serif;
-  color: #484848;
-}
-h1,
-h2,
-h3 {
-  color: #222;
-}
-h1 a,
-h2 a,
-h3 a {
-  color: #222;
-}
-h1 a:hover,
-h2 a:hover,
-h3 a:hover {
-  text-decoration: none;
-}
-h1 {
-  margin: 10px 0 15px 0;
-  font-weight: bold;
-  font-size: 60px;
-}
-h2 {
-  margin: 0;
-  font-size: 18px;
-}
-h3 {
-  font-size: 14px;
-}
-a {
-  text-decoration: none;
-  color: #b90101;
-}
-a:hover {
-  text-decoration: underline;
-}
-strong {
-  color: #a00;
-}
-ul {
-  margin: 0;
-  padding: 0 25px;
-}
-ul li {
-  list-style: square;
-}
-.tagline {
-  margin: 0;
-  padding: 0;
-}
-.tagline em {
-  font-style: normal;
-}
-.tagline em.expressive {
-  color: #222;
-}
-.tagline em.dynamic {
-  color: #555;
-}
-.tagline em.robust {
-  color: #888;
-}
-.tagline em.css {
-  color: #bbb;
-}
-#container {
-  text-align: center;
-}
-#container #content {
-  margin: 0 auto;
-  padding-top: 40px;
-  width: 300px;
-  text-align: left;
-}
-#menu {
-  position: fixed;
-  top: -5px;
-  right: 60px;
-  margin: 0;
-  padding: 15px 0 10px 5px;
-  background: rgba(255,255,255,0.3);
-  border: 1px solid #ddd;
-  text-align: left;
-  -moz-box-shadow: inset rgba(34,34,34,0.1) 0 4px 4px;
-  -webkit-box-shadow: inset rgba(34,34,34,0.1) 0 4px 4px;
-  box-shadow: inset rgba(34,34,34,0.1) 0 4px 4px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-#menu li {
-  list-style: none;
-}
-#menu li a {
-  display: block;
-  width: 150px;
-  padding: 1px 10px;
-  color: #7b7b7b;
-  font-size: 13px;
-}
-#menu li a:hover {
-  color: #000;
-  text-decoration: none;
-}
-.example {
-  margin-top: 25px;
-}
-pre {
-  width: 300px;
-  padding: 30px;
-  color: #8d8d8d;
-  font: 12px / 1.4 monaco, "helvetica neue", helvetica;
-  overflow-x: auto;
-  background: #fff;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-  -moz-box-shadow: rgba(34,34,34,0.1) -1px -1px;
-  -webkit-box-shadow: rgba(34,34,34,0.1) -1px -1px;
-  box-shadow: rgba(34,34,34,0.1) -1px -1px;
-}
-pre.terminal {
-  width: 340px;
-  padding: 10px;
-  background: #2b2b2b;
-  color: #dadada;
-  -moz-box-shadow: #fff -1px -1px;
-  -webkit-box-shadow: #fff -1px -1px;
-  box-shadow: #fff -1px -1px;
-}
-p code {
-  padding: 2px 4px;
-  color: #626262;
-  font-size: 85%;
-  background: #fff;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-  -moz-box-shadow: rgba(34,34,34,0.1) -1px -1px;
-  -webkit-box-shadow: rgba(34,34,34,0.1) -1px -1px;
-  box-shadow: rgba(34,34,34,0.1) -1px -1px;
-}
-#ribbon {
-  position: absolute;
-  top: 2.5em;
-  left: -3.75em;
-  background-color: #a00;
-  padding: 1px 0;
-  overflow: hidden;
-  -webkit-transform: rotate(-45deg);
-  -moz-transform: rotate(-45deg);
-  -moz-box-shadow: 1px 1px 3px rgba(0,0,0,0.3);
-  -webkit-box-shadow: 1px 1px 3px rgba(0,0,0,0.3);
-  box-shadow: 1px 1px 3px rgba(0,0,0,0.3);
-}
-#ribbon a {
-  color: #fff;
-  border: 1px solid #f18585;
-  display: block;
-  margin: 0.05em 0;
-  padding: 0.5em 3.5em;
-  text-align: center;
-  text-decoration: none;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.large.styl b/node/node_modules/jade/support/stylus/test/cases/css.large.styl
deleted file mode 100644 (file)
index ee87684..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-html {
-  background: #dadada;
-  background: -moz-linear-gradient(-90deg, #fff, #dadada) fixed;
-  background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#dadada)) fixed;
-}
-body {
-  padding: 120px 150px;
-  font: 14px / 1.4 "helvetica neue", helvetica, arial, sans-serif;
-  color: #484848;
-}
-h1,
-h2,
-h3 {
-  color: #222;
-}
-h1 a,
-h2 a,
-h3 a {
-  color: #222;
-}
-h1 a:hover,
-h2 a:hover,
-h3 a:hover {
-  text-decoration: none;
-}
-h1 {
-  margin: 10px 0 15px 0;
-  font-weight: bold;
-  font-size: 60px;
-}
-h2 {
-  margin: 0;
-  font-size: 18px;
-}
-h3 {
-  font-size: 14px;
-}
-a {
-  text-decoration: none;
-  color: #b90101;
-}
-a:hover {
-  text-decoration: underline;
-}
-strong {
-  color: #a00;
-}
-ul {
-  margin: 0;
-  padding: 0 25px;
-}
-ul li {
-  list-style: square;
-}
-.tagline {
-  margin: 0;
-  padding: 0;
-}
-.tagline em {
-  font-style: normal;
-}
-.tagline em.expressive {
-  color: #222;
-}
-.tagline em.dynamic {
-  color: #555;
-}
-.tagline em.robust {
-  color: #888;
-}
-.tagline em.css {
-  color: #bbb;
-}
-#container {
-  text-align: center;
-}
-#container #content {
-  margin: 0 auto;
-  padding-top: 40px;
-  width: 300px;
-  text-align: left;
-}
-#menu {
-  position: fixed;
-  top: -5px;
-  right: 60px;
-  margin: 0;
-  padding: 15px 0 10px 5px;
-  background: rgba(255,255,255,0.3);
-  border: 1px solid #ddd;
-  text-align: left;
-  -moz-box-shadow: inset rgba(34,34,34,0.1) 0 4px 4px;
-  -webkit-box-shadow: inset rgba(34,34,34,0.1) 0 4px 4px;
-  box-shadow: inset rgba(34,34,34,0.1) 0 4px 4px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-#menu li {
-  list-style: none;
-}
-#menu li a {
-  display: block;
-  width: 150px;
-  padding: 1px 10px;
-  color: #7b7b7b;
-  font-size: 13px;
-}
-#menu li a:hover {
-  color: #000;
-  text-decoration: none;
-}
-.example {
-  margin-top: 25px;
-}
-pre {
-  width: 300px;
-  padding: 30px;
-  color: #8d8d8d;
-  font: 12px / 1.4 monaco, "helvetica neue", helvetica;
-  overflow-x: auto;
-  background: #fff;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-  -moz-box-shadow: rgba(34,34,34,0.1) -1px -1px;
-  -webkit-box-shadow: rgba(34,34,34,0.1) -1px -1px;
-  box-shadow: rgba(34,34,34,0.1) -1px -1px;
-}
-pre.terminal {
-  width: 340px;
-  padding: 10px;
-  background: #2b2b2b;
-  color: #dadada;
-  -moz-box-shadow: #fff -1px -1px;
-  -webkit-box-shadow: #fff -1px -1px;
-  box-shadow: #fff -1px -1px;
-}
-p code {
-  padding: 2px 4px;
-  color: #626262;
-  font-size: 85%;
-  background: #fff;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-  -moz-box-shadow: rgba(34,34,34,0.1) -1px -1px;
-  -webkit-box-shadow: rgba(34,34,34,0.1) -1px -1px;
-  box-shadow: rgba(34,34,34,0.1) -1px -1px;
-}
-#ribbon {
-  position: absolute;
-  top: 2.5em;
-  left: -3.75em;
-  background-color: #a00;
-  padding: 1px 0;
-  overflow: hidden;
-  -webkit-transform: rotate(-45deg);
-  -moz-transform: rotate(-45deg);
-  -moz-box-shadow: 1px 1px 3px rgba(0,0,0,0.3);
-  -webkit-box-shadow: 1px 1px 3px rgba(0,0,0,0.3);
-  box-shadow: 1px 1px 3px rgba(0,0,0,0.3);
-}
-#ribbon a {
-  color: #fff;
-  border: 1px solid #f18585;
-  display: block;
-  margin: 0.05em 0;
-  padding: 0.5em 3.5em;
-  text-align: center;
-  text-decoration: none;
-}
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.media.css b/node/node_modules/jade/support/stylus/test/cases/css.media.css
deleted file mode 100644 (file)
index f7ab06b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-@media print {
-  body {
-    margin: 5px;
-    padding: 5px;
-  }
-}
-@media print {
-  body {
-    margin: 5px;
-    padding: 5px;
-  }
-  .no-print {
-    display: none;
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.media.styl b/node/node_modules/jade/support/stylus/test/cases/css.media.styl
deleted file mode 100644 (file)
index 2403566..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-@media print {
-  body {
-    margin: 5px;
-    padding: 5px;
-  }
-}
-
-@media print {
-  body {
-    margin: 5px;
-    padding: 5px;
-  }
-  .no-print {
-    display: none;
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.mixins.braces.css b/node/node_modules/jade/support/stylus/test/cases/css.mixins.braces.css
deleted file mode 100644 (file)
index 7ffe13c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-button,
-a.button {
-  display: block;
-  text-decoration: none;
-  background: #e3e3e3;
-  border: 1px solid #bdbdbd;
-  border-radius: 3px;
-  box-shadow: inset 0 0 1px 1px rgba(255,255,255,0.8);
-  color: #333;
-  font-family: "helvetica neue", helvetica, arial, sans-serif;
-  font-size: 12px;
-  font-weight: bold;
-  line-height: 1;
-  padding: 8px 0 9px;
-  text-align: center;
-  text-shadow: 0 1px 0 #fff;
-  width: 150px;
-}
-button:hover,
-a.button:hover {
-  background: #dbdbdb;
-  box-shadow: inset 0 0 1px 1px rgba(255,255,255,0.5);
-  color: #222;
-  cursor: pointer;
-}
-button:active,
-a.button:active {
-  background: #d6d6d6;
-  box-shadow: inset 0 0 1px 1px rgba(255,255,255,0.2);
-  color: #000;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.mixins.braces.styl b/node/node_modules/jade/support/stylus/test/cases/css.mixins.braces.styl
deleted file mode 100644 (file)
index ca8f737..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/*
- * Reset button related properties so that
- * a, button, and input's are supported.
- */
-
--reset() {
-  display: block;
-  text-decoration: none;
-}
-
-// just testing stuff
-
-get-width() { 150px; }
-
-/*
- * Minimalistic flat button with white inset.
- */
-
-minimal-button(bg = #e3e3e3, intensity = 1) {
-  -reset();
-  background: bg;
-  border: 1px solid darken(bg, 15% * intensity);
-  border-radius: 3px;
-  box-shadow: inset 0 0 1px 1px rgba(white, 0.8 * intensity);
-  color: #333;
-  font-family: 'helvetica neue', helvetica, arial, sans-serif;
-  font-size: 12px;
-  font-weight: bold;
-  line-height: 1;
-  padding: 8px 0 9px;
-  text-align: center;
-  text-shadow: 0 1px 0 rgba(white, 1 * intensity);
-  width: get-width();
-
-  &:hover {
-    background: darken(bg, 3%);
-    box-shadow: inset 0 0 1px 1px rgba(white, 0.5 * intensity);
-    color: #222;
-    cursor: pointer;
-  }
-
-  &:active {
-    background: darken(bg, 5%);
-    box-shadow: inset 0 0 1px 1px rgba(white, 0.2 * intensity);
-    color: #000;
-  }
-}
-
-button,
-a.button {
-  minimal-button();
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.mixins.css b/node/node_modules/jade/support/stylus/test/cases/css.mixins.css
deleted file mode 100644 (file)
index 7ffe13c..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-button,
-a.button {
-  display: block;
-  text-decoration: none;
-  background: #e3e3e3;
-  border: 1px solid #bdbdbd;
-  border-radius: 3px;
-  box-shadow: inset 0 0 1px 1px rgba(255,255,255,0.8);
-  color: #333;
-  font-family: "helvetica neue", helvetica, arial, sans-serif;
-  font-size: 12px;
-  font-weight: bold;
-  line-height: 1;
-  padding: 8px 0 9px;
-  text-align: center;
-  text-shadow: 0 1px 0 #fff;
-  width: 150px;
-}
-button:hover,
-a.button:hover {
-  background: #dbdbdb;
-  box-shadow: inset 0 0 1px 1px rgba(255,255,255,0.5);
-  color: #222;
-  cursor: pointer;
-}
-button:active,
-a.button:active {
-  background: #d6d6d6;
-  box-shadow: inset 0 0 1px 1px rgba(255,255,255,0.2);
-  color: #000;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.mixins.root.css b/node/node_modules/jade/support/stylus/test/cases/css.mixins.root.css
deleted file mode 100644 (file)
index 5d9922d..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-button,
-a.button,
-input[type=submit],
-input[type=button] {
-  padding: 5px 10px;
-}
-button:hover,
-a.button:hover,
-input[type=submit]:hover,
-input[type=button]:hover {
-  color: #fff;
-  background: #000;
-}
-button:hover em,
-a.button:hover em,
-input[type=submit]:hover em,
-input[type=button]:hover em {
-  color: #808080;
-}
-button:active,
-a.button:active,
-input[type=submit]:active,
-input[type=button]:active {
-  color: #000;
-  background: #fff;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.mixins.root.styl b/node/node_modules/jade/support/stylus/test/cases/css.mixins.root.styl
deleted file mode 100644 (file)
index b03ff8e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-hover()
-  &:hover {
-    color: white;
-    background: black;
-    em {
-      color: gray;
-    }
-  }
-  &:active {
-    color: black;
-    background: white;
-  }
-
-
-button(pad)
-  button,
-  a.button,
-  input[type=submit],
-  input[type=button] {
-    padding: pad;
-    hover();
-  }
-
-button(5px 10px);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.mixins.root.wonky.css b/node/node_modules/jade/support/stylus/test/cases/css.mixins.root.wonky.css
deleted file mode 100644 (file)
index 5d9922d..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-button,
-a.button,
-input[type=submit],
-input[type=button] {
-  padding: 5px 10px;
-}
-button:hover,
-a.button:hover,
-input[type=submit]:hover,
-input[type=button]:hover {
-  color: #fff;
-  background: #000;
-}
-button:hover em,
-a.button:hover em,
-input[type=submit]:hover em,
-input[type=button]:hover em {
-  color: #808080;
-}
-button:active,
-a.button:active,
-input[type=submit]:active,
-input[type=button]:active {
-  color: #000;
-  background: #fff;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.mixins.root.wonky.styl b/node/node_modules/jade/support/stylus/test/cases/css.mixins.root.wonky.styl
deleted file mode 100644 (file)
index e7bb7e0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-hover()
-  &:hover { color: white; background: black;
-    em {
-      color: gray;
-    }
-  }
-  &:active { color: black; background: white; }
-
-
-button(pad)
-  button,
-  a.button,
-  input[type=submit],
-  input[type=button] { padding: pad; hover(); }
-
-button(5px 10px);
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.mixins.styl b/node/node_modules/jade/support/stylus/test/cases/css.mixins.styl
deleted file mode 100644 (file)
index fd4ceb8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/*
- * Reset button related properties so that
- * a, button, and input's are supported.
- */
-
--reset()
-  display: block;
-  text-decoration: none;
-
-/*
- * Minimalistic flat button with white inset.
- */
-
-minimal-button(bg = #e3e3e3, intensity = 1)
-  -reset()
-  background: bg;
-  border: 1px solid darken(bg, 15% * intensity);
-  border-radius: 3px;
-  box-shadow: inset 0 0 1px 1px rgba(white, 0.8 * intensity);
-  color: #333;
-  font-family: 'helvetica neue', helvetica, arial, sans-serif;
-  font-size: 12px;
-  font-weight: bold;
-  line-height: 1;
-  padding: 8px 0 9px;
-  text-align: center;
-  text-shadow: 0 1px 0 rgba(white, 1 * intensity);
-  width: 150px;
-
-  &:hover {
-    background: darken(bg, 3%);
-    box-shadow: inset 0 0 1px 1px rgba(white, 0.5 * intensity);
-    color: #222;
-    cursor: pointer;
-  }
-
-  &:active {
-    background: darken(bg, 5%);
-    box-shadow: inset 0 0 1px 1px rgba(white, 0.2 * intensity);
-    color: #000;
-  }
-
-button,
-a.button {
-  minimal-button();
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.selectors.css b/node/node_modules/jade/support/stylus/test/cases/css.selectors.css
deleted file mode 100644 (file)
index 3ea3a18..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-body {
-  margin: 0;
-  padding: 5px;
-}
-body ul {
-  margin: 0;
-}
-body ul li:first-child {
-  border-top: none;
-}
-body ul li:last-child {
-  border-bottom: none;
-}
-ul li:first-child,
-ul li:last-child {
-  display: none;
-}
-foo {
-  border-radius: 5px;
-}
-foo bar baz {
-  border-radius: 5px;
-}
-foo,
-bar,
-baz {
-  border-radius: 5px;
-}
-input[type=button] {
-  border-radius: 5px;
-}
-button,
-input[type=button],
-input[type=submit],
-a.button {
-  border-radius: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.selectors.styl b/node/node_modules/jade/support/stylus/test/cases/css.selectors.styl
deleted file mode 100644 (file)
index c42cbc8..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-body {
-  margin: 0;
-  padding: 5px;
-  ul {
-    /* test */
-    margin: 0;
-    li:first-child {
-      border-top: none;
-      // test
-    }
-    // test
-    li:last-child {
-      border-bottom: none;
-    }
-  }
-}
-
-ul {
-  li {
-    &:first-child,
-    &:last-child {
-      display: none;
-    }
-  }
-}
-
-
-foo {
-  border-radius: 5px;
-}
-
-foo bar baz {
-  border-radius: 5px;
-}
-
-foo
-bar
-baz {
-  border-radius: 5px;
-}
-
-input[type=button] {
-  border-radius: 5px;
-}
-
-
-button
-input[type=button]
-input[type=submit]
-a.button {
-  border-radius: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.whitespace.css b/node/node_modules/jade/support/stylus/test/cases/css.whitespace.css
deleted file mode 100644 (file)
index 146a653..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-body {
-  padding: 5px;
-}
-body {
-  padding: 5px;
-}
-body {
-  padding: 5px;
-  margin: 0;
-}
-body {
-  padding: 5px;
-  margin: 0;
-}
-body {
-  padding: 5px;
-  margin: 0;
-}
-body {
-  padding: 5px;
-  margin: 0;
-}
-body {
-  padding: 5px;
-}
-ul li {
-  padding: 5px;
-}
-body {
-  padding: 5px;
-}
-body {
-  padding: 5px;
-}
-input {
-  foo: "bar";
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/css.whitespace.styl b/node/node_modules/jade/support/stylus/test/cases/css.whitespace.styl
deleted file mode 100644 (file)
index 13ea87a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-
-body
-  padding 5px
-
-body
- padding 5px
-
-body
-  padding: 5px;  margin: 0;
-
-body
-    padding: 5px;
-    margin: 0;
-
-body {
-     padding: 5px;
-  margin: 0;
-}
-
-body {
-  padding: 5px;  margin: 0;
-}
-
-body {
-padding: 5px;
-}
-
-ul {
-  li {
-    padding: 5px;
-}
-}
-
-
-body{padding: 5px;}
-body{padding: 5px}input{foo:'bar'}
diff --git a/node/node_modules/jade/support/stylus/test/cases/escape.css b/node/node_modules/jade/support/stylus/test/cases/escape.css
deleted file mode 100644 (file)
index 1eda758..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body {
-  font: 14px + 1.2;
-  border-radius: 5px 2px ( 5px 1px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/escape.styl b/node/node_modules/jade/support/stylus/test/cases/escape.styl
deleted file mode 100644 (file)
index bbc614f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-body
-  font 14px \+ 1.2
-  border-radius 5px 2px \( 5px 1px
diff --git a/node/node_modules/jade/support/stylus/test/cases/for.complex.css b/node/node_modules/jade/support/stylus/test/cases/for.complex.css
deleted file mode 100644 (file)
index e0259a8..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-body {
-  foo: a;
-  foo: b;
-  foo: c;
-  foo: d;
-  foo: e;
-  foo: f;
-  foo: g;
-}
-body {
-  foo: a;
-}
-body {
-  foo: 0 : b;
-  foo: 1 : c;
-  foo: 2 : d;
-}
-body {
-  foo: error test "test";
-  foo: error test "foo";
-}
-body {
-  foo: 0 a;
-  foo: 1 a;
-  foo: 2 a;
-  foo: 3 a;
-  foo: 0 b;
-  foo: 1 b;
-  foo: 2 b;
-  foo: 3 b;
-  foo: 0 c;
-  foo: 1 c;
-  foo: 2 c;
-  foo: 3 c;
-  foo: 0 d;
-  foo: 1 d;
-  foo: 2 d;
-  foo: 3 d;
-}
-body {
-  foo: helvetica;
-  foo: arial;
-  foo: sans-serif;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/for.complex.styl b/node/node_modules/jade/support/stylus/test/cases/for.complex.styl
deleted file mode 100644 (file)
index d3d442a..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-vals = a b c d e f g
-
-body
-  for val in vals
-    foo val
-
-body
-  for val in vals[0]
-    foo val
-
-body
-  for val, i in vals[1..3]
-    foo i unquote(':') val
-
-body
-  for msg in (error 'test') (error 'foo')
-    foo msg[0] test msg[1]
-
-body
-  for char in a b c d
-    for num in 0 1 2 3
-      foo num char
-
-fonts = helvetica, arial, sans-serif
-
-body
-  for font in fonts
-    foo font
diff --git a/node/node_modules/jade/support/stylus/test/cases/for.css b/node/node_modules/jade/support/stylus/test/cases/for.css
deleted file mode 100644 (file)
index f8129ff..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-body {
-  test-args: 1 2 3;
-  foo: 1;
-  foo: 2;
-  foo: 3;
-  test-args: 1 2 3 4 5;
-  foo: 1 2;
-  foo: 3 4;
-  foo: 5;
-  test-args: 1 2 3 4;
-  foo: 1 2;
-  foo: 3 4;
-}
-body {
-  foo: 1 2;
-  foo: 3 4;
-}
-body {
-  foo: 1;
-  foo: 2;
-  foo: 3;
-  foo: 4;
-  foo: 5;
-}
-body {
-  foo: 1;
-  foo: 2;
-  foo: 3;
-}
-body foo {
-  bar: 1;
-}
-body foo {
-  bar: 2;
-}
-body foo {
-  bar: 3;
-}
-body foo bar {
-  baz: 1;
-}
-body foo bar {
-  baz: 2;
-}
-body foo bar {
-  baz: 3;
-}
-body {
-  foo: 0 foo;
-  foo: 1 bar;
-  foo: 2 baz;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/for.function.css b/node/node_modules/jade/support/stylus/test/cases/for.function.css
deleted file mode 100644 (file)
index 5613a7a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-body {
-  foo: 10;
-  foo: 20;
-  foo: 10;
-}
-body {
-  foo: "foo bar baz";
-  foo: "foo, bar, baz";
-  foo: "1 2 3";
-  foo: "1, 2, 3";
-}
-body {
-  foo: 0 Impact;
-  foo: 1 Arial;
-  foo: 2 sans-serif;
-}
-body {
-  foo: 24;
-  foo: 30;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/for.function.styl b/node/node_modules/jade/support/stylus/test/cases/for.function.styl
deleted file mode 100644 (file)
index 84a5a21..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-
-sum(nums...)
-  sum = 0
-  for n in nums
-    sum += n
-
-sum2(nums...)
-  sum = 0
-  for n in nums
-    sum += n
-  sum * 2
-
-sum3(nums...)
-  sum = 0
-  sum += n for n in nums
-
-body
-  foo sum(1,2,3,4)
-  foo sum2(1,2,3,4)
-  foo sum3(1,2,3,4)
-
-join(delim, args)
-  buf = ''
-  for arg, i in args
-    buf += i ? delim + arg : arg
-
-join2(delim, args)
-  buf = ''
-  buf += i ? delim + arg : arg for arg, i in args
-
-body
-  foo join(' ', foo bar baz)
-  foo join(', ', foo bar baz)
-  foo join2(' ', 1 2 3)
-  foo join2(', ', 1 2 3)
-
-body
-  fonts = Impact Arial sans-serif
-  for font, i in fonts
-    foo i font
-
-last-even(nums...)
-  ret = n if n % 2 == 0 for n in nums
-  ret
-
-first-even(nums...)
-  return n if n % 2 == 0 for n in nums
-
-body
-  foo last-even(1,3,30,5,6,12,2,24,3)
-  foo first-even(1,3,30,5,6,12,2,24,3)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/for.styl b/node/node_modules/jade/support/stylus/test/cases/for.styl
deleted file mode 100644 (file)
index 44617e4..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-
-test(args...)
-  test-args args
-  for arg in args
-    foo arg
-
-size(a, b)
-  return a b
-
-body
-  test 1 2 3
-  test (1 2) (3 4) 5
-  test size(1, 2) size(3, 4)
-
-body
-  sizes = size(1, 2) size(3, 4)
-  for size in sizes
-    foo size
-
-body
-  for n in 1..5
-    foo n
-
-body
-  for n in 1 2 3
-    foo n
-
-body
-  for n in 1 2 3
-    foo
-      bar n
-
-test(args...)
-  foo
-    for arg in args
-      bar
-        baz arg
-
-body
-  test 1 2 3
-
-body
-  for val, index in foo bar baz
-    foo index val
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/function.arguments.css b/node/node_modules/jade/support/stylus/test/cases/function.arguments.css
deleted file mode 100644 (file)
index 1a3a83b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body {
-  padding: 15;
-  padding: 1 2;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/function.arguments.styl b/node/node_modules/jade/support/stylus/test/cases/function.arguments.styl
deleted file mode 100644 (file)
index 9cb7285..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-sum()
-  n = 0
-  for num in arguments
-    n = n + num
-  n
-
-test(a, b)
-  a = b
-  (arguments[0] a)
-
-body
-  padding sum(1,2,3,4,5)
-  padding test(1,2)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/function.literals.css b/node/node_modules/jade/support/stylus/test/cases/function.literals.css
deleted file mode 100644 (file)
index 30ad857..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body {
-  foo: bar(1px, baz(5px));
-  bar: baz(5px) baz(5px);
-  foo: recurse;
-  foo: recurse;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/function.literals.styl b/node/node_modules/jade/support/stylus/test/cases/function.literals.styl
deleted file mode 100644 (file)
index d1179b9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-something(arg)
-  bar arg arg
-
-recurse()
-  foo recurse
-  foo recurse
-
-body
-  foo bar(1px, baz(5px))
-  something(baz(5px))
-  recurse()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.arg-calls.css b/node/node_modules/jade/support/stylus/test/cases/functions.arg-calls.css
deleted file mode 100644 (file)
index 8e0891f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-form input {
-  padding: 10px 5px 10px 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.arg-calls.styl b/node/node_modules/jade/support/stylus/test/cases/functions.arg-calls.styl
deleted file mode 100644 (file)
index f2739eb..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-add(a, b)
-  a + b
-
-pad(x, y = x)
-  padding y x y x
-
-form input
-  n = 5
-  pad(5px, unit(add(n, n), 'px'))
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.call.css b/node/node_modules/jade/support/stylus/test/cases/functions.call.css
deleted file mode 100644 (file)
index 9dbadae..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body {
-  foo: 15;
-  foo: 7;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.call.styl b/node/node_modules/jade/support/stylus/test/cases/functions.call.styl
deleted file mode 100644 (file)
index c85adb1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-add(a, b)
-  a + b
-
-body
-  foo add(5, 10)
-  foo add(5, 2)
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.css b/node/node_modules/jade/support/stylus/test/cases/functions.css
deleted file mode 100644 (file)
index e3c22b2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-body {
-  padding: 10px 5px 10px 5px;
-}
-form .button {
-  padding-left: 15px;
-}
-body {
-  foo: bottom;
-  foo: right;
-  foo: bottom right;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.defaults.css b/node/node_modules/jade/support/stylus/test/cases/functions.defaults.css
deleted file mode 100644 (file)
index 19f7e77..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-body {
-  padding: 15px 5px 15px 5px;
-}
-a.button {
-  padding: 10px 10px 10px 10px;
-}
-a.button-2 {
-  padding: 2px 10px 2px 10px;
-}
-body {
-  padding: 10px;
-}
-.button {
-  padding: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.defaults.styl b/node/node_modules/jade/support/stylus/test/cases/functions.defaults.styl
deleted file mode 100644 (file)
index 2946141..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-size = 15px
-small = 5
-
-pad-var(x, y = size)
-  padding y x y x
-
-pad-arg(x, y = x)
-  padding y x y x
-
-body
-  pad-var(5px)
-
-a.button
-  pad-arg(10px)
-
-a.button-2
-  pad-arg(10px, 2px)
-
-add(a, b)
-  a + b
-
-pad-call(n = unit(add(small, small), 'px'))
-  padding n
-
-body
-  pad-call()
-
-.button
-  pad-call(5px)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.multi-line.css b/node/node_modules/jade/support/stylus/test/cases/functions.multi-line.css
deleted file mode 100644 (file)
index 0818fca..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  padding: 2 1;
-}
-body {
-  padding: 2 1;
-}
-body {
-  padding: 3 2;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.multi-line.styl b/node/node_modules/jade/support/stylus/test/cases/functions.multi-line.styl
deleted file mode 100644 (file)
index b17195c..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-pad(
-  x = 5
-, y = 10
-)
-  padding y x
-
-body
-  pad 1 2
-
-pad(
-    x = 5
-  , y = 10
-)
-  padding y x
-
-body
-  pad 1 2
-
-body
-  pad(x
-    , y
-  )
-    padding y x
-  pad 2 3
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.multiple-calls.css b/node/node_modules/jade/support/stylus/test/cases/functions.multiple-calls.css
deleted file mode 100644 (file)
index d860a55..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-body {
-  padding: 5px;
-  padding: 100px;
-  padding: 10px;
-  padding: 1px;
-  padding: 100px;
-}
-form {
-  padding-left: 5px;
-  padding-right: 5px;
-  padding-top: 10px;
-  padding-bottom: 10px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.multiple-calls.styl b/node/node_modules/jade/support/stylus/test/cases/functions.multiple-calls.styl
deleted file mode 100644 (file)
index 9e7353b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-
-pad(y = 100px)
-  padding unit(y, 'px')
-
-body
-  pad(5px)
-  pad()
-  pad(10px)
-  pad(1)
-  pad()
-
-pad-x(n)
-  n = unit(n, 'px')
-  padding-left n
-  padding-right n
-
-pad-y(y)
-  padding-top n = unit(y, 'px')
-  padding-bottom n
-
-pad(x, y)
-  pad-x(x)
-  pad-y(y)
-
-form
-  pad(5, 10)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.nested-calls.css b/node/node_modules/jade/support/stylus/test/cases/functions.nested-calls.css
deleted file mode 100644 (file)
index 104ae05..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  foo: 13;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.nested-calls.styl b/node/node_modules/jade/support/stylus/test/cases/functions.nested-calls.styl
deleted file mode 100644 (file)
index eda05a3..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-sub(a, b)
-  a - b
-
-add(a, b)
-  a + b
-
-body
-  foo add(5, add(5, sub(5, 2)))
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.nested.css b/node/node_modules/jade/support/stylus/test/cases/functions.nested.css
deleted file mode 100644 (file)
index 6a3c670..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-body {
-  padding: 3.5;
-}
-body {
-  padding: 3.5;
-}
-body {
-  padding: 10;
-  padding: 0;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.nested.styl b/node/node_modules/jade/support/stylus/test/cases/functions.nested.styl
deleted file mode 100644 (file)
index 4f9a2f5..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-
-add(a, b)
-  div(a, b)
-    a / b
-  a + div(b, 2)
-
-body
-  padding add(1,5)
-  // => 3.5
-
-add(a, b)
-  half()
-    b / 2
-  a + half()
-
-body
-  padding add(1,5)
-  // => 3.5
-
-getFunction(name)
-  if name == 'add'
-    add(a, b)
-      a + b
-  else
-    sub(a, b)
-      a - b
-
-body
-  fn = getFunction('add')
-  padding fn(5, 5)
-  // => 10
-  
-  fn = getFunction('sub')
-  fn2 = fn
-  fn3 = fn2
-  padding fn3(5, 5)
-  // => 0
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.property.css b/node/node_modules/jade/support/stylus/test/cases/functions.property.css
deleted file mode 100644 (file)
index 3495051..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-form {
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-a.button {
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.property.styl b/node/node_modules/jade/support/stylus/test/cases/functions.property.styl
deleted file mode 100644 (file)
index cf584ae..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-border-radius(size)
-  -webkit-border-radius size
-  -moz-border-radius size
-  border-radius size
-
-form
-  border-radius 5px
-
-a.button
-  border-radius 5px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.return.css b/node/node_modules/jade/support/stylus/test/cases/functions.return.css
deleted file mode 100644 (file)
index 37706f0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-body {
-  foo: no;
-  foo: yes;
-  foo: false;
-  foo: yes;
-  foo: "a is not a unit";
-  foo: 2;
-}
-body {
-  foo: five;
-  foo: something;
-}
-body {
-  foo: 3;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.return.each.css b/node/node_modules/jade/support/stylus/test/cases/functions.return.each.css
deleted file mode 100644 (file)
index 1c38717..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-body {
-  foo: "1 2 3";
-  foo: "1, 2, 3";
-  foo: "1,2,3";
-}
-body {
-  foo: "1 2 3";
-  foo: "1, 2, 3";
-  foo: "1,2,3";
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.return.each.styl b/node/node_modules/jade/support/stylus/test/cases/functions.return.each.styl
deleted file mode 100644 (file)
index 0f2f1f8..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-
-join1(delim, vals)
-  buf = ''
-  for val, i in vals
-    if i
-      buf += delim + val
-    else
-      buf += val
-
-join2(delim, vals)
-  buf = ''
-  for val, i in vals
-    buf += i ? delim + val : val
-
-body
-  foo join1(' ', 1 2 3)
-  foo join1(', ', 1 2 3)
-  foo join1(',', 1 2 3)
-
-body
-  foo join2(' ', 1 2 3)
-  foo join2(', ', 1 2 3)
-  foo join2(',', 1 2 3)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.return.styl b/node/node_modules/jade/support/stylus/test/cases/functions.return.styl
deleted file mode 100644 (file)
index 6aab55b..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-
-large(n)
-  unless n is a 'unit'
-    return false
-  if n > 100
-    yes
-  else
-    no
-
-awesome()
-  yes
-
-nested(a = 5)
-  if a is a 'unit'
-    b = 10
-    if a
-      c = 100
-      c = 100
-      c = 100
-      c = 100
-      awesome()
-    else
-      'b is not a unit'
-  else
-    'a is not a unit'
-
-set()
-  1
-  return 2
-  3
-
-body
-  // no
-  foo large(15)
-  
-  // yes
-  foo large(150)
-
-  // false
-  foo large('string')
-  
-  // yes
-  foo nested()
-  
-  // 'a is not a unit'
-  foo nested('wahoo')
-
-  // 2
-  foo set()
-
-deep-implicit()
-  one
-  if false
-    two
-  else
-    if true
-      something
-      three
-    else
-      four
-  five
-
-deep-explicit()
-  one
-  if false
-    two
-  else
-    if true
-      return something
-      three
-    else
-      four
-  five
-
-body
-  foo deep-implicit()
-  foo deep-explicit()
-
-test()
-  return 1 if false
-  return 2 if false
-  return 3 if true
-  return 4
-
-body
-  foo test()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.styl b/node/node_modules/jade/support/stylus/test/cases/functions.styl
deleted file mode 100644 (file)
index 8106c2f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-add(a, b)
-  a + b
-
-pad(x, y)
-  padding y x y x
-
-body
-  pad(5px, 10px)
-
-form .button
-  padding-left add(10px, 5px)
-
--opposite-position(pos)
-  if pos == top
-    bottom
-  else if pos == bottom
-    top
-  else if pos == left
-    right
-  else if pos == right
-    left
-  else
-    error('Invalid position ' + pos)
-
-opposite(positions)
-  for pos in positions
-    pos = -opposite-position(pos)
-    ret = ret is defined ? ret pos : pos
-
-body
-  foo opposite(top)
-  foo opposite(left)
-  foo opposite(top left)
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.variable.css b/node/node_modules/jade/support/stylus/test/cases/functions.variable.css
deleted file mode 100644 (file)
index 99fd5ba..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  font: 28px;
-  padding-left: 5px;
-  padding-right: 5px;
-}
-form {
-  padding-top: 10px;
-  padding-bottom: 10px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.variable.ident.css b/node/node_modules/jade/support/stylus/test/cases/functions.variable.ident.css
deleted file mode 100644 (file)
index b7cdff3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  font: 28px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.variable.ident.styl b/node/node_modules/jade/support/stylus/test/cases/functions.variable.ident.styl
deleted file mode 100644 (file)
index abc45ee..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-add(a, b)
-  a + b
-
-size-function = add
-
-size(n)
-  size-function(n, n)
-
-body
-  font size(14px)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/functions.variable.styl b/node/node_modules/jade/support/stylus/test/cases/functions.variable.styl
deleted file mode 100644 (file)
index c3d6a66..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-add(a, b)
-  a + b
-
-size-function = add
-
-size(n)
-  size-function(n, n)
-
-padding-x(n)
-  padding-left n
-  padding-right n
-
-padding-y(n)
-  padding-top n
-  padding-bottom n
-
-mixin(name, n)
-  name(n)
-
-body
-  fn = padding-x
-  font size(14px)
-  fn(5px)
-
-form
-  mixin(padding-y, 10px)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.css b/node/node_modules/jade/support/stylus/test/cases/if.css
deleted file mode 100644 (file)
index 41a12f5..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-body {
-  padding: 100;
-}
-body {
-  padding: false;
-}
-body {
-  padding: 150;
-}
-body {
-  padding: 75;
-}
-body {
-  padding: -1;
-}
-body {
-  padding: 1;
-}
-body {
-  foo: yes;
-  foo: no;
-  foo: zero;
-  foo: invalid;
-}
-body .input {
-  padding: 5px;
-  no: margin;
-}
-body form input {
-  foo: no;
-  foo: bar;
-  bar: baz;
-}
-body something {
-  foo: bar;
-  bar: baz;
-}
-body .nested {
-  foo: bar;
-}
-body .nested .hidden {
-  display: none;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.else.css b/node/node_modules/jade/support/stylus/test/cases/if.else.css
deleted file mode 100644 (file)
index 5d48da0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body {
-  foo: string;
-  foo: unit;
-  foo: color;
-  foo: unknown;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.else.styl b/node/node_modules/jade/support/stylus/test/cases/if.else.styl
deleted file mode 100644 (file)
index bddded5..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-naive-type(val = null)
-  if val is a 'unit'
-    unit
-  else if val is a 'color'
-    color
-  else if val is a 'string'
-    string
-  else
-    unknown
-
-body
-  foo naive-type('test')
-  foo naive-type(12)
-  foo naive-type(#fff)
-  foo naive-type()
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.mixin.css b/node/node_modules/jade/support/stylus/test/cases/if.mixin.css
deleted file mode 100644 (file)
index a83dec6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-body {
-  got: above;
-  got: below;
-  got: empty;
-  yup: just lots of empty;
-  padding: 10px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.mixin.styl b/node/node_modules/jade/support/stylus/test/cases/if.mixin.styl
deleted file mode 100644 (file)
index 3d36fe3..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-
-test(n)
-  if n < 0
-    got below
-  else
-    got above
-
-test-nested(a, b)
-  if a > 1
-    if unit(-5) == ''
-      got empty
-      yup just lots of empty
-    else
-      got unit(-5px)
-
-test-unless(n = 0)
-  unless n
-    padding 10px
-
-body
-  test(5px)
-  test(-5px)
-  test-nested(5px, -5)
-  test-unless()
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.postfix.css b/node/node_modules/jade/support/stylus/test/cases/if.postfix.css
deleted file mode 100644 (file)
index d775ffc..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-body {
-  foo: 1;
-  foo: 2;
-  foo: 3;
-  foo: 4;
-  foo: 5;
-  foo: 6;
-  foo: 7;
-}
-body {
-  foo: 3;
-}
-body {
-  foo: true;
-  foo: true;
-}
-body {
-  foo: true;
-  foo: true;
-}
-body {
-  foo: 5;
-}
-body {
-  foo: bar;
-  foo: baz;
-}
-body {
-  foo: bar;
-  foo: baz;
-}
-@import "foo.css";
-body {
-  foo: 5;
-}
-body {
-  foo: string;
-  foo: number;
-  foo: unknown;
-}
-body {
-  foo: true;
-  foo: true;
-  foo: false;
-}
-body {
-  fonts: arial, sans-serif;
-}
-body {
-  foo: yes;
-  foo: yes;
-  foo: yes;
-  foo: ;
-  foo: ;
-}
-body {
-  foo: yes;
-  foo: no;
-  foo: zero;
-  foo: invalid;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.postfix.styl b/node/node_modules/jade/support/stylus/test/cases/if.postfix.styl
deleted file mode 100644 (file)
index 9639d4f..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-
-mixin()
-  if true
-    foo 6
-    foo 7 if true
-    foo 8 unless true
-
-body
-  foo 1
-  foo 2 if true
-  foo 3 unless false
-  if true
-    foo 4
-    foo 5
-  mixin()
-
-body
-  foo 1 if false
-  foo 2 unless true
-  foo 3
-
-above-5(n)
-  true if n > 5
-
-body
-  foo above-5(2) == null
-  foo above-5(6) == true
-
-below-5(n)
-  return true unless n > 5
-  false
-
-body
-  foo below-5(3) == true
-  foo below-5(7) == false
-
-body
-  foo 5 unless 5 + 5 == 10
-
-body
-  foo 5 if 5 + 5 == 10 and true
-
-mixin()
-  foo bar
-  foo baz
-
-body
-  mixin() if true
-  mixin() unless true
-
-body
-  mixin test if true
-
-
-@import 'foo.css' if true
-@charset 'foo' if false
-
-num = 5 unless num is defined
-
-body
-  foo num
-
-type(arg = null)
-  return string if arg is a 'string'
-  return number if arg is a 'unit'
-  unknown
-
-body
-  foo type('test')
-  foo type(12)
-  foo type()
-
-is-a-string(arg = null)
-  arg is a 'string' unless arg == null
-
-body
-  foo is-a-string() == null
-  foo is-a-string('test')
-  foo is-a-string(12) if true
-
-empty(expr)
-  0 == length(expr)
-
-font-list = arial, sans-serif
-body
-  fonts font-list unless empty(font-list)
-  font-list = ()
-  fonts font-list unless empty(font-list)
-
-truthy(val)
-  yes if 1 == val or 'yes' == val or 'y' == val
-
-body
-  foo truthy(1)
-  foo truthy('yes')
-  foo truthy('y')
-  foo truthy(0)
-  foo truthy('no')
-
-negative(n)
-  return invalid unless n is a 'unit'
-  return yes if n < 0
-  return no if n > 0
-  zero
-
-body
-  foo negative(-5)
-  foo negative(5)
-  foo negative(0)
-  foo negative('asdf')
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.selectors.css b/node/node_modules/jade/support/stylus/test/cases/if.selectors.css
deleted file mode 100644 (file)
index 51e1118..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-form input {
-  border: 1px solid #eee;
-}
-body {
-  font: 12px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.selectors.styl b/node/node_modules/jade/support/stylus/test/cases/if.selectors.styl
deleted file mode 100644 (file)
index f63848d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-if false
-  something
-    with a-prop
-
-if true
-  form
-    input
-      border 1px solid #eee
-  if true
-    body
-      font 12px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/if.styl b/node/node_modules/jade/support/stylus/test/cases/if.styl
deleted file mode 100644 (file)
index f2f9746..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-n = false
-
-if !n
-  n = 100
-
-body
-  padding n
-
-n = false
-
-if not not n
-  n = 50
-
-body
-  padding n
-
-if not n
-  n = 150
-
-body
-  padding n
-
-if n
-  n = n / 2
-else
-  n = 10000
-
-body
-  padding n
-
-if n > 100
-  n = n * 2
-else
-  n = -1
-
-body
-  padding n
-
-n = 75
-
-if n < 50
-  n = n
-else
-  if n > 50 and n < 100
-    n = 1
-  else
-    n = -1
-
-body
-  padding n
-
-negative(n)
-  unless n is a 'unit'
-    return invalid
-  if n < 0
-    yes
-  else if n > 0
-    no
-  else
-    zero
-
-body
-  foo negative(-5)
-  foo negative(5)
-  foo negative(0)
-  foo negative('asdf')
-
-body
-  .input
-    pad = true
-    margin = false
-    if pad
-      padding 5px
-    if margin
-      margin 5px
-    else
-      no unquote('margin')
-
-mixin()
-  foo bar
-  bar baz
-
-body
-  form input
-    if true
-      foo negative(5)
-      mixin()
-  something
-    mixin()
-
-body
-  .nested
-    if true
-      if true
-        if true
-          foo bar
-          .hidden
-            if true
-              display none
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.basic.css b/node/node_modules/jade/support/stylus/test/cases/import.basic.css
deleted file mode 100644 (file)
index 2f2a6d9..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.a {
-  color: #f00;
-}
-.b {
-  color: #008000;
-}
-.c {
-  color: #00f;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.basic.styl b/node/node_modules/jade/support/stylus/test/cases/import.basic.styl
deleted file mode 100644 (file)
index f8850e3..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-@import "a"
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.basic/a.styl b/node/node_modules/jade/support/stylus/test/cases/import.basic/a.styl
deleted file mode 100644 (file)
index c6aee44..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-.a
-  color red
-
-@import "b"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.basic/b.styl b/node/node_modules/jade/support/stylus/test/cases/import.basic/b.styl
deleted file mode 100644 (file)
index c514e75..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-.b
-  color green
-
-@import "c"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.basic/c.styl b/node/node_modules/jade/support/stylus/test/cases/import.basic/c.styl
deleted file mode 100644 (file)
index abc49ca..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-.c
-  color blue
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.complex.css b/node/node_modules/jade/support/stylus/test/cases/import.complex.css
deleted file mode 100644 (file)
index 3ba73e8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-one {
-  foo: bar;
-}
-two {
-  foo: bar;
-}
-three {
-  foo: bar;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.complex.styl b/node/node_modules/jade/support/stylus/test/cases/import.complex.styl
deleted file mode 100644 (file)
index 8d4e813..0000000
+++ /dev/null
@@ -1 +0,0 @@
-@import "./import.complex/a"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.complex/a.styl b/node/node_modules/jade/support/stylus/test/cases/import.complex/a.styl
deleted file mode 100644 (file)
index 4c4e68b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-one
-  foo bar
-
-@import "./nested/b"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.complex/c.styl b/node/node_modules/jade/support/stylus/test/cases/import.complex/c.styl
deleted file mode 100644 (file)
index c400d08..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-three
-  foo bar
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.complex/nested/b.styl b/node/node_modules/jade/support/stylus/test/cases/import.complex/nested/b.styl
deleted file mode 100644 (file)
index 1316242..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-two
-  foo bar
-
-@import "../c"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.index.css b/node/node_modules/jade/support/stylus/test/cases/import.index.css
deleted file mode 100644 (file)
index f34b6a0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  one: 1;
-}
-body {
-  two: 2;
-}
-body {
-  three: 3;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.index.styl b/node/node_modules/jade/support/stylus/test/cases/import.index.styl
deleted file mode 100644 (file)
index 4ef8282..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-@import 'import.index/vendor'
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.index/vendor/a.styl b/node/node_modules/jade/support/stylus/test/cases/import.index/vendor/a.styl
deleted file mode 100644 (file)
index a80eaac..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body 
-  one 1
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.index/vendor/b.styl b/node/node_modules/jade/support/stylus/test/cases/import.index/vendor/b.styl
deleted file mode 100644 (file)
index ed6a757..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body
-  two 2
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.index/vendor/c.styl b/node/node_modules/jade/support/stylus/test/cases/import.index/vendor/c.styl
deleted file mode 100644 (file)
index 0b63b12..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body
-  three 3
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.index/vendor/index.styl b/node/node_modules/jade/support/stylus/test/cases/import.index/vendor/index.styl
deleted file mode 100644 (file)
index fb919a9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-@import 'a'
-@import 'b'
-@import 'c'
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.literal.css b/node/node_modules/jade/support/stylus/test/cases/import.literal.css
deleted file mode 100644 (file)
index 54fd5ca..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-@import "foo/bar.css";
-@import "bar/baz.css";
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.literal.styl b/node/node_modules/jade/support/stylus/test/cases/import.literal.styl
deleted file mode 100644 (file)
index d39dfa3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-@import "foo/bar.css"
-@import 'bar/baz.css'
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.mixins.css b/node/node_modules/jade/support/stylus/test/cases/import.mixins.css
deleted file mode 100644 (file)
index b526a7f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-body {
-  padding: 10px 5px 10px 5px;
-}
-form {
-  padding-left: 5px;
-  padding-right: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.mixins.styl b/node/node_modules/jade/support/stylus/test/cases/import.mixins.styl
deleted file mode 100644 (file)
index 8819d7b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-if true
-  @import "mixins/box"
-
-body
-  pad 5px 10px
-
-form
-  pad-x 5px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.ordering.css b/node/node_modules/jade/support/stylus/test/cases/import.ordering.css
deleted file mode 100644 (file)
index dfae959..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-one {
-  foo: bar;
-}
-two {
-  foo: bar;
-}
-three {
-  foo: bar;
-}
-four {
-  foo: bar;
-}
-five {
-  foo: bar;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.ordering.styl b/node/node_modules/jade/support/stylus/test/cases/import.ordering.styl
deleted file mode 100644 (file)
index afec87d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-dir = 'import.ordering'
-
-one
-  foo bar
-
-@import dir + "/two"
-
-three
-  foo bar
-
-@import dir + '/four'
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.ordering/five.styl b/node/node_modules/jade/support/stylus/test/cases/import.ordering/five.styl
deleted file mode 100644 (file)
index 05ee8a9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-five
-  foo bar
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.ordering/four.styl b/node/node_modules/jade/support/stylus/test/cases/import.ordering/four.styl
deleted file mode 100644 (file)
index 58392a1..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-four
-  foo bar
-
-@import "import.ordering/five"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/import.ordering/two.styl b/node/node_modules/jade/support/stylus/test/cases/import.ordering/two.styl
deleted file mode 100644 (file)
index 15f8e04..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-two
-  foo bar
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/important.css b/node/node_modules/jade/support/stylus/test/cases/important.css
deleted file mode 100644 (file)
index a7c144a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-a {
-  color: #f00 !important;
-}
-a.button {
-  color: #00f;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/important.styl b/node/node_modules/jade/support/stylus/test/cases/important.styl
deleted file mode 100644 (file)
index 8500932..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-a
-  color red !important
-
-a.button
-  color blue
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/interpolation.properties.css b/node/node_modules/jade/support/stylus/test/cases/interpolation.properties.css
deleted file mode 100644 (file)
index 801c157..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#login {
-  -webkit-border-radius: 1px 2px / 3px 4px;
-  -moz-border-radius: 1px 2px / 3px 4px;
-  border-radius: 1px 2px / 3px 4px;
-}
-body {
-  foo: bar;
-  foo-something: foo;
-  foo-something-bar: foo;
-  something-foo: foo;
-  something: foo;
-}
-body {
-  test-stuff-yup: awesome;
-  -webkit-border-radius: awesome;
-  -webkit-box-shadow: awesome;
-}
-body {
-  foo: "one";
-  foo: "two";
-}
-body {
-  -webkit-something: foo;
-  something: foo;
-}
-body form input {
-  -webkit-something: foo;
-  something: foo;
-}
-body form input p {
-  something: foo;
-}
-body {
-  foo-test-baz: bar;
-  foo-test: bar;
-  test: bar;
-  position: absolute;
-  top: 0;
-  right: 0;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/interpolation.properties.styl b/node/node_modules/jade/support/stylus/test/cases/interpolation.properties.styl
deleted file mode 100644 (file)
index b33dc2b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-
-vendor(prop, args)
-  -webkit-{prop} args
-  -moz-{prop} args
-  {prop} args
-
-border-radius()
-  vendor('border-radius', arguments)
-
-#login
-  border-radius 1px 2px / 3px 4px
-
-body
-  prop = 'something'
-  foo bar
-  foo-{prop} foo
-  foo-{prop}-bar foo
-  {prop}-foo foo
-  {prop} foo
-
-body
-  {'test' + '-stuff'}-yup awesome
-  -webkit-{border-radius} awesome
-  -webkit-{box-shadow} awesome
-
-testing(var, one, two)
-  {var}
-
-body
-  foo testing('one', 1, 2)
-  foo testing('two', 1, 2)
-
-body
-  nested(prop)
-    -webkit-{prop} foo
-    {prop} foo
-    form input
-      -webkit-{prop} foo
-      {prop} foo
-      p
-        {prop} foo
-  nested('something')
-
-top-right()
-  position absolute
-  top 0
-  right 0
-
-foo(ret)
-  ret
-
-body
-  foo-{foo('test')}-baz bar
-  foo-{foo('test')} bar
-  {foo('test')} bar
-  {foo('top')}-right bar
diff --git a/node/node_modules/jade/support/stylus/test/cases/introspection.css b/node/node_modules/jade/support/stylus/test/cases/introspection.css
deleted file mode 100644 (file)
index ce4a1d6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-got {
-  root: true;
-}
-body {
-  got: "a mixin";
-  foo: "not a mixin";
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/introspection.styl b/node/node_modules/jade/support/stylus/test/cases/introspection.styl
deleted file mode 100644 (file)
index 8433995..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-reset()
-  if mixin == 'root'
-    got
-      root true
-  else if mixin
-    got 'a mixin'
-  else
-    'not a mixin'
-
-reset()
-
-body
-  reset()
-  foo reset()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/jquery.css b/node/node_modules/jade/support/stylus/test/cases/jquery.css
deleted file mode 100644 (file)
index 6562ed2..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  padding: 10px 10px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/jquery.styl b/node/node_modules/jade/support/stylus/test/cases/jquery.styl
deleted file mode 100644 (file)
index 36feb65..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-pad( x   ,  y = x )
-  padding x y
-
-body
-  pad( 10px )
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/list.css b/node/node_modules/jade/support/stylus/test/cases/list.css
deleted file mode 100644 (file)
index 6c1c179..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  font: 12px "Lucida Grande", Arial, sans-serif;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/list.styl b/node/node_modules/jade/support/stylus/test/cases/list.styl
deleted file mode 100644 (file)
index 08da49c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-body
-  font 12px "Lucida Grande", Arial, sans-serif
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/literal.css b/node/node_modules/jade/support/stylus/test/cases/literal.css
deleted file mode 100644 (file)
index ecaf916..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  font: 14px;
-}
-
-a { text-decoration: none; }
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/literal.styl b/node/node_modules/jade/support/stylus/test/cases/literal.styl
deleted file mode 100644 (file)
index 94b071f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-@css {
-  body {
-    font: 14px;
-  }
-  
-  a { text-decoration: none; }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/media.css b/node/node_modules/jade/support/stylus/test/cases/media.css
deleted file mode 100644 (file)
index 0175743..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-@media print and (width: 21cm) and (height: 29cm) {
-  body {
-    margin: 3cm;
-    padding: 0;
-  }
-}
-@media print {
-  @page :left {
-    margin-left: 5px;
-  }
-  @page :right {
-    margin-right: 5px;
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/media.styl b/node/node_modules/jade/support/stylus/test/cases/media.styl
deleted file mode 100644 (file)
index da17def..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-@media print and (width: 21cm) and (height: 29cm)
-  body
-    margin 3cm
-    padding 0
-
-@media print
-  @page :left
-    margin-left 5px
-  @page :right
-    margin-right 5px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixin.conditional.css b/node/node_modules/jade/support/stylus/test/cases/mixin.conditional.css
deleted file mode 100644 (file)
index 574ff68..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-body {
-  padding: 20px;
-  padding: 10px;
-  padding: 3px;
-}
-form input {
-  foo: bar;
-  bar: baz;
-}
-form input .two {
-  level: two;
-}
-form input .two:hover {
-  level: three;
-}
-body {
-  foo: bar;
-  bar: baz;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixin.conditional.styl b/node/node_modules/jade/support/stylus/test/cases/mixin.conditional.styl
deleted file mode 100644 (file)
index 2ff9cac..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-
-pad(size = small)
-  if large == size
-    padding 20px
-  if medium == size
-    padding 10px
-  if small == size
-    padding 3px
-
-body
-  pad(large)
-  pad(medium)
-  pad()
-  pad(invalid)
-
-nested(val)
-  if val
-    foo bar
-    bar baz
-    .two
-      level two
-      &:hover
-        level three
-
-form input
-  nested(true)
-  nested(false)
-
-break()
-  foo bar
-  bar baz
-  return
-  baz raz
-
-body
-  break()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixin.order.conditional.css b/node/node_modules/jade/support/stylus/test/cases/mixin.order.conditional.css
deleted file mode 100644 (file)
index 1bf23eb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-body {
-  one: 1;
-  two: 2;
-  three: 3;
-  four: 4;
-  five: 5;
-  six: 6;
-  seven: 7;
-  eight: 8;
-  nine: 9;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixin.order.conditional.styl b/node/node_modules/jade/support/stylus/test/cases/mixin.order.conditional.styl
deleted file mode 100644 (file)
index cacc666..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-mixin2()
-  four 4
-  if true
-    five 5
-
-mixin()
-  mixin2()
-  if true
-    six 6
-    if true
-      seven 7
-  eight 8 if true
-
-body
-  one 1
-  two 2
-  three 3
-  if true
-    mixin()
-  nine 9
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixin.order.css b/node/node_modules/jade/support/stylus/test/cases/mixin.order.css
deleted file mode 100644 (file)
index 3e4ab4d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  one: 1;
-  two: 2;
-  three: 3;
-  four: 4;
-  five: 5;
-  six: 6;
-  seven: 7;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixin.order.nested.css b/node/node_modules/jade/support/stylus/test/cases/mixin.order.nested.css
deleted file mode 100644 (file)
index 3e4ab4d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  one: 1;
-  two: 2;
-  three: 3;
-  four: 4;
-  five: 5;
-  six: 6;
-  seven: 7;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixin.order.nested.styl b/node/node_modules/jade/support/stylus/test/cases/mixin.order.nested.styl
deleted file mode 100644 (file)
index 6a5e9fa..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-mixin2()
-  three 3
-
-mixin3()
-  four 4
-  mixin4()
-
-mixin4()
-  five 5
-
-mixin()
-  two 2
-  mixin2()
-  mixin3()
-  six 6
-
-body
-  one 1
-  mixin()
-  seven 7
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixin.order.styl b/node/node_modules/jade/support/stylus/test/cases/mixin.order.styl
deleted file mode 100644 (file)
index a873878..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-mixin2()
-  three 3
-
-mixin3()
-  four 4
-  mixin4()
-
-mixin4()
-  five 5
-
-mixin()
-  two 2
-  mixin2()
-  mixin3()
-  six 6
-
-body
-  one 1
-  mixin()
-  seven 7
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.complex.css b/node/node_modules/jade/support/stylus/test/cases/mixins.complex.css
deleted file mode 100644 (file)
index 134973e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-ul li {
-  list-style-image: none;
-  list-style-type: none;
-  margin-left: 0;
-  display: -moz-inline-box;
-  -moz-box-orient: vertical;
-  display: inline-block;
-  vertical-align: middle;
-}
-ul li:first-child {
-  list-style-image: none;
-  list-style-type: none;
-  margin-left: 0;
-  display: -moz-inline-box;
-  -moz-box-orient: vertical;
-  display: inline-block;
-  vertical-align: middle;
-  padding-left: 5px;
-  padding-right: 5px;
-}
-body {
-  did: nothing;
-}
-body {
-  padding: 5px;
-}
-body {
-  padding: 5px;
-  margin: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.complex.fix-to.css b/node/node_modules/jade/support/stylus/test/cases/mixins.complex.fix-to.css
deleted file mode 100644 (file)
index f104b4d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.button {
-  position: fixed;
-  bottom: 0;
-  left: 0;
-}
-.button {
-  position: fixed;
-  bottom: 0;
-  left: 0;
-}
-.button {
-  position: fixed;
-  bottom: 5px;
-  left: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.complex.fix-to.styl b/node/node_modules/jade/support/stylus/test/cases/mixins.complex.fix-to.styl
deleted file mode 100644 (file)
index 0609fbc..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-fix-to(a, b)
-  position fixed
-  {a} 0
-  {b} 0
-
-.button
-  fix-to bottom left
-
-
-fix-to(pos...)
-  position fixed
-  if length(pos) == 2
-    {pos[0]} 0
-    {pos[1]} 0
-  else if length(pos) == 4
-    a = pos[0..1]
-    b = pos[2..3]
-    {a[0]} a[1]
-    {b[0]} b[1]
-  else
-    error('invalid arguments. fix-to: <pos> [n] <pos> [n];')
-    
-.button
-  fix-to bottom left
-
-.button
-  fix-to bottom 5px left 5px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.complex.styl b/node/node_modules/jade/support/stylus/test/cases/mixins.complex.styl
deleted file mode 100644 (file)
index f92bda4..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-no-bullet()
-  list-style-image none
-  list-style-type none
-  margin-left 0
-
-inline-block()
-  display -moz-inline-box
-  -moz-box-orient vertical
-  display inline-block
-  vertical-align middle
-
-inline-block-list-item(padding = false)
-  no-bullet()
-  inline-block()
-  if padding
-    padding-left 5px
-    padding-right 5px
-
-ul
-  li
-    inline-block-list-item()
-
-ul li:first-child
-  inline-block-list-item(true)
-
-pad(pad = false, margin = false)
-  if pad
-    padding 5px
-  if margin
-    margin 5px
-  unless pad or margin
-    did nothing
-
-body
-  pad()
-
-body
-  pad(true)
-
-body
-  pad(true, true)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.conditional.css b/node/node_modules/jade/support/stylus/test/cases/mixins.conditional.css
deleted file mode 100644 (file)
index f2f733b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  margin: 5px 10px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.conditional.styl b/node/node_modules/jade/support/stylus/test/cases/mixins.conditional.styl
deleted file mode 100644 (file)
index 07275b5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-overload-padding = true
-
-if overload-padding
-  padding(y, x)
-    margin y x
-
-body
-  padding 5px 10px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.nested.css b/node/node_modules/jade/support/stylus/test/cases/mixins.nested.css
deleted file mode 100644 (file)
index 1af8585..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-body {
-  one: 1;
-  two: 1 2;
-  three: 1 2 3;
-  -three: 1 2 c;
-  -two: 1 b c;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.nested.selectors.css b/node/node_modules/jade/support/stylus/test/cases/mixins.nested.selectors.css
deleted file mode 100644 (file)
index ba2f23b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-body {
-  padding: 5px;
-  color: "bar";
-}
-body .foo {
-  color: "bar";
-}
-body .foo .bar {
-  color: "bar";
-}
-body {
-  one: 1;
-  two: 2;
-  three: 3;
-}
-body with some nesting {
-  four: 4;
-}
-body with some nesting even more {
-  five: 5;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.nested.selectors.styl b/node/node_modules/jade/support/stylus/test/cases/mixins.nested.selectors.styl
deleted file mode 100644 (file)
index d828786..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-
-mixin(n)
-  padding n
-  var = 'bar'
-  color var
-  .foo
-    color var
-    .bar
-      color var
-
-body
-  foo = 'foo'
-  mixin(5px)
-
-three(n)
-  three n
-  with some nesting
-    four n = n + 1
-    even more
-      five n + 1
-
-two(n)
-  two n
-  three(n + 1)
-
-one(n)
-  one n
-  two(n + 1)
-
-body
-  one(1)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.nested.styl b/node/node_modules/jade/support/stylus/test/cases/mixins.nested.styl
deleted file mode 100644 (file)
index 045e3a1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-one(a)
-  one a
-  two(b)
-    two a b
-    three(c)
-      three a b c
-    three(3)
-    -three a b c
-  two(2)
-  -two a b c
-
-body
-  one(1)
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.order.2.css b/node/node_modules/jade/support/stylus/test/cases/mixins.order.2.css
deleted file mode 100644 (file)
index 1bf23eb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-body {
-  one: 1;
-  two: 2;
-  three: 3;
-  four: 4;
-  five: 5;
-  six: 6;
-  seven: 7;
-  eight: 8;
-  nine: 9;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.order.2.styl b/node/node_modules/jade/support/stylus/test/cases/mixins.order.2.styl
deleted file mode 100644 (file)
index 6cbe4e1..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-test-nested()
-  two 2
-  if true
-    three 3
-    if true
-      four 4
-      if true
-        five 5
-      six 6
-    seven 7
-  eight 8
-
-body
-  one 1
-  test-nested()
-  nine 9
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.return.css b/node/node_modules/jade/support/stylus/test/cases/mixins.return.css
deleted file mode 100644 (file)
index 5f2b54e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body {
-  foo: bar;
-  bar: baz;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.return.styl b/node/node_modules/jade/support/stylus/test/cases/mixins.return.styl
deleted file mode 100644 (file)
index b37c764..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-another()
-  foo bar
-  bar baz
-  return
-  baz raz
-
-body
-  another()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.root.css b/node/node_modules/jade/support/stylus/test/cases/mixins.root.css
deleted file mode 100644 (file)
index 7f8f806..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  padding: 5px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins.root.styl b/node/node_modules/jade/support/stylus/test/cases/mixins.root.styl
deleted file mode 100644 (file)
index 11e1378..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-foo()
-  body
-    padding 5px
-
-foo()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/mixins/box.styl b/node/node_modules/jade/support/stylus/test/cases/mixins/box.styl
deleted file mode 100644 (file)
index fd9085b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-pad(x, y = x)
-  padding y x y x
-
-pad-x(n)
-  padding-left n
-  padding-right n
-
-pad-y(n)
-  padding-top n
-  padding-bottom n
diff --git a/node/node_modules/jade/support/stylus/test/cases/operator.range.css b/node/node_modules/jade/support/stylus/test/cases/operator.range.css
deleted file mode 100644 (file)
index 81f45cb..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-body {
-  foo: 1 2 3 4 5;
-  foo: 1 2 3 4 5 6 7 8 9 10;
-  foo: 1;
-  foo: 1 2 3 4 5;
-  foo: 5;
-  foo: 2;
-  foo: 5;
-  foo: 6 7 8 9 10;
-  foo: true;
-  foo: true;
-}
-body {
-  foo: 1 2 3;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operator.range.styl b/node/node_modules/jade/support/stylus/test/cases/operator.range.styl
deleted file mode 100644 (file)
index 4b3cdc1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-body
-  small = 1..5
-  large = (1..5) (6..10)
-  
-  foo small
-  foo large
-  
-  foo small[0]
-  foo large[0]
-  
-  foo length(small)
-  foo length(large)
-
-  foo small[length(small) - 1]
-  foo large[length(large) - 1]
-  
-  foo small[-1] == null
-  foo small[123123] == null
-
-body
-  start = 1
-  end = 3
-  foo start..end
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.assignment.function.css b/node/node_modules/jade/support/stylus/test/cases/operators.assignment.function.css
deleted file mode 100644 (file)
index b4169d6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-body {
-  foo: 20;
-}
-body {
-  foo: 5;
-}
-body {
-  foo: 20;
-}
-body {
-  foo: 2.5;
-}
-body {
-  foo: 1;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.assignment.function.styl b/node/node_modules/jade/support/stylus/test/cases/operators.assignment.function.styl
deleted file mode 100644 (file)
index eda512f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-
-test(n)
-  n += 5
-  n += 5
-
-body
-  foo test(10)
-
-test(n)
-  n -= 2
-  n -= 3
-
-body
-  foo test(10)
-
-test(n)
-  n *= 2
-  n *= 2
-
-body
-  foo test(5)
-
-test(n)
-  n /= 2
-  n /= 4
-
-body
-  foo test(20)
-
-test(n)
-  n %= 2
-
-body
-  foo test(5)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.assignment.mixin.css b/node/node_modules/jade/support/stylus/test/cases/operators.assignment.mixin.css
deleted file mode 100644 (file)
index b4169d6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-body {
-  foo: 20;
-}
-body {
-  foo: 5;
-}
-body {
-  foo: 20;
-}
-body {
-  foo: 2.5;
-}
-body {
-  foo: 1;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.assignment.mixin.styl b/node/node_modules/jade/support/stylus/test/cases/operators.assignment.mixin.styl
deleted file mode 100644 (file)
index 6cbba10..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-
-test(n)
-  n += 5
-  n += 5
-  foo n
-
-body
-  test(10)
-
-test(n)
-  n -= 2
-  n -= 3
-  foo n
-
-body
-  test(10)
-
-test(n)
-  n *= 2
-  n *= 2
-  foo n
-
-body
-  test(5)
-
-test(n)
-  n /= 2
-  n /= 4
-  foo n
-
-body
-  test(20)
-
-test(n)
-  n %= 2
-  foo n
-
-body
-  test(5)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.assignment.root.css b/node/node_modules/jade/support/stylus/test/cases/operators.assignment.root.css
deleted file mode 100644 (file)
index 0bcf506..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-body {
-  foo: 20;
-  foo: 21;
-}
-body {
-  foo: 20;
-}
-body {
-  foo: 5;
-}
-body {
-  foo: 20;
-}
-body {
-  foo: 2.5;
-}
-body {
-  foo: 1;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.assignment.root.styl b/node/node_modules/jade/support/stylus/test/cases/operators.assignment.root.styl
deleted file mode 100644 (file)
index 63b2e17..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-n = 10
-a = n = n + 10
-a += 1
-
-body
-  foo n
-  foo a
-
-n = 10
-n += 5
-n += 5
-
-body
-  foo n
-
-n = 10
-n -= 2
-n -= 3
-
-body
-  foo n
-
-n = 5
-n *= 2
-n *= 2
-
-body
-  foo n
-
-n = 20
-n /= 2
-n /= 4
-
-body
-  foo n
-
-n = 5
-n %= 2
-
-body
-  foo n
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.complex.css b/node/node_modules/jade/support/stylus/test/cases/operators.complex.css
deleted file mode 100644 (file)
index 0e3319c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  foo: yes;
-  foo: true;
-  foo: yay;
-  foo: nah;
-  foo: nah;
-  foo: true;
-  foo: false;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.complex.styl b/node/node_modules/jade/support/stylus/test/cases/operators.complex.styl
deleted file mode 100644 (file)
index ffdc6cb..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-
-ensure-unit(n)
-  foo bar
-  foo bar
-  foo bar
-  n is a 'unit'
-
-body
-  a = 15
-  b = 15
-  
-  // yes
-  foo a == b and (b == 15 ? 1 : 0) ? yes : no
-  
-  // true
-  foo a == b and b == a
-  
-  // yay
-  foo 15px is a 'unit' and #fff is a 'color'?yay:nah
-  
-  // nah
-  foo 15px is a 'color' and #fff is a 'color'?yay:nah
-  
-  // nah
-  foo 15px is a 'unit' and #fff is a 'unit'?  yay   : nah
-  
-  // true
-  foo ensure-unit(15)
-  
-  // false
-  foo ensure-unit(#fff)
-
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.css b/node/node_modules/jade/support/stylus/test/cases/operators.css
deleted file mode 100644 (file)
index 7e87857..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-body {
-  foo: 5px;
-  foo: 0px;
-  foo: 0px;
-  foo: false;
-  foo: true;
-  foo: 5px;
-  foo: 1px;
-  foo: 0;
-  foo: false;
-  foo: 10;
-  foo: #fff;
-  foo: 1;
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: wahoo;
-  foo: nope;
-  foo: "got 15px";
-  foo: 1;
-  foo: 5;
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: false;
-  foo: false;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.equality.css b/node/node_modules/jade/support/stylus/test/cases/operators.equality.css
deleted file mode 100644 (file)
index a0c3bb4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-body {
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: true;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.equality.styl b/node/node_modules/jade/support/stylus/test/cases/operators.equality.styl
deleted file mode 100644 (file)
index 452a7ad..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-body
-  
-  // true
-  foo 1 != 5
-  
-  // true
-  foo wahoo == wahoo
-  
-  // false
-  foo wahoo == something
-  
-  // true
-  foo wahoo != something
-  foo wahoo is not something
-
-  // true
-  foo = yay
-  foo yes == (foo is defined ? yes : nope)
-  
-  // true
-  rawr = 'asdfasdf'
-  foo yes == (rawr is defined ? yes : nope)
-  
-  // true
-  foo 1000ms == 1s
-  
-  // false
-  foo 1ms == 1s
-  
-  // true
-  foo 5 < 10 and 10 > 5
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.in.css b/node/node_modules/jade/support/stylus/test/cases/operators.in.css
deleted file mode 100644 (file)
index 77a7dcd..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-body {
-  foo: true;
-  foo: true;
-  foo: false;
-}
-body {
-  foo: true;
-}
-body {
-  foo: true;
-  foo: true;
-  foo: false;
-}
-body {
-  foo: false;
-  foo: true;
-  foo: true;
-  foo: false;
-}
-body {
-  foo: false;
-  foo: false;
-  foo: true;
-  foo: false;
-  foo: true;
-}
-body {
-  foo: true;
-  foo: false;
-}
-body {
-  foo: true;
-  foo: false;
-  foo: true;
-  foo: true;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.in.styl b/node/node_modules/jade/support/stylus/test/cases/operators.in.styl
deleted file mode 100644 (file)
index 3d4e35a..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-body
-  nums = 1 2 3
-  foo 1 in nums
-  foo 3 in nums
-  foo 5 in nums
-
-body
-  nums = 1
-  foo 1 in nums == true
-
-body
-  words = foo bar baz
-  foo bar in words
-  foo baz in words
-  foo HEY in words
-
-body
-  tuples = (error 'one') (error 'two')
-  foo error in tuples
-  foo (error 'one') in tuples
-  foo (error 'two') in tuples
-  foo (error 'something') in tuples
-
-fn(args...)
-  2 in args
-
-body
-  foo fn()
-  foo fn(1)
-  foo fn(2)
-  foo fn(3 2)
-  foo fn(1,2,3)
-
-fn(args...)
-  (3 2) in args
-
-body
-  foo fn(3 2)
-  foo fn(3,2)
-
-fn()
-  test in arguments
-
-body
-  foo fn(test)
-  foo fn(a, b, c)
-  foo fn(a, test, c)
-  foo fn(a test c)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.mixins.css b/node/node_modules/jade/support/stylus/test/cases/operators.mixins.css
deleted file mode 100644 (file)
index fd2479b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-body {
-  foo: false;
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: false;
-  foo: "something";
-  foo: "something";
-  foo: "12";
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.mixins.styl b/node/node_modules/jade/support/stylus/test/cases/operators.mixins.styl
deleted file mode 100644 (file)
index 829f696..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-stringish(val = false)
-  'string' == type(val) or 'ident' == type(val)
-
-string(val)
-  '' + val
-
-body
-  // false
-  foo stringish(12)
-  
-  // true
-  foo stringish('12')
-
-  // true
-  foo stringish(wahoo)
-
-  // false
-  num = 12
-  foo stringish(num)
-  foo stringish()
-
-  foo string(something)
-  foo string('something')
-  foo string(12)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.precedence.css b/node/node_modules/jade/support/stylus/test/cases/operators.precedence.css
deleted file mode 100644 (file)
index e4959ce..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-body {
-  foo: 4;
-  foo: 4;
-  foo: -5px;
-  foo: 2;
-  foo: 2;
-}
-body {
-  foo: true;
-  foo: true;
-}
-body {
-  foo: 5;
-  foo: 5;
-}
-body {
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: true;
-  foo: 2;
-}
-body {
-  foo: true;
-  foo: true;
-}
-body {
-  foo: 2.5;
-  foo: 2.5;
-}
-body {
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: wahoo;
-  foo: fail;
-}
-body {
-  foo: true;
-  foo: true;
-}
-body {
-  foo: true;
-  foo: 1;
-}
-body {
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: true;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.precedence.styl b/node/node_modules/jade/support/stylus/test/cases/operators.precedence.styl
deleted file mode 100644 (file)
index c228c58..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-body
-  // 4
-  foo (--- 0) or 4
-  // 4
-  foo --- 0 or 4
-  // -5px
-  foo ---5px
-  // 2
-  foo (!!!5) or 2
-  foo !!!5 or 2
-
-
-body
-  // true
-  foo !(! 5)
-  foo !!5
-
-body
-  // 5
-  foo (! false) and (! false) and 5
-  foo ! false and ! false and 5
-
-body
-  // true
-  foo (!!5 == true) or (!!0 == false)
-  foo !!5 == true or !!0 == false
-  foo (!!5 == false) or (!!0 == false)
-  foo !!5 == false or !!0 == false
-  // 2
-  foo 5 < 10 and !!5 and 2
-
-body
-  // true
-  foo (!!true) and (!!true)
-  foo !!true and !!true
-
-body
-  test()
-    5 * 2 - 15 / 2
-  // 2.5
-  foo test()
-  foo (5 * 2) - (15 / 2)
-
-body
-  // true
-  foo not 5 < 10 ? 0 : 1
-  // true
-  foo !(5 < 10 ? 0 : 1)
-  // false
-  foo !(5 > 10 ? 0 : 1)
-  // wahoo
-  foo !! 1 ? wahoo : fail
-  // fail
-  foo !1 ? wahoo : fail
-
-body
-  foo = 'test'
-  bar = 'test'
-  // true
-  foo (foo is defined) and (bar is defined)
-  foo foo is defined and bar is defined
-
-body
-  // true
-  foo 5 > 4 is a 'boolean'
-
-  foo = type is a 'unit' ? type : 1
-  // 1
-  foo foo
-
-body
-  padding = false
-  margin = false
-
-  // true
-  foo !padding or !margin
-  foo not padding or margin
-  
-  // false
-  foo not padding or margin == !padding or !margin
-  // true
-  foo (not padding or margin) == !padding or !margin
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.styl b/node/node_modules/jade/support/stylus/test/cases/operators.styl
deleted file mode 100644 (file)
index b0fa171..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-body
-  // 5px
-  foo 0 || 5px
-
-  // 0px
-  foo 0px || 5px
-  
-  // 0px
-  foo 0px || 0px
-  
-  // false
-  foo 0 or false
-  
-  // true
-  foo 0 || 0 || true
-  
-  // 5px
-  foo 1px && 5px
-  
-  // 1px
-  foo 0px && 1px
-  
-  // 0
-  foo 1px && 0
-  
-  // false
-  foo 1px and false
-  
-  // 10
-  foo 5px && 5px && 10
-  
-  // #fff
-  foo #000 && #fff
-  
-  // 1
-  foo 8 && (4 && 1)
-  
-  // true
-  type = "color"
-  foo #fff is a type
-  foo #fff is a 'color'
-  
-  // false
-  foo 15px is a 'color'
-  // true
-  foo 15px is a 'unit'
-  
-  // true
-  foo 15px is a 'unit' and #fff is a 'color'
-  
-  // true
-  foo = 'bar'
-  
-  // true
-  bar = 'baz'
-  foo foo is defined and bar is defined
-  
-  // false
-  foo baz is defined
-  
-  // wahoo
-  foo bar is defined ? wahoo : nope
-  
-  // nope
-  foo rawr is defined ? yes : nope
-  
-  // "got 15px"
-  foo "got " + 15px
-
-  // 1
-  foo true and 1 or 5
-
-  // 5
-  foo !false and !false and 5
-  
-  // true
-  foo !!5 is true or !!0 is false
-  foo !!5 == false or !!0 == false
-  
-  // true
-  foo wahoo == wahoo
-  
-  // false
-  foo 0 == true
-  foo true == 0
-  foo #fff == undefined
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.subscript.css b/node/node_modules/jade/support/stylus/test/cases/operators.subscript.css
deleted file mode 100644 (file)
index 5d5eac5..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-body {
-  foo: true;
-  foo: 3 4 5;
-  foo: true;
-  foo: true;
-  foo: false;
-  foo: -5;
-}
-body {
-  foo: 1 2 3 4;
-  foo: 1;
-  foo: 2 3 4;
-  foo: 2;
-  foo: 3 4;
-  foo: 3;
-  foo: 4;
-  foo: ;
-}
-body {
-  foo: error;
-  foo: "message";
-}
-body {
-  foo: 5;
-  foo: 10;
-}
-body {
-  foo: 5;
-  foo: 10;
-}
-body {
-  foo: 1 2;
-  foo: 3 4;
-  foo: 4;
-}
-body {
-  foo: 100 200;
-  foo: 100;
-  foo: 200;
-  foo: 2;
-}
-body {
-  foo: 100 200;
-  foo: 100;
-  foo: 200;
-  foo: 2;
-}
-body {
-  foo: 100 200;
-  foo: 100;
-  foo: 200;
-  foo: 2;
-}
-body {
-  foo: 100 200;
-  foo: 100;
-  foo: 200;
-  foo: 2;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.subscript.range.css b/node/node_modules/jade/support/stylus/test/cases/operators.subscript.range.css
deleted file mode 100644 (file)
index e4c6b28..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-body {
-  foo: a b;
-  foo: a b c;
-  foo: d e f;
-  foo: c d e;
-}
-body {
-  foo: 1 2 3 4;
-}
-body {
-  foo: ;
-  foo: ;
-  foo: ;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.subscript.range.styl b/node/node_modules/jade/support/stylus/test/cases/operators.subscript.range.styl
deleted file mode 100644 (file)
index 913a64b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-body
-  vals = a b c d e f g
-  foo vals[0...2]
-  foo vals[0..2]
-  foo vals[3..5]
-  foo vals[2 3 4]
-
-body
-  vals = (1 2) (3 4)
-  foo vals[0..1]
-
-body
-  foo ()[]
-  foo ()[1]
-  foo ()[1..3]
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/operators.subscript.styl b/node/node_modules/jade/support/stylus/test/cases/operators.subscript.styl
deleted file mode 100644 (file)
index 5d69430..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-body
-  foo ()[0] == null
-  foo (1(2(3 4 5)))[1][1]
-  foo (1 2 3)['test'] == null
-  foo !(1 0)[1]
-  foo !(1 0)[0]
-  foo - - -(1 2 3 4 5)[4]
-
-body
-  foo (1 (2 (3 4)))
-  foo (1 (2 (3 4)))[0]
-  foo (1 (2 (3 4)))[1]
-  foo (1 (2 (3 4)))[1][0]
-  foo (1 (2 (3 4)))[1][1]
-  foo (1 (2 (3 4)))[1][1][0]
-  foo (1 (2 (3 4)))[1][1][1]
-  foo (1 (2 (3 4)))[1][1][3]
-
-body
-  foo (error 'message')[0]
-  foo (error 'message')[1]
-
-size(a, b)
-  return a b
-
-body
-  foo size(5, 10)[0]
-  foo size(5, 10)[1]
-
-size(a, b)
-  (a b)
-
-body
-  foo size(5, 10)[0]
-  foo size(5, 10)[1]
-
-size()
-  (1 2) (3 4)
-
-body
-  foo size()[0]
-  foo size()[1]
-  foo size()[1][1]
-
-image-size(path)
-  w = 100
-  h = 200
-  return w h
-
-body
-  size = image-size('test.png')
-  foo size
-  foo size[0]
-  foo size[1]
-  foo length(size)
-
-image-size(path)
-  100 200
-
-body
-  size = image-size('test.png')
-  foo size
-  foo size[0]
-  foo size[1]
-  foo length(size)
-
-size = 100 200
-
-body
-  foo size
-  foo size[0]
-  foo size[1]
-  foo length(size)
-
-size = (100 200)
-
-body
-  foo size
-  foo size[0]
-  foo size[1]
-  foo length(size)
diff --git a/node/node_modules/jade/support/stylus/test/cases/page.css b/node/node_modules/jade/support/stylus/test/cases/page.css
deleted file mode 100644 (file)
index 9adf972..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-@page {
-  margin: 2.5cm;
-}
-@page :left {
-  margin-left: 5cm;
-}
-@page :right {
-  margin-right: 5cm;
-}
-@page :first {
-  margin-top: 8cm;
-  background: white;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/page.styl b/node/node_modules/jade/support/stylus/test/cases/page.styl
deleted file mode 100644 (file)
index d088a29..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-@page
-  margin 2.5cm
-
-@page :left
-  margin-left 5cm
-
-@page :right
-  margin-right 5cm
-
-@page :first
-  margin-top 8cm
-  background white
diff --git a/node/node_modules/jade/support/stylus/test/cases/parent.css b/node/node_modules/jade/support/stylus/test/cases/parent.css
deleted file mode 100644 (file)
index ba03b37..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-.button {
-  padding: 5px;
-  -webkit-transition: opacity 1s ease-out;
-}
-.button:hover {
-  opacity: 2;
-}
-textarea,
-input {
-  color: #a7a7a7;
-}
-textarea:hover,
-input:hover {
-  color: #000;
-}
-.dim {
-  opacity: 0.2;
-}
-.dim:hover,
-.dim.show {
-  opacity: 1;
-}
-body #login {
-  -webkit-box-shadow: 1px 1px 3px #eee;
-  -moz-box-shadow: 1px 1px 3px #eee;
-  box-shadow: 1px 1px 3px #eee;
-}
-html.ie8 body #login,
-html.ie7 body #login foo,
-html.ie6 body #login {
-  border: solid 1px #eee;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/parent.styl b/node/node_modules/jade/support/stylus/test/cases/parent.styl
deleted file mode 100644 (file)
index 405c79c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-dim-on-hover()
-  -webkit-transition opacity 1s ease-out
-  &:hover
-    opacity 2
-
-.button
-  padding 5px
-  dim-on-hover()
-
-textarea
-input
-  color #A7A7A7
-  &:hover
-    color #000
-
-.dim
-  opacity .2
-  &:hover
-  &.show
-    opacity 1
-
-box-shadow()
-  -webkit-box-shadow arguments
-  -moz-box-shadow arguments
-  box-shadow arguments
-  html.ie8 &,
-  html.ie7 & foo,
-  html.ie6 &
-    border solid 1px arguments[length(arguments) - 1]
-
-body
-  #login
-    box-shadow 1px 1px 3px #eee
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/properties.colons.css b/node/node_modules/jade/support/stylus/test/cases/properties.colons.css
deleted file mode 100644 (file)
index beb90bb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-body {
-  margin: 5px;
-  padding: 5px;
-  foo: 5px;
-}
-body something {
-  here: whoop;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/properties.colons.styl b/node/node_modules/jade/support/stylus/test/cases/properties.colons.styl
deleted file mode 100644 (file)
index d932bc6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-mixin()
-  foo: 5px
-  something
-    here: whoop
-
-body
-  margin: 5px
-  padding: 5px
-  mixin()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/properties.css b/node/node_modules/jade/support/stylus/test/cases/properties.css
deleted file mode 100644 (file)
index 12e1ccb..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#wrapper {
-  padding: 5px;
-  white-space: nowrap;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/properties.one-line.css b/node/node_modules/jade/support/stylus/test/cases/properties.one-line.css
deleted file mode 100644 (file)
index f881297..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-body {
-  background: #00f;
-  width: 100px;
-  height: 50px;
-}
-body {
-  background: #00f;
-  width: 100px;
-  height: 50px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/properties.one-line.styl b/node/node_modules/jade/support/stylus/test/cases/properties.one-line.styl
deleted file mode 100644 (file)
index 834fd93..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-bg()
-  background: blue;
-
-body {
-  bg(); width: 100px;
-  height: 50px;
-}
-
-body
-  bg(); width 100px;
-  height 50px
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/properties.styl b/node/node_modules/jade/support/stylus/test/cases/properties.styl
deleted file mode 100644 (file)
index 944256f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-#wrapper
-  padding 5px
-  white-space nowrap
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.107.lookup-failure.css b/node/node_modules/jade/support/stylus/test/cases/regression.107.lookup-failure.css
deleted file mode 100644 (file)
index 1d81a68..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-button {
-  background: #e3e3e3;
-}
-button:hover {
-  background: #dbdbdb;
-}
-button:active {
-  background: #d6d6d6;
-}
-button nested really-nested with-even-more-nesting {
-  background: #e3e3e3;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.107.lookup-failure.styl b/node/node_modules/jade/support/stylus/test/cases/regression.107.lookup-failure.styl
deleted file mode 100644 (file)
index cd55bc8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-minimal-button(bg = #e3e3e3)
-  background bg
-  &:hover
-    background darken(bg, 3%)
-  &:active
-    background darken(bg, 5%)
-  nested
-    really-nested
-      with-even-more-nesting
-        background bg
-
-button
-  minimal-button()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.127.css b/node/node_modules/jade/support/stylus/test/cases/regression.127.css
deleted file mode 100644 (file)
index 3a27438..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  background: #c3210d;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.127.styl b/node/node_modules/jade/support/stylus/test/cases/regression.127.styl
deleted file mode 100644 (file)
index f0128c7..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body
-  background #c3210d
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.130.css b/node/node_modules/jade/support/stylus/test/cases/regression.130.css
deleted file mode 100644 (file)
index 42dfaa6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-body {
-  font: 13px / 1.231;
-}
-body {
-  font: 13px / 1.231;
-}
-body {
-  font: 13px / 1.231;
-}
-body {
-  font: 13px / 1.231;
-}
-body {
-  font: 13px / 1.231;
-  background: #fff;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.130.styl b/node/node_modules/jade/support/stylus/test/cases/regression.130.styl
deleted file mode 100644 (file)
index 0285947..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-body { font: 13px / 1.231; }
-body {font: 13px / 1.231;}
-body {font: 13px / 1.231}
-body {  font : 13px / 1.231  }
-body {  font : 13px / 1.231; background: white }
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.131.css b/node/node_modules/jade/support/stylus/test/cases/regression.131.css
deleted file mode 100644 (file)
index 4a7e264..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body {
-  font-weight: normal;
-}
-body {
-  color: #fff;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.131.styl b/node/node_modules/jade/support/stylus/test/cases/regression.131.styl
deleted file mode 100644 (file)
index feb1768..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-body { font-weight: normal; } /* foo */
-body { color: #fff; }   // foo
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.137.css b/node/node_modules/jade/support/stylus/test/cases/regression.137.css
deleted file mode 100644 (file)
index 01f1085..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#fea-ca {
-  padding: 5px;
-}
-#ffffff {
-  padding: 5px;
-  foo: #fea -ca;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.137.styl b/node/node_modules/jade/support/stylus/test/cases/regression.137.styl
deleted file mode 100644 (file)
index 5b7e560..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#fea-ca
-  padding 5px
-
-#ffffff
-  padding 5px
-  foo #fea-ca
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.139.css b/node/node_modules/jade/support/stylus/test/cases/regression.139.css
deleted file mode 100644 (file)
index 0101baf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  foo: bottom;
-  foo: right;
-  foo: bottom right;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.139.styl b/node/node_modules/jade/support/stylus/test/cases/regression.139.styl
deleted file mode 100644 (file)
index 12791e9..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-opposite-position(pos) {
-  return bottom if pos == top;
-  return top if pos == bottom;
-  return right if pos == left;
-  return left if pos == right;
-  error('Invalid position ' + pos)
-}
-opposite(positions) {
-  for pos in positions {
-    pos = opposite-position(pos);
-    ret = ret is defined ? ret pos : pos;
-  }
-}
-body {
-  foo: opposite(top);
-  foo: opposite(left);
-  foo: opposite(top left);
-}
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.142.css b/node/node_modules/jade/support/stylus/test/cases/regression.142.css
deleted file mode 100644 (file)
index b5a45ee..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-foo,
-bar,
-baz {
-  display: none;
-}
-foo,
-bar,
-baz {
-  display: none;
-}
-body :nth-child(2),
-body foo bar,
-body bar,
-body baz {
-  display: none;
-}
-body {
-  foo: bar;
-}
-body bar,
-body baz {
-  display: none;
-}
-body foo,
-body bar,
-body baz {
-  display: none;
-}
-body foo,
-body :nth-child(2),
-body bar {
-  display: none;
-}
-body {
-  foo: bar;
-}
-body {
-  foo: 3;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.142.styl b/node/node_modules/jade/support/stylus/test/cases/regression.142.styl
deleted file mode 100644 (file)
index f27c86d..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-foo, bar, baz
-  display none
-
-foo
-bar
-baz
-  display none
-
-body
-  :nth-child(2)
-  foo bar
-  bar
-  baz
-    display none
-
-body
-  foo bar
-  bar
-  baz
-    display none
-
-body
-  foo
-  bar
-  baz
-    display none
-
-body
-  foo
-  :nth-child(2)
-  bar
-    display none
-
-fn()
-  bar if true;
-
-something()
-  one
-  two
-  fn()
-
-body
-  foo something()
-
-something()
-  nums = 1 2 3
-  one
-  two
-  for n in nums
-    n
-
-body
-  foo something()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.146.css b/node/node_modules/jade/support/stylus/test/cases/regression.146.css
deleted file mode 100644 (file)
index b18dfbc..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-input[for=name] {
-  width: 200px;
-}
-body {
-  foo: 1;
-}
-body {
-  foo: 2;
-}
-body {
-  foo: 3;
-}
-body foo {
-  bar: 1;
-  bar: 2;
-  bar: 3;
-}
-#login foo,
-#login input[for=name] {
-  foo: bar;
-}
-#login foo input[for=name] {
-  bar: 1;
-}
-#login foo input[for=name] {
-  bar: 2;
-}
-#login foo input[for=name] {
-  bar: 3;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.146.styl b/node/node_modules/jade/support/stylus/test/cases/regression.146.styl
deleted file mode 100644 (file)
index b4ecdf6..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-input[for=name]
-  width 200px
-
-nums = 1 2 3
-for n in nums
-  body
-    foo n
-
-body
-  foo
-    for n in nums
-      bar n
-
-something()
-  nums = 1 2 3
-  foo
-  input[for=name]
-    foo bar
-
-#login
-  something()
-
-something()
-  nums = 1 2 3
-  foo
-    for n in nums
-      input[for=name]
-        bar n
-
-#login
-  something()
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.153.css b/node/node_modules/jade/support/stylus/test/cases/regression.153.css
deleted file mode 100644 (file)
index 1e76441..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#content {
-  width: 960px;
-}
-@media screen {
-  #content {
-    width: 640px;
-  }
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.153.styl b/node/node_modules/jade/support/stylus/test/cases/regression.153.styl
deleted file mode 100644 (file)
index 1691e85..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-cols(n)
-  width 160px * n
-
-#content
-  cols 6
-
-@media screen
-  #content
-    cols 4
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.154.css b/node/node_modules/jade/support/stylus/test/cases/regression.154.css
deleted file mode 100644 (file)
index ffa182a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-body {
-  foo: true;
-  foo: false;
-}
-body {
-  foo: false;
-  foo: true;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.154.styl b/node/node_modules/jade/support/stylus/test/cases/regression.154.styl
deleted file mode 100644 (file)
index 40587a5..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-
-light(color)
-  lightness(color) >= 50%
-
-dark(color)
-  lightness(color) < 50%
-
-body
-  foo light(white)
-  foo light(black)
-
-body
-  foo dark(white)
-  foo dark(black)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.156.css b/node/node_modules/jade/support/stylus/test/cases/regression.156.css
deleted file mode 100644 (file)
index b418755..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-body {
-  padding-right: 0;
-  float: right;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/regression.156.styl b/node/node_modules/jade/support/stylus/test/cases/regression.156.styl
deleted file mode 100644 (file)
index 81de24b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-body
-  mixin()
-
-body
-  padding-{opposite-position(left)} 0
-  float opposite-position(left)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/rule.charset.css b/node/node_modules/jade/support/stylus/test/cases/rule.charset.css
deleted file mode 100644 (file)
index b98ffb5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-@charset "utf-8"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/rule.charset.styl b/node/node_modules/jade/support/stylus/test/cases/rule.charset.styl
deleted file mode 100644 (file)
index 6cc76dd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-
-@charset "utf-8"
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/rulset.css b/node/node_modules/jade/support/stylus/test/cases/rulset.css
deleted file mode 100644 (file)
index be7adab..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-textarea,
-input {
-  border: 1px solid #eee;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/rulset.newline.css b/node/node_modules/jade/support/stylus/test/cases/rulset.newline.css
deleted file mode 100644 (file)
index 4249e51..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-textarea,
-input,
-.text {
-  border: 1px solid #eee;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/rulset.newline.styl b/node/node_modules/jade/support/stylus/test/cases/rulset.newline.styl
deleted file mode 100644 (file)
index b4b4a20..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-textarea
-input
-.text
-  border 1px solid #eee
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/rulset.styl b/node/node_modules/jade/support/stylus/test/cases/rulset.styl
deleted file mode 100644 (file)
index 6a2ad9a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-
-textarea, input
-  border 1px solid #eee
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/scope.complex.css b/node/node_modules/jade/support/stylus/test/cases/scope.complex.css
deleted file mode 100644 (file)
index e59bd0e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-body {
-  margin: 24px;
-  padding: 12px 5px 12px 5px;
-  font-size: 50px;
-}
-form input {
-  border: 3px solid #000;
-  margin: 24px;
-  padding: 2px 1px 2px 1px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/scope.complex.styl b/node/node_modules/jade/support/stylus/test/cases/scope.complex.styl
deleted file mode 100644 (file)
index c743dca..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-size = 12px
-size-large = size * 2
-
-pad(x, y = size)
-  margin size-large
-  padding y x y x
-
-body
-  size = 50px
-  pad(5px)
-  font-size size
-
-form input
-  border (size / 4) solid black
-  pad(1px, 2px)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/scope.css b/node/node_modules/jade/support/stylus/test/cases/scope.css
deleted file mode 100644 (file)
index 385c11c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
-  margin: 24px;
-  padding: 12px 5px 12px 5px;
-  font-size: 50px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/scope.nested.css b/node/node_modules/jade/support/stylus/test/cases/scope.nested.css
deleted file mode 100644 (file)
index 68e058a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-body {
-  font: 5;
-}
-body .large {
-  font: 10;
-}
-body .other {
-  font: 15;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/scope.nested.styl b/node/node_modules/jade/support/stylus/test/cases/scope.nested.styl
deleted file mode 100644 (file)
index 9f4f602..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-body
-  size = 5
-  font size
-  .large
-    large = size * 2
-    font large
-  .other
-    large ?= size * 3
-    font large
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/scope.styl b/node/node_modules/jade/support/stylus/test/cases/scope.styl
deleted file mode 100644 (file)
index 9ff2dd3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-size = 12px
-size-large = size * 2
-
-pad(x, y = size)
-  margin size-large
-  padding y x y x
-
-body
-  size = 50px
-  pad(5px)
-  font-size size
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.complex.css b/node/node_modules/jade/support/stylus/test/cases/selectors.complex.css
deleted file mode 100644 (file)
index 8bd00cb..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-body form input.hide,
-body foo bar,
-body .hidden,
-body:hover,
-body:focus {
-  display: none;
-}
-body form input,
-body .hidden {
-  display: none;
-}
-ul > li {
-  padding: 5px;
-  border: 1px solid #eee;
-}
-ul > li:first-child,
-ul > li:last-child {
-  border: none;
-}
-ul > li:first-child {
-  padding-top: 0;
-}
-ul > li:last-child {
-  padding-bottom: 0;
-}
-body form > input:nth-child(2) {
-  border: 1px solid #eee;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.complex.styl b/node/node_modules/jade/support/stylus/test/cases/selectors.complex.styl
deleted file mode 100644 (file)
index 397f5b5..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-body
-  form input.hide,
-  foo bar,
-  .hidden
-  &:hover
-  &:focus
-    display none
-
-body
-  form input, .hidden
-    display none
-
-ul
-  > li
-    padding 5px
-    border 1px solid #eee
-    &:first-child,
-    &:last-child
-      border none
-    &:first-child
-      padding-top 0
-    &:last-child
-      padding-bottom 0
-
-body
-  form > input:nth-child(2)
-    border 1px solid #eee
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.css b/node/node_modules/jade/support/stylus/test/cases/selectors.css
deleted file mode 100644 (file)
index a95cbdf..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-foo bar baz {
-  foo: bar;
-}
-foo > bar {
-  foo: bar;
-}
-input[type=text] {
-  foo: bar;
-}
-input[type="text"] {
-  foo: bar;
-}
-* {
-  foo: bar;
-}
-* .foo-bar {
-  foo: bar;
-}
-body > #container * {
-  foo: bar;
-}
-#foo > #bar + .baz {
-  foo: bar;
-}
-#foo>#bar {
-  foo: bar;
-}
-p + p ~ p {
-  foo: bar;
-}
-ul :odd {
-  foo: bar;
-}
-ul > li:last-child {
-  foo: bar;
-}
-ul > li:nth-child(2n) {
-  foo: bar;
-}
-*,
-p + p,
-ul > li {
-  foo: bar;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.nested.comma.css b/node/node_modules/jade/support/stylus/test/cases/selectors.nested.comma.css
deleted file mode 100644 (file)
index e2a4da8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#container .hide,
-#footer .hide {
-  display: none;
-}
-#foo .hide .stuff,
-#bar .hide .stuff,
-#baz .hide .stuff {
-  display: none;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.nested.comma.styl b/node/node_modules/jade/support/stylus/test/cases/selectors.nested.comma.styl
deleted file mode 100644 (file)
index 38a1ccf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#container, #footer
-  .hide
-    display none
-
-#foo, #bar, #baz
-  .hide
-    .stuff
-      display none
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.nested.css b/node/node_modules/jade/support/stylus/test/cases/selectors.nested.css
deleted file mode 100644 (file)
index 54f17f1..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-form .foo {
-  color: #000;
-}
-form .foo .bar {
-  padding: 5px;
-  color: #f00;
-}
-body .foo .bar {
-  display: none;
-}
-body .foo .baz,
-body .bar .baz,
-body .foo .sdf,
-body .bar .sdf {
-  display: none;
-}
-.foo .baz,
-.bar .baz,
-.foo .raz,
-.bar .raz {
-  something: "else";
-}
-.foo .baz,
-.bar .baz,
-.foo .raz,
-.bar .raz {
-  background: #f00;
-}
-.foo .baz .ASDF,
-.bar .baz .ASDF,
-.foo .raz .ASDF,
-.bar .raz .ASDF {
-  background: #fff;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.nested.styl b/node/node_modules/jade/support/stylus/test/cases/selectors.nested.styl
deleted file mode 100644 (file)
index dbe2170..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-
-form
-  .foo
-    color black
-    .bar
-      padding 5px
-      color red
-
-body
-  .foo
-    .bar
-      display none
-
-body
-  .foo
-  .bar
-    .baz
-    .sdf
-      display none
-
-.foo
-.bar
-  .baz
-  .raz
-    something 'else'
-
-.foo
-.bar
-  .baz
-  .raz
-    background red
-    .ASDF
-      background white
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.pseudo.css b/node/node_modules/jade/support/stylus/test/cases/selectors.pseudo.css
deleted file mode 100644 (file)
index d5ef504..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-ul td:nth-of-type(2),
-ul td:nth-of-type(3) {
-  background: #000;
-}
-table td:nth-child(2),
-table td:nth-child(3),
-table td:nth-child(4),
-table td:nth-child(5),
-table td::first-letter {
-  background: #000;
-}
-table td:nth-child(2) li:first-child,
-table td:nth-child(3) li:first-child,
-table td:nth-child(4) li:first-child,
-table td:nth-child(5) li:first-child,
-table td::first-letter li:first-child,
-table td:nth-child(2) li:last-child,
-table td:nth-child(3) li:last-child,
-table td:nth-child(4) li:last-child,
-table td:nth-child(5) li:last-child,
-table td::first-letter li:last-child {
-  background: #fff;
-}
-table :nth-child(2),
-table :nth-child(3) {
-  background: #000;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.pseudo.styl b/node/node_modules/jade/support/stylus/test/cases/selectors.pseudo.styl
deleted file mode 100644 (file)
index e235a18..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-
-mixin()
-  td:nth-of-type(2)
-  td:nth-of-type(3)
-    background black
-
-ul
-  mixin()
-
-table
-  td:nth-child(2)
-  td:nth-child(3)
-  td:nth-child(4)
-  td:nth-child(5)
-  td::first-letter
-    background black
-    li:first-child
-    li:last-child
-      background white
-
-table
-  :nth-child(2)
-  :nth-child(3)
-    background black
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/selectors.styl b/node/node_modules/jade/support/stylus/test/cases/selectors.styl
deleted file mode 100644 (file)
index f3a5b32..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-
-foo bar baz
-  foo bar
-
-foo > bar
-  foo bar
-
-input[type=text]
-  foo bar
-
-input[type="text"]
-  foo bar
-
-*
-  foo bar
-
-* .foo-bar
-  foo bar
-
-body > #container *
-  foo bar
-
-#foo > #bar + .baz
-  foo bar
-#foo>#bar
-  foo bar
-
-p + p ~ p
-  foo bar
-
-ul :odd
-  foo bar
-
-ul > li:last-child
-  foo bar
-
-ul > li:nth-child(2n)
-  foo bar
-
-*, p + p, ul > li
-  foo bar
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/self-assignment.css b/node/node_modules/jade/support/stylus/test/cases/self-assignment.css
deleted file mode 100644 (file)
index deaf803..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  background: #fff;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/self-assignment.styl b/node/node_modules/jade/support/stylus/test/cases/self-assignment.styl
deleted file mode 100644 (file)
index 86ed143..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-color = white
-color = color is defined ? color : black
-body
-  background color
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/vargs.call.css b/node/node_modules/jade/support/stylus/test/cases/vargs.call.css
deleted file mode 100644 (file)
index e9f521e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-body {
-  padding: 5px;
-  padding: 5px 10px;
-}
-body {
-  padding: 5px ;
-  padding: 5px 10px;
-}
-body {
-  padding: 5px;
-  padding: 5px 10px;
-  padding: 5px 10px 0 2px;
-}
-body {
-  test-y: 1px;
-  test-y: 1px;
-  padding: 2px 3px;
-}
-body {
-  test-y: 1px;
-  test-x: ;
-  test-y: 1px;
-  test-x: 2px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/vargs.call.styl b/node/node_modules/jade/support/stylus/test/cases/vargs.call.styl
deleted file mode 100644 (file)
index bd62e64..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-
-padding(n)
-  padding n
-
-body
-  padding(5px)
-  padding(5px 10px)
-
-padding(y, x = null)
-  padding y x
-
-body
-  padding(5px)
-  padding(5px, 10px)
-
-padding(args...)
-  padding args
-
-body
-  padding(5px)
-  padding(5px, 10px)
-  padding(5px, 10px, 0 2px)
-
-padding(y, rest...)
-  test-y y
-  if rest
-    padding rest
-
-body
-  padding(1px)
-  padding(1px, 2px, 3px)
-
-padding(args...)
-  if args
-    test-y args[0]
-    test-x args[1]
-
-body
-  padding(1px)
-  padding(1px, 2px)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/vargs.css b/node/node_modules/jade/support/stylus/test/cases/vargs.css
deleted file mode 100644 (file)
index 7db9f11..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-body {
-  padding: 5px;
-  padding: 5px;
-}
-body {
-  padding: 5px ;
-  padding: 5px 10px;
-}
-body {
-  padding: 5px;
-  padding: 5px 10px;
-  padding: 5px 10px 0 2px;
-}
-body {
-  test-y: 1px;
-  test-y: 1px;
-  padding: 2px 3px;
-}
-body {
-  test-y: 1px;
-  test-x: ;
-  test-y: 1px;
-  test-x: 2px;
-}
-body {
-  pad: 1;
-  pad: 2;
-  pad: 3 4 5;
-  len: 3;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/vargs.styl b/node/node_modules/jade/support/stylus/test/cases/vargs.styl
deleted file mode 100644 (file)
index 297b2b8..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-
-padding(n)
-  padding n
-
-body
-  padding 5px
-  padding 5px 10px
-
-padding(y, x = null)
-  padding y x
-
-body
-  padding 5px
-  padding 5px 10px
-
-padding(args...)
-  padding args
-
-body
-  padding 5px
-  padding 5px 10px
-  padding 5px 10px 0 2px
-
-padding(y, rest...)
-  test-y y
-  if rest
-    padding rest
-
-body
-  padding 1px
-  padding 1px 2px 3px
-
-padding(args...)
-  if args
-    test-y args[0]
-    test-x args[1]
-
-body
-  padding 1px
-  padding 1px 2px
-
-padding(args...)
-  pad args[0]
-  pad args[1]
-  pad args[2]
-  len length(args)
-
-body
-  padding 1 2 (3 4 5)
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/variable.css b/node/node_modules/jade/support/stylus/test/cases/variable.css
deleted file mode 100644 (file)
index 1ff59e5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-body {
-  font: 12px;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/variable.styl b/node/node_modules/jade/support/stylus/test/cases/variable.styl
deleted file mode 100644 (file)
index 7b7c990..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-size = 12px
-
-body
-  font size
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/variables.css b/node/node_modules/jade/support/stylus/test/cases/variables.css
deleted file mode 100644 (file)
index 45f21d7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-body {
-  color: 204;
-}
-body {
-  font: 14px "Lucida Grande", Arial, sans-serif;
-  padding: 5px;
-  margin: 5px;
-}
-a {
-  font: 11px Impact, "Lucida Grande", Arial, sans-serif, serif;
-  border: 1px solid #fff;
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/cases/variables.styl b/node/node_modules/jade/support/stylus/test/cases/variables.styl
deleted file mode 100644 (file)
index faf4ced..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-size = 14px
-font-family = 'Lucida Grande', Arial, sans-serif
-$type = solid
-blue = #00c
-
-body
-  color blue(blue)
-
-body
-  font size font-family
-  padding pad = 5px
-  margin pad
-
-a
-  font 11px Impact, font-family, serif
-  border 1px $type #fff
\ No newline at end of file
diff --git a/node/node_modules/jade/support/stylus/test/images/gif b/node/node_modules/jade/support/stylus/test/images/gif
deleted file mode 100644 (file)
index b3989fc..0000000
Binary files a/node/node_modules/jade/support/stylus/test/images/gif and /dev/null differ
diff --git a/node/node_modules/jade/support/stylus/test/images/squirrel.jpeg b/node/node_modules/jade/support/stylus/test/images/squirrel.jpeg
deleted file mode 100644 (file)
index 030ce1a..0000000
Binary files a/node/node_modules/jade/support/stylus/test/images/squirrel.jpeg and /dev/null differ
diff --git a/node/node_modules/jade/support/stylus/test/images/tux.png b/node/node_modules/jade/support/stylus/test/images/tux.png
deleted file mode 100644 (file)
index df25ec4..0000000
Binary files a/node/node_modules/jade/support/stylus/test/images/tux.png and /dev/null differ
diff --git a/node/node_modules/jade/support/stylus/test/run.js b/node/node_modules/jade/support/stylus/test/run.js
deleted file mode 100644 (file)
index f7b76cd..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var stylus = require('../')
-  , should = require('../support/should')
-  , basename = require('path').basename
-  , fs = require('fs');
-
-/**
- * Test count.
- */
-
-var count = 0;
-
-/**
- * Tests pending.
- */
-
-var pending = 0;
-
-/**
- * Test the given `test`.
- *
- * @param {String} test
- */
-
-function test(test) {
-  var base = __dirname + '/cases/' + test
-    , path =  base + '.styl'
-    , csspath = base + '.css';
-  fs.readFile(path, 'utf8', function(err, str){
-    if (err) throw err;
-    var paths = [__dirname + '/images', __dirname + '/cases/import.basic'];
-    var options = { filename: path, paths: paths };
-    if (~test.indexOf('compress')) options.compress = true;
-    stylus.render(str, options, function(err, actual){
-      if (err) throw err;
-      fs.readFile(csspath, 'utf8', function(err, expected){
-        if (err) throw err;
-        expected += '\n';
-        if (actual == expected) {
-          --pending || done();
-        } else {
-          var msg = '"' + basename(path, '.in') + '" failed\n\n'
-            + '\033[33mexpected:\033[0m \n' + expected + '\n\n'
-            + '\033[33mactual:\033[0m \n' + actual + '\n';
-          throw new Error(msg);
-        }
-      });
-    });
-  });
-  return test;
-};
-
-/**
- * Auto-load and run tests.
- */
-
-fs.readdir(__dirname + '/cases', function(err, files){
-  if (err) throw err;
-  files.forEach(function(file){
-    if (/\.styl$/.test(file)) {
-      ++pending;
-      ++count;
-      test(basename(file, '.styl'));
-    }
-  });
-});
-
-/**
- * Done!!!
- */
-
-function done() {
-  console.log(
-      '\n  \033[90mcompleted\033[0m'
-    + ' \033[32m%d\033[0m'
-    + ' \033[90mtests\033[0m\n', count);
-}
\ No newline at end of file
diff --git a/node/node_modules/jade/test/filters.test.js b/node/node_modules/jade/test/filters.test.js
deleted file mode 100644 (file)
index 1d8ffac..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('../')
-  , Compiler = jade.Compiler
-  , nodes = jade.nodes;
-
-// Shortcut
-
-var render = function(str, options){
-  var fn = jade.compile(str, options);
-  return fn(options);
-};
-
-jade.filters.conditionals = function(block, compiler){
-    return new Visitor(block).compile();
-};
-
-function Visitor(node) {
-    this.node = node;
-}
-
-Visitor.prototype.__proto__ = Compiler.prototype;
-
-Visitor.prototype.visit = function(node){
-    if (node.name != 'or') this.line(node);
-    this.visitNode(node);
-};
-
-Visitor.prototype.visitTag = function(node){
-  switch (node.name) {
-    case 'or':
-      var block = node.block;
-      node = new nodes.Code('else');
-      node.block = block;
-      node.instrumentLineNumber = false;
-      this.visit(node);
-      break;
-    default:
-      Compiler.prototype.visitTag.call(this, node);
-  }
-};
-
-module.exports = {
-  'test :cdata filter': function(assert){
-    assert.equal('<![CDATA[\nfoo\n]]>', render(':cdata\n  foo'));
-    assert.equal('<![CDATA[\nfoo\nbar\n]]>', render(':cdata\n  foo\n  bar'));
-    assert.equal('<![CDATA[\nfoo\nbar\n]]><p>something else</p>', render(':cdata\n  foo\n  bar\np something else'));
-  },
-  
-  'test :markdown filter': function(assert){
-      assert.equal(
-          '<h1>foo</h1>\n\n<ul><li>bar</li><li>baz</li></ul>',
-          render(':markdown\n  #foo\n  - bar\n  - baz\n'))
-  },
-  
-  'test :stylus filter': function(assert){
-      assert.equal(
-          '<style>body {\n  color: #c00;\n}\n</style>',
-          render(':stylus\n  body\n    color #c00'));
-  },
-  
-  'test :stylus filter with options': function(assert){
-      assert.equal(
-          '<style>body{color:#c00}\n</style>',
-          render(':stylus(compress=true)\n  body\n    color #c00'));
-  },
-  
-  'test :less filter': function(assert){
-      assert.equal(
-          '<style>.class {\n  width: 20px;\n}\n</style>',
-          render(':less\n  .class { width: 10px * 2 }\n'));
-  },
-  
-  'test :coffeescript filter': function(assert){
-      var coffee, js;
-      coffee = [
-          ':coffeescript',
-          '  square = (x) ->',
-          '    x * x'
-      ].join('\n');
-      js = [
-          '<script type="text/javascript">',
-          '(function() {',
-          '  var square;',
-          '  square = function(x) {',
-          '    return x * x;',
-          '  };',
-          '}).call(this);',
-          '</script>'
-      ].join('\n');
-  
-      assert.equal(js, render(coffee));
-  
-      coffee = [
-          ':coffeescript',
-          '  $ ->',
-          '    $("#flash").fadeIn ->',
-          '      console.log("first line")',
-          '      console.log("second line")'
-      ].join('\n');
-      js = [
-          '<script type="text/javascript">',
-          '(function() {',
-          '  $(function() {',
-          '    return $("#flash").fadeIn(function() {',
-          '      console.log("first line");',
-          '      return console.log("second line");',
-          '    });',
-          '  });',
-          '}).call(this);',
-          '</script>'
-      ].join('\n');
-  
-      assert.equal(js, render(coffee));
-  },
-  
-  'test parse tree': function(assert){
-      var str = [
-          'conditionals:',
-          '  if false',
-          '    | oh noes',
-          '  or',
-          '    if null == false',
-          '      p doh',
-          '    or',
-          '      p amazing!'
-      ].join('\n');
-  
-      var html = [
-          '<p>amazing!</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  },
-  
-  'test filter attrs': function(assert){
-     jade.filters.testing = function(str, attrs){
-       return str + ' ' + attrs.stuff;
-     };
-  
-     var str = [
-         ':testing(stuff)',
-         '  foo bar',
-     ].join('\n');
-  
-     assert.equal('foo bar true', render(str));
-  } 
-};
\ No newline at end of file
diff --git a/node/node_modules/jade/test/fixtures/invalid.jade b/node/node_modules/jade/test/fixtures/invalid.jade
deleted file mode 100644 (file)
index d498bbb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ul
-  li= foo
-  li bar
\ No newline at end of file
diff --git a/node/node_modules/jade/test/fixtures/layout.jade b/node/node_modules/jade/test/fixtures/layout.jade
deleted file mode 100644 (file)
index a81624a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-html
-  body
-    h1 Jade
\ No newline at end of file
diff --git a/node/node_modules/jade/test/jade.test.js b/node/node_modules/jade/test/jade.test.js
deleted file mode 100644 (file)
index 89f1ce3..0000000
+++ /dev/null
@@ -1,920 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var jade = require('../');
-
-// Shortcut
-
-var render = function(str, options){
-  var fn = jade.compile(str, options);
-  return fn(options);
-};
-
-module.exports = {
-  'test .version': function(assert){
-      assert.ok(/^\d+\.\d+\.\d+$/.test(jade.version), "Invalid version format");
-  },
-  
-  'test exports': function(assert){
-      assert.equal('object', typeof jade.selfClosing, 'exports.selfClosing missing');
-      assert.equal('object', typeof jade.doctypes, 'exports.doctypes missing');
-      assert.equal('object', typeof jade.filters, 'exports.filters missing');
-      assert.equal('object', typeof jade.utils, 'exports.utils missing');
-      assert.equal('function', typeof jade.Compiler, 'exports.Compiler missing');
-  },
-  
-  'test doctypes': function(assert){
-      assert.equal('<?xml version="1.0" encoding="utf-8" ?>', render('!!! xml'));
-      assert.equal('<!DOCTYPE html>', render('doctype html'));
-      assert.equal('<!DOCTYPE html>', render('doctype HTML'));
-      assert.equal('<!DOCTYPE html>', render('!!! 5'));
-      assert.equal('<!DOCTYPE html>', render('!!!', { doctype:'html' }));
-      assert.equal('<!DOCTYPE html>', render('!!! html', { doctype:'xml' }));
-      assert.equal('<html></html>', render('html'));
-      assert.equal('<!DOCTYPE html><html></html>', render('html', { doctype:'html' }));
-  },
-  
-  'test Buffers': function(assert){
-      assert.equal('<p>foo</p>', render(new Buffer('p foo')));
-  },
-  
-  'test line endings': function(assert){
-      var str = [
-          'p',
-          'div',
-          'img'
-      ].join('\r\n');
-  
-      var html = [
-          '<p></p>',
-          '<div></div>',
-          '<img/>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      var str = [
-          'p',
-          'div',
-          'img'
-      ].join('\r');
-          
-      var html = [
-          '<p></p>',
-          '<div></div>',
-          '<img/>'
-      ].join('');
-          
-      assert.equal(html, render(str));
-      
-      var str = [
-          'p',
-          'div',
-          'img'
-      ].join('\r\n');
-          
-      var html = [
-          '<p></p>',
-          '<div></div>',
-          '<img>'
-      ].join('');
-          
-      assert.equal(html, render(str, { doctype:'html' }));
-  },
-  
-  'test single quotes': function(assert){
-      assert.equal("<p>'foo'</p>", render("p 'foo'"));
-      assert.equal("<p>'foo'\n</p>", render("p\n  | 'foo'"));
-      assert.equal('<a href="/foo"></a>', render("- var path = 'foo';\na(href='/' + path)"));
-  },
-  
-  'test block-expansion': function(assert){
-      assert.equal("<li><a>foo</a></li><li><a>bar</a></li><li><a>baz</a></li>", render("li: a foo\nli: a bar\nli: a baz"));
-      assert.equal("<li class=\"first\"><a>foo</a></li><li><a>bar</a></li><li><a>baz</a></li>", render("li.first: a foo\nli: a bar\nli: a baz"));
-  },
-  
-  'test tags': function(assert){
-      var str = [
-          'p',
-          'div',
-          'img'
-      ].join('\n');
-  
-      var html = [
-          '<p></p>',
-          '<div></div>',
-          '<img/>'
-      ].join('');
-  
-      assert.equal(html, render(str), 'Test basic tags');
-      assert.equal('<fb:foo-bar></fb:foo-bar>', render('fb:foo-bar'), 'Test hyphens');
-      assert.equal('<div class="something"></div>', render('div.something'), 'Test classes');
-      assert.equal('<div id="something"></div>', render('div#something'), 'Test ids');
-      assert.equal('<div class="something"></div>', render('.something'), 'Test stand-alone classes');
-      assert.equal('<div id="something"></div>', render('#something'), 'Test stand-alone ids');
-      assert.equal('<div id="foo" class="bar"></div>', render('#foo.bar'));
-      assert.equal('<div id="foo" class="bar"></div>', render('.bar#foo'));
-      assert.equal('<div id="foo" class="bar"></div>', render('div#foo(class="bar")'));
-      assert.equal('<div id="foo" class="bar"></div>', render('div(class="bar")#foo'));
-      assert.equal('<div id="bar" class="foo"></div>', render('div(id="bar").foo'));
-      assert.equal('<div class="foo bar baz"></div>', render('div.foo.bar.baz'));
-      assert.equal('<div class="foo bar baz"></div>', render('div(class="foo").bar.baz'));
-      assert.equal('<div class="foo bar baz"></div>', render('div.foo(class="bar").baz'));
-      assert.equal('<div class="foo bar baz"></div>', render('div.foo.bar(class="baz")'));
-      assert.equal('<div class="a-b2"></div>', render('div.a-b2'));
-      assert.equal('<div class="a_b2"></div>', render('div.a_b2'));
-      assert.equal('<fb:user></fb:user>', render('fb:user'));
-      assert.equal('<fb:user:role></fb:user:role>', render('fb:user:role'));
-      assert.equal('<colgroup><col class="test"/></colgroup>', render('colgroup\n  col.test'));
-  },
-  
-  'test nested tags': function(assert){
-      var str = [
-          'ul',
-          '  li a',
-          '  li b',
-          '  li',
-          '    ul',
-          '      li c',
-          '      li d',
-          '  li e',
-      ].join('\n');
-  
-      var html = [
-          '<ul>',
-          '<li>a</li>',
-          '<li>b</li>',
-          '<li><ul><li>c</li><li>d</li></ul></li>',
-          '<li>e</li>',
-          '</ul>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      var str = [
-          'a(href="#")',
-          '  | foo ',
-          '  | bar ',
-          '  | baz'
-      ].join('\n');
-      
-      assert.equal('<a href="#">foo \nbar \nbaz\n</a>', render(str));
-      
-      var str = [
-          'ul',
-          '  li one',
-          '  ul',
-          '    | two',
-          '    li three'
-      ].join('\n');
-      
-      var html = [
-          '<ul>',
-          '<li>one</li>',
-          '<ul>two\n',
-          '<li>three</li>',
-          '</ul>',
-          '</ul>'
-      ].join('');
-      
-      assert.equal(html, render(str));
-  },
-  
-  'test variable length newlines': function(assert){
-      var str = [
-          'ul',
-          '  li a',
-          '  ',
-          '  li b',
-          ' ',
-          '         ',
-          '  li',
-          '    ul',
-          '      li c',
-          '',
-          '      li d',
-          '  li e',
-      ].join('\n');
-  
-      var html = [
-          '<ul>',
-          '<li>a</li>',
-          '<li>b</li>',
-          '<li><ul><li>c</li><li>d</li></ul></li>',
-          '<li>e</li>',
-          '</ul>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  },
-  
-  'test tab conversion': function(assert){
-      var str = [
-          'ul',
-          '\tli a',
-          '\t',
-          '\tli b',
-          '\t\t',
-          '\t\t\t\t\t\t',
-          '\tli',
-          '\t\tul',
-          '\t\t\tli c',
-          '',
-          '\t\t\tli d',
-          '\tli e',
-      ].join('\n');
-  
-      var html = [
-          '<ul>',
-          '<li>a</li>',
-          '<li>b</li>',
-          '<li><ul><li>c</li><li>d</li></ul></li>',
-          '<li>e</li>',
-          '</ul>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  },
-  
-  'test newlines': function(assert){
-      var str = [
-          'ul',
-          '  li a',
-          '  ',
-          '    ',
-          '',
-          ' ',
-          '  li b',
-          '  li',
-          '    ',
-          '        ',
-          ' ',
-          '    ul',
-          '      ',
-          '      li c',
-          '      li d',
-          '  li e',
-      ].join('\n');
-  
-      var html = [
-          '<ul>',
-          '<li>a</li>',
-          '<li>b</li>',
-          '<li><ul><li>c</li><li>d</li></ul></li>',
-          '<li>e</li>',
-          '</ul>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      var str = [
-          'html',
-          ' ',
-          '  head',
-          '    != "test"',
-          '  ',
-          '  ',
-          '  ',
-          '  body'
-      ].join('\n');
-  
-      var html = [
-          '<html>',
-          '<head>',
-          'test',
-          '</head>',
-          '<body></body>',
-          '</html>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      assert.equal('<foo></foo>something<bar></bar>', render('foo\n= "something"\nbar'));
-      assert.equal('<foo></foo>something<bar></bar>else', render('foo\n= "something"\nbar\n= "else"'));
-  },
-  
-  'test text': function(assert){
-      assert.equal('foo\nbar\nbaz\n', render('| foo\n| bar\n| baz'));
-      assert.equal('foo \nbar \nbaz\n', render('| foo \n| bar \n| baz'));
-      assert.equal('(hey)\n', render('| (hey)'));
-      assert.equal('some random text\n', render('| some random text'));
-      assert.equal('  foo\n', render('|   foo'));
-      assert.equal('  foo  \n', render('|   foo  '));
-      assert.equal('  foo  \n bar    \n', render('|   foo  \n|  bar    '));
-  },
-  
-  'test pipe-less text': function(assert){
-    assert.equal('<pre><code>foo\n\nbar\n</code></pre>', render('pre\n  code\n    foo\n\n    bar'));
-    assert.equal('<p>foo\n\nbar\n</p>', render('p.\n  foo\n\n  bar'));
-    assert.equal('<p>foo\n\n\n\nbar\n</p>', render('p.\n  foo\n\n\n\n  bar'));
-    assert.equal('<p>foo\n  bar\nfoo\n</p>', render('p.\n  foo\n    bar\n  foo'));
-    assert.equal('<script>s.parentNode.insertBefore(g,s)\n</script>', render('script\n  s.parentNode.insertBefore(g,s)\n'));
-    assert.equal('<script>s.parentNode.insertBefore(g,s)\n</script>', render('script\n  s.parentNode.insertBefore(g,s)'));
-  },
-  
-  'test tag text': function(assert){
-      assert.equal('<p>some random text</p>', render('p some random text'));
-      assert.equal('<p>click\n<a>Google</a>.\n</p>', render('p\n  | click\n  a Google\n  | .'));
-      assert.equal('<p>(parens)</p>', render('p (parens)'));
-      assert.equal('<p foo="bar">(parens)</p>', render('p(foo="bar") (parens)'));
-      assert.equal('<option value="">-- (optional) foo --</option>', render('option(value="") -- (optional) foo --'));
-  },
-  
-  'test tag text block': function(assert){
-      assert.equal('<p>foo \nbar \nbaz\n</p>', render('p\n  | foo \n  | bar \n  | baz'));
-      assert.equal('<label>Password:\n<input/></label>', render('label\n  | Password:\n  input'));
-      assert.equal('<label>Password:<input/></label>', render('label Password:\n  input'));
-  },
-  
-  'test tag text interpolation': function(assert){
-      assert.equal('yo, jade is cool\n', render('| yo, #{name} is cool\n', { name: 'jade' }));
-      assert.equal('<p>yo, jade is cool</p>', render('p yo, #{name} is cool', { name: 'jade' }));
-      assert.equal('yo, jade is cool\n', render('| yo, #{name || "jade"} is cool', { name: null }));
-      assert.equal('yo, \'jade\' is cool\n', render('| yo, #{name || "\'jade\'"} is cool', { name: null }));
-      assert.equal('foo &lt;script&gt; bar\n', render('| foo #{code} bar', { code: '<script>' }));
-      assert.equal('foo <script> bar\n', render('| foo !{code} bar', { code: '<script>' }));
-  },
-  
-  'test flexible indentation': function(assert){
-      assert.equal('<html><body><h1>Wahoo</h1><p>test</p></body></html>', render('html\n  body\n   h1 Wahoo\n   p test'));
-  },
-  
-  'test interpolation values': function(assert){
-      assert.equal('<p>Users: 15</p>', render('p Users: #{15}'));
-      assert.equal('<p>Users: </p>', render('p Users: #{null}'));
-      assert.equal('<p>Users: </p>', render('p Users: #{undefined}'));
-      assert.equal('<p>Users: none</p>', render('p Users: #{undefined || "none"}'));
-      assert.equal('<p>Users: 0</p>', render('p Users: #{0}'));
-      assert.equal('<p>Users: false</p>', render('p Users: #{false}'));
-  },
-  
-  'test html 5 mode': function(assert){
-      assert.equal('<!DOCTYPE html><input type="checkbox" checked>', render('!!! 5\ninput(type="checkbox", checked)'));
-      assert.equal('<!DOCTYPE html><input type="checkbox" checked>', render('!!! 5\ninput(type="checkbox", checked=true)'));
-      assert.equal('<!DOCTYPE html><input type="checkbox">', render('!!! 5\ninput(type="checkbox", checked= false)'));
-  },
-  
-  'test multi-line attrs': function(assert){
-      assert.equal('<a foo="bar" bar="baz" checked="checked">foo</a>', render('a(foo="bar"\n  bar="baz"\n  checked) foo'));
-      assert.equal('<a foo="bar" bar="baz" checked="checked">foo</a>', render('a(foo="bar"\nbar="baz"\nchecked) foo'));
-      assert.equal('<a foo="bar" bar="baz" checked="checked">foo</a>', render('a(foo="bar"\n,bar="baz"\n,checked) foo'));
-      assert.equal('<a foo="bar" bar="baz" checked="checked">foo</a>', render('a(foo="bar",\nbar="baz",\nchecked) foo'));
-  },
-  
-  'test attrs': function(assert){
-      assert.equal('<img src="&lt;script&gt;"/>', render('img(src="<script>")'), 'Test attr escaping');
-      
-      assert.equal('<a data-attr="bar"></a>', render('a(data-attr="bar")'));
-      assert.equal('<a data-attr="bar" data-attr-2="baz"></a>', render('a(data-attr="bar", data-attr-2="baz")'));
-      
-      assert.equal('<a title="foo,bar"></a>', render('a(title= "foo,bar")'));
-      assert.equal('<a title="foo,bar" href="#"></a>', render('a(title= "foo,bar", href="#")'));
-      
-      assert.equal('<p class="foo"></p>', render("p(class='foo')"), 'Test single quoted attrs');
-      assert.equal('<input type="checkbox" checked="checked"/>', render('input( type="checkbox", checked )'));
-      assert.equal('<input type="checkbox" checked="checked"/>', render('input( type="checkbox", checked = true )'));
-      assert.equal('<input type="checkbox"/>', render('input(type="checkbox", checked= false)'));
-      assert.equal('<input type="checkbox"/>', render('input(type="checkbox", checked= null)'));
-      assert.equal('<input type="checkbox"/>', render('input(type="checkbox", checked= undefined)'));
-      
-      assert.equal('<img src="/foo.png"/>', render('img(src="/foo.png")'), 'Test attr =');
-      assert.equal('<img src="/foo.png"/>', render('img(src  =  "/foo.png")'), 'Test attr = whitespace');
-      assert.equal('<img src="/foo.png"/>', render('img(src="/foo.png")'), 'Test attr :');
-      assert.equal('<img src="/foo.png"/>', render('img(src  =  "/foo.png")'), 'Test attr : whitespace');
-      
-      assert.equal('<img src="/foo.png" alt="just some foo"/>', render('img(src="/foo.png", alt="just some foo")'));
-      assert.equal('<img src="/foo.png" alt="just some foo"/>', render('img(src = "/foo.png", alt = "just some foo")'));
-      
-      assert.equal('<p class="foo,bar,baz"></p>', render('p(class="foo,bar,baz")'));
-      assert.equal('<a href="http://google.com" title="Some : weird = title"></a>', render('a(href= "http://google.com", title= "Some : weird = title")'));
-      assert.equal('<label for="name"></label>', render('label(for="name")'));
-      assert.equal('<meta name="viewport" content="width=device-width"/>', render("meta(name= 'viewport', content='width=device-width')"), 'Test attrs that contain attr separators');
-      assert.equal('<div style="color= white"></div>', render("div(style='color= white')"));
-      assert.equal('<div style="color: white"></div>', render("div(style='color: white')"));
-      assert.equal('<p class="foo"></p>', render("p('class'='foo')"), 'Test keys with single quotes');
-      assert.equal('<p class="foo"></p>', render("p(\"class\"= 'foo')"), 'Test keys with double quotes');
-  
-      assert.equal('<p data-lang="en"></p>', render('p(data-lang = "en")'));
-      assert.equal('<p data-dynamic="true"></p>', render('p("data-dynamic"= "true")'));
-      assert.equal('<p data-dynamic="true" class="name"></p>', render('p("class"= "name", "data-dynamic"= "true")'));
-      assert.equal('<p data-dynamic="true"></p>', render('p(\'data-dynamic\'= "true")'));
-      assert.equal('<p data-dynamic="true" class="name"></p>', render('p(\'class\'= "name", \'data-dynamic\'= "true")'));
-      assert.equal('<p data-dynamic="true" yay="yay" class="name"></p>', render('p(\'class\'= "name", \'data-dynamic\'= "true", yay)'));
-  
-      assert.equal('<input checked="checked" type="checkbox"/>', render('input(checked, type="checkbox")'));
-  
-      assert.equal('<a data-foo="{ foo: \'bar\', bar= \'baz\' }"></a>', render('a(data-foo  = "{ foo: \'bar\', bar= \'baz\' }")'));
-  
-      assert.equal('<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>', render('meta(http-equiv="X-UA-Compatible", content="IE=edge,chrome=1")'));
-  
-      assert.equal('<div style="background: url(/images/test.png)">Foo</div>', render("div(style= 'background: url(/images/test.png)') Foo"));
-      assert.equal('<div style="background = url(/images/test.png)">Foo</div>', render("div(style= 'background = url(/images/test.png)') Foo"));
-      assert.equal('<div style="foo">Foo</div>', render("div(style= ['foo', 'bar'][0]) Foo"));
-      assert.equal('<div style="bar">Foo</div>', render("div(style= { foo: 'bar', baz: 'raz' }['foo']) Foo"));
-      assert.equal('<a href="def">Foo</a>', render("a(href='abcdefg'.substr(3,3)) Foo"));
-      assert.equal('<a href="def">Foo</a>', render("a(href={test: 'abcdefg'}.test.substr(3,3)) Foo"));
-      assert.equal('<a href="def">Foo</a>', render("a(href={test: 'abcdefg'}.test.substr(3,[0,3][1])) Foo"));
-      
-      assert.equal('<rss xmlns:atom="atom"></rss>', render("rss(xmlns:atom=\"atom\")"));
-      assert.equal('<rss xmlns:atom="atom"></rss>', render("rss('xmlns:atom'=\"atom\")"));
-      assert.equal('<rss xmlns:atom="atom"></rss>', render("rss(\"xmlns:atom\"='atom')"));
-      assert.equal('<rss xmlns:atom="atom" foo="bar"></rss>', render("rss('xmlns:atom'=\"atom\", 'foo'= 'bar')"));
-      assert.equal('<a data-obj="{ foo: \'bar\' }"></a>', render("a(data-obj= \"{ foo: 'bar' }\")"));
-      
-      assert.equal('<meta content="what\'s up? \'weee\'"/>', render('meta(content="what\'s up? \'weee\'")'));
-  },
-  
-  'test colons option': function(assert){
-      assert.equal('<a href="/bar"></a>', render('a(href:"/bar")', { colons: true }));
-  },
-  
-  'test class attr array': function(assert){
-      assert.equal('<body class="foo bar baz"></body>', render('body(class=["foo", "bar", "baz"])'));
-  },
-  
-  'test attr interpolation': function(assert){
-      // Test single quote interpolation
-      assert.equal('<a href="/user/12">tj</a>'
-        , render("a(href='/user/#{id}') #{name}", { name: 'tj', id: 12 }));
-  
-      assert.equal('<a href="/user/12-tj">tj</a>'
-        , render("a(href='/user/#{id}-#{name}') #{name}", { name: 'tj', id: 12 }));
-  
-      assert.equal('<a href="/user/&lt;script&gt;">tj</a>'
-        , render("a(href='/user/#{id}') #{name}", { name: 'tj', id: '<script>' }));
-  
-      // Test double quote interpolation
-      assert.equal('<a href="/user/13">ds</a>'
-        , render('a(href="/user/#{id}") #{name}', { name: 'ds', id: 13 }));
-  
-      assert.equal('<a href="/user/13-ds">ds</a>'
-        , render('a(href="/user/#{id}-#{name}") #{name}', { name: 'ds', id: 13 }));
-  
-      assert.equal('<a href="/user/&lt;script&gt;">ds</a>'
-        , render('a(href="/user/#{id}") #{name}', { name: 'ds', id: '<script>' }));
-  },
-  
-  'test attr parens': function(assert){
-      assert.equal('<p foo="bar">baz</p>', render('p(foo=((("bar"))))= ((("baz")))'));
-  },
-  
-  'test code attrs': function(assert){
-      assert.equal('<p></p>', render('p(id= name)', { name: undefined }));
-      assert.equal('<p></p>', render('p(id= name)', { name: null }));
-      assert.equal('<p></p>', render('p(id= name)', { name: false }));
-      assert.equal('<p id=""></p>', render('p(id= name)', { name: '' }));
-      assert.equal('<p id="tj"></p>', render('p(id= name)', { name: 'tj' }));
-      assert.equal('<p id="default"></p>', render('p(id= name || "default")', { name: null }));
-      assert.equal('<p id="something"></p>', render("p(id= 'something')", { name: null }));
-      assert.equal('<p id="something"></p>', render("p(id = 'something')", { name: null }));
-      assert.equal('<p id="foo"></p>', render("p(id= (true ? 'foo' : 'bar'))"));
-      assert.equal('<option value="">Foo</option>', render("option(value='') Foo"));
-  },
-  
-  'test code attrs class': function(assert){
-      assert.equal('<p class="tj"></p>', render('p(class= name)', { name: 'tj' }));
-      assert.equal('<p class="tj"></p>', render('p( class= name )', { name: 'tj' }));
-      assert.equal('<p class="default"></p>', render('p(class= name || "default")', { name: null }));
-      assert.equal('<p class="foo default"></p>', render('p.foo(class= name || "default")', { name: null }));
-      assert.equal('<p class="default foo"></p>', render('p(class= name || "default").foo', { name: null }));
-      assert.equal('<p id="default"></p>', render('p(id = name || "default")', { name: null }));
-      assert.equal('<p id="user-1"></p>', render('p(id = "user-" + 1)'));
-      assert.equal('<p class="user-1"></p>', render('p(class = "user-" + 1)'));
-  },
-  
-  'test code buffering': function(assert){
-      assert.equal('<p></p>', render('p= null'));
-      assert.equal('<p></p>', render('p= undefined'));
-      assert.equal('<p>0</p>', render('p= 0'));
-      assert.equal('<p>false</p>', render('p= false'));
-  },
-
-  'test script text': function(assert){
-    var str = [
-      'script',
-      '  p foo',
-      '',
-      'script(type="text/template")',
-      '  p foo',
-      '',
-      'script(type="text/template").',
-      '  p foo'
-    ].join('\n');
-
-    var html = [
-      '<script>p foo\n\n</script>',
-      '<script type="text/template"><p>foo</p></script>',
-      '<script type="text/template">p foo\n</script>'
-    ].join('');
-
-    assert.equal(html, render(str));
-  },
-
-  'test comments': function(assert){
-      // Regular
-      var str = [
-          '//foo',
-          'p bar'
-      ].join('\n');
-  
-      var html = [
-          '<!--foo-->',
-          '<p>bar</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      // Arbitrary indentation
-      
-      var str = [
-          '     //foo',
-          'p bar'
-      ].join('\n');
-  
-      var html = [
-          '<!--foo-->',
-          '<p>bar</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      // Between tags
-      
-      var str = [
-          'p foo',
-          '// bar ',
-          'p baz'
-      ].join('\n');
-  
-      var html = [
-          '<p>foo</p>',
-          '<!-- bar -->',
-          '<p>baz</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  
-      // Quotes
-  
-      var str = "<!-- script(src: '/js/validate.js') -->",
-          js = "// script(src: '/js/validate.js') ";
-      assert.equal(str, render(js));
-  },
-  
-  'test unbuffered comments': function(assert){
-      var str = [
-          '//- foo',
-          'p bar'
-      ].join('\n');
-  
-      var html = [
-          '<p>bar</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      var str = [
-          'p foo',
-          '//- bar ',
-          'p baz'
-      ].join('\n');
-  
-      var html = [
-          '<p>foo</p>',
-          '<p>baz</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  },
-  
-  'test literal html': function(assert){
-      assert.equal('<!--[if IE lt 9]>weeee<![endif]-->\n', render('<!--[if IE lt 9]>weeee<![endif]-->'));
-  },
-  
-  'test code': function(assert){
-      assert.equal('test', render('!= "test"'));
-      assert.equal('test', render('= "test"'));
-      assert.equal('test', render('- var foo = "test"\n=foo'));
-      assert.equal('foo\n<em>test</em>bar\n', render('- var foo = "test"\n| foo\nem= foo\n| bar'));
-      assert.equal('test<h2>something</h2>', render('!= "test"\nh2 something'));
-  
-      var str = [
-          '- var foo = "<script>";',
-          '= foo',
-          '!= foo'
-      ].join('\n');
-  
-      var html = [
-          '&lt;script&gt;',
-          '<script>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      var str = [
-          '- var foo = "<script>";',
-          '- if (foo)',
-          '  p= foo'
-      ].join('\n');
-  
-      var html = [
-          '<p>&lt;script&gt;</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      var str = [
-          '- var foo = "<script>";',
-          '- if (foo)',
-          '  p!= foo'
-      ].join('\n');
-  
-      var html = [
-          '<p><script></p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      var str = [
-          '- var foo;',
-          '- if (foo)',
-          '  p.hasFoo= foo',
-          '- else',
-          '  p.noFoo no foo'
-      ].join('\n');
-  
-      var html = [
-          '<p class="noFoo">no foo</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      var str = [
-          '- var foo;',
-          '- if (foo)',
-          '  p.hasFoo= foo',
-          '- else if (true)',
-          '  p kinda foo',
-          '- else',
-          '  p.noFoo no foo'
-      ].join('\n');
-  
-      var html = [
-          '<p>kinda foo</p>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  
-      var str = [
-          'p foo',
-          '= "bar"',
-      ].join('\n');
-  
-      var html = [
-          '<p>foo</p>bar'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  
-      var str = [
-          'title foo',
-          '- if (true)',
-          '  p something',
-      ].join('\n');
-      
-      var html = [
-          '<title>foo</title><p>something</p>'
-      ].join('');
-      
-      assert.equal(html, render(str));
-  
-      var str = [
-          'foo',
-          '  bar= "bar"',
-          '    baz= "baz"',
-      ].join('\n');
-  
-      var html = [
-          '<foo>',
-          '<bar>bar',
-          '<baz>baz</baz>',
-          '</bar>',
-          '</foo>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  },
-  
-  'test - each': function(assert){
-      // Array
-      var str = [
-          '- var items = ["one", "two", "three"];',
-          '- each item in items',
-          '  li= item'
-      ].join('\n');
-  
-      var html = [
-          '<li>one</li>',
-          '<li>two</li>',
-          '<li>three</li>'
-      ].join('');
-      
-      assert.equal(html, render(str));
-  
-      // Any enumerable (length property)
-      var str = [
-          '- var jQuery = { length: 3, 0: 1, 1: 2, 2: 3 };',
-          '- each item in jQuery',
-          '  li= item'
-      ].join('\n');
-  
-      var html = [
-          '<li>1</li>',
-          '<li>2</li>',
-          '<li>3</li>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-      
-      // Empty array
-      var str = [
-          '- var items = [];',
-          '- each item in items',
-          '  li= item'
-      ].join('\n');
-  
-      assert.equal('', render(str));
-  
-      // Object
-      var str = [
-          '- var obj = { foo: "bar", baz: "raz" };',
-          '- each val in obj',
-          '  li= val'
-      ].join('\n');
-  
-      var html = [
-          '<li>bar</li>',
-          '<li>raz</li>'
-      ].join('');
-      
-      assert.equal(html, render(str));
-      
-      // Complex 
-      var str = [
-          '- var obj = { foo: "bar", baz: "raz" };',
-          '- each key in Object.keys(obj)',
-          '  li= key'
-      ].join('\n');
-  
-      var html = [
-          '<li>foo</li>',
-          '<li>baz</li>'
-      ].join('');
-      
-      assert.equal(html, render(str));
-      
-      // Keys
-      var str = [
-          '- var obj = { foo: "bar", baz: "raz" };',
-          '- each val, key in obj',
-          '  li #{key}: #{val}'
-      ].join('\n');
-  
-      var html = [
-          '<li>foo: bar</li>',
-          '<li>baz: raz</li>'
-      ].join('');
-      
-      assert.equal(html, render(str));
-      
-      // Nested
-      var str = [
-          '- var users = [{ name: "tj" }]',
-          '- each user in users',
-          '  - each val, key in user',
-          '    li #{key} #{val}',
-      ].join('\n');
-  
-      var html = [
-          '<li>name tj</li>'
-      ].join('');
-  
-      assert.equal(html, render(str));
-  
-      var str = [
-          '- var users = ["tobi", "loki", "jane"]',
-          'each user in users',
-          '  li= user',
-      ].join('\n');
-  
-      var html = [
-          '<li>tobi</li>',
-          '<li>loki</li>',
-          '<li>jane</li>',
-      ].join('');
-  
-      assert.equal(html, render(str));
-  
-      var str = [
-          '- var users = ["tobi", "loki", "jane"]',
-          'for user in users',
-          '  li= user',
-      ].join('\n');
-  
-      var html = [
-          '<li>tobi</li>',
-          '<li>loki</li>',
-          '<li>jane</li>',
-      ].join('');
-  
-      assert.equal(html, render(str));
-  },
-  
-  'test if': function(assert){
-    var str = [
-        '- var users = ["tobi", "loki", "jane"]',
-        'if users.length',
-        '  p users: #{users.length}',
-    ].join('\n');
-    
-    assert.equal('<p>users: 3</p>', render(str));
-
-    assert.equal('<iframe foo="bar"></iframe>', render('iframe(foo="bar")'));
-  },
-  
-  'test unless': function(assert){
-    var str = [
-        '- var users = ["tobi", "loki", "jane"]',
-        'unless users.length',
-        '  p no users',
-    ].join('\n');
-    
-    assert.equal('', render(str));
-  
-    var str = [
-        '- var users = []',
-        'unless users.length',
-        '  p no users',
-    ].join('\n');
-    
-    assert.equal('<p>no users</p>', render(str));
-  },
-  
-  'test else': function(assert){
-    var str = [
-        '- var users = []',
-        'if users.length',
-        '  p users: #{users.length}',
-        'else',
-        '  p users: none',
-    ].join('\n');
-    
-    assert.equal('<p>users: none</p>', render(str));
-  },
-  
-  'test else if': function(assert){
-    var str = [
-        '- var users = ["tobi", "jane", "loki"]',
-        'for user in users',
-        '  if user == "tobi"',
-        '    p awesome #{user}',
-        '  else if user == "jane"',
-        '    p lame #{user}',
-        '  else',
-        '    p #{user}',
-    ].join('\n');
-    
-    assert.equal('<p>awesome tobi</p><p>lame jane</p><p>loki</p>', render(str));
-  },
-  
-  'test .compile()': function(assert){
-      var fn = jade.compile('p foo');
-      assert.equal('<p>foo</p>', fn());
-  },
-  
-  'test .compile() locals': function(assert){
-      var fn = jade.compile('p= foo');
-      assert.equal('<p>bar</p>', fn({ foo: 'bar' }));
-  },
-  
-  'test .compile() no debug': function(assert){
-      var fn = jade.compile('p foo\np #{bar}', {compileDebug: false});
-      assert.equal('<p>foo</p><p>baz</p>', fn({bar: 'baz'}));
-  },
-  
-  'test .compile() no debug and global helpers': function(assert){
-      var fn = jade.compile('p foo\np #{bar}', {compileDebug: false, helpers: 'global'});
-      assert.equal('<p>foo</p><p>baz</p>', fn({bar: 'baz'}));
-  },
-  
-  'test null attrs on tag': function(assert){
-      var tag = new jade.nodes.Tag('a'),
-          name = 'href',
-          val = '"/"';
-      tag.setAttribute(name, val)
-      assert.equal(tag.getAttribute(name), val)
-      tag.removeAttribute(name)
-      assert.isUndefined(tag.getAttribute(name))
-  }
-};
diff --git a/node/node_modules/node-static/LICENSE b/node/node_modules/node-static/LICENSE
deleted file mode 100644 (file)
index 91f6632..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2010 Alexis Sellier
-
-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.
diff --git a/node/node_modules/node-static/README.md b/node/node_modules/node-static/README.md
deleted file mode 100644 (file)
index 825c811..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-node-static
-===========
-
-> a simple, *rfc 2616 compliant* file streaming module for [node](http://nodejs.org)
-
-node-static has an in-memory file cache, making it highly efficient.
-node-static understands and supports *conditional GET* and *HEAD* requests.
-node-static was inspired by some of the other static-file serving modules out there,
-such as node-paperboy and antinode.
-
-synopsis
---------
-
-    var static = require('node-static');
-
-    //
-    // Create a node-static server instance to serve the './public' folder
-    //
-    var file = new(static.Server)('./public');
-
-    require('http').createServer(function (request, response) {
-        request.addListener('end', function () {
-            //
-            // Serve files!
-            //
-            file.serve(request, response);
-        });
-    }).listen(8080);
-
-API
----
-
-### Creating a node-static Server #
-
-Creating a file server instance is as simple as:
-
-    new static.Server();
-
-This will serve files in the current directory. If you want to serve files in a specific
-directory, pass it as the first argument:
-
-    new static.Server('./public');
-
-You can also specify how long the client is supposed to cache the files node-static serves:
-
-    new static.Server('./public', { cache: 3600 });
-
-This will set the `Cache-Control` header, telling clients to cache the file for an hour.
-This is the default setting.
-
-### Serving files under a directory #
-
-To serve files under a directory, simply call the `serve` method on a `Server` instance, passing it
-the HTTP request and response object:
-
-    var fileServer = new static.Server('./public');
-
-    require('http').createServer(function (request, response) {
-        request.addListener('end', function () {
-            fileServer.serve(request, response);
-        });
-    }).listen(8080);
-
-### Serving specific files #
-
-If you want to serve a specific file, like an error page for example, use the `serveFile` method:
-
-    fileServer.serveFile('/error.html', 500, {}, request, response);
-
-This will serve the `error.html` file, from under the file root directory, with a `500` status code.
-For example, you could serve an error page, when the initial request wasn't found:
-
-    require('http').createServer(function (request, response) {
-        request.addListener('end', function () {
-            fileServer.serve(request, response, function (e, res) {
-                if (e && (e.status === 404)) { // If the file wasn't found
-                    fileServer.serveFile('/not-found.html', request, response);
-                }
-            });
-        });
-    }).listen(8080);
-
-More on intercepting errors bellow.
-
-### Intercepting errors & Listening #
-
-An optional callback can be passed as last argument, it will be called every time a file
-has been served successfully, or if there was an error serving the file:
-
-    var fileServer = new static.Server('./public');
-
-    require('http').createServer(function (request, response) {
-        request.addListener('end', function () {
-            fileServer.serve(request, response, function (err, result) {
-                if (err) { // There was an error serving the file
-                    sys.error("Error serving " + request.url + " - " + err.message);
-
-                    // Respond to the client
-                    response.writeHead(err.status, err.headers);
-                    response.end();
-                }
-            });
-        });
-    }).listen(8080);
-
-Note that if you pass a callback, and there is an error serving the file, node-static
-*will not* respond to the client. This gives you the opportunity to re-route the request,
-or handle it differently.
-
-For example, you may want to interpret a request as a static request, but if the file isn't found,
-send it to an application.
-
-If you only want to *listen* for errors, you can use *event listeners*:
-
-    fileServer.serve(request, response).addListener('error', function (err) {
-        sys.error("Error serving " + request.url + " - " + err.message);
-    });
-
-With this method, you don't have to explicitly send the response back, in case of an error.
-
-### Options when creating an instance of `Server` #
-
-#### `cache` #
-
-Sets the `Cache-Control` header.
-
-example: `{ cache: 7200 }`
-
-Passing a number will set the cache duration to that number of seconds.
-Passing `false` will disable the `Cache-Control` header.
-
-> Defaults to `3600`
-
-#### `headers` #
-
-Sets response headers.
-
-example: `{ 'X-Hello': 'World!' }`
-
-> defaults to `{}`
-
diff --git a/node/node_modules/node-static/benchmark/node-static-0.3.0.txt b/node/node_modules/node-static/benchmark/node-static-0.3.0.txt
deleted file mode 100644 (file)
index c6083ea..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-This is ApacheBench, Version 2.3 <$Revision: 655654 $>
-Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
-Licensed to The Apache Software Foundation, http://www.apache.org/
-
-Benchmarking 127.0.0.1 (be patient)
-
-
-Server Software:        node-static/0.3.0
-Server Hostname:        127.0.0.1
-Server Port:            8080
-
-Document Path:          /lib/node-static.js
-Document Length:        6038 bytes
-
-Concurrency Level:      20
-Time taken for tests:   2.323 seconds
-Complete requests:      10000
-Failed requests:        0
-Write errors:           0
-Total transferred:      63190000 bytes
-HTML transferred:       60380000 bytes
-Requests per second:    4304.67 [#/sec] (mean)
-Time per request:       4.646 [ms] (mean)
-Time per request:       0.232 [ms] (mean, across all concurrent requests)
-Transfer rate:          26563.66 [Kbytes/sec] received
-
-Connection Times (ms)
-              min  mean[+/-sd] median   max
-Connect:        0    0   0.2      0       3
-Processing:     1    4   1.4      4      28
-Waiting:        1    4   1.3      4      18
-Total:          2    5   1.5      4      28
-
-Percentage of the requests served within a certain time (ms)
-  50%      4
-  66%      5
-  75%      5
-  80%      5
-  90%      5
-  95%      6
-  98%      8
-  99%      9
- 100%     28 (longest request)
diff --git a/node/node_modules/node-static/examples/file-server.js b/node/node_modules/node-static/examples/file-server.js
deleted file mode 100644 (file)
index a12c43b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-var sys = require('sys');
-var static = require('../lib/node-static');
-
-//
-// Create a node-static server to serve the current directory
-//
-var file = new(static.Server)('.', { cache: 7200, headers: {'X-Hello':'World!'} });
-
-require('http').createServer(function (request, response) {
-    request.addListener('end', function () {
-        //
-        // Serve files!
-        //
-        file.serve(request, response, function (err, res) {
-            if (err) { // An error as occured
-                sys.error("> Error serving " + request.url + " - " + err.message);
-                response.writeHead(err.status, err.headers);
-                response.end();
-            } else { // The file was served successfully
-                sys.puts("> " + request.url + " - " + res.message);
-            }
-        });
-    });
-}).listen(8080);
-
-sys.puts("> node-static is listening on http://127.0.0.1:8080");
diff --git a/node/node_modules/node-static/lib/node-static.js b/node/node_modules/node-static/lib/node-static.js
deleted file mode 100644 (file)
index 9399257..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-var fs = require('fs'),
-    sys = require('sys'),
-    events = require('events'),
-    buffer = require('buffer'),
-    http = require('http'),
-    url = require('url'),
-    path = require('path');
-
-this.version = [0, 5, 9];
-
-var mime = require('./node-static/mime');
-var util = require('./node-static/util');
-
-var serverInfo = 'node-static/' + this.version.join('.');
-
-// In-memory file store
-this.store = {};
-this.indexStore = {};
-
-this.Server = function (root, options) {
-    if (root && (typeof(root) === 'object')) { options = root, root = null }
-
-    this.root    = path.resolve(root || '.');
-    this.options = options || {};
-    this.cache   = 3600;
-
-    this.defaultHeaders  = {};
-    this.options.headers = this.options.headers || {};
-
-    if ('cache' in this.options) {
-        if (typeof(this.options.cache) === 'number') {
-            this.cache = this.options.cache;
-        } else if (! this.options.cache) {
-            this.cache = false;
-        }
-    }
-
-    if (this.cache !== false) {
-        this.defaultHeaders['Cache-Control'] = 'max-age=' + this.cache;
-    }
-    this.defaultHeaders['Server'] = serverInfo;
-
-    for (var k in this.defaultHeaders) {
-        this.options.headers[k] = this.options.headers[k] ||
-                                  this.defaultHeaders[k];
-    }
-};
-
-this.Server.prototype.serveDir = function (pathname, req, res, finish) {
-    var htmlIndex = path.join(pathname, 'index.html'),
-        that = this;
-
-    fs.stat(htmlIndex, function (e, stat) {
-        if (!e) {
-            that.respond(null, 200, {}, [htmlIndex], stat, req, res, finish);
-        } else {
-            if (pathname in exports.store) {
-                streamFiles(exports.indexStore[pathname].files);
-            } else {
-                // Stream a directory of files as a single file.
-                fs.readFile(path.join(pathname, 'index.json'), function (e, contents) {
-                    if (e) { return finish(404, {}) }
-                    var index = JSON.parse(contents);
-                    exports.indexStore[pathname] = index;
-                    streamFiles(index.files);
-                });
-            }
-        }
-    });
-    function streamFiles(files) {
-        util.mstat(pathname, files, function (e, stat) {
-            that.respond(pathname, 200, {}, files, stat, req, res, finish);
-        });
-    }
-};
-this.Server.prototype.serveFile = function (pathname, status, headers, req, res) {
-    var that = this;
-    var promise = new(events.EventEmitter);
-
-    pathname = this.resolve(pathname);
-
-    fs.stat(pathname, function (e, stat) {
-        if (e) {
-            return promise.emit('error', e);
-        }
-        that.respond(null, status, headers, [pathname], stat, req, res, function (status, headers) {
-            that.finish(status, headers, req, res, promise);
-        });
-    });
-    return promise;
-};
-this.Server.prototype.finish = function (status, headers, req, res, promise, callback) {
-    var result = {
-        status:  status,
-        headers: headers,
-        message: http.STATUS_CODES[status]
-    };
-
-    headers['Server'] = serverInfo;
-
-    if (!status || status >= 400) {
-        if (callback) {
-            callback(result);
-        } else {
-            if (promise.listeners('error').length > 0) {
-                promise.emit('error', result);
-            }
-            res.writeHead(status, headers);
-            res.end();
-        }
-    } else {
-        // Don't end the request here, if we're streaming;
-        // it's taken care of in `prototype.stream`.
-        if (status !== 200 || req.method !== 'GET') {
-            res.writeHead(status, headers);
-            res.end();
-        }
-        callback && callback(null, result);
-        promise.emit('success', result);
-    }
-};
-
-this.Server.prototype.servePath = function (pathname, status, headers, req, res, finish) {
-    var that = this,
-        promise = new(events.EventEmitter);
-
-    pathname = this.resolve(pathname);
-
-    // Only allow GET and HEAD requests
-    if (req.method !== 'GET' && req.method !== 'HEAD') {
-        finish(405, { 'Allow': 'GET, HEAD' });
-        return promise;
-    }
-
-    // Make sure we're not trying to access a
-    // file outside of the root.
-    if (pathname.indexOf(that.root) === 0) {
-        fs.stat(pathname, function (e, stat) {
-            if (e) {
-                finish(404, {});
-            } else if (stat.isFile()) {      // Stream a single file.
-                that.respond(null, status, headers, [pathname], stat, req, res, finish);
-            } else if (stat.isDirectory()) { // Stream a directory of files.
-                that.serveDir(pathname, req, res, finish);
-            } else {
-                finish(400, {});
-            }
-        });
-    } else {
-        // Forbidden
-        finish(403, {});
-    }
-    return promise;
-};
-this.Server.prototype.resolve = function (pathname) {
-    return path.resolve(path.join(this.root, pathname));
-};
-this.Server.prototype.serve = function (req, res, callback) {
-    var that = this,
-        promise = new(events.EventEmitter);
-    
-    var pathname = decodeURI(url.parse(req.url).pathname);
-
-    var finish = function (status, headers) {
-        that.finish(status, headers, req, res, promise, callback);
-    };
-
-    process.nextTick(function () {
-        that.servePath(pathname, 200, {}, req, res, finish).on('success', function (result) {
-            promise.emit('success', result);
-        }).on('error', function (err) {
-            promise.emit('error');
-        });
-    });
-    if (! callback) { return promise }
-};
-
-this.Server.prototype.respond = function (pathname, status, _headers, files, stat, req, res, finish) {
-    var mtime   = Date.parse(stat.mtime),
-        key     = pathname || files[0],
-        headers = {};
-
-    // Copy default headers
-    for (var k in this.options.headers) {  headers[k] = this.options.headers[k] }
-
-    headers['Etag']          = JSON.stringify([stat.ino, stat.size, mtime].join('-'));
-    headers['Date']          = new(Date)().toUTCString();
-    headers['Last-Modified'] = new(Date)(stat.mtime).toUTCString();
-
-    // Conditional GET
-    // If the "If-Modified-Since" or "If-None-Match" headers
-    // match the conditions, send a 304 Not Modified.
-    if (req.headers['if-none-match'] === headers['Etag'] ||
-        Date.parse(req.headers['if-modified-since']) >= mtime) {
-        finish(304, headers);
-    } else if (req.method === 'HEAD') {
-        finish(200, headers);
-    } else {
-        headers['Content-Length'] = stat.size;
-        headers['Content-Type']   = mime.contentTypes[path.extname(files[0]).slice(1)] ||
-                                   'application/octet-stream';
-
-        for (var k in _headers) { headers[k] = _headers[k] }
-
-        res.writeHead(status, headers);
-
-        // If the file was cached and it's not older
-        // than what's on disk, serve the cached version.
-        if (this.cache && (key in exports.store) &&
-            exports.store[key].stat.mtime >= stat.mtime) {
-            res.end(exports.store[key].buffer);
-            finish(status, headers);
-        } else {
-            this.stream(pathname, files, new(buffer.Buffer)(stat.size), res, function (e, buffer) {
-                if (e) { return finish(500, {}) }
-                exports.store[key] = {
-                    stat:      stat,
-                    buffer:    buffer,
-                    timestamp: Date.now()
-                };
-                finish(status, headers);
-            });
-        }
-    }
-};
-
-this.Server.prototype.stream = function (pathname, files, buffer, res, callback) {
-    (function streamFile(files, offset) {
-        var file = files.shift();
-
-        if (file) {
-            file = file[0] === '/' ? file : path.join(pathname || '.', file);
-
-            // Stream the file to the client
-            fs.createReadStream(file, {
-                flags: 'r',
-                mode: 0666
-            }).on('data', function (chunk) {
-                chunk.copy(buffer, offset);
-                offset += chunk.length;
-            }).on('close', function () {
-                streamFile(files, offset);
-            }).on('error', function (err) {
-                callback(err);
-                console.error(err);
-            }).pipe(res, { end: false });
-        } else {
-            res.end();
-            callback(null, buffer, offset);
-        }
-    })(files.slice(0), 0);
-};
diff --git a/node/node_modules/node-static/lib/node-static/mime.js b/node/node_modules/node-static/lib/node-static/mime.js
deleted file mode 100644 (file)
index cdd3355..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-this.contentTypes = {
-  "aiff": "audio/x-aiff",
-  "arj": "application/x-arj-compressed",
-  "asf": "video/x-ms-asf",
-  "asx": "video/x-ms-asx",
-  "au": "audio/ulaw",
-  "avi": "video/x-msvideo",
-  "bcpio": "application/x-bcpio",
-  "ccad": "application/clariscad",
-  "cod": "application/vnd.rim.cod",
-  "com": "application/x-msdos-program",
-  "cpio": "application/x-cpio",
-  "cpt": "application/mac-compactpro",
-  "csh": "application/x-csh",
-  "css": "text/css",
-  "deb": "application/x-debian-package",
-  "dl": "video/dl",
-  "doc": "application/msword",
-  "drw": "application/drafting",
-  "dvi": "application/x-dvi",
-  "dwg": "application/acad",
-  "dxf": "application/dxf",
-  "dxr": "application/x-director",
-  "etx": "text/x-setext",
-  "ez": "application/andrew-inset",
-  "fli": "video/x-fli",
-  "flv": "video/x-flv",
-  "gif": "image/gif",
-  "gl": "video/gl",
-  "gtar": "application/x-gtar",
-  "gz": "application/x-gzip",
-  "hdf": "application/x-hdf",
-  "hqx": "application/mac-binhex40",
-  "html": "text/html",
-  "ice": "x-conference/x-cooltalk",
-  "ico": "image/x-icon",
-  "ief": "image/ief",
-  "igs": "model/iges",
-  "ips": "application/x-ipscript",
-  "ipx": "application/x-ipix",
-  "jad": "text/vnd.sun.j2me.app-descriptor",
-  "jar": "application/java-archive",
-  "jpeg": "image/jpeg",
-  "jpg": "image/jpeg",
-  "js": "text/javascript",
-  "json": "application/json",
-  "latex": "application/x-latex",
-  "less": "text/css",
-  "lsp": "application/x-lisp",
-  "lzh": "application/octet-stream",
-  "m": "text/plain",
-  "m3u": "audio/x-mpegurl",
-  "man": "application/x-troff-man",
-  "manifest": "text/cache-manifest",
-  "me": "application/x-troff-me",
-  "midi": "audio/midi",
-  "mif": "application/x-mif",
-  "mime": "www/mime",
-  "movie": "video/x-sgi-movie",
-  "mp4": "video/mp4",
-  "mpg": "video/mpeg",
-  "mpga": "audio/mpeg",
-  "ms": "application/x-troff-ms",
-  "nc": "application/x-netcdf",
-  "oda": "application/oda",
-  "ogm": "application/ogg",
-  "pbm": "image/x-portable-bitmap",
-  "pdf": "application/pdf",
-  "pgm": "image/x-portable-graymap",
-  "pgn": "application/x-chess-pgn",
-  "pgp": "application/pgp",
-  "pm": "application/x-perl",
-  "png": "image/png",
-  "pnm": "image/x-portable-anymap",
-  "ppm": "image/x-portable-pixmap",
-  "ppz": "application/vnd.ms-powerpoint",
-  "pre": "application/x-freelance",
-  "prt": "application/pro_eng",
-  "ps": "application/postscript",
-  "qt": "video/quicktime",
-  "ra": "audio/x-realaudio",
-  "rar": "application/x-rar-compressed",
-  "ras": "image/x-cmu-raster",
-  "rgb": "image/x-rgb",
-  "rm": "audio/x-pn-realaudio",
-  "rpm": "audio/x-pn-realaudio-plugin",
-  "rtf": "text/rtf",
-  "rtx": "text/richtext",
-  "scm": "application/x-lotusscreencam",
-  "set": "application/set",
-  "sgml": "text/sgml",
-  "sh": "application/x-sh",
-  "shar": "application/x-shar",
-  "silo": "model/mesh",
-  "sit": "application/x-stuffit",
-  "skt": "application/x-koan",
-  "smil": "application/smil",
-  "snd": "audio/basic",
-  "sol": "application/solids",
-  "spl": "application/x-futuresplash",
-  "src": "application/x-wais-source",
-  "stl": "application/SLA",
-  "stp": "application/STEP",
-  "sv4cpio": "application/x-sv4cpio",
-  "sv4crc": "application/x-sv4crc",
-  "svg": "image/svg+xml",
-  "swf": "application/x-shockwave-flash",
-  "tar": "application/x-tar",
-  "tcl": "application/x-tcl",
-  "tex": "application/x-tex",
-  "texinfo": "application/x-texinfo",
-  "tgz": "application/x-tar-gz",
-  "tiff": "image/tiff",
-  "tr": "application/x-troff",
-  "tsi": "audio/TSP-audio",
-  "tsp": "application/dsptype",
-  "tsv": "text/tab-separated-values",
-  "txt": "text/plain",
-  "unv": "application/i-deas",
-  "ustar": "application/x-ustar",
-  "vcd": "application/x-cdlink",
-  "vda": "application/vda",
-  "vivo": "video/vnd.vivo",
-  "vrm": "x-world/x-vrml",
-  "wav": "audio/x-wav",
-  "wax": "audio/x-ms-wax",
-  "wma": "audio/x-ms-wma",
-  "wmv": "video/x-ms-wmv",
-  "wmx": "video/x-ms-wmx",
-  "wrl": "model/vrml",
-  "wvx": "video/x-ms-wvx",
-  "xbm": "image/x-xbitmap",
-  "xlw": "application/vnd.ms-excel",
-  "xml": "text/xml",
-  "xpm": "image/x-xpixmap",
-  "xwd": "image/x-xwindowdump",
-  "xyz": "chemical/x-pdb",
-  "zip": "application/zip"
-};
diff --git a/node/node_modules/node-static/lib/node-static/util.js b/node/node_modules/node-static/lib/node-static/util.js
deleted file mode 100644 (file)
index 8dd8e04..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-var fs = require('fs'),
-    path = require('path');
-
-this.mstat = function (dir, files, callback) {
-    (function mstat(files, stats) {
-        var file = files.shift();
-
-        if (file) {
-            fs.stat(path.join(dir, file), function (e, stat) {
-                if (e) {
-                    callback(e);
-                } else {
-                    mstat(files, stats.concat([stat]));
-                }
-            });
-        } else {
-            callback(null, {
-                size: stats.reduce(function (total, stat) {
-                    return total + stat.size;
-                }, 0),
-                mtime: stats.reduce(function (latest, stat) {
-                    return latest > stat.mtime ? latest : stat.mtime;
-                }, 0),
-                ino: stats.reduce(function (total, stat) {
-                    return total + stat.ino;
-                }, 0)
-            });
-        }
-    })(files.slice(0), []);
-};
diff --git a/node/node_modules/node-static/package.json b/node/node_modules/node-static/package.json
deleted file mode 100644 (file)
index b1ce2f4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  "name"          : "node-static",
-  "description"   : "simple, compliant file streaming module for node",
-  "url"           : "http://github.com/cloudhead/node-static",
-  "keywords"      : ["http", "static", "file", "server"],
-  "author"        : "Alexis Sellier <self@cloudhead.net>",
-  "contributors"  : [],
-  "licenses"      : ["MIT"],
-  "dependencies"  : [],
-  "lib"           : "lib",
-  "main"          : "./lib/node-static",
-  "version"       : "0.5.9",
-  "directories"   : { "test": "./test" },
-  "engines"       : { "node": ">= 0.4.1" }
-}
diff --git a/node/node_modules/socket.io-client/.gitignore b/node/node_modules/socket.io-client/.gitignore
deleted file mode 100644 (file)
index fcc7910..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-s3
-test/node_modules
-support/test-runner/node_modules
-node_modules
diff --git a/node/node_modules/socket.io-client/.npmignore b/node/node_modules/socket.io-client/.npmignore
deleted file mode 100644 (file)
index c27cb50..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-test/node_modules
-support
diff --git a/node/node_modules/socket.io-client/History.md b/node/node_modules/socket.io-client/History.md
deleted file mode 100644 (file)
index 57812b4..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-
-0.8.3 / 2011-09-03
-==================
-
-  * Fixed `\n` parsing for non-JSON packets.
-  * Fixed; make Socket.IO XHTML doctype compatible (fixes #460 from server)
-  * Fixed support for Node.JS running `socket.io-client`.
-  * Updated repository name in `package.json`.
-  * Added support for different policy file ports without having to port
-    forward 843 on the server side [3rd-Eden]
-
-0.8.2 / 2011-08-29
-==================
-
-  * Fixed flashsocket detection.
-
-0.8.1 / 2011-08-29
-==================
-
-  * Bump version.
-
-0.8.0 / 2011-08-28
-==================
-
-  * Added MozWebSocket support (hybi-10 doesn't require API changes) [einaros].
-
-0.7.11 / 2011-08-27
-===================
-
-  * Corrected previous release (missing build).
-
-0.7.10 / 2011-08-27
-===================
-
-  * Fix for failing fallback in websockets
-
-0.7.9 / 2011-08-12
-==================
-
-  * Added check on `Socket#onConnect` to prevent double `connect` events on the main manager.
-  * Fixed socket namespace connect test. Remove broken alternative namespace connect test.
-  * Removed test handler for removed test.
-  * Bumped version to match `socket.io` server.
-
-0.7.5 / 2011-08-08
-==================
-
-  * Added querystring support for `connect` [3rd-Eden]
-  * Added partial Node.JS transports support [3rd-Eden, josephg]
-  * Fixed builder test.
-  * Changed `util.inherit` to replicate Object.create / __proto__.
-  * Changed and cleaned up some acceptance tests.
-  * Fixed race condition with a test that could not be run multiple times.
-  * Added test for encoding a payload.
-  * Added the ability to override the transport to use in acceptance test [3rd-Eden]
-  * Fixed multiple connect packets [DanielBaulig]
-  * Fixed jsonp-polling over-buffering [3rd-Eden]
-  * Fixed ascii preservation in minified socket.io client [3rd-Eden]
-  * Fixed socket.io in situations where the page is not served through utf8.
-  * Fixed namespaces not reconnecting after disconnect [3rd-Eden]
-  * Fixed default port for secure connections.
-
-0.7.4 / 2011-07-12
-==================
-
-  * Added `SocketNamespace#of` shortcut. [3rd-Eden]
-  * Fixed a IE payload decoding bug. [3rd-Eden]
-  * Honor document protocol, unless overriden. [dvv]
-  * Fixed new builder dependencies. [3rd-Eden]
-
-0.7.3 / 2011-06-30 
-==================
-
-  * Fixed; acks don't depend on arity. They're automatic for `.send` and
-    callback based for `.emit`. [dvv]
-  * Added support for sub-sockets authorization. [3rd-Eden]
-  * Added BC support for `new io.connect`. [fat]
-  * Fixed double `connect` events. [3rd-Eden]
-  * Fixed reconnection with jsonp-polling maintaining old sessionid. [franck34]
-
-0.7.2 / 2011-06-22
-==================
-
-  * Added `noop` message type.
-
-0.7.1 / 2011-06-21
-==================
-
-  * Bumped socket.io dependency version for acceptance tests.
-
-0.7.0 / 2011-06-21
-==================
-
-  * http://socket.io/announcement.html
-
diff --git a/node/node_modules/socket.io-client/Makefile b/node/node_modules/socket.io-client/Makefile
deleted file mode 100644 (file)
index f2d2f41..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-ALL_TESTS = $(shell find test/ -name '*.test.js')
-
-run-tests:
-       @./node_modules/.bin/expresso \
-               -I lib \
-               -I support \
-               --serial \
-               $(TESTS)
-
-test:
-       @$(MAKE) TESTS="$(ALL_TESTS)" run-tests
-
-test-acceptance:
-       @node support/test-runner/app $(TRANSPORT)
-
-build:
-       @node ./bin/builder.js
-
-.PHONY: test
diff --git a/node/node_modules/socket.io-client/README.md b/node/node_modules/socket.io-client/README.md
deleted file mode 100644 (file)
index a36c1bf..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-socket.io
-=========
-
-#### Sockets for the rest of us
-
-The `socket.io` client is basically a simple HTTP Socket interface implementation.
-It looks similar to WebSocket while providing additional features and
-leveraging other transports when WebSocket is not supported by the user's
-browser.
-
-```js
-var socket = io.connect('http://domain.com');
-socket.on('connect', function () {
-  // socket connected
-});
-socket.on('custom event', function () {
-  // server emitted a custom event
-});
-socket.on('disconnect', function () {
-  // socket disconnected
-});
-socket.send('hi there');
-```
-
-### Recipes
-
-#### Utilizing namespaces (ie: multiple sockets)
-
-If you want to namespace all the messages and events emitted to a particular
-endpoint, simply specify it as part of the `connect` uri:
-
-```js
-var chat = io.connect('http://localhost/chat');
-chat.on('connect', function () {
-  // chat socket connected
-});
-
-var news = io.connect('/news'); // io.connect auto-detects host
-news.on('connect', function () {
-  // news socket connected
-});
-```
-
-#### Emitting custom events
-
-To ease with the creation of applications, you can emit custom events outside
-of the global `message` event.
-
-```js
-var socket = io.connect();
-socket.emit('server custom event', { my: 'data' });
-```
-
-#### Forcing disconnection
-
-```js
-var socket = io.connect();
-socket.on('connect', function () {
-  socket.disconnect();
-});
-```
-
-### Documentation 
-
-#### io#connect
-
-```js
-io.connect(uri, [options]);
-```
-
-##### Options:
-
-- *resource*
-
-    socket.io
-
-  The resource is what allows the `socket.io` server to identify incoming connections by `socket.io` clients. In other words, any HTTP server can implement socket.io and still serve other normal, non-realtime HTTP requests.
-
-- *transports*
-
-```js
-['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling']
-```
-
-  A list of the transports to attempt to utilize (in order of preference).
-
-- *'connect timeout'*
-
-```js
-5000
-```
-
-  The amount of milliseconds a transport has to create a connection before we consider it timed out.
-  
-- *'try multiple transports'*
-
-```js
-true
-```
-
-  A boolean indicating if we should try other transports when the  connectTimeout occurs.
-  
-- *reconnect*
-
-```js
-true
-```
-
-  A boolean indicating if we should automatically reconnect if a connection is disconnected. 
-  
-- *'reconnection delay'*
-
-```js
-500
-```
-
-  The amount of milliseconds before we try to connect to the server again. We are using a exponential back off algorithm for the following reconnections, on each reconnect attempt this value will get multiplied (500 > 1000 > 2000 > 4000 > 8000).
-  
-
-- *'max reconnection attempts'*
-
-```js
-10
-```
-
-  The amount of attempts should we make using the current transport to connect to the server? After this we will do one final attempt, and re-try with all enabled transport methods before we give up.
-
-##### Properties:
-
-- *options*
-
-  The passed in options combined with the defaults.
-
-- *connected*
-
-  Whether the socket is connected or not.
-  
-- *connecting*
-
-  Whether the socket is connecting or not.
-
-- *reconnecting*
-
-  Whether we are reconnecting or not.
-  
-- *transport*  
-
-  The transport instance.
-
-##### Methods:
-  
-- *connect(λ)*
-
-  Establishes a connection. If λ is supplied as argument, it will be called once the connection is established.
-  
-- *send(message)*
-  
-  A string of data to send.
-  
-- *disconnect*
-
-  Closes the connection.
-  
-- *on(event, λ)*
-
-  Adds a listener for the event *event*.
-
-- *once(event, λ)*
-
-  Adds a one time listener for the event *event*. The listener is removed after the first time the event is fired.
-  
-- *removeEvent(event, λ)*
-
-  Removes the listener λ for the event *event*.
-  
-##### Events:
-
-- *connect*
-
-  Fired when the connection is established and the handshake successful.
-  
-- *connecting(transport_type)*
-
-    Fired when a connection is attempted, passing the transport name.
-  
-- *connect_failed*
-
-    Fired when the connection timeout occurs after the last connection attempt.
-  This only fires if the `connectTimeout` option is set.
-  If the `tryTransportsOnConnectTimeout` option is set, this only fires once all
-  possible transports have been tried.
-  
-- *message(message)*
-  
-  Fired when a message arrives from the server
-
-- *close*
-
-  Fired when the connection is closed. Be careful with using this event, as some transports will fire it even under temporary, expected disconnections (such as XHR-Polling).
-  
-- *disconnect*
-
-  Fired when the connection is considered disconnected.
-  
-- *reconnect(transport_type,reconnectionAttempts)*
-
-  Fired when the connection has been re-established. This only fires if the `reconnect` option is set.
-
-- *reconnecting(reconnectionDelay,reconnectionAttempts)*
-
-  Fired when a reconnection is attempted, passing the next delay for the next reconnection.
-
-- *reconnect_failed*
-
-  Fired when all reconnection attempts have failed and we where unsuccessful in reconnecting to the server.  
-
-### Contributors
-
-Guillermo Rauch &lt;guillermo@learnboost.com&gt;
-
-Arnout Kazemier &lt;info@3rd-eden.com&gt;
-
-### License 
-
-(The MIT License)
-
-Copyright (c) 2010 LearnBoost &lt;dev@learnboost.com&gt;
-
-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.
diff --git a/node/node_modules/socket.io-client/bin/builder.js b/node/node_modules/socket.io-client/bin/builder.js
deleted file mode 100755 (executable)
index 3206f04..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var fs = require('fs')
-  , socket = require('../lib/io')
-  , uglify = require('uglify-js');
-
-/**
- * License headers.
- *
- * @api private
- */
-
-var template = '/*! Socket.IO.%ext% build:' + socket.version + ', %type%. Copyright(c) 2011 LearnBoost <dev@learnboost.com> MIT Licensed */\n'
-  , development = template.replace('%type%', 'development').replace('%ext%', 'js')
-  , production = template.replace('%type%', 'production').replace('%ext%', 'min.js');
-
-/**
- * If statements, these allows you to create serveride & client side compatible
- * code using specially designed `if` statements that remove serverside
- * designed code from the source files
- *
- * @api private
- */
-
-var starttagIF = '// if node'
-  , endtagIF = '// end node';
-
-/**
- * The modules that are required to create a base build of Socket.IO.
- *
- * @const
- * @type {Array}
- * @api private
- */
-
-var base = [
-    'io.js'
-  , 'util.js'
-  , 'events.js'
-  , 'json.js'
-  , 'parser.js'
-  , 'transport.js'
-  , 'socket.js'
-  , 'namespace.js'
-  ];
-
-/**
- * The available transports for Socket.IO. These are mapped as:
- * 
- *   - `key` the name of the transport
- *   - `value` the dependencies for the transport
- *
- * @const
- * @type {Object}
- * @api public
- */
-
-var baseTransports = {
-    'websocket': ['transports/websocket.js']
-  , 'flashsocket': [
-        'transports/websocket.js'
-      , 'transports/flashsocket.js'
-      , 'vendor/web-socket-js/swfobject.js'
-      , 'vendor/web-socket-js/web_socket.js'
-    ] 
-  , 'htmlfile': ['transports/xhr.js', 'transports/htmlfile.js']
-  /* FIXME: re-enable me once we have multi-part support
-  , 'xhr-multipart': ['transports/xhr.js', 'transports/xhr-multipart.js'] */
-  , 'xhr-polling': ['transports/xhr.js', 'transports/xhr-polling.js']
-  , 'jsonp-polling': [
-        'transports/xhr.js'
-      , 'transports/xhr-polling.js'
-      , 'transports/jsonp-polling.js'
-    ]
-};
-
-/**
- * Builds a custom Socket.IO distribution based on the transports that you
- * need. You can configure the build to create development build or production
- * build (minified).
- *
- * @param {Array} transports The transports that needs to be bundled.
- * @param {Object} [options] Options to configure the building process.
- * @param {Function} callback Last argument should always be the callback
- * @callback {String|Boolean} err An optional argument, if it exists than an error
- *    occurred during the build process.
- * @callback {String} result The result of the build process.
- * @api public
- */
-
-var builder = module.exports = function () {
-  var transports, options, callback, error = null
-    , args = Array.prototype.slice.call(arguments, 0)
-    , settings = {
-        minify: true
-      , node: false
-      , custom: []
-      };
-
-  // Fancy pancy argument support this makes any pattern possible mainly
-  // because we require only one of each type
-  args.forEach(function (arg) {
-    var type = Object.prototype.toString.call(arg)
-        .replace(/\[object\s(\w+)\]/gi , '$1' ).toLowerCase();
-
-    switch (type) {
-      case 'array':
-        return transports = arg;
-      case 'object':
-        return options = arg;
-      case 'function':
-        return callback = arg;
-    }
-  });
-
-  // Add defaults
-  options = options || {};
-  transports = transports || Object.keys(baseTransports);
-
-  // Merge the data
-  for(var option in options) {
-    settings[option] = options[option];
-  }
-
-  // Start creating a dependencies chain with all the required files for the
-  // custom Socket.IO bundle.
-  var files = [];
-  base.forEach(function (file) {
-    files.push(__dirname + '/../lib/' + file);
-  });
-
-  transports.forEach(function (transport) {
-    var dependencies = baseTransports[transport];
-    if (!dependencies) {
-      error = 'Unsupported transport `' + transport + '` supplied as argument.';
-      return;
-    }
-
-    // Add the files to the files list, but only if they are not added before
-    dependencies.forEach(function (file) {
-      var path = __dirname + '/../lib/' + file;
-      if (!~files.indexOf(path)) files.push(path);
-    })
-  });
-
-  // check to see if the files tree compilation generated any errors.
-  if (error) return callback(error);
-
-  var results = {};
-  files.forEach(function (file) {
-    fs.readFile(file, function (err, content) {
-      if (err) error = err;
-      results[file] = content;
-
-      // check if we are done yet, or not.. Just by checking the size of the result
-      // object.
-      if (Object.keys(results).length !== files.length) return;
-
-      // we are done, did we error?
-      if (error) return callback(error);
-
-      // concatinate the file contents in order
-      var code = development
-        , ignore = 0;
-
-      files.forEach(function (file) {
-        code += results[file];
-      });
-
-      // check if we need to add custom code
-      if (settings.custom.length) {
-        settings.custom.forEach(function (content) {
-          code += content;
-        });
-      }
-
-      // Search for conditional code blocks that need to be removed as they
-      // where designed for a server side env. but only if we don't want to
-      // make this build node compatible.
-      if (!settings.node) {
-        code = code.split('\n').filter(function (line) {
-          // check if there are tags in here
-          var start = line.indexOf(starttagIF) >= 0
-            , end = line.indexOf(endtagIF) >= 0
-            , ret = ignore;
-
-          // ignore the current line
-          if (start) {
-            ignore++;
-            ret = ignore;
-          }
-
-          // stop ignoring the next line
-          if (end) {
-            ignore--;
-          }
-
-          return ret == 0;
-        }).join('\n');
-      }
-
-      // check if we need to process it any further
-      if (settings.minify) {
-        // uglify hate unicode chars... 
-        var separator = '@@OMGYUCHANGEME@@@';
-        code = code.replace(/(\\ufffd)/g, separator);
-
-        var ast = uglify.parser.parse(code);
-        ast = uglify.uglify.ast_mangle(ast);
-        ast = uglify.uglify.ast_squeeze(ast);
-
-        code = production + uglify.uglify.gen_code(ast);
-
-        // restore the code
-        code = code.replace(new RegExp('('+ separator + ')', 'g'), '\\ufffd');
-      }
-
-      callback(error, code);
-    })
-  })
-};
-
-/**
- * Builder version is also the current client version
- * this way we don't have to do another include for the
- * clients version number and we can just include the builder.
- *
- * @type {String}
- * @api public
- */
-builder.version = socket.version;
-
-/**
- * A list of all build in transport types.
- *
- * @type {Object}
- * @api public
- */
-builder.transports = baseTransports;
-
-/**
- * Command line support, this allows us to generate builds without having
- * to load it as module.
- */
-if (!module.parent){
-  // the first 2 are `node` and the path to this file, we don't need them
-  var args = process.argv.slice(2);
-
-  // build a development build
-  builder(args.length ? args : false, { minify:false }, function (err, content) {
-    if (err) return console.error(err);
-
-    fs.write(
-        fs.openSync(__dirname + '/../dist/socket.io.js', 'w')
-      , content
-      , 0
-      , 'utf8'
-    );
-    console.log('Successfully generated the development build: socket.io.js');
-  });
-
-  // and build a production build
-  builder(args.length ? args : false, function (err, content) {
-    if (err) return console.error(err);
-    fs.write(
-        fs.openSync(__dirname + '/../dist/socket.io.min.js', 'w')
-      , content
-      , 0
-      , 'utf8'
-    );
-    console.log('Successfully generated the production build: socket.io.min.js');
-  });
-}
diff --git a/node/node_modules/socket.io-client/dist/WebSocketMain.swf b/node/node_modules/socket.io-client/dist/WebSocketMain.swf
deleted file mode 100644 (file)
index 20a451f..0000000
Binary files a/node/node_modules/socket.io-client/dist/WebSocketMain.swf and /dev/null differ
diff --git a/node/node_modules/socket.io-client/dist/WebSocketMainInsecure.swf b/node/node_modules/socket.io-client/dist/WebSocketMainInsecure.swf
deleted file mode 100644 (file)
index 5949ff3..0000000
Binary files a/node/node_modules/socket.io-client/dist/WebSocketMainInsecure.swf and /dev/null differ
diff --git a/node/node_modules/socket.io-client/dist/socket.io.js b/node/node_modules/socket.io-client/dist/socket.io.js
deleted file mode 100644 (file)
index 5a8e8e2..0000000
+++ /dev/null
@@ -1,3707 +0,0 @@
-/*! Socket.IO.js build:0.8.4, development. Copyright(c) 2011 LearnBoost <dev@learnboost.com> MIT Licensed */
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports) {
-
-  /**
-   * IO namespace.
-   *
-   * @namespace
-   */
-
-  var io = exports;
-
-  /**
-   * Socket.IO version
-   *
-   * @api public
-   */
-
-  io.version = '0.8.4';
-
-  /**
-   * Protocol implemented.
-   *
-   * @api public
-   */
-
-  io.protocol = 1;
-
-  /**
-   * Available transports, these will be populated with the available transports
-   *
-   * @api public
-   */
-
-  io.transports = [];
-
-  /**
-   * Keep track of jsonp callbacks.
-   *
-   * @api private
-   */
-
-  io.j = [];
-
-  /**
-   * Keep track of our io.Sockets
-   *
-   * @api private
-   */
-  io.sockets = {};
-
-
-  /**
-   * Manages connections to hosts.
-   *
-   * @param {String} uri
-   * @Param {Boolean} force creation of new socket (defaults to false)
-   * @api public
-   */
-
-  io.connect = function (host, details) {
-    var uri = io.util.parseUri(host)
-      , uuri
-      , socket;
-
-    if ('undefined' != typeof document) {
-      uri.protocol = uri.protocol || document.location.protocol.slice(0, -1);
-      uri.host = uri.host || document.domain;
-      uri.port = uri.port || document.location.port;
-    }
-
-    uuri = io.util.uniqueUri(uri);
-
-    var options = {
-        host: uri.host
-      , secure: 'https' == uri.protocol
-      , port: uri.port || ('https' == uri.protocol ? 443 : 80)
-      , query: uri.query || ''
-    };
-
-    io.util.merge(options, details);
-
-    if (options['force new connection'] || !io.sockets[uuri]) {
-      socket = new io.Socket(options);
-    }
-
-    if (!options['force new connection'] && socket) {
-      io.sockets[uuri] = socket;
-    }
-
-    socket = socket || io.sockets[uuri];
-
-    // if path is different from '' or /
-    return socket.of(uri.path.length > 1 ? uri.path : '');
-  };
-
-})('object' === typeof module ? module.exports : (window.io = {}));
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, global) {
-
-  /**
-   * Utilities namespace.
-   *
-   * @namespace
-   */
-
-  var util = exports.util = {};
-
-  /**
-   * Parses an URI
-   *
-   * @author Steven Levithan <stevenlevithan.com> (MIT license)
-   * @api public
-   */
-
-  var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
-
-  var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password',
-               'host', 'port', 'relative', 'path', 'directory', 'file', 'query',
-               'anchor'];
-
-  util.parseUri = function (str) {
-    var m = re.exec(str || '')
-      , uri = {}
-      , i = 14;
-
-    while (i--) {
-      uri[parts[i]] = m[i] || '';
-    }
-
-    return uri;
-  };
-
-  /**
-   * Produces a unique url that identifies a Socket.IO connection.
-   *
-   * @param {Object} uri
-   * @api public
-   */
-
-  util.uniqueUri = function (uri) {
-    var protocol = uri.protocol
-      , host = uri.host
-      , port = uri.port;
-
-    if ('document' in global) {
-      host = host || document.domain;
-      port = port || (protocol == 'https'
-        && document.location.protocol !== 'https:' ? 443 : document.location.port);
-    } else {
-      host = host || 'localhost';
-
-      if (!port && protocol == 'https') {
-        port = 443;
-      }
-    }
-
-    return (protocol || 'http') + '://' + host + ':' + (port || 80);
-  };
-
-  /**
-   * Mergest 2 query strings in to once unique query string
-   *
-   * @param {String} base
-   * @param {String} addition
-   * @api public
-   */
-
-  util.query = function (base, addition) {
-    var query = util.chunkQuery(base || '')
-      , components = [];
-
-    util.merge(query, util.chunkQuery(addition || ''));
-    for (var part in query) {
-      if (query.hasOwnProperty(part)) {
-        components.push(part + '=' + query[part]);
-      }
-    }
-
-    return components.length ? '?' + components.join('&') : '';
-  };
-
-  /**
-   * Transforms a querystring in to an object
-   *
-   * @param {String} qs
-   * @api public
-   */
-
-  util.chunkQuery = function (qs) {
-    var query = {}
-      , params = qs.split('&')
-      , i = 0
-      , l = params.length
-      , kv;
-
-    for (; i < l; ++i) {
-      kv = params[i].split('=');
-      if (kv[0]) {
-        query[kv[0]] = decodeURIComponent(kv[1]);
-      }
-    }
-
-    return query;
-  };
-
-  /**
-   * Executes the given function when the page is loaded.
-   *
-   *     io.util.load(function () { console.log('page loaded'); });
-   *
-   * @param {Function} fn
-   * @api public
-   */
-
-  var pageLoaded = false;
-
-  util.load = function (fn) {
-    if ('document' in global && document.readyState === 'complete' || pageLoaded) {
-      return fn();
-    }
-
-    util.on(global, 'load', fn, false);
-  };
-
-  /**
-   * Adds an event.
-   *
-   * @api private
-   */
-
-  util.on = function (element, event, fn, capture) {
-    if (element.attachEvent) {
-      element.attachEvent('on' + event, fn);
-    } else if (element.addEventListener) {
-      element.addEventListener(event, fn, capture);
-    }
-  };
-
-  /**
-   * Generates the correct `XMLHttpRequest` for regular and cross domain requests.
-   *
-   * @param {Boolean} [xdomain] Create a request that can be used cross domain.
-   * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest.
-   * @api private
-   */
-
-  util.request = function (xdomain) {
-
-    if ('undefined' != typeof window) {
-      if (xdomain && window.XDomainRequest) {
-        return new XDomainRequest();
-      }
-
-      if (window.XMLHttpRequest && (!xdomain || util.ua.hasCORS)) {
-        return new XMLHttpRequest();
-      }
-
-      if (!xdomain) {
-        try {
-          return new window.ActiveXObject('Microsoft.XMLHTTP');
-        } catch(e) { }
-      }
-    }
-
-    return null;
-  };
-
-  /**
-   * XHR based transport constructor.
-   *
-   * @constructor
-   * @api public
-   */
-
-  /**
-   * Change the internal pageLoaded value.
-   */
-
-  if ('undefined' != typeof window) {
-    util.load(function () {
-      pageLoaded = true;
-    });
-  }
-
-  /**
-   * Defers a function to ensure a spinner is not displayed by the browser
-   *
-   * @param {Function} fn
-   * @api public
-   */
-
-  util.defer = function (fn) {
-    if (!util.ua.webkit) {
-      return fn();
-    }
-
-    util.load(function () {
-      setTimeout(fn, 100);
-    });
-  };
-
-  /**
-   * Merges two objects.
-   *
-   * @api public
-   */
-  
-  util.merge = function merge (target, additional, deep, lastseen) {
-    var seen = lastseen || []
-      , depth = typeof deep == 'undefined' ? 2 : deep
-      , prop;
-
-    for (prop in additional) {
-      if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) {
-        if (typeof target[prop] !== 'object' || !depth) {
-          target[prop] = additional[prop];
-          seen.push(additional[prop]);
-        } else {
-          util.merge(target[prop], additional[prop], depth - 1, seen);
-        }
-      }
-    }
-
-    return target;
-  };
-
-  /**
-   * Merges prototypes from objects
-   *
-   * @api public
-   */
-  
-  util.mixin = function (ctor, ctor2) {
-    util.merge(ctor.prototype, ctor2.prototype);
-  };
-
-  /**
-   * Shortcut for prototypical and static inheritance.
-   *
-   * @api private
-   */
-
-  util.inherit = function (ctor, ctor2) {
-    function f() {};
-    f.prototype = ctor2.prototype;
-    ctor.prototype = new f;
-  };
-
-  /**
-   * Checks if the given object is an Array.
-   *
-   *     io.util.isArray([]); // true
-   *     io.util.isArray({}); // false
-   *
-   * @param Object obj
-   * @api public
-   */
-
-  util.isArray = Array.isArray || function (obj) {
-    return Object.prototype.toString.call(obj) === '[object Array]';
-  };
-
-  /**
-   * Intersects values of two arrays into a third
-   *
-   * @api public
-   */
-
-  util.intersect = function (arr, arr2) {
-    var ret = []
-      , longest = arr.length > arr2.length ? arr : arr2
-      , shortest = arr.length > arr2.length ? arr2 : arr;
-
-    for (var i = 0, l = shortest.length; i < l; i++) {
-      if (~util.indexOf(longest, shortest[i]))
-        ret.push(shortest[i]);
-    }
-
-    return ret;
-  }
-
-  /**
-   * Array indexOf compatibility.
-   *
-   * @see bit.ly/a5Dxa2
-   * @api public
-   */
-
-  util.indexOf = function (arr, o, i) {
-    if (Array.prototype.indexOf) {
-      return Array.prototype.indexOf.call(arr, o, i);
-    }
-
-    for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; 
-         i < j && arr[i] !== o; i++);
-
-    return j <= i ? -1 : i;
-  };
-
-  /**
-   * Converts enumerables to array.
-   *
-   * @api public
-   */
-
-  util.toArray = function (enu) {
-    var arr = [];
-
-    for (var i = 0, l = enu.length; i < l; i++)
-      arr.push(enu[i]);
-
-    return arr;
-  };
-
-  /**
-   * UA / engines detection namespace.
-   *
-   * @namespace
-   */
-
-  util.ua = {};
-
-  /**
-   * Whether the UA supports CORS for XHR.
-   *
-   * @api public
-   */
-
-  util.ua.hasCORS = 'undefined' != typeof window && window.XMLHttpRequest &&
-  (function () {
-    try {
-      var a = new XMLHttpRequest();
-    } catch (e) {
-      return false;
-    }
-
-    return a.withCredentials != undefined;
-  })();
-
-  /**
-   * Detect webkit.
-   *
-   * @api public
-   */
-
-  util.ua.webkit = 'undefined' != typeof navigator
-    && /webkit/i.test(navigator.userAgent);
-
-})(
-    'undefined' != typeof window ? io : module.exports
-  , this
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.EventEmitter = EventEmitter;
-
-  /**
-   * Event emitter constructor.
-   *
-   * @api public.
-   */
-
-  function EventEmitter () {};
-
-  /**
-   * Adds a listener
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.on = function (name, fn) {
-    if (!this.$events) {
-      this.$events = {};
-    }
-
-    if (!this.$events[name]) {
-      this.$events[name] = fn;
-    } else if (io.util.isArray(this.$events[name])) {
-      this.$events[name].push(fn);
-    } else {
-      this.$events[name] = [this.$events[name], fn];
-    }
-
-    return this;
-  };
-
-  EventEmitter.prototype.addListener = EventEmitter.prototype.on;
-
-  /**
-   * Adds a volatile listener.
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.once = function (name, fn) {
-    var self = this;
-
-    function on () {
-      self.removeListener(name, on);
-      fn.apply(this, arguments);
-    };
-
-    on.listener = fn;
-    this.on(name, on);
-
-    return this;
-  };
-
-  /**
-   * Removes a listener.
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.removeListener = function (name, fn) {
-    if (this.$events && this.$events[name]) {
-      var list = this.$events[name];
-
-      if (io.util.isArray(list)) {
-        var pos = -1;
-
-        for (var i = 0, l = list.length; i < l; i++) {
-          if (list[i] === fn || (list[i].listener && list[i].listener === fn)) {
-            pos = i;
-            break;
-          }
-        }
-
-        if (pos < 0) {
-          return this;
-        }
-
-        list.splice(pos, 1);
-
-        if (!list.length) {
-          delete this.$events[name];
-        }
-      } else if (list === fn || (list.listener && list.listener === fn)) {
-        delete this.$events[name];
-      }
-    }
-
-    return this;
-  };
-
-  /**
-   * Removes all listeners for an event.
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.removeAllListeners = function (name) {
-    // TODO: enable this when node 0.5 is stable
-    //if (name === undefined) {
-      //this.$events = {};
-      //return this;
-    //}
-
-    if (this.$events && this.$events[name]) {
-      this.$events[name] = null;
-    }
-
-    return this;
-  };
-
-  /**
-   * Gets all listeners for a certain event.
-   *
-   * @api publci
-   */
-
-  EventEmitter.prototype.listeners = function (name) {
-    if (!this.$events) {
-      this.$events = {};
-    }
-
-    if (!this.$events[name]) {
-      this.$events[name] = [];
-    }
-
-    if (!io.util.isArray(this.$events[name])) {
-      this.$events[name] = [this.$events[name]];
-    }
-
-    return this.$events[name];
-  };
-
-  /**
-   * Emits an event.
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.emit = function (name) {
-    if (!this.$events) {
-      return false;
-    }
-
-    var handler = this.$events[name];
-
-    if (!handler) {
-      return false;
-    }
-
-    var args = Array.prototype.slice.call(arguments, 1);
-
-    if ('function' == typeof handler) {
-      handler.apply(this, args);
-    } else if (io.util.isArray(handler)) {
-      var listeners = handler.slice();
-
-      for (var i = 0, l = listeners.length; i < l; i++) {
-        listeners[i].apply(this, args);
-      }
-    } else {
-      return false;
-    }
-
-    return true;
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Based on JSON2 (http://www.JSON.org/js.html).
- */
-
-(function (exports, nativeJSON) {
-  "use strict";
-
-  // use native JSON if it's available
-  if (nativeJSON && nativeJSON.parse){
-    return exports.JSON = {
-      parse: nativeJSON.parse
-    , stringify: nativeJSON.stringify
-    }
-  }
-
-  var JSON = exports.JSON = {};
-
-  function f(n) {
-      // Format integers to have at least two digits.
-      return n < 10 ? '0' + n : n;
-  }
-
-  function date(d, key) {
-    return isFinite(d.valueOf()) ?
-        d.getUTCFullYear()     + '-' +
-        f(d.getUTCMonth() + 1) + '-' +
-        f(d.getUTCDate())      + 'T' +
-        f(d.getUTCHours())     + ':' +
-        f(d.getUTCMinutes())   + ':' +
-        f(d.getUTCSeconds())   + 'Z' : null;
-  };
-
-  var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-      escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-      gap,
-      indent,
-      meta = {    // table of character substitutions
-          '\b': '\\b',
-          '\t': '\\t',
-          '\n': '\\n',
-          '\f': '\\f',
-          '\r': '\\r',
-          '"' : '\\"',
-          '\\': '\\\\'
-      },
-      rep;
-
-
-  function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
-      escapable.lastIndex = 0;
-      return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
-          var c = meta[a];
-          return typeof c === 'string' ? c :
-              '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-      }) + '"' : '"' + string + '"';
-  }
-
-
-  function str(key, holder) {
-
-// Produce a string from holder[key].
-
-      var i,          // The loop counter.
-          k,          // The member key.
-          v,          // The member value.
-          length,
-          mind = gap,
-          partial,
-          value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
-      if (value instanceof Date) {
-          value = date(key);
-      }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
-      if (typeof rep === 'function') {
-          value = rep.call(holder, key, value);
-      }
-
-// What happens next depends on the value's type.
-
-      switch (typeof value) {
-      case 'string':
-          return quote(value);
-
-      case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
-          return isFinite(value) ? String(value) : 'null';
-
-      case 'boolean':
-      case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
-          return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
-      case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
-          if (!value) {
-              return 'null';
-          }
-
-// Make an array to hold the partial results of stringifying this object value.
-
-          gap += indent;
-          partial = [];
-
-// Is the value an array?
-
-          if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
-              length = value.length;
-              for (i = 0; i < length; i += 1) {
-                  partial[i] = str(i, value) || 'null';
-              }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
-              v = partial.length === 0 ? '[]' : gap ?
-                  '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
-                  '[' + partial.join(',') + ']';
-              gap = mind;
-              return v;
-          }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
-          if (rep && typeof rep === 'object') {
-              length = rep.length;
-              for (i = 0; i < length; i += 1) {
-                  if (typeof rep[i] === 'string') {
-                      k = rep[i];
-                      v = str(k, value);
-                      if (v) {
-                          partial.push(quote(k) + (gap ? ': ' : ':') + v);
-                      }
-                  }
-              }
-          } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
-              for (k in value) {
-                  if (Object.prototype.hasOwnProperty.call(value, k)) {
-                      v = str(k, value);
-                      if (v) {
-                          partial.push(quote(k) + (gap ? ': ' : ':') + v);
-                      }
-                  }
-              }
-          }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
-          v = partial.length === 0 ? '{}' : gap ?
-              '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
-              '{' + partial.join(',') + '}';
-          gap = mind;
-          return v;
-      }
-  }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
-  JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
-      var i;
-      gap = '';
-      indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
-      if (typeof space === 'number') {
-          for (i = 0; i < space; i += 1) {
-              indent += ' ';
-          }
-
-// If the space parameter is a string, it will be used as the indent string.
-
-      } else if (typeof space === 'string') {
-          indent = space;
-      }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
-      rep = replacer;
-      if (replacer && typeof replacer !== 'function' &&
-              (typeof replacer !== 'object' ||
-              typeof replacer.length !== 'number')) {
-          throw new Error('JSON.stringify');
-      }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
-      return str('', {'': value});
-  };
-
-// If the JSON object does not yet have a parse method, give it one.
-
-  JSON.parse = function (text, reviver) {
-  // The parse method takes a text and an optional reviver function, and returns
-  // a JavaScript value if the text is a valid JSON text.
-
-      var j;
-
-      function walk(holder, key) {
-
-  // The walk method is used to recursively walk the resulting structure so
-  // that modifications can be made.
-
-          var k, v, value = holder[key];
-          if (value && typeof value === 'object') {
-              for (k in value) {
-                  if (Object.prototype.hasOwnProperty.call(value, k)) {
-                      v = walk(value, k);
-                      if (v !== undefined) {
-                          value[k] = v;
-                      } else {
-                          delete value[k];
-                      }
-                  }
-              }
-          }
-          return reviver.call(holder, key, value);
-      }
-
-
-  // Parsing happens in four stages. In the first stage, we replace certain
-  // Unicode characters with escape sequences. JavaScript handles many characters
-  // incorrectly, either silently deleting them, or treating them as line endings.
-
-      text = String(text);
-      cx.lastIndex = 0;
-      if (cx.test(text)) {
-          text = text.replace(cx, function (a) {
-              return '\\u' +
-                  ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-          });
-      }
-
-  // In the second stage, we run the text against regular expressions that look
-  // for non-JSON patterns. We are especially concerned with '()' and 'new'
-  // because they can cause invocation, and '=' because it can cause mutation.
-  // But just to be safe, we want to reject all unexpected forms.
-
-  // We split the second stage into 4 regexp operations in order to work around
-  // crippling inefficiencies in IE's and Safari's regexp engines. First we
-  // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-  // replace all simple value tokens with ']' characters. Third, we delete all
-  // open brackets that follow a colon or comma or that begin the text. Finally,
-  // we look to see that the remaining characters are only whitespace or ']' or
-  // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
-      if (/^[\],:{}\s]*$/
-              .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
-                  .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
-                  .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-  // In the third stage we use the eval function to compile the text into a
-  // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-  // in JavaScript: it can begin a block or an object literal. We wrap the text
-  // in parens to eliminate the ambiguity.
-
-          j = eval('(' + text + ')');
-
-  // In the optional fourth stage, we recursively walk the new structure, passing
-  // each name/value pair to a reviver function for possible transformation.
-
-          return typeof reviver === 'function' ?
-              walk({'': j}, '') : j;
-      }
-
-  // If the text is not JSON parseable, then a SyntaxError is thrown.
-
-      throw new SyntaxError('JSON.parse');
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , typeof JSON !== 'undefined' ? JSON : undefined
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Parser namespace.
-   *
-   * @namespace
-   */
-
-  var parser = exports.parser = {};
-
-  /**
-   * Packet types.
-   */
-
-  var packets = parser.packets = [
-      'disconnect'
-    , 'connect'
-    , 'heartbeat'
-    , 'message'
-    , 'json'
-    , 'event'
-    , 'ack'
-    , 'error'
-    , 'noop'
-  ];
-
-  /**
-   * Errors reasons.
-   */
-
-  var reasons = parser.reasons = [
-      'transport not supported'
-    , 'client not handshaken'
-    , 'unauthorized'
-  ];
-
-  /**
-   * Errors advice.
-   */
-
-  var advice = parser.advice = [
-      'reconnect'
-  ];
-
-  /**
-   * Shortcuts.
-   */
-
-  var JSON = io.JSON
-    , indexOf = io.util.indexOf;
-
-  /**
-   * Encodes a packet.
-   *
-   * @api private
-   */
-
-  parser.encodePacket = function (packet) {
-    var type = indexOf(packets, packet.type)
-      , id = packet.id || ''
-      , endpoint = packet.endpoint || ''
-      , ack = packet.ack
-      , data = null;
-
-    switch (packet.type) {
-      case 'error':
-        var reason = packet.reason ? indexOf(reasons, packet.reason) : ''
-          , adv = packet.advice ? indexOf(advice, packet.advice) : '';
-
-        if (reason !== '' || adv !== '')
-          data = reason + (adv !== '' ? ('+' + adv) : '');
-
-        break;
-
-      case 'message':
-        if (packet.data !== '')
-          data = packet.data;
-        break;
-
-      case 'event':
-        var ev = { name: packet.name };
-
-        if (packet.args && packet.args.length) {
-          ev.args = packet.args;
-        }
-
-        data = JSON.stringify(ev);
-        break;
-
-      case 'json':
-        data = JSON.stringify(packet.data);
-        break;
-
-      case 'connect':
-        if (packet.qs)
-          data = packet.qs;
-        break;
-
-      case 'ack':
-        data = packet.ackId
-          + (packet.args && packet.args.length
-              ? '+' + JSON.stringify(packet.args) : '');
-        break;
-    }
-
-    // construct packet with required fragments
-    var encoded = [
-        type
-      , id + (ack == 'data' ? '+' : '')
-      , endpoint
-    ];
-
-    // data fragment is optional
-    if (data !== null && data !== undefined)
-      encoded.push(data);
-
-    return encoded.join(':');
-  };
-
-  /**
-   * Encodes multiple messages (payload).
-   *
-   * @param {Array} messages
-   * @api private
-   */
-
-  parser.encodePayload = function (packets) {
-    var decoded = '';
-
-    if (packets.length == 1)
-      return packets[0];
-
-    for (var i = 0, l = packets.length; i < l; i++) {
-      var packet = packets[i];
-      decoded += '\ufffd' + packet.length + '\ufffd' + packets[i];
-    }
-
-    return decoded;
-  };
-
-  /**
-   * Decodes a packet
-   *
-   * @api private
-   */
-
-  var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/;
-
-  parser.decodePacket = function (data) {
-    var pieces = data.match(regexp);
-
-    if (!pieces) return {};
-
-    var id = pieces[2] || ''
-      , data = pieces[5] || ''
-      , packet = {
-            type: packets[pieces[1]]
-          , endpoint: pieces[4] || ''
-        };
-
-    // whether we need to acknowledge the packet
-    if (id) {
-      packet.id = id;
-      if (pieces[3])
-        packet.ack = 'data';
-      else
-        packet.ack = true;
-    }
-
-    // handle different packet types
-    switch (packet.type) {
-      case 'error':
-        var pieces = data.split('+');
-        packet.reason = reasons[pieces[0]] || '';
-        packet.advice = advice[pieces[1]] || '';
-        break;
-
-      case 'message':
-        packet.data = data || '';
-        break;
-
-      case 'event':
-        try {
-          var opts = JSON.parse(data);
-          packet.name = opts.name;
-          packet.args = opts.args;
-        } catch (e) { }
-
-        packet.args = packet.args || [];
-        break;
-
-      case 'json':
-        try {
-          packet.data = JSON.parse(data);
-        } catch (e) { }
-        break;
-
-      case 'connect':
-        packet.qs = data || '';
-        break;
-
-      case 'ack':
-        var pieces = data.match(/^([0-9]+)(\+)?(.*)/);
-        if (pieces) {
-          packet.ackId = pieces[1];
-          packet.args = [];
-
-          if (pieces[3]) {
-            try {
-              packet.args = pieces[3] ? JSON.parse(pieces[3]) : [];
-            } catch (e) { }
-          }
-        }
-        break;
-
-      case 'disconnect':
-      case 'heartbeat':
-        break;
-    };
-
-    return packet;
-  };
-
-  /**
-   * Decodes data payload. Detects multiple messages
-   *
-   * @return {Array} messages
-   * @api public
-   */
-
-  parser.decodePayload = function (data) {
-    // IE doesn't like data[i] for unicode chars, charAt works fine
-    if (data.charAt(0) == '\ufffd') {
-      var ret = [];
-
-      for (var i = 1, length = ''; i < data.length; i++) {
-        if (data.charAt(i) == '\ufffd') {
-          ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length)));
-          i += Number(length) + 1;
-          length = '';
-        } else {
-          length += data.charAt(i);
-        }
-      }
-
-      return ret;
-    } else {
-      return [parser.decodePacket(data)];
-    }
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.Transport = Transport;
-
-  /**
-   * This is the transport template for all supported transport methods.
-   *
-   * @constructor
-   * @api public
-   */
-
-  function Transport (socket, sessid) {
-    this.socket = socket;
-    this.sessid = sessid;
-  };
-
-  /**
-   * Apply EventEmitter mixin.
-   */
-
-  io.util.mixin(Transport, io.EventEmitter);
-
-  /**
-   * Handles the response from the server. When a new response is received
-   * it will automatically update the timeout, decode the message and
-   * forwards the response to the onMessage function for further processing.
-   *
-   * @param {String} data Response from the server.
-   * @api private
-   */
-
-  Transport.prototype.onData = function (data) {
-    this.clearCloseTimeout();
-    this.setCloseTimeout();
-
-    if (data !== '') {
-      // todo: we should only do decodePayload for xhr transports
-      var msgs = io.parser.decodePayload(data);
-
-      if (msgs && msgs.length) {
-        for (var i = 0, l = msgs.length; i < l; i++) {
-          this.onPacket(msgs[i]);
-        }
-      }
-    }
-
-    return this;
-  };
-
-  /**
-   * Handles packets.
-   *
-   * @api private
-   */
-
-  Transport.prototype.onPacket = function (packet) {
-    if (packet.type == 'heartbeat') {
-      return this.onHeartbeat();
-    }
-
-    if (packet.type == 'connect' && packet.endpoint == '') {
-      this.onConnect();
-    }
-
-    this.socket.onPacket(packet);
-
-    return this;
-  };
-
-  /**
-   * Sets close timeout
-   *
-   * @api private
-   */
-  
-  Transport.prototype.setCloseTimeout = function () {
-    if (!this.closeTimeout) {
-      var self = this;
-
-      this.closeTimeout = setTimeout(function () {
-        self.onDisconnect();
-      }, this.socket.closeTimeout);
-    }
-  };
-
-  /**
-   * Called when transport disconnects.
-   *
-   * @api private
-   */
-
-  Transport.prototype.onDisconnect = function () {
-    if (this.close) this.close();
-    this.clearTimeouts();
-    this.socket.onDisconnect();
-    return this;
-  };
-
-  /**
-   * Called when transport connects
-   *
-   * @api private
-   */
-
-  Transport.prototype.onConnect = function () {
-    this.socket.onConnect();
-    return this;
-  }
-
-  /**
-   * Clears close timeout
-   *
-   * @api private
-   */
-
-  Transport.prototype.clearCloseTimeout = function () {
-    if (this.closeTimeout) {
-      clearTimeout(this.closeTimeout);
-      this.closeTimeout = null;
-    }
-  };
-
-  /**
-   * Clear timeouts
-   *
-   * @api private
-   */
-
-  Transport.prototype.clearTimeouts = function () {
-    this.clearCloseTimeout();
-
-    if (this.reopenTimeout) {
-      clearTimeout(this.reopenTimeout);
-    }
-  };
-
-  /**
-   * Sends a packet
-   *
-   * @param {Object} packet object.
-   * @api private
-   */
-
-  Transport.prototype.packet = function (packet) {
-    this.send(io.parser.encodePacket(packet));
-  };
-
-  /**
-   * Send the received heartbeat message back to server. So the server
-   * knows we are still connected.
-   *
-   * @param {String} heartbeat Heartbeat response from the server.
-   * @api private
-   */
-
-  Transport.prototype.onHeartbeat = function (heartbeat) {
-    this.packet({ type: 'heartbeat' });
-  };
-  /**
-   * Called when the transport opens.
-   *
-   * @api private
-   */
-
-  Transport.prototype.onOpen = function () {
-    this.open = true;
-    this.clearCloseTimeout();
-    this.socket.onOpen();
-  };
-
-  /**
-   * Notifies the base when the connection with the Socket.IO server
-   * has been disconnected.
-   *
-   * @api private
-   */
-
-  Transport.prototype.onClose = function () {
-    var self = this;
-
-    /* FIXME: reopen delay causing a infinit loop
-    this.reopenTimeout = setTimeout(function () {
-      self.open();
-    }, this.socket.options['reopen delay']);*/
-
-    this.open = false;
-    this.setCloseTimeout();
-    this.socket.onClose();
-  };
-
-  /**
-   * Generates a connection url based on the Socket.IO URL Protocol.
-   * See <https://github.com/learnboost/socket.io-node/> for more details.
-   *
-   * @returns {String} Connection url
-   * @api private
-   */
-
-  Transport.prototype.prepareUrl = function () {
-    var options = this.socket.options;
-
-    return this.scheme() + '://'
-      + options.host + ':' + options.port + '/'
-      + options.resource + '/' + io.protocol
-      + '/' + this.name + '/' + this.sessid;
-  };
-
-  /**
-   * Checks if the transport is ready to start a connection.
-   *
-   * @param {Socket} socket The socket instance that needs a transport
-   * @param {Function} fn The callback
-   * @api private
-   */
-
-  Transport.prototype.ready = function (socket, fn) {
-    fn.call(this);
-  };
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io, global) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.Socket = Socket;
-
-  /**
-   * Create a new `Socket.IO client` which can establish a persistent
-   * connection with a Socket.IO enabled server.
-   *
-   * @api public
-   */
-
-  function Socket (options) {
-    this.options = {
-        port: 80
-      , secure: false
-      , document: 'document' in global ? document : false
-      , resource: 'socket.io'
-      , transports: io.transports
-      , 'connect timeout': 10000
-      , 'try multiple transports': true
-      , 'reconnect': true
-      , 'reconnection delay': 500
-      , 'reconnection limit': Infinity
-      , 'reopen delay': 3000
-      , 'max reconnection attempts': 10
-      , 'sync disconnect on unload': true
-      , 'auto connect': true
-      , 'flash policy port': 10843
-    };
-
-    io.util.merge(this.options, options);
-
-    this.connected = false;
-    this.open = false;
-    this.connecting = false;
-    this.reconnecting = false;
-    this.namespaces = {};
-    this.buffer = [];
-    this.doBuffer = false;
-
-    if (this.options['sync disconnect on unload'] &&
-        (!this.isXDomain() || io.util.ua.hasCORS)) {
-      var self = this;
-
-      io.util.on(global, 'beforeunload', function () {
-        self.disconnectSync();
-      }, false);
-    }
-
-    if (this.options['auto connect']) {
-      this.connect();
-    }
-};
-
-  /**
-   * Apply EventEmitter mixin.
-   */
-
-  io.util.mixin(Socket, io.EventEmitter);
-
-  /**
-   * Returns a namespace listener/emitter for this socket
-   *
-   * @api public
-   */
-
-  Socket.prototype.of = function (name) {
-    if (!this.namespaces[name]) {
-      this.namespaces[name] = new io.SocketNamespace(this, name);
-
-      if (name !== '') {
-        this.namespaces[name].packet({ type: 'connect' });
-      }
-    }
-
-    return this.namespaces[name];
-  };
-
-  /**
-   * Emits the given event to the Socket and all namespaces
-   *
-   * @api private
-   */
-
-  Socket.prototype.publish = function () {
-    this.emit.apply(this, arguments);
-
-    var nsp;
-
-    for (var i in this.namespaces) {
-      if (this.namespaces.hasOwnProperty(i)) {
-        nsp = this.of(i);
-        nsp.$emit.apply(nsp, arguments);
-      }
-    }
-  };
-
-  /**
-   * Performs the handshake
-   *
-   * @api private
-   */
-
-  function empty () { };
-
-  Socket.prototype.handshake = function (fn) {
-    var self = this
-      , options = this.options;
-
-    function complete (data) {
-      if (data instanceof Error) {
-        self.onError(data.message);
-      } else {
-        fn.apply(null, data.split(':'));
-      }
-    };
-
-    var url = [
-          'http' + (options.secure ? 's' : '') + ':/'
-        , options.host + ':' + options.port
-        , this.options.resource
-        , io.protocol
-        , io.util.query(this.options.query, 't=' + +new Date)
-      ].join('/');
-
-    if (this.isXDomain()) {
-      var insertAt = document.getElementsByTagName('script')[0]
-        , script = document.createElement('script');
-
-      script.src = url + '&jsonp=' + io.j.length;
-      insertAt.parentNode.insertBefore(script, insertAt);
-
-      io.j.push(function (data) {
-        complete(data);
-        script.parentNode.removeChild(script);
-      });
-    } else {
-      var xhr = io.util.request();
-
-      xhr.open('GET', url, true);
-      xhr.onreadystatechange = function () {
-        if (xhr.readyState == 4) {
-          xhr.onreadystatechange = empty;
-
-          if (xhr.status == 200) {
-            complete(xhr.responseText);
-          } else {
-            !self.reconnecting && self.onError(xhr.responseText);
-          }
-        }
-      };
-      xhr.send(null);
-    }
-  };
-
-  /**
-   * Find an available transport based on the options supplied in the constructor.
-   *
-   * @api private
-   */
-
-  Socket.prototype.getTransport = function (override) {
-    var transports = override || this.transports, match;
-
-    for (var i = 0, transport; transport = transports[i]; i++) {
-      if (io.Transport[transport]
-        && io.Transport[transport].check(this)
-        && (!this.isXDomain() || io.Transport[transport].xdomainCheck())) {
-        return new io.Transport[transport](this, this.sessionid);
-      }
-    }
-
-    return null;
-  };
-
-  /**
-   * Connects to the server.
-   *
-   * @param {Function} [fn] Callback.
-   * @returns {io.Socket}
-   * @api public
-   */
-
-  Socket.prototype.connect = function (fn) {
-    if (this.connecting) {
-      return this;
-    }
-
-    var self = this;
-
-    this.handshake(function (sid, heartbeat, close, transports) {
-      self.sessionid = sid;
-      self.closeTimeout = close * 1000;
-      self.heartbeatTimeout = heartbeat * 1000;
-      self.transports = io.util.intersect(
-          transports.split(',')
-        , self.options.transports
-      );
-
-      function connect (transports){
-        if (self.transport) self.transport.clearTimeouts();
-
-        self.transport = self.getTransport(transports);
-        if (!self.transport) return self.publish('connect_failed');
-
-        // once the transport is ready
-        self.transport.ready(self, function () {
-          self.connecting = true;
-          self.publish('connecting', self.transport.name);
-          self.transport.open();
-
-          if (self.options['connect timeout']) {
-            self.connectTimeoutTimer = setTimeout(function () {
-              if (!self.connected) {
-                self.connecting = false;
-
-                if (self.options['try multiple transports']) {
-                  if (!self.remainingTransports) {
-                    self.remainingTransports = self.transports.slice(0);
-                  }
-
-                  var remaining = self.remainingTransports;
-
-                  while (remaining.length > 0 && remaining.splice(0,1)[0] !=
-                         self.transport.name) {}
-
-                    if (remaining.length){
-                      connect(remaining);
-                    } else {
-                      self.publish('connect_failed');
-                    }
-                }
-              }
-            }, self.options['connect timeout']);
-          }
-        });
-      }
-
-      connect();
-
-      self.once('connect', function (){
-        clearTimeout(self.connectTimeoutTimer);
-
-        fn && typeof fn == 'function' && fn();
-      });
-    });
-
-    return this;
-  };
-
-  /**
-   * Sends a message.
-   *
-   * @param {Object} data packet.
-   * @returns {io.Socket}
-   * @api public
-   */
-
-  Socket.prototype.packet = function (data) {
-    if (this.connected && !this.doBuffer) {
-      this.transport.packet(data);
-    } else {
-      this.buffer.push(data);
-    }
-
-    return this;
-  };
-
-  /**
-   * Sets buffer state
-   *
-   * @api private
-   */
-
-  Socket.prototype.setBuffer = function (v) {
-    this.doBuffer = v;
-
-    if (!v && this.connected && this.buffer.length) {
-      this.transport.payload(this.buffer);
-      this.buffer = [];
-    }
-  };
-
-  /**
-   * Disconnect the established connect.
-   *
-   * @returns {io.Socket}
-   * @api public
-   */
-
-  Socket.prototype.disconnect = function () {
-    if (this.connected) {
-      if (this.open) {
-        this.of('').packet({ type: 'disconnect' });
-      }
-
-      // handle disconnection immediately
-      this.onDisconnect('booted');
-    }
-
-    return this;
-  };
-
-  /**
-   * Disconnects the socket with a sync XHR.
-   *
-   * @api private
-   */
-
-  Socket.prototype.disconnectSync = function () {
-    // ensure disconnection
-    var xhr = io.util.request()
-      , uri = this.resource + '/' + io.protocol + '/' + this.sessionid;
-
-    xhr.open('GET', uri, true);
-
-    // handle disconnection immediately
-    this.onDisconnect('booted');
-  };
-
-  /**
-   * Check if we need to use cross domain enabled transports. Cross domain would
-   * be a different port or different domain name.
-   *
-   * @returns {Boolean}
-   * @api private
-   */
-
-  Socket.prototype.isXDomain = function () {
-
-    var port = window.location.port ||
-      ('https:' == window.location.protocol ? 443 : 80);
-
-    return this.options.host !== document.domain || this.options.port != port;
-  };
-
-  /**
-   * Called upon handshake.
-   *
-   * @api private
-   */
-
-  Socket.prototype.onConnect = function () {
-    if (!this.connected) {
-      this.connected = true;
-      this.connecting = false;
-      if (!this.doBuffer) {
-        // make sure to flush the buffer
-        this.setBuffer(false);
-      }
-      this.emit('connect');
-    }
-  };
-
-  /**
-   * Called when the transport opens
-   *
-   * @api private
-   */
-
-  Socket.prototype.onOpen = function () {
-    this.open = true;
-  };
-
-  /**
-   * Called when the transport closes.
-   *
-   * @api private
-   */
-
-  Socket.prototype.onClose = function () {
-    this.open = false;
-  };
-
-  /**
-   * Called when the transport first opens a connection
-   *
-   * @param text
-   */
-
-  Socket.prototype.onPacket = function (packet) {
-    this.of(packet.endpoint).onPacket(packet);
-  };
-
-  /**
-   * Handles an error.
-   *
-   * @api private
-   */
-
-  Socket.prototype.onError = function (err) {
-    if (err && err.advice) {
-      if (err.advice === 'reconnect' && this.connected) {
-        this.disconnect();
-        this.reconnect();
-      }
-    }
-
-    this.publish('error', err && err.reason ? err.reason : err);
-  };
-
-  /**
-   * Called when the transport disconnects.
-   *
-   * @api private
-   */
-
-  Socket.prototype.onDisconnect = function (reason) {
-    var wasConnected = this.connected;
-
-    this.connected = false;
-    this.connecting = false;
-    this.open = false;
-
-    if (wasConnected) {
-      this.transport.close();
-      this.transport.clearTimeouts();
-      this.publish('disconnect', reason);
-
-      if ('booted' != reason && this.options.reconnect && !this.reconnecting) {
-        this.reconnect();
-      }
-    }
-  };
-
-  /**
-   * Called upon reconnection.
-   *
-   * @api private
-   */
-
-  Socket.prototype.reconnect = function () {
-    this.reconnecting = true;
-    this.reconnectionAttempts = 0;
-    this.reconnectionDelay = this.options['reconnection delay'];
-
-    var self = this
-      , maxAttempts = this.options['max reconnection attempts']
-      , tryMultiple = this.options['try multiple transports']
-      , limit = this.options['reconnection limit'];
-
-    function reset () {
-      if (self.connected) {
-        for (var i in self.namespaces) {
-          if (self.namespaces.hasOwnProperty(i) && '' !== i) {
-              self.namespaces[i].packet({ type: 'connect' });
-          }
-        }
-        self.publish('reconnect', self.transport.name, self.reconnectionAttempts);
-      }
-
-      self.removeListener('connect_failed', maybeReconnect);
-      self.removeListener('connect', maybeReconnect);
-
-      self.reconnecting = false;
-
-      delete self.reconnectionAttempts;
-      delete self.reconnectionDelay;
-      delete self.reconnectionTimer;
-      delete self.redoTransports;
-
-      self.options['try multiple transports'] = tryMultiple;
-    };
-
-    function maybeReconnect () {
-      if (!self.reconnecting) {
-        return;
-      }
-
-      if (self.connected) {
-        return reset();
-      };
-
-      if (self.connecting && self.reconnecting) {
-        return self.reconnectionTimer = setTimeout(maybeReconnect, 1000);
-      }
-
-      if (self.reconnectionAttempts++ >= maxAttempts) {
-        if (!self.redoTransports) {
-          self.on('connect_failed', maybeReconnect);
-          self.options['try multiple transports'] = true;
-          self.transport = self.getTransport();
-          self.redoTransports = true;
-          self.connect();
-        } else {
-          self.publish('reconnect_failed');
-          reset();
-        }
-      } else {
-        if (self.reconnectionDelay < limit) {
-          self.reconnectionDelay *= 2; // exponential back off
-        }
-
-        self.connect();
-        self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts);
-        self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay);
-      }
-    };
-
-    this.options['try multiple transports'] = false;
-    this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay);
-
-    this.on('connect', maybeReconnect);
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-  , this
-);
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.SocketNamespace = SocketNamespace;
-
-  /**
-   * Socket namespace constructor.
-   *
-   * @constructor
-   * @api public
-   */
-
-  function SocketNamespace (socket, name) {
-    this.socket = socket;
-    this.name = name || '';
-    this.flags = {};
-    this.json = new Flag(this, 'json');
-    this.ackPackets = 0;
-    this.acks = {};
-  };
-
-  /**
-   * Apply EventEmitter mixin.
-   */
-
-  io.util.mixin(SocketNamespace, io.EventEmitter);
-
-  /**
-   * Copies emit since we override it
-   *
-   * @api private
-   */
-
-  SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit;
-
-  /**
-   * Creates a new namespace, by proxying the request to the socket. This
-   * allows us to use the synax as we do on the server.
-   *
-   * @api public
-   */
-
-  SocketNamespace.prototype.of = function () {
-    return this.socket.of.apply(this.socket, arguments);
-  };
-
-  /**
-   * Sends a packet.
-   *
-   * @api private
-   */
-
-  SocketNamespace.prototype.packet = function (packet) {
-    packet.endpoint = this.name;
-    this.socket.packet(packet);
-    this.flags = {};
-    return this;
-  };
-
-  /**
-   * Sends a message
-   *
-   * @api public
-   */
-
-  SocketNamespace.prototype.send = function (data, fn) {
-    var packet = {
-        type: this.flags.json ? 'json' : 'message'
-      , data: data
-    };
-
-    if ('function' == typeof fn) {
-      packet.id = ++this.ackPackets;
-      packet.ack = true;
-      this.acks[packet.id] = fn;
-    }
-
-    return this.packet(packet);
-  };
-
-  /**
-   * Emits an event
-   *
-   * @api public
-   */
-  
-  SocketNamespace.prototype.emit = function (name) {
-    var args = Array.prototype.slice.call(arguments, 1)
-      , lastArg = args[args.length - 1]
-      , packet = {
-            type: 'event'
-          , name: name
-        };
-
-    if ('function' == typeof lastArg) {
-      packet.id = ++this.ackPackets;
-      packet.ack = 'data';
-      this.acks[packet.id] = lastArg;
-      args = args.slice(0, args.length - 1);
-    }
-
-    packet.args = args;
-
-    return this.packet(packet);
-  };
-
-  /**
-   * Disconnects the namespace
-   *
-   * @api private
-   */
-
-  SocketNamespace.prototype.disconnect = function () {
-    if (this.name === '') {
-      this.socket.disconnect();
-    } else {
-      this.packet({ type: 'disconnect' });
-      this.$emit('disconnect');
-    }
-
-    return this;
-  };
-
-  /**
-   * Handles a packet
-   *
-   * @api private
-   */
-
-  SocketNamespace.prototype.onPacket = function (packet) {
-    var self = this;
-
-    function ack () {
-      self.packet({
-          type: 'ack'
-        , args: io.util.toArray(arguments)
-        , ackId: packet.id
-      });
-    };
-
-    switch (packet.type) {
-      case 'connect':
-        this.$emit('connect');
-        break;
-
-      case 'disconnect':
-        if (this.name === '') {
-          this.socket.onDisconnect(packet.reason || 'booted');
-        } else {
-          this.$emit('disconnect', packet.reason);
-        }
-        break;
-
-      case 'message':
-      case 'json':
-        var params = ['message', packet.data];
-
-        if (packet.ack == 'data') {
-          params.push(ack);
-        } else if (packet.ack) {
-          this.packet({ type: 'ack', ackId: packet.id });
-        }
-
-        this.$emit.apply(this, params);
-        break;
-
-      case 'event':
-        var params = [packet.name].concat(packet.args);
-
-        if (packet.ack == 'data')
-          params.push(ack);
-
-        this.$emit.apply(this, params);
-        break;
-
-      case 'ack':
-        if (this.acks[packet.ackId]) {
-          this.acks[packet.ackId].apply(this, packet.args);
-          delete this.acks[packet.ackId];
-        }
-        break;
-
-      case 'error':
-        if (packet.advice){
-          this.socket.onError(packet);
-        } else {
-          if (packet.reason == 'unauthorized') {
-            this.$emit('connect_failed', packet.reason);
-          } else {
-            this.$emit('error', packet.reason);
-          }
-        }
-        break;
-    }
-  };
-
-  /**
-   * Flag interface.
-   *
-   * @api private
-   */
-
-  function Flag (nsp, name) {
-    this.namespace = nsp;
-    this.name = name;
-  };
-
-  /**
-   * Send a message
-   *
-   * @api public
-   */
-
-  Flag.prototype.send = function () {
-    this.namespace.flags[this.name] = true;
-    this.namespace.send.apply(this.namespace, arguments);
-  };
-
-  /**
-   * Emit an event
-   *
-   * @api public
-   */
-
-  Flag.prototype.emit = function () {
-    this.namespace.flags[this.name] = true;
-    this.namespace.emit.apply(this.namespace, arguments);
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.websocket = WS;
-
-  /**
-   * The WebSocket transport uses the HTML5 WebSocket API to establish an
-   * persistent connection with the Socket.IO server. This transport will also
-   * be inherited by the FlashSocket fallback as it provides a API compatible
-   * polyfill for the WebSockets.
-   *
-   * @constructor
-   * @extends {io.Transport}
-   * @api public
-   */
-
-  function WS (socket) {
-    io.Transport.apply(this, arguments);
-  };
-
-  /**
-   * Inherits from Transport.
-   */
-
-  io.util.inherit(WS, io.Transport);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  WS.prototype.name = 'websocket';
-
-  /**
-   * Initializes a new `WebSocket` connection with the Socket.IO server. We attach
-   * all the appropriate listeners to handle the responses from the server.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  WS.prototype.open = function () {
-    var query = io.util.query(this.socket.options.query)
-      , self = this
-      , Socket
-
-
-    if (!Socket) {
-      Socket = window.MozWebSocket || window.WebSocket;
-    }
-
-    this.websocket = new Socket(this.prepareUrl() + query);
-
-    this.websocket.onopen = function () {
-      self.onOpen();
-      self.socket.setBuffer(false);
-    };
-    this.websocket.onmessage = function (ev) {
-      self.onData(ev.data);
-    };
-    this.websocket.onclose = function () {
-      self.onClose();
-      self.socket.setBuffer(true);
-    };
-    this.websocket.onerror = function (e) {
-      self.onError(e);
-    };
-
-    return this;
-  };
-
-  /**
-   * Send a message to the Socket.IO server. The message will automatically be
-   * encoded in the correct message format.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  WS.prototype.send = function (data) {
-    this.websocket.send(data);
-    return this;
-  };
-
-  /**
-   * Payload
-   *
-   * @api private
-   */
-
-  WS.prototype.payload = function (arr) {
-    for (var i = 0, l = arr.length; i < l; i++) {
-      this.packet(arr[i]);
-    }
-    return this;
-  };
-
-  /**
-   * Disconnect the established `WebSocket` connection.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  WS.prototype.close = function () {
-    this.websocket.close();
-    return this;
-  };
-
-  /**
-   * Handle the errors that `WebSocket` might be giving when we
-   * are attempting to connect or send messages.
-   *
-   * @param {Error} e The error.
-   * @api private
-   */
-
-  WS.prototype.onError = function (e) {
-    this.socket.onError(e);
-  };
-
-  /**
-   * Returns the appropriate scheme for the URI generation.
-   *
-   * @api private
-   */
-  WS.prototype.scheme = function () {
-    return this.socket.options.secure ? 'wss' : 'ws';
-  };
-
-  /**
-   * Checks if the browser has support for native `WebSockets` and that
-   * it's not the polyfill created for the FlashSocket transport.
-   *
-   * @return {Boolean}
-   * @api public
-   */
-
-  WS.check = function () {
-    return ('WebSocket' in window && !('__addTask' in WebSocket))
-          || 'MozWebSocket' in window;
-  };
-
-  /**
-   * Check if the `WebSocket` transport support cross domain communications.
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  WS.xdomainCheck = function () {
-    return true;
-  };
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('websocket');
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.flashsocket = Flashsocket;
-
-  /**
-   * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket
-   * specification. It uses a .swf file to communicate with the server. If you want
-   * to serve the .swf file from a other server than where the Socket.IO script is
-   * coming from you need to use the insecure version of the .swf. More information
-   * about this can be found on the github page.
-   *
-   * @constructor
-   * @extends {io.Transport.websocket}
-   * @api public
-   */
-
-  function Flashsocket () {
-    io.Transport.websocket.apply(this, arguments);
-  };
-
-  /**
-   * Inherits from Transport.
-   */
-
-  io.util.inherit(Flashsocket, io.Transport.websocket);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  Flashsocket.prototype.name = 'flashsocket';
-
-  /**
-   * Disconnect the established `FlashSocket` connection. This is done by adding a 
-   * new task to the FlashSocket. The rest will be handled off by the `WebSocket` 
-   * transport.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  Flashsocket.prototype.open = function () {
-    var self = this
-      , args = arguments;
-
-    WebSocket.__addTask(function () {
-      io.Transport.websocket.prototype.open.apply(self, args);
-    });
-    return this;
-  };
-  
-  /**
-   * Sends a message to the Socket.IO server. This is done by adding a new
-   * task to the FlashSocket. The rest will be handled off by the `WebSocket` 
-   * transport.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  Flashsocket.prototype.send = function () {
-    var self = this, args = arguments;
-    WebSocket.__addTask(function () {
-      io.Transport.websocket.prototype.send.apply(self, args);
-    });
-    return this;
-  };
-
-  /**
-   * Disconnects the established `FlashSocket` connection.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  Flashsocket.prototype.close = function () {
-    WebSocket.__tasks.length = 0;
-    io.Transport.websocket.prototype.close.call(this);
-    return this;
-  };
-
-  /**
-   * The WebSocket fall back needs to append the flash container to the body
-   * element, so we need to make sure we have access to it. Or defer the call
-   * until we are sure there is a body element.
-   *
-   * @param {Socket} socket The socket instance that needs a transport
-   * @param {Function} fn The callback
-   * @api private
-   */
-
-  Flashsocket.prototype.ready = function (socket, fn) {
-    function init () {
-      var options = socket.options
-        , port = options['flash policy port']
-        , path = [
-              'http' + (options.secure ? 's' : '') + ':/'
-            , options.host + ':' + options.port
-            , options.resource
-            , 'static/flashsocket'
-            , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf'
-          ];
-
-      // Only start downloading the swf file when the checked that this browser
-      // actually supports it
-      if (!Flashsocket.loaded) {
-        if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') {
-          // Set the correct file based on the XDomain settings
-          WEB_SOCKET_SWF_LOCATION = path.join('/');
-        }
-
-        if (port !== 843) {
-          WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port);
-        }
-
-        WebSocket.__initialize();
-        Flashsocket.loaded = true;
-      }
-
-      fn.call(self);
-    }
-
-    var self = this;
-    if (document.body) return init();
-
-    io.util.load(init);
-  };
-
-  /**
-   * Check if the FlashSocket transport is supported as it requires that the Adobe
-   * Flash Player plug-in version `10.0.0` or greater is installed. And also check if
-   * the polyfill is correctly loaded.
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  Flashsocket.check = function () {
-    if (
-        typeof WebSocket == 'undefined'
-      || !('__initialize' in WebSocket) || !swfobject
-    ) return false;
-
-    return swfobject.getFlashPlayerVersion().major >= 10;
-  };
-
-  /**
-   * Check if the FlashSocket transport can be used as cross domain / cross origin 
-   * transport. Because we can't see which type (secure or insecure) of .swf is used
-   * we will just return true.
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  Flashsocket.xdomainCheck = function () {
-    return true;
-  };
-
-  /**
-   * Disable AUTO_INITIALIZATION
-   */
-
-  if (typeof window != 'undefined') {
-    WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true;
-  }
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('flashsocket');
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
-/*     SWFObject v2.2 <http://code.google.com/p/swfobject/> 
-       is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
-*/
-var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();// Copyright: Hiroshi Ichikawa <http://gimite.net/en/>
-// License: New BSD License
-// Reference: http://dev.w3.org/html5/websockets/
-// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol
-
-(function() {
-  
-  if (window.WebSocket) return;
-
-  var console = window.console;
-  if (!console || !console.log || !console.error) {
-    console = {log: function(){ }, error: function(){ }};
-  }
-  
-  if (!swfobject.hasFlashPlayerVersion("10.0.0")) {
-    console.error("Flash Player >= 10.0.0 is required.");
-    return;
-  }
-  if (location.protocol == "file:") {
-    console.error(
-      "WARNING: web-socket-js doesn't work in file:///... URL " +
-      "unless you set Flash Security Settings properly. " +
-      "Open the page via Web server i.e. http://...");
-  }
-
-  /**
-   * This class represents a faux web socket.
-   * @param {string} url
-   * @param {array or string} protocols
-   * @param {string} proxyHost
-   * @param {int} proxyPort
-   * @param {string} headers
-   */
-  WebSocket = function(url, protocols, proxyHost, proxyPort, headers) {
-    var self = this;
-    self.__id = WebSocket.__nextId++;
-    WebSocket.__instances[self.__id] = self;
-    self.readyState = WebSocket.CONNECTING;
-    self.bufferedAmount = 0;
-    self.__events = {};
-    if (!protocols) {
-      protocols = [];
-    } else if (typeof protocols == "string") {
-      protocols = [protocols];
-    }
-    // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc.
-    // Otherwise, when onopen fires immediately, onopen is called before it is set.
-    setTimeout(function() {
-      WebSocket.__addTask(function() {
-        WebSocket.__flash.create(
-            self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null);
-      });
-    }, 0);
-  };
-
-  /**
-   * Send data to the web socket.
-   * @param {string} data  The data to send to the socket.
-   * @return {boolean}  True for success, false for failure.
-   */
-  WebSocket.prototype.send = function(data) {
-    if (this.readyState == WebSocket.CONNECTING) {
-      throw "INVALID_STATE_ERR: Web Socket connection has not been established";
-    }
-    // We use encodeURIComponent() here, because FABridge doesn't work if
-    // the argument includes some characters. We don't use escape() here
-    // because of this:
-    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions
-    // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't
-    // preserve all Unicode characters either e.g. "\uffff" in Firefox.
-    // Note by wtritch: Hopefully this will not be necessary using ExternalInterface.  Will require
-    // additional testing.
-    var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data));
-    if (result < 0) { // success
-      return true;
-    } else {
-      this.bufferedAmount += result;
-      return false;
-    }
-  };
-
-  /**
-   * Close this web socket gracefully.
-   */
-  WebSocket.prototype.close = function() {
-    if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) {
-      return;
-    }
-    this.readyState = WebSocket.CLOSING;
-    WebSocket.__flash.close(this.__id);
-  };
-
-  /**
-   * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
-   *
-   * @param {string} type
-   * @param {function} listener
-   * @param {boolean} useCapture
-   * @return void
-   */
-  WebSocket.prototype.addEventListener = function(type, listener, useCapture) {
-    if (!(type in this.__events)) {
-      this.__events[type] = [];
-    }
-    this.__events[type].push(listener);
-  };
-
-  /**
-   * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
-   *
-   * @param {string} type
-   * @param {function} listener
-   * @param {boolean} useCapture
-   * @return void
-   */
-  WebSocket.prototype.removeEventListener = function(type, listener, useCapture) {
-    if (!(type in this.__events)) return;
-    var events = this.__events[type];
-    for (var i = events.length - 1; i >= 0; --i) {
-      if (events[i] === listener) {
-        events.splice(i, 1);
-        break;
-      }
-    }
-  };
-
-  /**
-   * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
-   *
-   * @param {Event} event
-   * @return void
-   */
-  WebSocket.prototype.dispatchEvent = function(event) {
-    var events = this.__events[event.type] || [];
-    for (var i = 0; i < events.length; ++i) {
-      events[i](event);
-    }
-    var handler = this["on" + event.type];
-    if (handler) handler(event);
-  };
-
-  /**
-   * Handles an event from Flash.
-   * @param {Object} flashEvent
-   */
-  WebSocket.prototype.__handleEvent = function(flashEvent) {
-    if ("readyState" in flashEvent) {
-      this.readyState = flashEvent.readyState;
-    }
-    if ("protocol" in flashEvent) {
-      this.protocol = flashEvent.protocol;
-    }
-    
-    var jsEvent;
-    if (flashEvent.type == "open" || flashEvent.type == "error") {
-      jsEvent = this.__createSimpleEvent(flashEvent.type);
-    } else if (flashEvent.type == "close") {
-      // TODO implement jsEvent.wasClean
-      jsEvent = this.__createSimpleEvent("close");
-    } else if (flashEvent.type == "message") {
-      var data = decodeURIComponent(flashEvent.message);
-      jsEvent = this.__createMessageEvent("message", data);
-    } else {
-      throw "unknown event type: " + flashEvent.type;
-    }
-    
-    this.dispatchEvent(jsEvent);
-  };
-  
-  WebSocket.prototype.__createSimpleEvent = function(type) {
-    if (document.createEvent && window.Event) {
-      var event = document.createEvent("Event");
-      event.initEvent(type, false, false);
-      return event;
-    } else {
-      return {type: type, bubbles: false, cancelable: false};
-    }
-  };
-  
-  WebSocket.prototype.__createMessageEvent = function(type, data) {
-    if (document.createEvent && window.MessageEvent && !window.opera) {
-      var event = document.createEvent("MessageEvent");
-      event.initMessageEvent("message", false, false, data, null, null, window, null);
-      return event;
-    } else {
-      // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes.
-      return {type: type, data: data, bubbles: false, cancelable: false};
-    }
-  };
-  
-  /**
-   * Define the WebSocket readyState enumeration.
-   */
-  WebSocket.CONNECTING = 0;
-  WebSocket.OPEN = 1;
-  WebSocket.CLOSING = 2;
-  WebSocket.CLOSED = 3;
-
-  WebSocket.__flash = null;
-  WebSocket.__instances = {};
-  WebSocket.__tasks = [];
-  WebSocket.__nextId = 0;
-  
-  /**
-   * Load a new flash security policy file.
-   * @param {string} url
-   */
-  WebSocket.loadFlashPolicyFile = function(url){
-    WebSocket.__addTask(function() {
-      WebSocket.__flash.loadManualPolicyFile(url);
-    });
-  };
-
-  /**
-   * Loads WebSocketMain.swf and creates WebSocketMain object in Flash.
-   */
-  WebSocket.__initialize = function() {
-    if (WebSocket.__flash) return;
-    
-    if (WebSocket.__swfLocation) {
-      // For backword compatibility.
-      window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation;
-    }
-    if (!window.WEB_SOCKET_SWF_LOCATION) {
-      console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf");
-      return;
-    }
-    var container = document.createElement("div");
-    container.id = "webSocketContainer";
-    // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents
-    // Flash from loading at least in IE. So we move it out of the screen at (-100, -100).
-    // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash
-    // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is
-    // the best we can do as far as we know now.
-    container.style.position = "absolute";
-    if (WebSocket.__isFlashLite()) {
-      container.style.left = "0px";
-      container.style.top = "0px";
-    } else {
-      container.style.left = "-100px";
-      container.style.top = "-100px";
-    }
-    var holder = document.createElement("div");
-    holder.id = "webSocketFlash";
-    container.appendChild(holder);
-    document.body.appendChild(container);
-    // See this article for hasPriority:
-    // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html
-    swfobject.embedSWF(
-      WEB_SOCKET_SWF_LOCATION,
-      "webSocketFlash",
-      "1" /* width */,
-      "1" /* height */,
-      "10.0.0" /* SWF version */,
-      null,
-      null,
-      {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"},
-      null,
-      function(e) {
-        if (!e.success) {
-          console.error("[WebSocket] swfobject.embedSWF failed");
-        }
-      });
-  };
-  
-  /**
-   * Called by Flash to notify JS that it's fully loaded and ready
-   * for communication.
-   */
-  WebSocket.__onFlashInitialized = function() {
-    // We need to set a timeout here to avoid round-trip calls
-    // to flash during the initialization process.
-    setTimeout(function() {
-      WebSocket.__flash = document.getElementById("webSocketFlash");
-      WebSocket.__flash.setCallerUrl(location.href);
-      WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG);
-      for (var i = 0; i < WebSocket.__tasks.length; ++i) {
-        WebSocket.__tasks[i]();
-      }
-      WebSocket.__tasks = [];
-    }, 0);
-  };
-  
-  /**
-   * Called by Flash to notify WebSockets events are fired.
-   */
-  WebSocket.__onFlashEvent = function() {
-    setTimeout(function() {
-      try {
-        // Gets events using receiveEvents() instead of getting it from event object
-        // of Flash event. This is to make sure to keep message order.
-        // It seems sometimes Flash events don't arrive in the same order as they are sent.
-        var events = WebSocket.__flash.receiveEvents();
-        for (var i = 0; i < events.length; ++i) {
-          WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]);
-        }
-      } catch (e) {
-        console.error(e);
-      }
-    }, 0);
-    return true;
-  };
-  
-  // Called by Flash.
-  WebSocket.__log = function(message) {
-    console.log(decodeURIComponent(message));
-  };
-  
-  // Called by Flash.
-  WebSocket.__error = function(message) {
-    console.error(decodeURIComponent(message));
-  };
-  
-  WebSocket.__addTask = function(task) {
-    if (WebSocket.__flash) {
-      task();
-    } else {
-      WebSocket.__tasks.push(task);
-    }
-  };
-  
-  /**
-   * Test if the browser is running flash lite.
-   * @return {boolean} True if flash lite is running, false otherwise.
-   */
-  WebSocket.__isFlashLite = function() {
-    if (!window.navigator || !window.navigator.mimeTypes) {
-      return false;
-    }
-    var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"];
-    if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) {
-      return false;
-    }
-    return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false;
-  };
-  
-  if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) {
-    if (window.addEventListener) {
-      window.addEventListener("load", function(){
-        WebSocket.__initialize();
-      }, false);
-    } else {
-      window.attachEvent("onload", function(){
-        WebSocket.__initialize();
-      });
-    }
-  }
-  
-})();
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io, global) {
-
-  /**
-   * Expose constructor.
-   *
-   * @api public
-   */
-  
-  exports.XHR = XHR;
-
-  /**
-   * XHR constructor
-   *
-   * @costructor
-   * @api public
-   */
-
-  function XHR (socket) {
-    if (!socket) return;
-
-    io.Transport.apply(this, arguments);
-    this.sendBuffer = [];
-  };
-
-  /**
-   * Inherits from Transport.
-   */
-
-  io.util.inherit(XHR, io.Transport);
-
-  /**
-   * Establish a connection
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  XHR.prototype.open = function () {
-    this.socket.setBuffer(false);
-    this.onOpen();
-    this.get();
-
-    // we need to make sure the request succeeds since we have no indication
-    // whether the request opened or not until it succeeded.
-    this.setCloseTimeout();
-
-    return this;
-  };
-
-  /**
-   * Check if we need to send data to the Socket.IO server, if we have data in our
-   * buffer we encode it and forward it to the `post` method.
-   *
-   * @api private
-   */
-
-  XHR.prototype.payload = function (payload) {
-    var msgs = [];
-
-    for (var i = 0, l = payload.length; i < l; i++) {
-      msgs.push(io.parser.encodePacket(payload[i]));
-    }
-
-    this.send(io.parser.encodePayload(msgs));
-  };
-
-  /**
-   * Send data to the Socket.IO server.
-   *
-   * @param data The message
-   * @returns {Transport}
-   * @api public
-   */
-
-  XHR.prototype.send = function (data) {
-    this.post(data);
-    return this;
-  };
-
-  /**
-   * Posts a encoded message to the Socket.IO server.
-   *
-   * @param {String} data A encoded message.
-   * @api private
-   */
-
-  function empty () { };
-
-  XHR.prototype.post = function (data) {
-    var self = this;
-    this.socket.setBuffer(true);
-
-    function stateChange () {
-      if (this.readyState == 4) {
-        this.onreadystatechange = empty;
-        self.posting = false;
-
-        if (this.status == 200){
-          self.socket.setBuffer(false);
-        } else {
-          self.onClose();
-        }
-      }
-    }
-
-    function onload () {
-      this.onload = empty;
-      self.socket.setBuffer(false);
-    };
-
-    this.sendXHR = this.request('POST');
-
-    if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) {
-      this.sendXHR.onload = this.sendXHR.onerror = onload;
-    } else {
-      this.sendXHR.onreadystatechange = stateChange;
-    }
-
-    this.sendXHR.send(data);
-  };
-
-  /**
-   * Disconnects the established `XHR` connection.
-   *
-   * @returns {Transport} 
-   * @api public
-   */
-
-  XHR.prototype.close = function () {
-    this.onClose();
-    return this;
-  };
-
-  /**
-   * Generates a configured XHR request
-   *
-   * @param {String} url The url that needs to be requested.
-   * @param {String} method The method the request should use.
-   * @returns {XMLHttpRequest}
-   * @api private
-   */
-
-  XHR.prototype.request = function (method) {
-    var req = io.util.request(this.socket.isXDomain())
-      , query = io.util.query(this.socket.options.query, 't=' + +new Date);
-
-    req.open(method || 'GET', this.prepareUrl() + query, true);
-
-    if (method == 'POST') {
-      try {
-        if (req.setRequestHeader) {
-          req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
-        } else {
-          // XDomainRequest
-          req.contentType = 'text/plain';
-        }
-      } catch (e) {}
-    }
-
-    return req;
-  };
-
-  /**
-   * Returns the scheme to use for the transport URLs.
-   *
-   * @api private
-   */
-
-  XHR.prototype.scheme = function () {
-    return this.socket.options.secure ? 'https' : 'http';
-  };
-
-  /**
-   * Check if the XHR transports are supported
-   *
-   * @param {Boolean} xdomain Check if we support cross domain requests.
-   * @returns {Boolean}
-   * @api public
-   */
-
-  XHR.check = function (socket, xdomain) {
-    try {
-      if (io.util.request(xdomain)) {
-        return true;
-      }
-    } catch(e) {}
-
-    return false;
-  };
-
-  /**
-   * Check if the XHR transport supports corss domain requests.
-   * 
-   * @returns {Boolean}
-   * @api public
-   */
-
-  XHR.xdomainCheck = function () {
-    return XHR.check(null, true);
-  };
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-  , this
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.htmlfile = HTMLFile;
-
-  /**
-   * The HTMLFile transport creates a `forever iframe` based transport
-   * for Internet Explorer. Regular forever iframe implementations will 
-   * continuously trigger the browsers buzy indicators. If the forever iframe
-   * is created inside a `htmlfile` these indicators will not be trigged.
-   *
-   * @constructor
-   * @extends {io.Transport.XHR}
-   * @api public
-   */
-
-  function HTMLFile (socket) {
-    io.Transport.XHR.apply(this, arguments);
-  };
-
-  /**
-   * Inherits from XHR transport.
-   */
-
-  io.util.inherit(HTMLFile, io.Transport.XHR);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  HTMLFile.prototype.name = 'htmlfile';
-
-  /**
-   * Creates a new ActiveX `htmlfile` with a forever loading iframe
-   * that can be used to listen to messages. Inside the generated
-   * `htmlfile` a reference will be made to the HTMLFile transport.
-   *
-   * @api private
-   */
-
-  HTMLFile.prototype.get = function () {
-    this.doc = new ActiveXObject('htmlfile');
-    this.doc.open();
-    this.doc.write('<html></html>');
-    this.doc.close();
-    this.doc.parentWindow.s = this;
-
-    var iframeC = this.doc.createElement('div');
-    iframeC.className = 'socketio';
-
-    this.doc.body.appendChild(iframeC);
-    this.iframe = this.doc.createElement('iframe');
-
-    iframeC.appendChild(this.iframe);
-
-    var self = this
-      , query = io.util.query(this.socket.options.query, 't='+ +new Date);
-
-    this.iframe.src = this.prepareUrl() + query;
-
-    io.util.on(window, 'unload', function () {
-      self.destroy();
-    });
-  };
-
-  /**
-   * The Socket.IO server will write script tags inside the forever
-   * iframe, this function will be used as callback for the incoming
-   * information.
-   *
-   * @param {String} data The message
-   * @param {document} doc Reference to the context
-   * @api private
-   */
-
-  HTMLFile.prototype._ = function (data, doc) {
-    this.onData(data);
-    try {
-      var script = doc.getElementsByTagName('script')[0];
-      script.parentNode.removeChild(script);
-    } catch (e) { }
-  };
-
-  /**
-   * Destroy the established connection, iframe and `htmlfile`.
-   * And calls the `CollectGarbage` function of Internet Explorer
-   * to release the memory.
-   *
-   * @api private
-   */
-
-  HTMLFile.prototype.destroy = function () {
-    if (this.iframe){
-      try {
-        this.iframe.src = 'about:blank';
-      } catch(e){}
-
-      this.doc = null;
-      this.iframe.parentNode.removeChild(this.iframe);
-      this.iframe = null;
-
-      CollectGarbage();
-    }
-  };
-
-  /**
-   * Disconnects the established connection.
-   *
-   * @returns {Transport} Chaining.
-   * @api public
-   */
-
-  HTMLFile.prototype.close = function () {
-    this.destroy();
-    return io.Transport.XHR.prototype.close.call(this);
-  };
-
-  /**
-   * Checks if the browser supports this transport. The browser
-   * must have an `ActiveXObject` implementation.
-   *
-   * @return {Boolean}
-   * @api public
-   */
-
-  HTMLFile.check = function () {
-    if ('ActiveXObject' in window){
-      try {
-        var a = new ActiveXObject('htmlfile');
-        return a && io.Transport.XHR.check();
-      } catch(e){}
-    }
-    return false;
-  };
-
-  /**
-   * Check if cross domain requests are supported.
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  HTMLFile.xdomainCheck = function () {
-    // we can probably do handling for sub-domains, we should
-    // test that it's cross domain but a subdomain here
-    return false;
-  };
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('htmlfile');
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io, global) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports['xhr-polling'] = XHRPolling;
-
-  /**
-   * The XHR-polling transport uses long polling XHR requests to create a
-   * "persistent" connection with the server.
-   *
-   * @constructor
-   * @api public
-   */
-
-  function XHRPolling () {
-    io.Transport.XHR.apply(this, arguments);
-  };
-
-  /**
-   * Inherits from XHR transport.
-   */
-
-  io.util.inherit(XHRPolling, io.Transport.XHR);
-
-  /**
-   * Merge the properties from XHR transport
-   */
-
-  io.util.merge(XHRPolling, io.Transport.XHR);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  XHRPolling.prototype.name = 'xhr-polling';
-
-  /** 
-   * Establish a connection, for iPhone and Android this will be done once the page
-   * is loaded.
-   *
-   * @returns {Transport} Chaining.
-   * @api public
-   */
-
-  XHRPolling.prototype.open = function () {
-    var self = this;
-
-    io.Transport.XHR.prototype.open.call(self);
-    return false;
-  };
-
-  /**
-   * Starts a XHR request to wait for incoming messages.
-   *
-   * @api private
-   */
-
-  function empty () {};
-
-  XHRPolling.prototype.get = function () {
-    if (!this.open) return;
-
-    var self = this;
-
-    function stateChange () {
-      if (this.readyState == 4) {
-        this.onreadystatechange = empty;
-
-        if (this.status == 200) {
-          self.onData(this.responseText);
-          self.get();
-        } else {
-          self.onClose();
-        }
-      }
-    };
-
-    function onload () {
-      this.onload = empty;
-      self.onData(this.responseText);
-      self.get();
-    };
-
-    this.xhr = this.request();
-
-    if (global.XDomainRequest && this.xhr instanceof XDomainRequest) {
-      this.xhr.onload = this.xhr.onerror = onload;
-    } else {
-      this.xhr.onreadystatechange = stateChange;
-    }
-
-    this.xhr.send(null);
-  };
-
-  /**
-   * Handle the unclean close behavior.
-   *
-   * @api private
-   */
-
-  XHRPolling.prototype.onClose = function () {
-    io.Transport.XHR.prototype.onClose.call(this);
-
-    if (this.xhr) {
-      this.xhr.onreadystatechange = this.xhr.onload = empty;
-      try {
-        this.xhr.abort();
-      } catch(e){}
-      this.xhr = null;
-    }
-  };
-
-  /**
-   * Webkit based browsers show a infinit spinner when you start a XHR request
-   * before the browsers onload event is called so we need to defer opening of
-   * the transport until the onload event is called. Wrapping the cb in our
-   * defer method solve this.
-   *
-   * @param {Socket} socket The socket instance that needs a transport
-   * @param {Function} fn The callback
-   * @api private
-   */
-
-  XHRPolling.prototype.ready = function (socket, fn) {
-    var self = this;
-
-    io.util.defer(function () {
-      fn.call(self);
-    });
-  };
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('xhr-polling');
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-  , this
-);
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports['jsonp-polling'] = JSONPPolling;
-
-  /**
-   * The JSONP transport creates an persistent connection by dynamically
-   * inserting a script tag in the page. This script tag will receive the
-   * information of the Socket.IO server. When new information is received
-   * it creates a new script tag for the new data stream.
-   *
-   * @constructor
-   * @extends {io.Transport.xhr-polling}
-   * @api public
-   */
-
-  function JSONPPolling (socket) {
-    io.Transport['xhr-polling'].apply(this, arguments);
-
-    this.index = io.j.length;
-
-    var self = this;
-
-    io.j.push(function (msg) {
-      self._(msg);
-    });
-  };
-
-  /**
-   * Inherits from XHR polling transport.
-   */
-
-  io.util.inherit(JSONPPolling, io.Transport['xhr-polling']);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  JSONPPolling.prototype.name = 'jsonp-polling';
-
-  /**
-   * Posts a encoded message to the Socket.IO server using an iframe.
-   * The iframe is used because script tags can create POST based requests.
-   * The iframe is positioned outside of the view so the user does not
-   * notice it's existence.
-   *
-   * @param {String} data A encoded message.
-   * @api private
-   */
-
-  JSONPPolling.prototype.post = function (data) {
-    var self = this
-      , query = io.util.query(
-             this.socket.options.query
-          , 't='+ (+new Date) + '&i=' + this.index
-        );
-
-    if (!this.form) {
-      var form = document.createElement('form')
-        , area = document.createElement('textarea')
-        , id = this.iframeId = 'socketio_iframe_' + this.index
-        , iframe;
-
-      form.className = 'socketio';
-      form.style.position = 'absolute';
-      form.style.top = '-1000px';
-      form.style.left = '-1000px';
-      form.target = id;
-      form.method = 'POST';
-      form.setAttribute('accept-charset', 'utf-8');
-      area.name = 'd';
-      form.appendChild(area);
-      document.body.appendChild(form);
-
-      this.form = form;
-      this.area = area;
-    }
-
-    this.form.action = this.prepareUrl() + query;
-
-    function complete () {
-      initIframe();
-      self.socket.setBuffer(false);
-    };
-
-    function initIframe () {
-      if (self.iframe) {
-        self.form.removeChild(self.iframe);
-      }
-
-      try {
-        // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
-        iframe = document.createElement('<iframe name="'+ self.iframeId +'">');
-      } catch (e) {
-        iframe = document.createElement('iframe');
-        iframe.name = self.iframeId;
-      }
-
-      iframe.id = self.iframeId;
-
-      self.form.appendChild(iframe);
-      self.iframe = iframe;
-    };
-
-    initIframe();
-
-    this.area.value = data;
-
-    try {
-      this.form.submit();
-    } catch(e) {}
-
-    if (this.iframe.attachEvent) {
-      iframe.onreadystatechange = function () {
-        if (self.iframe.readyState == 'complete') {
-          complete();
-        }
-      };
-    } else {
-      this.iframe.onload = complete;
-    }
-
-    this.socket.setBuffer(true);
-  };
-  
-  /**
-   * Creates a new JSONP poll that can be used to listen
-   * for messages from the Socket.IO server.
-   *
-   * @api private
-   */
-
-  JSONPPolling.prototype.get = function () {
-    var self = this
-      , script = document.createElement('script')
-      , query = io.util.query(
-             this.socket.options.query
-          , 't='+ (+new Date) + '&i=' + this.index
-        );
-
-    if (this.script) {
-      this.script.parentNode.removeChild(this.script);
-      this.script = null;
-    }
-
-    script.async = true;
-    script.src = this.prepareUrl() + query;
-    script.onerror = function () {
-      self.onClose();
-    };
-
-    var insertAt = document.getElementsByTagName('script')[0]
-    insertAt.parentNode.insertBefore(script, insertAt);
-    this.script = script;
-  };
-
-  /**
-   * Callback function for the incoming message stream from the Socket.IO server.
-   *
-   * @param {String} data The message
-   * @api private
-   */
-
-  JSONPPolling.prototype._ = function (msg) {
-    this.onData(msg);
-    if (this.open) {
-      this.get();
-    }
-    return this;
-  };
-
-  /**
-   * Checks if browser supports this transport.
-   *
-   * @return {Boolean}
-   * @api public
-   */
-
-  JSONPPolling.check = function () {
-    return true;
-  };
-
-  /**
-   * Check if cross domain requests are supported
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  JSONPPolling.xdomainCheck = function () {
-    return true;
-  };
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('jsonp-polling');
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/dist/socket.io.min.js b/node/node_modules/socket.io-client/dist/socket.io.min.js
deleted file mode 100644 (file)
index d4a9e7b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! Socket.IO.min.js build:0.8.4, production. Copyright(c) 2011 LearnBoost <dev@learnboost.com> MIT Licensed */
-(function(a){var b=a;b.version="0.8.4",b.protocol=1,b.transports=[],b.j=[],b.sockets={},b.connect=function(a,c){var d=b.util.parseUri(a),e,f;"undefined"!=typeof document&&(d.protocol=d.protocol||document.location.protocol.slice(0,-1),d.host=d.host||document.domain,d.port=d.port||document.location.port),e=b.util.uniqueUri(d);var g={host:d.host,secure:"https"==d.protocol,port:d.port||("https"==d.protocol?443:80),query:d.query||""};b.util.merge(g,c);if(g["force new connection"]||!b.sockets[e])f=new b.Socket(g);!g["force new connection"]&&f&&(b.sockets[e]=f),f=f||b.sockets[e];return f.of(d.path.length>1?d.path:"")}})("object"==typeof module?module.exports:window.io={}),function(a,b){var c=a.util={},d=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,e=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];c.parseUri=function(a){var b=d.exec(a||""),c={},f=14;while(f--)c[e[f]]=b[f]||"";return c},c.uniqueUri=function(a){var c=a.protocol,d=a.host,e=a.port;"document"in b?(d=d||document.domain,e=e||(c=="https"&&document.location.protocol!=="https:"?443:document.location.port)):(d=d||"localhost",!e&&c=="https"&&(e=443));return(c||"http")+"://"+d+":"+(e||80)},c.query=function(a,b){var d=c.chunkQuery(a||""),e=[];c.merge(d,c.chunkQuery(b||""));for(var f in d)d.hasOwnProperty(f)&&e.push(f+"="+d[f]);return e.length?"?"+e.join("&"):""},c.chunkQuery=function(a){var b={},c=a.split("&"),d=0,e=c.length,f;for(;d<e;++d)f=c[d].split("="),f[0]&&(b[f[0]]=decodeURIComponent(f[1]));return b};var f=!1;c.load=function(a){if("document"in b&&document.readyState==="complete"||f)return a();c.on(b,"load",a,!1)},c.on=function(a,b,c,d){a.attachEvent?a.attachEvent("on"+b,c):a.addEventListener&&a.addEventListener(b,c,d)},c.request=function(a){if("undefined"!=typeof window){if(a&&window.XDomainRequest)return new XDomainRequest;if(window.XMLHttpRequest&&(!a||c.ua.hasCORS))return new XMLHttpRequest;if(!a)try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}return null},"undefined"!=typeof window&&c.load(function(){f=!0}),c.defer=function(a){if(!c.ua.webkit)return a();c.load(function(){setTimeout(a,100)})},c.merge=function g(a,b,d,e){var f=e||[],g=typeof d=="undefined"?2:d,h;for(h in b)b.hasOwnProperty(h)&&c.indexOf(f,h)<0&&(typeof a[h]!="object"||!g?(a[h]=b[h],f.push(b[h])):c.merge(a[h],b[h],g-1,f));return a},c.mixin=function(a,b){c.merge(a.prototype,b.prototype)},c.inherit=function(a,b){function c(){}c.prototype=b.prototype,a.prototype=new c},c.isArray=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"},c.intersect=function(a,b){var d=[],e=a.length>b.length?a:b,f=a.length>b.length?b:a;for(var g=0,h=f.length;g<h;g++)~c.indexOf(e,f[g])&&d.push(f[g]);return d},c.indexOf=function(a,b,c){if(Array.prototype.indexOf)return Array.prototype.indexOf.call(a,b,c);for(var d=a.length,c=c<0?c+d<0?0:c+d:c||0;c<d&&a[c]!==b;c++);return d<=c?-1:c},c.toArray=function(a){var b=[];for(var c=0,d=a.length;c<d;c++)b.push(a[c]);return b},c.ua={},c.ua.hasCORS="undefined"!=typeof window&&window.XMLHttpRequest&&function(){try{var a=new XMLHttpRequest}catch(b){return!1}return a.withCredentials!=undefined}(),c.ua.webkit="undefined"!=typeof navigator&&/webkit/i.test(navigator.userAgent)}("undefined"!=typeof window?io:module.exports,this),function(a,b){function c(){}a.EventEmitter=c,c.prototype.on=function(a,c){this.$events||(this.$events={}),this.$events[a]?b.util.isArray(this.$events[a])?this.$events[a].push(c):this.$events[a]=[this.$events[a],c]:this.$events[a]=c;return this},c.prototype.addListener=c.prototype.on,c.prototype.once=function(a,b){function d(){c.removeListener(a,d),b.apply(this,arguments)}var c=this;d.listener=b,this.on(a,d);return this},c.prototype.removeListener=function(a,c){if(this.$events&&this.$events[a]){var d=this.$events[a];if(b.util.isArray(d)){var e=-1;for(var f=0,g=d.length;f<g;f++)if(d[f]===c||d[f].listener&&d[f].listener===c){e=f;break}if(e<0)return this;d.splice(e,1),d.length||delete this.$events[a]}else(d===c||d.listener&&d.listener===c)&&delete this.$events[a]}return this},c.prototype.removeAllListeners=function(a){this.$events&&this.$events[a]&&(this.$events[a]=null);return this},c.prototype.listeners=function(a){this.$events||(this.$events={}),this.$events[a]||(this.$events[a]=[]),b.util.isArray(this.$events[a])||(this.$events[a]=[this.$events[a]]);return this.$events[a]},c.prototype.emit=function(a){if(!this.$events)return!1;var c=this.$events[a];if(!c)return!1;var d=Array.prototype.slice.call(arguments,1);if("function"==typeof c)c.apply(this,d);else{if(!b.util.isArray(c))return!1;var e=c.slice();for(var f=0,g=e.length;f<g;f++)e[f].apply(this,d)}return!0}}("undefined"!=typeof io?io:module.exports,"undefined"!=typeof io?io:module.parent.exports),function(exports,nativeJSON){function str(a,b){var c,d,e,f,g=gap,h,i=b[a];i instanceof Date&&(i=date(a)),typeof rep=="function"&&(i=rep.call(b,a,i));switch(typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";gap+=indent,h=[];if(Object.prototype.toString.apply(i)==="[object Array]"){f=i.length;for(c=0;c<f;c+=1)h[c]=str(c,i)||"null";e=h.length===0?"[]":gap?"[\n"+gap+h.join(",\n"+gap)+"\n"+g+"]":"["+h.join(",")+"]",gap=g;return e}if(rep&&typeof rep=="object"){f=rep.length;for(c=0;c<f;c+=1)typeof rep[c]=="string"&&(d=rep[c],e=str(d,i),e&&h.push(quote(d)+(gap?": ":":")+e))}else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&h.push(quote(d)+(gap?": ":":")+e));e=h.length===0?"{}":gap?"{\n"+gap+h.join(",\n"+gap)+"\n"+g+"}":"{"+h.join(",")+"}",gap=g;return e}}function quote(a){escapable.lastIndex=0;return escapable.test(a)?'"'+a.replace(escapable,function(a){var b=meta[a];return typeof b=="string"?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function date(a,b){return isFinite(a.valueOf())?a.getUTCFullYear()+"-"+f(a.getUTCMonth()+1)+"-"+f(a.getUTCDate())+"T"+f(a.getUTCHours())+":"+f(a.getUTCMinutes())+":"+f(a.getUTCSeconds())+"Z":null}function f(a){return a<10?"0"+a:a}"use strict";if(nativeJSON&&nativeJSON.parse)return exports.JSON={parse:nativeJSON.parse,stringify:nativeJSON.stringify};var JSON=exports.JSON={},cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;JSON.stringify=function(a,b,c){var d;gap="",indent="";if(typeof c=="number")for(d=0;d<c;d+=1)indent+=" ";else typeof c=="string"&&(indent=c);rep=b;if(!b||typeof b=="function"||typeof b=="object"&&typeof b.length=="number")return str("",{"":a});throw new Error("JSON.stringify")},JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&typeof e=="object")for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),d!==undefined?e[c]=d:delete e[c]);return reviver.call(a,b,e)}var j;text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver=="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}("undefined"!=typeof io?io:module.exports,typeof JSON!="undefined"?JSON:undefined),function(a,b){var c=a.parser={},d=c.packets=["disconnect","connect","heartbeat","message","json","event","ack","error","noop"],e=c.reasons=["transport not supported","client not handshaken","unauthorized"],f=c.advice=["reconnect"],g=b.JSON,h=b.util.indexOf;c.encodePacket=function(a){var b=h(d,a.type),c=a.id||"",i=a.endpoint||"",j=a.ack,k=null;switch(a.type){case"error":var l=a.reason?h(e,a.reason):"",m=a.advice?h(f,a.advice):"";if(l!==""||m!=="")k=l+(m!==""?"+"+m:"");break;case"message":a.data!==""&&(k=a.data);break;case"event":var n={name:a.name};a.args&&a.args.length&&(n.args=a.args),k=g.stringify(n);break;case"json":k=g.stringify(a.data);break;case"connect":a.qs&&(k=a.qs);break;case"ack":k=a.ackId+(a.args&&a.args.length?"+"+g.stringify(a.args):"")}var o=[b,c+(j=="data"?"+":""),i];k!==null&&k!==undefined&&o.push(k);return o.join(":")},c.encodePayload=function(a){var b="";if(a.length==1)return a[0];for(var c=0,d=a.length;c<d;c++){var e=a[c];b+="\ufffd"+e.length+"\ufffd"+a[c]}return b};var i=/([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/;c.decodePacket=function(a){var b=a.match(i);if(!b)return{};var c=b[2]||"",a=b[5]||"",h={type:d[b[1]],endpoint:b[4]||""};c&&(h.id=c,b[3]?h.ack="data":h.ack=!0);switch(h.type){case"error":var b=a.split("+");h.reason=e[b[0]]||"",h.advice=f[b[1]]||"";break;case"message":h.data=a||"";break;case"event":try{var j=g.parse(a);h.name=j.name,h.args=j.args}catch(k){}h.args=h.args||[];break;case"json":try{h.data=g.parse(a)}catch(k){}break;case"connect":h.qs=a||"";break;case"ack":var b=a.match(/^([0-9]+)(\+)?(.*)/);if(b){h.ackId=b[1],h.args=[];if(b[3])try{h.args=b[3]?g.parse(b[3]):[]}catch(k){}}break;case"disconnect":case"heartbeat":}return h},c.decodePayload=function(a){if(a.charAt(0)=="\ufffd"){var b=[];for(var d=1,e="";d<a.length;d++)a.charAt(d)=="\ufffd"?(b.push(c.decodePacket(a.substr(d+1).substr(0,e))),d+=Number(e)+1,e=""):e+=a.charAt(d);return b}return[c.decodePacket(a)]}}("undefined"!=typeof io?io:module.exports,"undefined"!=typeof io?io:module.parent.exports),function(a,b){function c(a,b){this.socket=a,this.sessid=b}a.Transport=c,b.util.mixin(c,b.EventEmitter),c.prototype.onData=function(a){this.clearCloseTimeout(),this.setCloseTimeout();if(a!==""){var c=b.parser.decodePayload(a);if(c&&c.length)for(var d=0,e=c.length;d<e;d++)this.onPacket(c[d])}return this},c.prototype.onPacket=function(a){if(a.type=="heartbeat")return this.onHeartbeat();a.type=="connect"&&a.endpoint==""&&this.onConnect(),this.socket.onPacket(a);return this},c.prototype.setCloseTimeout=function(){if(!this.closeTimeout){var a=this;this.closeTimeout=setTimeout(function(){a.onDisconnect()},this.socket.closeTimeout)}},c.prototype.onDisconnect=function(){this.close&&this.close(),this.clearTimeouts(),this.socket.onDisconnect();return this},c.prototype.onConnect=function(){this.socket.onConnect();return this},c.prototype.clearCloseTimeout=function(){this.closeTimeout&&(clearTimeout(this.closeTimeout),this.closeTimeout=null)},c.prototype.clearTimeouts=function(){this.clearCloseTimeout(),this.reopenTimeout&&clearTimeout(this.reopenTimeout)},c.prototype.packet=function(a){this.send(b.parser.encodePacket(a))},c.prototype.onHeartbeat=function(a){this.packet({type:"heartbeat"})},c.prototype.onOpen=function(){this.open=!0,this.clearCloseTimeout(),this.socket.onOpen()},c.prototype.onClose=function(){var a=this;this.open=!1,this.setCloseTimeout(),this.socket.onClose()},c.prototype.prepareUrl=function(){var a=this.socket.options;return this.scheme()+"://"+a.host+":"+a.port+"/"+a.resource+"/"+b.protocol+"/"+this.name+"/"+this.sessid},c.prototype.ready=function(a,b){b.call(this)}}("undefined"!=typeof io?io:module.exports,"undefined"!=typeof io?io:module.parent.exports),function(a,b,c){function e(){}function d(a){this.options={port:80,secure:!1,document:"document"in c?document:!1,resource:"socket.io",transports:b.transports,"connect timeout":1e4,"try multiple transports":!0,reconnect:!0,"reconnection delay":500,"reconnection limit":Infinity,"reopen delay":3e3,"max reconnection attempts":10,"sync disconnect on unload":!0,"auto connect":!0,"flash policy port":10843},b.util.merge(this.options,a),this.connected=!1,this.open=!1,this.connecting=!1,this.reconnecting=!1,this.namespaces={},this.buffer=[],this.doBuffer=!1;if(this.options["sync disconnect on unload"]&&(!this.isXDomain()||b.util.ua.hasCORS)){var d=this;b.util.on(c,"beforeunload",function(){d.disconnectSync()},!1)}this.options["auto connect"]&&this.connect()}a.Socket=d,b.util.mixin(d,b.EventEmitter),d.prototype.of=function(a){this.namespaces[a]||(this.namespaces[a]=new b.SocketNamespace(this,a),a!==""&&this.namespaces[a].packet({type:"connect"}));return this.namespaces[a]},d.prototype.publish=function(){this.emit.apply(this,arguments);var a;for(var b in this.namespaces)this.namespaces.hasOwnProperty(b)&&(a=this.of(b),a.$emit.apply(a,arguments))},d.prototype.handshake=function(a){function f(b){b instanceof Error?c.onError(b.message):a.apply(null,b.split(":"))}var c=this,d=this.options,g=["http"+(d.secure?"s":"")+":/",d.host+":"+d.port,this.options.resource,b.protocol,b.util.query(this.options.query,"t="+ +(new Date))].join("/");if(this.isXDomain()){var h=document.getElementsByTagName("script")[0],i=document.createElement("script");i.src=g+"&jsonp="+b.j.length,h.parentNode.insertBefore(i,h),b.j.push(function(a){f(a),i.parentNode.removeChild(i)})}else{var j=b.util.request();j.open("GET",g,!0),j.onreadystatechange=function(){j.readyState==4&&(j.onreadystatechange=e,j.status==200?f(j.responseText):!c.reconnecting&&c.onError(j.responseText))},j.send(null)}},d.prototype.getTransport=function(a){var c=a||this.transports,d;for(var e=0,f;f=c[e];e++)if(b.Transport[f]&&b.Transport[f].check(this)&&(!this.isXDomain()||b.Transport[f].xdomainCheck()))return new b.Transport[f](this,this.sessionid);return null},d.prototype.connect=function(a){if(this.connecting)return this;var c=this;this.handshake(function(d,e,f,g){function h(a){c.transport&&c.transport.clearTimeouts(),c.transport=c.getTransport(a);if(!c.transport)return c.publish("connect_failed");c.transport.ready(c,function(){c.connecting=!0,c.publish("connecting",c.transport.name),c.transport.open(),c.options["connect timeout"]&&(c.connectTimeoutTimer=setTimeout(function(){if(!c.connected){c.connecting=!1;if(c.options["try multiple transports"]){c.remainingTransports||(c.remainingTransports=c.transports.slice(0));var a=c.remainingTransports;while(a.length>0&&a.splice(0,1)[0]!=c.transport.name);a.length?h(a):c.publish("connect_failed")}}},c.options["connect timeout"]))})}c.sessionid=d,c.closeTimeout=f*1e3,c.heartbeatTimeout=e*1e3,c.transports=b.util.intersect(g.split(","),c.options.transports),h(),c.once("connect",function(){clearTimeout(c.connectTimeoutTimer),a&&typeof a=="function"&&a()})});return this},d.prototype.packet=function(a){this.connected&&!this.doBuffer?this.transport.packet(a):this.buffer.push(a);return this},d.prototype.setBuffer=function(a){this.doBuffer=a,!a&&this.connected&&this.buffer.length&&(this.transport.payload(this.buffer),this.buffer=[])},d.prototype.disconnect=function(){this.connected&&(this.open&&this.of("").packet({type:"disconnect"}),this.onDisconnect("booted"));return this},d.prototype.disconnectSync=function(){var a=b.util.request(),c=this.resource+"/"+b.protocol+"/"+this.sessionid;a.open("GET",c,!0),this.onDisconnect("booted")},d.prototype.isXDomain=function(){var a=window.location.port||("https:"==window.location.protocol?443:80);return this.options.host!==document.domain||this.options.port!=a},d.prototype.onConnect=function(){this.connected||(this.connected=!0,this.connecting=!1,this.doBuffer||this.setBuffer(!1),this.emit("connect"))},d.prototype.onOpen=function(){this.open=!0},d.prototype.onClose=function(){this.open=!1},d.prototype.onPacket=function(a){this.of(a.endpoint).onPacket(a)},d.prototype.onError=function(a){a&&a.advice&&a.advice==="reconnect"&&this.connected&&(this.disconnect(),this.reconnect()),this.publish("error",a&&a.reason?a.reason:a)},d.prototype.onDisconnect=function(a){var b=this.connected;this.connected=!1,this.connecting=!1,this.open=!1,b&&(this.transport.close(),this.transport.clearTimeouts(),this.publish("disconnect",a),"booted"!=a&&this.options.reconnect&&!this.reconnecting&&this.reconnect())},d.prototype.reconnect=function(){function f(){if(!!a.reconnecting){if(a.connected)return e();if(a.connecting&&a.reconnecting)return a.reconnectionTimer=setTimeout(f,1e3);a.reconnectionAttempts++>=b?a.redoTransports?(a.publish("reconnect_failed"),e()):(a.on("connect_failed",f),a.options["try multiple transports"]=!0,a.transport=a.getTransport(),a.redoTransports=!0,a.connect()):(a.reconnectionDelay<d&&(a.reconnectionDelay*=2),a.connect(),a.publish("reconnecting",a.reconnectionDelay,a.reconnectionAttempts),a.reconnectionTimer=setTimeout(f,a.reconnectionDelay))}}function e(){if(a.connected){for(var b in a.namespaces)a.namespaces.hasOwnProperty(b)&&""!==b&&a.namespaces[b].packet({type:"connect"});a.publish("reconnect",a.transport.name,a.reconnectionAttempts)}a.removeListener("connect_failed",f),a.removeListener("connect",f),a.reconnecting=!1,delete a.reconnectionAttempts,delete a.reconnectionDelay,delete a.reconnectionTimer,delete a.redoTransports,a.options["try multiple transports"]=c}this.reconnecting=!0,this.reconnectionAttempts=0,this.reconnectionDelay=this.options["reconnection delay"];var a=this,b=this.options["max reconnection attempts"],c=this.options["try multiple transports"],d=this.options["reconnection limit"];this.options["try multiple transports"]=!1,this.reconnectionTimer=setTimeout(f,this.reconnectionDelay),this.on("connect",f)}}("undefined"!=typeof io?io:module.exports,"undefined"!=typeof io?io:module.parent.exports,this),function(a,b){function d(a,b){this.namespace=a,this.name=b}function c(a,b){this.socket=a,this.name=b||"",this.flags={},this.json=new d(this,"json"),this.ackPackets=0,this.acks={}}a.SocketNamespace=c,b.util.mixin(c,b.EventEmitter),c.prototype.$emit=b.EventEmitter.prototype.emit,c.prototype.of=function(){return this.socket.of.apply(this.socket,arguments)},c.prototype.packet=function(a){a.endpoint=this.name,this.socket.packet(a),this.flags={};return this},c.prototype.send=function(a,b){var c={type:this.flags.json?"json":"message",data:a};"function"==typeof b&&(c.id=++this.ackPackets,c.ack=!0,this.acks[c.id]=b);return this.packet(c)},c.prototype.emit=function(a){var b=Array.prototype.slice.call(arguments,1),c=b[b.length-1],d={type:"event",name:a};"function"==typeof c&&(d.id=++this.ackPackets,d.ack="data",this.acks[d.id]=c,b=b.slice(0,b.length-1)),d.args=b;return this.packet(d)},c.prototype.disconnect=function(){this.name===""?this.socket.disconnect():(this.packet({type:"disconnect"}),this.$emit("disconnect"));return this},c.prototype.onPacket=function(a){function d(){c.packet({type:"ack",args:b.util.toArray(arguments),ackId:a.id})}var c=this;switch(a.type){case"connect":this.$emit("connect");break;case"disconnect":this.name===""?this.socket.onDisconnect(a.reason||"booted"):this.$emit("disconnect",a.reason);break;case"message":case"json":var e=["message",a.data];a.ack=="data"?e.push(d):a.ack&&this.packet({type:"ack",ackId:a.id}),this.$emit.apply(this,e);break;case"event":var e=[a.name].concat(a.args);a.ack=="data"&&e.push(d),this.$emit.apply(this,e);break;case"ack":this.acks[a.ackId]&&(this.acks[a.ackId].apply(this,a.args),delete this.acks[a.ackId]);break;case"error":a.advice?this.socket.onError(a):a.reason=="unauthorized"?this.$emit("connect_failed",a.reason):this.$emit("error",a.reason)}},d.prototype.send=function(){this.namespace.flags[this.name]=!0,this.namespace.send.apply(this.namespace,arguments)},d.prototype.emit=function(){this.namespace.flags[this.name]=!0,this.namespace.emit.apply(this.namespace,arguments)}}("undefined"!=typeof io?io:module.exports,"undefined"!=typeof io?io:module.parent.exports),function(a,b){function c(a){b.Transport.apply(this,arguments)}a.websocket=c,b.util.inherit(c,b.Transport),c.prototype.name="websocket",c.prototype.open=function(){var a=b.util.query(this.socket.options.query),c=this,d;d||(d=window.MozWebSocket||window.WebSocket),this.websocket=new d(this.prepareUrl()+a),this.websocket.onopen=function(){c.onOpen(),c.socket.setBuffer(!1)},this.websocket.onmessage=function(a){c.onData(a.data)},this.websocket.onclose=function(){c.onClose(),c.socket.setBuffer(!0)},this.websocket.onerror=function(a){c.onError(a)};return this},c.prototype.send=function(a){this.websocket.send(a);return this},c.prototype.payload=function(a){for(var b=0,c=a.length;b<c;b++)this.packet(a[b]);return this},c.prototype.close=function(){this.websocket.close();return this},c.prototype.onError=function(a){this.socket.onError(a)},c.prototype.scheme=function(){return this.socket.options.secure?"wss":"ws"},c.check=function(){return"WebSocket"in window&&!("__addTask"in WebSocket)||"MozWebSocket"in window},c.xdomainCheck=function(){return!0},b.transports.push("websocket")}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports),function(a,b){function c(){b.Transport.websocket.apply(this,arguments)}a.flashsocket=c,b.util.inherit(c,b.Transport.websocket),c.prototype.name="flashsocket",c.prototype.open=function(){var a=this,c=arguments;WebSocket.__addTask(function(){b.Transport.websocket.prototype.open.apply(a,c)});return this},c.prototype.send=function(){var a=this,c=arguments;WebSocket.__addTask(function(){b.Transport.websocket.prototype.send.apply(a,c)});return this},c.prototype.close=function(){WebSocket.__tasks.length=0,b.Transport.websocket.prototype.close.call(this);return this},c.prototype.ready=function(a,d){function e(){var b=a.options,e=b["flash policy port"],g=["http"+(b.secure?"s":"")+":/",b.host+":"+b.port,b.resource,"static/flashsocket","WebSocketMain"+(a.isXDomain()?"Insecure":"")+".swf"];c.loaded||(typeof WEB_SOCKET_SWF_LOCATION=="undefined"&&(WEB_SOCKET_SWF_LOCATION=g.join("/")),e!==843&&WebSocket.loadFlashPolicyFile("xmlsocket://"+b.host+":"+e),WebSocket.__initialize(),c.loaded=!0),d.call(f)}var f=this;if(document.body)return e();b.util.load(e)},c.check=function(){return typeof WebSocket!="undefined"&&"__initialize"in WebSocket&&!!swfobject?swfobject.getFlashPlayerVersion().major>=10:!1},c.xdomainCheck=function(){return!0},typeof window!="undefined"&&(WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0),b.transports.push("flashsocket")}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports);var swfobject=function(){function V(b){var c=/[\\\"<>\.;]/,d=c.exec(b)!=null;return d&&typeof encodeURIComponent!=a?encodeURIComponent(b):b}function U(a,b){if(!!x){var c=b?"visible":"hidden";t&&P(a)?P(a).style.visibility=c:T("#"+a,"visibility:"+c)}}function T(c,d,e,f){if(!y.ie||!y.mac){var g=i.getElementsByTagName("head")[0];if(!g)return;var h=e&&typeof e=="string"?e:"screen";f&&(v=null,w=null);if(!v||w!=h){var j=Q("style");j.setAttribute("type","text/css"),j.setAttribute("media",h),v=g.appendChild(j),y.ie&&y.win&&typeof i.styleSheets!=a&&i.styleSheets.length>0&&(v=i.styleSheets[i.styleSheets.length-1]),w=h}y.ie&&y.win?v&&typeof v.addRule==b&&v.addRule(c,d):v&&typeof i.createTextNode!=a&&v.appendChild(i.createTextNode(c+" {"+d+"}"))}}function S(a){var b=y.pv,c=a.split(".");c[0]=parseInt(c[0],10),c[1]=parseInt(c[1],10)||0,c[2]=parseInt(c[2],10)||0;return b[0]>c[0]||b[0]==c[0]&&b[1]>c[1]||b[0]==c[0]&&b[1]==c[1]&&b[2]>=c[2]?!0:!1}function R(a,b,c){a.attachEvent(b,c),o[o.length]=[a,b,c]}function Q(a){return i.createElement(a)}function P(a){var b=null;try{b=i.getElementById(a)}catch(c){}return b}function O(a){var b=P(a);if(b){for(var c in b)typeof b[c]=="function"&&(b[c]=null);b.parentNode.removeChild(b)}}function N(a){var b=P(a);b&&b.nodeName=="OBJECT"&&(y.ie&&y.win?(b.style.display="none",function(){b.readyState==4?O(a):setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function M(a,b,c){var d=Q("param");d.setAttribute("name",b),d.setAttribute("value",c),a.appendChild(d)}function L(c,d,f){var g,h=P(f);if(y.wk&&y.wk<312)return g;if(h){typeof c.id==a&&(c.id=f);if(y.ie&&y.win){var i="";for(var j in c)c[j]!=Object.prototype[j]&&(j.toLowerCase()=="data"?d.movie=c[j]:j.toLowerCase()=="styleclass"?i+=' class="'+c[j]+'"':j.toLowerCase()!="classid"&&(i+=" "+j+'="'+c[j]+'"'));var k="";for(var l in d)d[l]!=Object.prototype[l]&&(k+='<param name="'+l+'" value="'+d[l]+'" />');h.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+i+">"+k+"</object>",n[n.length]=c.id,g=P(c.id)}else{var m=Q(b);m.setAttribute("type",e);for(var o in c)c[o]!=Object.prototype[o]&&(o.toLowerCase()=="styleclass"?m.setAttribute("class",c[o]):o.toLowerCase()!="classid"&&m.setAttribute(o,c[o]));for(var p in d)d[p]!=Object.prototype[p]&&p.toLowerCase()!="movie"&&M(m,p,d[p]);h.parentNode.replaceChild(m,h),g=m}}return g}function K(a){var c=Q("div");if(y.win&&y.ie)c.innerHTML=a.innerHTML;else{var d=a.getElementsByTagName(b)[0];if(d){var e=d.childNodes;if(e){var f=e.length;for(var g=0;g<f;g++)(e[g].nodeType!=1||e[g].nodeName!="PARAM")&&e[g].nodeType!=8&&c.appendChild(e[g].cloneNode(!0))}}}return c}function J(a){if(y.ie&&y.win&&a.readyState!=4){var b=Q("div");a.parentNode.insertBefore(b,a),b.parentNode.replaceChild(K(a),b),a.style.display="none",function(){a.readyState==4?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)}()}else a.parentNode.replaceChild(K(a),a)}function I(b,c,d,e){u=!0,r=e||null,s={success:!1,id:d};var g=P(d);if(g){g.nodeName=="OBJECT"?(p=K(g),q=null):(p=g,q=d),b.id=f;if(typeof b.width==a||!/%$/.test(b.width)&&parseInt(b.width,10)<310)b.width="310";if(typeof b.height==a||!/%$/.test(b.height)&&parseInt(b.height,10)<137)b.height="137";i.title=i.title.slice(0,47)+" - Flash Player Installation";var j=y.ie&&y.win?"ActiveX":"PlugIn",k="MMredirectURL="+h.location.toString().replace(/&/g,"%26")+"&MMplayerType="+j+"&MMdoctitle="+i.title;typeof c.flashvars!=a?c.flashvars+="&"+k:c.flashvars=k;if(y.ie&&y.win&&g.readyState!=4){var l=Q("div");d+="SWFObjectNew",l.setAttribute("id",d),g.parentNode.insertBefore(l,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}()}L(b,c,d)}}function H(){return!u&&S("6.0.65")&&(y.win||y.mac)&&!(y.wk&&y.wk<312)}function G(c){var d=null,e=P(c);if(e&&e.nodeName=="OBJECT")if(typeof e.SetVariable!=a)d=e;else{var f=e.getElementsByTagName(b)[0];f&&(d=f)}return d}function F(){var b=m.length;if(b>0)for(var c=0;c<b;c++){var d=m[c].id,e=m[c].callbackFn,f={success:!1,id:d};if(y.pv[0]>0){var g=P(d);if(g)if(S(m[c].swfVersion)&&!(y.wk&&y.wk<312))U(d,!0),e&&(f.success=!0,f.ref=G(d),e(f));else if(m[c].expressInstall&&H()){var h={};h.data=m[c].expressInstall,h.width=g.getAttribute("width")||"0",h.height=g.getAttribute("height")||"0",g.getAttribute("class")&&(h.styleclass=g.getAttribute("class")),g.getAttribute("align")&&(h.align=g.getAttribute("align"));var i={},j=g.getElementsByTagName("param"),k=j.length;for(var l=0;l<k;l++)j[l].getAttribute("name").toLowerCase()!="movie"&&(i[j[l].getAttribute("name")]=j[l].getAttribute("value"));I(h,i,d,e)}else J(g),e&&e(f)}else{U(d,!0);if(e){var n=G(d);n&&typeof n.SetVariable!=a&&(f.success=!0,f.ref=n),e(f)}}}}function E(){var c=i.getElementsByTagName("body")[0],d=Q(b);d.setAttribute("type",e);var f=c.appendChild(d);if(f){var g=0;(function(){if(typeof f.GetVariable!=a){var b=f.GetVariable("$version");b&&(b=b.split(" ")[1].split(","),y.pv=[parseInt(b[0],10),parseInt(b[1],10),parseInt(b[2],10)])}else if(g<10){g++,setTimeout(arguments.callee,10);return}c.removeChild(d),f=null,F()})()}else F()}function D(){k?E():F()}function C(b){if(typeof h.addEventListener!=a)h.addEventListener("load",b,!1);else if(typeof i.addEventListener!=a)i.addEventListener("load",b,!1);else if(typeof h.attachEvent!=a)R(h,"onload",b);else if(typeof h.onload=="function"){var c=h.onload;h.onload=function(){c(),b()}}else h.onload=b}function B(a){t?a():l[l.length]=a}function A(){if(!t){try{var a=i.getElementsByTagName("body")[0].appendChild(Q("span"));a.parentNode.removeChild(a)}catch(b){return}t=!0;var c=l.length;for(var d=0;d<c;d++)l[d]()}}var a="undefined",b="object",c="Shockwave Flash",d="ShockwaveFlash.ShockwaveFlash",e="application/x-shockwave-flash",f="SWFObjectExprInst",g="onreadystatechange",h=window,i=document,j=navigator,k=!1,l=[D],m=[],n=[],o=[],p,q,r,s,t=!1,u=!1,v,w,x=!0,y=function(){var f=typeof i.getElementById!=a&&typeof i.getElementsByTagName!=a&&typeof i.createElement!=a,g=j.userAgent.toLowerCase(),l=j.platform.toLowerCase(),m=l?/win/.test(l):/win/.test(g),n=l?/mac/.test(l):/mac/.test(g),o=/webkit/.test(g)?parseFloat(g.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,p=!1,q=[0,0,0],r=null;if(typeof j.plugins!=a&&typeof j.plugins[c]==b)r=j.plugins[c].description,r&&(typeof j.mimeTypes==a||!j.mimeTypes[e]||!!j.mimeTypes[e].enabledPlugin)&&(k=!0,p=!1,r=r.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),q[0]=parseInt(r.replace(/^(.*)\..*$/,"$1"),10),q[1]=parseInt(r.replace(/^.*\.(.*)\s.*$/,"$1"),10),q[2]=/[a-zA-Z]/.test(r)?parseInt(r.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0);else if(typeof h.ActiveXObject!=a)try{var s=new ActiveXObject(d);s&&(r=s.GetVariable("$version"),r&&(p=!0,r=r.split(" ")[1].split(","),q=[parseInt(r[0],10),parseInt(r[1],10),parseInt(r[2],10)]))}catch(t){}return{w3:f,pv:q,wk:o,ie:p,win:m,mac:n}}(),z=function(){!y.w3||((typeof i.readyState!=a&&i.readyState=="complete"||typeof i.readyState==a&&(i.getElementsByTagName("body")[0]||i.body))&&A(),t||(typeof i.addEventListener!=a&&i.addEventListener("DOMContentLoaded",A,!1),y.ie&&y.win&&(i.attachEvent(g,function(){i.readyState=="complete"&&(i.detachEvent(g,arguments.callee),A())}),h==top&&function(){if(!t){try{i.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}A()}}()),y.wk&&function(){if(!t){if(!/loaded|complete/.test(i.readyState)){setTimeout(arguments.callee,0);return}A()}}(),C(A)))}(),W=function(){y.ie&&y.win&&window.attachEvent("onunload",function(){var a=o.length;for(var b=0;b<a;b++)o[b][0].detachEvent(o[b][1],o[b][2]);var c=n.length;for(var d=0;d<c;d++)N(n[d]);for(var e in y)y[e]=null;y=null;for(var f in swfobject)swfobject[f]=null;swfobject=null})}();return{registerObject:function(a,b,c,d){if(y.w3&&a&&b){var e={};e.id=a,e.swfVersion=b,e.expressInstall=c,e.callbackFn=d,m[m.length]=e,U(a,!1)}else d&&d({success:!1,id:a})},getObjectById:function(a){if(y.w3)return G(a)},embedSWF:function(c,d,e,f,g,h,i,j,k,l){var m={success:!1,id:d};y.w3&&!(y.wk&&y.wk<312)&&c&&d&&e&&f&&g?(U(d,!1),B(function(){e+="",f+="";var n={};if(k&&typeof k===b)for(var o in k)n[o]=k[o];n.data=c,n.width=e,n.height=f;var p={};if(j&&typeof j===b)for(var q in j)p[q]=j[q];if(i&&typeof i===b)for(var r in i)typeof p.flashvars!=a?p.flashvars+="&"+r+"="+i[r]:p.flashvars=r+"="+i[r];if(S(g)){var s=L(n,p,d);n.id==d&&U(d,!0),m.success=!0,m.ref=s}else{if(h&&H()){n.data=h,I(n,p,d,l);return}U(d,!0)}l&&l(m)})):l&&l(m)},switchOffAutoHideShow:function(){x=!1},ua:y,getFlashPlayerVersion:function(){return{major:y.pv[0],minor:y.pv[1],release:y.pv[2]}},hasFlashPlayerVersion:S,createSWF:function(a,b,c){return y.w3?L(a,b,c):undefined},showExpressInstall:function(a,b,c,d){y.w3&&H()&&I(a,b,c,d)},removeSWF:function(a){y.w3&&N(a)},createCSS:function(a,b,c,d){y.w3&&T(a,b,c,d)},addDomLoadEvent:B,addLoadEvent:C,getQueryParamValue:function(a){var b=i.location.search||i.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(a==null)return V(b);var c=b.split("&");for(var d=0;d<c.length;d++)if(c[d].substring(0,c[d].indexOf("="))==a)return V(c[d].substring(c[d].indexOf("=")+1))}return""},expressInstallCallback:function(){if(u){var a=P(f);a&&p&&(a.parentNode.replaceChild(p,a),q&&(U(q,!0),y.ie&&y.win&&(p.style.display="block")),r&&r(s)),u=!1}}}}();(function(){if(!window.WebSocket){var a=window.console;if(!a||!a.log||!a.error)a={log:function(){},error:function(){}};if(!swfobject.hasFlashPlayerVersion("10.0.0")){a.error("Flash Player >= 10.0.0 is required.");return}location.protocol=="file:"&&a.error("WARNING: web-socket-js doesn't work in file:///... URL unless you set Flash Security Settings properly. Open the page via Web server i.e. http://..."),WebSocket=function(a,b,c,d,e){var f=this;f.__id=WebSocket.__nextId++,WebSocket.__instances[f.__id]=f,f.readyState=WebSocket.CONNECTING,f.bufferedAmount=0,f.__events={},b?typeof b=="string"&&(b=[b]):b=[],setTimeout(function(){WebSocket.__addTask(function(){WebSocket.__flash.create(f.__id,a,b,c||null,d||0,e||null)})},0)},WebSocket.prototype.send=function(a){if(this.readyState==WebSocket.CONNECTING)throw"INVALID_STATE_ERR: Web Socket connection has not been established";var b=WebSocket.__flash.send(this.__id,encodeURIComponent(a));if(b<0)return!0;this.bufferedAmount+=b;return!1},WebSocket.prototype.close=function(){this.readyState!=WebSocket.CLOSED&&this.readyState!=WebSocket.CLOSING&&(this.readyState=WebSocket.CLOSING,WebSocket.__flash.close(this.__id))},WebSocket.prototype.addEventListener=function(a,b,c){a in this.__events||(this.__events[a]=[]),this.__events[a].push(b)},WebSocket.prototype.removeEventListener=function(a,b,c){if(a in this.__events){var d=this.__events[a];for(var e=d.length-1;e>=0;--e)if(d[e]===b){d.splice(e,1);break}}},WebSocket.prototype.dispatchEvent=function(a){var b=this.__events[a.type]||[];for(var c=0;c<b.length;++c)b[c](a);var d=this["on"+a.type];d&&d(a)},WebSocket.prototype.__handleEvent=function(a){"readyState"in a&&(this.readyState=a.readyState),"protocol"in a&&(this.protocol=a.protocol);var b;if(a.type=="open"||a.type=="error")b=this.__createSimpleEvent(a.type);else if(a.type=="close")b=this.__createSimpleEvent("close");else{if(a.type!="message")throw"unknown event type: "+a.type;var c=decodeURIComponent(a.message);b=this.__createMessageEvent("message",c)}this.dispatchEvent(b)},WebSocket.prototype.__createSimpleEvent=function(a){if(document.createEvent&&window.Event){var b=document.createEvent("Event");b.initEvent(a,!1,!1);return b}return{type:a,bubbles:!1,cancelable:!1}},WebSocket.prototype.__createMessageEvent=function(a,b){if(document.createEvent&&window.MessageEvent&&!window.opera){var c=document.createEvent("MessageEvent");c.initMessageEvent("message",!1,!1,b,null,null,window,null);return c}return{type:a,data:b,bubbles:!1,cancelable:!1}},WebSocket.CONNECTING=0,WebSocket.OPEN=1,WebSocket.CLOSING=2,WebSocket.CLOSED=3,WebSocket.__flash=null,WebSocket.__instances={},WebSocket.__tasks=[],WebSocket.__nextId=0,WebSocket.loadFlashPolicyFile=function(a){WebSocket.__addTask(function(){WebSocket.__flash.loadManualPolicyFile(a)})},WebSocket.__initialize=function(){if(!WebSocket.__flash){WebSocket.__swfLocation&&(window.WEB_SOCKET_SWF_LOCATION=WebSocket.__swfLocation);if(!window.WEB_SOCKET_SWF_LOCATION){a.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf");return}var b=document.createElement("div");b.id="webSocketContainer",b.style.position="absolute",WebSocket.__isFlashLite()?(b.style.left="0px",b.style.top="0px"):(b.style.left="-100px",b.style.top="-100px");var c=document.createElement("div");c.id="webSocketFlash",b.appendChild(c),document.body.appendChild(b),swfobject.embedSWF(WEB_SOCKET_SWF_LOCATION,"webSocketFlash","1","1","10.0.0",null,null,{hasPriority:!0,swliveconnect:!0,allowScriptAccess:"always"},null,function(b){b.success||a.error("[WebSocket] swfobject.embedSWF failed")})}},WebSocket.__onFlashInitialized=function(){setTimeout(function(){WebSocket.__flash=document.getElementById("webSocketFlash"),WebSocket.__flash.setCallerUrl(location.href),WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG);for(var a=0;a<WebSocket.__tasks.length;++a)WebSocket.__tasks[a]();WebSocket.__tasks=[]},0)},WebSocket.__onFlashEvent=function(){setTimeout(function(){try{var b=WebSocket.__flash.receiveEvents();for(var c=0;c<b.length;++c)WebSocket.__instances[b[c].webSocketId].__handleEvent(b[c])}catch(d){a.error(d)}},0);return!0},WebSocket.__log=function(b){a.log(decodeURIComponent(b))},WebSocket.__error=function(b){a.error(decodeURIComponent(b))},WebSocket.__addTask=function(a){WebSocket.__flash?a():WebSocket.__tasks.push(a)},WebSocket.__isFlashLite=function(){if(!window.navigator||!window.navigator.mimeTypes)return!1;var a=window.navigator.mimeTypes["application/x-shockwave-flash"];return!a||!a.enabledPlugin||!a.enabledPlugin.filename?!1:a.enabledPlugin.filename.match(/flashlite/i)?!0:!1},window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION||(window.addEventListener?window.addEventListener("load",function(){WebSocket.__initialize()},!1):window.attachEvent("onload",function(){WebSocket.__initialize()}))}})(),function(a,b,c){function e(){}function d(a){!a||(b.Transport.apply(this,arguments),this.sendBuffer=[])}a.XHR=d,b.util.inherit(d,b.Transport),d.prototype.open=function(){this.socket.setBuffer(!1),this.onOpen(),this.get(),this.setCloseTimeout();return this},d.prototype.payload=function(a){var c=[];for(var d=0,e=a.length;d<e;d++)c.push(b.parser.encodePacket(a[d]));this.send(b.parser.encodePayload(c))},d.prototype.send=function(a){this.post(a);return this},d.prototype.post=function(a){function f(){this.onload=e,b.socket.setBuffer(!1)}function d(){this.readyState==4&&(this.onreadystatechange=e,b.posting=!1,this.status==200?b.socket.setBuffer(!1):b.onClose())}var b=this;this.socket.setBuffer(!0),this.sendXHR=this.request("POST"),c.XDomainRequest&&this.sendXHR instanceof XDomainRequest?this.sendXHR.onload=this.sendXHR.onerror=f:this.sendXHR.onreadystatechange=d,this.sendXHR.send(a)},d.prototype.close=function(){this.onClose();return this},d.prototype.request=function(a){var c=b.util.request(this.socket.isXDomain()),d=b.util.query(this.socket.options.query,"t="+ +(new Date));c.open(a||"GET",this.prepareUrl()+d,!0);if(a=="POST")try{c.setRequestHeader?c.setRequestHeader("Content-type","text/plain;charset=UTF-8"):c.contentType="text/plain"}catch(e){}return c},d.prototype.scheme=function(){return this.socket.options.secure?"https":"http"},d.check=function(a,c){try{if(b.util.request(c))return!0}catch(d){}return!1},d.xdomainCheck=function(){return d.check(null,!0)}}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports,this),function(a,b){function c(a){b.Transport.XHR.apply(this,arguments)}a.htmlfile=c,b.util.inherit(c,b.Transport.XHR),c.prototype.name="htmlfile",c.prototype.get=function(){this.doc=new ActiveXObject("htmlfile"),this.doc.open(),this.doc.write("<html></html>"),this.doc.close(),this.doc.parentWindow.s=this;var a=this.doc.createElement("div");a.className="socketio",this.doc.body.appendChild(a),this.iframe=this.doc.createElement("iframe"),a.appendChild(this.iframe);var c=this,d=b.util.query(this.socket.options.query,"t="+ +(new Date));this.iframe.src=this.prepareUrl()+d,b.util.on(window,"unload",function(){c.destroy()})},c.prototype._=function(a,b){this.onData(a);try{var c=b.getElementsByTagName("script")[0];c.parentNode.removeChild(c)}catch(d){}},c.prototype.destroy=function(){if(this.iframe){try{this.iframe.src="about:blank"}catch(a){}this.doc=null,this.iframe.parentNode.removeChild(this.iframe),this.iframe=null,CollectGarbage()}},c.prototype.close=function(){this.destroy();return b.Transport.XHR.prototype.close.call(this)},c.check=function(){if("ActiveXObject"in window)try{var a=new ActiveXObject("htmlfile");return a&&b.Transport.XHR.check()}catch(c){}return!1},c.xdomainCheck=function(){return!1},b.transports.push("htmlfile")}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports),function(a,b,c){function e(){}function d(){b.Transport.XHR.apply(this,arguments)}a["xhr-polling"]=d,b.util.inherit(d,b.Transport.XHR),b.util.merge(d,b.Transport.XHR),d.prototype.name="xhr-polling",d.prototype.open=function(){var a=this;b.Transport.XHR.prototype.open.call(a);return!1},d.prototype.get=function(){function d(){this.onload=e,a.onData(this.responseText),a.get()}function b(){this.readyState==4&&(this.onreadystatechange=e,this.status==200?(a.onData(this.responseText),a.get()):a.onClose())}if(!!this.open){var a=this;this.xhr=this.request(),c.XDomainRequest&&this.xhr instanceof XDomainRequest?this.xhr.onload=this.xhr.onerror=d:this.xhr.onreadystatechange=b,this.xhr.send(null)}},d.prototype.onClose=function(){b.Transport.XHR.prototype.onClose.call(this);if(this.xhr){this.xhr.onreadystatechange=this.xhr.onload=e;try{this.xhr.abort()}catch(a){}this.xhr=null}},d.prototype.ready=function(a,c){var d=this;b.util.defer(function(){c.call(d)})},b.transports.push("xhr-polling")}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports,this),function(a,b){function c(a){b.Transport["xhr-polling"].apply(this,arguments),this.index=b.j.length;var c=this;b.j.push(function(a){c._(a)})}a["jsonp-polling"]=c,b.util.inherit(c,b.Transport["xhr-polling"]),c.prototype.name="jsonp-polling",c.prototype.post=function(a){function j(){c.iframe&&c.form.removeChild(c.iframe);try{h=document.createElement('<iframe name="'+c.iframeId+'">')}catch(a){h=document.createElement("iframe"),h.name=c.iframeId}h.id=c.iframeId,c.form.appendChild(h),c.iframe=h}function i(){j(),c.socket.setBuffer(!1)}var c=this,d=b.util.query(this.socket.options.query,"t="+ +(new Date)+"&i="+this.index);if(!this.form){var e=document.createElement("form"),f=document.createElement("textarea"),g=this.iframeId="socketio_iframe_"+this.index,h;e.className="socketio",e.style.position="absolute",e.style.top="-1000px",e.style.left="-1000px",e.target=g,e.method="POST",e.setAttribute("accept-charset","utf-8"),f.name="d",e.appendChild(f),document.body.appendChild(e),this.form=e,this.area=f}this.form.action=this.prepareUrl()+d,j(),this.area.value=a;try{this.form.submit()}catch(k){}this.iframe.attachEvent?h.onreadystatechange=function(){c.iframe.readyState=="complete"&&i()}:this.iframe.onload=i,this.socket.setBuffer(!0)},c.prototype.get=function(){var a=this,c=document.createElement("script"),d=b.util.query(this.socket.options.query,"t="+ +(new Date)+"&i="+this.index);this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),c.async=!0,c.src=this.prepareUrl()+d,c.onerror=function(){a.onClose()};var e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(c,e),this.script=c},c.prototype._=function(a){this.onData(a),this.open&&this.get();return this},c.check=function(){return!0},c.xdomainCheck=function(){return!0},b.transports.push("jsonp-polling")}("undefined"!=typeof io?io.Transport:module.exports,"undefined"!=typeof io?io:module.parent.exports)
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/events.js b/node/node_modules/socket.io-client/lib/events.js
deleted file mode 100644 (file)
index 5500781..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.EventEmitter = EventEmitter;
-
-  /**
-   * Event emitter constructor.
-   *
-   * @api public.
-   */
-
-  function EventEmitter () {};
-
-  /**
-   * Adds a listener
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.on = function (name, fn) {
-    if (!this.$events) {
-      this.$events = {};
-    }
-
-    if (!this.$events[name]) {
-      this.$events[name] = fn;
-    } else if (io.util.isArray(this.$events[name])) {
-      this.$events[name].push(fn);
-    } else {
-      this.$events[name] = [this.$events[name], fn];
-    }
-
-    return this;
-  };
-
-  EventEmitter.prototype.addListener = EventEmitter.prototype.on;
-
-  /**
-   * Adds a volatile listener.
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.once = function (name, fn) {
-    var self = this;
-
-    function on () {
-      self.removeListener(name, on);
-      fn.apply(this, arguments);
-    };
-
-    on.listener = fn;
-    this.on(name, on);
-
-    return this;
-  };
-
-  /**
-   * Removes a listener.
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.removeListener = function (name, fn) {
-    if (this.$events && this.$events[name]) {
-      var list = this.$events[name];
-
-      if (io.util.isArray(list)) {
-        var pos = -1;
-
-        for (var i = 0, l = list.length; i < l; i++) {
-          if (list[i] === fn || (list[i].listener && list[i].listener === fn)) {
-            pos = i;
-            break;
-          }
-        }
-
-        if (pos < 0) {
-          return this;
-        }
-
-        list.splice(pos, 1);
-
-        if (!list.length) {
-          delete this.$events[name];
-        }
-      } else if (list === fn || (list.listener && list.listener === fn)) {
-        delete this.$events[name];
-      }
-    }
-
-    return this;
-  };
-
-  /**
-   * Removes all listeners for an event.
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.removeAllListeners = function (name) {
-    // TODO: enable this when node 0.5 is stable
-    //if (name === undefined) {
-      //this.$events = {};
-      //return this;
-    //}
-
-    if (this.$events && this.$events[name]) {
-      this.$events[name] = null;
-    }
-
-    return this;
-  };
-
-  /**
-   * Gets all listeners for a certain event.
-   *
-   * @api publci
-   */
-
-  EventEmitter.prototype.listeners = function (name) {
-    if (!this.$events) {
-      this.$events = {};
-    }
-
-    if (!this.$events[name]) {
-      this.$events[name] = [];
-    }
-
-    if (!io.util.isArray(this.$events[name])) {
-      this.$events[name] = [this.$events[name]];
-    }
-
-    return this.$events[name];
-  };
-
-  /**
-   * Emits an event.
-   *
-   * @api public
-   */
-
-  EventEmitter.prototype.emit = function (name) {
-    if (!this.$events) {
-      return false;
-    }
-
-    var handler = this.$events[name];
-
-    if (!handler) {
-      return false;
-    }
-
-    var args = Array.prototype.slice.call(arguments, 1);
-
-    if ('function' == typeof handler) {
-      handler.apply(this, args);
-    } else if (io.util.isArray(handler)) {
-      var listeners = handler.slice();
-
-      for (var i = 0, l = listeners.length; i < l; i++) {
-        listeners[i].apply(this, args);
-      }
-    } else {
-      return false;
-    }
-
-    return true;
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/lib/io.js b/node/node_modules/socket.io-client/lib/io.js
deleted file mode 100644 (file)
index 100787a..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports) {
-
-  /**
-   * IO namespace.
-   *
-   * @namespace
-   */
-
-  var io = exports;
-
-  /**
-   * Socket.IO version
-   *
-   * @api public
-   */
-
-  io.version = '0.8.4';
-
-  /**
-   * Protocol implemented.
-   *
-   * @api public
-   */
-
-  io.protocol = 1;
-
-  /**
-   * Available transports, these will be populated with the available transports
-   *
-   * @api public
-   */
-
-  io.transports = [];
-
-  /**
-   * Keep track of jsonp callbacks.
-   *
-   * @api private
-   */
-
-  io.j = [];
-
-  /**
-   * Keep track of our io.Sockets
-   *
-   * @api private
-   */
-  io.sockets = {};
-
-  // if node
-
-  /**
-   * Expose constructors if in Node
-   */
-
-  if ('object' === typeof module && 'function' === typeof require) {
-
-    /**
-     * Expose utils
-     *
-     * @api private
-     */
-
-    io.util = require('./util').util;
-
-    /**
-     * Expose JSON.
-     *
-     * @api private
-     */
-
-    io.JSON = require('./json').JSON;
-
-    /**
-     * Expose parser.
-     *
-     * @api private
-     */
-
-    io.parser = require('./parser').parser;
-
-    /**
-     * Expose EventEmitter
-     *
-     * @api private
-     */
-
-    io.EventEmitter = process.EventEmitter;
-
-    /**
-     * Expose SocketNamespace
-     *
-     * @api private
-     */
-
-     io.SocketNamespace = require('./namespace').SocketNamespace;
-
-    /**
-     * Expose Transport
-     *
-     * @api public
-     */
-
-    io.Transport = require('./transport').Transport;
-
-    /**
-     * Default enabled transports
-     *
-     * @api public
-     */
-
-    io.transports = ['websocket', 'xhr-polling'];
-
-    /**
-     * Expose all transports
-     *
-     * @api public
-     */
-
-    io.Transport.XHR = require('./transports/xhr').XHR;
-
-    io.transports.forEach(function (t) {
-      io.Transport[t] = require('./transports/' + t)[t];
-    });
-
-    /**
-     * Expose Socket
-     *
-     * @api public
-     */
-
-    io.Socket = require('./socket').Socket;
-
-    /**
-     * Location of `dist/` directory.
-     *
-     * @api private
-     */
-
-    io.dist = __dirname + '/../dist';
-
-    /**
-     * Expose our build system which can generate
-     * socket.io files on the fly with different transports
-     *
-     * @api private
-     */
-
-    io.builder = require('../bin/builder');
-
-  }
-  // end node
-
-  /**
-   * Manages connections to hosts.
-   *
-   * @param {String} uri
-   * @Param {Boolean} force creation of new socket (defaults to false)
-   * @api public
-   */
-
-  io.connect = function (host, details) {
-    var uri = io.util.parseUri(host)
-      , uuri
-      , socket;
-
-    if ('undefined' != typeof document) {
-      uri.protocol = uri.protocol || document.location.protocol.slice(0, -1);
-      uri.host = uri.host || document.domain;
-      uri.port = uri.port || document.location.port;
-    }
-
-    uuri = io.util.uniqueUri(uri);
-
-    var options = {
-        host: uri.host
-      , secure: 'https' == uri.protocol
-      , port: uri.port || ('https' == uri.protocol ? 443 : 80)
-      , query: uri.query || ''
-    };
-
-    io.util.merge(options, details);
-
-    if (options['force new connection'] || !io.sockets[uuri]) {
-      socket = new io.Socket(options);
-    }
-
-    if (!options['force new connection'] && socket) {
-      io.sockets[uuri] = socket;
-    }
-
-    socket = socket || io.sockets[uuri];
-
-    // if path is different from '' or /
-    return socket.of(uri.path.length > 1 ? uri.path : '');
-  };
-
-})('object' === typeof module ? module.exports : (window.io = {}));
diff --git a/node/node_modules/socket.io-client/lib/json.js b/node/node_modules/socket.io-client/lib/json.js
deleted file mode 100644 (file)
index a81a01d..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Based on JSON2 (http://www.JSON.org/js.html).
- */
-
-(function (exports, nativeJSON) {
-  "use strict";
-
-  // use native JSON if it's available
-  if (nativeJSON && nativeJSON.parse){
-    return exports.JSON = {
-      parse: nativeJSON.parse
-    , stringify: nativeJSON.stringify
-    }
-  }
-
-  var JSON = exports.JSON = {};
-
-  function f(n) {
-      // Format integers to have at least two digits.
-      return n < 10 ? '0' + n : n;
-  }
-
-  function date(d, key) {
-    return isFinite(d.valueOf()) ?
-        d.getUTCFullYear()     + '-' +
-        f(d.getUTCMonth() + 1) + '-' +
-        f(d.getUTCDate())      + 'T' +
-        f(d.getUTCHours())     + ':' +
-        f(d.getUTCMinutes())   + ':' +
-        f(d.getUTCSeconds())   + 'Z' : null;
-  };
-
-  var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-      escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-      gap,
-      indent,
-      meta = {    // table of character substitutions
-          '\b': '\\b',
-          '\t': '\\t',
-          '\n': '\\n',
-          '\f': '\\f',
-          '\r': '\\r',
-          '"' : '\\"',
-          '\\': '\\\\'
-      },
-      rep;
-
-
-  function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
-      escapable.lastIndex = 0;
-      return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
-          var c = meta[a];
-          return typeof c === 'string' ? c :
-              '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-      }) + '"' : '"' + string + '"';
-  }
-
-
-  function str(key, holder) {
-
-// Produce a string from holder[key].
-
-      var i,          // The loop counter.
-          k,          // The member key.
-          v,          // The member value.
-          length,
-          mind = gap,
-          partial,
-          value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
-      if (value instanceof Date) {
-          value = date(key);
-      }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
-      if (typeof rep === 'function') {
-          value = rep.call(holder, key, value);
-      }
-
-// What happens next depends on the value's type.
-
-      switch (typeof value) {
-      case 'string':
-          return quote(value);
-
-      case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
-          return isFinite(value) ? String(value) : 'null';
-
-      case 'boolean':
-      case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
-          return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
-      case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
-          if (!value) {
-              return 'null';
-          }
-
-// Make an array to hold the partial results of stringifying this object value.
-
-          gap += indent;
-          partial = [];
-
-// Is the value an array?
-
-          if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
-              length = value.length;
-              for (i = 0; i < length; i += 1) {
-                  partial[i] = str(i, value) || 'null';
-              }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
-              v = partial.length === 0 ? '[]' : gap ?
-                  '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
-                  '[' + partial.join(',') + ']';
-              gap = mind;
-              return v;
-          }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
-          if (rep && typeof rep === 'object') {
-              length = rep.length;
-              for (i = 0; i < length; i += 1) {
-                  if (typeof rep[i] === 'string') {
-                      k = rep[i];
-                      v = str(k, value);
-                      if (v) {
-                          partial.push(quote(k) + (gap ? ': ' : ':') + v);
-                      }
-                  }
-              }
-          } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
-              for (k in value) {
-                  if (Object.prototype.hasOwnProperty.call(value, k)) {
-                      v = str(k, value);
-                      if (v) {
-                          partial.push(quote(k) + (gap ? ': ' : ':') + v);
-                      }
-                  }
-              }
-          }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
-          v = partial.length === 0 ? '{}' : gap ?
-              '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
-              '{' + partial.join(',') + '}';
-          gap = mind;
-          return v;
-      }
-  }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
-  JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
-      var i;
-      gap = '';
-      indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
-      if (typeof space === 'number') {
-          for (i = 0; i < space; i += 1) {
-              indent += ' ';
-          }
-
-// If the space parameter is a string, it will be used as the indent string.
-
-      } else if (typeof space === 'string') {
-          indent = space;
-      }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
-      rep = replacer;
-      if (replacer && typeof replacer !== 'function' &&
-              (typeof replacer !== 'object' ||
-              typeof replacer.length !== 'number')) {
-          throw new Error('JSON.stringify');
-      }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
-      return str('', {'': value});
-  };
-
-// If the JSON object does not yet have a parse method, give it one.
-
-  JSON.parse = function (text, reviver) {
-  // The parse method takes a text and an optional reviver function, and returns
-  // a JavaScript value if the text is a valid JSON text.
-
-      var j;
-
-      function walk(holder, key) {
-
-  // The walk method is used to recursively walk the resulting structure so
-  // that modifications can be made.
-
-          var k, v, value = holder[key];
-          if (value && typeof value === 'object') {
-              for (k in value) {
-                  if (Object.prototype.hasOwnProperty.call(value, k)) {
-                      v = walk(value, k);
-                      if (v !== undefined) {
-                          value[k] = v;
-                      } else {
-                          delete value[k];
-                      }
-                  }
-              }
-          }
-          return reviver.call(holder, key, value);
-      }
-
-
-  // Parsing happens in four stages. In the first stage, we replace certain
-  // Unicode characters with escape sequences. JavaScript handles many characters
-  // incorrectly, either silently deleting them, or treating them as line endings.
-
-      text = String(text);
-      cx.lastIndex = 0;
-      if (cx.test(text)) {
-          text = text.replace(cx, function (a) {
-              return '\\u' +
-                  ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-          });
-      }
-
-  // In the second stage, we run the text against regular expressions that look
-  // for non-JSON patterns. We are especially concerned with '()' and 'new'
-  // because they can cause invocation, and '=' because it can cause mutation.
-  // But just to be safe, we want to reject all unexpected forms.
-
-  // We split the second stage into 4 regexp operations in order to work around
-  // crippling inefficiencies in IE's and Safari's regexp engines. First we
-  // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-  // replace all simple value tokens with ']' characters. Third, we delete all
-  // open brackets that follow a colon or comma or that begin the text. Finally,
-  // we look to see that the remaining characters are only whitespace or ']' or
-  // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
-      if (/^[\],:{}\s]*$/
-              .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
-                  .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
-                  .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-  // In the third stage we use the eval function to compile the text into a
-  // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-  // in JavaScript: it can begin a block or an object literal. We wrap the text
-  // in parens to eliminate the ambiguity.
-
-          j = eval('(' + text + ')');
-
-  // In the optional fourth stage, we recursively walk the new structure, passing
-  // each name/value pair to a reviver function for possible transformation.
-
-          return typeof reviver === 'function' ?
-              walk({'': j}, '') : j;
-      }
-
-  // If the text is not JSON parseable, then a SyntaxError is thrown.
-
-      throw new SyntaxError('JSON.parse');
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , typeof JSON !== 'undefined' ? JSON : undefined
-);
diff --git a/node/node_modules/socket.io-client/lib/namespace.js b/node/node_modules/socket.io-client/lib/namespace.js
deleted file mode 100644 (file)
index 3c538a7..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.SocketNamespace = SocketNamespace;
-
-  /**
-   * Socket namespace constructor.
-   *
-   * @constructor
-   * @api public
-   */
-
-  function SocketNamespace (socket, name) {
-    this.socket = socket;
-    this.name = name || '';
-    this.flags = {};
-    this.json = new Flag(this, 'json');
-    this.ackPackets = 0;
-    this.acks = {};
-  };
-
-  /**
-   * Apply EventEmitter mixin.
-   */
-
-  io.util.mixin(SocketNamespace, io.EventEmitter);
-
-  /**
-   * Copies emit since we override it
-   *
-   * @api private
-   */
-
-  SocketNamespace.prototype.$emit = io.EventEmitter.prototype.emit;
-
-  /**
-   * Creates a new namespace, by proxying the request to the socket. This
-   * allows us to use the synax as we do on the server.
-   *
-   * @api public
-   */
-
-  SocketNamespace.prototype.of = function () {
-    return this.socket.of.apply(this.socket, arguments);
-  };
-
-  /**
-   * Sends a packet.
-   *
-   * @api private
-   */
-
-  SocketNamespace.prototype.packet = function (packet) {
-    packet.endpoint = this.name;
-    this.socket.packet(packet);
-    this.flags = {};
-    return this;
-  };
-
-  /**
-   * Sends a message
-   *
-   * @api public
-   */
-
-  SocketNamespace.prototype.send = function (data, fn) {
-    var packet = {
-        type: this.flags.json ? 'json' : 'message'
-      , data: data
-    };
-
-    if ('function' == typeof fn) {
-      packet.id = ++this.ackPackets;
-      packet.ack = true;
-      this.acks[packet.id] = fn;
-    }
-
-    return this.packet(packet);
-  };
-
-  /**
-   * Emits an event
-   *
-   * @api public
-   */
-  
-  SocketNamespace.prototype.emit = function (name) {
-    var args = Array.prototype.slice.call(arguments, 1)
-      , lastArg = args[args.length - 1]
-      , packet = {
-            type: 'event'
-          , name: name
-        };
-
-    if ('function' == typeof lastArg) {
-      packet.id = ++this.ackPackets;
-      packet.ack = 'data';
-      this.acks[packet.id] = lastArg;
-      args = args.slice(0, args.length - 1);
-    }
-
-    packet.args = args;
-
-    return this.packet(packet);
-  };
-
-  /**
-   * Disconnects the namespace
-   *
-   * @api private
-   */
-
-  SocketNamespace.prototype.disconnect = function () {
-    if (this.name === '') {
-      this.socket.disconnect();
-    } else {
-      this.packet({ type: 'disconnect' });
-      this.$emit('disconnect');
-    }
-
-    return this;
-  };
-
-  /**
-   * Handles a packet
-   *
-   * @api private
-   */
-
-  SocketNamespace.prototype.onPacket = function (packet) {
-    var self = this;
-
-    function ack () {
-      self.packet({
-          type: 'ack'
-        , args: io.util.toArray(arguments)
-        , ackId: packet.id
-      });
-    };
-
-    switch (packet.type) {
-      case 'connect':
-        this.$emit('connect');
-        break;
-
-      case 'disconnect':
-        if (this.name === '') {
-          this.socket.onDisconnect(packet.reason || 'booted');
-        } else {
-          this.$emit('disconnect', packet.reason);
-        }
-        break;
-
-      case 'message':
-      case 'json':
-        var params = ['message', packet.data];
-
-        if (packet.ack == 'data') {
-          params.push(ack);
-        } else if (packet.ack) {
-          this.packet({ type: 'ack', ackId: packet.id });
-        }
-
-        this.$emit.apply(this, params);
-        break;
-
-      case 'event':
-        var params = [packet.name].concat(packet.args);
-
-        if (packet.ack == 'data')
-          params.push(ack);
-
-        this.$emit.apply(this, params);
-        break;
-
-      case 'ack':
-        if (this.acks[packet.ackId]) {
-          this.acks[packet.ackId].apply(this, packet.args);
-          delete this.acks[packet.ackId];
-        }
-        break;
-
-      case 'error':
-        if (packet.advice){
-          this.socket.onError(packet);
-        } else {
-          if (packet.reason == 'unauthorized') {
-            this.$emit('connect_failed', packet.reason);
-          } else {
-            this.$emit('error', packet.reason);
-          }
-        }
-        break;
-    }
-  };
-
-  /**
-   * Flag interface.
-   *
-   * @api private
-   */
-
-  function Flag (nsp, name) {
-    this.namespace = nsp;
-    this.name = name;
-  };
-
-  /**
-   * Send a message
-   *
-   * @api public
-   */
-
-  Flag.prototype.send = function () {
-    this.namespace.flags[this.name] = true;
-    this.namespace.send.apply(this.namespace, arguments);
-  };
-
-  /**
-   * Emit an event
-   *
-   * @api public
-   */
-
-  Flag.prototype.emit = function () {
-    this.namespace.flags[this.name] = true;
-    this.namespace.emit.apply(this.namespace, arguments);
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/lib/parser.js b/node/node_modules/socket.io-client/lib/parser.js
deleted file mode 100644 (file)
index 62308cf..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Parser namespace.
-   *
-   * @namespace
-   */
-
-  var parser = exports.parser = {};
-
-  /**
-   * Packet types.
-   */
-
-  var packets = parser.packets = [
-      'disconnect'
-    , 'connect'
-    , 'heartbeat'
-    , 'message'
-    , 'json'
-    , 'event'
-    , 'ack'
-    , 'error'
-    , 'noop'
-  ];
-
-  /**
-   * Errors reasons.
-   */
-
-  var reasons = parser.reasons = [
-      'transport not supported'
-    , 'client not handshaken'
-    , 'unauthorized'
-  ];
-
-  /**
-   * Errors advice.
-   */
-
-  var advice = parser.advice = [
-      'reconnect'
-  ];
-
-  /**
-   * Shortcuts.
-   */
-
-  var JSON = io.JSON
-    , indexOf = io.util.indexOf;
-
-  /**
-   * Encodes a packet.
-   *
-   * @api private
-   */
-
-  parser.encodePacket = function (packet) {
-    var type = indexOf(packets, packet.type)
-      , id = packet.id || ''
-      , endpoint = packet.endpoint || ''
-      , ack = packet.ack
-      , data = null;
-
-    switch (packet.type) {
-      case 'error':
-        var reason = packet.reason ? indexOf(reasons, packet.reason) : ''
-          , adv = packet.advice ? indexOf(advice, packet.advice) : '';
-
-        if (reason !== '' || adv !== '')
-          data = reason + (adv !== '' ? ('+' + adv) : '');
-
-        break;
-
-      case 'message':
-        if (packet.data !== '')
-          data = packet.data;
-        break;
-
-      case 'event':
-        var ev = { name: packet.name };
-
-        if (packet.args && packet.args.length) {
-          ev.args = packet.args;
-        }
-
-        data = JSON.stringify(ev);
-        break;
-
-      case 'json':
-        data = JSON.stringify(packet.data);
-        break;
-
-      case 'connect':
-        if (packet.qs)
-          data = packet.qs;
-        break;
-
-      case 'ack':
-        data = packet.ackId
-          + (packet.args && packet.args.length
-              ? '+' + JSON.stringify(packet.args) : '');
-        break;
-    }
-
-    // construct packet with required fragments
-    var encoded = [
-        type
-      , id + (ack == 'data' ? '+' : '')
-      , endpoint
-    ];
-
-    // data fragment is optional
-    if (data !== null && data !== undefined)
-      encoded.push(data);
-
-    return encoded.join(':');
-  };
-
-  /**
-   * Encodes multiple messages (payload).
-   *
-   * @param {Array} messages
-   * @api private
-   */
-
-  parser.encodePayload = function (packets) {
-    var decoded = '';
-
-    if (packets.length == 1)
-      return packets[0];
-
-    for (var i = 0, l = packets.length; i < l; i++) {
-      var packet = packets[i];
-      decoded += '\ufffd' + packet.length + '\ufffd' + packets[i];
-    }
-
-    return decoded;
-  };
-
-  /**
-   * Decodes a packet
-   *
-   * @api private
-   */
-
-  var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/;
-
-  parser.decodePacket = function (data) {
-    var pieces = data.match(regexp);
-
-    if (!pieces) return {};
-
-    var id = pieces[2] || ''
-      , data = pieces[5] || ''
-      , packet = {
-            type: packets[pieces[1]]
-          , endpoint: pieces[4] || ''
-        };
-
-    // whether we need to acknowledge the packet
-    if (id) {
-      packet.id = id;
-      if (pieces[3])
-        packet.ack = 'data';
-      else
-        packet.ack = true;
-    }
-
-    // handle different packet types
-    switch (packet.type) {
-      case 'error':
-        var pieces = data.split('+');
-        packet.reason = reasons[pieces[0]] || '';
-        packet.advice = advice[pieces[1]] || '';
-        break;
-
-      case 'message':
-        packet.data = data || '';
-        break;
-
-      case 'event':
-        try {
-          var opts = JSON.parse(data);
-          packet.name = opts.name;
-          packet.args = opts.args;
-        } catch (e) { }
-
-        packet.args = packet.args || [];
-        break;
-
-      case 'json':
-        try {
-          packet.data = JSON.parse(data);
-        } catch (e) { }
-        break;
-
-      case 'connect':
-        packet.qs = data || '';
-        break;
-
-      case 'ack':
-        var pieces = data.match(/^([0-9]+)(\+)?(.*)/);
-        if (pieces) {
-          packet.ackId = pieces[1];
-          packet.args = [];
-
-          if (pieces[3]) {
-            try {
-              packet.args = pieces[3] ? JSON.parse(pieces[3]) : [];
-            } catch (e) { }
-          }
-        }
-        break;
-
-      case 'disconnect':
-      case 'heartbeat':
-        break;
-    };
-
-    return packet;
-  };
-
-  /**
-   * Decodes data payload. Detects multiple messages
-   *
-   * @return {Array} messages
-   * @api public
-   */
-
-  parser.decodePayload = function (data) {
-    // IE doesn't like data[i] for unicode chars, charAt works fine
-    if (data.charAt(0) == '\ufffd') {
-      var ret = [];
-
-      for (var i = 1, length = ''; i < data.length; i++) {
-        if (data.charAt(i) == '\ufffd') {
-          ret.push(parser.decodePacket(data.substr(i + 1).substr(0, length)));
-          i += Number(length) + 1;
-          length = '';
-        } else {
-          length += data.charAt(i);
-        }
-      }
-
-      return ret;
-    } else {
-      return [parser.decodePacket(data)];
-    }
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/lib/socket.io-client.js b/node/node_modules/socket.io-client/lib/socket.io-client.js
deleted file mode 120000 (symlink)
index 60cfa64..0000000
+++ /dev/null
@@ -1 +0,0 @@
-io.js
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/socket.js b/node/node_modules/socket.io-client/lib/socket.js
deleted file mode 100644 (file)
index 8f770c1..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io, global) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.Socket = Socket;
-
-  /**
-   * Create a new `Socket.IO client` which can establish a persistent
-   * connection with a Socket.IO enabled server.
-   *
-   * @api public
-   */
-
-  function Socket (options) {
-    this.options = {
-        port: 80
-      , secure: false
-      , document: 'document' in global ? document : false
-      , resource: 'socket.io'
-      , transports: io.transports
-      , 'connect timeout': 10000
-      , 'try multiple transports': true
-      , 'reconnect': true
-      , 'reconnection delay': 500
-      , 'reconnection limit': Infinity
-      , 'reopen delay': 3000
-      , 'max reconnection attempts': 10
-      , 'sync disconnect on unload': true
-      , 'auto connect': true
-      , 'flash policy port': 10843
-    };
-
-    io.util.merge(this.options, options);
-
-    this.connected = false;
-    this.open = false;
-    this.connecting = false;
-    this.reconnecting = false;
-    this.namespaces = {};
-    this.buffer = [];
-    this.doBuffer = false;
-
-    if (this.options['sync disconnect on unload'] &&
-        (!this.isXDomain() || io.util.ua.hasCORS)) {
-      var self = this;
-
-      io.util.on(global, 'beforeunload', function () {
-        self.disconnectSync();
-      }, false);
-    }
-
-    if (this.options['auto connect']) {
-      this.connect();
-    }
-};
-
-  /**
-   * Apply EventEmitter mixin.
-   */
-
-  io.util.mixin(Socket, io.EventEmitter);
-
-  /**
-   * Returns a namespace listener/emitter for this socket
-   *
-   * @api public
-   */
-
-  Socket.prototype.of = function (name) {
-    if (!this.namespaces[name]) {
-      this.namespaces[name] = new io.SocketNamespace(this, name);
-
-      if (name !== '') {
-        this.namespaces[name].packet({ type: 'connect' });
-      }
-    }
-
-    return this.namespaces[name];
-  };
-
-  /**
-   * Emits the given event to the Socket and all namespaces
-   *
-   * @api private
-   */
-
-  Socket.prototype.publish = function () {
-    this.emit.apply(this, arguments);
-
-    var nsp;
-
-    for (var i in this.namespaces) {
-      if (this.namespaces.hasOwnProperty(i)) {
-        nsp = this.of(i);
-        nsp.$emit.apply(nsp, arguments);
-      }
-    }
-  };
-
-  /**
-   * Performs the handshake
-   *
-   * @api private
-   */
-
-  function empty () { };
-
-  Socket.prototype.handshake = function (fn) {
-    var self = this
-      , options = this.options;
-
-    function complete (data) {
-      if (data instanceof Error) {
-        self.onError(data.message);
-      } else {
-        fn.apply(null, data.split(':'));
-      }
-    };
-
-    var url = [
-          'http' + (options.secure ? 's' : '') + ':/'
-        , options.host + ':' + options.port
-        , this.options.resource
-        , io.protocol
-        , io.util.query(this.options.query, 't=' + +new Date)
-      ].join('/');
-
-    if (this.isXDomain()) {
-      var insertAt = document.getElementsByTagName('script')[0]
-        , script = document.createElement('script');
-
-      script.src = url + '&jsonp=' + io.j.length;
-      insertAt.parentNode.insertBefore(script, insertAt);
-
-      io.j.push(function (data) {
-        complete(data);
-        script.parentNode.removeChild(script);
-      });
-    } else {
-      var xhr = io.util.request();
-
-      xhr.open('GET', url, true);
-      xhr.onreadystatechange = function () {
-        if (xhr.readyState == 4) {
-          xhr.onreadystatechange = empty;
-
-          if (xhr.status == 200) {
-            complete(xhr.responseText);
-          } else {
-            !self.reconnecting && self.onError(xhr.responseText);
-          }
-        }
-      };
-      xhr.send(null);
-    }
-  };
-
-  /**
-   * Find an available transport based on the options supplied in the constructor.
-   *
-   * @api private
-   */
-
-  Socket.prototype.getTransport = function (override) {
-    var transports = override || this.transports, match;
-
-    for (var i = 0, transport; transport = transports[i]; i++) {
-      if (io.Transport[transport]
-        && io.Transport[transport].check(this)
-        && (!this.isXDomain() || io.Transport[transport].xdomainCheck())) {
-        return new io.Transport[transport](this, this.sessionid);
-      }
-    }
-
-    return null;
-  };
-
-  /**
-   * Connects to the server.
-   *
-   * @param {Function} [fn] Callback.
-   * @returns {io.Socket}
-   * @api public
-   */
-
-  Socket.prototype.connect = function (fn) {
-    if (this.connecting) {
-      return this;
-    }
-
-    var self = this;
-
-    this.handshake(function (sid, heartbeat, close, transports) {
-      self.sessionid = sid;
-      self.closeTimeout = close * 1000;
-      self.heartbeatTimeout = heartbeat * 1000;
-      self.transports = io.util.intersect(
-          transports.split(',')
-        , self.options.transports
-      );
-
-      function connect (transports){
-        if (self.transport) self.transport.clearTimeouts();
-
-        self.transport = self.getTransport(transports);
-        if (!self.transport) return self.publish('connect_failed');
-
-        // once the transport is ready
-        self.transport.ready(self, function () {
-          self.connecting = true;
-          self.publish('connecting', self.transport.name);
-          self.transport.open();
-
-          if (self.options['connect timeout']) {
-            self.connectTimeoutTimer = setTimeout(function () {
-              if (!self.connected) {
-                self.connecting = false;
-
-                if (self.options['try multiple transports']) {
-                  if (!self.remainingTransports) {
-                    self.remainingTransports = self.transports.slice(0);
-                  }
-
-                  var remaining = self.remainingTransports;
-
-                  while (remaining.length > 0 && remaining.splice(0,1)[0] !=
-                         self.transport.name) {}
-
-                    if (remaining.length){
-                      connect(remaining);
-                    } else {
-                      self.publish('connect_failed');
-                    }
-                }
-              }
-            }, self.options['connect timeout']);
-          }
-        });
-      }
-
-      connect();
-
-      self.once('connect', function (){
-        clearTimeout(self.connectTimeoutTimer);
-
-        fn && typeof fn == 'function' && fn();
-      });
-    });
-
-    return this;
-  };
-
-  /**
-   * Sends a message.
-   *
-   * @param {Object} data packet.
-   * @returns {io.Socket}
-   * @api public
-   */
-
-  Socket.prototype.packet = function (data) {
-    if (this.connected && !this.doBuffer) {
-      this.transport.packet(data);
-    } else {
-      this.buffer.push(data);
-    }
-
-    return this;
-  };
-
-  /**
-   * Sets buffer state
-   *
-   * @api private
-   */
-
-  Socket.prototype.setBuffer = function (v) {
-    this.doBuffer = v;
-
-    if (!v && this.connected && this.buffer.length) {
-      this.transport.payload(this.buffer);
-      this.buffer = [];
-    }
-  };
-
-  /**
-   * Disconnect the established connect.
-   *
-   * @returns {io.Socket}
-   * @api public
-   */
-
-  Socket.prototype.disconnect = function () {
-    if (this.connected) {
-      if (this.open) {
-        this.of('').packet({ type: 'disconnect' });
-      }
-
-      // handle disconnection immediately
-      this.onDisconnect('booted');
-    }
-
-    return this;
-  };
-
-  /**
-   * Disconnects the socket with a sync XHR.
-   *
-   * @api private
-   */
-
-  Socket.prototype.disconnectSync = function () {
-    // ensure disconnection
-    var xhr = io.util.request()
-      , uri = this.resource + '/' + io.protocol + '/' + this.sessionid;
-
-    xhr.open('GET', uri, true);
-
-    // handle disconnection immediately
-    this.onDisconnect('booted');
-  };
-
-  /**
-   * Check if we need to use cross domain enabled transports. Cross domain would
-   * be a different port or different domain name.
-   *
-   * @returns {Boolean}
-   * @api private
-   */
-
-  Socket.prototype.isXDomain = function () {
-    // if node
-    return false;
-    // end node
-
-    var port = window.location.port ||
-      ('https:' == window.location.protocol ? 443 : 80);
-
-    return this.options.host !== document.domain || this.options.port != port;
-  };
-
-  /**
-   * Called upon handshake.
-   *
-   * @api private
-   */
-
-  Socket.prototype.onConnect = function () {
-    if (!this.connected) {
-      this.connected = true;
-      this.connecting = false;
-      if (!this.doBuffer) {
-        // make sure to flush the buffer
-        this.setBuffer(false);
-      }
-      this.emit('connect');
-    }
-  };
-
-  /**
-   * Called when the transport opens
-   *
-   * @api private
-   */
-
-  Socket.prototype.onOpen = function () {
-    this.open = true;
-  };
-
-  /**
-   * Called when the transport closes.
-   *
-   * @api private
-   */
-
-  Socket.prototype.onClose = function () {
-    this.open = false;
-  };
-
-  /**
-   * Called when the transport first opens a connection
-   *
-   * @param text
-   */
-
-  Socket.prototype.onPacket = function (packet) {
-    this.of(packet.endpoint).onPacket(packet);
-  };
-
-  /**
-   * Handles an error.
-   *
-   * @api private
-   */
-
-  Socket.prototype.onError = function (err) {
-    if (err && err.advice) {
-      if (err.advice === 'reconnect' && this.connected) {
-        this.disconnect();
-        this.reconnect();
-      }
-    }
-
-    this.publish('error', err && err.reason ? err.reason : err);
-  };
-
-  /**
-   * Called when the transport disconnects.
-   *
-   * @api private
-   */
-
-  Socket.prototype.onDisconnect = function (reason) {
-    var wasConnected = this.connected;
-
-    this.connected = false;
-    this.connecting = false;
-    this.open = false;
-
-    if (wasConnected) {
-      this.transport.close();
-      this.transport.clearTimeouts();
-      this.publish('disconnect', reason);
-
-      if ('booted' != reason && this.options.reconnect && !this.reconnecting) {
-        this.reconnect();
-      }
-    }
-  };
-
-  /**
-   * Called upon reconnection.
-   *
-   * @api private
-   */
-
-  Socket.prototype.reconnect = function () {
-    this.reconnecting = true;
-    this.reconnectionAttempts = 0;
-    this.reconnectionDelay = this.options['reconnection delay'];
-
-    var self = this
-      , maxAttempts = this.options['max reconnection attempts']
-      , tryMultiple = this.options['try multiple transports']
-      , limit = this.options['reconnection limit'];
-
-    function reset () {
-      if (self.connected) {
-        for (var i in self.namespaces) {
-          if (self.namespaces.hasOwnProperty(i) && '' !== i) {
-              self.namespaces[i].packet({ type: 'connect' });
-          }
-        }
-        self.publish('reconnect', self.transport.name, self.reconnectionAttempts);
-      }
-
-      self.removeListener('connect_failed', maybeReconnect);
-      self.removeListener('connect', maybeReconnect);
-
-      self.reconnecting = false;
-
-      delete self.reconnectionAttempts;
-      delete self.reconnectionDelay;
-      delete self.reconnectionTimer;
-      delete self.redoTransports;
-
-      self.options['try multiple transports'] = tryMultiple;
-    };
-
-    function maybeReconnect () {
-      if (!self.reconnecting) {
-        return;
-      }
-
-      if (self.connected) {
-        return reset();
-      };
-
-      if (self.connecting && self.reconnecting) {
-        return self.reconnectionTimer = setTimeout(maybeReconnect, 1000);
-      }
-
-      if (self.reconnectionAttempts++ >= maxAttempts) {
-        if (!self.redoTransports) {
-          self.on('connect_failed', maybeReconnect);
-          self.options['try multiple transports'] = true;
-          self.transport = self.getTransport();
-          self.redoTransports = true;
-          self.connect();
-        } else {
-          self.publish('reconnect_failed');
-          reset();
-        }
-      } else {
-        if (self.reconnectionDelay < limit) {
-          self.reconnectionDelay *= 2; // exponential back off
-        }
-
-        self.connect();
-        self.publish('reconnecting', self.reconnectionDelay, self.reconnectionAttempts);
-        self.reconnectionTimer = setTimeout(maybeReconnect, self.reconnectionDelay);
-      }
-    };
-
-    this.options['try multiple transports'] = false;
-    this.reconnectionTimer = setTimeout(maybeReconnect, this.reconnectionDelay);
-
-    this.on('connect', maybeReconnect);
-  };
-
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-  , this
-);
diff --git a/node/node_modules/socket.io-client/lib/transport.js b/node/node_modules/socket.io-client/lib/transport.js
deleted file mode 100644 (file)
index 8212839..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.Transport = Transport;
-
-  /**
-   * This is the transport template for all supported transport methods.
-   *
-   * @constructor
-   * @api public
-   */
-
-  function Transport (socket, sessid) {
-    this.socket = socket;
-    this.sessid = sessid;
-  };
-
-  /**
-   * Apply EventEmitter mixin.
-   */
-
-  io.util.mixin(Transport, io.EventEmitter);
-
-  /**
-   * Handles the response from the server. When a new response is received
-   * it will automatically update the timeout, decode the message and
-   * forwards the response to the onMessage function for further processing.
-   *
-   * @param {String} data Response from the server.
-   * @api private
-   */
-
-  Transport.prototype.onData = function (data) {
-    this.clearCloseTimeout();
-    this.setCloseTimeout();
-
-    if (data !== '') {
-      // todo: we should only do decodePayload for xhr transports
-      var msgs = io.parser.decodePayload(data);
-
-      if (msgs && msgs.length) {
-        for (var i = 0, l = msgs.length; i < l; i++) {
-          this.onPacket(msgs[i]);
-        }
-      }
-    }
-
-    return this;
-  };
-
-  /**
-   * Handles packets.
-   *
-   * @api private
-   */
-
-  Transport.prototype.onPacket = function (packet) {
-    if (packet.type == 'heartbeat') {
-      return this.onHeartbeat();
-    }
-
-    if (packet.type == 'connect' && packet.endpoint == '') {
-      this.onConnect();
-    }
-
-    this.socket.onPacket(packet);
-
-    return this;
-  };
-
-  /**
-   * Sets close timeout
-   *
-   * @api private
-   */
-  
-  Transport.prototype.setCloseTimeout = function () {
-    if (!this.closeTimeout) {
-      var self = this;
-
-      this.closeTimeout = setTimeout(function () {
-        self.onDisconnect();
-      }, this.socket.closeTimeout);
-    }
-  };
-
-  /**
-   * Called when transport disconnects.
-   *
-   * @api private
-   */
-
-  Transport.prototype.onDisconnect = function () {
-    if (this.close) this.close();
-    this.clearTimeouts();
-    this.socket.onDisconnect();
-    return this;
-  };
-
-  /**
-   * Called when transport connects
-   *
-   * @api private
-   */
-
-  Transport.prototype.onConnect = function () {
-    this.socket.onConnect();
-    return this;
-  }
-
-  /**
-   * Clears close timeout
-   *
-   * @api private
-   */
-
-  Transport.prototype.clearCloseTimeout = function () {
-    if (this.closeTimeout) {
-      clearTimeout(this.closeTimeout);
-      this.closeTimeout = null;
-    }
-  };
-
-  /**
-   * Clear timeouts
-   *
-   * @api private
-   */
-
-  Transport.prototype.clearTimeouts = function () {
-    this.clearCloseTimeout();
-
-    if (this.reopenTimeout) {
-      clearTimeout(this.reopenTimeout);
-    }
-  };
-
-  /**
-   * Sends a packet
-   *
-   * @param {Object} packet object.
-   * @api private
-   */
-
-  Transport.prototype.packet = function (packet) {
-    this.send(io.parser.encodePacket(packet));
-  };
-
-  /**
-   * Send the received heartbeat message back to server. So the server
-   * knows we are still connected.
-   *
-   * @param {String} heartbeat Heartbeat response from the server.
-   * @api private
-   */
-
-  Transport.prototype.onHeartbeat = function (heartbeat) {
-    this.packet({ type: 'heartbeat' });
-  };
-  /**
-   * Called when the transport opens.
-   *
-   * @api private
-   */
-
-  Transport.prototype.onOpen = function () {
-    this.open = true;
-    this.clearCloseTimeout();
-    this.socket.onOpen();
-  };
-
-  /**
-   * Notifies the base when the connection with the Socket.IO server
-   * has been disconnected.
-   *
-   * @api private
-   */
-
-  Transport.prototype.onClose = function () {
-    var self = this;
-
-    /* FIXME: reopen delay causing a infinit loop
-    this.reopenTimeout = setTimeout(function () {
-      self.open();
-    }, this.socket.options['reopen delay']);*/
-
-    this.open = false;
-    this.setCloseTimeout();
-    this.socket.onClose();
-  };
-
-  /**
-   * Generates a connection url based on the Socket.IO URL Protocol.
-   * See <https://github.com/learnboost/socket.io-node/> for more details.
-   *
-   * @returns {String} Connection url
-   * @api private
-   */
-
-  Transport.prototype.prepareUrl = function () {
-    var options = this.socket.options;
-
-    return this.scheme() + '://'
-      + options.host + ':' + options.port + '/'
-      + options.resource + '/' + io.protocol
-      + '/' + this.name + '/' + this.sessid;
-  };
-
-  /**
-   * Checks if the transport is ready to start a connection.
-   *
-   * @param {Socket} socket The socket instance that needs a transport
-   * @param {Function} fn The callback
-   * @api private
-   */
-
-  Transport.prototype.ready = function (socket, fn) {
-    fn.call(this);
-  };
-})(
-    'undefined' != typeof io ? io : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/lib/transports/flashsocket.js b/node/node_modules/socket.io-client/lib/transports/flashsocket.js
deleted file mode 100644 (file)
index a1c29fa..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.flashsocket = Flashsocket;
-
-  /**
-   * The FlashSocket transport. This is a API wrapper for the HTML5 WebSocket
-   * specification. It uses a .swf file to communicate with the server. If you want
-   * to serve the .swf file from a other server than where the Socket.IO script is
-   * coming from you need to use the insecure version of the .swf. More information
-   * about this can be found on the github page.
-   *
-   * @constructor
-   * @extends {io.Transport.websocket}
-   * @api public
-   */
-
-  function Flashsocket () {
-    io.Transport.websocket.apply(this, arguments);
-  };
-
-  /**
-   * Inherits from Transport.
-   */
-
-  io.util.inherit(Flashsocket, io.Transport.websocket);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  Flashsocket.prototype.name = 'flashsocket';
-
-  /**
-   * Disconnect the established `FlashSocket` connection. This is done by adding a 
-   * new task to the FlashSocket. The rest will be handled off by the `WebSocket` 
-   * transport.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  Flashsocket.prototype.open = function () {
-    var self = this
-      , args = arguments;
-
-    WebSocket.__addTask(function () {
-      io.Transport.websocket.prototype.open.apply(self, args);
-    });
-    return this;
-  };
-  
-  /**
-   * Sends a message to the Socket.IO server. This is done by adding a new
-   * task to the FlashSocket. The rest will be handled off by the `WebSocket` 
-   * transport.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  Flashsocket.prototype.send = function () {
-    var self = this, args = arguments;
-    WebSocket.__addTask(function () {
-      io.Transport.websocket.prototype.send.apply(self, args);
-    });
-    return this;
-  };
-
-  /**
-   * Disconnects the established `FlashSocket` connection.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  Flashsocket.prototype.close = function () {
-    WebSocket.__tasks.length = 0;
-    io.Transport.websocket.prototype.close.call(this);
-    return this;
-  };
-
-  /**
-   * The WebSocket fall back needs to append the flash container to the body
-   * element, so we need to make sure we have access to it. Or defer the call
-   * until we are sure there is a body element.
-   *
-   * @param {Socket} socket The socket instance that needs a transport
-   * @param {Function} fn The callback
-   * @api private
-   */
-
-  Flashsocket.prototype.ready = function (socket, fn) {
-    function init () {
-      var options = socket.options
-        , port = options['flash policy port']
-        , path = [
-              'http' + (options.secure ? 's' : '') + ':/'
-            , options.host + ':' + options.port
-            , options.resource
-            , 'static/flashsocket'
-            , 'WebSocketMain' + (socket.isXDomain() ? 'Insecure' : '') + '.swf'
-          ];
-
-      // Only start downloading the swf file when the checked that this browser
-      // actually supports it
-      if (!Flashsocket.loaded) {
-        if (typeof WEB_SOCKET_SWF_LOCATION === 'undefined') {
-          // Set the correct file based on the XDomain settings
-          WEB_SOCKET_SWF_LOCATION = path.join('/');
-        }
-
-        if (port !== 843) {
-          WebSocket.loadFlashPolicyFile('xmlsocket://' + options.host + ':' + port);
-        }
-
-        WebSocket.__initialize();
-        Flashsocket.loaded = true;
-      }
-
-      fn.call(self);
-    }
-
-    var self = this;
-    if (document.body) return init();
-
-    io.util.load(init);
-  };
-
-  /**
-   * Check if the FlashSocket transport is supported as it requires that the Adobe
-   * Flash Player plug-in version `10.0.0` or greater is installed. And also check if
-   * the polyfill is correctly loaded.
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  Flashsocket.check = function () {
-    if (
-        typeof WebSocket == 'undefined'
-      || !('__initialize' in WebSocket) || !swfobject
-    ) return false;
-
-    return swfobject.getFlashPlayerVersion().major >= 10;
-  };
-
-  /**
-   * Check if the FlashSocket transport can be used as cross domain / cross origin 
-   * transport. Because we can't see which type (secure or insecure) of .swf is used
-   * we will just return true.
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  Flashsocket.xdomainCheck = function () {
-    return true;
-  };
-
-  /**
-   * Disable AUTO_INITIALIZATION
-   */
-
-  if (typeof window != 'undefined') {
-    WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true;
-  }
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('flashsocket');
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/lib/transports/htmlfile.js b/node/node_modules/socket.io-client/lib/transports/htmlfile.js
deleted file mode 100644 (file)
index 57db53d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.htmlfile = HTMLFile;
-
-  /**
-   * The HTMLFile transport creates a `forever iframe` based transport
-   * for Internet Explorer. Regular forever iframe implementations will 
-   * continuously trigger the browsers buzy indicators. If the forever iframe
-   * is created inside a `htmlfile` these indicators will not be trigged.
-   *
-   * @constructor
-   * @extends {io.Transport.XHR}
-   * @api public
-   */
-
-  function HTMLFile (socket) {
-    io.Transport.XHR.apply(this, arguments);
-  };
-
-  /**
-   * Inherits from XHR transport.
-   */
-
-  io.util.inherit(HTMLFile, io.Transport.XHR);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  HTMLFile.prototype.name = 'htmlfile';
-
-  /**
-   * Creates a new ActiveX `htmlfile` with a forever loading iframe
-   * that can be used to listen to messages. Inside the generated
-   * `htmlfile` a reference will be made to the HTMLFile transport.
-   *
-   * @api private
-   */
-
-  HTMLFile.prototype.get = function () {
-    this.doc = new ActiveXObject('htmlfile');
-    this.doc.open();
-    this.doc.write('<html></html>');
-    this.doc.close();
-    this.doc.parentWindow.s = this;
-
-    var iframeC = this.doc.createElement('div');
-    iframeC.className = 'socketio';
-
-    this.doc.body.appendChild(iframeC);
-    this.iframe = this.doc.createElement('iframe');
-
-    iframeC.appendChild(this.iframe);
-
-    var self = this
-      , query = io.util.query(this.socket.options.query, 't='+ +new Date);
-
-    this.iframe.src = this.prepareUrl() + query;
-
-    io.util.on(window, 'unload', function () {
-      self.destroy();
-    });
-  };
-
-  /**
-   * The Socket.IO server will write script tags inside the forever
-   * iframe, this function will be used as callback for the incoming
-   * information.
-   *
-   * @param {String} data The message
-   * @param {document} doc Reference to the context
-   * @api private
-   */
-
-  HTMLFile.prototype._ = function (data, doc) {
-    this.onData(data);
-    try {
-      var script = doc.getElementsByTagName('script')[0];
-      script.parentNode.removeChild(script);
-    } catch (e) { }
-  };
-
-  /**
-   * Destroy the established connection, iframe and `htmlfile`.
-   * And calls the `CollectGarbage` function of Internet Explorer
-   * to release the memory.
-   *
-   * @api private
-   */
-
-  HTMLFile.prototype.destroy = function () {
-    if (this.iframe){
-      try {
-        this.iframe.src = 'about:blank';
-      } catch(e){}
-
-      this.doc = null;
-      this.iframe.parentNode.removeChild(this.iframe);
-      this.iframe = null;
-
-      CollectGarbage();
-    }
-  };
-
-  /**
-   * Disconnects the established connection.
-   *
-   * @returns {Transport} Chaining.
-   * @api public
-   */
-
-  HTMLFile.prototype.close = function () {
-    this.destroy();
-    return io.Transport.XHR.prototype.close.call(this);
-  };
-
-  /**
-   * Checks if the browser supports this transport. The browser
-   * must have an `ActiveXObject` implementation.
-   *
-   * @return {Boolean}
-   * @api public
-   */
-
-  HTMLFile.check = function () {
-    if ('ActiveXObject' in window){
-      try {
-        var a = new ActiveXObject('htmlfile');
-        return a && io.Transport.XHR.check();
-      } catch(e){}
-    }
-    return false;
-  };
-
-  /**
-   * Check if cross domain requests are supported.
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  HTMLFile.xdomainCheck = function () {
-    // we can probably do handling for sub-domains, we should
-    // test that it's cross domain but a subdomain here
-    return false;
-  };
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('htmlfile');
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/lib/transports/jsonp-polling.js b/node/node_modules/socket.io-client/lib/transports/jsonp-polling.js
deleted file mode 100644 (file)
index c69643b..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports['jsonp-polling'] = JSONPPolling;
-
-  /**
-   * The JSONP transport creates an persistent connection by dynamically
-   * inserting a script tag in the page. This script tag will receive the
-   * information of the Socket.IO server. When new information is received
-   * it creates a new script tag for the new data stream.
-   *
-   * @constructor
-   * @extends {io.Transport.xhr-polling}
-   * @api public
-   */
-
-  function JSONPPolling (socket) {
-    io.Transport['xhr-polling'].apply(this, arguments);
-
-    this.index = io.j.length;
-
-    var self = this;
-
-    io.j.push(function (msg) {
-      self._(msg);
-    });
-  };
-
-  /**
-   * Inherits from XHR polling transport.
-   */
-
-  io.util.inherit(JSONPPolling, io.Transport['xhr-polling']);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  JSONPPolling.prototype.name = 'jsonp-polling';
-
-  /**
-   * Posts a encoded message to the Socket.IO server using an iframe.
-   * The iframe is used because script tags can create POST based requests.
-   * The iframe is positioned outside of the view so the user does not
-   * notice it's existence.
-   *
-   * @param {String} data A encoded message.
-   * @api private
-   */
-
-  JSONPPolling.prototype.post = function (data) {
-    var self = this
-      , query = io.util.query(
-             this.socket.options.query
-          , 't='+ (+new Date) + '&i=' + this.index
-        );
-
-    if (!this.form) {
-      var form = document.createElement('form')
-        , area = document.createElement('textarea')
-        , id = this.iframeId = 'socketio_iframe_' + this.index
-        , iframe;
-
-      form.className = 'socketio';
-      form.style.position = 'absolute';
-      form.style.top = '-1000px';
-      form.style.left = '-1000px';
-      form.target = id;
-      form.method = 'POST';
-      form.setAttribute('accept-charset', 'utf-8');
-      area.name = 'd';
-      form.appendChild(area);
-      document.body.appendChild(form);
-
-      this.form = form;
-      this.area = area;
-    }
-
-    this.form.action = this.prepareUrl() + query;
-
-    function complete () {
-      initIframe();
-      self.socket.setBuffer(false);
-    };
-
-    function initIframe () {
-      if (self.iframe) {
-        self.form.removeChild(self.iframe);
-      }
-
-      try {
-        // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
-        iframe = document.createElement('<iframe name="'+ self.iframeId +'">');
-      } catch (e) {
-        iframe = document.createElement('iframe');
-        iframe.name = self.iframeId;
-      }
-
-      iframe.id = self.iframeId;
-
-      self.form.appendChild(iframe);
-      self.iframe = iframe;
-    };
-
-    initIframe();
-
-    this.area.value = data;
-
-    try {
-      this.form.submit();
-    } catch(e) {}
-
-    if (this.iframe.attachEvent) {
-      iframe.onreadystatechange = function () {
-        if (self.iframe.readyState == 'complete') {
-          complete();
-        }
-      };
-    } else {
-      this.iframe.onload = complete;
-    }
-
-    this.socket.setBuffer(true);
-  };
-  
-  /**
-   * Creates a new JSONP poll that can be used to listen
-   * for messages from the Socket.IO server.
-   *
-   * @api private
-   */
-
-  JSONPPolling.prototype.get = function () {
-    var self = this
-      , script = document.createElement('script')
-      , query = io.util.query(
-             this.socket.options.query
-          , 't='+ (+new Date) + '&i=' + this.index
-        );
-
-    if (this.script) {
-      this.script.parentNode.removeChild(this.script);
-      this.script = null;
-    }
-
-    script.async = true;
-    script.src = this.prepareUrl() + query;
-    script.onerror = function () {
-      self.onClose();
-    };
-
-    var insertAt = document.getElementsByTagName('script')[0]
-    insertAt.parentNode.insertBefore(script, insertAt);
-    this.script = script;
-  };
-
-  /**
-   * Callback function for the incoming message stream from the Socket.IO server.
-   *
-   * @param {String} data The message
-   * @api private
-   */
-
-  JSONPPolling.prototype._ = function (msg) {
-    this.onData(msg);
-    if (this.open) {
-      this.get();
-    }
-    return this;
-  };
-
-  /**
-   * Checks if browser supports this transport.
-   *
-   * @return {Boolean}
-   * @api public
-   */
-
-  JSONPPolling.check = function () {
-    return true;
-  };
-
-  /**
-   * Check if cross domain requests are supported
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  JSONPPolling.xdomainCheck = function () {
-    return true;
-  };
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('jsonp-polling');
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/lib/transports/websocket.js b/node/node_modules/socket.io-client/lib/transports/websocket.js
deleted file mode 100644 (file)
index 25c5ac1..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports.websocket = WS;
-
-  /**
-   * The WebSocket transport uses the HTML5 WebSocket API to establish an
-   * persistent connection with the Socket.IO server. This transport will also
-   * be inherited by the FlashSocket fallback as it provides a API compatible
-   * polyfill for the WebSockets.
-   *
-   * @constructor
-   * @extends {io.Transport}
-   * @api public
-   */
-
-  function WS (socket) {
-    io.Transport.apply(this, arguments);
-  };
-
-  /**
-   * Inherits from Transport.
-   */
-
-  io.util.inherit(WS, io.Transport);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  WS.prototype.name = 'websocket';
-
-  /**
-   * Initializes a new `WebSocket` connection with the Socket.IO server. We attach
-   * all the appropriate listeners to handle the responses from the server.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  WS.prototype.open = function () {
-    var query = io.util.query(this.socket.options.query)
-      , self = this
-      , Socket
-
-    // if node
-    Socket = require('websocket-client').WebSocket;
-    // end node
-
-    if (!Socket) {
-      Socket = window.MozWebSocket || window.WebSocket;
-    }
-
-    this.websocket = new Socket(this.prepareUrl() + query);
-
-    this.websocket.onopen = function () {
-      self.onOpen();
-      self.socket.setBuffer(false);
-    };
-    this.websocket.onmessage = function (ev) {
-      self.onData(ev.data);
-    };
-    this.websocket.onclose = function () {
-      self.onClose();
-      self.socket.setBuffer(true);
-    };
-    this.websocket.onerror = function (e) {
-      self.onError(e);
-    };
-
-    return this;
-  };
-
-  /**
-   * Send a message to the Socket.IO server. The message will automatically be
-   * encoded in the correct message format.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  WS.prototype.send = function (data) {
-    this.websocket.send(data);
-    return this;
-  };
-
-  /**
-   * Payload
-   *
-   * @api private
-   */
-
-  WS.prototype.payload = function (arr) {
-    for (var i = 0, l = arr.length; i < l; i++) {
-      this.packet(arr[i]);
-    }
-    return this;
-  };
-
-  /**
-   * Disconnect the established `WebSocket` connection.
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  WS.prototype.close = function () {
-    this.websocket.close();
-    return this;
-  };
-
-  /**
-   * Handle the errors that `WebSocket` might be giving when we
-   * are attempting to connect or send messages.
-   *
-   * @param {Error} e The error.
-   * @api private
-   */
-
-  WS.prototype.onError = function (e) {
-    this.socket.onError(e);
-  };
-
-  /**
-   * Returns the appropriate scheme for the URI generation.
-   *
-   * @api private
-   */
-  WS.prototype.scheme = function () {
-    return this.socket.options.secure ? 'wss' : 'ws';
-  };
-
-  /**
-   * Checks if the browser has support for native `WebSockets` and that
-   * it's not the polyfill created for the FlashSocket transport.
-   *
-   * @return {Boolean}
-   * @api public
-   */
-
-  WS.check = function () {
-    // if node
-    return true;
-    // end node
-    return ('WebSocket' in window && !('__addTask' in WebSocket))
-          || 'MozWebSocket' in window;
-  };
-
-  /**
-   * Check if the `WebSocket` transport support cross domain communications.
-   *
-   * @returns {Boolean}
-   * @api public
-   */
-
-  WS.xdomainCheck = function () {
-    return true;
-  };
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('websocket');
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-);
diff --git a/node/node_modules/socket.io-client/lib/transports/xhr-polling.js b/node/node_modules/socket.io-client/lib/transports/xhr-polling.js
deleted file mode 100644 (file)
index 1677ce8..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io, global) {
-
-  /**
-   * Expose constructor.
-   */
-
-  exports['xhr-polling'] = XHRPolling;
-
-  /**
-   * The XHR-polling transport uses long polling XHR requests to create a
-   * "persistent" connection with the server.
-   *
-   * @constructor
-   * @api public
-   */
-
-  function XHRPolling () {
-    io.Transport.XHR.apply(this, arguments);
-  };
-
-  /**
-   * Inherits from XHR transport.
-   */
-
-  io.util.inherit(XHRPolling, io.Transport.XHR);
-
-  /**
-   * Merge the properties from XHR transport
-   */
-
-  io.util.merge(XHRPolling, io.Transport.XHR);
-
-  /**
-   * Transport name
-   *
-   * @api public
-   */
-
-  XHRPolling.prototype.name = 'xhr-polling';
-
-  /** 
-   * Establish a connection, for iPhone and Android this will be done once the page
-   * is loaded.
-   *
-   * @returns {Transport} Chaining.
-   * @api public
-   */
-
-  XHRPolling.prototype.open = function () {
-    var self = this;
-
-    io.Transport.XHR.prototype.open.call(self);
-    return false;
-  };
-
-  /**
-   * Starts a XHR request to wait for incoming messages.
-   *
-   * @api private
-   */
-
-  function empty () {};
-
-  XHRPolling.prototype.get = function () {
-    if (!this.open) return;
-
-    var self = this;
-
-    function stateChange () {
-      if (this.readyState == 4) {
-        this.onreadystatechange = empty;
-
-        if (this.status == 200) {
-          self.onData(this.responseText);
-          self.get();
-        } else {
-          self.onClose();
-        }
-      }
-    };
-
-    function onload () {
-      this.onload = empty;
-      self.onData(this.responseText);
-      self.get();
-    };
-
-    this.xhr = this.request();
-
-    if (global.XDomainRequest && this.xhr instanceof XDomainRequest) {
-      this.xhr.onload = this.xhr.onerror = onload;
-    } else {
-      this.xhr.onreadystatechange = stateChange;
-    }
-
-    this.xhr.send(null);
-  };
-
-  /**
-   * Handle the unclean close behavior.
-   *
-   * @api private
-   */
-
-  XHRPolling.prototype.onClose = function () {
-    io.Transport.XHR.prototype.onClose.call(this);
-
-    if (this.xhr) {
-      this.xhr.onreadystatechange = this.xhr.onload = empty;
-      try {
-        this.xhr.abort();
-      } catch(e){}
-      this.xhr = null;
-    }
-  };
-
-  /**
-   * Webkit based browsers show a infinit spinner when you start a XHR request
-   * before the browsers onload event is called so we need to defer opening of
-   * the transport until the onload event is called. Wrapping the cb in our
-   * defer method solve this.
-   *
-   * @param {Socket} socket The socket instance that needs a transport
-   * @param {Function} fn The callback
-   * @api private
-   */
-
-  XHRPolling.prototype.ready = function (socket, fn) {
-    var self = this;
-
-    io.util.defer(function () {
-      fn.call(self);
-    });
-  };
-
-  /**
-   * Add the transport to your public io.transports array.
-   *
-   * @api private
-   */
-
-  io.transports.push('xhr-polling');
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-  , this
-);
diff --git a/node/node_modules/socket.io-client/lib/transports/xhr.js b/node/node_modules/socket.io-client/lib/transports/xhr.js
deleted file mode 100644 (file)
index ad3c975..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, io, global) {
-
-  /**
-   * Expose constructor.
-   *
-   * @api public
-   */
-  
-  exports.XHR = XHR;
-
-  /**
-   * XHR constructor
-   *
-   * @costructor
-   * @api public
-   */
-
-  function XHR (socket) {
-    if (!socket) return;
-
-    io.Transport.apply(this, arguments);
-    this.sendBuffer = [];
-  };
-
-  /**
-   * Inherits from Transport.
-   */
-
-  io.util.inherit(XHR, io.Transport);
-
-  /**
-   * Establish a connection
-   *
-   * @returns {Transport}
-   * @api public
-   */
-
-  XHR.prototype.open = function () {
-    this.socket.setBuffer(false);
-    this.onOpen();
-    this.get();
-
-    // we need to make sure the request succeeds since we have no indication
-    // whether the request opened or not until it succeeded.
-    this.setCloseTimeout();
-
-    return this;
-  };
-
-  /**
-   * Check if we need to send data to the Socket.IO server, if we have data in our
-   * buffer we encode it and forward it to the `post` method.
-   *
-   * @api private
-   */
-
-  XHR.prototype.payload = function (payload) {
-    var msgs = [];
-
-    for (var i = 0, l = payload.length; i < l; i++) {
-      msgs.push(io.parser.encodePacket(payload[i]));
-    }
-
-    this.send(io.parser.encodePayload(msgs));
-  };
-
-  /**
-   * Send data to the Socket.IO server.
-   *
-   * @param data The message
-   * @returns {Transport}
-   * @api public
-   */
-
-  XHR.prototype.send = function (data) {
-    this.post(data);
-    return this;
-  };
-
-  /**
-   * Posts a encoded message to the Socket.IO server.
-   *
-   * @param {String} data A encoded message.
-   * @api private
-   */
-
-  function empty () { };
-
-  XHR.prototype.post = function (data) {
-    var self = this;
-    this.socket.setBuffer(true);
-
-    function stateChange () {
-      if (this.readyState == 4) {
-        this.onreadystatechange = empty;
-        self.posting = false;
-
-        if (this.status == 200){
-          self.socket.setBuffer(false);
-        } else {
-          self.onClose();
-        }
-      }
-    }
-
-    function onload () {
-      this.onload = empty;
-      self.socket.setBuffer(false);
-    };
-
-    this.sendXHR = this.request('POST');
-
-    if (global.XDomainRequest && this.sendXHR instanceof XDomainRequest) {
-      this.sendXHR.onload = this.sendXHR.onerror = onload;
-    } else {
-      this.sendXHR.onreadystatechange = stateChange;
-    }
-
-    this.sendXHR.send(data);
-  };
-
-  /**
-   * Disconnects the established `XHR` connection.
-   *
-   * @returns {Transport} 
-   * @api public
-   */
-
-  XHR.prototype.close = function () {
-    this.onClose();
-    return this;
-  };
-
-  /**
-   * Generates a configured XHR request
-   *
-   * @param {String} url The url that needs to be requested.
-   * @param {String} method The method the request should use.
-   * @returns {XMLHttpRequest}
-   * @api private
-   */
-
-  XHR.prototype.request = function (method) {
-    var req = io.util.request(this.socket.isXDomain())
-      , query = io.util.query(this.socket.options.query, 't=' + +new Date);
-
-    req.open(method || 'GET', this.prepareUrl() + query, true);
-
-    if (method == 'POST') {
-      try {
-        if (req.setRequestHeader) {
-          req.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
-        } else {
-          // XDomainRequest
-          req.contentType = 'text/plain';
-        }
-      } catch (e) {}
-    }
-
-    return req;
-  };
-
-  /**
-   * Returns the scheme to use for the transport URLs.
-   *
-   * @api private
-   */
-
-  XHR.prototype.scheme = function () {
-    return this.socket.options.secure ? 'https' : 'http';
-  };
-
-  /**
-   * Check if the XHR transports are supported
-   *
-   * @param {Boolean} xdomain Check if we support cross domain requests.
-   * @returns {Boolean}
-   * @api public
-   */
-
-  XHR.check = function (socket, xdomain) {
-    try {
-      if (io.util.request(xdomain)) {
-        return true;
-      }
-    } catch(e) {}
-
-    return false;
-  };
-
-  /**
-   * Check if the XHR transport supports corss domain requests.
-   * 
-   * @returns {Boolean}
-   * @api public
-   */
-
-  XHR.xdomainCheck = function () {
-    return XHR.check(null, true);
-  };
-
-})(
-    'undefined' != typeof io ? io.Transport : module.exports
-  , 'undefined' != typeof io ? io : module.parent.exports
-  , this
-);
diff --git a/node/node_modules/socket.io-client/lib/util.js b/node/node_modules/socket.io-client/lib/util.js
deleted file mode 100644 (file)
index 06d66aa..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-
-/**
- * socket.io
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (exports, global) {
-
-  /**
-   * Utilities namespace.
-   *
-   * @namespace
-   */
-
-  var util = exports.util = {};
-
-  /**
-   * Parses an URI
-   *
-   * @author Steven Levithan <stevenlevithan.com> (MIT license)
-   * @api public
-   */
-
-  var re = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
-
-  var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password',
-               'host', 'port', 'relative', 'path', 'directory', 'file', 'query',
-               'anchor'];
-
-  util.parseUri = function (str) {
-    var m = re.exec(str || '')
-      , uri = {}
-      , i = 14;
-
-    while (i--) {
-      uri[parts[i]] = m[i] || '';
-    }
-
-    return uri;
-  };
-
-  /**
-   * Produces a unique url that identifies a Socket.IO connection.
-   *
-   * @param {Object} uri
-   * @api public
-   */
-
-  util.uniqueUri = function (uri) {
-    var protocol = uri.protocol
-      , host = uri.host
-      , port = uri.port;
-
-    if ('document' in global) {
-      host = host || document.domain;
-      port = port || (protocol == 'https'
-        && document.location.protocol !== 'https:' ? 443 : document.location.port);
-    } else {
-      host = host || 'localhost';
-
-      if (!port && protocol == 'https') {
-        port = 443;
-      }
-    }
-
-    return (protocol || 'http') + '://' + host + ':' + (port || 80);
-  };
-
-  /**
-   * Mergest 2 query strings in to once unique query string
-   *
-   * @param {String} base
-   * @param {String} addition
-   * @api public
-   */
-
-  util.query = function (base, addition) {
-    var query = util.chunkQuery(base || '')
-      , components = [];
-
-    util.merge(query, util.chunkQuery(addition || ''));
-    for (var part in query) {
-      if (query.hasOwnProperty(part)) {
-        components.push(part + '=' + query[part]);
-      }
-    }
-
-    return components.length ? '?' + components.join('&') : '';
-  };
-
-  /**
-   * Transforms a querystring in to an object
-   *
-   * @param {String} qs
-   * @api public
-   */
-
-  util.chunkQuery = function (qs) {
-    var query = {}
-      , params = qs.split('&')
-      , i = 0
-      , l = params.length
-      , kv;
-
-    for (; i < l; ++i) {
-      kv = params[i].split('=');
-      if (kv[0]) {
-        query[kv[0]] = decodeURIComponent(kv[1]);
-      }
-    }
-
-    return query;
-  };
-
-  /**
-   * Executes the given function when the page is loaded.
-   *
-   *     io.util.load(function () { console.log('page loaded'); });
-   *
-   * @param {Function} fn
-   * @api public
-   */
-
-  var pageLoaded = false;
-
-  util.load = function (fn) {
-    if ('document' in global && document.readyState === 'complete' || pageLoaded) {
-      return fn();
-    }
-
-    util.on(global, 'load', fn, false);
-  };
-
-  /**
-   * Adds an event.
-   *
-   * @api private
-   */
-
-  util.on = function (element, event, fn, capture) {
-    if (element.attachEvent) {
-      element.attachEvent('on' + event, fn);
-    } else if (element.addEventListener) {
-      element.addEventListener(event, fn, capture);
-    }
-  };
-
-  /**
-   * Generates the correct `XMLHttpRequest` for regular and cross domain requests.
-   *
-   * @param {Boolean} [xdomain] Create a request that can be used cross domain.
-   * @returns {XMLHttpRequest|false} If we can create a XMLHttpRequest.
-   * @api private
-   */
-
-  util.request = function (xdomain) {
-    // if node
-    var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
-    return new XMLHttpRequest();
-    // end node
-
-    if ('undefined' != typeof window) {
-      if (xdomain && window.XDomainRequest) {
-        return new XDomainRequest();
-      }
-
-      if (window.XMLHttpRequest && (!xdomain || util.ua.hasCORS)) {
-        return new XMLHttpRequest();
-      }
-
-      if (!xdomain) {
-        try {
-          return new window.ActiveXObject('Microsoft.XMLHTTP');
-        } catch(e) { }
-      }
-    }
-
-    return null;
-  };
-
-  /**
-   * XHR based transport constructor.
-   *
-   * @constructor
-   * @api public
-   */
-
-  /**
-   * Change the internal pageLoaded value.
-   */
-
-  if ('undefined' != typeof window) {
-    util.load(function () {
-      pageLoaded = true;
-    });
-  }
-
-  /**
-   * Defers a function to ensure a spinner is not displayed by the browser
-   *
-   * @param {Function} fn
-   * @api public
-   */
-
-  util.defer = function (fn) {
-    if (!util.ua.webkit) {
-      return fn();
-    }
-
-    util.load(function () {
-      setTimeout(fn, 100);
-    });
-  };
-
-  /**
-   * Merges two objects.
-   *
-   * @api public
-   */
-  
-  util.merge = function merge (target, additional, deep, lastseen) {
-    var seen = lastseen || []
-      , depth = typeof deep == 'undefined' ? 2 : deep
-      , prop;
-
-    for (prop in additional) {
-      if (additional.hasOwnProperty(prop) && util.indexOf(seen, prop) < 0) {
-        if (typeof target[prop] !== 'object' || !depth) {
-          target[prop] = additional[prop];
-          seen.push(additional[prop]);
-        } else {
-          util.merge(target[prop], additional[prop], depth - 1, seen);
-        }
-      }
-    }
-
-    return target;
-  };
-
-  /**
-   * Merges prototypes from objects
-   *
-   * @api public
-   */
-  
-  util.mixin = function (ctor, ctor2) {
-    util.merge(ctor.prototype, ctor2.prototype);
-  };
-
-  /**
-   * Shortcut for prototypical and static inheritance.
-   *
-   * @api private
-   */
-
-  util.inherit = function (ctor, ctor2) {
-    function f() {};
-    f.prototype = ctor2.prototype;
-    ctor.prototype = new f;
-  };
-
-  /**
-   * Checks if the given object is an Array.
-   *
-   *     io.util.isArray([]); // true
-   *     io.util.isArray({}); // false
-   *
-   * @param Object obj
-   * @api public
-   */
-
-  util.isArray = Array.isArray || function (obj) {
-    return Object.prototype.toString.call(obj) === '[object Array]';
-  };
-
-  /**
-   * Intersects values of two arrays into a third
-   *
-   * @api public
-   */
-
-  util.intersect = function (arr, arr2) {
-    var ret = []
-      , longest = arr.length > arr2.length ? arr : arr2
-      , shortest = arr.length > arr2.length ? arr2 : arr;
-
-    for (var i = 0, l = shortest.length; i < l; i++) {
-      if (~util.indexOf(longest, shortest[i]))
-        ret.push(shortest[i]);
-    }
-
-    return ret;
-  }
-
-  /**
-   * Array indexOf compatibility.
-   *
-   * @see bit.ly/a5Dxa2
-   * @api public
-   */
-
-  util.indexOf = function (arr, o, i) {
-    if (Array.prototype.indexOf) {
-      return Array.prototype.indexOf.call(arr, o, i);
-    }
-
-    for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0; 
-         i < j && arr[i] !== o; i++);
-
-    return j <= i ? -1 : i;
-  };
-
-  /**
-   * Converts enumerables to array.
-   *
-   * @api public
-   */
-
-  util.toArray = function (enu) {
-    var arr = [];
-
-    for (var i = 0, l = enu.length; i < l; i++)
-      arr.push(enu[i]);
-
-    return arr;
-  };
-
-  /**
-   * UA / engines detection namespace.
-   *
-   * @namespace
-   */
-
-  util.ua = {};
-
-  /**
-   * Whether the UA supports CORS for XHR.
-   *
-   * @api public
-   */
-
-  util.ua.hasCORS = 'undefined' != typeof window && window.XMLHttpRequest &&
-  (function () {
-    try {
-      var a = new XMLHttpRequest();
-    } catch (e) {
-      return false;
-    }
-
-    return a.withCredentials != undefined;
-  })();
-
-  /**
-   * Detect webkit.
-   *
-   * @api public
-   */
-
-  util.ua.webkit = 'undefined' != typeof navigator
-    && /webkit/i.test(navigator.userAgent);
-
-})(
-    'undefined' != typeof window ? io : module.exports
-  , this
-);
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/.gitignore b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/.gitignore
deleted file mode 100644 (file)
index 80e8f7a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-test.html
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/README.md b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/README.md
deleted file mode 100644 (file)
index f901c32..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-## How to try the sample
-
-Assuming you have Web server (e.g. Apache) running at **http://example.com/** .
-
-1. Download [web-socket-ruby](http://github.com/gimite/web-socket-ruby/tree/master).
-2. Run sample Web Socket server (echo server) in example.com with: (#1)<br>
-```
-$ ruby web-socket-ruby/samples/echo_server.rb example.com 10081
-```
-3. If your server already provides socket policy file at port **843**, modify the file to allow access to port **10081**. Otherwise you can skip this step. See below for details.
-4. Publish the web-socket-js directory with your Web server (e.g. put it in ~/public_html).
-5. Change ws://localhost:10081 to **ws://example.com:10081** in sample.html.
-6. Open sample.html in your browser.
-7. After "onopen" is shown, input something, click [Send] and confirm echo back.
-
-\#1: First argument of echo_server.rb means that it accepts Web Socket connection from HTML pages in example.com.
-
-
-## How to use it in your application
-
-- Copy swfobject.js, web_socket.js, WebSocketMain.swf to your application directory.
-- Write JavaScript code:
-
-```html
-<!-- Import JavaScript Libraries. -->
-<script type="text/javascript" src="swfobject.js"></script>
-<script type="text/javascript" src="web_socket.js"></script>
-
-<script type="text/javascript">
-  
-  // Let the library know where WebSocketMain.swf is:
-  WEB_SOCKET_SWF_LOCATION = "WebSocketMain.swf";
-  
-  // Write your code in the same way as for native WebSocket:
-  var ws = new WebSocket("ws://example.com:10081/");
-  ws.onopen = function() {
-    ws.send("Hello");  // Sends a message.
-  };
-  ws.onmessage = function(e) {
-    // Receives a message.
-    alert(e.data);
-  };
-  ws.onclose = function() {
-    alert("closed");
-  };
-  
-</script>
-```
-
-- Put Flash socket policy file to your server unless you use web-socket-ruby or em-websocket as your WebSocket server. See "Flash socket policy file" section below for details.
-
-
-## Troubleshooting
-
-If it doesn't work, try these:
-
-1. Try Chrome and Firefox 3.x.
-
-   - It doesn't work on Chrome:<br>
-     It's likely an issue of your code or the server. Debug your code as usual e.g. using console.log.
-   - It works on Chrome but it doesn't work on Firefox:<br>
-     It's likely an issue of web-socket-js specific configuration (e.g. 3 and 4 below).
-   - It works on both Chrome and Firefox, but it doesn't work on your browser:<br>
-     Check "Supported environment" section below. Your browser may not be supported by web-socket-js.
-
-2. Add this line before your code:
-       WEB_SOCKET_DEBUG = true;
-and use Developer Tools (Chrome/Safari) or Firebug (Firefox) to see if console.log outputs any errors.
-
-3. Make sure you do NOT open your HTML page as local file e.g. file:///.../sample.html. web-socket-js doesn't work on local file. Open it via Web server e.g. http:///.../sample.html.
-
-4. If you are NOT using web-socket-ruby or em-websocket as your WebSocket server, you need to place Flash socket policy file on your server. See "Flash socket policy file" section below for details.
-
-5. Check if sample.html bundled with web-socket-js works.
-
-6. Make sure the port used for WebSocket (10081 in example above) is not blocked by your server/client's firewall.
-
-7. Install [debugger version of Flash Player](http://www.adobe.com/support/flashplayer/downloads.html) to see Flash errors.
-
-
-## Supported environments
-
-It should work on:
-
-- Google Chrome 4 or later (just uses native implementation)
-- Firefox 3.x, 4.x, Internet Explorer 8, 9 + Flash Player 10 or later
-
-It may or may not work on other browsers such as Safari, Opera or IE 6. Patch for these browsers are appreciated, but I will not work on fixing issues specific to these browsers by myself.
-
-
-## Limitations/differences compared to native WebSocket
-
-- You need some more lines in your JavaScript code. See "How to use it in your application" section above for details.
-- It requires Flash Player 10 or later unless the browser supports native WebSocket.
-- Your server must provide Flash socket policy file, unless you use web-socket-ruby or em-websocket. See "Flash socket policy file" section below for details.
-- It has limited support for Cookies on WebSocket. See "Cookie support" section below for details.
-- It doesn't use proxies specified in browser config. See "Proxy support" section below for details.
-
-
-### Flash socket policy file
-
-This implementation uses Flash's socket, which means that your server must provide Flash socket policy file to declare the server accepts connections from Flash.
-
-If you use [web-socket-ruby](http://github.com/gimite/web-socket-ruby/tree/master) or [em-websocket](https://github.com/igrigorik/em-websocket), you don't need anything special, because they handle Flash socket policy file request. But if you already provide socket policy file at port **843**, you need to modify the file to allow access to Web Socket port, because it precedes what the libraries provide.
-
-If you use other Web Socket server implementation, you need to provide socket policy file yourself. See [Setting up A Flash Socket Policy File](http://www.lightsphere.com/dev/articles/flash_socket_policy.html) for details and sample script to run socket policy file server. [node.js implementation is available here](http://github.com/LearnBoost/Socket.IO-node/blob/master/lib/socket.io/transports/flashsocket.js).
-
-Actually, it's still better to provide socket policy file at port 843 even if you use web-socket-ruby or em-websocket. Flash always try to connect to port 843 first, so providing the file at port 843 makes startup faster.
-
-
-### Cookie support
-
-web-socket-js has limited supported for Cookies on WebSocket.
-
-Cookie is sent if Web Socket host is exactly the same as the origin of JavaScript (The port can be different). Otherwise it is not sent, because I don't know way to send right Cookie (which is Cookie of the host of Web Socket, I heard). Also, HttpOnly Cookies are not sent.
-
-Note that it's technically possible that client sends arbitrary string as Cookie and any other headers (by modifying this library for example) once you place Flash socket policy file in your server. So don't trust Cookie and other headers if you allow connection from untrusted origin.
-
-
-### Proxy support
-
-[The WebSocket spec](http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol) specifies instructions for User Agents to support proxied connections by implementing the HTTP CONNECT method.
-
-The AS3 Socket class doesn't implement this mechanism, which renders it useless for the scenarios where the user trying to open a socket is behind a proxy. 
-
-The class RFC2817Socket (by Christian Cantrell) effectively lets us implement this, as long as the proxy settings are known and provided by the interface that instantiates the WebSocket. As such, if you want to support proxied conncetions, you'll have to supply this information to the WebSocket constructor when Flash is being used. One way to go about it would be to ask the user for proxy settings information if the initial connection fails.
-
-
-## How to host HTML file and SWF file in different domains
-
-By default, HTML file and SWF file must be in the same domain. You can follow steps below to allow hosting them in different domain.
-
-**WARNING**: If you use the method below, HTML files in ANY domains can send arbitrary TCP data to your WebSocket server, regardless of configuration in Flash socket policy file. Arbitrary TCP data means that they can even fake request headers including Origin and Cookie.
-
-1. Unzip WebSocketMainInsecure.zip to extract WebSocketMainInsecure.swf.
-2. Put WebSocketMainInsecure.swf on your server, instead of WebSocketMain.swf.
-3. In JavaScript, set WEB_SOCKET_SWF_LOCATION to URL of your WebSocketMainInsecure.swf.
-
-
-## How to build WebSocketMain.swf
-
-Install [Flex 4 SDK](http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4).
-
-    $ cd flash-src
-    $ ./build.sh
-
-
-## WebSocket protocol versions
-
-- web-socket-js supports [Hixie 76 version](http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76) of WebSocket protocol by default i.e. in [master branch](https://github.com/gimite/web-socket-js).
-- If you want to try newer [Hybi 07 version](http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07), check out from [hybi-07 branch](https://github.com/gimite/web-socket-js/tree/hybi-07). This will become the master branch in the future, probably when Chrome switches to Hybi 07.
-- Hixie 75 or before is no longer supported.
-
-
-## License
-
-New BSD License.
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/WebSocketMain.swf b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/WebSocketMain.swf
deleted file mode 100644 (file)
index 20a451f..0000000
Binary files a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/WebSocketMain.swf and /dev/null differ
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/WebSocketMainInsecure.zip b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/WebSocketMainInsecure.zip
deleted file mode 100644 (file)
index 58e2a4e..0000000
Binary files a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/WebSocketMainInsecure.zip and /dev/null differ
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/IWebSocketLogger.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/IWebSocketLogger.as
deleted file mode 100644 (file)
index 24f4ef7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-package {
-
-public interface IWebSocketLogger {
-  function log(message:String):void;
-  function error(message:String):void;
-}
-
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocket.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocket.as
deleted file mode 100644 (file)
index 813f517..0000000
+++ /dev/null
@@ -1,464 +0,0 @@
-// Copyright: Hiroshi Ichikawa <http://gimite.net/en/>
-// License: New BSD License
-// Reference: http://dev.w3.org/html5/websockets/
-// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76
-
-package {
-
-import com.adobe.net.proxies.RFC2817Socket;
-import com.gsolo.encryption.MD5;
-import com.hurlant.crypto.tls.TLSConfig;
-import com.hurlant.crypto.tls.TLSEngine;
-import com.hurlant.crypto.tls.TLSSecurityParameters;
-import com.hurlant.crypto.tls.TLSSocket;
-
-import flash.display.*;
-import flash.events.*;
-import flash.external.*;
-import flash.net.*;
-import flash.system.*;
-import flash.utils.*;
-
-import mx.controls.*;
-import mx.core.*;
-import mx.events.*;
-import mx.utils.*;
-
-public class WebSocket extends EventDispatcher {
-  
-  private static var CONNECTING:int = 0;
-  private static var OPEN:int = 1;
-  private static var CLOSING:int = 2;
-  private static var CLOSED:int = 3;
-  
-  private var id:int;
-  private var rawSocket:Socket;
-  private var tlsSocket:TLSSocket;
-  private var tlsConfig:TLSConfig;
-  private var socket:Socket;
-  private var url:String;
-  private var scheme:String;
-  private var host:String;
-  private var port:uint;
-  private var path:String;
-  private var origin:String;
-  private var requestedProtocols:Array;
-  private var acceptedProtocol:String;
-  private var buffer:ByteArray = new ByteArray();
-  private var headerState:int = 0;
-  private var readyState:int = CONNECTING;
-  private var cookie:String;
-  private var headers:String;
-  private var noiseChars:Array;
-  private var expectedDigest:String;
-  private var logger:IWebSocketLogger;
-
-  public function WebSocket(
-      id:int, url:String, protocols:Array, origin:String,
-      proxyHost:String, proxyPort:int,
-      cookie:String, headers:String,
-      logger:IWebSocketLogger) {
-    this.logger = logger;
-    this.id = id;
-    initNoiseChars();
-    this.url = url;
-    var m:Array = url.match(/^(\w+):\/\/([^\/:]+)(:(\d+))?(\/.*)?(\?.*)?$/);
-    if (!m) fatal("SYNTAX_ERR: invalid url: " + url);
-    this.scheme = m[1];
-    this.host = m[2];
-    var defaultPort:int = scheme == "wss" ? 443 : 80;
-    this.port = parseInt(m[4]) || defaultPort;
-    this.path = (m[5] || "/") + (m[6] || "");
-    this.origin = origin;
-    this.requestedProtocols = protocols;
-    this.cookie = cookie;
-    // if present and not the empty string, headers MUST end with \r\n
-    // headers should be zero or more complete lines, for example
-    // "Header1: xxx\r\nHeader2: yyyy\r\n"
-    this.headers = headers;
-    
-    if (proxyHost != null && proxyPort != 0){
-      if (scheme == "wss") {
-        fatal("wss with proxy is not supported");
-      }
-      var proxySocket:RFC2817Socket = new RFC2817Socket();
-      proxySocket.setProxyInfo(proxyHost, proxyPort);
-      proxySocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
-      rawSocket = socket = proxySocket;
-    } else {
-      rawSocket = new Socket();
-      if (scheme == "wss") {
-        tlsConfig= new TLSConfig(TLSEngine.CLIENT,
-            null, null, null, null, null,
-            TLSSecurityParameters.PROTOCOL_VERSION);
-        tlsConfig.trustAllCertificates = true;
-        tlsConfig.ignoreCommonNameMismatch = true;
-        tlsSocket = new TLSSocket();
-        tlsSocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
-        socket = tlsSocket;
-      } else {
-        rawSocket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
-        socket = rawSocket;
-      }
-    }
-    rawSocket.addEventListener(Event.CLOSE, onSocketClose);
-    rawSocket.addEventListener(Event.CONNECT, onSocketConnect);
-    rawSocket.addEventListener(IOErrorEvent.IO_ERROR, onSocketIoError);
-    rawSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSocketSecurityError);
-    rawSocket.connect(host, port);
-  }
-  
-  /**
-   * @return  This WebSocket's ID.
-   */
-  public function getId():int {
-    return this.id;
-  }
-  
-  /**
-   * @return this WebSocket's readyState.
-   */
-  public function getReadyState():int {
-    return this.readyState;
-  }
-
-  public function getAcceptedProtocol():String {
-    return this.acceptedProtocol;
-  }
-  
-  public function send(encData:String):int {
-    var data:String = decodeURIComponent(encData);
-    if (readyState == OPEN) {
-      socket.writeByte(0x00);
-      socket.writeUTFBytes(data);
-      socket.writeByte(0xff);
-      socket.flush();
-      logger.log("sent: " + data);
-      return -1;
-    } else if (readyState == CLOSING || readyState == CLOSED) {
-      var bytes:ByteArray = new ByteArray();
-      bytes.writeUTFBytes(data);
-      return bytes.length; // not sure whether it should include \x00 and \xff
-    } else {
-      fatal("invalid state");
-      return 0;
-    }
-  }
-  
-  public function close(isError:Boolean = false):void {
-    logger.log("close");
-    try {
-      if (readyState == OPEN && !isError) {
-        socket.writeByte(0xff);
-        socket.writeByte(0x00);
-        socket.flush();
-      }
-      socket.close();
-    } catch (ex:Error) { }
-    readyState = CLOSED;
-    this.dispatchEvent(new WebSocketEvent(isError ? "error" : "close"));
-  }
-  
-  private function onSocketConnect(event:Event):void {
-    logger.log("connected");
-
-    if (scheme == "wss") {
-      logger.log("starting SSL/TLS");
-      tlsSocket.startTLS(rawSocket, host, tlsConfig);
-    }
-    
-    var defaultPort:int = scheme == "wss" ? 443 : 80;
-    var hostValue:String = host + (port == defaultPort ? "" : ":" + port);
-    var key1:String = generateKey();
-    var key2:String = generateKey();
-    var key3:String = generateKey3();
-    expectedDigest = getSecurityDigest(key1, key2, key3);
-    var opt:String = "";
-    if (requestedProtocols.length > 0) {
-      opt += "Sec-WebSocket-Protocol: " + requestedProtocols.join(",") + "\r\n";
-    }
-    // if caller passes additional headers they must end with "\r\n"
-    if (headers) opt += headers;
-    
-    var req:String = StringUtil.substitute(
-      "GET {0} HTTP/1.1\r\n" +
-      "Upgrade: WebSocket\r\n" +
-      "Connection: Upgrade\r\n" +
-      "Host: {1}\r\n" +
-      "Origin: {2}\r\n" +
-      "Cookie: {3}\r\n" +
-      "Sec-WebSocket-Key1: {4}\r\n" +
-      "Sec-WebSocket-Key2: {5}\r\n" +
-      "{6}" +
-      "\r\n",
-      path, hostValue, origin, cookie, key1, key2, opt);
-    logger.log("request header:\n" + req);
-    socket.writeUTFBytes(req);
-    logger.log("sent key3: " + key3);
-    writeBytes(key3);
-    socket.flush();
-  }
-
-  private function onSocketClose(event:Event):void {
-    logger.log("closed");
-    readyState = CLOSED;
-    this.dispatchEvent(new WebSocketEvent("close"));
-  }
-
-  private function onSocketIoError(event:IOErrorEvent):void {
-    var message:String;
-    if (readyState == CONNECTING) {
-      message = "cannot connect to Web Socket server at " + url + " (IoError)";
-    } else {
-      message = "error communicating with Web Socket server at " + url + " (IoError)";
-    }
-    onError(message);
-  }
-
-  private function onSocketSecurityError(event:SecurityErrorEvent):void {
-    var message:String;
-    if (readyState == CONNECTING) {
-      message =
-          "cannot connect to Web Socket server at " + url + " (SecurityError)\n" +
-          "make sure the server is running and Flash socket policy file is correctly placed";
-    } else {
-      message = "error communicating with Web Socket server at " + url + " (SecurityError)";
-    }
-    onError(message);
-  }
-  
-  private function onError(message:String):void {
-    if (readyState == CLOSED) return;
-    logger.error(message);
-    close(readyState != CONNECTING);
-  }
-
-  private function onSocketData(event:ProgressEvent):void {
-    var pos:int = buffer.length;
-    socket.readBytes(buffer, pos);
-    for (; pos < buffer.length; ++pos) {
-      if (headerState < 4) {
-        // try to find "\r\n\r\n"
-        if ((headerState == 0 || headerState == 2) && buffer[pos] == 0x0d) {
-          ++headerState;
-        } else if ((headerState == 1 || headerState == 3) && buffer[pos] == 0x0a) {
-          ++headerState;
-        } else {
-          headerState = 0;
-        }
-        if (headerState == 4) {
-          var headerStr:String = readUTFBytes(buffer, 0, pos + 1);
-          logger.log("response header:\n" + headerStr);
-          if (!validateHeader(headerStr)) return;
-          removeBufferBefore(pos + 1);
-          pos = -1;
-        }
-      } else if (headerState == 4) {
-        if (pos == 15) {
-          var replyDigest:String = readBytes(buffer, 0, 16);
-          logger.log("reply digest: " + replyDigest);
-          if (replyDigest != expectedDigest) {
-            onError("digest doesn't match: " + replyDigest + " != " + expectedDigest);
-            return;
-          }
-          headerState = 5;
-          removeBufferBefore(pos + 1);
-          pos = -1;
-          readyState = OPEN;
-          this.dispatchEvent(new WebSocketEvent("open"));
-        }
-      } else {
-        if (buffer[pos] == 0xff && pos > 0) {
-          if (buffer[0] != 0x00) {
-            onError("data must start with \\x00");
-            return;
-          }
-          var data:String = readUTFBytes(buffer, 1, pos - 1);
-          logger.log("received: " + data);
-          this.dispatchEvent(new WebSocketEvent("message", encodeURIComponent(data)));
-          removeBufferBefore(pos + 1);
-          pos = -1;
-        } else if (pos == 1 && buffer[0] == 0xff && buffer[1] == 0x00) { // closing
-          logger.log("received closing packet");
-          removeBufferBefore(pos + 1);
-          pos = -1;
-          close();
-        }
-      }
-    }
-  }
-  
-  private function validateHeader(headerStr:String):Boolean {
-    var lines:Array = headerStr.split(/\r\n/);
-    if (!lines[0].match(/^HTTP\/1.1 101 /)) {
-      onError("bad response: " + lines[0]);
-      return false;
-    }
-    var header:Object = {};
-    var lowerHeader:Object = {};
-    for (var i:int = 1; i < lines.length; ++i) {
-      if (lines[i].length == 0) continue;
-      var m:Array = lines[i].match(/^(\S+): (.*)$/);
-      if (!m) {
-        onError("failed to parse response header line: " + lines[i]);
-        return false;
-      }
-      header[m[1].toLowerCase()] = m[2];
-      lowerHeader[m[1].toLowerCase()] = m[2].toLowerCase();
-    }
-    if (lowerHeader["upgrade"] != "websocket") {
-      onError("invalid Upgrade: " + header["Upgrade"]);
-      return false;
-    }
-    if (lowerHeader["connection"] != "upgrade") {
-      onError("invalid Connection: " + header["Connection"]);
-      return false;
-    }
-    if (!lowerHeader["sec-websocket-origin"]) {
-      if (lowerHeader["websocket-origin"]) {
-        onError(
-          "The WebSocket server speaks old WebSocket protocol, " +
-          "which is not supported by web-socket-js. " +
-          "It requires WebSocket protocol 76 or later. " +
-          "Try newer version of the server if available.");
-      } else {
-        onError("header Sec-WebSocket-Origin is missing");
-      }
-      return false;
-    }
-    var resOrigin:String = lowerHeader["sec-websocket-origin"];
-    if (resOrigin != origin) {
-      onError("origin doesn't match: '" + resOrigin + "' != '" + origin + "'");
-      return false;
-    }
-    if (requestedProtocols.length > 0) {
-      acceptedProtocol = header["sec-websocket-protocol"];
-      if (requestedProtocols.indexOf(acceptedProtocol) < 0) {
-        onError("protocol doesn't match: '" +
-          acceptedProtocol + "' not in '" + requestedProtocols.join(",") + "'");
-        return false;
-      }
-    }
-    return true;
-  }
-
-  private function removeBufferBefore(pos:int):void {
-    if (pos == 0) return;
-    var nextBuffer:ByteArray = new ByteArray();
-    buffer.position = pos;
-    buffer.readBytes(nextBuffer);
-    buffer = nextBuffer;
-  }
-  
-  private function initNoiseChars():void {
-    noiseChars = new Array();
-    for (var i:int = 0x21; i <= 0x2f; ++i) {
-      noiseChars.push(String.fromCharCode(i));
-    }
-    for (var j:int = 0x3a; j <= 0x7a; ++j) {
-      noiseChars.push(String.fromCharCode(j));
-    }
-  }
-  
-  private function generateKey():String {
-    var spaces:uint = randomInt(1, 12);
-    var max:uint = uint.MAX_VALUE / spaces;
-    var number:uint = randomInt(0, max);
-    var key:String = (number * spaces).toString();
-    var noises:int = randomInt(1, 12);
-    var pos:int;
-    for (var i:int = 0; i < noises; ++i) {
-      var char:String = noiseChars[randomInt(0, noiseChars.length - 1)];
-      pos = randomInt(0, key.length);
-      key = key.substr(0, pos) + char + key.substr(pos);
-    }
-    for (var j:int = 0; j < spaces; ++j) {
-      pos = randomInt(1, key.length - 1);
-      key = key.substr(0, pos) + " " + key.substr(pos);
-    }
-    return key;
-  }
-  
-  private function generateKey3():String {
-    var key3:String = "";
-    for (var i:int = 0; i < 8; ++i) {
-      key3 += String.fromCharCode(randomInt(0, 255));
-    }
-    return key3;
-  }
-  
-  private function getSecurityDigest(key1:String, key2:String, key3:String):String {
-    var bytes1:String = keyToBytes(key1);
-    var bytes2:String = keyToBytes(key2);
-    return MD5.rstr_md5(bytes1 + bytes2 + key3);
-  }
-  
-  private function keyToBytes(key:String):String {
-    var keyNum:uint = parseInt(key.replace(/[^\d]/g, ""));
-    var spaces:uint = 0;
-    for (var i:int = 0; i < key.length; ++i) {
-      if (key.charAt(i) == " ") ++spaces;
-    }
-    var resultNum:uint = keyNum / spaces;
-    var bytes:String = "";
-    for (var j:int = 3; j >= 0; --j) {
-      bytes += String.fromCharCode((resultNum >> (j * 8)) & 0xff);
-    }
-    return bytes;
-  }
-  
-  // Writes byte sequence to socket.
-  // bytes is String in special format where bytes[i] is i-th byte, not i-th character.
-  private function writeBytes(bytes:String):void {
-    for (var i:int = 0; i < bytes.length; ++i) {
-      socket.writeByte(bytes.charCodeAt(i));
-    }
-  }
-  
-  // Reads specified number of bytes from buffer, and returns it as special format String
-  // where bytes[i] is i-th byte (not i-th character).
-  private function readBytes(buffer:ByteArray, start:int, numBytes:int):String {
-    buffer.position = start;
-    var bytes:String = "";
-    for (var i:int = 0; i < numBytes; ++i) {
-      // & 0xff is to make \x80-\xff positive number.
-      bytes += String.fromCharCode(buffer.readByte() & 0xff);
-    }
-    return bytes;
-  }
-  
-  private function readUTFBytes(buffer:ByteArray, start:int, numBytes:int):String {
-    buffer.position = start;
-    var data:String = "";
-    for(var i:int = start; i < start + numBytes; ++i) {
-      // Workaround of a bug of ByteArray#readUTFBytes() that bytes after "\x00" is discarded.
-      if (buffer[i] == 0x00) {
-        data += buffer.readUTFBytes(i - buffer.position) + "\x00";
-        buffer.position = i + 1;
-      }
-    }
-    data += buffer.readUTFBytes(start + numBytes - buffer.position);
-    return data;
-  }
-  
-  private function randomInt(min:uint, max:uint):uint {
-    return min + Math.floor(Math.random() * (Number(max) - min + 1));
-  }
-  
-  private function fatal(message:String):void {
-    logger.error(message);
-    throw message;
-  }
-
-  // for debug
-  private function dumpBytes(bytes:String):void {
-    var output:String = "";
-    for (var i:int = 0; i < bytes.length; ++i) {
-      output += bytes.charCodeAt(i).toString() + ", ";
-    }
-    logger.log(output);
-  }
-  
-}
-
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketEvent.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketEvent.as
deleted file mode 100644 (file)
index 598eeb2..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-package {
-
-import flash.events.Event;
-
-/**
- * This class represents a generic websocket event.  It contains the standard "type"
- * parameter as well as a "message" parameter.
- */
-public class WebSocketEvent extends Event {
-  
-  public static const OPEN:String = "open";
-  public static const CLOSE:String = "close";
-  public static const MESSAGE:String = "message";
-  public static const ERROR:String = "error";
-
-  public var message:String;
-  
-  public function WebSocketEvent(
-      type:String, message:String = null, bubbles:Boolean = false, cancelable:Boolean = false) {
-    super(type, bubbles, cancelable);
-    this.message = message;
-  }
-  
-  public override function clone():Event {
-    return new WebSocketEvent(this.type, this.message, this.bubbles, this.cancelable);
-  }
-  
-  public override function toString():String {
-    return "WebSocketEvent: " + this.type + ": " + this.message;
-  }
-}
-
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketMain.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketMain.as
deleted file mode 100644 (file)
index 1bf3d7e..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright: Hiroshi Ichikawa <http://gimite.net/en/>
-// License: New BSD License
-// Reference: http://dev.w3.org/html5/websockets/
-// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76
-
-package {
-
-import flash.display.Sprite;
-import flash.external.ExternalInterface;
-import flash.system.Security;
-import flash.utils.setTimeout;
-
-import mx.utils.URLUtil;
-
-/**
-  * Provides JavaScript API of WebSocket.
-  */
-public class WebSocketMain extends Sprite implements IWebSocketLogger{
-  
-  private var callerUrl:String;
-  private var debug:Boolean = false;
-  private var manualPolicyFileLoaded:Boolean = false;
-  private var webSockets:Array = [];
-  private var eventQueue:Array = [];
-  
-  public function WebSocketMain() {
-    ExternalInterface.addCallback("setCallerUrl", setCallerUrl);
-    ExternalInterface.addCallback("setDebug", setDebug);
-    ExternalInterface.addCallback("create", create);
-    ExternalInterface.addCallback("send", send);
-    ExternalInterface.addCallback("close", close);
-    ExternalInterface.addCallback("loadManualPolicyFile", loadManualPolicyFile);
-    ExternalInterface.addCallback("receiveEvents", receiveEvents);
-    ExternalInterface.call("WebSocket.__onFlashInitialized");
-  }
-  
-  public function setCallerUrl(url:String):void {
-    callerUrl = url;
-  }
-  
-  public function setDebug(val:Boolean):void {
-    debug = val;
-  }
-  
-  private function loadDefaultPolicyFile(wsUrl:String):void {
-    var policyUrl:String = "xmlsocket://" + URLUtil.getServerName(wsUrl) + ":843";
-    log("policy file: " + policyUrl);
-    Security.loadPolicyFile(policyUrl);
-  }
-  
-  public function loadManualPolicyFile(policyUrl:String):void {
-    log("policy file: " + policyUrl);
-    Security.loadPolicyFile(policyUrl);
-    manualPolicyFileLoaded = true;
-  }
-  
-  public function log(message:String):void {
-    if (debug) {
-      ExternalInterface.call("WebSocket.__log", encodeURIComponent("[WebSocket] " + message));
-    }
-  }
-  
-  public function error(message:String):void {
-    ExternalInterface.call("WebSocket.__error", encodeURIComponent("[WebSocket] " + message));
-  }
-  
-  private function parseEvent(event:WebSocketEvent):Object {
-    var webSocket:WebSocket = event.target as WebSocket;
-    var eventObj:Object = {};
-    eventObj.type = event.type;
-    eventObj.webSocketId = webSocket.getId();
-    eventObj.readyState = webSocket.getReadyState();
-    eventObj.protocol = webSocket.getAcceptedProtocol();
-    if (event.message !== null) {
-      eventObj.message = event.message;
-    }
-    return eventObj;
-  }
-  
-  public function create(
-      webSocketId:int,
-      url:String, protocols:Array,
-      proxyHost:String = null, proxyPort:int = 0,
-      headers:String = null):void {
-    if (!manualPolicyFileLoaded) {
-      loadDefaultPolicyFile(url);
-    }
-    var newSocket:WebSocket = new WebSocket(
-        webSocketId, url, protocols, getOrigin(), proxyHost, proxyPort,
-        getCookie(url), headers, this);
-    newSocket.addEventListener("open", onSocketEvent);
-    newSocket.addEventListener("close", onSocketEvent);
-    newSocket.addEventListener("error", onSocketEvent);
-    newSocket.addEventListener("message", onSocketEvent);
-    webSockets[webSocketId] = newSocket;
-  }
-  
-  public function send(webSocketId:int, encData:String):int {
-    var webSocket:WebSocket = webSockets[webSocketId];
-    return webSocket.send(encData);
-  }
-  
-  public function close(webSocketId:int):void {
-    var webSocket:WebSocket = webSockets[webSocketId];
-    webSocket.close();
-  }
-  
-  public function receiveEvents():Object {
-    var result:Object = eventQueue;
-    eventQueue = [];
-    return result;
-  }
-  
-  private function getOrigin():String {
-    return (URLUtil.getProtocol(this.callerUrl) + "://" +
-      URLUtil.getServerNameWithPort(this.callerUrl)).toLowerCase();
-  }
-  
-  private function getCookie(url:String):String {
-    if (URLUtil.getServerName(url).toLowerCase() ==
-        URLUtil.getServerName(this.callerUrl).toLowerCase()) {
-      return ExternalInterface.call("function(){return document.cookie}");
-    } else {
-      return "";
-    }
-  }
-  
-  /**
-   * Socket event handler.
-   */
-  public function onSocketEvent(event:WebSocketEvent):void {
-    var eventObj:Object = parseEvent(event);
-    eventQueue.push(eventObj);
-    processEvents();
-  }
-  
-  /**
-   * Process our event queue.  If javascript is unresponsive, set
-   * a timeout and try again.
-   */
-  public function processEvents():void {
-    if (eventQueue.length == 0) return;
-    if (!ExternalInterface.call("WebSocket.__onFlashEvent")) {
-      setTimeout(processEvents, 500);
-    }
-  }
-  
-}
-
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/WebSocketMainInsecure.as
deleted file mode 100644 (file)
index ea377be..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright: Hiroshi Ichikawa <http://gimite.net/en/>
-// License: New BSD License
-// Reference: http://dev.w3.org/html5/websockets/
-// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76
-
-package {
-
-import flash.system.*;
-
-public class WebSocketMainInsecure extends WebSocketMain {
-
-  public function WebSocketMainInsecure() {
-    Security.allowDomain("*");
-    super();
-  }
-  
-}
-
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/build.sh b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/build.sh
deleted file mode 100755 (executable)
index 598674a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-# You need Flex 4 SDK:
-# http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4
-
-mxmlc -static-link-runtime-shared-libraries -target-player=10.0.0 -output=../WebSocketMain.swf WebSocketMain.as &&
-mxmlc -static-link-runtime-shared-libraries -output=../WebSocketMainInsecure.swf WebSocketMainInsecure.as &&
-cd .. &&
-zip WebSocketMainInsecure.zip WebSocketMainInsecure.swf &&
-rm WebSocketMainInsecure.swf 
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/adobe/net/proxies/RFC2817Socket.as
deleted file mode 100644 (file)
index c52ee39..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-       Adobe Systems Incorporated(r) Source Code License Agreement
-       Copyright(c) 2005 Adobe Systems Incorporated. All rights reserved.
-       
-       Please read this Source Code License Agreement carefully before using
-       the source code.
-       
-       Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive, 
-       no-charge, royalty-free, irrevocable copyright license, to reproduce,
-       prepare derivative works of, publicly display, publicly perform, and
-       distribute this source code and such derivative works in source or 
-       object code form without any attribution requirements.  
-       
-       The name "Adobe Systems Incorporated" must not be used to endorse or promote products
-       derived from the source code without prior written permission.
-       
-       You agree to indemnify, hold harmless and defend Adobe Systems Incorporated from and
-       against any loss, damage, claims or lawsuits, including attorney's 
-       fees that arise or result from your use or distribution of the source 
-       code.
-       
-       THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT 
-       ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
-       BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-       FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  ALSO, THERE IS NO WARRANTY OF 
-       NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT.  IN NO EVENT SHALL MACROMEDIA
-       OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-       EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
-       PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-       OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-       WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-       OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF
-       ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-package com.adobe.net.proxies
-{
-       import flash.events.Event;
-       import flash.events.IOErrorEvent;
-       import flash.events.ProgressEvent;
-       import flash.net.Socket;
-
-       /**
-        * This class allows TCP socket connections through HTTP proxies in accordance with
-        * RFC 2817:
-        * 
-        * ftp://ftp.rfc-editor.org/in-notes/rfc2817.txt
-        * 
-        * It can also be used to make direct connections to a destination, as well. If you
-        * pass the host and port into the constructor, no proxy will be used. You can also
-        * call connect, passing in the host and the port, and if you didn't set the proxy
-        * info, a direct connection will be made. A proxy is only used after you have called
-        * the setProxyInfo function.
-        * 
-        * The connection to and negotiation with the proxy is completely hidden. All the
-        * same events are thrown whether you are using a proxy or not, and the data you
-        * receive from the target server will look exact as it would if you were connected
-        * to it directly rather than through a proxy.
-        * 
-        * @author Christian Cantrell
-        * 
-        **/
-       public class RFC2817Socket
-               extends Socket
-       {
-               private var proxyHost:String = null;
-               private var host:String = null;
-               private var proxyPort:int = 0;
-               private var port:int = 0;
-               private var deferredEventHandlers:Object = new Object();
-               private var buffer:String = new String();
-
-               /**
-                * Construct a new RFC2817Socket object. If you pass in the host and the port,
-                * no proxy will be used. If you want to use a proxy, instantiate with no
-                * arguments, call setProxyInfo, then call connect.
-                **/
-               public function RFC2817Socket(host:String = null, port:int = 0)
-               {
-                       if (host != null && port != 0)
-                       {
-                               super(host, port);
-                       }
-               }
-               
-               /**
-                * Set the proxy host and port number. Your connection will only proxied if
-                * this function has been called.
-                **/
-               public function setProxyInfo(host:String, port:int):void
-               {
-                       this.proxyHost = host;
-                       this.proxyPort = port;
-
-                       var deferredSocketDataHandler:Object = this.deferredEventHandlers[ProgressEvent.SOCKET_DATA];
-                       var deferredConnectHandler:Object = this.deferredEventHandlers[Event.CONNECT];
-
-                       if (deferredSocketDataHandler != null)
-                       {
-                               super.removeEventListener(ProgressEvent.SOCKET_DATA, deferredSocketDataHandler.listener, deferredSocketDataHandler.useCapture);
-                       }
-
-                       if (deferredConnectHandler != null)
-                       {
-                               super.removeEventListener(Event.CONNECT, deferredConnectHandler.listener, deferredConnectHandler.useCapture);
-                       }
-               }
-               
-               /**
-                * Connect to the specified host over the specified port. If you want your
-                * connection proxied, call the setProxyInfo function first.
-                **/
-               public override function connect(host:String, port:int):void
-               {
-                       if (this.proxyHost == null)
-                       {
-                               this.redirectConnectEvent();
-                               this.redirectSocketDataEvent();
-                               super.connect(host, port);
-                       }
-                       else
-                       {
-                               this.host = host;
-                               this.port = port;
-                               super.addEventListener(Event.CONNECT, this.onConnect);
-                               super.addEventListener(ProgressEvent.SOCKET_DATA, this.onSocketData);
-                               super.connect(this.proxyHost, this.proxyPort);
-                       }
-               }
-
-               private function onConnect(event:Event):void
-               {
-                       this.writeUTFBytes("CONNECT "+this.host+":"+this.port+" HTTP/1.1\n\n");
-                       this.flush();
-                       this.redirectConnectEvent();
-               }
-               
-               private function onSocketData(event:ProgressEvent):void
-               {
-                       while (this.bytesAvailable != 0)
-                       {
-                               this.buffer += this.readUTFBytes(1);
-                               if (this.buffer.search(/\r?\n\r?\n$/) != -1)
-                               {
-                                       this.checkResponse(event);
-                                       break;
-                               }
-                       }
-               }
-               
-               private function checkResponse(event:ProgressEvent):void
-               {
-                       var responseCode:String = this.buffer.substr(this.buffer.indexOf(" ")+1, 3);
-
-                       if (responseCode.search(/^2/) == -1)
-                       {
-                               var ioError:IOErrorEvent = new IOErrorEvent(IOErrorEvent.IO_ERROR);
-                               ioError.text = "Error connecting to the proxy ["+this.proxyHost+"] on port ["+this.proxyPort+"]: " + this.buffer;
-                               this.dispatchEvent(ioError);
-                       }
-                       else
-                       {
-                               this.redirectSocketDataEvent();
-                               this.dispatchEvent(new Event(Event.CONNECT));
-                               if (this.bytesAvailable > 0)
-                               {
-                                       this.dispatchEvent(event);
-                               }
-                       }
-                       this.buffer = null;
-               }
-               
-               private function redirectConnectEvent():void
-               {
-                       super.removeEventListener(Event.CONNECT, onConnect);
-                       var deferredEventHandler:Object = this.deferredEventHandlers[Event.CONNECT];
-                       if (deferredEventHandler != null)
-                       {
-                               super.addEventListener(Event.CONNECT, deferredEventHandler.listener, deferredEventHandler.useCapture, deferredEventHandler.priority, deferredEventHandler.useWeakReference);                    
-                       }
-               }
-               
-               private function redirectSocketDataEvent():void
-               {
-                       super.removeEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
-                       var deferredEventHandler:Object = this.deferredEventHandlers[ProgressEvent.SOCKET_DATA];
-                       if (deferredEventHandler != null)
-                       {
-                               super.addEventListener(ProgressEvent.SOCKET_DATA, deferredEventHandler.listener, deferredEventHandler.useCapture, deferredEventHandler.priority, deferredEventHandler.useWeakReference);                        
-                       }
-               }
-               
-               public override function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int=0.0, useWeakReference:Boolean=false):void
-               {
-                       if (type == Event.CONNECT || type == ProgressEvent.SOCKET_DATA)
-                       {
-                               this.deferredEventHandlers[type] = {listener:listener,useCapture:useCapture, priority:priority, useWeakReference:useWeakReference};
-                       }
-                       else
-                       {
-                               super.addEventListener(type, listener, useCapture, priority, useWeakReference);
-                       }
-               }
-       }
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/gsolo/encryption/MD5.as
deleted file mode 100644 (file)
index e5d9c4a..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-package com.gsolo.encryption { \r
-       public class MD5 {\r
-               /*\r
-                * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\r
-                * Digest Algorithm, as defined in RFC 1321.\r
-                * Version 2.2-alpha Copyright (C) Paul Johnston 1999 - 2005\r
-                * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r
-                * Distributed under the BSD License\r
-                * See http://pajhome.org.uk/crypt/md5 for more info.\r
-                *\r
-                * Converted to AS3 By Geoffrey Williams\r
-                */\r
-               \r
-               /*\r
-                * Configurable variables. You may need to tweak these to be compatible with\r
-                * the server-side, but the defaults work in most cases.\r
-                */\r
-               \r
-               public static const HEX_FORMAT_LOWERCASE:uint = 0;\r
-               public static const HEX_FORMAT_UPPERCASE:uint = 1;\r
-                \r
-               public static const BASE64_PAD_CHARACTER_DEFAULT_COMPLIANCE:String = "";\r
-               public static const BASE64_PAD_CHARACTER_RFC_COMPLIANCE:String = "=";\r
-                \r
-               public static var hexcase:uint = 0;   /* hex output format. 0 - lowercase; 1 - uppercase        */\r
-               public static var b64pad:String  = ""; /* base-64 pad character. "=" for strict RFC compliance   */\r
-               \r
-               public static function encrypt (string:String):String {\r
-                       return hex_md5 (string);\r
-               }\r
-               \r
-               /*\r
-                * These are the functions you'll usually want to call\r
-                * They take string arguments and return either hex or base-64 encoded strings\r
-                */\r
-               public static function hex_md5 (string:String):String {\r
-                       return rstr2hex (rstr_md5 (str2rstr_utf8 (string)));\r
-               }\r
-               \r
-               public static function b64_md5 (string:String):String {\r
-                       return rstr2b64 (rstr_md5 (str2rstr_utf8 (string)));\r
-               }\r
-               \r
-               public static function any_md5 (string:String, encoding:String):String {\r
-                       return rstr2any (rstr_md5 (str2rstr_utf8 (string)), encoding);\r
-               }\r
-               public static function hex_hmac_md5 (key:String, data:String):String {\r
-                       return rstr2hex (rstr_hmac_md5 (str2rstr_utf8 (key), str2rstr_utf8 (data)));\r
-               }\r
-               public static function b64_hmac_md5 (key:String, data:String):String {\r
-                       return rstr2b64 (rstr_hmac_md5 (str2rstr_utf8 (key), str2rstr_utf8 (data)));\r
-               }\r
-               public static function any_hmac_md5 (key:String, data:String, encoding:String):String {\r
-                       return rstr2any(rstr_hmac_md5(str2rstr_utf8(key), str2rstr_utf8(data)), encoding);\r
-               }\r
-               \r
-               /*\r
-                * Perform a simple self-test to see if the VM is working\r
-                */\r
-               public static function md5_vm_test ():Boolean {\r
-                 return hex_md5 ("abc") == "900150983cd24fb0d6963f7d28e17f72";\r
-               }\r
-               \r
-               /*\r
-                * Calculate the MD5 of a raw string\r
-                */\r
-               public static function rstr_md5 (string:String):String {\r
-                 return binl2rstr (binl_md5 (rstr2binl (string), string.length * 8));\r
-               }\r
-               \r
-               /*\r
-                * Calculate the HMAC-MD5, of a key and some data (raw strings)\r
-                */\r
-               public static function rstr_hmac_md5 (key:String, data:String):String {\r
-                 var bkey:Array = rstr2binl (key);\r
-                 if (bkey.length > 16) bkey = binl_md5 (bkey, key.length * 8);\r
-               \r
-                 var ipad:Array = new Array(16), opad:Array = new Array(16);\r
-                 for(var i:Number = 0; i < 16; i++) {\r
-                   ipad[i] = bkey[i] ^ 0x36363636;\r
-                   opad[i] = bkey[i] ^ 0x5C5C5C5C;\r
-                 }\r
-               \r
-                 var hash:Array = binl_md5 (ipad.concat (rstr2binl (data)), 512 + data.length * 8);\r
-                 return binl2rstr (binl_md5 (opad.concat (hash), 512 + 128));\r
-               }\r
-               \r
-               /*\r
-                * Convert a raw string to a hex string\r
-                */\r
-               public static function rstr2hex (input:String):String {\r
-                 var hex_tab:String = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";\r
-                 var output:String = "";\r
-                 var x:Number;\r
-                 for(var i:Number = 0; i < input.length; i++) {\r
-                       x = input.charCodeAt(i);\r
-                   output += hex_tab.charAt((x >>> 4) & 0x0F)\r
-                          +  hex_tab.charAt( x        & 0x0F);\r
-                 }\r
-                 return output;\r
-               }\r
-               \r
-               /*\r
-                * Convert a raw string to a base-64 string\r
-                */\r
-               public static function rstr2b64 (input:String):String {\r
-                 var tab:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\r
-                 var output:String = "";\r
-                 var len:Number = input.length;\r
-                 for(var i:Number = 0; i < len; i += 3) {\r
-                   var triplet:Number = (input.charCodeAt(i) << 16)\r
-                               | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)\r
-                               | (i + 2 < len ? input.charCodeAt(i+2)      : 0);\r
-                   for(var j:Number = 0; j < 4; j++) {\r
-                     if(i * 8 + j * 6 > input.length * 8) output += b64pad;\r
-                     else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);\r
-                   }\r
-                 }\r
-                 return output;\r
-               }\r
-               \r
-               /*\r
-                * Convert a raw string to an arbitrary string encoding\r
-                */\r
-               public static function rstr2any(input:String, encoding:String):String {\r
-                 var divisor:Number = encoding.length;\r
-                 var remainders:Array = [];\r
-                 var i:Number, q:Number, x:Number, quotient:Array;\r
-               \r
-                 /* Convert to an array of 16-bit big-endian values, forming the dividend */\r
-                 var dividend:Array = new Array(input.length / 2);\r
-                 for(i = 0; i < dividend.length; i++) {\r
-                   dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);\r
-                 }\r
-               \r
-                 /*\r
-                  * Repeatedly perform a long division. The binary array forms the dividend,\r
-                  * the length of the encoding is the divisor. Once computed, the quotient\r
-                  * forms the dividend for the next step. We stop when the dividend is zero.\r
-                  * All remainders are stored for later use.\r
-                  */\r
-                 while(dividend.length > 0) {\r
-                   quotient = [];\r
-                   x = 0;\r
-                   for(i = 0; i < dividend.length; i++) {\r
-                     x = (x << 16) + dividend[i];\r
-                     q = Math.floor(x / divisor);\r
-                     x -= q * divisor;\r
-                     if(quotient.length > 0 || q > 0)\r
-                       quotient[quotient.length] = q;\r
-                   }\r
-                   remainders[remainders.length] = x;\r
-                   dividend = quotient;\r
-                 }\r
-               \r
-                 /* Convert the remainders to the output string */\r
-                 var output:String = "";\r
-                 for(i = remainders.length - 1; i >= 0; i--)\r
-                   output += encoding.charAt (remainders[i]);\r
-               \r
-                 return output;\r
-               }\r
-               \r
-               /*\r
-                * Encode a string as utf-8.\r
-                * For efficiency, this assumes the input is valid utf-16.\r
-                */\r
-               public static function str2rstr_utf8 (input:String):String {\r
-                 var output:String = "";\r
-                 var i:Number = -1;\r
-                 var x:Number, y:Number;\r
-               \r
-                 while(++i < input.length) {\r
-                   /* Decode utf-16 surrogate pairs */\r
-                   x = input.charCodeAt(i);\r
-                   y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;\r
-                   if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {\r
-                     x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);\r
-                     i++;\r
-                   }\r
-               \r
-                   /* Encode output as utf-8 */\r
-                   if(x <= 0x7F)\r
-                     output += String.fromCharCode(x);\r
-                   else if(x <= 0x7FF)\r
-                     output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),\r
-                                                   0x80 | ( x         & 0x3F));\r
-                   else if(x <= 0xFFFF)\r
-                     output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),\r
-                                                   0x80 | ((x >>> 6 ) & 0x3F),\r
-                                                   0x80 | ( x         & 0x3F));\r
-                   else if(x <= 0x1FFFFF)\r
-                     output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),\r
-                                                   0x80 | ((x >>> 12) & 0x3F),\r
-                                                   0x80 | ((x >>> 6 ) & 0x3F),\r
-                                                   0x80 | ( x         & 0x3F));\r
-                 }\r
-                 return output;\r
-               }\r
-               \r
-               /*\r
-                * Encode a string as utf-16\r
-                */\r
-               public static function str2rstr_utf16le (input:String):String {\r
-                 var output:String = "";\r
-                 for(var i:Number = 0; i < input.length; i++)\r
-                   output += String.fromCharCode( input.charCodeAt(i)        & 0xFF,\r
-                                                 (input.charCodeAt(i) >>> 8) & 0xFF);\r
-                 return output;\r
-               }\r
-               \r
-               public static function str2rstr_utf16be (input:String):String {\r
-                 var output:String = "";\r
-                 for(var i:Number = 0; i < input.length; i++)\r
-                   output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,\r
-                                                  input.charCodeAt(i)        & 0xFF);\r
-                 return output;\r
-               }\r
-               \r
-               /*\r
-                * Convert a raw string to an array of little-endian words\r
-                * Characters >255 have their high-byte silently ignored.\r
-                */\r
-               public static function rstr2binl (input:String):Array {\r
-                 var output:Array = new Array(input.length >> 2);\r
-                 for(var i:Number = 0; i < output.length; i++)\r
-                   output[i] = 0;\r
-                 for(i = 0; i < input.length * 8; i += 8)\r
-                   output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);\r
-                 return output;\r
-               }\r
-               \r
-               /*\r
-                * Convert an array of little-endian words to a string\r
-                */\r
-               public static function binl2rstr (input:Array):String {\r
-                 var output:String = "";\r
-                 for(var i:Number = 0; i < input.length * 32; i += 8)\r
-                   output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF);\r
-                 return output;\r
-               }\r
-               \r
-               /*\r
-                * Calculate the MD5 of an array of little-endian words, and a bit length.\r
-                */\r
-               public static function binl_md5 (x:Array, len:Number):Array {\r
-                 /* append padding */\r
-                 x[len >> 5] |= 0x80 << ((len) % 32);\r
-                 x[(((len + 64) >>> 9) << 4) + 14] = len;\r
-               \r
-                 var a:Number =  1732584193;\r
-                 var b:Number = -271733879;\r
-                 var c:Number = -1732584194;\r
-                 var d:Number =  271733878;\r
-               \r
-                 for(var i:Number = 0; i < x.length; i += 16) {\r
-                   var olda:Number = a;\r
-                   var oldb:Number = b;\r
-                   var oldc:Number = c;\r
-                   var oldd:Number = d;\r
-               \r
-                   a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);\r
-                   d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);\r
-                   c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);\r
-                   b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);\r
-                   a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);\r
-                   d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);\r
-                   c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);\r
-                   b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);\r
-                   a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);\r
-                   d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);\r
-                   c = md5_ff(c, d, a, b, x[i+10], 17, -42063);\r
-                   b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);\r
-                   a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);\r
-                   d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);\r
-                   c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);\r
-                   b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);\r
-               \r
-                   a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);\r
-                   d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);\r
-                   c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);\r
-                   b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);\r
-                   a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);\r
-                   d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);\r
-                   c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);\r
-                   b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);\r
-                   a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);\r
-                   d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);\r
-                   c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);\r
-                   b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);\r
-                   a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);\r
-                   d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);\r
-                   c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);\r
-                   b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);\r
-               \r
-                   a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);\r
-                   d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);\r
-                   c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);\r
-                   b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);\r
-                   a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);\r
-                   d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);\r
-                   c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);\r
-                   b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);\r
-                   a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);\r
-                   d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);\r
-                   c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);\r
-                   b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);\r
-                   a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);\r
-                   d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);\r
-                   c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);\r
-                   b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);\r
-               \r
-                   a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);\r
-                   d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);\r
-                   c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);\r
-                   b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);\r
-                   a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);\r
-                   d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);\r
-                   c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);\r
-                   b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);\r
-                   a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);\r
-                   d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);\r
-                   c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);\r
-                   b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);\r
-                   a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);\r
-                   d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);\r
-                   c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);\r
-                   b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);\r
-               \r
-                   a = safe_add(a, olda);\r
-                   b = safe_add(b, oldb);\r
-                   c = safe_add(c, oldc);\r
-                   d = safe_add(d, oldd);\r
-                 }\r
-                 return [a, b, c, d];\r
-               }\r
-               \r
-               /*\r
-                * These functions implement the four basic operations the algorithm uses.\r
-                */\r
-               public static function md5_cmn (q:Number, a:Number, b:Number, x:Number, s:Number, t:Number):Number {\r
-                 return safe_add (bit_rol (safe_add (safe_add (a, q), safe_add(x, t)), s), b);\r
-               }\r
-               public static function md5_ff (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number {\r
-                 return md5_cmn ((b & c) | ((~b) & d), a, b, x, s, t);\r
-               }\r
-               public static function md5_gg (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number {\r
-                 return md5_cmn ((b & d) | (c & (~d)), a, b, x, s, t);\r
-               }\r
-               public static function md5_hh (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number {\r
-                 return md5_cmn (b ^ c ^ d, a, b, x, s, t);\r
-               }\r
-               public static function md5_ii (a:Number, b:Number, c:Number, d:Number, x:Number, s:Number, t:Number):Number {\r
-                 return md5_cmn (c ^ (b | (~d)), a, b, x, s, t);\r
-               }\r
-               \r
-               /*\r
-                * Add integers, wrapping at 2^32. This uses 16-bit operations internally\r
-                * to work around bugs in some JS interpreters.\r
-                */\r
-               public static function safe_add (x:Number, y:Number):Number {\r
-                 var lsw:Number = (x & 0xFFFF) + (y & 0xFFFF);\r
-                 var msw:Number = (x >> 16) + (y >> 16) + (lsw >> 16);\r
-                 return (msw << 16) | (lsw & 0xFFFF);\r
-               }\r
-               \r
-               /*\r
-                * Bitwise rotate a 32-bit number to the left.\r
-                */\r
-               public static function bit_rol (num:Number, cnt:Number):Number {\r
-                 return (num << cnt) | (num >>> (32 - cnt));\r
-               }\r
-                               \r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/Crypto.as
deleted file mode 100644 (file)
index 32ec97a..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-/**\r
- * Crypto\r
- * \r
- * An abstraction layer to instanciate our crypto algorithms\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto\r
-{\r
-       import com.hurlant.crypto.hash.HMAC;\r
-       import com.hurlant.crypto.hash.MAC;\r
-       import com.hurlant.crypto.hash.IHash;\r
-       import com.hurlant.crypto.hash.MD2;\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.crypto.hash.SHA1;\r
-       import com.hurlant.crypto.hash.SHA224;\r
-       import com.hurlant.crypto.hash.SHA256;\r
-       import com.hurlant.crypto.prng.ARC4;\r
-       import com.hurlant.crypto.rsa.RSAKey;\r
-       import com.hurlant.crypto.symmetric.AESKey;\r
-       import com.hurlant.crypto.symmetric.BlowFishKey;\r
-       import com.hurlant.crypto.symmetric.CBCMode;\r
-       import com.hurlant.crypto.symmetric.CFB8Mode;\r
-       import com.hurlant.crypto.symmetric.CFBMode;\r
-       import com.hurlant.crypto.symmetric.CTRMode;\r
-       import com.hurlant.crypto.symmetric.DESKey;\r
-       import com.hurlant.crypto.symmetric.ECBMode;\r
-       import com.hurlant.crypto.symmetric.ICipher;\r
-       import com.hurlant.crypto.symmetric.IMode;\r
-       import com.hurlant.crypto.symmetric.IPad;\r
-       import com.hurlant.crypto.symmetric.ISymmetricKey;\r
-       import com.hurlant.crypto.symmetric.IVMode;\r
-       import com.hurlant.crypto.symmetric.NullPad;\r
-       import com.hurlant.crypto.symmetric.OFBMode;\r
-       import com.hurlant.crypto.symmetric.PKCS5;\r
-       import com.hurlant.crypto.symmetric.SimpleIVMode;\r
-       import com.hurlant.crypto.symmetric.TripleDESKey;\r
-       import com.hurlant.crypto.symmetric.XTeaKey;\r
-       import com.hurlant.util.Base64;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       /**\r
-        * A class to make it easy to use the rest of the framework.\r
-        * As a side-effect, using this class will cause most of the framework\r
-        * to be linked into your application, which is not always what you want.\r
-        * \r
-        * If you want to optimize your download size, don't use this class.\r
-        * (But feel free to read it to get ideas on how to get the algorithm you want.)\r
-        */\r
-       public class Crypto\r
-       {\r
-               private var b64:Base64; // we don't use it, but we want the swc to include it, so cheap trick.\r
-               \r
-               public function Crypto(){\r
-               }\r
-               \r
-               /**\r
-                * Things that should work, among others:\r
-                *  "aes"\r
-                *  "aes-128-ecb"\r
-                *  "aes-128-cbc"\r
-                *  "aes-128-cfb"\r
-                *  "aes-128-cfb8"\r
-                *  "aes-128-ofb"\r
-                *  "aes-192-cfb"\r
-                *  "aes-256-ofb"\r
-                *  "blowfish-cbc"\r
-                *  "des-ecb"\r
-                *  "xtea"\r
-                *  "xtea-ecb"\r
-                *  "xtea-cbc"\r
-                *  "xtea-cfb"\r
-                *  "xtea-cfb8"\r
-                *  "xtea-ofb"\r
-                *  "rc4"\r
-                *  "simple-aes-cbc"\r
-                */\r
-               public static function getCipher(name:String, key:ByteArray, pad:IPad=null):ICipher {\r
-                       // split name into an array.\r
-                       var keys:Array = name.split("-");\r
-                       switch (keys[0]) {\r
-                               /**\r
-                                * "simple" is a special case. It means:\r
-                                * "If using an IV mode, prepend the IV to the ciphertext"\r
-                                */\r
-                               case "simple":\r
-                                       keys.shift();\r
-                                       name = keys.join("-");\r
-                                       var cipher:ICipher = getCipher(name, key, pad);\r
-                                       if (cipher is IVMode) {\r
-                                               return new SimpleIVMode(cipher as IVMode);\r
-                                       } else {\r
-                                               return cipher;\r
-                                       }\r
-                               /**\r
-                                * we support both "aes-128" and "aes128"\r
-                                * Technically, you could use "aes192-128", but you'd\r
-                                * only be hurting yourself.\r
-                                */\r
-                               case "aes":\r
-                               case "aes128":\r
-                               case "aes192":\r
-                               case "aes256":\r
-                                       keys.shift();\r
-                                       if (key.length*8==keys[0]) {\r
-                                               // support for "aes-128-..." and such.\r
-                                               keys.shift();\r
-                                       }\r
-                                       return getMode(keys[0], new AESKey(key), pad);\r
-                               break;\r
-                               case "bf":\r
-                               case "blowfish":\r
-                                       keys.shift();\r
-                                       return getMode(keys[0], new BlowFishKey(key), pad);\r
-                               /**\r
-                                * des-ede and des-ede3 are both equivalent to des3.\r
-                                * the choice between 2tdes and 3tdes is made based\r
-                                * on the length of the key provided.\r
-                                */\r
-                               case "des":\r
-                                       keys.shift();\r
-                                       if (keys[0]!="ede" && keys[0]!="ede3") {\r
-                                               return getMode(keys[0], new DESKey(key), pad);\r
-                                       }\r
-                                       if (keys.length==1) {\r
-                                               keys.push("ecb"); // default mode for 2tdes and 3tdes with openssl enc\r
-                                       }\r
-                                       // fall-through to triple des\r
-                               case "3des":\r
-                               case "des3":\r
-                                       keys.shift();\r
-                                       return getMode(keys[0], new TripleDESKey(key), pad);\r
-                               case "xtea":\r
-                                       keys.shift();\r
-                                       return getMode(keys[0], new XTeaKey(key), pad);\r
-                               break;\r
-                               /**\r
-                                * Technically, you could say "rc4-128" or whatever,\r
-                                * but really, the length of the key is what counts here.\r
-                                */\r
-                               case "rc4":\r
-                                       keys.shift();\r
-                                       return new ARC4(key);\r
-                               break;\r
-                       }\r
-                       return null;\r
-               }\r
-               \r
-               /**\r
-                * Returns the size of a key for a given cipher identifier.\r
-                */\r
-               public static function getKeySize(name:String):uint {\r
-                       var keys:Array = name.split("-");\r
-                       switch (keys[0]) {\r
-                               case "simple":\r
-                                       keys.shift();\r
-                                       return getKeySize(keys.join("-"));\r
-                               case "aes128":\r
-                                       return 16;\r
-                               case "aes192":\r
-                                       return 24;\r
-                               case "aes256":\r
-                                       return 32;\r
-                               case "aes":\r
-                                       keys.shift();\r
-                                       return parseInt(keys[0])/8;\r
-                               case "bf":\r
-                               case "blowfish":\r
-                                       return 16;\r
-                               case "des":\r
-                                       keys.shift();\r
-                                       switch (keys[0]) {\r
-                                               case "ede":\r
-                                                       return 16;\r
-                                               case "ede3":\r
-                                                       return 24;\r
-                                               default:\r
-                                                       return 8;\r
-                                       }\r
-                               case "3des":\r
-                               case "des3":\r
-                                       return 24;\r
-                               case "xtea":\r
-                                       return 8;\r
-                               case "rc4":\r
-                                       if (parseInt(keys[1])>0) {\r
-                                               return parseInt(keys[1])/8;\r
-                                       }\r
-                                       return 16; // why not.\r
-                       }\r
-                       return 0; // unknown;\r
-               }\r
-               \r
-               private static function getMode(name:String, alg:ISymmetricKey, padding:IPad=null):IMode {\r
-                       switch (name) {\r
-                               case "ecb":\r
-                                       return new ECBMode(alg, padding);\r
-                               case "cfb":\r
-                                       return new CFBMode(alg, padding);\r
-                               case "cfb8":\r
-                                       return new CFB8Mode(alg, padding);\r
-                               case "ofb":\r
-                                       return new OFBMode(alg, padding);\r
-                               case "ctr":\r
-                                       return new CTRMode(alg, padding);\r
-                               case "cbc":\r
-                               default:\r
-                                       return new CBCMode(alg, padding);\r
-                       }\r
-               }\r
-               \r
-               /**\r
-                * Things that should work:\r
-                * "md5"\r
-                * "sha"\r
-                * "sha1"\r
-                * "sha224"\r
-                * "sha256"\r
-                */\r
-               public static function getHash(name:String):IHash {\r
-                       switch(name) {\r
-                               case "md2":\r
-                                       return new MD2;\r
-                               case "md5":\r
-                                       return new MD5;\r
-                               case "sha": // let's hope you didn't mean sha-0\r
-                               case "sha1":\r
-                                       return new SHA1;\r
-                               case "sha224":\r
-                                       return new SHA224;\r
-                               case "sha256":\r
-                                       return new SHA256;\r
-                       }\r
-                       return null;\r
-               }\r
-               \r
-               /**\r
-                * Things that should work:\r
-                * "sha1"\r
-                * "md5-64"\r
-                * "hmac-md5-96"\r
-                * "hmac-sha1-128"\r
-                * "hmac-sha256-192"\r
-                * etc.\r
-                */\r
-               public static function getHMAC(name:String):HMAC {\r
-                       var keys:Array = name.split("-");\r
-                       if (keys[0]=="hmac") keys.shift();\r
-                       var bits:uint = 0;\r
-                       if (keys.length>1) {\r
-                               bits = parseInt(keys[1]);\r
-                       }\r
-                       return new HMAC(getHash(keys[0]), bits);\r
-               }\r
-               \r
-\r
-               public static function getMAC(name:String):MAC {\r
-                       \r
-                       var keys:Array = name.split("-");\r
-                       if (keys[0]=="mac") keys.shift();\r
-                       var bits:uint = 0;\r
-                       if (keys.length > 1) {\r
-                               bits = parseInt(keys[1]);\r
-                       }\r
-                       return new MAC(getHash(keys[0]), bits);\r
-               }\r
-                               \r
-               \r
-               public static function getPad(name:String):IPad {\r
-                       switch(name) {\r
-                               case "null":\r
-                                       return new NullPad;\r
-                               case "pkcs5":\r
-                               default:\r
-                                       return new PKCS5;\r
-                       }\r
-               }\r
-               \r
-               /** mostly useless.\r
-                */\r
-               public static function getRSA(E:String, M:String):RSAKey {\r
-                       return RSAKey.parsePublicKey(M,E);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/MozillaRootCertificates.as
deleted file mode 100755 (executable)
index cc2e269..0000000
+++ /dev/null
@@ -1,3235 +0,0 @@
-/* THIS IS A GENERATED FILE */
-/**
- * MozillaRootCertificates
- *
- * A list of built-in Certificate Authorities,
- * pilfered from Mozilla. 
- *
- * See certs/tool/grabRootCAs.pl for details.
- * 
- * Copyright (c) 2007 Henri Torgemane
- * 
- * See LICENSE.txt for full license information.
- */
-package com.hurlant.crypto.cert {
-       public class MozillaRootCertificates extends X509CertificateCollection {
-               public function MozillaRootCertificates() {
-                       super.addPEMCertificate("Verisign/RSA Secure Server CA",
-                               // X500 Subject, for lookups.
-                               "MF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UE"+
-                               "CxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG\n"+
-                               "A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD\n"+
-                               "VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0\n"+
-                               "MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV\n"+
-                               "BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy\n"+
-                               "dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ\n"+
-                               "ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII\n"+
-                               "0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI\n"+
-                               "uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI\n"+
-                               "hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3\n"+
-                               "YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc\n"+
-                               "1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("GTE CyberTrust Root CA",
-                               // X500 Subject, for lookups.
-                               "MEUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBD"+
-                               "eWJlclRydXN0IFJvb3Q=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD\n"+
-                               "VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv\n"+
-                               "b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV\n"+
-                               "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU\n"+
-                               "cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv\n"+
-                               "RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M\n"+
-                               "ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5\n"+
-                               "1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz\n"+
-                               "dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl\n"+
-                               "IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy\n"+
-                               "bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("GTE CyberTrust Global Root",
-                               // X500 Subject, for lookups.
-                               "MHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBD"+
-                               "eWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFs"+
-                               "IFJvb3Q=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD\n"+
-                               "VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv\n"+
-                               "bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv\n"+
-                               "b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV\n"+
-                               "UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU\n"+
-                               "cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds\n"+
-                               "b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH\n"+
-                               "iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS\n"+
-                               "r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4\n"+
-                               "04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r\n"+
-                               "GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9\n"+
-                               "3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P\n"+
-                               "lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Thawte Personal Basic CA",
-                               // X500 Subject, for lookups.
-                               "MIHLMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+
-                               "d24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl"+
-                               "cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUGVyc29uYWwgQmFzaWMgQ0ExKDAmBgkq"+
-                               "hkiG9w0BCQEWGXBlcnNvbmFsLWJhc2ljQHRoYXd0ZS5jb20=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx\n"+
-                               "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD\n"+
-                               "VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT\n"+
-                               "ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj\n"+
-                               "IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X\n"+
-                               "DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw\n"+
-                               "EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE\n"+
-                               "ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy\n"+
-                               "dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD\n"+
-                               "QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN\n"+
-                               "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53\n"+
-                               "dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK\n"+
-                               "wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7\n"+
-                               "G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF\n"+
-                               "AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7\n"+
-                               "c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P\n"+
-                               "9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Thawte Personal Premium CA",
-                               // X500 Subject, for lookups.
-                               "MIHPMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+
-                               "d24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl"+
-                               "cnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgG"+
-                               "CSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29t",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx\n"+
-                               "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD\n"+
-                               "VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT\n"+
-                               "ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p\n"+
-                               "dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv\n"+
-                               "bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa\n"+
-                               "QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY\n"+
-                               "BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u\n"+
-                               "IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl\n"+
-                               "bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu\n"+
-                               "Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs\n"+
-                               "Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI\n"+
-                               "Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD\n"+
-                               "ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG\n"+
-                               "SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH\n"+
-                               "b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh\n"+
-                               "KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Thawte Personal Freemail CA",
-                               // X500 Subject, for lookups.
-                               "MIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+
-                               "d24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl"+
-                               "cnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgQ0ExKzAp"+
-                               "BgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx\n"+
-                               "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD\n"+
-                               "VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT\n"+
-                               "ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt\n"+
-                               "YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu\n"+
-                               "Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT\n"+
-                               "AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa\n"+
-                               "MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp\n"+
-                               "b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG\n"+
-                               "cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh\n"+
-                               "d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY\n"+
-                               "DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E\n"+
-                               "rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq\n"+
-                               "uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN\n"+
-                               "BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP\n"+
-                               "MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa\n"+
-                               "/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei\n"+
-                               "gQ==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Thawte Server CA",
-                               // X500 Subject, for lookups.
-                               "MIHEMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+
-                               "d24xHTAbBgNVBAoTFFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u"+
-                               "IFNlcnZpY2VzIERpdmlzaW9uMRkwFwYDVQQDExBUaGF3dGUgU2VydmVyIENBMSYwJAYJKoZIhvcN"+
-                               "AQkBFhdzZXJ2ZXItY2VydHNAdGhhd3RlLmNvbQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx\n"+
-                               "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD\n"+
-                               "VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv\n"+
-                               "biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm\n"+
-                               "MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx\n"+
-                               "MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT\n"+
-                               "DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3\n"+
-                               "dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl\n"+
-                               "cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3\n"+
-                               "DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD\n"+
-                               "gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91\n"+
-                               "yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX\n"+
-                               "L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj\n"+
-                               "EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG\n"+
-                               "7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e\n"+
-                               "QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ\n"+
-                               "qdq5snUb9kLy78fyGPmJvKP/iiMucEc=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Thawte Premium Server CA",
-                               // X500 Subject, for lookups.
-                               "MIHOMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRv"+
-                               "d24xHTAbBgNVBAoTFFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u"+
-                               "IFNlcnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIgQ0ExKDAm"+
-                               "BgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx\n"+
-                               "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD\n"+
-                               "VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv\n"+
-                               "biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy\n"+
-                               "dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t\n"+
-                               "MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB\n"+
-                               "MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG\n"+
-                               "A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp\n"+
-                               "b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl\n"+
-                               "cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv\n"+
-                               "bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE\n"+
-                               "VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ\n"+
-                               "ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR\n"+
-                               "uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG\n"+
-                               "9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI\n"+
-                               "hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM\n"+
-                               "pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Equifax Secure CA",
-                               // X500 Subject, for lookups.
-                               "ME4xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3Vy"+
-                               "ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHk=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV\n"+
-                               "UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy\n"+
-                               "dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1\n"+
-                               "MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx\n"+
-                               "dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B\n"+
-                               "AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f\n"+
-                               "BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A\n"+
-                               "cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC\n"+
-                               "AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ\n"+
-                               "MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm\n"+
-                               "aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw\n"+
-                               "ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj\n"+
-                               "IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF\n"+
-                               "MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA\n"+
-                               "A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y\n"+
-                               "7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh\n"+
-                               "1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("ABAecom (sub., Am. Bankers Assn.) Root CA",
-                               // X500 Subject, for lookups.
-                               "MIGJMQswCQYDVQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNV"+
-                               "BAoTDkFCQS5FQ09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcN"+
-                               "AQkBFhVhZG1pbkBkaWdzaWd0cnVzdC5jb20=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw\n"+
-                               "gYkxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3Rv\n"+
-                               "bjEXMBUGA1UEChMOQUJBLkVDT00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJv\n"+
-                               "b3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWluQGRpZ3NpZ3RydXN0LmNvbTAeFw05\n"+
-                               "OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYDVQQGEwJVUzELMAkG\n"+
-                               "A1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5FQ09N\n"+
-                               "LCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkB\n"+
-                               "FhVhZG1pbkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\n"+
-                               "ggEKAoIBAQCx0xHgeVVDBwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM\n"+
-                               "0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1jVv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFG\n"+
-                               "PR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNfWiKX7BmbwQVo/ea3qZGU\n"+
-                               "LOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtxA6k4ShZs\n"+
-                               "iSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU\n"+
-                               "+/94Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYB\n"+
-                               "Af8CAQgwDQYJKoZIhvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0k\n"+
-                               "qS8Kfv2kRLD4VAe9G52dyntQJHsRW0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOir\n"+
-                               "vRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJhkoHWG9YA8A6eKHegTYjHInYZ\n"+
-                               "w8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm/lowdiT/QHI8\n"+
-                               "eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/\n"+
-                               "O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Digital Signature Trust Co. Global CA 1",
-                               // X500 Subject, for lookups.
-                               "MEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xETAP"+
-                               "BgNVBAsTCERTVENBIEUx",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV\n"+
-                               "UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL\n"+
-                               "EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ\n"+
-                               "BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x\n"+
-                               "ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg\n"+
-                               "bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ\n"+
-                               "j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV\n"+
-                               "Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG\n"+
-                               "SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx\n"+
-                               "JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI\n"+
-                               "RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw\n"+
-                               "MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5\n"+
-                               "fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i\n"+
-                               "+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG\n"+
-                               "SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN\n"+
-                               "QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+\n"+
-                               "gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Digital Signature Trust Co. Global CA 3",
-                               // X500 Subject, for lookups.
-                               "MEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xETAP"+
-                               "BgNVBAsTCERTVENBIEUy",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV\n"+
-                               "UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL\n"+
-                               "EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ\n"+
-                               "BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x\n"+
-                               "ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/\n"+
-                               "k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso\n"+
-                               "LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o\n"+
-                               "TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG\n"+
-                               "SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx\n"+
-                               "JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI\n"+
-                               "RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3\n"+
-                               "MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C\n"+
-                               "TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5\n"+
-                               "WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG\n"+
-                               "SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR\n"+
-                               "xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL\n"+
-                               "B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Digital Signature Trust Co. Global CA 2",
-                               // X500 Subject, for lookups.
-                               "MIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx"+
-                               "JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDEx"+
-                               "FjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNv"+
-                               "bQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw\n"+
-                               "CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp\n"+
-                               "dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE\n"+
-                               "CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B\n"+
-                               "CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx\n"+
-                               "ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO\n"+
-                               "U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0\n"+
-                               "IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx\n"+
-                               "ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN\n"+
-                               "AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf\n"+
-                               "WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK\n"+
-                               "xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE\n"+
-                               "zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F\n"+
-                               "5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv\n"+
-                               "OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG\n"+
-                               "9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz\n"+
-                               "ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME\n"+
-                               "lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG\n"+
-                               "Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q\n"+
-                               "gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k\n"+
-                               "Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Digital Signature Trust Co. Global CA 4",
-                               // X500 Subject, for lookups.
-                               "MIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx"+
-                               "JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIx"+
-                               "FjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNv"+
-                               "bQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw\n"+
-                               "CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp\n"+
-                               "dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE\n"+
-                               "CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B\n"+
-                               "CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy\n"+
-                               "MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO\n"+
-                               "U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0\n"+
-                               "IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx\n"+
-                               "ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN\n"+
-                               "AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV\n"+
-                               "p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw\n"+
-                               "BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl\n"+
-                               "5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi\n"+
-                               "3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+\n"+
-                               "QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG\n"+
-                               "9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ\n"+
-                               "2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN\n"+
-                               "I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL\n"+
-                               "553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q\n"+
-                               "10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN\n"+
-                               "uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 1 Public Primary Certification Authority",
-                               // X500 Subject, for lookups.
-                               "MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg"+
-                               "MSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ\n"+
-                               "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh\n"+
-                               "c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05\n"+
-                               "NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD\n"+
-                               "VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp\n"+
-                               "bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB\n"+
-                               "jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N\n"+
-                               "H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR\n"+
-                               "4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN\n"+
-                               "BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo\n"+
-                               "EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5\n"+
-                               "FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx\n"+
-                               "lA==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 2 Public Primary Certification Authority",
-                               // X500 Subject, for lookups.
-                               "MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg"+
-                               "MiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG\n"+
-                               "A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz\n"+
-                               "cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2\n"+
-                               "MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV\n"+
-                               "BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt\n"+
-                               "YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN\n"+
-                               "ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh\n"+
-                               "YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7\n"+
-                               "FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G\n"+
-                               "CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg\n"+
-                               "J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc\n"+
-                               "r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 3 Public Primary Certification Authority",
-                               // X500 Subject, for lookups.
-                               "MF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3Mg"+
-                               "MyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG\n"+
-                               "A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz\n"+
-                               "cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2\n"+
-                               "MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV\n"+
-                               "BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt\n"+
-                               "YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN\n"+
-                               "ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE\n"+
-                               "BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is\n"+
-                               "I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G\n"+
-                               "CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do\n"+
-                               "lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc\n"+
-                               "AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 1 Public Primary Certification Authority - G2",
-                               // X500 Subject, for lookups.
-                               "MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNz"+
-                               "IDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx"+
-                               "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UE"+
-                               "CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ\n"+
-                               "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh\n"+
-                               "c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy\n"+
-                               "MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp\n"+
-                               "emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X\n"+
-                               "DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw\n"+
-                               "FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg\n"+
-                               "UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo\n"+
-                               "YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5\n"+
-                               "MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB\n"+
-                               "AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK\n"+
-                               "VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm\n"+
-                               "Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID\n"+
-                               "AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J\n"+
-                               "h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul\n"+
-                               "uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68\n"+
-                               "DzFc6PLZ\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 2 Public Primary Certification Authority - G2",
-                               // X500 Subject, for lookups.
-                               "MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNz"+
-                               "IDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx"+
-                               "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UE"+
-                               "CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw\n"+
-                               "CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns\n"+
-                               "YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH\n"+
-                               "MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y\n"+
-                               "aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe\n"+
-                               "Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX\n"+
-                               "MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj\n"+
-                               "IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx\n"+
-                               "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s\n"+
-                               "eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B\n"+
-                               "AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM\n"+
-                               "HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw\n"+
-                               "DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC\n"+
-                               "AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji\n"+
-                               "nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX\n"+
-                               "rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn\n"+
-                               "jBJ7xUS0rg==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 3 Public Primary Certification Authority - G2",
-                               // X500 Subject, for lookups.
-                               "MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNz"+
-                               "IDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx"+
-                               "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UE"+
-                               "CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ\n"+
-                               "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh\n"+
-                               "c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy\n"+
-                               "MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp\n"+
-                               "emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X\n"+
-                               "DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw\n"+
-                               "FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg\n"+
-                               "UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo\n"+
-                               "YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5\n"+
-                               "MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB\n"+
-                               "AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4\n"+
-                               "pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0\n"+
-                               "13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID\n"+
-                               "AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk\n"+
-                               "U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i\n"+
-                               "F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY\n"+
-                               "oJ2daZH9\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 4 Public Primary Certification Authority - G2",
-                               // X500 Subject, for lookups.
-                               "MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNz"+
-                               "IDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx"+
-                               "KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UE"+
-                               "CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yaw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ\n"+
-                               "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh\n"+
-                               "c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy\n"+
-                               "MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp\n"+
-                               "emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X\n"+
-                               "DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw\n"+
-                               "FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg\n"+
-                               "UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo\n"+
-                               "YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5\n"+
-                               "MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB\n"+
-                               "AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM\n"+
-                               "HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK\n"+
-                               "qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID\n"+
-                               "AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj\n"+
-                               "cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y\n"+
-                               "cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP\n"+
-                               "T8qAkbYp\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("GlobalSign Root CA",
-                               // X500 Subject, for lookups.
-                               "MFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290"+
-                               "IENBMRswGQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0E=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG\n"+
-                               "A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\n"+
-                               "b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw\n"+
-                               "MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i\n"+
-                               "YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT\n"+
-                               "aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ\n"+
-                               "jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp\n"+
-                               "xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp\n"+
-                               "1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG\n"+
-                               "snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ\n"+
-                               "U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8\n"+
-                               "9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU\n"+
-                               "YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B\n"+
-                               "AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7\n"+
-                               "5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q\n"+
-                               "gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR\n"+
-                               "rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7\n"+
-                               "ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o\n"+
-                               "Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("GlobalSign Root CA - R2",
-                               // X500 Subject, for lookups.
-                               "MEwxIDAeBgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFIyMRMwEQYDVQQKEwpHbG9iYWxTaWdu"+
-                               "MRMwEQYDVQQDEwpHbG9iYWxTaWdu",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G\n"+
-                               "A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp\n"+
-                               "Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1\n"+
-                               "MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG\n"+
-                               "A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\n"+
-                               "hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL\n"+
-                               "v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8\n"+
-                               "eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq\n"+
-                               "tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd\n"+
-                               "C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa\n"+
-                               "zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB\n"+
-                               "mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH\n"+
-                               "V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n\n"+
-                               "bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG\n"+
-                               "3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs\n"+
-                               "J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO\n"+
-                               "291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS\n"+
-                               "ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd\n"+
-                               "AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\n"+
-                               "TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("ValiCert Class 1 VA",
-                               // X500 Subject, for lookups.
-                               "MIG7MSQwIgYDVQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD"+
-                               "ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAxIFBvbGljeSBWYWxpZGF0aW9uIEF1"+
-                               "dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5jb20vMSAwHgYJKoZIhvcNAQkB"+
-                               "FhFpbmZvQHZhbGljZXJ0LmNvbQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\n"+
-                               "IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\n"+
-                               "BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\n"+
-                               "aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\n"+
-                               "9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy\n"+
-                               "NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\n"+
-                               "azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\n"+
-                               "YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\n"+
-                               "Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\n"+
-                               "cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y\n"+
-                               "LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+\n"+
-                               "TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y\n"+
-                               "TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0\n"+
-                               "LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW\n"+
-                               "I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw\n"+
-                               "nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("ValiCert Class 2 VA",
-                               // X500 Subject, for lookups.
-                               "MIG7MSQwIgYDVQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD"+
-                               "ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAyIFBvbGljeSBWYWxpZGF0aW9uIEF1"+
-                               "dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5jb20vMSAwHgYJKoZIhvcNAQkB"+
-                               "FhFpbmZvQHZhbGljZXJ0LmNvbQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\n"+
-                               "IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\n"+
-                               "BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\n"+
-                               "aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\n"+
-                               "9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy\n"+
-                               "NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\n"+
-                               "azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\n"+
-                               "YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\n"+
-                               "Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\n"+
-                               "cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY\n"+
-                               "dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9\n"+
-                               "WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS\n"+
-                               "v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v\n"+
-                               "UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu\n"+
-                               "IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC\n"+
-                               "W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("RSA Root Certificate 1",
-                               // X500 Subject, for lookups.
-                               "MIG7MSQwIgYDVQQHExtWYWxpQ2VydCBWYWxpZGF0aW9uIE5ldHdvcmsxFzAVBgNVBAoTDlZhbGlD"+
-                               "ZXJ0LCBJbmMuMTUwMwYDVQQLEyxWYWxpQ2VydCBDbGFzcyAzIFBvbGljeSBWYWxpZGF0aW9uIEF1"+
-                               "dGhvcml0eTEhMB8GA1UEAxMYaHR0cDovL3d3dy52YWxpY2VydC5jb20vMSAwHgYJKoZIhvcNAQkB"+
-                               "FhFpbmZvQHZhbGljZXJ0LmNvbQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\n"+
-                               "IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\n"+
-                               "BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\n"+
-                               "aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\n"+
-                               "9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy\n"+
-                               "NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\n"+
-                               "azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\n"+
-                               "YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\n"+
-                               "Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\n"+
-                               "cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD\n"+
-                               "cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs\n"+
-                               "2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY\n"+
-                               "JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE\n"+
-                               "Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ\n"+
-                               "n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A\n"+
-                               "PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 1 Public Primary Certification Authority - G3",
-                               // X500 Subject, for lookups.
-                               "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT"+
-                               "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9y"+
-                               "IGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFBy"+
-                               "aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw\n"+
-                               "CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl\n"+
-                               "cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu\n"+
-                               "LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT\n"+
-                               "aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n"+
-                               "dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD\n"+
-                               "VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT\n"+
-                               "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ\n"+
-                               "bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu\n"+
-                               "IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg\n"+
-                               "LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4\n"+
-                               "nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO\n"+
-                               "8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV\n"+
-                               "ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb\n"+
-                               "PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2\n"+
-                               "6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr\n"+
-                               "n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a\n"+
-                               "qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4\n"+
-                               "wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3\n"+
-                               "ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs\n"+
-                               "pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4\n"+
-                               "E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 2 Public Primary Certification Authority - G3",
-                               // X500 Subject, for lookups.
-                               "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT"+
-                               "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9y"+
-                               "IGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDIgUHVibGljIFBy"+
-                               "aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ\n"+
-                               "BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy\n"+
-                               "aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s\n"+
-                               "IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp\n"+
-                               "Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0\n"+
-                               "eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV\n"+
-                               "BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp\n"+
-                               "Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu\n"+
-                               "Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g\n"+
-                               "Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt\n"+
-                               "IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU\n"+
-                               "J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO\n"+
-                               "JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY\n"+
-                               "wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o\n"+
-                               "koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN\n"+
-                               "qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E\n"+
-                               "Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe\n"+
-                               "xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u\n"+
-                               "7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU\n"+
-                               "sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI\n"+
-                               "sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP\n"+
-                               "cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 3 Public Primary Certification Authority - G3",
-                               // X500 Subject, for lookups.
-                               "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT"+
-                               "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9y"+
-                               "IGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFBy"+
-                               "aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw\n"+
-                               "CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl\n"+
-                               "cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu\n"+
-                               "LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT\n"+
-                               "aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n"+
-                               "dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD\n"+
-                               "VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT\n"+
-                               "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ\n"+
-                               "bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu\n"+
-                               "IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg\n"+
-                               "LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b\n"+
-                               "N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t\n"+
-                               "KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu\n"+
-                               "kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm\n"+
-                               "CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ\n"+
-                               "Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu\n"+
-                               "imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te\n"+
-                               "2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe\n"+
-                               "DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC\n"+
-                               "/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p\n"+
-                               "F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt\n"+
-                               "TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Class 4 Public Primary Certification Authority - G3",
-                               // X500 Subject, for lookups.
-                               "MIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT"+
-                               "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9y"+
-                               "IGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFBy"+
-                               "aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw\n"+
-                               "CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl\n"+
-                               "cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu\n"+
-                               "LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT\n"+
-                               "aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n"+
-                               "dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD\n"+
-                               "VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT\n"+
-                               "aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ\n"+
-                               "bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu\n"+
-                               "IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg\n"+
-                               "LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1\n"+
-                               "GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ\n"+
-                               "+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd\n"+
-                               "U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm\n"+
-                               "NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY\n"+
-                               "ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/\n"+
-                               "ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1\n"+
-                               "CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq\n"+
-                               "g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm\n"+
-                               "fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c\n"+
-                               "2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/\n"+
-                               "bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Entrust.net Secure Server CA",
-                               // X500 Subject, for lookups.
-                               "MIHDMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRy"+
-                               "dXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykg"+
-                               "MTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2Vy"+
-                               "dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n"+
-                               "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n"+
-                               "ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n"+
-                               "KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n"+
-                               "ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n"+
-                               "MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n"+
-                               "ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n"+
-                               "b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n"+
-                               "bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n"+
-                               "U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n"+
-                               "A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n"+
-                               "I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n"+
-                               "wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n"+
-                               "AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n"+
-                               "oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n"+
-                               "BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n"+
-                               "dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n"+
-                               "MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n"+
-                               "b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n"+
-                               "dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n"+
-                               "MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n"+
-                               "E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n"+
-                               "MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n"+
-                               "hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n"+
-                               "95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n"+
-                               "2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Entrust.net Secure Personal CA",
-                               // X500 Subject, for lookups.
-                               "MIHJMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRy"+
-                               "dXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl"+
-                               "MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u"+
-                               "ZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC\n"+
-                               "VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u\n"+
-                               "ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh\n"+
-                               "Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV\n"+
-                               "BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe\n"+
-                               "Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU\n"+
-                               "MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D\n"+
-                               "bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl\n"+
-                               "MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq\n"+
-                               "RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G\n"+
-                               "CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo\n"+
-                               "6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux\n"+
-                               "5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm\n"+
-                               "AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC\n"+
-                               "ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50\n"+
-                               "cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m\n"+
-                               "by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp\n"+
-                               "IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg\n"+
-                               "Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg\n"+
-                               "KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV\n"+
-                               "HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E\n"+
-                               "BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE\n"+
-                               "FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA\n"+
-                               "BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7\n"+
-                               "pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz\n"+
-                               "wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a\n"+
-                               "EkP/TOYGJqibGapEPHayXOw=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Entrust.net Premium 2048 Secure Server CA",
-                               // X500 Subject, for lookups.
-                               "MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18y"+
-                               "MDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50"+
-                               "cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRo"+
-                               "b3JpdHkgKDIwNDgp",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML\n"+
-                               "RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp\n"+
-                               "bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5\n"+
-                               "IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp\n"+
-                               "ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy\n"+
-                               "MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3\n"+
-                               "LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp\n"+
-                               "YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG\n"+
-                               "A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp\n"+
-                               "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq\n"+
-                               "K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe\n"+
-                               "sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX\n"+
-                               "MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT\n"+
-                               "XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/\n"+
-                               "HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH\n"+
-                               "4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA\n"+
-                               "vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G\n"+
-                               "CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA\n"+
-                               "WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo\n"+
-                               "oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ\n"+
-                               "h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18\n"+
-                               "f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN\n"+
-                               "B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy\n"+
-                               "vUxFnmG6v4SBkgPR0ml8xQ==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Baltimore CyberTrust Root",
-                               // X500 Subject, for lookups.
-                               "MFoxCzAJBgNVBAYTAklFMRIwEAYDVQQKEwlCYWx0aW1vcmUxEzARBgNVBAsTCkN5YmVyVHJ1c3Qx"+
-                               "IjAgBgNVBAMTGUJhbHRpbW9yZSBDeWJlclRydXN0IFJvb3Q=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n"+
-                               "RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n"+
-                               "VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n"+
-                               "DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n"+
-                               "ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n"+
-                               "VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n"+
-                               "mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n"+
-                               "IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n"+
-                               "mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n"+
-                               "XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n"+
-                               "dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n"+
-                               "jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n"+
-                               "BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n"+
-                               "DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n"+
-                               "9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n"+
-                               "jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n"+
-                               "Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n"+
-                               "ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n"+
-                               "R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Equifax Secure Global eBusiness CA",
-                               // X500 Subject, for lookups.
-                               "MFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRF"+
-                               "cXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTE=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc\n"+
-                               "MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT\n"+
-                               "ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw\n"+
-                               "MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj\n"+
-                               "dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l\n"+
-                               "c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC\n"+
-                               "UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc\n"+
-                               "58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/\n"+
-                               "o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH\n"+
-                               "MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr\n"+
-                               "aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA\n"+
-                               "A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA\n"+
-                               "Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv\n"+
-                               "8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Equifax Secure eBusiness CA 1",
-                               // X500 Subject, for lookups.
-                               "MFMxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMSYwJAYDVQQDEx1F"+
-                               "cXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc\n"+
-                               "MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT\n"+
-                               "ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw\n"+
-                               "MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j\n"+
-                               "LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ\n"+
-                               "KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo\n"+
-                               "RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu\n"+
-                               "WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw\n"+
-                               "Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD\n"+
-                               "AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK\n"+
-                               "eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM\n"+
-                               "zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+\n"+
-                               "WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN\n"+
-                               "/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Equifax Secure eBusiness CA 2",
-                               // X500 Subject, for lookups.
-                               "ME4xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5FcXVpZmF4IFNlY3VyZTEmMCQGA1UECxMdRXF1aWZh"+
-                               "eCBTZWN1cmUgZUJ1c2luZXNzIENBLTI=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV\n"+
-                               "UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj\n"+
-                               "dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0\n"+
-                               "NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD\n"+
-                               "VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B\n"+
-                               "AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G\n"+
-                               "vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/\n"+
-                               "BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C\n"+
-                               "AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX\n"+
-                               "MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl\n"+
-                               "IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw\n"+
-                               "NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq\n"+
-                               "y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF\n"+
-                               "MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA\n"+
-                               "A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy\n"+
-                               "0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1\n"+
-                               "E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Visa International Global Root 2",
-                               // X500 Subject, for lookups.
-                               "MGExCzAJBgNVBAYTAlVTMQ0wCwYDVQQKEwRWSVNBMS8wLQYDVQQLEyZWaXNhIEludGVybmF0aW9u"+
-                               "YWwgU2VydmljZSBBc3NvY2lhdGlvbjESMBAGA1UEAxMJR1AgUm9vdCAy",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx\n"+
-                               "DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2\n"+
-                               "aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1\n"+
-                               "MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT\n"+
-                               "QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp\n"+
-                               "b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC\n"+
-                               "AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX\n"+
-                               "ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i\n"+
-                               "/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU\n"+
-                               "58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g\n"+
-                               "halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E\n"+
-                               "1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/\n"+
-                               "ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG\n"+
-                               "MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb\n"+
-                               "mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ\n"+
-                               "kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN\n"+
-                               "dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ\n"+
-                               "ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn\n"+
-                               "B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("beTRUSTed Root CA",
-                               // X500 Subject, for lookups.
-                               "MFoxCzAJBgNVBAYTAldXMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAMTEmJlVFJVU1RlZCBS"+
-                               "b290IENBczEaMBgGA1UEAxMRYmVUUlVTVGVkIFJvb3QgQ0E=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJX\n"+
-                               "VzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBD\n"+
-                               "QXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoX\n"+
-                               "DTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNVBAoTCWJlVFJVU1Rl\n"+
-                               "ZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYDVQQDExFiZVRSVVNU\n"+
-                               "ZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0c3oT\n"+
-                               "CjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P\n"+
-                               "6j41ffgzeubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwM\n"+
-                               "jmVZxXH/YgmPqsWPzGCgc0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX\n"+
-                               "2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2N\n"+
-                               "R47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5j\n"+
-                               "rEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNV\n"+
-                               "HSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQa\n"+
-                               "gfFSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1\n"+
-                               "bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0\n"+
-                               "ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHBy\n"+
-                               "YWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJlVFJVU1Rl\n"+
-                               "ZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0L3Rl\n"+
-                               "cm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0\n"+
-                               "L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQx\n"+
-                               "CzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNV\n"+
-                               "HSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJ\n"+
-                               "KoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR+csVm8tpvuaBa58oH2U+3RGFktTo\n"+
-                               "Qb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2\n"+
-                               "jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe\n"+
-                               "1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5\n"+
-                               "mlWXKWWuGVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYc\n"+
-                               "tmBjRYoQtLpGEK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("AddTrust Low-Value Services Root",
-                               // X500 Subject, for lookups.
-                               "MGUxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3Qg"+
-                               "VFRQIE5ldHdvcmsxITAfBgNVBAMTGEFkZFRydXN0IENsYXNzIDEgQ0EgUm9vdA==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU\n"+
-                               "MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3\n"+
-                               "b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw\n"+
-                               "MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML\n"+
-                               "QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD\n"+
-                               "VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA\n"+
-                               "A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul\n"+
-                               "CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n\n"+
-                               "tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl\n"+
-                               "dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch\n"+
-                               "PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC\n"+
-                               "+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O\n"+
-                               "BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E\n"+
-                               "BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl\n"+
-                               "MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk\n"+
-                               "ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB\n"+
-                               "IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X\n"+
-                               "7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz\n"+
-                               "43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY\n"+
-                               "eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl\n"+
-                               "pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA\n"+
-                               "WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("AddTrust External Root",
-                               // X500 Subject, for lookups.
-                               "MG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3Qg"+
-                               "RXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3Q=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU\n"+
-                               "MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs\n"+
-                               "IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290\n"+
-                               "MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux\n"+
-                               "FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h\n"+
-                               "bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v\n"+
-                               "dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt\n"+
-                               "H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9\n"+
-                               "uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX\n"+
-                               "mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX\n"+
-                               "a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN\n"+
-                               "E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0\n"+
-                               "WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD\n"+
-                               "VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0\n"+
-                               "Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU\n"+
-                               "cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx\n"+
-                               "IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN\n"+
-                               "AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH\n"+
-                               "YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5\n"+
-                               "6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC\n"+
-                               "Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX\n"+
-                               "c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a\n"+
-                               "mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("AddTrust Public Services Root",
-                               // X500 Subject, for lookups.
-                               "MGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3Qg"+
-                               "VFRQIE5ldHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU\n"+
-                               "MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3\n"+
-                               "b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx\n"+
-                               "MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB\n"+
-                               "ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV\n"+
-                               "BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC\n"+
-                               "AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV\n"+
-                               "6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX\n"+
-                               "GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP\n"+
-                               "dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH\n"+
-                               "1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF\n"+
-                               "62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW\n"+
-                               "BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw\n"+
-                               "AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL\n"+
-                               "MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU\n"+
-                               "cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv\n"+
-                               "b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6\n"+
-                               "IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/\n"+
-                               "iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao\n"+
-                               "GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh\n"+
-                               "4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm\n"+
-                               "XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("AddTrust Qualified Certificates Root",
-                               // X500 Subject, for lookups.
-                               "MGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3Qg"+
-                               "VFRQIE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU\n"+
-                               "MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3\n"+
-                               "b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1\n"+
-                               "MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK\n"+
-                               "EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh\n"+
-                               "BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B\n"+
-                               "AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq\n"+
-                               "xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G\n"+
-                               "87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i\n"+
-                               "2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U\n"+
-                               "WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1\n"+
-                               "0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G\n"+
-                               "A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T\n"+
-                               "AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr\n"+
-                               "pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL\n"+
-                               "ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm\n"+
-                               "aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv\n"+
-                               "hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm\n"+
-                               "hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X\n"+
-                               "dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3\n"+
-                               "P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y\n"+
-                               "iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no\n"+
-                               "xqE=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Verisign Time Stamping Authority CA",
-                               // X500 Subject, for lookups.
-                               "MIGlMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0"+
-                               "d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9y"+
-                               "cGEgKGMpMDAxLDAqBgNVBAMTI1ZlcmlTaWduIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5IENB",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCB\n"+
-                               "wTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQL\n"+
-                               "EzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5\n"+
-                               "IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1\n"+
-                               "dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv\n"+
-                               "cmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UEChMO\n"+
-                               "VmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx\n"+
-                               "OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5j\n"+
-                               "b20vcnBhIChjKTAwMSwwKgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1\n"+
-                               "dGhvcml0eSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVli\n"+
-                               "zrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhjzCx9abQzNvQ3B5rB3UBU\n"+
-                               "/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6ov8uQjI11\n"+
-                               "S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/\n"+
-                               "AgEAMEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0\n"+
-                               "dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0\n"+
-                               "cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsG\n"+
-                               "AQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRwOi8vb2NzcC52ZXJpc2lnbi5j\n"+
-                               "b20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2DcIBcBlK0lRW\n"+
-                               "HqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea\n"+
-                               "w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU\n"+
-                               "58dzq6wf7iWbwBbtt8pb8BQ=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Thawte Time Stamping CA",
-                               // X500 Subject, for lookups.
-                               "MIGLMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRQwEgYDVQQHEwtEdXJiYW52"+
-                               "aWxsZTEPMA0GA1UEChMGVGhhd3RlMR0wGwYDVQQLExRUaGF3dGUgQ2VydGlmaWNhdGlvbjEfMB0G"+
-                               "A1UEAxMWVGhhd3RlIFRpbWVzdGFtcGluZyBDQQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx\n"+
-                               "FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN\n"+
-                               "BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd\n"+
-                               "BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN\n"+
-                               "MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g\n"+
-                               "Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG\n"+
-                               "A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l\n"+
-                               "c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT\n"+
-                               "6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa\n"+
-                               "Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL\n"+
-                               "8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB\n"+
-                               "Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC\n"+
-                               "9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ\n"+
-                               "pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ\n"+
-                               "CayJSdM=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Entrust.net Global Secure Server CA",
-                               // X500 Subject, for lookups.
-                               "MIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9D"+
-                               "UFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRy"+
-                               "dXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRp"+
-                               "ZmljYXRpb24gQXV0aG9yaXR5",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML\n"+
-                               "RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu\n"+
-                               "Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg\n"+
-                               "RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl\n"+
-                               "IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa\n"+
-                               "Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE\n"+
-                               "CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n"+
-                               "dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk\n"+
-                               "MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n"+
-                               "b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO\n"+
-                               "8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB\n"+
-                               "bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2\n"+
-                               "dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4\n"+
-                               "QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT\n"+
-                               "C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp\n"+
-                               "bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw\n"+
-                               "IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy\n"+
-                               "ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw\n"+
-                               "KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD\n"+
-                               "VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud\n"+
-                               "DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2\n"+
-                               "fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia\n"+
-                               "d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF\n"+
-                               "JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U\n"+
-                               "yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Entrust.net Global Secure Personal CA",
-                               // X500 Subject, for lookups.
-                               "MIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0dDQ0Ff"+
-                               "Q1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50"+
-                               "cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRp"+
-                               "b24gQXV0aG9yaXR5",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML\n"+
-                               "RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp\n"+
-                               "bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw\n"+
-                               "IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu\n"+
-                               "dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy\n"+
-                               "MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3\n"+
-                               "LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp\n"+
-                               "YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG\n"+
-                               "A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5\n"+
-                               "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny\n"+
-                               "Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0\n"+
-                               "iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn\n"+
-                               "5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd\n"+
-                               "BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0\n"+
-                               "MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy\n"+
-                               "ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l\n"+
-                               "dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh\n"+
-                               "dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy\n"+
-                               "MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY\n"+
-                               "MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF\n"+
-                               "fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w\n"+
-                               "AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS\n"+
-                               "hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/\n"+
-                               "GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd\n"+
-                               "zmVml64mXg==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("AOL Time Warner Root Certification Authority 1",
-                               // X500 Subject, for lookups.
-                               "MIGDMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUQU9MIFRpbWUgV2FybmVyIEluYy4xHDAaBgNVBAsT"+
-                               "E0FtZXJpY2EgT25saW5lIEluYy4xNzA1BgNVBAMTLkFPTCBUaW1lIFdhcm5lciBSb290IENlcnRp"+
-                               "ZmljYXRpb24gQXV0aG9yaXR5IDE=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx\n"+
-                               "HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh\n"+
-                               "IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0\n"+
-                               "aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1\n"+
-                               "MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg\n"+
-                               "SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M\n"+
-                               "IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw\n"+
-                               "DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U\n"+
-                               "0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI\n"+
-                               "TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf\n"+
-                               "RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF\n"+
-                               "zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh\n"+
-                               "BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA\n"+
-                               "AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY\n"+
-                               "PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/\n"+
-                               "BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn\n"+
-                               "9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT\n"+
-                               "Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF\n"+
-                               "Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX\n"+
-                               "n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW\n"+
-                               "H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("AOL Time Warner Root Certification Authority 2",
-                               // X500 Subject, for lookups.
-                               "MIGDMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUQU9MIFRpbWUgV2FybmVyIEluYy4xHDAaBgNVBAsT"+
-                               "E0FtZXJpY2EgT25saW5lIEluYy4xNzA1BgNVBAMTLkFPTCBUaW1lIFdhcm5lciBSb290IENlcnRp"+
-                               "ZmljYXRpb24gQXV0aG9yaXR5IDI=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx\n"+
-                               "HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh\n"+
-                               "IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0\n"+
-                               "aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz\n"+
-                               "NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg\n"+
-                               "SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M\n"+
-                               "IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw\n"+
-                               "DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ\n"+
-                               "7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb\n"+
-                               "m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY\n"+
-                               "xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ\n"+
-                               "YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq\n"+
-                               "JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx\n"+
-                               "I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz\n"+
-                               "kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh\n"+
-                               "EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S\n"+
-                               "Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM\n"+
-                               "gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu\n"+
-                               "rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n"+
-                               "FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO\n"+
-                               "1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu\n"+
-                               "h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP\n"+
-                               "yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q\n"+
-                               "7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT\n"+
-                               "RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/\n"+
-                               "ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB\n"+
-                               "M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ\n"+
-                               "my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO\n"+
-                               "AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT\n"+
-                               "9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H\n"+
-                               "hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5\n"+
-                               "fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("beTRUSTed Root CA-Baltimore Implementation",
-                               // X500 Subject, for lookups.
-                               "MGYxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYD"+
-                               "VQQDEypiZVRSVVNUZWQgUm9vdCBDQS1CYWx0aW1vcmUgSW1wbGVtZW50YXRpb24=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli\n"+
-                               "ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq\n"+
-                               "YmVUUlVTVGVkIFJvb3QgQ0EtQmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAy\n"+
-                               "MDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVowZjESMBAGA1UEChMJYmVUUlVTVGVk\n"+
-                               "MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl\n"+
-                               "ZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN\n"+
-                               "AQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i\n"+
-                               "805qX4QQ+2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6\n"+
-                               "l2Qijvj/YaOcGx6Sj8CoCd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92B\n"+
-                               "FODEPM2dMPgwqZfT7syj0B9fHBOB1BirlNFjw55/NZKeX0Tq7PQiXLfoPX2k+Ymp\n"+
-                               "kbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNeDsYq0ATdcT0gTlgn/FP7\n"+
-                               "eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOCAh4wggIa\n"+
-                               "MA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4A\n"+
-                               "AAEJKIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3Ig\n"+
-                               "dXNlIG9mIHRoaXMgQ2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVu\n"+
-                               "dCBhbmQgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJk\n"+
-                               "IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgdGhlIENlcnRpZmljYXRpb24g\n"+
-                               "UHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0eSBBZ3JlZW1l\n"+
-                               "bnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl\n"+
-                               "LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5k\n"+
-                               "ZXguaHRtbDBBBggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3By\n"+
-                               "b2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgc\n"+
-                               "cxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR3D8kVpgccxiIav+DR+22MA4GA1Ud\n"+
-                               "DwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6svfoNyYt5hhwjdrCA\n"+
-                               "WXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyXEHu6\n"+
-                               "7RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AY\n"+
-                               "gkHNZTfqjjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb\n"+
-                               "4cV97yHgjQ5dUX2xZ/2jvTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9\n"+
-                               "CReJf8Py05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("beTRUSTed Root CA - Entrust Implementation",
-                               // X500 Subject, for lookups.
-                               "MGYxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYD"+
-                               "VQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1wbGVtZW50YXRpb24=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli\n"+
-                               "ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq\n"+
-                               "YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy\n"+
-                               "MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk\n"+
-                               "MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl\n"+
-                               "ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN\n"+
-                               "AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO\n"+
-                               "K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD\n"+
-                               "d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj\n"+
-                               "DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe\n"+
-                               "yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt\n"+
-                               "VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB\n"+
-                               "MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI\n"+
-                               "KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp\n"+
-                               "ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug\n"+
-                               "b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0\n"+
-                               "aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu\n"+
-                               "dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg\n"+
-                               "Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0\n"+
-                               "cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF\n"+
-                               "BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz\n"+
-                               "L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug\n"+
-                               "eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv\n"+
-                               "b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w\n"+
-                               "bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw\n"+
-                               "ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA\n"+
-                               "FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw\n"+
-                               "qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE\n"+
-                               "kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ\n"+
-                               "5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB\n"+
-                               "evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz\n"+
-                               "ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k\n"+
-                               "XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh\n"+
-                               "xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("beTRUSTed Root CA - RSA Implementation",
-                               // X500 Subject, for lookups.
-                               "MGIxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMS8wLQYD"+
-                               "VQQDEyZiZVRSVVNUZWQgUm9vdCBDQSAtIFJTQSBJbXBsZW1lbnRhdGlvbg==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi\n"+
-                               "MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB\n"+
-                               "czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp\n"+
-                               "b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli\n"+
-                               "ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm\n"+
-                               "YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG\n"+
-                               "SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn\n"+
-                               "HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I\n"+
-                               "1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk\n"+
-                               "tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU\n"+
-                               "GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er\n"+
-                               "cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY\n"+
-                               "MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+\n"+
-                               "AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j\n"+
-                               "b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB\n"+
-                               "OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh\n"+
-                               "dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu\n"+
-                               "IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl\n"+
-                               "LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS\n"+
-                               "ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo\n"+
-                               "ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w\n"+
-                               "cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME\n"+
-                               "GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt\n"+
-                               "z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g\n"+
-                               "6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK\n"+
-                               "mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd\n"+
-                               "LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb\n"+
-                               "J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3\n"+
-                               "SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("RSA Security 2048 v3",
-                               // X500 Subject, for lookups.
-                               "MDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4"+
-                               "IFYz",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6\n"+
-                               "MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp\n"+
-                               "dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX\n"+
-                               "BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy\n"+
-                               "MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp\n"+
-                               "eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg\n"+
-                               "/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl\n"+
-                               "wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh\n"+
-                               "AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2\n"+
-                               "PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu\n"+
-                               "AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB\n"+
-                               "BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR\n"+
-                               "MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc\n"+
-                               "HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/\n"+
-                               "Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+\n"+
-                               "f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO\n"+
-                               "rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch\n"+
-                               "6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3\n"+
-                               "7CAFYd4=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("RSA Security 1024 v3",
-                               // X500 Subject, for lookups.
-                               "MDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAxMDI0"+
-                               "IFYz",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6\n"+
-                               "MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp\n"+
-                               "dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX\n"+
-                               "BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx\n"+
-                               "MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O\n"+
-                               "isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY\n"+
-                               "78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9\n"+
-                               "zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G\n"+
-                               "A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd\n"+
-                               "BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA\n"+
-                               "Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN\n"+
-                               "T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD\n"+
-                               "mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("GeoTrust Global CA",
-                               // X500 Subject, for lookups.
-                               "MEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVz"+
-                               "dCBHbG9iYWwgQ0E=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT\n"+
-                               "MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i\n"+
-                               "YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG\n"+
-                               "EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg\n"+
-                               "R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9\n"+
-                               "9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq\n"+
-                               "fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv\n"+
-                               "iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU\n"+
-                               "1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+\n"+
-                               "bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW\n"+
-                               "MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA\n"+
-                               "ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l\n"+
-                               "uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn\n"+
-                               "Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS\n"+
-                               "tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF\n"+
-                               "PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un\n"+
-                               "hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV\n"+
-                               "5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("GeoTrust Global CA 2",
-                               // X500 Subject, for lookups.
-                               "MEQxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR0wGwYDVQQDExRHZW9UcnVz"+
-                               "dCBHbG9iYWwgQ0EgMg==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW\n"+
-                               "MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs\n"+
-                               "IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG\n"+
-                               "EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg\n"+
-                               "R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A\n"+
-                               "PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8\n"+
-                               "Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL\n"+
-                               "TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL\n"+
-                               "5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7\n"+
-                               "S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe\n"+
-                               "2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n"+
-                               "FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap\n"+
-                               "EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td\n"+
-                               "EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv\n"+
-                               "/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN\n"+
-                               "A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0\n"+
-                               "abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF\n"+
-                               "I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz\n"+
-                               "4iIprn2DQKi6bA==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("GeoTrust Universal CA",
-                               // X500 Subject, for lookups.
-                               "MEUxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMR4wHAYDVQQDExVHZW9UcnVz"+
-                               "dCBVbml2ZXJzYWwgQ0E=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW\n"+
-                               "MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy\n"+
-                               "c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE\n"+
-                               "BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0\n"+
-                               "IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV\n"+
-                               "VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8\n"+
-                               "cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT\n"+
-                               "QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh\n"+
-                               "F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v\n"+
-                               "c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w\n"+
-                               "mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd\n"+
-                               "VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX\n"+
-                               "teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ\n"+
-                               "f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe\n"+
-                               "Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+\n"+
-                               "nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB\n"+
-                               "/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY\n"+
-                               "MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG\n"+
-                               "9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc\n"+
-                               "aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX\n"+
-                               "IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn\n"+
-                               "ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z\n"+
-                               "uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN\n"+
-                               "Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja\n"+
-                               "QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW\n"+
-                               "koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9\n"+
-                               "ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt\n"+
-                               "DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm\n"+
-                               "bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("GeoTrust Universal CA 2",
-                               // X500 Subject, for lookups.
-                               "MEcxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMSAwHgYDVQQDExdHZW9UcnVz"+
-                               "dCBVbml2ZXJzYWwgQ0EgMg==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW\n"+
-                               "MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy\n"+
-                               "c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD\n"+
-                               "VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1\n"+
-                               "c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC\n"+
-                               "AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81\n"+
-                               "WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG\n"+
-                               "FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq\n"+
-                               "XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL\n"+
-                               "se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb\n"+
-                               "KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd\n"+
-                               "IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73\n"+
-                               "y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt\n"+
-                               "hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc\n"+
-                               "QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4\n"+
-                               "Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV\n"+
-                               "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV\n"+
-                               "HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ\n"+
-                               "KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z\n"+
-                               "dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ\n"+
-                               "L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr\n"+
-                               "Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo\n"+
-                               "ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY\n"+
-                               "T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz\n"+
-                               "GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m\n"+
-                               "1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV\n"+
-                               "OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH\n"+
-                               "6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX\n"+
-                               "QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("UTN-USER First-Network Applications",
-                               // X500 Subject, for lookups.
-                               "MIGjMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+
-                               "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+
-                               "dXN0LmNvbTErMCkGA1UEAxMiVVROLVVTRVJGaXJzdC1OZXR3b3JrIEFwcGxpY2F0aW9ucw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB\n"+
-                               "ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+
-                               "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+
-                               "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt\n"+
-                               "TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1\n"+
-                               "NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0\n"+
-                               "IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD\n"+
-                               "VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS\n"+
-                               "Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n"+
-                               "DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2\n"+
-                               "N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH\n"+
-                               "iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe\n"+
-                               "YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1\n"+
-                               "axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g\n"+
-                               "yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD\n"+
-                               "AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh\n"+
-                               "ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V\n"+
-                               "VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB\n"+
-                               "BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y\n"+
-                               "IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs\n"+
-                               "QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4\n"+
-                               "ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM\n"+
-                               "YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb\n"+
-                               "QErNaLly7HF27FSOH4UMAWr6pjisH8SE\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("America Online Root Certification Authority 1",
-                               // X500 Subject, for lookups.
-                               "MGMxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNBbWVyaWNhIE9ubGluZSBJbmMuMTYwNAYDVQQDEy1B"+
-                               "bWVyaWNhIE9ubGluZSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IDE=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc\n"+
-                               "MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP\n"+
-                               "bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2\n"+
-                               "MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft\n"+
-                               "ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg\n"+
-                               "Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n"+
-                               "ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk\n"+
-                               "hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym\n"+
-                               "1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW\n"+
-                               "OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb\n"+
-                               "2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko\n"+
-                               "O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw\n"+
-                               "AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU\n"+
-                               "AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\n"+
-                               "BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF\n"+
-                               "Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb\n"+
-                               "LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir\n"+
-                               "oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C\n"+
-                               "MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds\n"+
-                               "sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("America Online Root Certification Authority 2",
-                               // X500 Subject, for lookups.
-                               "MGMxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNBbWVyaWNhIE9ubGluZSBJbmMuMTYwNAYDVQQDEy1B"+
-                               "bWVyaWNhIE9ubGluZSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IDI=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc\n"+
-                               "MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP\n"+
-                               "bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2\n"+
-                               "MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft\n"+
-                               "ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg\n"+
-                               "Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n"+
-                               "ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC\n"+
-                               "206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci\n"+
-                               "KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2\n"+
-                               "JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9\n"+
-                               "BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e\n"+
-                               "Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B\n"+
-                               "PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67\n"+
-                               "Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq\n"+
-                               "Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ\n"+
-                               "o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3\n"+
-                               "+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj\n"+
-                               "YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj\n"+
-                               "FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE\n"+
-                               "AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn\n"+
-                               "xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2\n"+
-                               "LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc\n"+
-                               "obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8\n"+
-                               "CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe\n"+
-                               "IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA\n"+
-                               "DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F\n"+
-                               "AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX\n"+
-                               "Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb\n"+
-                               "AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl\n"+
-                               "Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw\n"+
-                               "RY8mkaKO/qk=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Visa eCommerce Root",
-                               // X500 Subject, for lookups.
-                               "MGsxCzAJBgNVBAYTAlVTMQ0wCwYDVQQKEwRWSVNBMS8wLQYDVQQLEyZWaXNhIEludGVybmF0aW9u"+
-                               "YWwgU2VydmljZSBBc3NvY2lhdGlvbjEcMBoGA1UEAxMTVmlzYSBlQ29tbWVyY2UgUm9vdA==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr\n"+
-                               "MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl\n"+
-                               "cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv\n"+
-                               "bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw\n"+
-                               "CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h\n"+
-                               "dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l\n"+
-                               "cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h\n"+
-                               "2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E\n"+
-                               "lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV\n"+
-                               "ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq\n"+
-                               "299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t\n"+
-                               "vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL\n"+
-                               "dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD\n"+
-                               "AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF\n"+
-                               "AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR\n"+
-                               "zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3\n"+
-                               "LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd\n"+
-                               "7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw\n"+
-                               "++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt\n"+
-                               "398znM/jra6O1I7mT1GvFpLgXPYHDw==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("TC TrustCenter, Germany, Class 2 CA",
-                               // X500 Subject, for lookups.
-                               "MIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgG"+
-                               "A1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEi"+
-                               "MCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlm"+
-                               "aWNhdGVAdHJ1c3RjZW50ZXIuZGU=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF\n"+
-                               "MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU\n"+
-                               "QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI\n"+
-                               "MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN\n"+
-                               "AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla\n"+
-                               "Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy\n"+
-                               "ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y\n"+
-                               "IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1\n"+
-                               "c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA\n"+
-                               "dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y\n"+
-                               "AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw\n"+
-                               "TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8\n"+
-                               "/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF\n"+
-                               "MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3\n"+
-                               "LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G\n"+
-                               "CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/\n"+
-                               "jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms\n"+
-                               "Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("TC TrustCenter, Germany, Class 3 CA",
-                               // X500 Subject, for lookups.
-                               "MIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgG"+
-                               "A1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEi"+
-                               "MCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlm"+
-                               "aWNhdGVAdHJ1c3RjZW50ZXIuZGU=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF\n"+
-                               "MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU\n"+
-                               "QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI\n"+
-                               "MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN\n"+
-                               "AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla\n"+
-                               "Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy\n"+
-                               "ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y\n"+
-                               "IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1\n"+
-                               "c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA\n"+
-                               "dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF\n"+
-                               "Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw\n"+
-                               "Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW\n"+
-                               "w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF\n"+
-                               "MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3\n"+
-                               "LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G\n"+
-                               "CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE\n"+
-                               "Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD\n"+
-                               "2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Certum Root CA",
-                               // X500 Subject, for lookups.
-                               "MD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNl"+
-                               "cnR1bSBDQQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM\n"+
-                               "MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD\n"+
-                               "QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM\n"+
-                               "MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD\n"+
-                               "QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E\n"+
-                               "jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo\n"+
-                               "ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI\n"+
-                               "ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu\n"+
-                               "Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg\n"+
-                               "AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7\n"+
-                               "HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA\n"+
-                               "uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa\n"+
-                               "TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg\n"+
-                               "xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q\n"+
-                               "CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x\n"+
-                               "O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs\n"+
-                               "6GAqm4VKQPNriiTsBhYscw==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Comodo AAA Services root",
-                               // X500 Subject, for lookups.
-                               "MHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1Nh"+
-                               "bGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNh"+
-                               "dGUgU2VydmljZXM=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb\n"+
-                               "MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\n"+
-                               "GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj\n"+
-                               "YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL\n"+
-                               "MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE\n"+
-                               "BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM\n"+
-                               "GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP\n"+
-                               "ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua\n"+
-                               "BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe\n"+
-                               "3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4\n"+
-                               "YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR\n"+
-                               "rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm\n"+
-                               "ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU\n"+
-                               "oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF\n"+
-                               "MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v\n"+
-                               "QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t\n"+
-                               "b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF\n"+
-                               "AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q\n"+
-                               "GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz\n"+
-                               "Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2\n"+
-                               "G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi\n"+
-                               "l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3\n"+
-                               "smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Comodo Secure Services root",
-                               // X500 Subject, for lookups.
-                               "MH4xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1Nh"+
-                               "bGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSQwIgYDVQQDDBtTZWN1cmUgQ2VydGlm"+
-                               "aWNhdGUgU2VydmljZXM=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb\n"+
-                               "MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\n"+
-                               "GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp\n"+
-                               "ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow\n"+
-                               "fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G\n"+
-                               "A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV\n"+
-                               "BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB\n"+
-                               "BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM\n"+
-                               "cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S\n"+
-                               "HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996\n"+
-                               "CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk\n"+
-                               "3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz\n"+
-                               "6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV\n"+
-                               "HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud\n"+
-                               "EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv\n"+
-                               "Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw\n"+
-                               "Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww\n"+
-                               "DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0\n"+
-                               "5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj\n"+
-                               "Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI\n"+
-                               "gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ\n"+
-                               "aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl\n"+
-                               "izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Comodo Trusted Services root",
-                               // X500 Subject, for lookups.
-                               "MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1Nh"+
-                               "bGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYDVQQDDBxUcnVzdGVkIENlcnRp"+
-                               "ZmljYXRlIFNlcnZpY2Vz",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb\n"+
-                               "MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow\n"+
-                               "GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0\n"+
-                               "aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla\n"+
-                               "MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO\n"+
-                               "BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD\n"+
-                               "VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B\n"+
-                               "AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW\n"+
-                               "fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt\n"+
-                               "TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL\n"+
-                               "fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW\n"+
-                               "1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7\n"+
-                               "kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G\n"+
-                               "A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD\n"+
-                               "VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v\n"+
-                               "ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo\n"+
-                               "dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu\n"+
-                               "Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/\n"+
-                               "HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32\n"+
-                               "pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS\n"+
-                               "jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+\n"+
-                               "xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn\n"+
-                               "dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("IPS Chained CAs root",
-                               // X500 Subject, for lookups.
-                               "MIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+
-                               "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+
-                               "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hh"+
-                               "aW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFpbmVk"+
-                               "IENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBz"+
-                               "LmVz",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT\n"+
-                               "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+
-                               "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+
-                               "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq\n"+
-                               "SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD\n"+
-                               "VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx\n"+
-                               "HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNTha\n"+
-                               "Fw0yNTEyMjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl\n"+
-                               "bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg\n"+
-                               "cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu\n"+
-                               "ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD\n"+
-                               "QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp\n"+
-                               "bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP\n"+
-                               "aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJ\n"+
-                               "spQgvJhPUOtopKdJC7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCB\n"+
-                               "hYEFcYGdtJUZqV92NC5jNzVXjrQfQj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nB\n"+
-                               "Bt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQIDAQABo4IEQzCCBD8wHQYDVR0O\n"+
-                               "BBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCCAUGAFKGtMbH5\n"+
-                               "PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE\n"+
-                               "CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ\n"+
-                               "bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt\n"+
-                               "YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD\n"+
-                               "aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT\n"+
-                               "IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI\n"+
-                               "hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E\n"+
-                               "BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG\n"+
-                               "CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB\n"+
-                               "BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw\n"+
-                               "EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC\n"+
-                               "BglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg\n"+
-                               "aHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlw\n"+
-                               "cy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMv\n"+
-                               "aXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3\n"+
-                               "dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIB\n"+
-                               "BwQsFipodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8w\n"+
-                               "NwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5\n"+
-                               "Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5pcHMuZXMvaXBz\n"+
-                               "MjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz\n"+
-                               "L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF\n"+
-                               "BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1W\n"+
-                               "WKJBGyi3leGmGpVfp3hAK+/blkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfN\n"+
-                               "HnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvN\n"+
-                               "b2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("IPS CLASE1 root",
-                               // X500 Subject, for lookups.
-                               "MIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+
-                               "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+
-                               "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xB"+
-                               "U0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRp"+
-                               "ZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXM=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT\n"+
-                               "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+
-                               "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+
-                               "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl\n"+
-                               "SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl\n"+
-                               "SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3\n"+
-                               "DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw\n"+
-                               "NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD\n"+
-                               "VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n\n"+
-                               "IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g\n"+
-                               "IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv\n"+
-                               "biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv\n"+
-                               "biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN\n"+
-                               "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS\n"+
-                               "zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS\n"+
-                               "YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ\n"+
-                               "KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb\n"+
-                               "adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk\n"+
-                               "ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE\n"+
-                               "BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT\n"+
-                               "ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC\n"+
-                               "LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g\n"+
-                               "QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g\n"+
-                               "QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD\n"+
-                               "VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr\n"+
-                               "BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB\n"+
-                               "FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC\n"+
-                               "AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB\n"+
-                               "D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp\n"+
-                               "ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC\n"+
-                               "BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito\n"+
-                               "dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG\n"+
-                               "SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D\n"+
-                               "TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw\n"+
-                               "czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov\n"+
-                               "L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq\n"+
-                               "MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu\n"+
-                               "Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy\n"+
-                               "Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v\n"+
-                               "Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK\n"+
-                               "Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj\n"+
-                               "V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+\n"+
-                               "hjM+5i9Ibq9UkE6tsSU=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("IPS CLASE3 root",
-                               // X500 Subject, for lookups.
-                               "MIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+
-                               "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+
-                               "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xB"+
-                               "U0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRp"+
-                               "ZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXM=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT\n"+
-                               "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+
-                               "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+
-                               "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl\n"+
-                               "SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl\n"+
-                               "SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3\n"+
-                               "DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx\n"+
-                               "MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD\n"+
-                               "VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n\n"+
-                               "IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g\n"+
-                               "IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv\n"+
-                               "biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv\n"+
-                               "biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN\n"+
-                               "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ\n"+
-                               "H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY\n"+
-                               "8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr\n"+
-                               "SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj\n"+
-                               "mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk\n"+
-                               "ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE\n"+
-                               "BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT\n"+
-                               "ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC\n"+
-                               "LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g\n"+
-                               "QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g\n"+
-                               "QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD\n"+
-                               "VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr\n"+
-                               "BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB\n"+
-                               "FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC\n"+
-                               "AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB\n"+
-                               "D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp\n"+
-                               "ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC\n"+
-                               "BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito\n"+
-                               "dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG\n"+
-                               "SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D\n"+
-                               "TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw\n"+
-                               "czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov\n"+
-                               "L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq\n"+
-                               "MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu\n"+
-                               "Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy\n"+
-                               "Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v\n"+
-                               "Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD\n"+
-                               "qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9\n"+
-                               "D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy\n"+
-                               "r33I6unUVtkOE7LFRVA=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("IPS CLASEA1 root",
-                               // X500 Subject, for lookups.
-                               "MIIBFDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+
-                               "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+
-                               "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS8wLQYDVQQLEyZJUFMgQ0EgQ0xB"+
-                               "U0VBMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmSVBTIENBIENMQVNFQTEgQ2Vy"+
-                               "dGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lcw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT\n"+
-                               "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+
-                               "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+
-                               "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm\n"+
-                               "SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT\n"+
-                               "JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI\n"+
-                               "hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3\n"+
-                               "MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ\n"+
-                               "BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp\n"+
-                               "bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G\n"+
-                               "LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh\n"+
-                               "dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj\n"+
-                               "YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw\n"+
-                               "gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8\n"+
-                               "m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd\n"+
-                               "ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8\n"+
-                               "eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47\n"+
-                               "3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh\n"+
-                               "ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ\n"+
-                               "BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp\n"+
-                               "bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G\n"+
-                               "LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh\n"+
-                               "dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj\n"+
-                               "YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC\n"+
-                               "AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF\n"+
-                               "BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB\n"+
-                               "BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg\n"+
-                               "hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud\n"+
-                               "EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD\n"+
-                               "QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG\n"+
-                               "SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC\n"+
-                               "AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j\n"+
-                               "cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2\n"+
-                               "b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu\n"+
-                               "aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI\n"+
-                               "BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s\n"+
-                               "MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz\n"+
-                               "MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz\n"+
-                               "MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF\n"+
-                               "BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA\n"+
-                               "AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF\n"+
-                               "aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL\n"+
-                               "H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("IPS CLASEA3 root",
-                               // X500 Subject, for lookups.
-                               "MIIBFDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+
-                               "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+
-                               "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS8wLQYDVQQLEyZJUFMgQ0EgQ0xB"+
-                               "U0VBMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmSVBTIENBIENMQVNFQTMgQ2Vy"+
-                               "dGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lcw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT\n"+
-                               "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+
-                               "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+
-                               "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm\n"+
-                               "SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT\n"+
-                               "JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI\n"+
-                               "hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3\n"+
-                               "MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ\n"+
-                               "BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp\n"+
-                               "bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G\n"+
-                               "LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh\n"+
-                               "dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj\n"+
-                               "YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw\n"+
-                               "gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN\n"+
-                               "G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU\n"+
-                               "VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn\n"+
-                               "6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8\n"+
-                               "2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh\n"+
-                               "ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ\n"+
-                               "BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp\n"+
-                               "bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G\n"+
-                               "LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh\n"+
-                               "dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj\n"+
-                               "YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC\n"+
-                               "AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF\n"+
-                               "BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB\n"+
-                               "BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg\n"+
-                               "hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud\n"+
-                               "EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD\n"+
-                               "QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG\n"+
-                               "SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC\n"+
-                               "AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j\n"+
-                               "cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2\n"+
-                               "b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu\n"+
-                               "aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI\n"+
-                               "BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s\n"+
-                               "MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz\n"+
-                               "MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz\n"+
-                               "MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF\n"+
-                               "BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca\n"+
-                               "2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI\n"+
-                               "3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS\n"+
-                               "AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("IPS Servidores root",
-                               // X500 Subject, for lookups.
-                               "MIGjMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQkFSQ0VMT05BMRIwEAYDVQQHEwlCQVJDRUxPTkEx"+
-                               "GTAXBgNVBAoTEElQUyBTZWd1cmlkYWQgQ0ExGDAWBgNVBAsTD0NlcnRpZmljYWNpb25lczEXMBUG"+
-                               "A1UEAxMOSVBTIFNFUlZJRE9SRVMxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lcw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYD\n"+
-                               "VQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBT\n"+
-                               "IFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD\n"+
-                               "Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVz\n"+
-                               "MB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMxCzAJBgNVBAYTAkVT\n"+
-                               "MRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE\n"+
-                               "ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcw\n"+
-                               "FQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu\n"+
-                               "aXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyY\n"+
-                               "XZhkJAk8IbPMGbWOlI6H0fg3PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1\n"+
-                               "gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4\n"+
-                               "Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lY\n"+
-                               "JN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsU\n"+
-                               "dx+2/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14\n"+
-                               "cJ58GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("IPS Timestamping root",
-                               // X500 Subject, for lookups.
-                               "MIIBHjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25h"+
-                               "MS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQK"+
-                               "FCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGlt"+
-                               "ZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0"+
-                               "YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p"+
-                               "cHMuZXM=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT\n"+
-                               "MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE\n"+
-                               "ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE\n"+
-                               "ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr\n"+
-                               "SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG\n"+
-                               "A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0\n"+
-                               "eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAx\n"+
-                               "OFoXDTI1MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy\n"+
-                               "Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l\n"+
-                               "dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw\n"+
-                               "cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh\n"+
-                               "bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU\n"+
-                               "aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B\n"+
-                               "CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA\n"+
-                               "vLjuVqWajOY2ycJioGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4\n"+
-                               "Efdo/BdApWgnMjvEp+ZCccWZ73b/K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFY\n"+
-                               "q6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0GmqaMCAwEAAaOCBIAwggR8MB0G\n"+
-                               "A1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSCAUcwggFDgBSL\n"+
-                               "0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ\n"+
-                               "BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ\n"+
-                               "UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp\n"+
-                               "cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg\n"+
-                               "Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD\n"+
-                               "EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w\n"+
-                               "HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM\n"+
-                               "BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB\n"+
-                               "BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB\n"+
-                               "FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD\n"+
-                               "VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw\n"+
-                               "cy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl\n"+
-                               "IGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgECBBwWGmh0\n"+
-                               "dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8v\n"+
-                               "d3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCG\n"+
-                               "SAGG+EIBAwQ4FjZodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25U\n"+
-                               "aW1lc3RhbXBpbmcuaHRtbD8wQgYJYIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBz\n"+
-                               "LmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGluZy5odG1sPzBABglghkgBhvhC\n"+
-                               "AQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1lc3RhbXBp\n"+
-                               "bmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy\n"+
-                               "MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFj\n"+
-                               "ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEF\n"+
-                               "BQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI\n"+
-                               "hvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk3\n"+
-                               "6MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWTs/zif/WN87GphV+I\n"+
-                               "3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("QuoVadis Root CA",
-                               // X500 Subject, for lookups.
-                               "MH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290"+
-                               "IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmlj"+
-                               "YXRpb24gQXV0aG9yaXR5",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC\n"+
-                               "TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0\n"+
-                               "aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0\n"+
-                               "aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz\n"+
-                               "MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw\n"+
-                               "IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR\n"+
-                               "dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG\n"+
-                               "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp\n"+
-                               "li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D\n"+
-                               "rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ\n"+
-                               "WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug\n"+
-                               "F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU\n"+
-                               "xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC\n"+
-                               "Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv\n"+
-                               "dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw\n"+
-                               "ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl\n"+
-                               "IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh\n"+
-                               "c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy\n"+
-                               "ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh\n"+
-                               "Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI\n"+
-                               "KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T\n"+
-                               "KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq\n"+
-                               "y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p\n"+
-                               "dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD\n"+
-                               "VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL\n"+
-                               "MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk\n"+
-                               "fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8\n"+
-                               "7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R\n"+
-                               "cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y\n"+
-                               "mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW\n"+
-                               "xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK\n"+
-                               "SnQ2+Q==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("QuoVadis Root CA 2",
-                               // X500 Subject, for lookups.
-                               "MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W"+
-                               "YWRpcyBSb290IENBIDI=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x\n"+
-                               "GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv\n"+
-                               "b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV\n"+
-                               "BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W\n"+
-                               "YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa\n"+
-                               "GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg\n"+
-                               "Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J\n"+
-                               "WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB\n"+
-                               "rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp\n"+
-                               "+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1\n"+
-                               "ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i\n"+
-                               "Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz\n"+
-                               "PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og\n"+
-                               "/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH\n"+
-                               "oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI\n"+
-                               "yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud\n"+
-                               "EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2\n"+
-                               "A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL\n"+
-                               "MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT\n"+
-                               "ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f\n"+
-                               "BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn\n"+
-                               "g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl\n"+
-                               "fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K\n"+
-                               "WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha\n"+
-                               "B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc\n"+
-                               "hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR\n"+
-                               "TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD\n"+
-                               "mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z\n"+
-                               "ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y\n"+
-                               "4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza\n"+
-                               "8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("QuoVadis Root CA 3",
-                               // X500 Subject, for lookups.
-                               "MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W"+
-                               "YWRpcyBSb290IENBIDM=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x\n"+
-                               "GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv\n"+
-                               "b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV\n"+
-                               "BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W\n"+
-                               "YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM\n"+
-                               "V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB\n"+
-                               "4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr\n"+
-                               "H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd\n"+
-                               "8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv\n"+
-                               "vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT\n"+
-                               "mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe\n"+
-                               "btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc\n"+
-                               "T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt\n"+
-                               "WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ\n"+
-                               "c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A\n"+
-                               "4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD\n"+
-                               "VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG\n"+
-                               "CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0\n"+
-                               "aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0\n"+
-                               "aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu\n"+
-                               "dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw\n"+
-                               "czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G\n"+
-                               "A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC\n"+
-                               "TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg\n"+
-                               "Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0\n"+
-                               "7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem\n"+
-                               "d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd\n"+
-                               "+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B\n"+
-                               "4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN\n"+
-                               "t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x\n"+
-                               "DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57\n"+
-                               "k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s\n"+
-                               "zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j\n"+
-                               "Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT\n"+
-                               "mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK\n"+
-                               "4SVhM7JZG+Ju1zdXtg2pEto=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Security Communication Root CA",
-                               // X500 Subject, for lookups.
-                               "MFAxCzAJBgNVBAYTAkpQMRgwFgYDVQQKEw9TRUNPTSBUcnVzdC5uZXQxJzAlBgNVBAsTHlNlY3Vy"+
-                               "aXR5IENvbW11bmljYXRpb24gUm9vdENBMQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY\n"+
-                               "MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t\n"+
-                               "dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5\n"+
-                               "WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD\n"+
-                               "VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3\n"+
-                               "DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8\n"+
-                               "9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ\n"+
-                               "DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9\n"+
-                               "Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N\n"+
-                               "QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ\n"+
-                               "xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G\n"+
-                               "A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T\n"+
-                               "AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG\n"+
-                               "kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr\n"+
-                               "Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5\n"+
-                               "Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU\n"+
-                               "JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot\n"+
-                               "RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Sonera Class 1 Root CA",
-                               // X500 Subject, for lookups.
-                               "MDkxCzAJBgNVBAYTAkZJMQ8wDQYDVQQKEwZTb25lcmExGTAXBgNVBAMTEFNvbmVyYSBDbGFzczEg"+
-                               "Q0E=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP\n"+
-                               "MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx\n"+
-                               "MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV\n"+
-                               "BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI\n"+
-                               "hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG\n"+
-                               "29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk\n"+
-                               "oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk\n"+
-                               "3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL\n"+
-                               "qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN\n"+
-                               "nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw\n"+
-                               "DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG\n"+
-                               "MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX\n"+
-                               "ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H\n"+
-                               "DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO\n"+
-                               "TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv\n"+
-                               "kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w\n"+
-                               "zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Sonera Class 2 Root CA",
-                               // X500 Subject, for lookups.
-                               "MDkxCzAJBgNVBAYTAkZJMQ8wDQYDVQQKEwZTb25lcmExGTAXBgNVBAMTEFNvbmVyYSBDbGFzczIg"+
-                               "Q0E=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP\n"+
-                               "MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx\n"+
-                               "MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV\n"+
-                               "BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI\n"+
-                               "hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o\n"+
-                               "Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt\n"+
-                               "5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s\n"+
-                               "3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej\n"+
-                               "vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu\n"+
-                               "8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw\n"+
-                               "DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG\n"+
-                               "MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil\n"+
-                               "zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/\n"+
-                               "3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD\n"+
-                               "FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6\n"+
-                               "Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2\n"+
-                               "ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Staat der Nederlanden Root CA",
-                               // X500 Subject, for lookups.
-                               "MFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMT"+
-                               "HVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO\n"+
-                               "TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh\n"+
-                               "dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy\n"+
-                               "MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk\n"+
-                               "ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB\n"+
-                               "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn\n"+
-                               "ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71\n"+
-                               "9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO\n"+
-                               "hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U\n"+
-                               "tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o\n"+
-                               "BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh\n"+
-                               "SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww\n"+
-                               "OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv\n"+
-                               "cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA\n"+
-                               "7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k\n"+
-                               "/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm\n"+
-                               "eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6\n"+
-                               "u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy\n"+
-                               "7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR\n"+
-                               "iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("TDC Internet Root CA",
-                               // X500 Subject, for lookups.
-                               "MEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl"+
-                               "cm5ldCBSb290IENB",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE\n"+
-                               "SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg\n"+
-                               "Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV\n"+
-                               "BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl\n"+
-                               "cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA\n"+
-                               "vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu\n"+
-                               "Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a\n"+
-                               "0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1\n"+
-                               "4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN\n"+
-                               "eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD\n"+
-                               "R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG\n"+
-                               "A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu\n"+
-                               "dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME\n"+
-                               "Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3\n"+
-                               "WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw\n"+
-                               "HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ\n"+
-                               "KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO\n"+
-                               "Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX\n"+
-                               "wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+\n"+
-                               "2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89\n"+
-                               "9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0\n"+
-                               "jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38\n"+
-                               "aQNiuJkFBT1reBK9sG9l\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("TDC OCES Root CA",
-                               // X500 Subject, for lookups.
-                               "MDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENB",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE\n"+
-                               "SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw\n"+
-                               "ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU\n"+
-                               "REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\n"+
-                               "MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr\n"+
-                               "2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s\n"+
-                               "2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU\n"+
-                               "GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj\n"+
-                               "dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r\n"+
-                               "TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/\n"+
-                               "BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB\n"+
-                               "AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv\n"+
-                               "c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl\n"+
-                               "ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu\n"+
-                               "MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg\n"+
-                               "T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud\n"+
-                               "HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD\n"+
-                               "VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny\n"+
-                               "bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy\n"+
-                               "MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ\n"+
-                               "J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG\n"+
-                               "SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom\n"+
-                               "JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO\n"+
-                               "inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y\n"+
-                               "caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB\n"+
-                               "mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ\n"+
-                               "YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9\n"+
-                               "BKNDLdr8C2LqL19iUw==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("UTN DATACorp SGC Root CA",
-                               // X500 Subject, for lookups.
-                               "MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+
-                               "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+
-                               "dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dD",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB\n"+
-                               "kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+
-                               "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+
-                               "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw\n"+
-                               "IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG\n"+
-                               "EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD\n"+
-                               "VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu\n"+
-                               "dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN\n"+
-                               "BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6\n"+
-                               "E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ\n"+
-                               "D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK\n"+
-                               "4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq\n"+
-                               "lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW\n"+
-                               "bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB\n"+
-                               "o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT\n"+
-                               "MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js\n"+
-                               "LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr\n"+
-                               "BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB\n"+
-                               "AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft\n"+
-                               "Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj\n"+
-                               "j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH\n"+
-                               "KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv\n"+
-                               "2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3\n"+
-                               "mfnGV/TJVTl4uix5yaaIK/QI\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("UTN USERFirst Email Root CA",
-                               // X500 Subject, for lookups.
-                               "MIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+
-                               "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+
-                               "dXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5k"+
-                               "IEVtYWls",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB\n"+
-                               "rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+
-                               "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+
-                               "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt\n"+
-                               "Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa\n"+
-                               "Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV\n"+
-                               "BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l\n"+
-                               "dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE\n"+
-                               "AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls\n"+
-                               "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B\n"+
-                               "YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9\n"+
-                               "hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l\n"+
-                               "L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm\n"+
-                               "SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM\n"+
-                               "1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws\n"+
-                               "6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n"+
-                               "DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw\n"+
-                               "Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50\n"+
-                               "aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH\n"+
-                               "AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u\n"+
-                               "7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0\n"+
-                               "xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ\n"+
-                               "rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim\n"+
-                               "eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk\n"+
-                               "USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("UTN USERFirst Hardware Root CA",
-                               // X500 Subject, for lookups.
-                               "MIGXMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+
-                               "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+
-                               "dXN0LmNvbTEfMB0GA1UEAxMWVVROLVVTRVJGaXJzdC1IYXJkd2FyZQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB\n"+
-                               "lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+
-                               "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+
-                               "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt\n"+
-                               "SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG\n"+
-                               "A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe\n"+
-                               "MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v\n"+
-                               "d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh\n"+
-                               "cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn\n"+
-                               "0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ\n"+
-                               "M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a\n"+
-                               "MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd\n"+
-                               "oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI\n"+
-                               "DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy\n"+
-                               "oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n"+
-                               "VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0\n"+
-                               "dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy\n"+
-                               "bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF\n"+
-                               "BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM\n"+
-                               "//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli\n"+
-                               "CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE\n"+
-                               "CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t\n"+
-                               "3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS\n"+
-                               "KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("UTN USERFirst Object Root CA",
-                               // X500 Subject, for lookups.
-                               "MIGVMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w"+
-                               "HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy"+
-                               "dXN0LmNvbTEdMBsGA1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3Q=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB\n"+
-                               "lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug\n"+
-                               "Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho\n"+
-                               "dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt\n"+
-                               "T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV\n"+
-                               "BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc\n"+
-                               "BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3\n"+
-                               "dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC\n"+
-                               "ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP\n"+
-                               "HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO\n"+
-                               "KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo\n"+
-                               "5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+\n"+
-                               "pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb\n"+
-                               "kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC\n"+
-                               "AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E\n"+
-                               "FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov\n"+
-                               "L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV\n"+
-                               "HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN\n"+
-                               "AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw\n"+
-                               "NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB\n"+
-                               "mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU\n"+
-                               "4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5\n"+
-                               "81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR\n"+
-                               "Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Camerfirma Chambers of Commerce Root",
-                               // X500 Subject, for lookups.
-                               "MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBBODI3NDMyODcx"+
-                               "IzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIwIAYDVQQDExlDaGFtYmVycyBv"+
-                               "ZiBDb21tZXJjZSBSb290",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn\n"+
-                               "MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL\n"+
-                               "ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg\n"+
-                               "b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa\n"+
-                               "MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB\n"+
-                               "ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw\n"+
-                               "IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B\n"+
-                               "AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb\n"+
-                               "unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d\n"+
-                               "BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq\n"+
-                               "7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3\n"+
-                               "0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX\n"+
-                               "roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG\n"+
-                               "A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j\n"+
-                               "aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p\n"+
-                               "26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA\n"+
-                               "BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud\n"+
-                               "EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN\n"+
-                               "BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz\n"+
-                               "aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB\n"+
-                               "AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd\n"+
-                               "p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi\n"+
-                               "1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc\n"+
-                               "XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0\n"+
-                               "eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu\n"+
-                               "tGWaIZDgqtCYvDi1czyL+Nw=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Camerfirma Global Chambersign Root",
-                               // X500 Subject, for lookups.
-                               "MH0xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBBODI3NDMyODcx"+
-                               "IzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSAwHgYDVQQDExdHbG9iYWwgQ2hh"+
-                               "bWJlcnNpZ24gUm9vdA==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn\n"+
-                               "MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL\n"+
-                               "ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo\n"+
-                               "YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9\n"+
-                               "MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy\n"+
-                               "NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G\n"+
-                               "A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA\n"+
-                               "A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0\n"+
-                               "Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s\n"+
-                               "QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV\n"+
-                               "eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795\n"+
-                               "B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh\n"+
-                               "z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T\n"+
-                               "AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i\n"+
-                               "ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w\n"+
-                               "TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH\n"+
-                               "MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD\n"+
-                               "VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE\n"+
-                               "VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh\n"+
-                               "bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B\n"+
-                               "AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM\n"+
-                               "bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi\n"+
-                               "ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG\n"+
-                               "VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c\n"+
-                               "ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/\n"+
-                               "AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("NetLock Qualified (Class QA) Root",
-                               // X500 Subject, for lookups.
-                               "MIHJMQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFs"+
-                               "b3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMT"+
-                               "OU5ldExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFk"+
-                               "bzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx\n"+
-                               "ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0\n"+
-                               "b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD\n"+
-                               "EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz\n"+
-                               "aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w\n"+
-                               "MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G\n"+
-                               "A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh\n"+
-                               "Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l\n"+
-                               "dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh\n"+
-                               "bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq\n"+
-                               "hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq\n"+
-                               "eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe\n"+
-                               "r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5\n"+
-                               "3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd\n"+
-                               "vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l\n"+
-                               "mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC\n"+
-                               "wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg\n"+
-                               "hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0\n"+
-                               "TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh\n"+
-                               "biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg\n"+
-                               "ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg\n"+
-                               "dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6\n"+
-                               "b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl\n"+
-                               "c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0\n"+
-                               "ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3\n"+
-                               "dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu\n"+
-                               "ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh\n"+
-                               "bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo\n"+
-                               "ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3\n"+
-                               "Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u\n"+
-                               "ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA\n"+
-                               "A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ\n"+
-                               "MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+\n"+
-                               "NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR\n"+
-                               "VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY\n"+
-                               "83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3\n"+
-                               "macqaJVmlaut74nLYKkGEsaUR+ko\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("NetLock Notary (Class A) Root",
-                               // X500 Subject, for lookups.
-                               "MIGvMQswCQYDVQQGEwJIVTEQMA4GA1UECBMHSHVuZ2FyeTERMA8GA1UEBxMIQnVkYXBlc3QxJzAl"+
-                               "BgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZh"+
-                               "bnlraWFkb2sxNjA0BgNVBAMTLU5ldExvY2sgS296amVneXpvaSAoQ2xhc3MgQSkgVGFudXNpdHZh"+
-                               "bnlraWFkbw==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV\n"+
-                               "MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe\n"+
-                               "TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0\n"+
-                               "dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB\n"+
-                               "KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0\n"+
-                               "N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC\n"+
-                               "dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu\n"+
-                               "MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL\n"+
-                               "b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG\n"+
-                               "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD\n"+
-                               "zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi\n"+
-                               "3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8\n"+
-                               "WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY\n"+
-                               "Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi\n"+
-                               "NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC\n"+
-                               "ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4\n"+
-                               "QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0\n"+
-                               "YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz\n"+
-                               "aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu\n"+
-                               "IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm\n"+
-                               "ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg\n"+
-                               "ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs\n"+
-                               "amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv\n"+
-                               "IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3\n"+
-                               "Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6\n"+
-                               "ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1\n"+
-                               "YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg\n"+
-                               "dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs\n"+
-                               "b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G\n"+
-                               "CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO\n"+
-                               "xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP\n"+
-                               "0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ\n"+
-                               "QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk\n"+
-                               "f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK\n"+
-                               "8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("NetLock Business (Class B) Root",
-                               // X500 Subject, for lookups.
-                               "MIGZMQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFs"+
-                               "b3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMT"+
-                               "KU5ldExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRv",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx\n"+
-                               "ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0\n"+
-                               "b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD\n"+
-                               "EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05\n"+
-                               "OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G\n"+
-                               "A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh\n"+
-                               "Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l\n"+
-                               "dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG\n"+
-                               "SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK\n"+
-                               "gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX\n"+
-                               "iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc\n"+
-                               "Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E\n"+
-                               "BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G\n"+
-                               "SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu\n"+
-                               "b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh\n"+
-                               "bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv\n"+
-                               "Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln\n"+
-                               "aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0\n"+
-                               "IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh\n"+
-                               "c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph\n"+
-                               "biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo\n"+
-                               "ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP\n"+
-                               "UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj\n"+
-                               "YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo\n"+
-                               "dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA\n"+
-                               "bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06\n"+
-                               "sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa\n"+
-                               "n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS\n"+
-                               "NitjrFgBazMpUIaD8QFI\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("NetLock Express (Class C) Root",
-                               // X500 Subject, for lookups.
-                               "MIGbMQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFs"+
-                               "b3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxNDAyBgNVBAMT"+
-                               "K05ldExvY2sgRXhwcmVzc3ogKENsYXNzIEMpIFRhbnVzaXR2YW55a2lhZG8=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx\n"+
-                               "ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0\n"+
-                               "b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD\n"+
-                               "EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X\n"+
-                               "DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw\n"+
-                               "DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u\n"+
-                               "c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr\n"+
-                               "TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN\n"+
-                               "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA\n"+
-                               "OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC\n"+
-                               "2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW\n"+
-                               "RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P\n"+
-                               "AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW\n"+
-                               "ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0\n"+
-                               "YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz\n"+
-                               "b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO\n"+
-                               "ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB\n"+
-                               "IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs\n"+
-                               "b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs\n"+
-                               "ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s\n"+
-                               "YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg\n"+
-                               "a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g\n"+
-                               "SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0\n"+
-                               "aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg\n"+
-                               "YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg\n"+
-                               "Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY\n"+
-                               "ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g\n"+
-                               "pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4\n"+
-                               "Fp1hBWeAyNDYpQcCNJgEjTME1A==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("XRamp Global CA Root",
-                               // X500 Subject, for lookups.
-                               "MIGCMQswCQYDVQQGEwJVUzEeMBwGA1UECxMVd3d3LnhyYW1wc2VjdXJpdHkuY29tMSQwIgYDVQQK"+
-                               "ExtYUmFtcCBTZWN1cml0eSBTZXJ2aWNlcyBJbmMxLTArBgNVBAMTJFhSYW1wIEdsb2JhbCBDZXJ0"+
-                               "aWZpY2F0aW9uIEF1dGhvcml0eQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB\n"+
-                               "gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk\n"+
-                               "MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY\n"+
-                               "UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx\n"+
-                               "NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3\n"+
-                               "dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy\n"+
-                               "dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB\n"+
-                               "dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6\n"+
-                               "38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP\n"+
-                               "KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q\n"+
-                               "DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4\n"+
-                               "qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa\n"+
-                               "JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi\n"+
-                               "PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P\n"+
-                               "BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs\n"+
-                               "jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0\n"+
-                               "eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD\n"+
-                               "ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR\n"+
-                               "vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt\n"+
-                               "qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa\n"+
-                               "IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy\n"+
-                               "i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ\n"+
-                               "O+7ETPTsJ3xCwnR8gooJybQDJbw=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Go Daddy Class 2 CA",
-                               // X500 Subject, for lookups.
-                               "MGMxCzAJBgNVBAYTAlVTMSEwHwYDVQQKExhUaGUgR28gRGFkZHkgR3JvdXAsIEluYy4xMTAvBgNV"+
-                               "BAsTKEdvIERhZGR5IENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh\n"+
-                               "MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE\n"+
-                               "YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3\n"+
-                               "MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo\n"+
-                               "ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg\n"+
-                               "MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN\n"+
-                               "ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA\n"+
-                               "PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w\n"+
-                               "wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi\n"+
-                               "EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY\n"+
-                               "avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+\n"+
-                               "YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE\n"+
-                               "sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h\n"+
-                               "/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5\n"+
-                               "IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj\n"+
-                               "YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD\n"+
-                               "ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy\n"+
-                               "OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P\n"+
-                               "TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ\n"+
-                               "HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER\n"+
-                               "dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf\n"+
-                               "ReYNnyicsbkqWletNw+vHX/bvZ8=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Starfield Class 2 CA",
-                               // X500 Subject, for lookups.
-                               "MGgxCzAJBgNVBAYTAlVTMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIw"+
-                               "MAYDVQQLEylTdGFyZmllbGQgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl\n"+
-                               "MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp\n"+
-                               "U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw\n"+
-                               "NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE\n"+
-                               "ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp\n"+
-                               "ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3\n"+
-                               "DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf\n"+
-                               "8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN\n"+
-                               "+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0\n"+
-                               "X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa\n"+
-                               "K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA\n"+
-                               "1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G\n"+
-                               "A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR\n"+
-                               "zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0\n"+
-                               "YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD\n"+
-                               "bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w\n"+
-                               "DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3\n"+
-                               "L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D\n"+
-                               "eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl\n"+
-                               "xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp\n"+
-                               "VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY\n"+
-                               "WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("StartCom Ltd.",
-                               // X500 Subject, for lookups.
-                               "MIGwMQswCQYDVQQGEwJJTDEPMA0GA1UECBMGSXNyYWVsMQ4wDAYDVQQHEwVFaWxhdDEWMBQGA1UE"+
-                               "ChMNU3RhcnRDb20gTHRkLjEaMBgGA1UECxMRQ0EgQXV0aG9yaXR5IERlcC4xKTAnBgNVBAMTIEZy"+
-                               "ZWUgU1NMIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJhZG1pbkBzdGFy"+
-                               "dGNvbS5vcmc=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx\n"+
-                               "DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0\n"+
-                               "Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG\n"+
-                               "cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS\n"+
-                               "YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0\n"+
-                               "OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp\n"+
-                               "bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp\n"+
-                               "dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\n"+
-                               "dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG\n"+
-                               "9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x\n"+
-                               "18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5\n"+
-                               "yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI\n"+
-                               "LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G\n"+
-                               "A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW\n"+
-                               "zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT\n"+
-                               "BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x\n"+
-                               "GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD\n"+
-                               "ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh\n"+
-                               "cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV\n"+
-                               "HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G\n"+
-                               "CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy\n"+
-                               "BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j\n"+
-                               "cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ\n"+
-                               "YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/\n"+
-                               "YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1\n"+
-                               "ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p\n"+
-                               "00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb\n"+
-                               "cCOxgN8aIDjnfg==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("StartCom Certification Authority",
-                               // X500 Subject, for lookups.
-                               "MH0xCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUg"+
-                               "RGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMSkwJwYDVQQDEyBTdGFydENvbSBDZXJ0aWZpY2F0"+
-                               "aW9uIEF1dGhvcml0eQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW\n"+
-                               "MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg\n"+
-                               "Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh\n"+
-                               "dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9\n"+
-                               "MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi\n"+
-                               "U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh\n"+
-                               "cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA\n"+
-                               "A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk\n"+
-                               "pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf\n"+
-                               "OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C\n"+
-                               "Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT\n"+
-                               "Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi\n"+
-                               "HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM\n"+
-                               "Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w\n"+
-                               "+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+\n"+
-                               "Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3\n"+
-                               "Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B\n"+
-                               "26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID\n"+
-                               "AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE\n"+
-                               "FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j\n"+
-                               "ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js\n"+
-                               "LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM\n"+
-                               "BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0\n"+
-                               "Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy\n"+
-                               "dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh\n"+
-                               "cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh\n"+
-                               "YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg\n"+
-                               "dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp\n"+
-                               "bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ\n"+
-                               "YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT\n"+
-                               "TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ\n"+
-                               "9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8\n"+
-                               "jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW\n"+
-                               "FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz\n"+
-                               "ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1\n"+
-                               "ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L\n"+
-                               "EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu\n"+
-                               "L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq\n"+
-                               "yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC\n"+
-                               "O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V\n"+
-                               "um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh\n"+
-                               "NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Taiwan GRCA",
-                               // X500 Subject, for lookups.
-                               "MD8xCzAJBgNVBAYTAlRXMTAwLgYDVQQKDCdHb3Zlcm5tZW50IFJvb3QgQ2VydGlmaWNhdGlvbiBB"+
-                               "dXRob3JpdHk=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/\n"+
-                               "MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj\n"+
-                               "YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow\n"+
-                               "PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp\n"+
-                               "Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB\n"+
-                               "AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR\n"+
-                               "IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q\n"+
-                               "gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy\n"+
-                               "yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts\n"+
-                               "F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2\n"+
-                               "jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx\n"+
-                               "ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC\n"+
-                               "VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK\n"+
-                               "YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH\n"+
-                               "EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN\n"+
-                               "Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud\n"+
-                               "DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE\n"+
-                               "MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK\n"+
-                               "UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ\n"+
-                               "TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf\n"+
-                               "qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK\n"+
-                               "ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE\n"+
-                               "JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7\n"+
-                               "hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1\n"+
-                               "EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm\n"+
-                               "nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX\n"+
-                               "udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz\n"+
-                               "ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe\n"+
-                               "LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl\n"+
-                               "pYYsfPQS\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Firmaprofesional Root CA",
-                               // X500 Subject, for lookups.
-                               "MIGdMQswCQYDVQQGEwJFUzEiMCAGA1UEBxMZQy8gTXVudGFuZXIgMjQ0IEJhcmNlbG9uYTFCMEAG"+
-                               "A1UEAxM5QXV0b3JpZGFkIGRlIENlcnRpZmljYWNpb24gRmlybWFwcm9mZXNpb25hbCBDSUYgQTYy"+
-                               "NjM0MDY4MSYwJAYJKoZIhvcNAQkBFhdjYUBmaXJtYXByb2Zlc2lvbmFsLmNvbQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx\n"+
-                               "IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1\n"+
-                               "dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2\n"+
-                               "MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w\n"+
-                               "HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx\n"+
-                               "IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1\n"+
-                               "dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2\n"+
-                               "MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w\n"+
-                               "ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u\n"+
-                               "Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY\n"+
-                               "rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z\n"+
-                               "hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay\n"+
-                               "BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL\n"+
-                               "iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb\n"+
-                               "AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv\n"+
-                               "bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0\n"+
-                               "MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E\n"+
-                               "FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n\n"+
-                               "VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq\n"+
-                               "u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m\n"+
-                               "hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl\n"+
-                               "ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp\n"+
-                               "QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5\n"+
-                               "quGnM/b9Sh/22WA=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Wells Fargo Root CA",
-                               // X500 Subject, for lookups.
-                               "MIGCMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLV2VsbHMgRmFyZ28xLDAqBgNVBAsTI1dlbGxzIEZh"+
-                               "cmdvIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS8wLQYDVQQDEyZXZWxscyBGYXJnbyBSb290IENl"+
-                               "cnRpZmljYXRlIEF1dGhvcml0eQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC\n"+
-                               "VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD\n"+
-                               "ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v\n"+
-                               "dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0\n"+
-                               "MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww\n"+
-                               "KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G\n"+
-                               "A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi\n"+
-                               "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13\n"+
-                               "5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE\n"+
-                               "SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O\n"+
-                               "JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu\n"+
-                               "ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE\n"+
-                               "AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB\n"+
-                               "AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB\n"+
-                               "CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw\n"+
-                               "b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo\n"+
-                               "7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/\n"+
-                               "0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7\n"+
-                               "nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx\n"+
-                               "x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ\n"+
-                               "33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Swisscom Root CA 1",
-                               // X500 Subject, for lookups.
-                               "MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0"+
-                               "aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAx",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk\n"+
-                               "MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0\n"+
-                               "YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg\n"+
-                               "Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT\n"+
-                               "AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp\n"+
-                               "Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN\n"+
-                               "BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9\n"+
-                               "m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih\n"+
-                               "FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/\n"+
-                               "TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F\n"+
-                               "EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco\n"+
-                               "kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu\n"+
-                               "HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF\n"+
-                               "vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo\n"+
-                               "19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC\n"+
-                               "L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW\n"+
-                               "bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX\n"+
-                               "JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw\n"+
-                               "FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j\n"+
-                               "BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc\n"+
-                               "K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf\n"+
-                               "ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik\n"+
-                               "Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB\n"+
-                               "sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e\n"+
-                               "3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR\n"+
-                               "ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip\n"+
-                               "mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH\n"+
-                               "b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf\n"+
-                               "rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms\n"+
-                               "hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y\n"+
-                               "zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6\n"+
-                               "MBr1mmz0DlP5OlvRHA==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("DigiCert Assured ID Root CA",
-                               // X500 Subject, for lookups.
-                               "MGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdp"+
-                               "Y2VydC5jb20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQQ==",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl\n"+
-                               "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"+
-                               "d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv\n"+
-                               "b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG\n"+
-                               "EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl\n"+
-                               "cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi\n"+
-                               "MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c\n"+
-                               "JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP\n"+
-                               "mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+\n"+
-                               "wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4\n"+
-                               "VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/\n"+
-                               "AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB\n"+
-                               "AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW\n"+
-                               "BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun\n"+
-                               "pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC\n"+
-                               "dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf\n"+
-                               "fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm\n"+
-                               "NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx\n"+
-                               "H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe\n"+
-                               "+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("DigiCert Global Root CA",
-                               // X500 Subject, for lookups.
-                               "MGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdp"+
-                               "Y2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENB",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"+
-                               "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"+
-                               "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"+
-                               "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"+
-                               "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"+
-                               "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"+
-                               "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"+
-                               "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"+
-                               "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"+
-                               "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"+
-                               "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"+
-                               "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"+
-                               "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"+
-                               "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"+
-                               "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"+
-                               "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"+
-                               "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"+
-                               "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"+
-                               "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"+
-                               "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("DigiCert High Assurance EV Root CA",
-                               // X500 Subject, for lookups.
-                               "MGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdp"+
-                               "Y2VydC5jb20xKzApBgNVBAMTIkRpZ2lDZXJ0IEhpZ2ggQXNzdXJhbmNlIEVWIFJvb3QgQ0E=",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs\n"+
-                               "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"+
-                               "d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j\n"+
-                               "ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL\n"+
-                               "MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3\n"+
-                               "LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug\n"+
-                               "RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm\n"+
-                               "+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW\n"+
-                               "PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM\n"+
-                               "xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB\n"+
-                               "Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3\n"+
-                               "hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg\n"+
-                               "EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF\n"+
-                               "MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA\n"+
-                               "FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec\n"+
-                               "nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z\n"+
-                               "eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF\n"+
-                               "hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2\n"+
-                               "Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe\n"+
-                               "vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep\n"+
-                               "+OkuE6N36B9K\n"+
-                               "-----END CERTIFICATE-----");
-                       super.addPEMCertificate("Certplus Class 2 Primary CA",
-                               // X500 Subject, for lookups.
-                               "MD0xCzAJBgNVBAYTAkZSMREwDwYDVQQKEwhDZXJ0cGx1czEbMBkGA1UEAxMSQ2xhc3MgMiBQcmlt"+
-                               "YXJ5IENB",
-                               "-----BEGIN CERTIFICATE-----\n"+
-                               "MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw\n"+
-                               "PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz\n"+
-                               "cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9\n"+
-                               "MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz\n"+
-                               "IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ\n"+
-                               "ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR\n"+
-                               "VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL\n"+
-                               "kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd\n"+
-                               "EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas\n"+
-                               "H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0\n"+
-                               "HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud\n"+
-                               "DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4\n"+
-                               "QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu\n"+
-                               "Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/\n"+
-                               "AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8\n"+
-                               "yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR\n"+
-                               "FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA\n"+
-                               "ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB\n"+
-                               "kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7\n"+
-                               "l7+ijrRU\n"+
-                               "-----END CERTIFICATE-----");
-               }
-               override public function addPEMCertificate(name:String,subject:String,pem:String):void {
-                       throw new Error("Cannot add certificates to the Root CA store.");
-               }
-               override public function addCertificate(cert:X509Certificate):void {
-                       throw new Error("Cannot add certificates to the Root CA store.");
-               }
-       }
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509Certificate.as
deleted file mode 100755 (executable)
index db4ea1c..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/**\r
- * X509Certificate\r
- * \r
- * A representation for a X509 Certificate, with\r
- * methods to parse, verify and sign it.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.cert {\r
-       import com.hurlant.crypto.hash.IHash;\r
-       import com.hurlant.crypto.hash.MD2;\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.crypto.hash.SHA1;\r
-       import com.hurlant.crypto.rsa.RSAKey;\r
-       import com.hurlant.util.ArrayUtil;\r
-       import com.hurlant.util.Base64;\r
-       import com.hurlant.util.der.ByteString;\r
-       import com.hurlant.util.der.DER;\r
-       import com.hurlant.util.der.OID;\r
-       import com.hurlant.util.der.ObjectIdentifier;\r
-       import com.hurlant.util.der.PEM;\r
-       import com.hurlant.util.der.PrintableString;\r
-       import com.hurlant.util.der.Sequence;\r
-       import com.hurlant.util.der.Type;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class X509Certificate {\r
-               private var _loaded:Boolean;\r
-               private var _param:*;\r
-               private var _obj:Object;\r
-               public function X509Certificate(p:*) {\r
-                       _loaded = false;\r
-                       _param = p;\r
-                       // lazy initialization, to avoid unnecessary parsing of every builtin CA at start-up.\r
-               }\r
-               private function load():void {\r
-                       if (_loaded) return;\r
-                       var p:* = _param;\r
-                       var b:ByteArray;\r
-                       if (p is String) {\r
-                               b = PEM.readCertIntoArray(p as String);\r
-                       } else if (p is ByteArray) {\r
-                               b = p;\r
-                       }\r
-                       if (b!=null) {\r
-                               _obj = DER.parse(b, Type.TLS_CERT);\r
-                               _loaded = true;\r
-                       } else {\r
-                               throw new Error("Invalid x509 Certificate parameter: "+p);\r
-                       }\r
-               }\r
-               public function isSigned(store:X509CertificateCollection, CAs:X509CertificateCollection, time:Date=null):Boolean {\r
-                       load();\r
-                       // check timestamps first. cheapest.\r
-                       if (time==null) {\r
-                               time = new Date;\r
-                       }\r
-                       var notBefore:Date = getNotBefore();\r
-                       var notAfter:Date = getNotAfter();\r
-                       if (time.getTime()<notBefore.getTime()) return false; // cert isn't born yet.\r
-                       if (time.getTime()>notAfter.getTime()) return false;  // cert died of old age.\r
-                       // check signature.\r
-                       var subject:String = getIssuerPrincipal();\r
-                       // try from CA first, since they're treated better.\r
-                       var parent:X509Certificate = CAs.getCertificate(subject);\r
-                       var parentIsAuthoritative:Boolean = false;\r
-                       if (parent == null) {\r
-                               parent = store.getCertificate(subject);\r
-                               if (parent == null) {\r
-                                       return false; // issuer not found\r
-                               }\r
-                       } else {\r
-                               parentIsAuthoritative = true;\r
-                       }\r
-                       if (parent == this) { // pathological case. avoid infinite loop\r
-                               return false; // isSigned() returns false if we're self-signed.\r
-                       }\r
-                       if (!(parentIsAuthoritative&&parent.isSelfSigned(time)) &&\r
-                               !parent.isSigned(store, CAs, time)) {\r
-                               return false;\r
-                       }\r
-                       var key:RSAKey = parent.getPublicKey();\r
-                       return verifyCertificate(key);\r
-               }\r
-               public function isSelfSigned(time:Date):Boolean {\r
-                       load();\r
-                       \r
-                       var key:RSAKey = getPublicKey();\r
-                       return verifyCertificate(key);\r
-               }\r
-               private function verifyCertificate(key:RSAKey):Boolean {\r
-                       var algo:String = getAlgorithmIdentifier();\r
-                       var hash:IHash;\r
-                       var oid:String;\r
-                       switch (algo) {\r
-                               case OID.SHA1_WITH_RSA_ENCRYPTION:\r
-                                       hash = new SHA1;\r
-                                       oid = OID.SHA1_ALGORITHM;\r
-                                       break;\r
-                               case OID.MD2_WITH_RSA_ENCRYPTION:\r
-                                       hash = new MD2;\r
-                                       oid = OID.MD2_ALGORITHM;\r
-                                       break;\r
-                               case OID.MD5_WITH_RSA_ENCRYPTION:\r
-                                       hash = new MD5;\r
-                                       oid = OID.MD5_ALGORITHM;\r
-                                       break;\r
-                               default:\r
-                                       return false;\r
-                       }\r
-                       var data:ByteArray = _obj.signedCertificate_bin;\r
-                       var buf:ByteArray = new ByteArray;\r
-                       key.verify(_obj.encrypted, buf, _obj.encrypted.length);\r
-                       buf.position=0;\r
-                       data = hash.hash(data);\r
-                       var obj:Object = DER.parse(buf, Type.RSA_SIGNATURE);\r
-                       if (obj.algorithm.algorithmId.toString() != oid) {\r
-                               return false; // wrong algorithm\r
-                       }\r
-                       if (!ArrayUtil.equals(obj.hash, data)) {\r
-                               return false; // hashes don't match\r
-                       }\r
-                       return true;\r
-               }\r
-               \r
-               /**\r
-                * This isn't used anywhere so far.\r
-                * It would become useful if we started to offer facilities\r
-                * to generate and sign X509 certificates.\r
-                * \r
-                * @param key\r
-                * @param algo\r
-                * @return \r
-                * \r
-                */\r
-               private function signCertificate(key:RSAKey, algo:String):ByteArray {\r
-                       var hash:IHash;\r
-                       var oid:String;\r
-                       switch (algo) {\r
-                               case OID.SHA1_WITH_RSA_ENCRYPTION:\r
-                                       hash = new SHA1;\r
-                                       oid = OID.SHA1_ALGORITHM;\r
-                                       break;\r
-                               case OID.MD2_WITH_RSA_ENCRYPTION:\r
-                                       hash = new MD2;\r
-                                       oid = OID.MD2_ALGORITHM;\r
-                                       break;\r
-                               case OID.MD5_WITH_RSA_ENCRYPTION:\r
-                                       hash = new MD5;\r
-                                       oid = OID.MD5_ALGORITHM;\r
-                                       break;\r
-                               default:\r
-                                       return null\r
-                       }\r
-                       var data:ByteArray = _obj.signedCertificate_bin;\r
-                       data = hash.hash(data);\r
-                       var seq1:Sequence = new Sequence;\r
-                       seq1[0] = new Sequence;\r
-                       seq1[0][0] = new ObjectIdentifier(0,0, oid);\r
-                       seq1[0][1] = null;\r
-                       seq1[1] = new ByteString;\r
-                       seq1[1].writeBytes(data);\r
-                       data = seq1.toDER();\r
-                       var buf:ByteArray = new ByteArray;\r
-                       key.sign(data, buf, data.length);\r
-                       return buf;\r
-               }\r
-               \r
-               public function getPublicKey():RSAKey {\r
-                       load();\r
-                       var pk:ByteArray = _obj.signedCertificate.subjectPublicKeyInfo.subjectPublicKey as ByteArray;\r
-                       pk.position = 0;\r
-                       var rsaKey:Object = DER.parse(pk, [{name:"N"},{name:"E"}]);\r
-                       return new RSAKey(rsaKey.N, rsaKey.E.valueOf());\r
-               }\r
-               \r
-               /**\r
-                * Returns a subject principal, as an opaque base64 string.\r
-                * This is only used as a hash key for known certificates.\r
-                * \r
-                * Note that this assumes X509 DER-encoded certificates are uniquely encoded,\r
-                * as we look for exact matches between Issuer and Subject fields.\r
-                * \r
-                */\r
-               public function getSubjectPrincipal():String {\r
-                       load();\r
-                       return Base64.encodeByteArray(_obj.signedCertificate.subject_bin);\r
-               }\r
-               /**\r
-                * Returns an issuer principal, as an opaque base64 string.\r
-                * This is only used to quickly find matching parent certificates.\r
-                * \r
-                * Note that this assumes X509 DER-encoded certificates are uniquely encoded,\r
-                * as we look for exact matches between Issuer and Subject fields.\r
-                * \r
-                */\r
-               public function getIssuerPrincipal():String {\r
-                       load();\r
-                       return Base64.encodeByteArray(_obj.signedCertificate.issuer_bin);\r
-               }\r
-               public function getAlgorithmIdentifier():String {\r
-                       return _obj.algorithmIdentifier.algorithmId.toString();\r
-               }\r
-               public function getNotBefore():Date {\r
-                       return _obj.signedCertificate.validity.notBefore.date;\r
-               }\r
-               public function getNotAfter():Date {\r
-                       return _obj.signedCertificate.validity.notAfter.date;\r
-               }\r
-               \r
-               public function getCommonName():String {\r
-                       var subject:Sequence = _obj.signedCertificate.subject;\r
-                       return (subject.findAttributeValue(OID.COMMON_NAME) as PrintableString).getString();\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/cert/X509CertificateCollection.as
deleted file mode 100755 (executable)
index db11e40..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/**\r
- * X509CertificateCollection\r
- * \r
- * A class to store and index X509 Certificates by Subject.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.cert {\r
-       \r
-       public class X509CertificateCollection {\r
-               \r
-               private var _map:Object;\r
-               \r
-               public function X509CertificateCollection() {\r
-                       _map = {};\r
-               }\r
-               \r
-               /**\r
-                * Mostly meant for built-in CA loading.\r
-                * This entry-point allows to index CAs without parsing them.\r
-                * \r
-                * @param name          A friendly name. not currently used\r
-                * @param subject       base64 DER encoded Subject principal for the Cert\r
-                * @param pem           PEM encoded certificate data\r
-                * \r
-                */\r
-               public function addPEMCertificate(name:String, subject:String, pem:String):void {\r
-                       _map[subject] = new X509Certificate(pem);\r
-               }\r
-               \r
-               /**\r
-                * Adds a X509 certificate to the collection.\r
-                * This call will force the certificate to be parsed.\r
-                * \r
-                * @param cert          A X509 certificate\r
-                * \r
-                */\r
-               public function addCertificate(cert:X509Certificate):void {\r
-                       var subject:String = cert.getSubjectPrincipal();\r
-                       _map[subject] = cert;\r
-               }\r
-               \r
-               /**\r
-                * Returns a X509 Certificate present in the collection, given\r
-                * a base64 DER encoded X500 Subject principal\r
-                * \r
-                * @param subject       A Base64 DER-encoded Subject principal\r
-                * @return                      A matching certificate, or null.\r
-                * \r
-                */\r
-               public function getCertificate(subject:String):X509Certificate {\r
-                       return _map[subject];\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/HMAC.as
deleted file mode 100644 (file)
index 8215afc..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/**\r
- * HMAC\r
- * \r
- * An ActionScript 3 implementation of HMAC, Keyed-Hashing for Message\r
- * Authentication, as defined by RFC-2104\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       public class HMAC implements IHMAC\r
-       {\r
-               private var hash:IHash;\r
-               private var bits:uint;\r
-               \r
-               /**\r
-                * Create a HMAC object, using a Hash function, and \r
-                * optionally a number of bits to return. \r
-                * The HMAC will be truncated to that size if needed.\r
-                */\r
-               public function HMAC(hash:IHash, bits:uint=0) {\r
-                       this.hash = hash;\r
-                       this.bits = bits;\r
-               }\r
-               \r
-\r
-               public function getHashSize():uint {\r
-                       if (bits!=0) {\r
-                               return bits/8;\r
-                       } else {\r
-                               return hash.getHashSize();\r
-                       }\r
-               }\r
-               \r
-               /**\r
-                * Compute a HMAC using a key and some data.\r
-                * It doesn't modify either, and returns a new ByteArray with the HMAC value.\r
-                */\r
-               public function compute(key:ByteArray, data:ByteArray):ByteArray {\r
-                       var hashKey:ByteArray;\r
-                       if (key.length>hash.getInputSize()) {\r
-                               hashKey = hash.hash(key);\r
-                       } else {\r
-                               hashKey = new ByteArray;\r
-                               hashKey.writeBytes(key);\r
-                       }\r
-                       while (hashKey.length<hash.getInputSize()) {\r
-                               hashKey[hashKey.length]=0;\r
-                       }\r
-                       var innerKey:ByteArray = new ByteArray;\r
-                       var outerKey:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<hashKey.length;i++) {\r
-                               innerKey[i] = hashKey[i] ^ 0x36;\r
-                               outerKey[i] = hashKey[i] ^ 0x5c;\r
-                       }\r
-                       // inner + data\r
-                       innerKey.position = hashKey.length;\r
-                       innerKey.writeBytes(data);\r
-                       var innerHash:ByteArray = hash.hash(innerKey);\r
-                       // outer + innerHash\r
-                       outerKey.position = hashKey.length;\r
-                       outerKey.writeBytes(innerHash);\r
-                       var outerHash:ByteArray = hash.hash(outerKey);\r
-                       if (bits>0 && bits<8*outerHash.length) {\r
-                               outerHash.length = bits/8;\r
-                       }\r
-                       return outerHash;\r
-               }\r
-               public function dispose():void {\r
-                       hash = null;\r
-                       bits = 0;\r
-               }\r
-               public function toString():String {\r
-                       return "hmac-"+(bits>0?bits+"-":"")+hash.toString();\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHMAC.as
deleted file mode 100755 (executable)
index f0ee063..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/**\r
- * HMAC\r
- * \r
- * An ActionScript 3 interface for HMAC & MAC \r
- * implementations.\r
- * \r
- * Loosely copyrighted by Bobby Parker\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public interface IHMAC \r
-       {\r
-               function getHashSize():uint;\r
-               /**\r
-                * Compute a HMAC using a key and some data.\r
-                * It doesn't modify either, and returns a new ByteArray with the HMAC value.\r
-                */\r
-               function compute(key:ByteArray, data:ByteArray):ByteArray;\r
-               function dispose():void;\r
-               function toString():String;\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/IHash.as
deleted file mode 100644 (file)
index 32c5321..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/**\r
- * IHash\r
- * \r
- * An interface for each hash function to implement\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       import flash.utils.ByteArray;\r
-\r
-       public interface IHash\r
-       {\r
-               function getInputSize():uint;\r
-               function getHashSize():uint;\r
-               function hash(src:ByteArray):ByteArray;\r
-               function toString():String;\r
-               function getPadSize():int;\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MAC.as
deleted file mode 100755 (executable)
index 0815d6c..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/**\r
- * MAC\r
- * \r
- * An ActionScript 3 implementation of MAC, Message Authentication Code\r
- * for use with SSL 3.0.\r
- * Loosely copyrighted by Bobby Parker.\r
- * As3crypto copyrighted by Henri Torgemane.\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       public class MAC implements IHMAC\r
-       {\r
-               private var hash:IHash;\r
-               private var bits:uint;\r
-               private var pad_1:ByteArray;\r
-               private var pad_2:ByteArray;\r
-               private var innerHash:ByteArray;\r
-               private var outerHash:ByteArray;\r
-               private var outerKey:ByteArray;\r
-               private var innerKey:ByteArray;\r
-               /**\r
-                * Create a MAC object (for SSL 3.0 ) and \r
-                * optionally a number of bits to return. \r
-                * The MAC will be truncated to that size if needed.\r
-                */\r
-               public function MAC(hash:IHash, bits:uint=0) {\r
-                       this.hash = hash;\r
-                       this.bits = bits;\r
-                       innerHash = new ByteArray();\r
-                       outerHash = new ByteArray();\r
-                       innerKey = new ByteArray();\r
-                       outerKey = new ByteArray();\r
-\r
-\r
-                       if (hash != null) { \r
-                               var pad_size:int = hash.getPadSize();\r
-                               pad_1 = new ByteArray();\r
-                               pad_2 = new ByteArray();\r
-                       \r
-                               for (var x:int = 0; x < pad_size; x++) {\r
-                                       pad_1.writeByte(0x36);\r
-                                       pad_2.writeByte(0x5c);\r
-                               }\r
-                       }\r
-               }\r
-               \r
-               public function setPadSize(pad_size:int) : void {       }\r
-               \r
-               public function getHashSize():uint {\r
-                       if (bits!=0) {\r
-                               return bits/8;\r
-                       } else {\r
-                               return hash.getHashSize();\r
-                       }\r
-               }\r
-               \r
-               \r
-               /**\r
-                * Compute a MAC using a key and some data.\r
-                * \r
-                */ \r
-               public function compute(key:ByteArray, data:ByteArray):ByteArray {\r
-                       // take that incoming key and do hash(key + pad_2 + hash(key + pad_1 + sequence + length + record)\r
-                       // note that data =  (sequence + type + length + record)\r
-\r
-                       if (pad_1 == null) {\r
-                               var pad_size:int = hash.getPadSize();\r
-                               pad_1 = new ByteArray();\r
-                               pad_2 = new ByteArray();\r
-                       \r
-                               for (var x:int = 0; x < pad_size; x++) {\r
-                                       pad_1.writeByte(0x36);\r
-                                       pad_2.writeByte(0x5c);\r
-                               }\r
-                       }\r
-                       \r
-                       // Do some preliminary checking on stuff\r
-                       /* \r
-                       if (key.length > hash.getInputSize()) {\r
-                               hashKey = hash.hash(key); \r
-                       } else {\r
-                               hashKey = new ByteArray;\r
-                               hashKey.writeBytes(key); \r
-                       }\r
-                       \r
-                       while (hashKey.length < hash.getInputSize() ) {\r
-                               hashKey[hashKey.length] = 0;\r
-                       } */\r
-                       // Henri's conventions work just fine here..\r
-                       \r
-                       innerKey.length = 0;\r
-                       outerKey.length = 0;\r
-                       // trace("MAC Key: " + Hex.fromArray(key));\r
-                       // trace("Key Length: " + key.length);\r
-                       // trace("Pad_1 : " + Hex.fromArray(pad_1));\r
-                       // inner hash calc\r
-                       innerKey.writeBytes(key);\r
-                       innerKey.writeBytes(pad_1);\r
-                       innerKey.writeBytes(data);\r
-                       // trace("MAC Inner Key: " + Hex.fromArray(innerKey));\r
-                       \r
-                       innerHash = hash.hash(innerKey);\r
-                       // trace("MAC Inner Hash: " + Hex.fromArray(innerHash));\r
-                       \r
-                       // outer hash calc                      \r
-                       outerKey.writeBytes(key);\r
-                       outerKey.writeBytes(pad_2);\r
-                       outerKey.writeBytes(innerHash);\r
-                       \r
-                       // trace("MAC Outer Key: " + Hex.fromArray(outerKey));\r
-                       outerHash = hash.hash(outerKey);\r
-                       \r
-                       \r
-                       if (bits > 0 && bits < 8*outerHash.length) {\r
-                               outerHash.length = bits/8;\r
-                       }\r
-                       \r
-                       // trace("MAC for record: " + Hex.fromArray(outerHash));                        \r
-                       return outerHash;\r
-\r
-               }\r
-               \r
-               public function dispose():void {\r
-                       hash = null;\r
-                       bits = 0;\r
-               }\r
-               public function toString():String {\r
-                       return "mac-"+(bits>0?bits+"-":"")+hash.toString();\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD2.as
deleted file mode 100644 (file)
index e104f0d..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/**\r
- * MD2\r
- * \r
- * An ActionScript 3 implementation of the RSA Data Security, Inc MD2 Message\r
- * Digest Algorithm, as defined in RFC 1319\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- * \r
- * Excerpt from http://en.wikipedia.org/wiki/MD2:\r
- * > \r
- * > Rogier and Chauvaud (1997) described collisions of MD2's compression function,\r
- * > although they were unable to extend the attack to the full MD2.\r
- * > \r
- * > In 2004, MD2 was shown to be vulnerable to a preimage attack with time \r
- * > complexity equivalent to 2104 applications of the compression function \r
- * > (Muller, 2004). \r
- * > The author concludes, "MD2 can no longer be considered a secure one-way \r
- * > hash function".\r
- * \r
- * also, this implementaton is quite slow.\r
- */\r
-\r
-package com.hurlant.crypto.hash\r
-{\r
-       import flash.utils.ByteArray;\r
-\r
-       public class MD2 implements IHash\r
-       {\r
-               public static const HASH_SIZE:int = 16;\r
-               public var pad_size:int = 48; // probably will never get used, only here for SSL 3.0 support\r
-               \r
-               private static const S:Array = [ // PI Digits\r
- 41,  46,  67, 201, 162, 216, 124,   1,  61,  54,  84, 161, 236, 240,   6,  19,\r
- 98, 167,   5, 243, 192, 199, 115, 140, 152, 147,  43, 217, 188,  76, 130, 202,\r
- 30, 155,  87,  60, 253, 212, 224,  22, 103,  66, 111,  24, 138,  23, 229,  18,\r
-190,  78, 196, 214, 218, 158, 222,  73, 160, 251, 245, 142, 187,  47, 238, 122,\r
-169, 104, 121, 145,  21, 178,   7,  63, 148, 194,  16, 137,  11,  34,  95,  33,\r
-128, 127,  93, 154,  90, 144,  50,  39,  53,  62, 204, 231, 191, 247, 151,   3,\r
-255,  25,  48, 179,  72, 165, 181, 209, 215,  94, 146,  42, 172,  86, 170, 198,\r
- 79, 184,  56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116,   4, 241,\r
- 69, 157, 112,  89, 100, 113, 135,  32, 134,  91, 207, 101, 230,  45, 168,   2,\r
- 27,  96,  37, 173, 174, 176, 185, 246,  28,  70,  97, 105,  52,  64, 126,  15,\r
- 85,  71, 163,  35, 221,  81, 175,  58, 195,  92, 249, 206, 186, 197, 234,  38,\r
- 44,  83,  13, 110, 133,  40, 132,   9, 211, 223, 205, 244,  65, 129,  77,  82,\r
-106, 220,  55, 200, 108, 193, 171, 250,  36, 225, 123,   8,  12, 189, 177,  74,\r
-120, 136, 149, 139, 227,  99, 232, 109, 233, 203, 213, 254,  59,   0,  29,  57,\r
-242, 239, 183,  14, 102,  88, 208, 228, 166, 119, 114, 248, 235, 117,  75,  10,\r
- 49,  68,  80, 180, 143, 237,  31,  26, 219, 153, 141,  51, 159,  17, 131,  20 ];\r
-               \r
-\r
-        public function MD2() { }\r
-\r
-               public function getInputSize():uint\r
-               {\r
-                       return 16;\r
-               }\r
-               \r
-               public function getPadSize():int {\r
-                       return pad_size;\r
-               }\r
-               \r
-               public function getHashSize():uint\r
-               {\r
-                       return HASH_SIZE;\r
-               }\r
-               \r
-               public function hash(src:ByteArray):ByteArray\r
-               {\r
-                       var savedLength:uint = src.length;\r
-                       \r
-                       // 3.1 Step 1. Padding\r
-                       var i:uint = (16-src.length%16) || 16;\r
-                       do {\r
-                               src[src.length]=i;\r
-                       } while (src.length%16!=0);\r
-                       \r
-                       // 3.2 Step 2. Checksum\r
-                       var len:uint = src.length;\r
-                       var checksum:ByteArray = new ByteArray;\r
-                       var L:uint = 0;\r
-                       for (i = 0;i<len;i+=16) {\r
-                               for (var j:uint=0;j<16;j++) {\r
-                                       L = checksum[j] ^= S[src[i+j] ^ L];\r
-                               }\r
-                       }\r
-                       src.position = src.length;\r
-                       src.writeBytes(checksum);\r
-                       len += 16;\r
-                       \r
-                       // 3.3 Step 3. MD Buffer\r
-                       var X:ByteArray = new ByteArray;\r
-\r
-                       // 3.4 Process Message\r
-                       for (i=0;i<len;i+=16) {\r
-                               \r
-                               /* Copy block i into X */\r
-                               for (j=0;j<16;j++) {\r
-                                       X[32+j] = (X[16+j] = src[i+j])^X[j];\r
-                               }\r
-                               var t:uint=0;\r
-                               /* Do 18 rounds */\r
-                               for (j=0;j<18;j++) {\r
-                                       /* Round j. */\r
-                                       for (var k:uint=0;k<48;k++) {\r
-                                               X[k] = t = X[k]^S[t];\r
-                                       }\r
-                                       t = (t+j)&0xff;\r
-                               }\r
-                       }\r
-                       // 3.5 Step 5. Output\r
-                       X.length = 16;\r
-                       // restore original length;\r
-                       src.length = savedLength;\r
-                       return X;\r
-               }\r
-               \r
-               public function toString():String\r
-               {\r
-                       return "md2";\r
-               }\r
-               \r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/MD5.as
deleted file mode 100644 (file)
index 81836ed..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/**\r
- * MD5\r
- * \r
- * An ActionScript 3 implementation of the RSA Data Security, Inc. MD5 Message\r
- * Digest Algorithm, as defined in RFC 1321.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from\r
- *             A JavaScript implementation of the same.\r
- *             Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\r
- *             Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r
- * \r
- * Note:\r
- * This algorithm should not be your first choice for new developements, but is\r
- * included to allow interoperability with existing codes and protocols.\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       import flash.utils.ByteArray;\r
-       import flash.utils.Endian;\r
-\r
-       public class MD5 implements IHash\r
-       {\r
-               public static const HASH_SIZE:int = 16;\r
-               public var pad_size:int = 48;\r
-\r
-        public function MD5() { }\r
-               \r
-               public function getInputSize():uint\r
-               {\r
-                       return 64;\r
-               }\r
-               \r
-               public function getHashSize():uint\r
-               {\r
-                       return HASH_SIZE;\r
-               }\r
-               \r
-               public function getPadSize():int \r
-               {\r
-                       return pad_size;\r
-               }\r
-               \r
-               public function hash(src:ByteArray):ByteArray\r
-               {\r
-                       var len:uint = src.length *8;\r
-                       var savedEndian:String = src.endian;\r
-                       // pad to nearest int.\r
-                       while (src.length%4!=0) {\r
-                               src[src.length]=0;\r
-                       }\r
-                       // convert ByteArray to an array of uint\r
-                       src.position=0;\r
-                       var a:Array = [];\r
-                       src.endian=Endian.LITTLE_ENDIAN\r
-                       for (var i:uint=0;i<src.length;i+=4) {\r
-                               a.push(src.readUnsignedInt());\r
-                       }\r
-                       var h:Array = core_md5(a, len);\r
-                       var out:ByteArray = new ByteArray;\r
-                       out.endian=Endian.LITTLE_ENDIAN;\r
-                       for (i=0;i<4;i++) {\r
-                               out.writeUnsignedInt(h[i]);\r
-                       }\r
-                       // restore length!\r
-                       src.length = len/8;\r
-                       src.endian = savedEndian;\r
-                       \r
-                       return out;\r
-               }\r
-               \r
-               private function core_md5(x:Array, len:uint):Array {\r
-                 /* append padding */\r
-                 x[len >> 5] |= 0x80 << ((len) % 32);\r
-                 x[(((len + 64) >>> 9) << 4) + 14] = len;\r
-\r
-                 var a:uint = 0x67452301; // 1732584193;\r
-                 var b:uint = 0xEFCDAB89; //-271733879;\r
-                 var c:uint = 0x98BADCFE; //-1732584194;\r
-                 var d:uint = 0x10325476; // 271733878;\r
-\r
-                 for(var i:uint = 0; i < x.length; i += 16)\r
-                 {\r
-                       x[i]||=0;    x[i+1]||=0;  x[i+2]||=0;  x[i+3]||=0;\r
-                       x[i+4]||=0;  x[i+5]||=0;  x[i+6]||=0;  x[i+7]||=0;\r
-                       x[i+8]||=0;  x[i+9]||=0;  x[i+10]||=0; x[i+11]||=0;\r
-                       x[i+12]||=0; x[i+13]||=0; x[i+14]||=0; x[i+15]||=0;\r
-\r
-                   var olda:uint = a;\r
-                   var oldb:uint = b;\r
-                   var oldc:uint = c;\r
-                   var oldd:uint = d;\r
-                   \r
-                   a = ff(a, b, c, d, x[i+ 0], 7 , 0xD76AA478);\r
-                   d = ff(d, a, b, c, x[i+ 1], 12, 0xE8C7B756);\r
-                   c = ff(c, d, a, b, x[i+ 2], 17, 0x242070DB);\r
-                   b = ff(b, c, d, a, x[i+ 3], 22, 0xC1BDCEEE);\r
-                   a = ff(a, b, c, d, x[i+ 4], 7 , 0xF57C0FAF);\r
-                   d = ff(d, a, b, c, x[i+ 5], 12, 0x4787C62A);\r
-                   c = ff(c, d, a, b, x[i+ 6], 17, 0xA8304613);\r
-                   b = ff(b, c, d, a, x[i+ 7], 22, 0xFD469501);\r
-                   a = ff(a, b, c, d, x[i+ 8], 7 , 0x698098D8);\r
-                   d = ff(d, a, b, c, x[i+ 9], 12, 0x8B44F7AF);\r
-                   c = ff(c, d, a, b, x[i+10], 17, 0xFFFF5BB1);\r
-                   b = ff(b, c, d, a, x[i+11], 22, 0x895CD7BE);\r
-                   a = ff(a, b, c, d, x[i+12], 7 , 0x6B901122);\r
-                   d = ff(d, a, b, c, x[i+13], 12, 0xFD987193);\r
-                   c = ff(c, d, a, b, x[i+14], 17, 0xA679438E);\r
-                   b = ff(b, c, d, a, x[i+15], 22, 0x49B40821);\r
-\r
-                   a = gg(a, b, c, d, x[i+ 1], 5 , 0xf61e2562);\r
-                   d = gg(d, a, b, c, x[i+ 6], 9 , 0xc040b340);\r
-                   c = gg(c, d, a, b, x[i+11], 14, 0x265e5a51);\r
-                   b = gg(b, c, d, a, x[i+ 0], 20, 0xe9b6c7aa);\r
-                   a = gg(a, b, c, d, x[i+ 5], 5 , 0xd62f105d);\r
-                   d = gg(d, a, b, c, x[i+10], 9 ,  0x2441453);\r
-                   c = gg(c, d, a, b, x[i+15], 14, 0xd8a1e681);\r
-                   b = gg(b, c, d, a, x[i+ 4], 20, 0xe7d3fbc8);\r
-                   a = gg(a, b, c, d, x[i+ 9], 5 , 0x21e1cde6);\r
-                   d = gg(d, a, b, c, x[i+14], 9 , 0xc33707d6);\r
-                   c = gg(c, d, a, b, x[i+ 3], 14, 0xf4d50d87);\r
-                   b = gg(b, c, d, a, x[i+ 8], 20, 0x455a14ed);\r
-                   a = gg(a, b, c, d, x[i+13], 5 , 0xa9e3e905);\r
-                   d = gg(d, a, b, c, x[i+ 2], 9 , 0xfcefa3f8);\r
-                   c = gg(c, d, a, b, x[i+ 7], 14, 0x676f02d9);\r
-                   b = gg(b, c, d, a, x[i+12], 20, 0x8d2a4c8a);\r
-\r
-                   a = hh(a, b, c, d, x[i+ 5], 4 , 0xfffa3942);\r
-                   d = hh(d, a, b, c, x[i+ 8], 11, 0x8771f681);\r
-                   c = hh(c, d, a, b, x[i+11], 16, 0x6d9d6122);\r
-                   b = hh(b, c, d, a, x[i+14], 23, 0xfde5380c);\r
-                   a = hh(a, b, c, d, x[i+ 1], 4 , 0xa4beea44);\r
-                   d = hh(d, a, b, c, x[i+ 4], 11, 0x4bdecfa9);\r
-                   c = hh(c, d, a, b, x[i+ 7], 16, 0xf6bb4b60);\r
-                   b = hh(b, c, d, a, x[i+10], 23, 0xbebfbc70);\r
-                   a = hh(a, b, c, d, x[i+13], 4 , 0x289b7ec6);\r
-                   d = hh(d, a, b, c, x[i+ 0], 11, 0xeaa127fa);\r
-                   c = hh(c, d, a, b, x[i+ 3], 16, 0xd4ef3085);\r
-                   b = hh(b, c, d, a, x[i+ 6], 23,  0x4881d05);\r
-                   a = hh(a, b, c, d, x[i+ 9], 4 , 0xd9d4d039);\r
-                   d = hh(d, a, b, c, x[i+12], 11, 0xe6db99e5);\r
-                   c = hh(c, d, a, b, x[i+15], 16, 0x1fa27cf8);\r
-                   b = hh(b, c, d, a, x[i+ 2], 23, 0xc4ac5665);\r
-               \r
-                   a = ii(a, b, c, d, x[i+ 0], 6 , 0xf4292244);\r
-                   d = ii(d, a, b, c, x[i+ 7], 10, 0x432aff97);\r
-                   c = ii(c, d, a, b, x[i+14], 15, 0xab9423a7);\r
-                   b = ii(b, c, d, a, x[i+ 5], 21, 0xfc93a039);\r
-                   a = ii(a, b, c, d, x[i+12], 6 , 0x655b59c3);\r
-                   d = ii(d, a, b, c, x[i+ 3], 10, 0x8f0ccc92);\r
-                   c = ii(c, d, a, b, x[i+10], 15, 0xffeff47d);\r
-                   b = ii(b, c, d, a, x[i+ 1], 21, 0x85845dd1);\r
-                   a = ii(a, b, c, d, x[i+ 8], 6 , 0x6fa87e4f);\r
-                   d = ii(d, a, b, c, x[i+15], 10, 0xfe2ce6e0);\r
-                   c = ii(c, d, a, b, x[i+ 6], 15, 0xa3014314);\r
-                   b = ii(b, c, d, a, x[i+13], 21, 0x4e0811a1);\r
-                   a = ii(a, b, c, d, x[i+ 4], 6 , 0xf7537e82);\r
-                   d = ii(d, a, b, c, x[i+11], 10, 0xbd3af235);\r
-                   c = ii(c, d, a, b, x[i+ 2], 15, 0x2ad7d2bb);\r
-                   b = ii(b, c, d, a, x[i+ 9], 21, 0xeb86d391);\r
-               \r
-                       a += olda;\r
-                       b += oldb;\r
-                       c += oldc;\r
-                       d += oldd;\r
-                       \r
-                 }\r
-                 return [ a, b, c, d ];\r
-               }\r
-\r
-               /*\r
-                * Bitwise rotate a 32-bit number to the left.\r
-                */\r
-               private function rol(num:uint, cnt:uint):uint\r
-               {\r
-                 return (num << cnt) | (num >>> (32 - cnt));\r
-               }\r
-\r
-               /*\r
-                * These functions implement the four basic operations the algorithm uses.\r
-                */\r
-               private function cmn(q:uint, a:uint, b:uint, x:uint, s:uint, t:uint):uint {\r
-                 return rol(a + q + x + t, s) + b;\r
-               }\r
-               private function ff(a:uint, b:uint, c:uint, d:uint, x:uint, s:uint, t:uint):uint {\r
-                 return cmn((b & c) | ((~b) & d), a, b, x, s, t);\r
-               }\r
-               private function gg(a:uint, b:uint, c:uint, d:uint, x:uint, s:uint, t:uint):uint {\r
-                 return cmn((b & d) | (c & (~d)), a, b, x, s, t);\r
-               }\r
-               private function hh(a:uint, b:uint, c:uint, d:uint, x:uint, s:uint, t:uint):uint {\r
-                 return cmn(b ^ c ^ d, a, b, x, s, t);\r
-               }\r
-               private function ii(a:uint, b:uint, c:uint, d:uint, x:uint, s:uint, t:uint):uint {\r
-                 return cmn(c ^ (b | (~d)), a, b, x, s, t);\r
-               }\r
-\r
-               public function toString():String {\r
-                       return "md5";\r
-               }\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA1.as
deleted file mode 100644 (file)
index 5b186f3..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/**\r
- * SHA1\r
- * \r
- * An ActionScript 3 implementation of Secure Hash Algorithm, SHA-1, as defined\r
- * in FIPS PUB 180-1\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\r
- *             in FIPS PUB 180-1\r
- *             Version 2.1a Copyright Paul Johnston 2000 - 2002.\r
- *             Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       \r
-\r
-       public class SHA1 extends SHABase implements IHash\r
-       {\r
-               public static const HASH_SIZE:int = 20;\r
-               \r
-               public override function getHashSize():uint {\r
-                       return HASH_SIZE;\r
-               }\r
-               \r
-               protected override function core(x:Array, len:uint):Array\r
-               {\r
-                 /* append padding */\r
-                 x[len >> 5] |= 0x80 << (24 - len % 32);\r
-                 x[((len + 64 >> 9) << 4) + 15] = len;\r
-               \r
-                 var w:Array = [];\r
-                 var a:uint =  0x67452301; //1732584193;\r
-                 var b:uint = 0xEFCDAB89; //-271733879;\r
-                 var c:uint = 0x98BADCFE; //-1732584194;\r
-                 var d:uint = 0x10325476; //271733878;\r
-                 var e:uint = 0xC3D2E1F0; //-1009589776;\r
-               \r
-                 for(var i:uint = 0; i < x.length; i += 16)\r
-                 {\r
-                       \r
-                   var olda:uint = a;\r
-                   var oldb:uint = b;\r
-                   var oldc:uint = c;\r
-                   var oldd:uint = d;\r
-                   var olde:uint = e;\r
-               \r
-                   for(var j:uint = 0; j < 80; j++)\r
-                   {\r
-                     if (j < 16) {\r
-                       w[j] = x[i + j] || 0;\r
-                     } else {\r
-                       w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);\r
-                     }\r
-                     var t:uint = rol(a,5) + ft(j,b,c,d) + e + w[j] + kt(j);\r
-                     e = d;\r
-                     d = c;\r
-                     c = rol(b, 30);\r
-                     b = a;\r
-                     a = t;\r
-                   }\r
-                       a += olda;\r
-                       b += oldb;\r
-                       c += oldc;\r
-                       d += oldd;\r
-                       e += olde;\r
-                 }\r
-                 return [ a, b, c, d, e ];\r
-               \r
-               }\r
-               \r
-               /*\r
-                * Bitwise rotate a 32-bit number to the left.\r
-                */\r
-               private function rol(num:uint, cnt:uint):uint\r
-               {\r
-                 return (num << cnt) | (num >>> (32 - cnt));\r
-               }\r
-               \r
-               /*\r
-                * Perform the appropriate triplet combination function for the current\r
-                * iteration\r
-                */\r
-               private function ft(t:uint, b:uint, c:uint, d:uint):uint\r
-               {\r
-                 if(t < 20) return (b & c) | ((~b) & d);\r
-                 if(t < 40) return b ^ c ^ d;\r
-                 if(t < 60) return (b & c) | (b & d) | (c & d);\r
-                 return b ^ c ^ d;\r
-               }\r
-               \r
-               /*\r
-                * Determine the appropriate additive constant for the current iteration\r
-                */\r
-               private function kt(t:uint):uint\r
-               {\r
-                 return (t < 20) ? 0x5A827999 : (t < 40) ?  0x6ED9EBA1 :\r
-                        (t < 60) ? 0x8F1BBCDC : 0xCA62C1D6;\r
-               }\r
-               public override function toString():String {\r
-                       return "sha1";\r
-               }\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA224.as
deleted file mode 100644 (file)
index 345aa3d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/**\r
- * SHA224\r
- * \r
- * An ActionScript 3 implementation of Secure Hash Algorithm, SHA-224, as defined\r
- * in FIPS PUB 180-2\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       public class SHA224 extends SHA256\r
-       {\r
-               function SHA224() {\r
-                       h = [\r
-                               0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\r
-                               0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\r
-                       ];\r
-               }\r
-               \r
-               public override function getHashSize():uint {\r
-                       return 28;\r
-               }\r
-               public override function toString():String {\r
-                       return "sha224";\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHA256.as
deleted file mode 100644 (file)
index 67bdbb4..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/**\r
- * SHA256\r
- * \r
- * An ActionScript 3 implementation of Secure Hash Algorithm, SHA-256, as defined\r
- * in FIPS PUB 180-2\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             A JavaScript implementation of the Secure Hash Standard\r
- *             Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/\r
- * Derived from:\r
- *             A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\r
- *             in FIPS PUB 180-1\r
- *             Version 2.1a Copyright Paul Johnston 2000 - 2002.\r
- *             Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       \r
-\r
-       public class SHA256 extends SHABase implements IHash\r
-       {\r
-               \r
-               protected static const k:Array = [\r
-               0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\r
-               0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\r
-               0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\r
-               0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\r
-               0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\r
-               0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\r
-               0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\r
-               0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];\r
-               protected var h:Array = [\r
-               0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\r
-               ];\r
-               \r
-               public function SHA256(){\r
-               }\r
-               \r
-               public override function getHashSize():uint\r
-               {\r
-                       return 32;\r
-               }\r
-               \r
-               protected override function core(x:Array, len:uint):Array {\r
-                       /* append padding */\r
-                       x[len >> 5] |= 0x80 << (24 - len % 32);\r
-                       x[((len + 64 >> 9) << 4) + 15] = len;\r
-               \r
-                       var w:Array = [];\r
-                       var a:uint = h[0];\r
-                       var b:uint = h[1];\r
-                       var c:uint = h[2];\r
-                       var d:uint = h[3];\r
-                       var e:uint = h[4];\r
-                       var f:uint = h[5];\r
-                       var g:uint = h[6];\r
-                       var h:uint = h[7];\r
-                       \r
-                       for (var i:uint=0; i<x.length; i+=16) {\r
-                               var olda:uint = a;\r
-                               var oldb:uint = b;\r
-                               var oldc:uint = c;\r
-                               var oldd:uint = d;\r
-                               var olde:uint = e;\r
-                               var oldf:uint = f;\r
-                               var oldg:uint = g;\r
-                               var oldh:uint = h;\r
-\r
-                               for (var j:uint=0; j<64; j++) {\r
-                                       if (j<16) {\r
-                                               w[j] = x[i+j] || 0;\r
-                                       } else {\r
-                                               var s0:uint = rrol(w[j-15],7)^rrol(w[j-15],18)^(w[j-15]>>>3);\r
-                                               var s1:uint = rrol(w[j-2], 17)^rrol(w[j-2],19)^(w[j-2]>>>10);\r
-                                               w[j] = w[j-16] + s0 + w[j-7] + s1;\r
-                                       }\r
-                                       var t2:uint = (rrol(a,2) ^ rrol(a,13) ^ rrol(a,22)) + ((a&b) ^ (a&c) ^ (b&c));\r
-                                       var t1:uint = h + (rrol(e,6) ^ rrol(e,11) ^ rrol(e,25)) + ((e&f)^(g&~e)) + k[j] + w[j]\r
-                                       h = g;\r
-                                       g = f;\r
-                                       f = e;\r
-                                       e = d + t1;\r
-                                       d = c;\r
-                                       c = b;\r
-                                       b = a;\r
-                                       a = t1 + t2;\r
-\r
-                               }\r
-                               a += olda;\r
-                               b += oldb;\r
-                               c += oldc;\r
-                               d += oldd;\r
-                               e += olde;\r
-                               f += oldf;\r
-                               g += oldg;\r
-                               h += oldh;\r
-                       }\r
-                       return [ a,b,c,d,e,f,g,h ];\r
-               }\r
-               \r
-               /*\r
-                * Bitwise rotate a 32-bit number to the right.\r
-                */\r
-               protected function rrol(num:uint, cnt:uint):uint {\r
-                 return (num << (32-cnt)) | (num >>> cnt);\r
-               }\r
-               \r
-               public override function toString():String {\r
-                       return "sha256";\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/hash/SHABase.as
deleted file mode 100644 (file)
index dc9bafe..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/**\r
- * SHABase\r
- * \r
- * An ActionScript 3 abstract class for the SHA family of hash functions\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.hash\r
-{\r
-       import flash.utils.ByteArray;\r
-       import flash.utils.Endian;\r
-\r
-       public class SHABase implements IHash\r
-       {\r
-\r
-        public function SHABase() { }\r
-\r
-               public var pad_size:int = 40;\r
-               public function getInputSize():uint\r
-               {\r
-                       return 64;\r
-               }\r
-               \r
-               public function getHashSize():uint\r
-               {\r
-                       return 0;\r
-               }\r
-               \r
-               public function getPadSize():int \r
-               {\r
-                       return pad_size;\r
-               }\r
-               \r
-               public function hash(src:ByteArray):ByteArray\r
-               {\r
-                       var savedLength:uint = src.length;\r
-                       var savedEndian:String = src.endian;\r
-                       \r
-                       src.endian = Endian.BIG_ENDIAN;\r
-                       var len:uint = savedLength *8;\r
-                       // pad to nearest int.\r
-                       while (src.length%4!=0) {\r
-                               src[src.length]=0;\r
-                       }\r
-                       // convert ByteArray to an array of uint\r
-                       src.position=0;\r
-                       var a:Array = [];\r
-                       for (var i:uint=0;i<src.length;i+=4) {\r
-                               a.push(src.readUnsignedInt());\r
-                       }\r
-                       var h:Array = core(a, len);\r
-                       var out:ByteArray = new ByteArray;\r
-                       var words:uint = getHashSize()/4;\r
-                       for (i=0;i<words;i++) {\r
-                               out.writeUnsignedInt(h[i]);\r
-                       }\r
-                       // unpad, to leave the source untouched.\r
-                       src.length = savedLength;\r
-                       src.endian = savedEndian;\r
-                       return out;\r
-               }\r
-               protected function core(x:Array, len:uint):Array {\r
-                       return null;\r
-               }\r
-               \r
-               public function toString():String {\r
-                       return "sha";\r
-               }\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/ARC4.as
deleted file mode 100644 (file)
index f09a638..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/**\r
- * ARC4\r
- * \r
- * An ActionScript 3 implementation of RC4\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             The jsbn library, Copyright (c) 2003-2005 Tom Wu\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.prng\r
-{\r
-       import com.hurlant.crypto.symmetric.IStreamCipher;\r
-       import com.hurlant.util.Memory;\r
-       \r
-       import flash.utils.ByteArray;\r
-\r
-       public class ARC4 implements IPRNG, IStreamCipher {\r
-               private var i:int = 0;\r
-               private var j:int = 0;\r
-               private var S:ByteArray;\r
-               private const psize:uint = 256;\r
-               public function ARC4(key:ByteArray = null){\r
-                       S = new ByteArray;\r
-                       if (key) {\r
-                               init(key);\r
-                       }\r
-               }\r
-               public function getPoolSize():uint {\r
-                       return psize;\r
-               }\r
-               public function init(key:ByteArray):void {\r
-                       var i:int;\r
-                       var j:int;\r
-                       var t:int;\r
-                       for (i=0; i<256; ++i) {\r
-                               S[i] = i;\r
-                       }\r
-                       j=0;\r
-                       for (i=0; i<256; ++i) {\r
-                               j = (j + S[i] + key[i%key.length]) & 255;\r
-                               t = S[i];\r
-                               S[i] = S[j];\r
-                               S[j] = t;\r
-                       }\r
-                       this.i=0;\r
-                       this.j=0;\r
-               }\r
-               public function next():uint {\r
-                       var t:int;\r
-                       i = (i+1)&255;\r
-                       j = (j+S[i])&255;\r
-                       t = S[i];\r
-                       S[i] = S[j];\r
-                       S[j] = t;\r
-                       return S[(t+S[i])&255];\r
-               }\r
-\r
-               public function getBlockSize():uint {\r
-                       return 1;\r
-               }\r
-               \r
-               public function encrypt(block:ByteArray):void {\r
-                       var i:uint = 0;\r
-                       while (i<block.length) {\r
-                               block[i++] ^= next();\r
-                       }\r
-               }\r
-               public function decrypt(block:ByteArray):void {\r
-                       encrypt(block); // the beauty of XOR.\r
-               }\r
-               public function dispose():void {\r
-                       var i:uint = 0;\r
-                       if (S!=null) {\r
-                               for (i=0;i<S.length;i++) {\r
-                                       S[i] = Math.random()*256;\r
-                               }\r
-                               S.length=0;\r
-                               S = null;\r
-                       }\r
-                       this.i = 0;\r
-                       this.j = 0;\r
-                       Memory.gc();\r
-               }\r
-               public function toString():String {\r
-                       return "rc4";\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/IPRNG.as
deleted file mode 100644 (file)
index 2c61e93..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**\r
- * IPRNG\r
- * \r
- * An interface for classes that can be used a pseudo-random number generators\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.prng\r
-{\r
-       import flash.utils.ByteArray;\r
-               \r
-       public interface IPRNG {\r
-               function getPoolSize():uint;\r
-               function init(key:ByteArray):void;\r
-               function next():uint;\r
-               function dispose():void;\r
-               function toString():String;\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/Random.as
deleted file mode 100644 (file)
index f6f5184..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/**\r
- * Random\r
- * \r
- * An ActionScript 3 implementation of a Random Number Generator\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             The jsbn library, Copyright (c) 2003-2005 Tom Wu\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.prng\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Memory;\r
-       import flash.system.System;\r
-       import flash.system.Capabilities;\r
-       import flash.accessibility.AccessibilityProperties;\r
-       import flash.display.SWFVersion;\r
-       import flash.display.Stage;\r
-       import flash.utils.getTimer;\r
-       import flash.text.Font;\r
-       \r
-       public class Random\r
-       {\r
-               private var state:IPRNG;\r
-               private var ready:Boolean = false;\r
-               private var pool:ByteArray;\r
-               private var psize:int;\r
-               private var pptr:int;\r
-               private var seeded:Boolean = false;\r
-               \r
-               public function Random(prng:Class = null) {\r
-                       if (prng==null) prng = ARC4;\r
-                       state = new prng as IPRNG;\r
-                       psize= state.getPoolSize();\r
-                       pool = new ByteArray;\r
-                       pptr = 0;\r
-                       while (pptr <psize) {\r
-                               var t:uint = 65536*Math.random();\r
-                               pool[pptr++] = t >>> 8;\r
-                               pool[pptr++] = t&255;\r
-                       }\r
-                       pptr=0;\r
-                       seed();\r
-               }\r
-               \r
-               public function seed(x:int = 0):void {\r
-                       if (x==0) {\r
-                               x = new Date().getTime();\r
-                       }\r
-                       pool[pptr++] ^= x & 255;\r
-                       pool[pptr++] ^= (x>>8)&255;\r
-                       pool[pptr++] ^= (x>>16)&255;\r
-                       pool[pptr++] ^= (x>>24)&255;\r
-                       pptr %= psize;\r
-                       seeded = true;\r
-               }\r
-               \r
-               /**\r
-                * Gather anything we have that isn't entirely predictable:\r
-                *  - memory used\r
-                *  - system capabilities\r
-                *  - timing stuff\r
-                *  - installed fonts\r
-                */\r
-               public function autoSeed():void {\r
-                       var b:ByteArray = new ByteArray;\r
-                       b.writeUnsignedInt(System.totalMemory);\r
-                       b.writeUTF(Capabilities.serverString);\r
-                       b.writeUnsignedInt(getTimer());\r
-                       b.writeUnsignedInt((new Date).getTime());\r
-                       var a:Array = Font.enumerateFonts(true);\r
-                       for each (var f:Font in a) {\r
-                               b.writeUTF(f.fontName);\r
-                               b.writeUTF(f.fontStyle);\r
-                               b.writeUTF(f.fontType);\r
-                       }\r
-                       b.position=0;\r
-                       while (b.bytesAvailable>=4) {\r
-                               seed(b.readUnsignedInt());\r
-                       }\r
-               }\r
-               \r
-               \r
-               public function nextBytes(buffer:ByteArray, length:int):void {\r
-                       while (length--) {\r
-                               buffer.writeByte(nextByte());\r
-                       }\r
-               }\r
-               public function nextByte():int {\r
-                       if (!ready) {\r
-                               if (!seeded) {\r
-                                       autoSeed();\r
-                               }\r
-                               state.init(pool);\r
-                               pool.length = 0;\r
-                               pptr = 0;\r
-                               ready = true;\r
-                       }\r
-                       return state.next();\r
-               }\r
-               public function dispose():void {\r
-                       for (var i:uint=0;i<pool.length;i++) {\r
-                               pool[i] = Math.random()*256;\r
-                       }\r
-                       pool.length=0;\r
-                       pool = null;\r
-                       state.dispose();\r
-                       state = null;\r
-                       psize = 0;\r
-                       pptr = 0;\r
-                       Memory.gc();\r
-               }\r
-               public function toString():String {\r
-                       return "random-"+state.toString();\r
-               }\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/prng/TLSPRF.as
deleted file mode 100644 (file)
index 97553d4..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/**\r
- * TLSPRF\r
- * \r
- * An ActionScript 3 implementation of a pseudo-random generator\r
- * that follows the TLS specification\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.prng\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.crypto.hash.HMAC;\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.crypto.hash.SHA1;\r
-       import com.hurlant.util.Memory;\r
-       import com.hurlant.util.Hex;\r
-       import flash.utils.IDataOutput;\r
-\r
-       /**\r
-        * There's "Random", and then there's TLS Random.\r
-        * .\r
-        * Still Pseudo-random, though.\r
-        */\r
-       public class TLSPRF\r
-       {\r
-               // XXX WAY TOO MANY STRUCTURES HERE\r
-               \r
-               // seed\r
-               private var seed:ByteArray;\r
-               // P_MD5's secret\r
-               private var s1:ByteArray;\r
-               // P_SHA-1's secret\r
-               private var s2:ByteArray;\r
-               // HMAC_MD5's A\r
-               private var a1:ByteArray;\r
-               // HMAC_SHA1's A\r
-               private var a2:ByteArray;\r
-               // Pool for P_MD5\r
-               private var p1:ByteArray;\r
-               // Pool for P_SHA1\r
-               private var p2:ByteArray;\r
-               // Data for HMAC_MD5\r
-               private var d1:ByteArray;\r
-               // Data for HMAC_SHA1\r
-               private var d2:ByteArray;\r
-               \r
-               \r
-               private var hmac_md5:HMAC;\r
-               private var hmac_sha1:HMAC;\r
-               \r
-               public function TLSPRF(secret:ByteArray, label:String, seed:ByteArray) {\r
-                       var l:int = Math.ceil(secret.length/2);\r
-                       var s1:ByteArray = new ByteArray;\r
-                       var s2:ByteArray = new ByteArray;\r
-                       s1.writeBytes(secret, 0, l);\r
-                       s2.writeBytes(secret, secret.length-l, l);\r
-                       var s:ByteArray = new ByteArray;\r
-                       s.writeUTFBytes(label);\r
-                       s.writeBytes(seed);\r
-                       this.seed = s;\r
-                       this.s1 = s1;\r
-                       this.s2 = s2;\r
-                       hmac_md5 = new HMAC(new MD5);\r
-                       hmac_sha1 = new HMAC(new SHA1);\r
-                       \r
-                       this.a1 = hmac_md5.compute(s1, this.seed);\r
-                       this.a2 = hmac_sha1.compute(s2, this.seed);\r
-                       \r
-                       p1 = new ByteArray;\r
-                       p2 = new ByteArray;\r
-                       \r
-                       d1 = new ByteArray;\r
-                       d2 = new ByteArray;\r
-                       d1.position = MD5.HASH_SIZE;\r
-                       d1.writeBytes(this.seed);\r
-                       d2.position = SHA1.HASH_SIZE;\r
-                       d2.writeBytes(this.seed);\r
-               }\r
-               \r
-               // XXX HORRIBLY SLOW. REWRITE.\r
-               public function nextBytes(buffer:IDataOutput, length:int):void {\r
-                       while (length--) {\r
-                               buffer.writeByte(nextByte());\r
-                       }\r
-               }\r
-               public function nextByte():int {\r
-                       if (p1.bytesAvailable==0) {\r
-                               more_md5();\r
-                       }\r
-                       if (p2.bytesAvailable==0) {\r
-                               more_sha1();\r
-                       }\r
-                       return p1.readUnsignedByte()^p2.readUnsignedByte();\r
-               }\r
-               public function dispose():void {\r
-                       seed = dba(seed);\r
-                       s1 = dba(s1);\r
-                       s2 = dba(s2);\r
-                       a1 = dba(a1);\r
-                       a2 = dba(a2);\r
-                       p1 = dba(p1);\r
-                       p2 = dba(p2);\r
-                       d1 = dba(d1);\r
-                       d2 = dba(d2);\r
-                       hmac_md5.dispose();\r
-                       hmac_md5 = null;\r
-                       hmac_sha1.dispose();\r
-                       hmac_sha1 = null;\r
-                       Memory.gc();\r
-               }\r
-               public function toString():String {\r
-                       return "tls-prf";\r
-               }\r
-               private function dba(ba:ByteArray):ByteArray {\r
-                       for (var i:uint=0;i<ba.length;i++) {\r
-                               ba[i]=0;\r
-                       }\r
-                       ba.length=0;\r
-                       return null;\r
-               }\r
-               private function more_md5():void {\r
-                       d1.position=0;\r
-                       d1.writeBytes(a1);\r
-                       var p:int = p1.position;\r
-                       var more:ByteArray = hmac_md5.compute(s1, d1);\r
-                       a1 = hmac_md5.compute(s1, a1);\r
-                       p1.writeBytes(more);\r
-                       p1.position=p;\r
-               }\r
-               private function more_sha1():void {\r
-                       d2.position=0;\r
-                       d2.writeBytes(a2);\r
-                       var p:int = p2.position;\r
-                       var more:ByteArray = hmac_sha1.compute(s2, d2);\r
-                       a2 = hmac_sha1.compute(s2, a2);\r
-                       p2.writeBytes(more);\r
-                       p2.position=p;\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/rsa/RSAKey.as
deleted file mode 100644 (file)
index 02fd83d..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-/**\r
- * RSAKey\r
- * \r
- * An ActionScript 3 implementation of RSA + PKCS#1 (light version)\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             The jsbn library, Copyright (c) 2003-2005 Tom Wu\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.rsa\r
-{\r
-       import com.hurlant.crypto.prng.Random;\r
-       import com.hurlant.math.BigInteger;\r
-       import com.hurlant.util.Memory;\r
-       \r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.crypto.hash.IHash;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.util.der.DER;\r
-       import com.hurlant.util.der.OID;\r
-       import com.hurlant.util.ArrayUtil;\r
-       import com.hurlant.util.der.Type;\r
-       import com.hurlant.util.der.Sequence;\r
-       import com.hurlant.util.der.ObjectIdentifier;\r
-       import com.hurlant.util.der.ByteString;
-       import com.hurlant.crypto.tls.TLSError;\r
-       \r
-       /**\r
-        * Current limitations:\r
-        * exponent must be smaller than 2^31.\r
-        */\r
-       public class RSAKey\r
-       {\r
-               // public key\r
-               public var e:int;              // public exponent. must be <2^31\r
-               public var n:BigInteger; // modulus\r
-               // private key\r
-               public var d:BigInteger;\r
-               // extended private key\r
-               public var p:BigInteger;\r
-               public var q:BigInteger;\r
-               public var dmp1:BigInteger\r
-               public var dmq1:BigInteger;\r
-               public var coeff:BigInteger;\r
-               // flags. flags are cool.\r
-               protected var canDecrypt:Boolean;\r
-               protected var canEncrypt:Boolean;\r
-               \r
-               public function RSAKey(N:BigInteger, E:int, \r
-                       D:BigInteger=null,\r
-                       P:BigInteger = null, Q:BigInteger=null,\r
-                       DP:BigInteger=null, DQ:BigInteger=null,\r
-                       C:BigInteger=null) {\r
-                               \r
-                       this.n = N;\r
-                       this.e = E;\r
-                       this.d = D;\r
-                       this.p = P;\r
-                       this.q = Q;\r
-                       this.dmp1 = DP;\r
-                       this.dmq1 = DQ;\r
-                       this.coeff = C;\r
-                       \r
-                       // adjust a few flags.\r
-                       canEncrypt = (n!=null&&e!=0);\r
-                       canDecrypt = (canEncrypt&&d!=null);\r
-                       \r
-                       \r
-               }\r
-\r\r
-               public static function parsePublicKey(N:String, E:String):RSAKey {\r
-                       return new RSAKey(new BigInteger(N, 16, true), parseInt(E,16));\r
-               }\r
-               public static function parsePrivateKey(N:String, E:String, D:String, \r
-                       P:String=null,Q:String=null, DMP1:String=null, DMQ1:String=null, IQMP:String=null):RSAKey {\r
-                       if (P==null) {\r
-                               return new RSAKey(new BigInteger(N,16, true), parseInt(E,16), new BigInteger(D,16, true));\r
-                       } else {\r
-                               return new RSAKey(new BigInteger(N,16, true), parseInt(E,16), new BigInteger(D,16, true),\r
-                                       new BigInteger(P,16, true), new BigInteger(Q,16, true),\r
-                                       new BigInteger(DMP1,16, true), new BigInteger(DMQ1, 16, true),\r
-                                       new BigInteger(IQMP, 16, true));\r
-                       }\r
-               }\r
-               \r
-               public function getBlockSize():uint {\r
-                       return (n.bitLength()+7)/8;\r
-               }\r
-               public function dispose():void {\r
-                       e = 0;\r
-                       n.dispose();\r
-                       n = null;\r
-                       Memory.gc();\r
-               }\r
-\r\r
-               public function encrypt(src:ByteArray, dst:ByteArray, length:uint, pad:Function=null):void {\r
-                       _encrypt(doPublic, src, dst, length, pad, 0x02);\r
-               }\r
-               public function decrypt(src:ByteArray, dst:ByteArray, length:uint, pad:Function=null):void {\r
-                       _decrypt(doPrivate2, src, dst, length, pad, 0x02);\r
-               }\r
-\r\r
-               public function sign(src:ByteArray, dst:ByteArray, length:uint, pad:Function = null):void {\r
-                       _encrypt(doPrivate2, src, dst, length, pad, 0x01);\r
-               }\r
-               public function verify(src:ByteArray, dst:ByteArray, length:uint, pad:Function = null):void {\r
-                       _decrypt(doPublic, src, dst, length, pad, 0x01);\r
-               }\r
-               \r
-\r\r
-               private function _encrypt(op:Function, src:ByteArray, dst:ByteArray, length:uint, pad:Function, padType:int):void {\r
-                       // adjust pad if needed\r
-                       if (pad==null) pad = pkcs1pad;\r
-                       // convert src to BigInteger\r
-                       if (src.position >= src.length) {\r
-                               src.position = 0;\r
-                       }\r
-                       var bl:uint = getBlockSize();\r
-                       var end:int = src.position + length;\r
-                       while (src.position<end) {\r
-                               var block:BigInteger = new BigInteger(pad(src, end, bl, padType), bl, true);\r
-                               var chunk:BigInteger = op(block);\r
-                               chunk.toArray(dst);\r
-                       }\r
-               }\r
-               private function _decrypt(op:Function, src:ByteArray, dst:ByteArray, length:uint, pad:Function, padType:int):void {\r
-                       // adjust pad if needed\r
-                       if (pad==null) pad = pkcs1unpad;\r
-                       \r
-                       // convert src to BigInteger\r
-                       if (src.position >= src.length) {\r
-                               src.position = 0;\r
-                       }\r
-                       var bl:uint = getBlockSize();\r
-                       var end:int = src.position + length;\r
-                       while (src.position<end) {\r
-                               var block:BigInteger = new BigInteger(src, bl, true);\r
-                               var chunk:BigInteger = op(block);\r
-                               var b:ByteArray = pad(chunk, bl, padType);\r
-                               if (b == null) \r
-                                        throw new TLSError( "Decrypt error - padding function returned null!", TLSError.decode_error );\r
-                               // if (b != null)\r
-                               dst.writeBytes(b);\r
-                       }\r
-               }\r
-               \r
-               /**\r
-                * PKCS#1 pad. type 1 (0xff) or 2, random.\r
-                * puts as much data from src into it, leaves what doesn't fit alone.\r
-                */\r
-               private function pkcs1pad(src:ByteArray, end:int, n:uint, type:uint = 0x02):ByteArray {\r
-                       var out:ByteArray = new ByteArray;\r
-                       var p:uint = src.position;\r
-                       end = Math.min(end, src.length, p+n-11);\r
-                       src.position = end;\r
-                       var i:int = end-1;\r
-                       while (i>=p && n>11) {\r
-                               out[--n] = src[i--];\r
-                       }\r
-                       out[--n] = 0;\r
-                       if (type==0x02) { // type 2\r
-                               var rng:Random = new Random;\r
-                               var x:int = 0;\r
-                               while (n>2) {\r
-                                       do {\r
-                                               x = rng.nextByte();\r
-                                       } while (x==0);\r
-                                       out[--n] = x;\r
-                               }\r
-                       } else { // type 1\r
-                               while (n>2) {\r
-                                       out[--n] = 0xFF;\r
-                               }\r
-                       }\r
-                       out[--n] = type;\r
-                       out[--n] = 0;\r
-                       return out;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param src\r
-                * @param n\r
-                * @param type Not used.\r
-                * @return \r
-                * \r
-                */\r
-               private function pkcs1unpad(src:BigInteger, n:uint, type:uint = 0x02):ByteArray {\r
-                       var b:ByteArray = src.toByteArray();\r
-                       var out:ByteArray = new ByteArray;\r
-                       \r
-                       b.position = 0;\r
-                       var i:int = 0;\r
-                       while (i<b.length && b[i]==0) ++i;\r
-                       if (b.length-i != n-1 || b[i]!=type) {\r
-                               trace("PKCS#1 unpad: i="+i+", expected b[i]=="+type+", got b[i]="+b[i].toString(16));\r
-                               return null;\r
-                       }\r
-                       ++i;\r
-                       while (b[i]!=0) {\r
-                               if (++i>=b.length) {\r
-                                       trace("PKCS#1 unpad: i="+i+", b[i-1]!=0 (="+b[i-1].toString(16)+")");\r
-                                       return null;\r
-                               }\r
-                       }\r
-                       while (++i < b.length) {\r
-                               out.writeByte(b[i]);\r
-                       }\r
-                       out.position = 0;\r
-                       return out;\r
-               }\r
-               /**\r
-                * Raw pad.\r
-                */\r
-               public function rawpad(src:ByteArray, end:int, n:uint, type:uint = 0):ByteArray {\r
-                       return src;\r
-               }\r
-               public function rawunpad(src:BigInteger, n:uint, type:uint = 0):ByteArray {\r
-                       return src.toByteArray();\r
-               }\r
-               \r
-               public function toString():String {\r
-                       return "rsa";\r
-               }\r
-               \r
-               public function dump():String {\r
-                       var s:String= "N="+n.toString(16)+"\n"+\r
-                       "E="+e.toString(16)+"\n";\r
-                       if (canDecrypt) {\r
-                               s+="D="+d.toString(16)+"\n";\r
-                               if (p!=null && q!=null) {\r
-                                       s+="P="+p.toString(16)+"\n";\r
-                                       s+="Q="+q.toString(16)+"\n";\r
-                                       s+="DMP1="+dmp1.toString(16)+"\n";\r
-                                       s+="DMQ1="+dmq1.toString(16)+"\n";\r
-                                       s+="IQMP="+coeff.toString(16)+"\n";\r
-                               }\r
-                       }\r
-                       return s;\r
-               }\r
-               \r
-               \r
-               /**\r
-                * \r
-                * note: We should have a "nice" variant of this function that takes a callback,\r
-                *              and perform the computation is small fragments, to keep the web browser\r
-                *              usable.\r
-                * \r
-                * @param B\r
-                * @param E\r
-                * @return a new random private key B bits long, using public expt E\r
-                * \r
-                */\r
-               public static function generate(B:uint, E:String):RSAKey {\r
-                       var rng:Random = new Random;\r
-                       var qs:uint = B>>1;\r
-                       var key:RSAKey = new RSAKey(null,0,null);\r
-                       key.e = parseInt(E, 16);\r
-                       var ee:BigInteger = new BigInteger(E,16, true);\r
-                       for (;;) {\r
-                               for (;;) {\r
-                                       key.p = bigRandom(B-qs, rng);\r
-                                       if (key.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE)==0 &&\r
-                                               key.p.isProbablePrime(10)) break;\r
-                               }\r
-                               for (;;) {\r
-                                       key.q = bigRandom(qs, rng);\r
-                                       if (key.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE)==0 &&\r
-                                               key.q.isProbablePrime(10)) break;\r
-                               }\r
-                               if (key.p.compareTo(key.q)<=0) {\r
-                                       var t:BigInteger = key.p;\r
-                                       key.p = key.q;\r
-                                       key.q = t;\r
-                               }\r
-                               var p1:BigInteger = key.p.subtract(BigInteger.ONE);\r
-                               var q1:BigInteger = key.q.subtract(BigInteger.ONE);\r
-                               var phi:BigInteger = p1.multiply(q1);\r
-                               if (phi.gcd(ee).compareTo(BigInteger.ONE)==0) {\r
-                                       key.n = key.p.multiply(key.q);\r
-                                       key.d = ee.modInverse(phi);\r
-                                       key.dmp1 = key.d.mod(p1);\r
-                                       key.dmq1 = key.d.mod(q1);\r
-                                       key.coeff = key.q.modInverse(key.p);\r
-                                       break;\r
-                               }\r
-                       }\r
-                       return key;\r
-               }\r
-               \r
-               protected static function bigRandom(bits:int, rnd:Random):BigInteger {\r
-                       if (bits<2) return BigInteger.nbv(1);\r
-                       var x:ByteArray = new ByteArray;\r
-                       rnd.nextBytes(x, (bits>>3));\r
-                       x.position = 0;\r
-                       var b:BigInteger = new BigInteger(x,0,true);\r
-                       b.primify(bits, 1);\r
-                       return b;\r
-               }\r
-               \r
-               protected function doPublic(x:BigInteger):BigInteger {\r
-                       return x.modPowInt(e, n);\r
-               }\r
-               \r
-               protected function doPrivate2(x:BigInteger):BigInteger {\r
-                       if (p==null && q==null) {\r
-                               return x.modPow(d,n);\r
-                       }\r
-                       \r
-                       var xp:BigInteger = x.mod(p).modPow(dmp1, p);\r
-                       var xq:BigInteger = x.mod(q).modPow(dmq1, q);\r
-                       \r
-                       while (xp.compareTo(xq)<0) {\r
-                               xp = xp.add(p);\r
-                       }\r
-                       var r:BigInteger = xp.subtract(xq).multiply(coeff).mod(p).multiply(q).add(xq);\r
-                       \r
-                       return r;\r
-               }\r
-               \r
-               protected function doPrivate(x:BigInteger):BigInteger {\r
-                       if (p==null || q==null) {\r
-                               return x.modPow(d, n);\r
-                       }\r
-                       // TODO: re-calculate any missing CRT params\r
-                       var xp:BigInteger = x.mod(p).modPow(dmp1, p);\r
-                       var xq:BigInteger = x.mod(q).modPow(dmq1, q);\r
-                       \r
-                       while (xp.compareTo(xq)<0) {\r
-                               xp = xp.add(p);\r
-                       }\r
-                       return xp.subtract(xq).multiply(coeff).mod(p).multiply(q).add(xq);\r
-               }\r
-               \r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/AESKey.as
deleted file mode 100644 (file)
index a2280b7..0000000
+++ /dev/null
@@ -1,2797 +0,0 @@
-/**\r
- * AESKey\r
- * \r
- * An ActionScript 3 implementation of the Advanced Encryption Standard, as\r
- * defined in FIPS PUB 197\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             A public domain implementation from Karl Malbrain, malbrain@yahoo.com\r
- *             (http://www.geocities.com/malbrain/aestable_c.html)\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import com.hurlant.crypto.prng.Random;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.util.Memory;\r
-       \r
-       import flash.utils.ByteArray;\r
-\r
-       public class AESKey implements ISymmetricKey\r
-       {\r
-               // AES only supports Nb=4\r
-               private static const Nb:uint = 4;    // number of columns in the state & expanded key\r
-               \r
-               // TODO:\r
-               //  - move those tables in binary files, then\r
-               //  - [Embed()] them as ByteArray directly.\r
-               // (should result in smaller .swf, and faster initialization time.)\r
-               \r
-               private static const _Sbox:Array = [ // forward s-box\r
-               0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,\r
-               0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,\r
-               0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,\r
-               0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,\r
-               0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,\r
-               0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,\r
-               0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,\r
-               0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,\r
-               0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,\r
-               0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,\r
-               0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,\r
-               0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,\r
-               0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,\r
-               0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,\r
-               0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,\r
-               0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\r
-               private static const _InvSbox:Array = [ // inverse s-box\r
-               0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,\r
-               0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,\r
-               0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,\r
-               0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,\r
-               0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,\r
-               0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,\r
-               0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,\r
-               0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,\r
-               0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,\r
-               0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,\r
-               0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,\r
-               0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,\r
-               0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,\r
-               0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,\r
-               0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,\r
-               0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];                \r
-               private static const _Xtime2Sbox:Array = [ // combined Xtimes2[Sbox[]]\r
-               0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91, 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec, \r
-               0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb, 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b, \r
-               0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83, 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a, \r
-               0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f, 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea, \r
-               0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b, 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13, \r
-               0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6, 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85, \r
-               0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11, 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b, \r
-               0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1, 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf, \r
-               0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e, 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6, \r
-               0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b, 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad, \r
-               0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8, 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2, \r
-               0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49, 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10, \r
-               0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97, 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f, \r
-               0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c, 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27, \r
-               0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33, 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5, \r
-               0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0, 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c];\r
-               private static const _Xtime3Sbox:Array = [ // combined Xtimes3[Sbox[]]\r
-               0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54, 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a, \r
-               0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b, 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b, \r
-               0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f, 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f, \r
-               0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5, 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f, \r
-               0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb, 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97, \r
-               0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed, 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a, \r
-               0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94, 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3, \r
-               0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04, 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d, \r
-               0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39, 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95, \r
-               0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83, 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76, \r
-               0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4, 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b, \r
-               0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0, 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18, \r
-               0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51, 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85, \r
-               0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12, 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9, \r
-               0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7, 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a, \r
-               0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8, 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a];\r
-               // modular multiplication tables\r
-               // based on:\r
-               \r
-               // Xtime2[x] = (x & 0x80 ? 0x1b : 0) ^ (x + x)\r
-               // Xtime3[x] = x^Xtime2[x];\r
-               private static const _Xtime2:Array = [ \r
-               0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, \r
-               0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, \r
-               0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, \r
-               0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, \r
-               0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, \r
-               0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, \r
-               0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, \r
-               0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, \r
-               0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05, \r
-               0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25, \r
-               0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, \r
-               0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, \r
-               0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, \r
-               0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, \r
-               0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, \r
-               0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5]; \r
-               private static const _Xtime9:Array = [\r
-               0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, \r
-               0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, \r
-               0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, \r
-               0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, \r
-               0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, \r
-               0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, \r
-               0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, \r
-               0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, \r
-               0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, \r
-               0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, \r
-               0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, \r
-               0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, \r
-               0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, \r
-               0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, \r
-               0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, \r
-               0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46];\r
-               private static const _XtimeB:Array = [\r
-               0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, \r
-               0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, \r
-               0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, \r
-               0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, \r
-               0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, \r
-               0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, \r
-               0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, \r
-               0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, \r
-               0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, \r
-               0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, \r
-               0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, \r
-               0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, \r
-               0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, \r
-               0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, \r
-               0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, \r
-               0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3]; \r
-               private static const _XtimeD:Array = [\r
-               0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, \r
-               0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, \r
-               0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, \r
-               0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, \r
-               0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, \r
-               0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, \r
-               0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, \r
-               0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, \r
-               0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, \r
-               0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, \r
-               0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, \r
-               0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, \r
-               0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, \r
-               0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, \r
-               0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, \r
-               0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97];\r
-               private static const _XtimeE:Array = [\r
-               0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, \r
-               0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, \r
-               0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, \r
-               0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, \r
-               0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, \r
-               0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, \r
-               0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, \r
-               0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, \r
-               0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, \r
-               0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, \r
-               0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, \r
-               0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, \r
-               0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, \r
-               0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, \r
-               0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, \r
-               0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d]; \r
-               static private var _Rcon:Array = [\r
-               0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\r
-               static private var Sbox:ByteArray;\r
-               static private var InvSbox:ByteArray;\r
-               static private var Xtime2Sbox:ByteArray\r
-               static private var Xtime3Sbox:ByteArray\r
-               static private var Xtime2:ByteArray;\r
-               static private var Xtime9:ByteArray;\r
-               static private var XtimeB:ByteArray;\r
-               static private var XtimeD:ByteArray;\r
-               static private var XtimeE:ByteArray;\r
-               static private var Rcon:ByteArray;\r
-               // static initializer\r
-               {\r
-                       static private var i:uint;\r
-                       Sbox = new ByteArray;\r
-                       InvSbox = new ByteArray;\r
-                       Xtime2Sbox = new ByteArray;\r
-                       Xtime3Sbox = new ByteArray;\r
-                       Xtime2 = new ByteArray;\r
-                       Xtime9 = new ByteArray;\r
-                       XtimeB = new ByteArray;\r
-                       XtimeD = new ByteArray;\r
-                       XtimeE = new ByteArray;\r
-            /*\r
-                       for (i=0;i<256;i++) {\r
-                               Sbox[i] = _Sbox[i];\r
-                               InvSbox[i] = _InvSbox[i];\r
-                               Xtime2Sbox[i] = _Xtime2Sbox[i];\r
-                               Xtime3Sbox[i] = _Xtime3Sbox[i];\r
-                               Xtime2[i] = _Xtime2[i];\r
-                               Xtime9[i] = _Xtime9[i];\r
-                               XtimeB[i] = _XtimeB[i];\r
-                               XtimeD[i] = _XtimeD[i];\r
-                               XtimeE[i] = _XtimeE[i];\r
-                       }\r
-            */\r
-            Sbox[0] = _Sbox[0]\r
-            InvSbox[0] = _InvSbox[0]\r
-            Xtime2Sbox[0] = _Xtime2Sbox[0]\r
-            Xtime3Sbox[0] = _Xtime3Sbox[0]\r
-            Xtime2[0] = _Xtime2[0]\r
-            Xtime9[0] = _Xtime9[0]\r
-            XtimeB[0] = _XtimeB[0]\r
-            XtimeD[0] = _XtimeD[0]\r
-            XtimeE[0] = _XtimeE[0]\r
-            Sbox[1] = _Sbox[1]\r
-            InvSbox[1] = _InvSbox[1]\r
-            Xtime2Sbox[1] = _Xtime2Sbox[1]\r
-            Xtime3Sbox[1] = _Xtime3Sbox[1]\r
-            Xtime2[1] = _Xtime2[1]\r
-            Xtime9[1] = _Xtime9[1]\r
-            XtimeB[1] = _XtimeB[1]\r
-            XtimeD[1] = _XtimeD[1]\r
-            XtimeE[1] = _XtimeE[1]\r
-            Sbox[2] = _Sbox[2]\r
-            InvSbox[2] = _InvSbox[2]\r
-            Xtime2Sbox[2] = _Xtime2Sbox[2]\r
-            Xtime3Sbox[2] = _Xtime3Sbox[2]\r
-            Xtime2[2] = _Xtime2[2]\r
-            Xtime9[2] = _Xtime9[2]\r
-            XtimeB[2] = _XtimeB[2]\r
-            XtimeD[2] = _XtimeD[2]\r
-            XtimeE[2] = _XtimeE[2]\r
-            Sbox[3] = _Sbox[3]\r
-            InvSbox[3] = _InvSbox[3]\r
-            Xtime2Sbox[3] = _Xtime2Sbox[3]\r
-            Xtime3Sbox[3] = _Xtime3Sbox[3]\r
-            Xtime2[3] = _Xtime2[3]\r
-            Xtime9[3] = _Xtime9[3]\r
-            XtimeB[3] = _XtimeB[3]\r
-            XtimeD[3] = _XtimeD[3]\r
-            XtimeE[3] = _XtimeE[3]\r
-            Sbox[4] = _Sbox[4]\r
-            InvSbox[4] = _InvSbox[4]\r
-            Xtime2Sbox[4] = _Xtime2Sbox[4]\r
-            Xtime3Sbox[4] = _Xtime3Sbox[4]\r
-            Xtime2[4] = _Xtime2[4]\r
-            Xtime9[4] = _Xtime9[4]\r
-            XtimeB[4] = _XtimeB[4]\r
-            XtimeD[4] = _XtimeD[4]\r
-            XtimeE[4] = _XtimeE[4]\r
-            Sbox[5] = _Sbox[5]\r
-            InvSbox[5] = _InvSbox[5]\r
-            Xtime2Sbox[5] = _Xtime2Sbox[5]\r
-            Xtime3Sbox[5] = _Xtime3Sbox[5]\r
-            Xtime2[5] = _Xtime2[5]\r
-            Xtime9[5] = _Xtime9[5]\r
-            XtimeB[5] = _XtimeB[5]\r
-            XtimeD[5] = _XtimeD[5]\r
-            XtimeE[5] = _XtimeE[5]\r
-            Sbox[6] = _Sbox[6]\r
-            InvSbox[6] = _InvSbox[6]\r
-            Xtime2Sbox[6] = _Xtime2Sbox[6]\r
-            Xtime3Sbox[6] = _Xtime3Sbox[6]\r
-            Xtime2[6] = _Xtime2[6]\r
-            Xtime9[6] = _Xtime9[6]\r
-            XtimeB[6] = _XtimeB[6]\r
-            XtimeD[6] = _XtimeD[6]\r
-            XtimeE[6] = _XtimeE[6]\r
-            Sbox[7] = _Sbox[7]\r
-            InvSbox[7] = _InvSbox[7]\r
-            Xtime2Sbox[7] = _Xtime2Sbox[7]\r
-            Xtime3Sbox[7] = _Xtime3Sbox[7]\r
-            Xtime2[7] = _Xtime2[7]\r
-            Xtime9[7] = _Xtime9[7]\r
-            XtimeB[7] = _XtimeB[7]\r
-            XtimeD[7] = _XtimeD[7]\r
-            XtimeE[7] = _XtimeE[7]\r
-            Sbox[8] = _Sbox[8]\r
-            InvSbox[8] = _InvSbox[8]\r
-            Xtime2Sbox[8] = _Xtime2Sbox[8]\r
-            Xtime3Sbox[8] = _Xtime3Sbox[8]\r
-            Xtime2[8] = _Xtime2[8]\r
-            Xtime9[8] = _Xtime9[8]\r
-            XtimeB[8] = _XtimeB[8]\r
-            XtimeD[8] = _XtimeD[8]\r
-            XtimeE[8] = _XtimeE[8]\r
-            Sbox[9] = _Sbox[9]\r
-            InvSbox[9] = _InvSbox[9]\r
-            Xtime2Sbox[9] = _Xtime2Sbox[9]\r
-            Xtime3Sbox[9] = _Xtime3Sbox[9]\r
-            Xtime2[9] = _Xtime2[9]\r
-            Xtime9[9] = _Xtime9[9]\r
-            XtimeB[9] = _XtimeB[9]\r
-            XtimeD[9] = _XtimeD[9]\r
-            XtimeE[9] = _XtimeE[9]\r
-            Sbox[10] = _Sbox[10]\r
-            InvSbox[10] = _InvSbox[10]\r
-            Xtime2Sbox[10] = _Xtime2Sbox[10]\r
-            Xtime3Sbox[10] = _Xtime3Sbox[10]\r
-            Xtime2[10] = _Xtime2[10]\r
-            Xtime9[10] = _Xtime9[10]\r
-            XtimeB[10] = _XtimeB[10]\r
-            XtimeD[10] = _XtimeD[10]\r
-            XtimeE[10] = _XtimeE[10]\r
-            Sbox[11] = _Sbox[11]\r
-            InvSbox[11] = _InvSbox[11]\r
-            Xtime2Sbox[11] = _Xtime2Sbox[11]\r
-            Xtime3Sbox[11] = _Xtime3Sbox[11]\r
-            Xtime2[11] = _Xtime2[11]\r
-            Xtime9[11] = _Xtime9[11]\r
-            XtimeB[11] = _XtimeB[11]\r
-            XtimeD[11] = _XtimeD[11]\r
-            XtimeE[11] = _XtimeE[11]\r
-            Sbox[12] = _Sbox[12]\r
-            InvSbox[12] = _InvSbox[12]\r
-            Xtime2Sbox[12] = _Xtime2Sbox[12]\r
-            Xtime3Sbox[12] = _Xtime3Sbox[12]\r
-            Xtime2[12] = _Xtime2[12]\r
-            Xtime9[12] = _Xtime9[12]\r
-            XtimeB[12] = _XtimeB[12]\r
-            XtimeD[12] = _XtimeD[12]\r
-            XtimeE[12] = _XtimeE[12]\r
-            Sbox[13] = _Sbox[13]\r
-            InvSbox[13] = _InvSbox[13]\r
-            Xtime2Sbox[13] = _Xtime2Sbox[13]\r
-            Xtime3Sbox[13] = _Xtime3Sbox[13]\r
-            Xtime2[13] = _Xtime2[13]\r
-            Xtime9[13] = _Xtime9[13]\r
-            XtimeB[13] = _XtimeB[13]\r
-            XtimeD[13] = _XtimeD[13]\r
-            XtimeE[13] = _XtimeE[13]\r
-            Sbox[14] = _Sbox[14]\r
-            InvSbox[14] = _InvSbox[14]\r
-            Xtime2Sbox[14] = _Xtime2Sbox[14]\r
-            Xtime3Sbox[14] = _Xtime3Sbox[14]\r
-            Xtime2[14] = _Xtime2[14]\r
-            Xtime9[14] = _Xtime9[14]\r
-            XtimeB[14] = _XtimeB[14]\r
-            XtimeD[14] = _XtimeD[14]\r
-            XtimeE[14] = _XtimeE[14]\r
-            Sbox[15] = _Sbox[15]\r
-            InvSbox[15] = _InvSbox[15]\r
-            Xtime2Sbox[15] = _Xtime2Sbox[15]\r
-            Xtime3Sbox[15] = _Xtime3Sbox[15]\r
-            Xtime2[15] = _Xtime2[15]\r
-            Xtime9[15] = _Xtime9[15]\r
-            XtimeB[15] = _XtimeB[15]\r
-            XtimeD[15] = _XtimeD[15]\r
-            XtimeE[15] = _XtimeE[15]\r
-            Sbox[16] = _Sbox[16]\r
-            InvSbox[16] = _InvSbox[16]\r
-            Xtime2Sbox[16] = _Xtime2Sbox[16]\r
-            Xtime3Sbox[16] = _Xtime3Sbox[16]\r
-            Xtime2[16] = _Xtime2[16]\r
-            Xtime9[16] = _Xtime9[16]\r
-            XtimeB[16] = _XtimeB[16]\r
-            XtimeD[16] = _XtimeD[16]\r
-            XtimeE[16] = _XtimeE[16]\r
-            Sbox[17] = _Sbox[17]\r
-            InvSbox[17] = _InvSbox[17]\r
-            Xtime2Sbox[17] = _Xtime2Sbox[17]\r
-            Xtime3Sbox[17] = _Xtime3Sbox[17]\r
-            Xtime2[17] = _Xtime2[17]\r
-            Xtime9[17] = _Xtime9[17]\r
-            XtimeB[17] = _XtimeB[17]\r
-            XtimeD[17] = _XtimeD[17]\r
-            XtimeE[17] = _XtimeE[17]\r
-            Sbox[18] = _Sbox[18]\r
-            InvSbox[18] = _InvSbox[18]\r
-            Xtime2Sbox[18] = _Xtime2Sbox[18]\r
-            Xtime3Sbox[18] = _Xtime3Sbox[18]\r
-            Xtime2[18] = _Xtime2[18]\r
-            Xtime9[18] = _Xtime9[18]\r
-            XtimeB[18] = _XtimeB[18]\r
-            XtimeD[18] = _XtimeD[18]\r
-            XtimeE[18] = _XtimeE[18]\r
-            Sbox[19] = _Sbox[19]\r
-            InvSbox[19] = _InvSbox[19]\r
-            Xtime2Sbox[19] = _Xtime2Sbox[19]\r
-            Xtime3Sbox[19] = _Xtime3Sbox[19]\r
-            Xtime2[19] = _Xtime2[19]\r
-            Xtime9[19] = _Xtime9[19]\r
-            XtimeB[19] = _XtimeB[19]\r
-            XtimeD[19] = _XtimeD[19]\r
-            XtimeE[19] = _XtimeE[19]\r
-            Sbox[20] = _Sbox[20]\r
-            InvSbox[20] = _InvSbox[20]\r
-            Xtime2Sbox[20] = _Xtime2Sbox[20]\r
-            Xtime3Sbox[20] = _Xtime3Sbox[20]\r
-            Xtime2[20] = _Xtime2[20]\r
-            Xtime9[20] = _Xtime9[20]\r
-            XtimeB[20] = _XtimeB[20]\r
-            XtimeD[20] = _XtimeD[20]\r
-            XtimeE[20] = _XtimeE[20]\r
-            Sbox[21] = _Sbox[21]\r
-            InvSbox[21] = _InvSbox[21]\r
-            Xtime2Sbox[21] = _Xtime2Sbox[21]\r
-            Xtime3Sbox[21] = _Xtime3Sbox[21]\r
-            Xtime2[21] = _Xtime2[21]\r
-            Xtime9[21] = _Xtime9[21]\r
-            XtimeB[21] = _XtimeB[21]\r
-            XtimeD[21] = _XtimeD[21]\r
-            XtimeE[21] = _XtimeE[21]\r
-            Sbox[22] = _Sbox[22]\r
-            InvSbox[22] = _InvSbox[22]\r
-            Xtime2Sbox[22] = _Xtime2Sbox[22]\r
-            Xtime3Sbox[22] = _Xtime3Sbox[22]\r
-            Xtime2[22] = _Xtime2[22]\r
-            Xtime9[22] = _Xtime9[22]\r
-            XtimeB[22] = _XtimeB[22]\r
-            XtimeD[22] = _XtimeD[22]\r
-            XtimeE[22] = _XtimeE[22]\r
-            Sbox[23] = _Sbox[23]\r
-            InvSbox[23] = _InvSbox[23]\r
-            Xtime2Sbox[23] = _Xtime2Sbox[23]\r
-            Xtime3Sbox[23] = _Xtime3Sbox[23]\r
-            Xtime2[23] = _Xtime2[23]\r
-            Xtime9[23] = _Xtime9[23]\r
-            XtimeB[23] = _XtimeB[23]\r
-            XtimeD[23] = _XtimeD[23]\r
-            XtimeE[23] = _XtimeE[23]\r
-            Sbox[24] = _Sbox[24]\r
-            InvSbox[24] = _InvSbox[24]\r
-            Xtime2Sbox[24] = _Xtime2Sbox[24]\r
-            Xtime3Sbox[24] = _Xtime3Sbox[24]\r
-            Xtime2[24] = _Xtime2[24]\r
-            Xtime9[24] = _Xtime9[24]\r
-            XtimeB[24] = _XtimeB[24]\r
-            XtimeD[24] = _XtimeD[24]\r
-            XtimeE[24] = _XtimeE[24]\r
-            Sbox[25] = _Sbox[25]\r
-            InvSbox[25] = _InvSbox[25]\r
-            Xtime2Sbox[25] = _Xtime2Sbox[25]\r
-            Xtime3Sbox[25] = _Xtime3Sbox[25]\r
-            Xtime2[25] = _Xtime2[25]\r
-            Xtime9[25] = _Xtime9[25]\r
-            XtimeB[25] = _XtimeB[25]\r
-            XtimeD[25] = _XtimeD[25]\r
-            XtimeE[25] = _XtimeE[25]\r
-            Sbox[26] = _Sbox[26]\r
-            InvSbox[26] = _InvSbox[26]\r
-            Xtime2Sbox[26] = _Xtime2Sbox[26]\r
-            Xtime3Sbox[26] = _Xtime3Sbox[26]\r
-            Xtime2[26] = _Xtime2[26]\r
-            Xtime9[26] = _Xtime9[26]\r
-            XtimeB[26] = _XtimeB[26]\r
-            XtimeD[26] = _XtimeD[26]\r
-            XtimeE[26] = _XtimeE[26]\r
-            Sbox[27] = _Sbox[27]\r
-            InvSbox[27] = _InvSbox[27]\r
-            Xtime2Sbox[27] = _Xtime2Sbox[27]\r
-            Xtime3Sbox[27] = _Xtime3Sbox[27]\r
-            Xtime2[27] = _Xtime2[27]\r
-            Xtime9[27] = _Xtime9[27]\r
-            XtimeB[27] = _XtimeB[27]\r
-            XtimeD[27] = _XtimeD[27]\r
-            XtimeE[27] = _XtimeE[27]\r
-            Sbox[28] = _Sbox[28]\r
-            InvSbox[28] = _InvSbox[28]\r
-            Xtime2Sbox[28] = _Xtime2Sbox[28]\r
-            Xtime3Sbox[28] = _Xtime3Sbox[28]\r
-            Xtime2[28] = _Xtime2[28]\r
-            Xtime9[28] = _Xtime9[28]\r
-            XtimeB[28] = _XtimeB[28]\r
-            XtimeD[28] = _XtimeD[28]\r
-            XtimeE[28] = _XtimeE[28]\r
-            Sbox[29] = _Sbox[29]\r
-            InvSbox[29] = _InvSbox[29]\r
-            Xtime2Sbox[29] = _Xtime2Sbox[29]\r
-            Xtime3Sbox[29] = _Xtime3Sbox[29]\r
-            Xtime2[29] = _Xtime2[29]\r
-            Xtime9[29] = _Xtime9[29]\r
-            XtimeB[29] = _XtimeB[29]\r
-            XtimeD[29] = _XtimeD[29]\r
-            XtimeE[29] = _XtimeE[29]\r
-            Sbox[30] = _Sbox[30]\r
-            InvSbox[30] = _InvSbox[30]\r
-            Xtime2Sbox[30] = _Xtime2Sbox[30]\r
-            Xtime3Sbox[30] = _Xtime3Sbox[30]\r
-            Xtime2[30] = _Xtime2[30]\r
-            Xtime9[30] = _Xtime9[30]\r
-            XtimeB[30] = _XtimeB[30]\r
-            XtimeD[30] = _XtimeD[30]\r
-            XtimeE[30] = _XtimeE[30]\r
-            Sbox[31] = _Sbox[31]\r
-            InvSbox[31] = _InvSbox[31]\r
-            Xtime2Sbox[31] = _Xtime2Sbox[31]\r
-            Xtime3Sbox[31] = _Xtime3Sbox[31]\r
-            Xtime2[31] = _Xtime2[31]\r
-            Xtime9[31] = _Xtime9[31]\r
-            XtimeB[31] = _XtimeB[31]\r
-            XtimeD[31] = _XtimeD[31]\r
-            XtimeE[31] = _XtimeE[31]\r
-            Sbox[32] = _Sbox[32]\r
-            InvSbox[32] = _InvSbox[32]\r
-            Xtime2Sbox[32] = _Xtime2Sbox[32]\r
-            Xtime3Sbox[32] = _Xtime3Sbox[32]\r
-            Xtime2[32] = _Xtime2[32]\r
-            Xtime9[32] = _Xtime9[32]\r
-            XtimeB[32] = _XtimeB[32]\r
-            XtimeD[32] = _XtimeD[32]\r
-            XtimeE[32] = _XtimeE[32]\r
-            Sbox[33] = _Sbox[33]\r
-            InvSbox[33] = _InvSbox[33]\r
-            Xtime2Sbox[33] = _Xtime2Sbox[33]\r
-            Xtime3Sbox[33] = _Xtime3Sbox[33]\r
-            Xtime2[33] = _Xtime2[33]\r
-            Xtime9[33] = _Xtime9[33]\r
-            XtimeB[33] = _XtimeB[33]\r
-            XtimeD[33] = _XtimeD[33]\r
-            XtimeE[33] = _XtimeE[33]\r
-            Sbox[34] = _Sbox[34]\r
-            InvSbox[34] = _InvSbox[34]\r
-            Xtime2Sbox[34] = _Xtime2Sbox[34]\r
-            Xtime3Sbox[34] = _Xtime3Sbox[34]\r
-            Xtime2[34] = _Xtime2[34]\r
-            Xtime9[34] = _Xtime9[34]\r
-            XtimeB[34] = _XtimeB[34]\r
-            XtimeD[34] = _XtimeD[34]\r
-            XtimeE[34] = _XtimeE[34]\r
-            Sbox[35] = _Sbox[35]\r
-            InvSbox[35] = _InvSbox[35]\r
-            Xtime2Sbox[35] = _Xtime2Sbox[35]\r
-            Xtime3Sbox[35] = _Xtime3Sbox[35]\r
-            Xtime2[35] = _Xtime2[35]\r
-            Xtime9[35] = _Xtime9[35]\r
-            XtimeB[35] = _XtimeB[35]\r
-            XtimeD[35] = _XtimeD[35]\r
-            XtimeE[35] = _XtimeE[35]\r
-            Sbox[36] = _Sbox[36]\r
-            InvSbox[36] = _InvSbox[36]\r
-            Xtime2Sbox[36] = _Xtime2Sbox[36]\r
-            Xtime3Sbox[36] = _Xtime3Sbox[36]\r
-            Xtime2[36] = _Xtime2[36]\r
-            Xtime9[36] = _Xtime9[36]\r
-            XtimeB[36] = _XtimeB[36]\r
-            XtimeD[36] = _XtimeD[36]\r
-            XtimeE[36] = _XtimeE[36]\r
-            Sbox[37] = _Sbox[37]\r
-            InvSbox[37] = _InvSbox[37]\r
-            Xtime2Sbox[37] = _Xtime2Sbox[37]\r
-            Xtime3Sbox[37] = _Xtime3Sbox[37]\r
-            Xtime2[37] = _Xtime2[37]\r
-            Xtime9[37] = _Xtime9[37]\r
-            XtimeB[37] = _XtimeB[37]\r
-            XtimeD[37] = _XtimeD[37]\r
-            XtimeE[37] = _XtimeE[37]\r
-            Sbox[38] = _Sbox[38]\r
-            InvSbox[38] = _InvSbox[38]\r
-            Xtime2Sbox[38] = _Xtime2Sbox[38]\r
-            Xtime3Sbox[38] = _Xtime3Sbox[38]\r
-            Xtime2[38] = _Xtime2[38]\r
-            Xtime9[38] = _Xtime9[38]\r
-            XtimeB[38] = _XtimeB[38]\r
-            XtimeD[38] = _XtimeD[38]\r
-            XtimeE[38] = _XtimeE[38]\r
-            Sbox[39] = _Sbox[39]\r
-            InvSbox[39] = _InvSbox[39]\r
-            Xtime2Sbox[39] = _Xtime2Sbox[39]\r
-            Xtime3Sbox[39] = _Xtime3Sbox[39]\r
-            Xtime2[39] = _Xtime2[39]\r
-            Xtime9[39] = _Xtime9[39]\r
-            XtimeB[39] = _XtimeB[39]\r
-            XtimeD[39] = _XtimeD[39]\r
-            XtimeE[39] = _XtimeE[39]\r
-            Sbox[40] = _Sbox[40]\r
-            InvSbox[40] = _InvSbox[40]\r
-            Xtime2Sbox[40] = _Xtime2Sbox[40]\r
-            Xtime3Sbox[40] = _Xtime3Sbox[40]\r
-            Xtime2[40] = _Xtime2[40]\r
-            Xtime9[40] = _Xtime9[40]\r
-            XtimeB[40] = _XtimeB[40]\r
-            XtimeD[40] = _XtimeD[40]\r
-            XtimeE[40] = _XtimeE[40]\r
-            Sbox[41] = _Sbox[41]\r
-            InvSbox[41] = _InvSbox[41]\r
-            Xtime2Sbox[41] = _Xtime2Sbox[41]\r
-            Xtime3Sbox[41] = _Xtime3Sbox[41]\r
-            Xtime2[41] = _Xtime2[41]\r
-            Xtime9[41] = _Xtime9[41]\r
-            XtimeB[41] = _XtimeB[41]\r
-            XtimeD[41] = _XtimeD[41]\r
-            XtimeE[41] = _XtimeE[41]\r
-            Sbox[42] = _Sbox[42]\r
-            InvSbox[42] = _InvSbox[42]\r
-            Xtime2Sbox[42] = _Xtime2Sbox[42]\r
-            Xtime3Sbox[42] = _Xtime3Sbox[42]\r
-            Xtime2[42] = _Xtime2[42]\r
-            Xtime9[42] = _Xtime9[42]\r
-            XtimeB[42] = _XtimeB[42]\r
-            XtimeD[42] = _XtimeD[42]\r
-            XtimeE[42] = _XtimeE[42]\r
-            Sbox[43] = _Sbox[43]\r
-            InvSbox[43] = _InvSbox[43]\r
-            Xtime2Sbox[43] = _Xtime2Sbox[43]\r
-            Xtime3Sbox[43] = _Xtime3Sbox[43]\r
-            Xtime2[43] = _Xtime2[43]\r
-            Xtime9[43] = _Xtime9[43]\r
-            XtimeB[43] = _XtimeB[43]\r
-            XtimeD[43] = _XtimeD[43]\r
-            XtimeE[43] = _XtimeE[43]\r
-            Sbox[44] = _Sbox[44]\r
-            InvSbox[44] = _InvSbox[44]\r
-            Xtime2Sbox[44] = _Xtime2Sbox[44]\r
-            Xtime3Sbox[44] = _Xtime3Sbox[44]\r
-            Xtime2[44] = _Xtime2[44]\r
-            Xtime9[44] = _Xtime9[44]\r
-            XtimeB[44] = _XtimeB[44]\r
-            XtimeD[44] = _XtimeD[44]\r
-            XtimeE[44] = _XtimeE[44]\r
-            Sbox[45] = _Sbox[45]\r
-            InvSbox[45] = _InvSbox[45]\r
-            Xtime2Sbox[45] = _Xtime2Sbox[45]\r
-            Xtime3Sbox[45] = _Xtime3Sbox[45]\r
-            Xtime2[45] = _Xtime2[45]\r
-            Xtime9[45] = _Xtime9[45]\r
-            XtimeB[45] = _XtimeB[45]\r
-            XtimeD[45] = _XtimeD[45]\r
-            XtimeE[45] = _XtimeE[45]\r
-            Sbox[46] = _Sbox[46]\r
-            InvSbox[46] = _InvSbox[46]\r
-            Xtime2Sbox[46] = _Xtime2Sbox[46]\r
-            Xtime3Sbox[46] = _Xtime3Sbox[46]\r
-            Xtime2[46] = _Xtime2[46]\r
-            Xtime9[46] = _Xtime9[46]\r
-            XtimeB[46] = _XtimeB[46]\r
-            XtimeD[46] = _XtimeD[46]\r
-            XtimeE[46] = _XtimeE[46]\r
-            Sbox[47] = _Sbox[47]\r
-            InvSbox[47] = _InvSbox[47]\r
-            Xtime2Sbox[47] = _Xtime2Sbox[47]\r
-            Xtime3Sbox[47] = _Xtime3Sbox[47]\r
-            Xtime2[47] = _Xtime2[47]\r
-            Xtime9[47] = _Xtime9[47]\r
-            XtimeB[47] = _XtimeB[47]\r
-            XtimeD[47] = _XtimeD[47]\r
-            XtimeE[47] = _XtimeE[47]\r
-            Sbox[48] = _Sbox[48]\r
-            InvSbox[48] = _InvSbox[48]\r
-            Xtime2Sbox[48] = _Xtime2Sbox[48]\r
-            Xtime3Sbox[48] = _Xtime3Sbox[48]\r
-            Xtime2[48] = _Xtime2[48]\r
-            Xtime9[48] = _Xtime9[48]\r
-            XtimeB[48] = _XtimeB[48]\r
-            XtimeD[48] = _XtimeD[48]\r
-            XtimeE[48] = _XtimeE[48]\r
-            Sbox[49] = _Sbox[49]\r
-            InvSbox[49] = _InvSbox[49]\r
-            Xtime2Sbox[49] = _Xtime2Sbox[49]\r
-            Xtime3Sbox[49] = _Xtime3Sbox[49]\r
-            Xtime2[49] = _Xtime2[49]\r
-            Xtime9[49] = _Xtime9[49]\r
-            XtimeB[49] = _XtimeB[49]\r
-            XtimeD[49] = _XtimeD[49]\r
-            XtimeE[49] = _XtimeE[49]\r
-            Sbox[50] = _Sbox[50]\r
-            InvSbox[50] = _InvSbox[50]\r
-            Xtime2Sbox[50] = _Xtime2Sbox[50]\r
-            Xtime3Sbox[50] = _Xtime3Sbox[50]\r
-            Xtime2[50] = _Xtime2[50]\r
-            Xtime9[50] = _Xtime9[50]\r
-            XtimeB[50] = _XtimeB[50]\r
-            XtimeD[50] = _XtimeD[50]\r
-            XtimeE[50] = _XtimeE[50]\r
-            Sbox[51] = _Sbox[51]\r
-            InvSbox[51] = _InvSbox[51]\r
-            Xtime2Sbox[51] = _Xtime2Sbox[51]\r
-            Xtime3Sbox[51] = _Xtime3Sbox[51]\r
-            Xtime2[51] = _Xtime2[51]\r
-            Xtime9[51] = _Xtime9[51]\r
-            XtimeB[51] = _XtimeB[51]\r
-            XtimeD[51] = _XtimeD[51]\r
-            XtimeE[51] = _XtimeE[51]\r
-            Sbox[52] = _Sbox[52]\r
-            InvSbox[52] = _InvSbox[52]\r
-            Xtime2Sbox[52] = _Xtime2Sbox[52]\r
-            Xtime3Sbox[52] = _Xtime3Sbox[52]\r
-            Xtime2[52] = _Xtime2[52]\r
-            Xtime9[52] = _Xtime9[52]\r
-            XtimeB[52] = _XtimeB[52]\r
-            XtimeD[52] = _XtimeD[52]\r
-            XtimeE[52] = _XtimeE[52]\r
-            Sbox[53] = _Sbox[53]\r
-            InvSbox[53] = _InvSbox[53]\r
-            Xtime2Sbox[53] = _Xtime2Sbox[53]\r
-            Xtime3Sbox[53] = _Xtime3Sbox[53]\r
-            Xtime2[53] = _Xtime2[53]\r
-            Xtime9[53] = _Xtime9[53]\r
-            XtimeB[53] = _XtimeB[53]\r
-            XtimeD[53] = _XtimeD[53]\r
-            XtimeE[53] = _XtimeE[53]\r
-            Sbox[54] = _Sbox[54]\r
-            InvSbox[54] = _InvSbox[54]\r
-            Xtime2Sbox[54] = _Xtime2Sbox[54]\r
-            Xtime3Sbox[54] = _Xtime3Sbox[54]\r
-            Xtime2[54] = _Xtime2[54]\r
-            Xtime9[54] = _Xtime9[54]\r
-            XtimeB[54] = _XtimeB[54]\r
-            XtimeD[54] = _XtimeD[54]\r
-            XtimeE[54] = _XtimeE[54]\r
-            Sbox[55] = _Sbox[55]\r
-            InvSbox[55] = _InvSbox[55]\r
-            Xtime2Sbox[55] = _Xtime2Sbox[55]\r
-            Xtime3Sbox[55] = _Xtime3Sbox[55]\r
-            Xtime2[55] = _Xtime2[55]\r
-            Xtime9[55] = _Xtime9[55]\r
-            XtimeB[55] = _XtimeB[55]\r
-            XtimeD[55] = _XtimeD[55]\r
-            XtimeE[55] = _XtimeE[55]\r
-            Sbox[56] = _Sbox[56]\r
-            InvSbox[56] = _InvSbox[56]\r
-            Xtime2Sbox[56] = _Xtime2Sbox[56]\r
-            Xtime3Sbox[56] = _Xtime3Sbox[56]\r
-            Xtime2[56] = _Xtime2[56]\r
-            Xtime9[56] = _Xtime9[56]\r
-            XtimeB[56] = _XtimeB[56]\r
-            XtimeD[56] = _XtimeD[56]\r
-            XtimeE[56] = _XtimeE[56]\r
-            Sbox[57] = _Sbox[57]\r
-            InvSbox[57] = _InvSbox[57]\r
-            Xtime2Sbox[57] = _Xtime2Sbox[57]\r
-            Xtime3Sbox[57] = _Xtime3Sbox[57]\r
-            Xtime2[57] = _Xtime2[57]\r
-            Xtime9[57] = _Xtime9[57]\r
-            XtimeB[57] = _XtimeB[57]\r
-            XtimeD[57] = _XtimeD[57]\r
-            XtimeE[57] = _XtimeE[57]\r
-            Sbox[58] = _Sbox[58]\r
-            InvSbox[58] = _InvSbox[58]\r
-            Xtime2Sbox[58] = _Xtime2Sbox[58]\r
-            Xtime3Sbox[58] = _Xtime3Sbox[58]\r
-            Xtime2[58] = _Xtime2[58]\r
-            Xtime9[58] = _Xtime9[58]\r
-            XtimeB[58] = _XtimeB[58]\r
-            XtimeD[58] = _XtimeD[58]\r
-            XtimeE[58] = _XtimeE[58]\r
-            Sbox[59] = _Sbox[59]\r
-            InvSbox[59] = _InvSbox[59]\r
-            Xtime2Sbox[59] = _Xtime2Sbox[59]\r
-            Xtime3Sbox[59] = _Xtime3Sbox[59]\r
-            Xtime2[59] = _Xtime2[59]\r
-            Xtime9[59] = _Xtime9[59]\r
-            XtimeB[59] = _XtimeB[59]\r
-            XtimeD[59] = _XtimeD[59]\r
-            XtimeE[59] = _XtimeE[59]\r
-            Sbox[60] = _Sbox[60]\r
-            InvSbox[60] = _InvSbox[60]\r
-            Xtime2Sbox[60] = _Xtime2Sbox[60]\r
-            Xtime3Sbox[60] = _Xtime3Sbox[60]\r
-            Xtime2[60] = _Xtime2[60]\r
-            Xtime9[60] = _Xtime9[60]\r
-            XtimeB[60] = _XtimeB[60]\r
-            XtimeD[60] = _XtimeD[60]\r
-            XtimeE[60] = _XtimeE[60]\r
-            Sbox[61] = _Sbox[61]\r
-            InvSbox[61] = _InvSbox[61]\r
-            Xtime2Sbox[61] = _Xtime2Sbox[61]\r
-            Xtime3Sbox[61] = _Xtime3Sbox[61]\r
-            Xtime2[61] = _Xtime2[61]\r
-            Xtime9[61] = _Xtime9[61]\r
-            XtimeB[61] = _XtimeB[61]\r
-            XtimeD[61] = _XtimeD[61]\r
-            XtimeE[61] = _XtimeE[61]\r
-            Sbox[62] = _Sbox[62]\r
-            InvSbox[62] = _InvSbox[62]\r
-            Xtime2Sbox[62] = _Xtime2Sbox[62]\r
-            Xtime3Sbox[62] = _Xtime3Sbox[62]\r
-            Xtime2[62] = _Xtime2[62]\r
-            Xtime9[62] = _Xtime9[62]\r
-            XtimeB[62] = _XtimeB[62]\r
-            XtimeD[62] = _XtimeD[62]\r
-            XtimeE[62] = _XtimeE[62]\r
-            Sbox[63] = _Sbox[63]\r
-            InvSbox[63] = _InvSbox[63]\r
-            Xtime2Sbox[63] = _Xtime2Sbox[63]\r
-            Xtime3Sbox[63] = _Xtime3Sbox[63]\r
-            Xtime2[63] = _Xtime2[63]\r
-            Xtime9[63] = _Xtime9[63]\r
-            XtimeB[63] = _XtimeB[63]\r
-            XtimeD[63] = _XtimeD[63]\r
-            XtimeE[63] = _XtimeE[63]\r
-            Sbox[64] = _Sbox[64]\r
-            InvSbox[64] = _InvSbox[64]\r
-            Xtime2Sbox[64] = _Xtime2Sbox[64]\r
-            Xtime3Sbox[64] = _Xtime3Sbox[64]\r
-            Xtime2[64] = _Xtime2[64]\r
-            Xtime9[64] = _Xtime9[64]\r
-            XtimeB[64] = _XtimeB[64]\r
-            XtimeD[64] = _XtimeD[64]\r
-            XtimeE[64] = _XtimeE[64]\r
-            Sbox[65] = _Sbox[65]\r
-            InvSbox[65] = _InvSbox[65]\r
-            Xtime2Sbox[65] = _Xtime2Sbox[65]\r
-            Xtime3Sbox[65] = _Xtime3Sbox[65]\r
-            Xtime2[65] = _Xtime2[65]\r
-            Xtime9[65] = _Xtime9[65]\r
-            XtimeB[65] = _XtimeB[65]\r
-            XtimeD[65] = _XtimeD[65]\r
-            XtimeE[65] = _XtimeE[65]\r
-            Sbox[66] = _Sbox[66]\r
-            InvSbox[66] = _InvSbox[66]\r
-            Xtime2Sbox[66] = _Xtime2Sbox[66]\r
-            Xtime3Sbox[66] = _Xtime3Sbox[66]\r
-            Xtime2[66] = _Xtime2[66]\r
-            Xtime9[66] = _Xtime9[66]\r
-            XtimeB[66] = _XtimeB[66]\r
-            XtimeD[66] = _XtimeD[66]\r
-            XtimeE[66] = _XtimeE[66]\r
-            Sbox[67] = _Sbox[67]\r
-            InvSbox[67] = _InvSbox[67]\r
-            Xtime2Sbox[67] = _Xtime2Sbox[67]\r
-            Xtime3Sbox[67] = _Xtime3Sbox[67]\r
-            Xtime2[67] = _Xtime2[67]\r
-            Xtime9[67] = _Xtime9[67]\r
-            XtimeB[67] = _XtimeB[67]\r
-            XtimeD[67] = _XtimeD[67]\r
-            XtimeE[67] = _XtimeE[67]\r
-            Sbox[68] = _Sbox[68]\r
-            InvSbox[68] = _InvSbox[68]\r
-            Xtime2Sbox[68] = _Xtime2Sbox[68]\r
-            Xtime3Sbox[68] = _Xtime3Sbox[68]\r
-            Xtime2[68] = _Xtime2[68]\r
-            Xtime9[68] = _Xtime9[68]\r
-            XtimeB[68] = _XtimeB[68]\r
-            XtimeD[68] = _XtimeD[68]\r
-            XtimeE[68] = _XtimeE[68]\r
-            Sbox[69] = _Sbox[69]\r
-            InvSbox[69] = _InvSbox[69]\r
-            Xtime2Sbox[69] = _Xtime2Sbox[69]\r
-            Xtime3Sbox[69] = _Xtime3Sbox[69]\r
-            Xtime2[69] = _Xtime2[69]\r
-            Xtime9[69] = _Xtime9[69]\r
-            XtimeB[69] = _XtimeB[69]\r
-            XtimeD[69] = _XtimeD[69]\r
-            XtimeE[69] = _XtimeE[69]\r
-            Sbox[70] = _Sbox[70]\r
-            InvSbox[70] = _InvSbox[70]\r
-            Xtime2Sbox[70] = _Xtime2Sbox[70]\r
-            Xtime3Sbox[70] = _Xtime3Sbox[70]\r
-            Xtime2[70] = _Xtime2[70]\r
-            Xtime9[70] = _Xtime9[70]\r
-            XtimeB[70] = _XtimeB[70]\r
-            XtimeD[70] = _XtimeD[70]\r
-            XtimeE[70] = _XtimeE[70]\r
-            Sbox[71] = _Sbox[71]\r
-            InvSbox[71] = _InvSbox[71]\r
-            Xtime2Sbox[71] = _Xtime2Sbox[71]\r
-            Xtime3Sbox[71] = _Xtime3Sbox[71]\r
-            Xtime2[71] = _Xtime2[71]\r
-            Xtime9[71] = _Xtime9[71]\r
-            XtimeB[71] = _XtimeB[71]\r
-            XtimeD[71] = _XtimeD[71]\r
-            XtimeE[71] = _XtimeE[71]\r
-            Sbox[72] = _Sbox[72]\r
-            InvSbox[72] = _InvSbox[72]\r
-            Xtime2Sbox[72] = _Xtime2Sbox[72]\r
-            Xtime3Sbox[72] = _Xtime3Sbox[72]\r
-            Xtime2[72] = _Xtime2[72]\r
-            Xtime9[72] = _Xtime9[72]\r
-            XtimeB[72] = _XtimeB[72]\r
-            XtimeD[72] = _XtimeD[72]\r
-            XtimeE[72] = _XtimeE[72]\r
-            Sbox[73] = _Sbox[73]\r
-            InvSbox[73] = _InvSbox[73]\r
-            Xtime2Sbox[73] = _Xtime2Sbox[73]\r
-            Xtime3Sbox[73] = _Xtime3Sbox[73]\r
-            Xtime2[73] = _Xtime2[73]\r
-            Xtime9[73] = _Xtime9[73]\r
-            XtimeB[73] = _XtimeB[73]\r
-            XtimeD[73] = _XtimeD[73]\r
-            XtimeE[73] = _XtimeE[73]\r
-            Sbox[74] = _Sbox[74]\r
-            InvSbox[74] = _InvSbox[74]\r
-            Xtime2Sbox[74] = _Xtime2Sbox[74]\r
-            Xtime3Sbox[74] = _Xtime3Sbox[74]\r
-            Xtime2[74] = _Xtime2[74]\r
-            Xtime9[74] = _Xtime9[74]\r
-            XtimeB[74] = _XtimeB[74]\r
-            XtimeD[74] = _XtimeD[74]\r
-            XtimeE[74] = _XtimeE[74]\r
-            Sbox[75] = _Sbox[75]\r
-            InvSbox[75] = _InvSbox[75]\r
-            Xtime2Sbox[75] = _Xtime2Sbox[75]\r
-            Xtime3Sbox[75] = _Xtime3Sbox[75]\r
-            Xtime2[75] = _Xtime2[75]\r
-            Xtime9[75] = _Xtime9[75]\r
-            XtimeB[75] = _XtimeB[75]\r
-            XtimeD[75] = _XtimeD[75]\r
-            XtimeE[75] = _XtimeE[75]\r
-            Sbox[76] = _Sbox[76]\r
-            InvSbox[76] = _InvSbox[76]\r
-            Xtime2Sbox[76] = _Xtime2Sbox[76]\r
-            Xtime3Sbox[76] = _Xtime3Sbox[76]\r
-            Xtime2[76] = _Xtime2[76]\r
-            Xtime9[76] = _Xtime9[76]\r
-            XtimeB[76] = _XtimeB[76]\r
-            XtimeD[76] = _XtimeD[76]\r
-            XtimeE[76] = _XtimeE[76]\r
-            Sbox[77] = _Sbox[77]\r
-            InvSbox[77] = _InvSbox[77]\r
-            Xtime2Sbox[77] = _Xtime2Sbox[77]\r
-            Xtime3Sbox[77] = _Xtime3Sbox[77]\r
-            Xtime2[77] = _Xtime2[77]\r
-            Xtime9[77] = _Xtime9[77]\r
-            XtimeB[77] = _XtimeB[77]\r
-            XtimeD[77] = _XtimeD[77]\r
-            XtimeE[77] = _XtimeE[77]\r
-            Sbox[78] = _Sbox[78]\r
-            InvSbox[78] = _InvSbox[78]\r
-            Xtime2Sbox[78] = _Xtime2Sbox[78]\r
-            Xtime3Sbox[78] = _Xtime3Sbox[78]\r
-            Xtime2[78] = _Xtime2[78]\r
-            Xtime9[78] = _Xtime9[78]\r
-            XtimeB[78] = _XtimeB[78]\r
-            XtimeD[78] = _XtimeD[78]\r
-            XtimeE[78] = _XtimeE[78]\r
-            Sbox[79] = _Sbox[79]\r
-            InvSbox[79] = _InvSbox[79]\r
-            Xtime2Sbox[79] = _Xtime2Sbox[79]\r
-            Xtime3Sbox[79] = _Xtime3Sbox[79]\r
-            Xtime2[79] = _Xtime2[79]\r
-            Xtime9[79] = _Xtime9[79]\r
-            XtimeB[79] = _XtimeB[79]\r
-            XtimeD[79] = _XtimeD[79]\r
-            XtimeE[79] = _XtimeE[79]\r
-            Sbox[80] = _Sbox[80]\r
-            InvSbox[80] = _InvSbox[80]\r
-            Xtime2Sbox[80] = _Xtime2Sbox[80]\r
-            Xtime3Sbox[80] = _Xtime3Sbox[80]\r
-            Xtime2[80] = _Xtime2[80]\r
-            Xtime9[80] = _Xtime9[80]\r
-            XtimeB[80] = _XtimeB[80]\r
-            XtimeD[80] = _XtimeD[80]\r
-            XtimeE[80] = _XtimeE[80]\r
-            Sbox[81] = _Sbox[81]\r
-            InvSbox[81] = _InvSbox[81]\r
-            Xtime2Sbox[81] = _Xtime2Sbox[81]\r
-            Xtime3Sbox[81] = _Xtime3Sbox[81]\r
-            Xtime2[81] = _Xtime2[81]\r
-            Xtime9[81] = _Xtime9[81]\r
-            XtimeB[81] = _XtimeB[81]\r
-            XtimeD[81] = _XtimeD[81]\r
-            XtimeE[81] = _XtimeE[81]\r
-            Sbox[82] = _Sbox[82]\r
-            InvSbox[82] = _InvSbox[82]\r
-            Xtime2Sbox[82] = _Xtime2Sbox[82]\r
-            Xtime3Sbox[82] = _Xtime3Sbox[82]\r
-            Xtime2[82] = _Xtime2[82]\r
-            Xtime9[82] = _Xtime9[82]\r
-            XtimeB[82] = _XtimeB[82]\r
-            XtimeD[82] = _XtimeD[82]\r
-            XtimeE[82] = _XtimeE[82]\r
-            Sbox[83] = _Sbox[83]\r
-            InvSbox[83] = _InvSbox[83]\r
-            Xtime2Sbox[83] = _Xtime2Sbox[83]\r
-            Xtime3Sbox[83] = _Xtime3Sbox[83]\r
-            Xtime2[83] = _Xtime2[83]\r
-            Xtime9[83] = _Xtime9[83]\r
-            XtimeB[83] = _XtimeB[83]\r
-            XtimeD[83] = _XtimeD[83]\r
-            XtimeE[83] = _XtimeE[83]\r
-            Sbox[84] = _Sbox[84]\r
-            InvSbox[84] = _InvSbox[84]\r
-            Xtime2Sbox[84] = _Xtime2Sbox[84]\r
-            Xtime3Sbox[84] = _Xtime3Sbox[84]\r
-            Xtime2[84] = _Xtime2[84]\r
-            Xtime9[84] = _Xtime9[84]\r
-            XtimeB[84] = _XtimeB[84]\r
-            XtimeD[84] = _XtimeD[84]\r
-            XtimeE[84] = _XtimeE[84]\r
-            Sbox[85] = _Sbox[85]\r
-            InvSbox[85] = _InvSbox[85]\r
-            Xtime2Sbox[85] = _Xtime2Sbox[85]\r
-            Xtime3Sbox[85] = _Xtime3Sbox[85]\r
-            Xtime2[85] = _Xtime2[85]\r
-            Xtime9[85] = _Xtime9[85]\r
-            XtimeB[85] = _XtimeB[85]\r
-            XtimeD[85] = _XtimeD[85]\r
-            XtimeE[85] = _XtimeE[85]\r
-            Sbox[86] = _Sbox[86]\r
-            InvSbox[86] = _InvSbox[86]\r
-            Xtime2Sbox[86] = _Xtime2Sbox[86]\r
-            Xtime3Sbox[86] = _Xtime3Sbox[86]\r
-            Xtime2[86] = _Xtime2[86]\r
-            Xtime9[86] = _Xtime9[86]\r
-            XtimeB[86] = _XtimeB[86]\r
-            XtimeD[86] = _XtimeD[86]\r
-            XtimeE[86] = _XtimeE[86]\r
-            Sbox[87] = _Sbox[87]\r
-            InvSbox[87] = _InvSbox[87]\r
-            Xtime2Sbox[87] = _Xtime2Sbox[87]\r
-            Xtime3Sbox[87] = _Xtime3Sbox[87]\r
-            Xtime2[87] = _Xtime2[87]\r
-            Xtime9[87] = _Xtime9[87]\r
-            XtimeB[87] = _XtimeB[87]\r
-            XtimeD[87] = _XtimeD[87]\r
-            XtimeE[87] = _XtimeE[87]\r
-            Sbox[88] = _Sbox[88]\r
-            InvSbox[88] = _InvSbox[88]\r
-            Xtime2Sbox[88] = _Xtime2Sbox[88]\r
-            Xtime3Sbox[88] = _Xtime3Sbox[88]\r
-            Xtime2[88] = _Xtime2[88]\r
-            Xtime9[88] = _Xtime9[88]\r
-            XtimeB[88] = _XtimeB[88]\r
-            XtimeD[88] = _XtimeD[88]\r
-            XtimeE[88] = _XtimeE[88]\r
-            Sbox[89] = _Sbox[89]\r
-            InvSbox[89] = _InvSbox[89]\r
-            Xtime2Sbox[89] = _Xtime2Sbox[89]\r
-            Xtime3Sbox[89] = _Xtime3Sbox[89]\r
-            Xtime2[89] = _Xtime2[89]\r
-            Xtime9[89] = _Xtime9[89]\r
-            XtimeB[89] = _XtimeB[89]\r
-            XtimeD[89] = _XtimeD[89]\r
-            XtimeE[89] = _XtimeE[89]\r
-            Sbox[90] = _Sbox[90]\r
-            InvSbox[90] = _InvSbox[90]\r
-            Xtime2Sbox[90] = _Xtime2Sbox[90]\r
-            Xtime3Sbox[90] = _Xtime3Sbox[90]\r
-            Xtime2[90] = _Xtime2[90]\r
-            Xtime9[90] = _Xtime9[90]\r
-            XtimeB[90] = _XtimeB[90]\r
-            XtimeD[90] = _XtimeD[90]\r
-            XtimeE[90] = _XtimeE[90]\r
-            Sbox[91] = _Sbox[91]\r
-            InvSbox[91] = _InvSbox[91]\r
-            Xtime2Sbox[91] = _Xtime2Sbox[91]\r
-            Xtime3Sbox[91] = _Xtime3Sbox[91]\r
-            Xtime2[91] = _Xtime2[91]\r
-            Xtime9[91] = _Xtime9[91]\r
-            XtimeB[91] = _XtimeB[91]\r
-            XtimeD[91] = _XtimeD[91]\r
-            XtimeE[91] = _XtimeE[91]\r
-            Sbox[92] = _Sbox[92]\r
-            InvSbox[92] = _InvSbox[92]\r
-            Xtime2Sbox[92] = _Xtime2Sbox[92]\r
-            Xtime3Sbox[92] = _Xtime3Sbox[92]\r
-            Xtime2[92] = _Xtime2[92]\r
-            Xtime9[92] = _Xtime9[92]\r
-            XtimeB[92] = _XtimeB[92]\r
-            XtimeD[92] = _XtimeD[92]\r
-            XtimeE[92] = _XtimeE[92]\r
-            Sbox[93] = _Sbox[93]\r
-            InvSbox[93] = _InvSbox[93]\r
-            Xtime2Sbox[93] = _Xtime2Sbox[93]\r
-            Xtime3Sbox[93] = _Xtime3Sbox[93]\r
-            Xtime2[93] = _Xtime2[93]\r
-            Xtime9[93] = _Xtime9[93]\r
-            XtimeB[93] = _XtimeB[93]\r
-            XtimeD[93] = _XtimeD[93]\r
-            XtimeE[93] = _XtimeE[93]\r
-            Sbox[94] = _Sbox[94]\r
-            InvSbox[94] = _InvSbox[94]\r
-            Xtime2Sbox[94] = _Xtime2Sbox[94]\r
-            Xtime3Sbox[94] = _Xtime3Sbox[94]\r
-            Xtime2[94] = _Xtime2[94]\r
-            Xtime9[94] = _Xtime9[94]\r
-            XtimeB[94] = _XtimeB[94]\r
-            XtimeD[94] = _XtimeD[94]\r
-            XtimeE[94] = _XtimeE[94]\r
-            Sbox[95] = _Sbox[95]\r
-            InvSbox[95] = _InvSbox[95]\r
-            Xtime2Sbox[95] = _Xtime2Sbox[95]\r
-            Xtime3Sbox[95] = _Xtime3Sbox[95]\r
-            Xtime2[95] = _Xtime2[95]\r
-            Xtime9[95] = _Xtime9[95]\r
-            XtimeB[95] = _XtimeB[95]\r
-            XtimeD[95] = _XtimeD[95]\r
-            XtimeE[95] = _XtimeE[95]\r
-            Sbox[96] = _Sbox[96]\r
-            InvSbox[96] = _InvSbox[96]\r
-            Xtime2Sbox[96] = _Xtime2Sbox[96]\r
-            Xtime3Sbox[96] = _Xtime3Sbox[96]\r
-            Xtime2[96] = _Xtime2[96]\r
-            Xtime9[96] = _Xtime9[96]\r
-            XtimeB[96] = _XtimeB[96]\r
-            XtimeD[96] = _XtimeD[96]\r
-            XtimeE[96] = _XtimeE[96]\r
-            Sbox[97] = _Sbox[97]\r
-            InvSbox[97] = _InvSbox[97]\r
-            Xtime2Sbox[97] = _Xtime2Sbox[97]\r
-            Xtime3Sbox[97] = _Xtime3Sbox[97]\r
-            Xtime2[97] = _Xtime2[97]\r
-            Xtime9[97] = _Xtime9[97]\r
-            XtimeB[97] = _XtimeB[97]\r
-            XtimeD[97] = _XtimeD[97]\r
-            XtimeE[97] = _XtimeE[97]\r
-            Sbox[98] = _Sbox[98]\r
-            InvSbox[98] = _InvSbox[98]\r
-            Xtime2Sbox[98] = _Xtime2Sbox[98]\r
-            Xtime3Sbox[98] = _Xtime3Sbox[98]\r
-            Xtime2[98] = _Xtime2[98]\r
-            Xtime9[98] = _Xtime9[98]\r
-            XtimeB[98] = _XtimeB[98]\r
-            XtimeD[98] = _XtimeD[98]\r
-            XtimeE[98] = _XtimeE[98]\r
-            Sbox[99] = _Sbox[99]\r
-            InvSbox[99] = _InvSbox[99]\r
-            Xtime2Sbox[99] = _Xtime2Sbox[99]\r
-            Xtime3Sbox[99] = _Xtime3Sbox[99]\r
-            Xtime2[99] = _Xtime2[99]\r
-            Xtime9[99] = _Xtime9[99]\r
-            XtimeB[99] = _XtimeB[99]\r
-            XtimeD[99] = _XtimeD[99]\r
-            XtimeE[99] = _XtimeE[99]\r
-            Sbox[100] = _Sbox[100]\r
-            InvSbox[100] = _InvSbox[100]\r
-            Xtime2Sbox[100] = _Xtime2Sbox[100]\r
-            Xtime3Sbox[100] = _Xtime3Sbox[100]\r
-            Xtime2[100] = _Xtime2[100]\r
-            Xtime9[100] = _Xtime9[100]\r
-            XtimeB[100] = _XtimeB[100]\r
-            XtimeD[100] = _XtimeD[100]\r
-            XtimeE[100] = _XtimeE[100]\r
-            Sbox[101] = _Sbox[101]\r
-            InvSbox[101] = _InvSbox[101]\r
-            Xtime2Sbox[101] = _Xtime2Sbox[101]\r
-            Xtime3Sbox[101] = _Xtime3Sbox[101]\r
-            Xtime2[101] = _Xtime2[101]\r
-            Xtime9[101] = _Xtime9[101]\r
-            XtimeB[101] = _XtimeB[101]\r
-            XtimeD[101] = _XtimeD[101]\r
-            XtimeE[101] = _XtimeE[101]\r
-            Sbox[102] = _Sbox[102]\r
-            InvSbox[102] = _InvSbox[102]\r
-            Xtime2Sbox[102] = _Xtime2Sbox[102]\r
-            Xtime3Sbox[102] = _Xtime3Sbox[102]\r
-            Xtime2[102] = _Xtime2[102]\r
-            Xtime9[102] = _Xtime9[102]\r
-            XtimeB[102] = _XtimeB[102]\r
-            XtimeD[102] = _XtimeD[102]\r
-            XtimeE[102] = _XtimeE[102]\r
-            Sbox[103] = _Sbox[103]\r
-            InvSbox[103] = _InvSbox[103]\r
-            Xtime2Sbox[103] = _Xtime2Sbox[103]\r
-            Xtime3Sbox[103] = _Xtime3Sbox[103]\r
-            Xtime2[103] = _Xtime2[103]\r
-            Xtime9[103] = _Xtime9[103]\r
-            XtimeB[103] = _XtimeB[103]\r
-            XtimeD[103] = _XtimeD[103]\r
-            XtimeE[103] = _XtimeE[103]\r
-            Sbox[104] = _Sbox[104]\r
-            InvSbox[104] = _InvSbox[104]\r
-            Xtime2Sbox[104] = _Xtime2Sbox[104]\r
-            Xtime3Sbox[104] = _Xtime3Sbox[104]\r
-            Xtime2[104] = _Xtime2[104]\r
-            Xtime9[104] = _Xtime9[104]\r
-            XtimeB[104] = _XtimeB[104]\r
-            XtimeD[104] = _XtimeD[104]\r
-            XtimeE[104] = _XtimeE[104]\r
-            Sbox[105] = _Sbox[105]\r
-            InvSbox[105] = _InvSbox[105]\r
-            Xtime2Sbox[105] = _Xtime2Sbox[105]\r
-            Xtime3Sbox[105] = _Xtime3Sbox[105]\r
-            Xtime2[105] = _Xtime2[105]\r
-            Xtime9[105] = _Xtime9[105]\r
-            XtimeB[105] = _XtimeB[105]\r
-            XtimeD[105] = _XtimeD[105]\r
-            XtimeE[105] = _XtimeE[105]\r
-            Sbox[106] = _Sbox[106]\r
-            InvSbox[106] = _InvSbox[106]\r
-            Xtime2Sbox[106] = _Xtime2Sbox[106]\r
-            Xtime3Sbox[106] = _Xtime3Sbox[106]\r
-            Xtime2[106] = _Xtime2[106]\r
-            Xtime9[106] = _Xtime9[106]\r
-            XtimeB[106] = _XtimeB[106]\r
-            XtimeD[106] = _XtimeD[106]\r
-            XtimeE[106] = _XtimeE[106]\r
-            Sbox[107] = _Sbox[107]\r
-            InvSbox[107] = _InvSbox[107]\r
-            Xtime2Sbox[107] = _Xtime2Sbox[107]\r
-            Xtime3Sbox[107] = _Xtime3Sbox[107]\r
-            Xtime2[107] = _Xtime2[107]\r
-            Xtime9[107] = _Xtime9[107]\r
-            XtimeB[107] = _XtimeB[107]\r
-            XtimeD[107] = _XtimeD[107]\r
-            XtimeE[107] = _XtimeE[107]\r
-            Sbox[108] = _Sbox[108]\r
-            InvSbox[108] = _InvSbox[108]\r
-            Xtime2Sbox[108] = _Xtime2Sbox[108]\r
-            Xtime3Sbox[108] = _Xtime3Sbox[108]\r
-            Xtime2[108] = _Xtime2[108]\r
-            Xtime9[108] = _Xtime9[108]\r
-            XtimeB[108] = _XtimeB[108]\r
-            XtimeD[108] = _XtimeD[108]\r
-            XtimeE[108] = _XtimeE[108]\r
-            Sbox[109] = _Sbox[109]\r
-            InvSbox[109] = _InvSbox[109]\r
-            Xtime2Sbox[109] = _Xtime2Sbox[109]\r
-            Xtime3Sbox[109] = _Xtime3Sbox[109]\r
-            Xtime2[109] = _Xtime2[109]\r
-            Xtime9[109] = _Xtime9[109]\r
-            XtimeB[109] = _XtimeB[109]\r
-            XtimeD[109] = _XtimeD[109]\r
-            XtimeE[109] = _XtimeE[109]\r
-            Sbox[110] = _Sbox[110]\r
-            InvSbox[110] = _InvSbox[110]\r
-            Xtime2Sbox[110] = _Xtime2Sbox[110]\r
-            Xtime3Sbox[110] = _Xtime3Sbox[110]\r
-            Xtime2[110] = _Xtime2[110]\r
-            Xtime9[110] = _Xtime9[110]\r
-            XtimeB[110] = _XtimeB[110]\r
-            XtimeD[110] = _XtimeD[110]\r
-            XtimeE[110] = _XtimeE[110]\r
-            Sbox[111] = _Sbox[111]\r
-            InvSbox[111] = _InvSbox[111]\r
-            Xtime2Sbox[111] = _Xtime2Sbox[111]\r
-            Xtime3Sbox[111] = _Xtime3Sbox[111]\r
-            Xtime2[111] = _Xtime2[111]\r
-            Xtime9[111] = _Xtime9[111]\r
-            XtimeB[111] = _XtimeB[111]\r
-            XtimeD[111] = _XtimeD[111]\r
-            XtimeE[111] = _XtimeE[111]\r
-            Sbox[112] = _Sbox[112]\r
-            InvSbox[112] = _InvSbox[112]\r
-            Xtime2Sbox[112] = _Xtime2Sbox[112]\r
-            Xtime3Sbox[112] = _Xtime3Sbox[112]\r
-            Xtime2[112] = _Xtime2[112]\r
-            Xtime9[112] = _Xtime9[112]\r
-            XtimeB[112] = _XtimeB[112]\r
-            XtimeD[112] = _XtimeD[112]\r
-            XtimeE[112] = _XtimeE[112]\r
-            Sbox[113] = _Sbox[113]\r
-            InvSbox[113] = _InvSbox[113]\r
-            Xtime2Sbox[113] = _Xtime2Sbox[113]\r
-            Xtime3Sbox[113] = _Xtime3Sbox[113]\r
-            Xtime2[113] = _Xtime2[113]\r
-            Xtime9[113] = _Xtime9[113]\r
-            XtimeB[113] = _XtimeB[113]\r
-            XtimeD[113] = _XtimeD[113]\r
-            XtimeE[113] = _XtimeE[113]\r
-            Sbox[114] = _Sbox[114]\r
-            InvSbox[114] = _InvSbox[114]\r
-            Xtime2Sbox[114] = _Xtime2Sbox[114]\r
-            Xtime3Sbox[114] = _Xtime3Sbox[114]\r
-            Xtime2[114] = _Xtime2[114]\r
-            Xtime9[114] = _Xtime9[114]\r
-            XtimeB[114] = _XtimeB[114]\r
-            XtimeD[114] = _XtimeD[114]\r
-            XtimeE[114] = _XtimeE[114]\r
-            Sbox[115] = _Sbox[115]\r
-            InvSbox[115] = _InvSbox[115]\r
-            Xtime2Sbox[115] = _Xtime2Sbox[115]\r
-            Xtime3Sbox[115] = _Xtime3Sbox[115]\r
-            Xtime2[115] = _Xtime2[115]\r
-            Xtime9[115] = _Xtime9[115]\r
-            XtimeB[115] = _XtimeB[115]\r
-            XtimeD[115] = _XtimeD[115]\r
-            XtimeE[115] = _XtimeE[115]\r
-            Sbox[116] = _Sbox[116]\r
-            InvSbox[116] = _InvSbox[116]\r
-            Xtime2Sbox[116] = _Xtime2Sbox[116]\r
-            Xtime3Sbox[116] = _Xtime3Sbox[116]\r
-            Xtime2[116] = _Xtime2[116]\r
-            Xtime9[116] = _Xtime9[116]\r
-            XtimeB[116] = _XtimeB[116]\r
-            XtimeD[116] = _XtimeD[116]\r
-            XtimeE[116] = _XtimeE[116]\r
-            Sbox[117] = _Sbox[117]\r
-            InvSbox[117] = _InvSbox[117]\r
-            Xtime2Sbox[117] = _Xtime2Sbox[117]\r
-            Xtime3Sbox[117] = _Xtime3Sbox[117]\r
-            Xtime2[117] = _Xtime2[117]\r
-            Xtime9[117] = _Xtime9[117]\r
-            XtimeB[117] = _XtimeB[117]\r
-            XtimeD[117] = _XtimeD[117]\r
-            XtimeE[117] = _XtimeE[117]\r
-            Sbox[118] = _Sbox[118]\r
-            InvSbox[118] = _InvSbox[118]\r
-            Xtime2Sbox[118] = _Xtime2Sbox[118]\r
-            Xtime3Sbox[118] = _Xtime3Sbox[118]\r
-            Xtime2[118] = _Xtime2[118]\r
-            Xtime9[118] = _Xtime9[118]\r
-            XtimeB[118] = _XtimeB[118]\r
-            XtimeD[118] = _XtimeD[118]\r
-            XtimeE[118] = _XtimeE[118]\r
-            Sbox[119] = _Sbox[119]\r
-            InvSbox[119] = _InvSbox[119]\r
-            Xtime2Sbox[119] = _Xtime2Sbox[119]\r
-            Xtime3Sbox[119] = _Xtime3Sbox[119]\r
-            Xtime2[119] = _Xtime2[119]\r
-            Xtime9[119] = _Xtime9[119]\r
-            XtimeB[119] = _XtimeB[119]\r
-            XtimeD[119] = _XtimeD[119]\r
-            XtimeE[119] = _XtimeE[119]\r
-            Sbox[120] = _Sbox[120]\r
-            InvSbox[120] = _InvSbox[120]\r
-            Xtime2Sbox[120] = _Xtime2Sbox[120]\r
-            Xtime3Sbox[120] = _Xtime3Sbox[120]\r
-            Xtime2[120] = _Xtime2[120]\r
-            Xtime9[120] = _Xtime9[120]\r
-            XtimeB[120] = _XtimeB[120]\r
-            XtimeD[120] = _XtimeD[120]\r
-            XtimeE[120] = _XtimeE[120]\r
-            Sbox[121] = _Sbox[121]\r
-            InvSbox[121] = _InvSbox[121]\r
-            Xtime2Sbox[121] = _Xtime2Sbox[121]\r
-            Xtime3Sbox[121] = _Xtime3Sbox[121]\r
-            Xtime2[121] = _Xtime2[121]\r
-            Xtime9[121] = _Xtime9[121]\r
-            XtimeB[121] = _XtimeB[121]\r
-            XtimeD[121] = _XtimeD[121]\r
-            XtimeE[121] = _XtimeE[121]\r
-            Sbox[122] = _Sbox[122]\r
-            InvSbox[122] = _InvSbox[122]\r
-            Xtime2Sbox[122] = _Xtime2Sbox[122]\r
-            Xtime3Sbox[122] = _Xtime3Sbox[122]\r
-            Xtime2[122] = _Xtime2[122]\r
-            Xtime9[122] = _Xtime9[122]\r
-            XtimeB[122] = _XtimeB[122]\r
-            XtimeD[122] = _XtimeD[122]\r
-            XtimeE[122] = _XtimeE[122]\r
-            Sbox[123] = _Sbox[123]\r
-            InvSbox[123] = _InvSbox[123]\r
-            Xtime2Sbox[123] = _Xtime2Sbox[123]\r
-            Xtime3Sbox[123] = _Xtime3Sbox[123]\r
-            Xtime2[123] = _Xtime2[123]\r
-            Xtime9[123] = _Xtime9[123]\r
-            XtimeB[123] = _XtimeB[123]\r
-            XtimeD[123] = _XtimeD[123]\r
-            XtimeE[123] = _XtimeE[123]\r
-            Sbox[124] = _Sbox[124]\r
-            InvSbox[124] = _InvSbox[124]\r
-            Xtime2Sbox[124] = _Xtime2Sbox[124]\r
-            Xtime3Sbox[124] = _Xtime3Sbox[124]\r
-            Xtime2[124] = _Xtime2[124]\r
-            Xtime9[124] = _Xtime9[124]\r
-            XtimeB[124] = _XtimeB[124]\r
-            XtimeD[124] = _XtimeD[124]\r
-            XtimeE[124] = _XtimeE[124]\r
-            Sbox[125] = _Sbox[125]\r
-            InvSbox[125] = _InvSbox[125]\r
-            Xtime2Sbox[125] = _Xtime2Sbox[125]\r
-            Xtime3Sbox[125] = _Xtime3Sbox[125]\r
-            Xtime2[125] = _Xtime2[125]\r
-            Xtime9[125] = _Xtime9[125]\r
-            XtimeB[125] = _XtimeB[125]\r
-            XtimeD[125] = _XtimeD[125]\r
-            XtimeE[125] = _XtimeE[125]\r
-            Sbox[126] = _Sbox[126]\r
-            InvSbox[126] = _InvSbox[126]\r
-            Xtime2Sbox[126] = _Xtime2Sbox[126]\r
-            Xtime3Sbox[126] = _Xtime3Sbox[126]\r
-            Xtime2[126] = _Xtime2[126]\r
-            Xtime9[126] = _Xtime9[126]\r
-            XtimeB[126] = _XtimeB[126]\r
-            XtimeD[126] = _XtimeD[126]\r
-            XtimeE[126] = _XtimeE[126]\r
-            Sbox[127] = _Sbox[127]\r
-            InvSbox[127] = _InvSbox[127]\r
-            Xtime2Sbox[127] = _Xtime2Sbox[127]\r
-            Xtime3Sbox[127] = _Xtime3Sbox[127]\r
-            Xtime2[127] = _Xtime2[127]\r
-            Xtime9[127] = _Xtime9[127]\r
-            XtimeB[127] = _XtimeB[127]\r
-            XtimeD[127] = _XtimeD[127]\r
-            XtimeE[127] = _XtimeE[127]\r
-            Sbox[128] = _Sbox[128]\r
-            InvSbox[128] = _InvSbox[128]\r
-            Xtime2Sbox[128] = _Xtime2Sbox[128]\r
-            Xtime3Sbox[128] = _Xtime3Sbox[128]\r
-            Xtime2[128] = _Xtime2[128]\r
-            Xtime9[128] = _Xtime9[128]\r
-            XtimeB[128] = _XtimeB[128]\r
-            XtimeD[128] = _XtimeD[128]\r
-            XtimeE[128] = _XtimeE[128]\r
-            Sbox[129] = _Sbox[129]\r
-            InvSbox[129] = _InvSbox[129]\r
-            Xtime2Sbox[129] = _Xtime2Sbox[129]\r
-            Xtime3Sbox[129] = _Xtime3Sbox[129]\r
-            Xtime2[129] = _Xtime2[129]\r
-            Xtime9[129] = _Xtime9[129]\r
-            XtimeB[129] = _XtimeB[129]\r
-            XtimeD[129] = _XtimeD[129]\r
-            XtimeE[129] = _XtimeE[129]\r
-            Sbox[130] = _Sbox[130]\r
-            InvSbox[130] = _InvSbox[130]\r
-            Xtime2Sbox[130] = _Xtime2Sbox[130]\r
-            Xtime3Sbox[130] = _Xtime3Sbox[130]\r
-            Xtime2[130] = _Xtime2[130]\r
-            Xtime9[130] = _Xtime9[130]\r
-            XtimeB[130] = _XtimeB[130]\r
-            XtimeD[130] = _XtimeD[130]\r
-            XtimeE[130] = _XtimeE[130]\r
-            Sbox[131] = _Sbox[131]\r
-            InvSbox[131] = _InvSbox[131]\r
-            Xtime2Sbox[131] = _Xtime2Sbox[131]\r
-            Xtime3Sbox[131] = _Xtime3Sbox[131]\r
-            Xtime2[131] = _Xtime2[131]\r
-            Xtime9[131] = _Xtime9[131]\r
-            XtimeB[131] = _XtimeB[131]\r
-            XtimeD[131] = _XtimeD[131]\r
-            XtimeE[131] = _XtimeE[131]\r
-            Sbox[132] = _Sbox[132]\r
-            InvSbox[132] = _InvSbox[132]\r
-            Xtime2Sbox[132] = _Xtime2Sbox[132]\r
-            Xtime3Sbox[132] = _Xtime3Sbox[132]\r
-            Xtime2[132] = _Xtime2[132]\r
-            Xtime9[132] = _Xtime9[132]\r
-            XtimeB[132] = _XtimeB[132]\r
-            XtimeD[132] = _XtimeD[132]\r
-            XtimeE[132] = _XtimeE[132]\r
-            Sbox[133] = _Sbox[133]\r
-            InvSbox[133] = _InvSbox[133]\r
-            Xtime2Sbox[133] = _Xtime2Sbox[133]\r
-            Xtime3Sbox[133] = _Xtime3Sbox[133]\r
-            Xtime2[133] = _Xtime2[133]\r
-            Xtime9[133] = _Xtime9[133]\r
-            XtimeB[133] = _XtimeB[133]\r
-            XtimeD[133] = _XtimeD[133]\r
-            XtimeE[133] = _XtimeE[133]\r
-            Sbox[134] = _Sbox[134]\r
-            InvSbox[134] = _InvSbox[134]\r
-            Xtime2Sbox[134] = _Xtime2Sbox[134]\r
-            Xtime3Sbox[134] = _Xtime3Sbox[134]\r
-            Xtime2[134] = _Xtime2[134]\r
-            Xtime9[134] = _Xtime9[134]\r
-            XtimeB[134] = _XtimeB[134]\r
-            XtimeD[134] = _XtimeD[134]\r
-            XtimeE[134] = _XtimeE[134]\r
-            Sbox[135] = _Sbox[135]\r
-            InvSbox[135] = _InvSbox[135]\r
-            Xtime2Sbox[135] = _Xtime2Sbox[135]\r
-            Xtime3Sbox[135] = _Xtime3Sbox[135]\r
-            Xtime2[135] = _Xtime2[135]\r
-            Xtime9[135] = _Xtime9[135]\r
-            XtimeB[135] = _XtimeB[135]\r
-            XtimeD[135] = _XtimeD[135]\r
-            XtimeE[135] = _XtimeE[135]\r
-            Sbox[136] = _Sbox[136]\r
-            InvSbox[136] = _InvSbox[136]\r
-            Xtime2Sbox[136] = _Xtime2Sbox[136]\r
-            Xtime3Sbox[136] = _Xtime3Sbox[136]\r
-            Xtime2[136] = _Xtime2[136]\r
-            Xtime9[136] = _Xtime9[136]\r
-            XtimeB[136] = _XtimeB[136]\r
-            XtimeD[136] = _XtimeD[136]\r
-            XtimeE[136] = _XtimeE[136]\r
-            Sbox[137] = _Sbox[137]\r
-            InvSbox[137] = _InvSbox[137]\r
-            Xtime2Sbox[137] = _Xtime2Sbox[137]\r
-            Xtime3Sbox[137] = _Xtime3Sbox[137]\r
-            Xtime2[137] = _Xtime2[137]\r
-            Xtime9[137] = _Xtime9[137]\r
-            XtimeB[137] = _XtimeB[137]\r
-            XtimeD[137] = _XtimeD[137]\r
-            XtimeE[137] = _XtimeE[137]\r
-            Sbox[138] = _Sbox[138]\r
-            InvSbox[138] = _InvSbox[138]\r
-            Xtime2Sbox[138] = _Xtime2Sbox[138]\r
-            Xtime3Sbox[138] = _Xtime3Sbox[138]\r
-            Xtime2[138] = _Xtime2[138]\r
-            Xtime9[138] = _Xtime9[138]\r
-            XtimeB[138] = _XtimeB[138]\r
-            XtimeD[138] = _XtimeD[138]\r
-            XtimeE[138] = _XtimeE[138]\r
-            Sbox[139] = _Sbox[139]\r
-            InvSbox[139] = _InvSbox[139]\r
-            Xtime2Sbox[139] = _Xtime2Sbox[139]\r
-            Xtime3Sbox[139] = _Xtime3Sbox[139]\r
-            Xtime2[139] = _Xtime2[139]\r
-            Xtime9[139] = _Xtime9[139]\r
-            XtimeB[139] = _XtimeB[139]\r
-            XtimeD[139] = _XtimeD[139]\r
-            XtimeE[139] = _XtimeE[139]\r
-            Sbox[140] = _Sbox[140]\r
-            InvSbox[140] = _InvSbox[140]\r
-            Xtime2Sbox[140] = _Xtime2Sbox[140]\r
-            Xtime3Sbox[140] = _Xtime3Sbox[140]\r
-            Xtime2[140] = _Xtime2[140]\r
-            Xtime9[140] = _Xtime9[140]\r
-            XtimeB[140] = _XtimeB[140]\r
-            XtimeD[140] = _XtimeD[140]\r
-            XtimeE[140] = _XtimeE[140]\r
-            Sbox[141] = _Sbox[141]\r
-            InvSbox[141] = _InvSbox[141]\r
-            Xtime2Sbox[141] = _Xtime2Sbox[141]\r
-            Xtime3Sbox[141] = _Xtime3Sbox[141]\r
-            Xtime2[141] = _Xtime2[141]\r
-            Xtime9[141] = _Xtime9[141]\r
-            XtimeB[141] = _XtimeB[141]\r
-            XtimeD[141] = _XtimeD[141]\r
-            XtimeE[141] = _XtimeE[141]\r
-            Sbox[142] = _Sbox[142]\r
-            InvSbox[142] = _InvSbox[142]\r
-            Xtime2Sbox[142] = _Xtime2Sbox[142]\r
-            Xtime3Sbox[142] = _Xtime3Sbox[142]\r
-            Xtime2[142] = _Xtime2[142]\r
-            Xtime9[142] = _Xtime9[142]\r
-            XtimeB[142] = _XtimeB[142]\r
-            XtimeD[142] = _XtimeD[142]\r
-            XtimeE[142] = _XtimeE[142]\r
-            Sbox[143] = _Sbox[143]\r
-            InvSbox[143] = _InvSbox[143]\r
-            Xtime2Sbox[143] = _Xtime2Sbox[143]\r
-            Xtime3Sbox[143] = _Xtime3Sbox[143]\r
-            Xtime2[143] = _Xtime2[143]\r
-            Xtime9[143] = _Xtime9[143]\r
-            XtimeB[143] = _XtimeB[143]\r
-            XtimeD[143] = _XtimeD[143]\r
-            XtimeE[143] = _XtimeE[143]\r
-            Sbox[144] = _Sbox[144]\r
-            InvSbox[144] = _InvSbox[144]\r
-            Xtime2Sbox[144] = _Xtime2Sbox[144]\r
-            Xtime3Sbox[144] = _Xtime3Sbox[144]\r
-            Xtime2[144] = _Xtime2[144]\r
-            Xtime9[144] = _Xtime9[144]\r
-            XtimeB[144] = _XtimeB[144]\r
-            XtimeD[144] = _XtimeD[144]\r
-            XtimeE[144] = _XtimeE[144]\r
-            Sbox[145] = _Sbox[145]\r
-            InvSbox[145] = _InvSbox[145]\r
-            Xtime2Sbox[145] = _Xtime2Sbox[145]\r
-            Xtime3Sbox[145] = _Xtime3Sbox[145]\r
-            Xtime2[145] = _Xtime2[145]\r
-            Xtime9[145] = _Xtime9[145]\r
-            XtimeB[145] = _XtimeB[145]\r
-            XtimeD[145] = _XtimeD[145]\r
-            XtimeE[145] = _XtimeE[145]\r
-            Sbox[146] = _Sbox[146]\r
-            InvSbox[146] = _InvSbox[146]\r
-            Xtime2Sbox[146] = _Xtime2Sbox[146]\r
-            Xtime3Sbox[146] = _Xtime3Sbox[146]\r
-            Xtime2[146] = _Xtime2[146]\r
-            Xtime9[146] = _Xtime9[146]\r
-            XtimeB[146] = _XtimeB[146]\r
-            XtimeD[146] = _XtimeD[146]\r
-            XtimeE[146] = _XtimeE[146]\r
-            Sbox[147] = _Sbox[147]\r
-            InvSbox[147] = _InvSbox[147]\r
-            Xtime2Sbox[147] = _Xtime2Sbox[147]\r
-            Xtime3Sbox[147] = _Xtime3Sbox[147]\r
-            Xtime2[147] = _Xtime2[147]\r
-            Xtime9[147] = _Xtime9[147]\r
-            XtimeB[147] = _XtimeB[147]\r
-            XtimeD[147] = _XtimeD[147]\r
-            XtimeE[147] = _XtimeE[147]\r
-            Sbox[148] = _Sbox[148]\r
-            InvSbox[148] = _InvSbox[148]\r
-            Xtime2Sbox[148] = _Xtime2Sbox[148]\r
-            Xtime3Sbox[148] = _Xtime3Sbox[148]\r
-            Xtime2[148] = _Xtime2[148]\r
-            Xtime9[148] = _Xtime9[148]\r
-            XtimeB[148] = _XtimeB[148]\r
-            XtimeD[148] = _XtimeD[148]\r
-            XtimeE[148] = _XtimeE[148]\r
-            Sbox[149] = _Sbox[149]\r
-            InvSbox[149] = _InvSbox[149]\r
-            Xtime2Sbox[149] = _Xtime2Sbox[149]\r
-            Xtime3Sbox[149] = _Xtime3Sbox[149]\r
-            Xtime2[149] = _Xtime2[149]\r
-            Xtime9[149] = _Xtime9[149]\r
-            XtimeB[149] = _XtimeB[149]\r
-            XtimeD[149] = _XtimeD[149]\r
-            XtimeE[149] = _XtimeE[149]\r
-            Sbox[150] = _Sbox[150]\r
-            InvSbox[150] = _InvSbox[150]\r
-            Xtime2Sbox[150] = _Xtime2Sbox[150]\r
-            Xtime3Sbox[150] = _Xtime3Sbox[150]\r
-            Xtime2[150] = _Xtime2[150]\r
-            Xtime9[150] = _Xtime9[150]\r
-            XtimeB[150] = _XtimeB[150]\r
-            XtimeD[150] = _XtimeD[150]\r
-            XtimeE[150] = _XtimeE[150]\r
-            Sbox[151] = _Sbox[151]\r
-            InvSbox[151] = _InvSbox[151]\r
-            Xtime2Sbox[151] = _Xtime2Sbox[151]\r
-            Xtime3Sbox[151] = _Xtime3Sbox[151]\r
-            Xtime2[151] = _Xtime2[151]\r
-            Xtime9[151] = _Xtime9[151]\r
-            XtimeB[151] = _XtimeB[151]\r
-            XtimeD[151] = _XtimeD[151]\r
-            XtimeE[151] = _XtimeE[151]\r
-            Sbox[152] = _Sbox[152]\r
-            InvSbox[152] = _InvSbox[152]\r
-            Xtime2Sbox[152] = _Xtime2Sbox[152]\r
-            Xtime3Sbox[152] = _Xtime3Sbox[152]\r
-            Xtime2[152] = _Xtime2[152]\r
-            Xtime9[152] = _Xtime9[152]\r
-            XtimeB[152] = _XtimeB[152]\r
-            XtimeD[152] = _XtimeD[152]\r
-            XtimeE[152] = _XtimeE[152]\r
-            Sbox[153] = _Sbox[153]\r
-            InvSbox[153] = _InvSbox[153]\r
-            Xtime2Sbox[153] = _Xtime2Sbox[153]\r
-            Xtime3Sbox[153] = _Xtime3Sbox[153]\r
-            Xtime2[153] = _Xtime2[153]\r
-            Xtime9[153] = _Xtime9[153]\r
-            XtimeB[153] = _XtimeB[153]\r
-            XtimeD[153] = _XtimeD[153]\r
-            XtimeE[153] = _XtimeE[153]\r
-            Sbox[154] = _Sbox[154]\r
-            InvSbox[154] = _InvSbox[154]\r
-            Xtime2Sbox[154] = _Xtime2Sbox[154]\r
-            Xtime3Sbox[154] = _Xtime3Sbox[154]\r
-            Xtime2[154] = _Xtime2[154]\r
-            Xtime9[154] = _Xtime9[154]\r
-            XtimeB[154] = _XtimeB[154]\r
-            XtimeD[154] = _XtimeD[154]\r
-            XtimeE[154] = _XtimeE[154]\r
-            Sbox[155] = _Sbox[155]\r
-            InvSbox[155] = _InvSbox[155]\r
-            Xtime2Sbox[155] = _Xtime2Sbox[155]\r
-            Xtime3Sbox[155] = _Xtime3Sbox[155]\r
-            Xtime2[155] = _Xtime2[155]\r
-            Xtime9[155] = _Xtime9[155]\r
-            XtimeB[155] = _XtimeB[155]\r
-            XtimeD[155] = _XtimeD[155]\r
-            XtimeE[155] = _XtimeE[155]\r
-            Sbox[156] = _Sbox[156]\r
-            InvSbox[156] = _InvSbox[156]\r
-            Xtime2Sbox[156] = _Xtime2Sbox[156]\r
-            Xtime3Sbox[156] = _Xtime3Sbox[156]\r
-            Xtime2[156] = _Xtime2[156]\r
-            Xtime9[156] = _Xtime9[156]\r
-            XtimeB[156] = _XtimeB[156]\r
-            XtimeD[156] = _XtimeD[156]\r
-            XtimeE[156] = _XtimeE[156]\r
-            Sbox[157] = _Sbox[157]\r
-            InvSbox[157] = _InvSbox[157]\r
-            Xtime2Sbox[157] = _Xtime2Sbox[157]\r
-            Xtime3Sbox[157] = _Xtime3Sbox[157]\r
-            Xtime2[157] = _Xtime2[157]\r
-            Xtime9[157] = _Xtime9[157]\r
-            XtimeB[157] = _XtimeB[157]\r
-            XtimeD[157] = _XtimeD[157]\r
-            XtimeE[157] = _XtimeE[157]\r
-            Sbox[158] = _Sbox[158]\r
-            InvSbox[158] = _InvSbox[158]\r
-            Xtime2Sbox[158] = _Xtime2Sbox[158]\r
-            Xtime3Sbox[158] = _Xtime3Sbox[158]\r
-            Xtime2[158] = _Xtime2[158]\r
-            Xtime9[158] = _Xtime9[158]\r
-            XtimeB[158] = _XtimeB[158]\r
-            XtimeD[158] = _XtimeD[158]\r
-            XtimeE[158] = _XtimeE[158]\r
-            Sbox[159] = _Sbox[159]\r
-            InvSbox[159] = _InvSbox[159]\r
-            Xtime2Sbox[159] = _Xtime2Sbox[159]\r
-            Xtime3Sbox[159] = _Xtime3Sbox[159]\r
-            Xtime2[159] = _Xtime2[159]\r
-            Xtime9[159] = _Xtime9[159]\r
-            XtimeB[159] = _XtimeB[159]\r
-            XtimeD[159] = _XtimeD[159]\r
-            XtimeE[159] = _XtimeE[159]\r
-            Sbox[160] = _Sbox[160]\r
-            InvSbox[160] = _InvSbox[160]\r
-            Xtime2Sbox[160] = _Xtime2Sbox[160]\r
-            Xtime3Sbox[160] = _Xtime3Sbox[160]\r
-            Xtime2[160] = _Xtime2[160]\r
-            Xtime9[160] = _Xtime9[160]\r
-            XtimeB[160] = _XtimeB[160]\r
-            XtimeD[160] = _XtimeD[160]\r
-            XtimeE[160] = _XtimeE[160]\r
-            Sbox[161] = _Sbox[161]\r
-            InvSbox[161] = _InvSbox[161]\r
-            Xtime2Sbox[161] = _Xtime2Sbox[161]\r
-            Xtime3Sbox[161] = _Xtime3Sbox[161]\r
-            Xtime2[161] = _Xtime2[161]\r
-            Xtime9[161] = _Xtime9[161]\r
-            XtimeB[161] = _XtimeB[161]\r
-            XtimeD[161] = _XtimeD[161]\r
-            XtimeE[161] = _XtimeE[161]\r
-            Sbox[162] = _Sbox[162]\r
-            InvSbox[162] = _InvSbox[162]\r
-            Xtime2Sbox[162] = _Xtime2Sbox[162]\r
-            Xtime3Sbox[162] = _Xtime3Sbox[162]\r
-            Xtime2[162] = _Xtime2[162]\r
-            Xtime9[162] = _Xtime9[162]\r
-            XtimeB[162] = _XtimeB[162]\r
-            XtimeD[162] = _XtimeD[162]\r
-            XtimeE[162] = _XtimeE[162]\r
-            Sbox[163] = _Sbox[163]\r
-            InvSbox[163] = _InvSbox[163]\r
-            Xtime2Sbox[163] = _Xtime2Sbox[163]\r
-            Xtime3Sbox[163] = _Xtime3Sbox[163]\r
-            Xtime2[163] = _Xtime2[163]\r
-            Xtime9[163] = _Xtime9[163]\r
-            XtimeB[163] = _XtimeB[163]\r
-            XtimeD[163] = _XtimeD[163]\r
-            XtimeE[163] = _XtimeE[163]\r
-            Sbox[164] = _Sbox[164]\r
-            InvSbox[164] = _InvSbox[164]\r
-            Xtime2Sbox[164] = _Xtime2Sbox[164]\r
-            Xtime3Sbox[164] = _Xtime3Sbox[164]\r
-            Xtime2[164] = _Xtime2[164]\r
-            Xtime9[164] = _Xtime9[164]\r
-            XtimeB[164] = _XtimeB[164]\r
-            XtimeD[164] = _XtimeD[164]\r
-            XtimeE[164] = _XtimeE[164]\r
-            Sbox[165] = _Sbox[165]\r
-            InvSbox[165] = _InvSbox[165]\r
-            Xtime2Sbox[165] = _Xtime2Sbox[165]\r
-            Xtime3Sbox[165] = _Xtime3Sbox[165]\r
-            Xtime2[165] = _Xtime2[165]\r
-            Xtime9[165] = _Xtime9[165]\r
-            XtimeB[165] = _XtimeB[165]\r
-            XtimeD[165] = _XtimeD[165]\r
-            XtimeE[165] = _XtimeE[165]\r
-            Sbox[166] = _Sbox[166]\r
-            InvSbox[166] = _InvSbox[166]\r
-            Xtime2Sbox[166] = _Xtime2Sbox[166]\r
-            Xtime3Sbox[166] = _Xtime3Sbox[166]\r
-            Xtime2[166] = _Xtime2[166]\r
-            Xtime9[166] = _Xtime9[166]\r
-            XtimeB[166] = _XtimeB[166]\r
-            XtimeD[166] = _XtimeD[166]\r
-            XtimeE[166] = _XtimeE[166]\r
-            Sbox[167] = _Sbox[167]\r
-            InvSbox[167] = _InvSbox[167]\r
-            Xtime2Sbox[167] = _Xtime2Sbox[167]\r
-            Xtime3Sbox[167] = _Xtime3Sbox[167]\r
-            Xtime2[167] = _Xtime2[167]\r
-            Xtime9[167] = _Xtime9[167]\r
-            XtimeB[167] = _XtimeB[167]\r
-            XtimeD[167] = _XtimeD[167]\r
-            XtimeE[167] = _XtimeE[167]\r
-            Sbox[168] = _Sbox[168]\r
-            InvSbox[168] = _InvSbox[168]\r
-            Xtime2Sbox[168] = _Xtime2Sbox[168]\r
-            Xtime3Sbox[168] = _Xtime3Sbox[168]\r
-            Xtime2[168] = _Xtime2[168]\r
-            Xtime9[168] = _Xtime9[168]\r
-            XtimeB[168] = _XtimeB[168]\r
-            XtimeD[168] = _XtimeD[168]\r
-            XtimeE[168] = _XtimeE[168]\r
-            Sbox[169] = _Sbox[169]\r
-            InvSbox[169] = _InvSbox[169]\r
-            Xtime2Sbox[169] = _Xtime2Sbox[169]\r
-            Xtime3Sbox[169] = _Xtime3Sbox[169]\r
-            Xtime2[169] = _Xtime2[169]\r
-            Xtime9[169] = _Xtime9[169]\r
-            XtimeB[169] = _XtimeB[169]\r
-            XtimeD[169] = _XtimeD[169]\r
-            XtimeE[169] = _XtimeE[169]\r
-            Sbox[170] = _Sbox[170]\r
-            InvSbox[170] = _InvSbox[170]\r
-            Xtime2Sbox[170] = _Xtime2Sbox[170]\r
-            Xtime3Sbox[170] = _Xtime3Sbox[170]\r
-            Xtime2[170] = _Xtime2[170]\r
-            Xtime9[170] = _Xtime9[170]\r
-            XtimeB[170] = _XtimeB[170]\r
-            XtimeD[170] = _XtimeD[170]\r
-            XtimeE[170] = _XtimeE[170]\r
-            Sbox[171] = _Sbox[171]\r
-            InvSbox[171] = _InvSbox[171]\r
-            Xtime2Sbox[171] = _Xtime2Sbox[171]\r
-            Xtime3Sbox[171] = _Xtime3Sbox[171]\r
-            Xtime2[171] = _Xtime2[171]\r
-            Xtime9[171] = _Xtime9[171]\r
-            XtimeB[171] = _XtimeB[171]\r
-            XtimeD[171] = _XtimeD[171]\r
-            XtimeE[171] = _XtimeE[171]\r
-            Sbox[172] = _Sbox[172]\r
-            InvSbox[172] = _InvSbox[172]\r
-            Xtime2Sbox[172] = _Xtime2Sbox[172]\r
-            Xtime3Sbox[172] = _Xtime3Sbox[172]\r
-            Xtime2[172] = _Xtime2[172]\r
-            Xtime9[172] = _Xtime9[172]\r
-            XtimeB[172] = _XtimeB[172]\r
-            XtimeD[172] = _XtimeD[172]\r
-            XtimeE[172] = _XtimeE[172]\r
-            Sbox[173] = _Sbox[173]\r
-            InvSbox[173] = _InvSbox[173]\r
-            Xtime2Sbox[173] = _Xtime2Sbox[173]\r
-            Xtime3Sbox[173] = _Xtime3Sbox[173]\r
-            Xtime2[173] = _Xtime2[173]\r
-            Xtime9[173] = _Xtime9[173]\r
-            XtimeB[173] = _XtimeB[173]\r
-            XtimeD[173] = _XtimeD[173]\r
-            XtimeE[173] = _XtimeE[173]\r
-            Sbox[174] = _Sbox[174]\r
-            InvSbox[174] = _InvSbox[174]\r
-            Xtime2Sbox[174] = _Xtime2Sbox[174]\r
-            Xtime3Sbox[174] = _Xtime3Sbox[174]\r
-            Xtime2[174] = _Xtime2[174]\r
-            Xtime9[174] = _Xtime9[174]\r
-            XtimeB[174] = _XtimeB[174]\r
-            XtimeD[174] = _XtimeD[174]\r
-            XtimeE[174] = _XtimeE[174]\r
-            Sbox[175] = _Sbox[175]\r
-            InvSbox[175] = _InvSbox[175]\r
-            Xtime2Sbox[175] = _Xtime2Sbox[175]\r
-            Xtime3Sbox[175] = _Xtime3Sbox[175]\r
-            Xtime2[175] = _Xtime2[175]\r
-            Xtime9[175] = _Xtime9[175]\r
-            XtimeB[175] = _XtimeB[175]\r
-            XtimeD[175] = _XtimeD[175]\r
-            XtimeE[175] = _XtimeE[175]\r
-            Sbox[176] = _Sbox[176]\r
-            InvSbox[176] = _InvSbox[176]\r
-            Xtime2Sbox[176] = _Xtime2Sbox[176]\r
-            Xtime3Sbox[176] = _Xtime3Sbox[176]\r
-            Xtime2[176] = _Xtime2[176]\r
-            Xtime9[176] = _Xtime9[176]\r
-            XtimeB[176] = _XtimeB[176]\r
-            XtimeD[176] = _XtimeD[176]\r
-            XtimeE[176] = _XtimeE[176]\r
-            Sbox[177] = _Sbox[177]\r
-            InvSbox[177] = _InvSbox[177]\r
-            Xtime2Sbox[177] = _Xtime2Sbox[177]\r
-            Xtime3Sbox[177] = _Xtime3Sbox[177]\r
-            Xtime2[177] = _Xtime2[177]\r
-            Xtime9[177] = _Xtime9[177]\r
-            XtimeB[177] = _XtimeB[177]\r
-            XtimeD[177] = _XtimeD[177]\r
-            XtimeE[177] = _XtimeE[177]\r
-            Sbox[178] = _Sbox[178]\r
-            InvSbox[178] = _InvSbox[178]\r
-            Xtime2Sbox[178] = _Xtime2Sbox[178]\r
-            Xtime3Sbox[178] = _Xtime3Sbox[178]\r
-            Xtime2[178] = _Xtime2[178]\r
-            Xtime9[178] = _Xtime9[178]\r
-            XtimeB[178] = _XtimeB[178]\r
-            XtimeD[178] = _XtimeD[178]\r
-            XtimeE[178] = _XtimeE[178]\r
-            Sbox[179] = _Sbox[179]\r
-            InvSbox[179] = _InvSbox[179]\r
-            Xtime2Sbox[179] = _Xtime2Sbox[179]\r
-            Xtime3Sbox[179] = _Xtime3Sbox[179]\r
-            Xtime2[179] = _Xtime2[179]\r
-            Xtime9[179] = _Xtime9[179]\r
-            XtimeB[179] = _XtimeB[179]\r
-            XtimeD[179] = _XtimeD[179]\r
-            XtimeE[179] = _XtimeE[179]\r
-            Sbox[180] = _Sbox[180]\r
-            InvSbox[180] = _InvSbox[180]\r
-            Xtime2Sbox[180] = _Xtime2Sbox[180]\r
-            Xtime3Sbox[180] = _Xtime3Sbox[180]\r
-            Xtime2[180] = _Xtime2[180]\r
-            Xtime9[180] = _Xtime9[180]\r
-            XtimeB[180] = _XtimeB[180]\r
-            XtimeD[180] = _XtimeD[180]\r
-            XtimeE[180] = _XtimeE[180]\r
-            Sbox[181] = _Sbox[181]\r
-            InvSbox[181] = _InvSbox[181]\r
-            Xtime2Sbox[181] = _Xtime2Sbox[181]\r
-            Xtime3Sbox[181] = _Xtime3Sbox[181]\r
-            Xtime2[181] = _Xtime2[181]\r
-            Xtime9[181] = _Xtime9[181]\r
-            XtimeB[181] = _XtimeB[181]\r
-            XtimeD[181] = _XtimeD[181]\r
-            XtimeE[181] = _XtimeE[181]\r
-            Sbox[182] = _Sbox[182]\r
-            InvSbox[182] = _InvSbox[182]\r
-            Xtime2Sbox[182] = _Xtime2Sbox[182]\r
-            Xtime3Sbox[182] = _Xtime3Sbox[182]\r
-            Xtime2[182] = _Xtime2[182]\r
-            Xtime9[182] = _Xtime9[182]\r
-            XtimeB[182] = _XtimeB[182]\r
-            XtimeD[182] = _XtimeD[182]\r
-            XtimeE[182] = _XtimeE[182]\r
-            Sbox[183] = _Sbox[183]\r
-            InvSbox[183] = _InvSbox[183]\r
-            Xtime2Sbox[183] = _Xtime2Sbox[183]\r
-            Xtime3Sbox[183] = _Xtime3Sbox[183]\r
-            Xtime2[183] = _Xtime2[183]\r
-            Xtime9[183] = _Xtime9[183]\r
-            XtimeB[183] = _XtimeB[183]\r
-            XtimeD[183] = _XtimeD[183]\r
-            XtimeE[183] = _XtimeE[183]\r
-            Sbox[184] = _Sbox[184]\r
-            InvSbox[184] = _InvSbox[184]\r
-            Xtime2Sbox[184] = _Xtime2Sbox[184]\r
-            Xtime3Sbox[184] = _Xtime3Sbox[184]\r
-            Xtime2[184] = _Xtime2[184]\r
-            Xtime9[184] = _Xtime9[184]\r
-            XtimeB[184] = _XtimeB[184]\r
-            XtimeD[184] = _XtimeD[184]\r
-            XtimeE[184] = _XtimeE[184]\r
-            Sbox[185] = _Sbox[185]\r
-            InvSbox[185] = _InvSbox[185]\r
-            Xtime2Sbox[185] = _Xtime2Sbox[185]\r
-            Xtime3Sbox[185] = _Xtime3Sbox[185]\r
-            Xtime2[185] = _Xtime2[185]\r
-            Xtime9[185] = _Xtime9[185]\r
-            XtimeB[185] = _XtimeB[185]\r
-            XtimeD[185] = _XtimeD[185]\r
-            XtimeE[185] = _XtimeE[185]\r
-            Sbox[186] = _Sbox[186]\r
-            InvSbox[186] = _InvSbox[186]\r
-            Xtime2Sbox[186] = _Xtime2Sbox[186]\r
-            Xtime3Sbox[186] = _Xtime3Sbox[186]\r
-            Xtime2[186] = _Xtime2[186]\r
-            Xtime9[186] = _Xtime9[186]\r
-            XtimeB[186] = _XtimeB[186]\r
-            XtimeD[186] = _XtimeD[186]\r
-            XtimeE[186] = _XtimeE[186]\r
-            Sbox[187] = _Sbox[187]\r
-            InvSbox[187] = _InvSbox[187]\r
-            Xtime2Sbox[187] = _Xtime2Sbox[187]\r
-            Xtime3Sbox[187] = _Xtime3Sbox[187]\r
-            Xtime2[187] = _Xtime2[187]\r
-            Xtime9[187] = _Xtime9[187]\r
-            XtimeB[187] = _XtimeB[187]\r
-            XtimeD[187] = _XtimeD[187]\r
-            XtimeE[187] = _XtimeE[187]\r
-            Sbox[188] = _Sbox[188]\r
-            InvSbox[188] = _InvSbox[188]\r
-            Xtime2Sbox[188] = _Xtime2Sbox[188]\r
-            Xtime3Sbox[188] = _Xtime3Sbox[188]\r
-            Xtime2[188] = _Xtime2[188]\r
-            Xtime9[188] = _Xtime9[188]\r
-            XtimeB[188] = _XtimeB[188]\r
-            XtimeD[188] = _XtimeD[188]\r
-            XtimeE[188] = _XtimeE[188]\r
-            Sbox[189] = _Sbox[189]\r
-            InvSbox[189] = _InvSbox[189]\r
-            Xtime2Sbox[189] = _Xtime2Sbox[189]\r
-            Xtime3Sbox[189] = _Xtime3Sbox[189]\r
-            Xtime2[189] = _Xtime2[189]\r
-            Xtime9[189] = _Xtime9[189]\r
-            XtimeB[189] = _XtimeB[189]\r
-            XtimeD[189] = _XtimeD[189]\r
-            XtimeE[189] = _XtimeE[189]\r
-            Sbox[190] = _Sbox[190]\r
-            InvSbox[190] = _InvSbox[190]\r
-            Xtime2Sbox[190] = _Xtime2Sbox[190]\r
-            Xtime3Sbox[190] = _Xtime3Sbox[190]\r
-            Xtime2[190] = _Xtime2[190]\r
-            Xtime9[190] = _Xtime9[190]\r
-            XtimeB[190] = _XtimeB[190]\r
-            XtimeD[190] = _XtimeD[190]\r
-            XtimeE[190] = _XtimeE[190]\r
-            Sbox[191] = _Sbox[191]\r
-            InvSbox[191] = _InvSbox[191]\r
-            Xtime2Sbox[191] = _Xtime2Sbox[191]\r
-            Xtime3Sbox[191] = _Xtime3Sbox[191]\r
-            Xtime2[191] = _Xtime2[191]\r
-            Xtime9[191] = _Xtime9[191]\r
-            XtimeB[191] = _XtimeB[191]\r
-            XtimeD[191] = _XtimeD[191]\r
-            XtimeE[191] = _XtimeE[191]\r
-            Sbox[192] = _Sbox[192]\r
-            InvSbox[192] = _InvSbox[192]\r
-            Xtime2Sbox[192] = _Xtime2Sbox[192]\r
-            Xtime3Sbox[192] = _Xtime3Sbox[192]\r
-            Xtime2[192] = _Xtime2[192]\r
-            Xtime9[192] = _Xtime9[192]\r
-            XtimeB[192] = _XtimeB[192]\r
-            XtimeD[192] = _XtimeD[192]\r
-            XtimeE[192] = _XtimeE[192]\r
-            Sbox[193] = _Sbox[193]\r
-            InvSbox[193] = _InvSbox[193]\r
-            Xtime2Sbox[193] = _Xtime2Sbox[193]\r
-            Xtime3Sbox[193] = _Xtime3Sbox[193]\r
-            Xtime2[193] = _Xtime2[193]\r
-            Xtime9[193] = _Xtime9[193]\r
-            XtimeB[193] = _XtimeB[193]\r
-            XtimeD[193] = _XtimeD[193]\r
-            XtimeE[193] = _XtimeE[193]\r
-            Sbox[194] = _Sbox[194]\r
-            InvSbox[194] = _InvSbox[194]\r
-            Xtime2Sbox[194] = _Xtime2Sbox[194]\r
-            Xtime3Sbox[194] = _Xtime3Sbox[194]\r
-            Xtime2[194] = _Xtime2[194]\r
-            Xtime9[194] = _Xtime9[194]\r
-            XtimeB[194] = _XtimeB[194]\r
-            XtimeD[194] = _XtimeD[194]\r
-            XtimeE[194] = _XtimeE[194]\r
-            Sbox[195] = _Sbox[195]\r
-            InvSbox[195] = _InvSbox[195]\r
-            Xtime2Sbox[195] = _Xtime2Sbox[195]\r
-            Xtime3Sbox[195] = _Xtime3Sbox[195]\r
-            Xtime2[195] = _Xtime2[195]\r
-            Xtime9[195] = _Xtime9[195]\r
-            XtimeB[195] = _XtimeB[195]\r
-            XtimeD[195] = _XtimeD[195]\r
-            XtimeE[195] = _XtimeE[195]\r
-            Sbox[196] = _Sbox[196]\r
-            InvSbox[196] = _InvSbox[196]\r
-            Xtime2Sbox[196] = _Xtime2Sbox[196]\r
-            Xtime3Sbox[196] = _Xtime3Sbox[196]\r
-            Xtime2[196] = _Xtime2[196]\r
-            Xtime9[196] = _Xtime9[196]\r
-            XtimeB[196] = _XtimeB[196]\r
-            XtimeD[196] = _XtimeD[196]\r
-            XtimeE[196] = _XtimeE[196]\r
-            Sbox[197] = _Sbox[197]\r
-            InvSbox[197] = _InvSbox[197]\r
-            Xtime2Sbox[197] = _Xtime2Sbox[197]\r
-            Xtime3Sbox[197] = _Xtime3Sbox[197]\r
-            Xtime2[197] = _Xtime2[197]\r
-            Xtime9[197] = _Xtime9[197]\r
-            XtimeB[197] = _XtimeB[197]\r
-            XtimeD[197] = _XtimeD[197]\r
-            XtimeE[197] = _XtimeE[197]\r
-            Sbox[198] = _Sbox[198]\r
-            InvSbox[198] = _InvSbox[198]\r
-            Xtime2Sbox[198] = _Xtime2Sbox[198]\r
-            Xtime3Sbox[198] = _Xtime3Sbox[198]\r
-            Xtime2[198] = _Xtime2[198]\r
-            Xtime9[198] = _Xtime9[198]\r
-            XtimeB[198] = _XtimeB[198]\r
-            XtimeD[198] = _XtimeD[198]\r
-            XtimeE[198] = _XtimeE[198]\r
-            Sbox[199] = _Sbox[199]\r
-            InvSbox[199] = _InvSbox[199]\r
-            Xtime2Sbox[199] = _Xtime2Sbox[199]\r
-            Xtime3Sbox[199] = _Xtime3Sbox[199]\r
-            Xtime2[199] = _Xtime2[199]\r
-            Xtime9[199] = _Xtime9[199]\r
-            XtimeB[199] = _XtimeB[199]\r
-            XtimeD[199] = _XtimeD[199]\r
-            XtimeE[199] = _XtimeE[199]\r
-            Sbox[200] = _Sbox[200]\r
-            InvSbox[200] = _InvSbox[200]\r
-            Xtime2Sbox[200] = _Xtime2Sbox[200]\r
-            Xtime3Sbox[200] = _Xtime3Sbox[200]\r
-            Xtime2[200] = _Xtime2[200]\r
-            Xtime9[200] = _Xtime9[200]\r
-            XtimeB[200] = _XtimeB[200]\r
-            XtimeD[200] = _XtimeD[200]\r
-            XtimeE[200] = _XtimeE[200]\r
-            Sbox[201] = _Sbox[201]\r
-            InvSbox[201] = _InvSbox[201]\r
-            Xtime2Sbox[201] = _Xtime2Sbox[201]\r
-            Xtime3Sbox[201] = _Xtime3Sbox[201]\r
-            Xtime2[201] = _Xtime2[201]\r
-            Xtime9[201] = _Xtime9[201]\r
-            XtimeB[201] = _XtimeB[201]\r
-            XtimeD[201] = _XtimeD[201]\r
-            XtimeE[201] = _XtimeE[201]\r
-            Sbox[202] = _Sbox[202]\r
-            InvSbox[202] = _InvSbox[202]\r
-            Xtime2Sbox[202] = _Xtime2Sbox[202]\r
-            Xtime3Sbox[202] = _Xtime3Sbox[202]\r
-            Xtime2[202] = _Xtime2[202]\r
-            Xtime9[202] = _Xtime9[202]\r
-            XtimeB[202] = _XtimeB[202]\r
-            XtimeD[202] = _XtimeD[202]\r
-            XtimeE[202] = _XtimeE[202]\r
-            Sbox[203] = _Sbox[203]\r
-            InvSbox[203] = _InvSbox[203]\r
-            Xtime2Sbox[203] = _Xtime2Sbox[203]\r
-            Xtime3Sbox[203] = _Xtime3Sbox[203]\r
-            Xtime2[203] = _Xtime2[203]\r
-            Xtime9[203] = _Xtime9[203]\r
-            XtimeB[203] = _XtimeB[203]\r
-            XtimeD[203] = _XtimeD[203]\r
-            XtimeE[203] = _XtimeE[203]\r
-            Sbox[204] = _Sbox[204]\r
-            InvSbox[204] = _InvSbox[204]\r
-            Xtime2Sbox[204] = _Xtime2Sbox[204]\r
-            Xtime3Sbox[204] = _Xtime3Sbox[204]\r
-            Xtime2[204] = _Xtime2[204]\r
-            Xtime9[204] = _Xtime9[204]\r
-            XtimeB[204] = _XtimeB[204]\r
-            XtimeD[204] = _XtimeD[204]\r
-            XtimeE[204] = _XtimeE[204]\r
-            Sbox[205] = _Sbox[205]\r
-            InvSbox[205] = _InvSbox[205]\r
-            Xtime2Sbox[205] = _Xtime2Sbox[205]\r
-            Xtime3Sbox[205] = _Xtime3Sbox[205]\r
-            Xtime2[205] = _Xtime2[205]\r
-            Xtime9[205] = _Xtime9[205]\r
-            XtimeB[205] = _XtimeB[205]\r
-            XtimeD[205] = _XtimeD[205]\r
-            XtimeE[205] = _XtimeE[205]\r
-            Sbox[206] = _Sbox[206]\r
-            InvSbox[206] = _InvSbox[206]\r
-            Xtime2Sbox[206] = _Xtime2Sbox[206]\r
-            Xtime3Sbox[206] = _Xtime3Sbox[206]\r
-            Xtime2[206] = _Xtime2[206]\r
-            Xtime9[206] = _Xtime9[206]\r
-            XtimeB[206] = _XtimeB[206]\r
-            XtimeD[206] = _XtimeD[206]\r
-            XtimeE[206] = _XtimeE[206]\r
-            Sbox[207] = _Sbox[207]\r
-            InvSbox[207] = _InvSbox[207]\r
-            Xtime2Sbox[207] = _Xtime2Sbox[207]\r
-            Xtime3Sbox[207] = _Xtime3Sbox[207]\r
-            Xtime2[207] = _Xtime2[207]\r
-            Xtime9[207] = _Xtime9[207]\r
-            XtimeB[207] = _XtimeB[207]\r
-            XtimeD[207] = _XtimeD[207]\r
-            XtimeE[207] = _XtimeE[207]\r
-            Sbox[208] = _Sbox[208]\r
-            InvSbox[208] = _InvSbox[208]\r
-            Xtime2Sbox[208] = _Xtime2Sbox[208]\r
-            Xtime3Sbox[208] = _Xtime3Sbox[208]\r
-            Xtime2[208] = _Xtime2[208]\r
-            Xtime9[208] = _Xtime9[208]\r
-            XtimeB[208] = _XtimeB[208]\r
-            XtimeD[208] = _XtimeD[208]\r
-            XtimeE[208] = _XtimeE[208]\r
-            Sbox[209] = _Sbox[209]\r
-            InvSbox[209] = _InvSbox[209]\r
-            Xtime2Sbox[209] = _Xtime2Sbox[209]\r
-            Xtime3Sbox[209] = _Xtime3Sbox[209]\r
-            Xtime2[209] = _Xtime2[209]\r
-            Xtime9[209] = _Xtime9[209]\r
-            XtimeB[209] = _XtimeB[209]\r
-            XtimeD[209] = _XtimeD[209]\r
-            XtimeE[209] = _XtimeE[209]\r
-            Sbox[210] = _Sbox[210]\r
-            InvSbox[210] = _InvSbox[210]\r
-            Xtime2Sbox[210] = _Xtime2Sbox[210]\r
-            Xtime3Sbox[210] = _Xtime3Sbox[210]\r
-            Xtime2[210] = _Xtime2[210]\r
-            Xtime9[210] = _Xtime9[210]\r
-            XtimeB[210] = _XtimeB[210]\r
-            XtimeD[210] = _XtimeD[210]\r
-            XtimeE[210] = _XtimeE[210]\r
-            Sbox[211] = _Sbox[211]\r
-            InvSbox[211] = _InvSbox[211]\r
-            Xtime2Sbox[211] = _Xtime2Sbox[211]\r
-            Xtime3Sbox[211] = _Xtime3Sbox[211]\r
-            Xtime2[211] = _Xtime2[211]\r
-            Xtime9[211] = _Xtime9[211]\r
-            XtimeB[211] = _XtimeB[211]\r
-            XtimeD[211] = _XtimeD[211]\r
-            XtimeE[211] = _XtimeE[211]\r
-            Sbox[212] = _Sbox[212]\r
-            InvSbox[212] = _InvSbox[212]\r
-            Xtime2Sbox[212] = _Xtime2Sbox[212]\r
-            Xtime3Sbox[212] = _Xtime3Sbox[212]\r
-            Xtime2[212] = _Xtime2[212]\r
-            Xtime9[212] = _Xtime9[212]\r
-            XtimeB[212] = _XtimeB[212]\r
-            XtimeD[212] = _XtimeD[212]\r
-            XtimeE[212] = _XtimeE[212]\r
-            Sbox[213] = _Sbox[213]\r
-            InvSbox[213] = _InvSbox[213]\r
-            Xtime2Sbox[213] = _Xtime2Sbox[213]\r
-            Xtime3Sbox[213] = _Xtime3Sbox[213]\r
-            Xtime2[213] = _Xtime2[213]\r
-            Xtime9[213] = _Xtime9[213]\r
-            XtimeB[213] = _XtimeB[213]\r
-            XtimeD[213] = _XtimeD[213]\r
-            XtimeE[213] = _XtimeE[213]\r
-            Sbox[214] = _Sbox[214]\r
-            InvSbox[214] = _InvSbox[214]\r
-            Xtime2Sbox[214] = _Xtime2Sbox[214]\r
-            Xtime3Sbox[214] = _Xtime3Sbox[214]\r
-            Xtime2[214] = _Xtime2[214]\r
-            Xtime9[214] = _Xtime9[214]\r
-            XtimeB[214] = _XtimeB[214]\r
-            XtimeD[214] = _XtimeD[214]\r
-            XtimeE[214] = _XtimeE[214]\r
-            Sbox[215] = _Sbox[215]\r
-            InvSbox[215] = _InvSbox[215]\r
-            Xtime2Sbox[215] = _Xtime2Sbox[215]\r
-            Xtime3Sbox[215] = _Xtime3Sbox[215]\r
-            Xtime2[215] = _Xtime2[215]\r
-            Xtime9[215] = _Xtime9[215]\r
-            XtimeB[215] = _XtimeB[215]\r
-            XtimeD[215] = _XtimeD[215]\r
-            XtimeE[215] = _XtimeE[215]\r
-            Sbox[216] = _Sbox[216]\r
-            InvSbox[216] = _InvSbox[216]\r
-            Xtime2Sbox[216] = _Xtime2Sbox[216]\r
-            Xtime3Sbox[216] = _Xtime3Sbox[216]\r
-            Xtime2[216] = _Xtime2[216]\r
-            Xtime9[216] = _Xtime9[216]\r
-            XtimeB[216] = _XtimeB[216]\r
-            XtimeD[216] = _XtimeD[216]\r
-            XtimeE[216] = _XtimeE[216]\r
-            Sbox[217] = _Sbox[217]\r
-            InvSbox[217] = _InvSbox[217]\r
-            Xtime2Sbox[217] = _Xtime2Sbox[217]\r
-            Xtime3Sbox[217] = _Xtime3Sbox[217]\r
-            Xtime2[217] = _Xtime2[217]\r
-            Xtime9[217] = _Xtime9[217]\r
-            XtimeB[217] = _XtimeB[217]\r
-            XtimeD[217] = _XtimeD[217]\r
-            XtimeE[217] = _XtimeE[217]\r
-            Sbox[218] = _Sbox[218]\r
-            InvSbox[218] = _InvSbox[218]\r
-            Xtime2Sbox[218] = _Xtime2Sbox[218]\r
-            Xtime3Sbox[218] = _Xtime3Sbox[218]\r
-            Xtime2[218] = _Xtime2[218]\r
-            Xtime9[218] = _Xtime9[218]\r
-            XtimeB[218] = _XtimeB[218]\r
-            XtimeD[218] = _XtimeD[218]\r
-            XtimeE[218] = _XtimeE[218]\r
-            Sbox[219] = _Sbox[219]\r
-            InvSbox[219] = _InvSbox[219]\r
-            Xtime2Sbox[219] = _Xtime2Sbox[219]\r
-            Xtime3Sbox[219] = _Xtime3Sbox[219]\r
-            Xtime2[219] = _Xtime2[219]\r
-            Xtime9[219] = _Xtime9[219]\r
-            XtimeB[219] = _XtimeB[219]\r
-            XtimeD[219] = _XtimeD[219]\r
-            XtimeE[219] = _XtimeE[219]\r
-            Sbox[220] = _Sbox[220]\r
-            InvSbox[220] = _InvSbox[220]\r
-            Xtime2Sbox[220] = _Xtime2Sbox[220]\r
-            Xtime3Sbox[220] = _Xtime3Sbox[220]\r
-            Xtime2[220] = _Xtime2[220]\r
-            Xtime9[220] = _Xtime9[220]\r
-            XtimeB[220] = _XtimeB[220]\r
-            XtimeD[220] = _XtimeD[220]\r
-            XtimeE[220] = _XtimeE[220]\r
-            Sbox[221] = _Sbox[221]\r
-            InvSbox[221] = _InvSbox[221]\r
-            Xtime2Sbox[221] = _Xtime2Sbox[221]\r
-            Xtime3Sbox[221] = _Xtime3Sbox[221]\r
-            Xtime2[221] = _Xtime2[221]\r
-            Xtime9[221] = _Xtime9[221]\r
-            XtimeB[221] = _XtimeB[221]\r
-            XtimeD[221] = _XtimeD[221]\r
-            XtimeE[221] = _XtimeE[221]\r
-            Sbox[222] = _Sbox[222]\r
-            InvSbox[222] = _InvSbox[222]\r
-            Xtime2Sbox[222] = _Xtime2Sbox[222]\r
-            Xtime3Sbox[222] = _Xtime3Sbox[222]\r
-            Xtime2[222] = _Xtime2[222]\r
-            Xtime9[222] = _Xtime9[222]\r
-            XtimeB[222] = _XtimeB[222]\r
-            XtimeD[222] = _XtimeD[222]\r
-            XtimeE[222] = _XtimeE[222]\r
-            Sbox[223] = _Sbox[223]\r
-            InvSbox[223] = _InvSbox[223]\r
-            Xtime2Sbox[223] = _Xtime2Sbox[223]\r
-            Xtime3Sbox[223] = _Xtime3Sbox[223]\r
-            Xtime2[223] = _Xtime2[223]\r
-            Xtime9[223] = _Xtime9[223]\r
-            XtimeB[223] = _XtimeB[223]\r
-            XtimeD[223] = _XtimeD[223]\r
-            XtimeE[223] = _XtimeE[223]\r
-            Sbox[224] = _Sbox[224]\r
-            InvSbox[224] = _InvSbox[224]\r
-            Xtime2Sbox[224] = _Xtime2Sbox[224]\r
-            Xtime3Sbox[224] = _Xtime3Sbox[224]\r
-            Xtime2[224] = _Xtime2[224]\r
-            Xtime9[224] = _Xtime9[224]\r
-            XtimeB[224] = _XtimeB[224]\r
-            XtimeD[224] = _XtimeD[224]\r
-            XtimeE[224] = _XtimeE[224]\r
-            Sbox[225] = _Sbox[225]\r
-            InvSbox[225] = _InvSbox[225]\r
-            Xtime2Sbox[225] = _Xtime2Sbox[225]\r
-            Xtime3Sbox[225] = _Xtime3Sbox[225]\r
-            Xtime2[225] = _Xtime2[225]\r
-            Xtime9[225] = _Xtime9[225]\r
-            XtimeB[225] = _XtimeB[225]\r
-            XtimeD[225] = _XtimeD[225]\r
-            XtimeE[225] = _XtimeE[225]\r
-            Sbox[226] = _Sbox[226]\r
-            InvSbox[226] = _InvSbox[226]\r
-            Xtime2Sbox[226] = _Xtime2Sbox[226]\r
-            Xtime3Sbox[226] = _Xtime3Sbox[226]\r
-            Xtime2[226] = _Xtime2[226]\r
-            Xtime9[226] = _Xtime9[226]\r
-            XtimeB[226] = _XtimeB[226]\r
-            XtimeD[226] = _XtimeD[226]\r
-            XtimeE[226] = _XtimeE[226]\r
-            Sbox[227] = _Sbox[227]\r
-            InvSbox[227] = _InvSbox[227]\r
-            Xtime2Sbox[227] = _Xtime2Sbox[227]\r
-            Xtime3Sbox[227] = _Xtime3Sbox[227]\r
-            Xtime2[227] = _Xtime2[227]\r
-            Xtime9[227] = _Xtime9[227]\r
-            XtimeB[227] = _XtimeB[227]\r
-            XtimeD[227] = _XtimeD[227]\r
-            XtimeE[227] = _XtimeE[227]\r
-            Sbox[228] = _Sbox[228]\r
-            InvSbox[228] = _InvSbox[228]\r
-            Xtime2Sbox[228] = _Xtime2Sbox[228]\r
-            Xtime3Sbox[228] = _Xtime3Sbox[228]\r
-            Xtime2[228] = _Xtime2[228]\r
-            Xtime9[228] = _Xtime9[228]\r
-            XtimeB[228] = _XtimeB[228]\r
-            XtimeD[228] = _XtimeD[228]\r
-            XtimeE[228] = _XtimeE[228]\r
-            Sbox[229] = _Sbox[229]\r
-            InvSbox[229] = _InvSbox[229]\r
-            Xtime2Sbox[229] = _Xtime2Sbox[229]\r
-            Xtime3Sbox[229] = _Xtime3Sbox[229]\r
-            Xtime2[229] = _Xtime2[229]\r
-            Xtime9[229] = _Xtime9[229]\r
-            XtimeB[229] = _XtimeB[229]\r
-            XtimeD[229] = _XtimeD[229]\r
-            XtimeE[229] = _XtimeE[229]\r
-            Sbox[230] = _Sbox[230]\r
-            InvSbox[230] = _InvSbox[230]\r
-            Xtime2Sbox[230] = _Xtime2Sbox[230]\r
-            Xtime3Sbox[230] = _Xtime3Sbox[230]\r
-            Xtime2[230] = _Xtime2[230]\r
-            Xtime9[230] = _Xtime9[230]\r
-            XtimeB[230] = _XtimeB[230]\r
-            XtimeD[230] = _XtimeD[230]\r
-            XtimeE[230] = _XtimeE[230]\r
-            Sbox[231] = _Sbox[231]\r
-            InvSbox[231] = _InvSbox[231]\r
-            Xtime2Sbox[231] = _Xtime2Sbox[231]\r
-            Xtime3Sbox[231] = _Xtime3Sbox[231]\r
-            Xtime2[231] = _Xtime2[231]\r
-            Xtime9[231] = _Xtime9[231]\r
-            XtimeB[231] = _XtimeB[231]\r
-            XtimeD[231] = _XtimeD[231]\r
-            XtimeE[231] = _XtimeE[231]\r
-            Sbox[232] = _Sbox[232]\r
-            InvSbox[232] = _InvSbox[232]\r
-            Xtime2Sbox[232] = _Xtime2Sbox[232]\r
-            Xtime3Sbox[232] = _Xtime3Sbox[232]\r
-            Xtime2[232] = _Xtime2[232]\r
-            Xtime9[232] = _Xtime9[232]\r
-            XtimeB[232] = _XtimeB[232]\r
-            XtimeD[232] = _XtimeD[232]\r
-            XtimeE[232] = _XtimeE[232]\r
-            Sbox[233] = _Sbox[233]\r
-            InvSbox[233] = _InvSbox[233]\r
-            Xtime2Sbox[233] = _Xtime2Sbox[233]\r
-            Xtime3Sbox[233] = _Xtime3Sbox[233]\r
-            Xtime2[233] = _Xtime2[233]\r
-            Xtime9[233] = _Xtime9[233]\r
-            XtimeB[233] = _XtimeB[233]\r
-            XtimeD[233] = _XtimeD[233]\r
-            XtimeE[233] = _XtimeE[233]\r
-            Sbox[234] = _Sbox[234]\r
-            InvSbox[234] = _InvSbox[234]\r
-            Xtime2Sbox[234] = _Xtime2Sbox[234]\r
-            Xtime3Sbox[234] = _Xtime3Sbox[234]\r
-            Xtime2[234] = _Xtime2[234]\r
-            Xtime9[234] = _Xtime9[234]\r
-            XtimeB[234] = _XtimeB[234]\r
-            XtimeD[234] = _XtimeD[234]\r
-            XtimeE[234] = _XtimeE[234]\r
-            Sbox[235] = _Sbox[235]\r
-            InvSbox[235] = _InvSbox[235]\r
-            Xtime2Sbox[235] = _Xtime2Sbox[235]\r
-            Xtime3Sbox[235] = _Xtime3Sbox[235]\r
-            Xtime2[235] = _Xtime2[235]\r
-            Xtime9[235] = _Xtime9[235]\r
-            XtimeB[235] = _XtimeB[235]\r
-            XtimeD[235] = _XtimeD[235]\r
-            XtimeE[235] = _XtimeE[235]\r
-            Sbox[236] = _Sbox[236]\r
-            InvSbox[236] = _InvSbox[236]\r
-            Xtime2Sbox[236] = _Xtime2Sbox[236]\r
-            Xtime3Sbox[236] = _Xtime3Sbox[236]\r
-            Xtime2[236] = _Xtime2[236]\r
-            Xtime9[236] = _Xtime9[236]\r
-            XtimeB[236] = _XtimeB[236]\r
-            XtimeD[236] = _XtimeD[236]\r
-            XtimeE[236] = _XtimeE[236]\r
-            Sbox[237] = _Sbox[237]\r
-            InvSbox[237] = _InvSbox[237]\r
-            Xtime2Sbox[237] = _Xtime2Sbox[237]\r
-            Xtime3Sbox[237] = _Xtime3Sbox[237]\r
-            Xtime2[237] = _Xtime2[237]\r
-            Xtime9[237] = _Xtime9[237]\r
-            XtimeB[237] = _XtimeB[237]\r
-            XtimeD[237] = _XtimeD[237]\r
-            XtimeE[237] = _XtimeE[237]\r
-            Sbox[238] = _Sbox[238]\r
-            InvSbox[238] = _InvSbox[238]\r
-            Xtime2Sbox[238] = _Xtime2Sbox[238]\r
-            Xtime3Sbox[238] = _Xtime3Sbox[238]\r
-            Xtime2[238] = _Xtime2[238]\r
-            Xtime9[238] = _Xtime9[238]\r
-            XtimeB[238] = _XtimeB[238]\r
-            XtimeD[238] = _XtimeD[238]\r
-            XtimeE[238] = _XtimeE[238]\r
-            Sbox[239] = _Sbox[239]\r
-            InvSbox[239] = _InvSbox[239]\r
-            Xtime2Sbox[239] = _Xtime2Sbox[239]\r
-            Xtime3Sbox[239] = _Xtime3Sbox[239]\r
-            Xtime2[239] = _Xtime2[239]\r
-            Xtime9[239] = _Xtime9[239]\r
-            XtimeB[239] = _XtimeB[239]\r
-            XtimeD[239] = _XtimeD[239]\r
-            XtimeE[239] = _XtimeE[239]\r
-            Sbox[240] = _Sbox[240]\r
-            InvSbox[240] = _InvSbox[240]\r
-            Xtime2Sbox[240] = _Xtime2Sbox[240]\r
-            Xtime3Sbox[240] = _Xtime3Sbox[240]\r
-            Xtime2[240] = _Xtime2[240]\r
-            Xtime9[240] = _Xtime9[240]\r
-            XtimeB[240] = _XtimeB[240]\r
-            XtimeD[240] = _XtimeD[240]\r
-            XtimeE[240] = _XtimeE[240]\r
-            Sbox[241] = _Sbox[241]\r
-            InvSbox[241] = _InvSbox[241]\r
-            Xtime2Sbox[241] = _Xtime2Sbox[241]\r
-            Xtime3Sbox[241] = _Xtime3Sbox[241]\r
-            Xtime2[241] = _Xtime2[241]\r
-            Xtime9[241] = _Xtime9[241]\r
-            XtimeB[241] = _XtimeB[241]\r
-            XtimeD[241] = _XtimeD[241]\r
-            XtimeE[241] = _XtimeE[241]\r
-            Sbox[242] = _Sbox[242]\r
-            InvSbox[242] = _InvSbox[242]\r
-            Xtime2Sbox[242] = _Xtime2Sbox[242]\r
-            Xtime3Sbox[242] = _Xtime3Sbox[242]\r
-            Xtime2[242] = _Xtime2[242]\r
-            Xtime9[242] = _Xtime9[242]\r
-            XtimeB[242] = _XtimeB[242]\r
-            XtimeD[242] = _XtimeD[242]\r
-            XtimeE[242] = _XtimeE[242]\r
-            Sbox[243] = _Sbox[243]\r
-            InvSbox[243] = _InvSbox[243]\r
-            Xtime2Sbox[243] = _Xtime2Sbox[243]\r
-            Xtime3Sbox[243] = _Xtime3Sbox[243]\r
-            Xtime2[243] = _Xtime2[243]\r
-            Xtime9[243] = _Xtime9[243]\r
-            XtimeB[243] = _XtimeB[243]\r
-            XtimeD[243] = _XtimeD[243]\r
-            XtimeE[243] = _XtimeE[243]\r
-            Sbox[244] = _Sbox[244]\r
-            InvSbox[244] = _InvSbox[244]\r
-            Xtime2Sbox[244] = _Xtime2Sbox[244]\r
-            Xtime3Sbox[244] = _Xtime3Sbox[244]\r
-            Xtime2[244] = _Xtime2[244]\r
-            Xtime9[244] = _Xtime9[244]\r
-            XtimeB[244] = _XtimeB[244]\r
-            XtimeD[244] = _XtimeD[244]\r
-            XtimeE[244] = _XtimeE[244]\r
-            Sbox[245] = _Sbox[245]\r
-            InvSbox[245] = _InvSbox[245]\r
-            Xtime2Sbox[245] = _Xtime2Sbox[245]\r
-            Xtime3Sbox[245] = _Xtime3Sbox[245]\r
-            Xtime2[245] = _Xtime2[245]\r
-            Xtime9[245] = _Xtime9[245]\r
-            XtimeB[245] = _XtimeB[245]\r
-            XtimeD[245] = _XtimeD[245]\r
-            XtimeE[245] = _XtimeE[245]\r
-            Sbox[246] = _Sbox[246]\r
-            InvSbox[246] = _InvSbox[246]\r
-            Xtime2Sbox[246] = _Xtime2Sbox[246]\r
-            Xtime3Sbox[246] = _Xtime3Sbox[246]\r
-            Xtime2[246] = _Xtime2[246]\r
-            Xtime9[246] = _Xtime9[246]\r
-            XtimeB[246] = _XtimeB[246]\r
-            XtimeD[246] = _XtimeD[246]\r
-            XtimeE[246] = _XtimeE[246]\r
-            Sbox[247] = _Sbox[247]\r
-            InvSbox[247] = _InvSbox[247]\r
-            Xtime2Sbox[247] = _Xtime2Sbox[247]\r
-            Xtime3Sbox[247] = _Xtime3Sbox[247]\r
-            Xtime2[247] = _Xtime2[247]\r
-            Xtime9[247] = _Xtime9[247]\r
-            XtimeB[247] = _XtimeB[247]\r
-            XtimeD[247] = _XtimeD[247]\r
-            XtimeE[247] = _XtimeE[247]\r
-            Sbox[248] = _Sbox[248]\r
-            InvSbox[248] = _InvSbox[248]\r
-            Xtime2Sbox[248] = _Xtime2Sbox[248]\r
-            Xtime3Sbox[248] = _Xtime3Sbox[248]\r
-            Xtime2[248] = _Xtime2[248]\r
-            Xtime9[248] = _Xtime9[248]\r
-            XtimeB[248] = _XtimeB[248]\r
-            XtimeD[248] = _XtimeD[248]\r
-            XtimeE[248] = _XtimeE[248]\r
-            Sbox[249] = _Sbox[249]\r
-            InvSbox[249] = _InvSbox[249]\r
-            Xtime2Sbox[249] = _Xtime2Sbox[249]\r
-            Xtime3Sbox[249] = _Xtime3Sbox[249]\r
-            Xtime2[249] = _Xtime2[249]\r
-            Xtime9[249] = _Xtime9[249]\r
-            XtimeB[249] = _XtimeB[249]\r
-            XtimeD[249] = _XtimeD[249]\r
-            XtimeE[249] = _XtimeE[249]\r
-            Sbox[250] = _Sbox[250]\r
-            InvSbox[250] = _InvSbox[250]\r
-            Xtime2Sbox[250] = _Xtime2Sbox[250]\r
-            Xtime3Sbox[250] = _Xtime3Sbox[250]\r
-            Xtime2[250] = _Xtime2[250]\r
-            Xtime9[250] = _Xtime9[250]\r
-            XtimeB[250] = _XtimeB[250]\r
-            XtimeD[250] = _XtimeD[250]\r
-            XtimeE[250] = _XtimeE[250]\r
-            Sbox[251] = _Sbox[251]\r
-            InvSbox[251] = _InvSbox[251]\r
-            Xtime2Sbox[251] = _Xtime2Sbox[251]\r
-            Xtime3Sbox[251] = _Xtime3Sbox[251]\r
-            Xtime2[251] = _Xtime2[251]\r
-            Xtime9[251] = _Xtime9[251]\r
-            XtimeB[251] = _XtimeB[251]\r
-            XtimeD[251] = _XtimeD[251]\r
-            XtimeE[251] = _XtimeE[251]\r
-            Sbox[252] = _Sbox[252]\r
-            InvSbox[252] = _InvSbox[252]\r
-            Xtime2Sbox[252] = _Xtime2Sbox[252]\r
-            Xtime3Sbox[252] = _Xtime3Sbox[252]\r
-            Xtime2[252] = _Xtime2[252]\r
-            Xtime9[252] = _Xtime9[252]\r
-            XtimeB[252] = _XtimeB[252]\r
-            XtimeD[252] = _XtimeD[252]\r
-            XtimeE[252] = _XtimeE[252]\r
-            Sbox[253] = _Sbox[253]\r
-            InvSbox[253] = _InvSbox[253]\r
-            Xtime2Sbox[253] = _Xtime2Sbox[253]\r
-            Xtime3Sbox[253] = _Xtime3Sbox[253]\r
-            Xtime2[253] = _Xtime2[253]\r
-            Xtime9[253] = _Xtime9[253]\r
-            XtimeB[253] = _XtimeB[253]\r
-            XtimeD[253] = _XtimeD[253]\r
-            XtimeE[253] = _XtimeE[253]\r
-            Sbox[254] = _Sbox[254]\r
-            InvSbox[254] = _InvSbox[254]\r
-            Xtime2Sbox[254] = _Xtime2Sbox[254]\r
-            Xtime3Sbox[254] = _Xtime3Sbox[254]\r
-            Xtime2[254] = _Xtime2[254]\r
-            Xtime9[254] = _Xtime9[254]\r
-            XtimeB[254] = _XtimeB[254]\r
-            XtimeD[254] = _XtimeD[254]\r
-            XtimeE[254] = _XtimeE[254]\r
-            Sbox[255] = _Sbox[255]\r
-            InvSbox[255] = _InvSbox[255]\r
-            Xtime2Sbox[255] = _Xtime2Sbox[255]\r
-            Xtime3Sbox[255] = _Xtime3Sbox[255]\r
-            Xtime2[255] = _Xtime2[255]\r
-            Xtime9[255] = _Xtime9[255]\r
-            XtimeB[255] = _XtimeB[255]\r
-            XtimeD[255] = _XtimeD[255]\r
-            XtimeE[255] = _XtimeE[255]\r
-                       Rcon = new ByteArray;\r
-            /*\r
-                       for (i=0;i<_Rcon.length;i++) {\r
-                               Rcon[i] = _Rcon[i];\r
-                       }\r
-            */\r
-            Rcon[0] = _Rcon[0];\r
-            Rcon[1] = _Rcon[1];\r
-            Rcon[2] = _Rcon[2];\r
-            Rcon[3] = _Rcon[3];\r
-            Rcon[4] = _Rcon[4];\r
-            Rcon[5] = _Rcon[5];\r
-            Rcon[6] = _Rcon[6];\r
-            Rcon[7] = _Rcon[7];\r
-            Rcon[8] = _Rcon[8];\r
-            Rcon[9] = _Rcon[9];\r
-            Rcon[10] = _Rcon[10];\r
-            Rcon[11] = _Rcon[11];\r
-               }\r
-               \r
-               private var key:ByteArray;\r
-               private var keyLength:uint;\r
-               private var Nr:uint;\r
-               private var state:ByteArray;\r
-               private var tmp:ByteArray;\r
-\r
-               public function AESKey(key:ByteArray) {\r
-                       tmp = new ByteArray;\r
-                       state = new ByteArray;\r
-                       keyLength = key.length;\r
-                       this.key = new ByteArray;\r
-                       this.key.writeBytes(key);\r
-                       expandKey();\r
-               }\r
-               \r
-               // produce Nb bytes for each round\r
-               private function expandKey():void {\r
-                       var tmp0:uint, tmp1:uint, tmp2:uint, tmp3:uint, tmp4:uint;\r
-                       var idx:uint;\r
-                       var Nk:uint = key.length/4;\r
-                       Nr = Nk+6;\r
-                       \r
-                       for( idx = Nk; idx < Nb * (Nr + 1); idx++ ) {\r
-                               tmp0 = key[4*idx - 4];\r
-                               tmp1 = key[4*idx - 3];\r
-                               tmp2 = key[4*idx - 2];\r
-                               tmp3 = key[4*idx - 1];\r
-                               if( !(idx % Nk) ) {\r
-                                       tmp4 = tmp3;\r
-                                       tmp3 = Sbox[tmp0];\r
-                                       tmp0 = Sbox[tmp1] ^ Rcon[idx/Nk];\r
-                                       tmp1 = Sbox[tmp2];\r
-                                       tmp2 = Sbox[tmp4];\r
-                               } else if( Nk > 6 && idx % Nk == 4 ) {\r
-                                       tmp0 = Sbox[tmp0];\r
-                                       tmp1 = Sbox[tmp1];\r
-                                       tmp2 = Sbox[tmp2];\r
-                                       tmp3 = Sbox[tmp3];\r
-                               }\r
-               \r
-                               key[4*idx+0] = key[4*idx - 4*Nk + 0] ^ tmp0;\r
-                               key[4*idx+1] = key[4*idx - 4*Nk + 1] ^ tmp1;\r
-                               key[4*idx+2] = key[4*idx - 4*Nk + 2] ^ tmp2;\r
-                               key[4*idx+3] = key[4*idx - 4*Nk + 3] ^ tmp3;\r
-                       }\r
-               }\r
-\r
-\r
-               public function getBlockSize():uint\r
-               {\r
-                       return 16;\r
-               }\r
-               \r
-               // encrypt one 128 bit block\r
-               public function encrypt(block:ByteArray, index:uint=0):void\r
-               {\r
-                       var round:uint;\r
-                       state.position=0;\r
-                       state.writeBytes(block, index, Nb*4);\r
-\r
-                       addRoundKey(key, 0);\r
-                       for ( round = 1; round < Nr + 1; round++ ) {\r
-                               if (round < Nr) {\r
-                                       mixSubColumns();\r
-                               } else {\r
-                                       shiftRows();\r
-                               }\r
-                               addRoundKey(key, round * Nb * 4);\r
-                       }\r
-\r
-                       block.position=index;\r
-                       block.writeBytes(state);\r
-               }\r
-               \r
-               public function decrypt(block:ByteArray, index:uint=0):void\r
-               {\r
-                       var round:uint;\r
-                       state.position=0;\r
-                       state.writeBytes(block, index, Nb*4);\r
-\r
-                       addRoundKey(key, Nr*Nb*4);\r
-                       invShiftRows();\r
-                       for( round = Nr; round--; )\r
-                       {\r
-                               addRoundKey( key, round*Nb*4);\r
-                               if (round) {\r
-                                       invMixSubColumns();\r
-                               }\r
-                       }\r
-                       \r
-                       block.position=index;\r
-                       block.writeBytes(state);\r
-               }\r
-               \r
-               public function dispose():void {\r
-                       var i:uint;\r
-                       var r:Random = new Random;\r
-                       for (i=0;i<key.length;i++) {\r
-                               key[i] = r.nextByte();\r
-                       }\r
-                       Nr = r.nextByte();\r
-                       for (i=0;i<state.length;i++) {\r
-                               state[i] = r.nextByte();\r
-                       }\r
-                       for (i=0;i<tmp.length;i++) {\r
-                               tmp[i] = r.nextByte();\r
-                       }\r
-                       key.length=0;\r
-                       keyLength=0;\r
-                       state.length=0;\r
-                       tmp.length=0;\r
-                       key = null;\r
-                       state = null;\r
-                       tmp = null;\r
-                       Nr = 0;\r
-                       Memory.gc();\r
-               }\r
-\r
-               // exchanges columns in each of 4 rows\r
-               // row0 - unchanged, row1- shifted left 1, \r
-               // row2 - shifted left 2 and row3 - shifted left 3\r
-               protected function shiftRows():void\r
-               {\r
-                       var tmp:uint;\r
-               \r
-                       // just substitute row 0\r
-                       state[0] = Sbox[state[0]]; state[4] = Sbox[state[4]];\r
-                       state[8] = Sbox[state[8]]; state[12] = Sbox[state[12]];\r
-               \r
-                       // rotate row 1\r
-                       tmp = Sbox[state[1]]; state[1] = Sbox[state[5]];\r
-                       state[5] = Sbox[state[9]]; state[9] = Sbox[state[13]]; state[13] = tmp;\r
-               \r
-                       // rotate row 2\r
-                       tmp = Sbox[state[2]]; state[2] = Sbox[state[10]]; state[10] = tmp;\r
-                       tmp = Sbox[state[6]]; state[6] = Sbox[state[14]]; state[14] = tmp;\r
-               \r
-                       // rotate row 3\r
-                       tmp = Sbox[state[15]]; state[15] = Sbox[state[11]];\r
-                       state[11] = Sbox[state[7]]; state[7] = Sbox[state[3]]; state[3] = tmp;\r
-               }\r
-               \r
-               // restores columns in each of 4 rows\r
-               // row0 - unchanged, row1- shifted right 1, \r
-               // row2 - shifted right 2 and row3 - shifted right 3\r
-               protected function invShiftRows ():void\r
-               {\r
-                       var tmp:uint;\r
-               \r
-                       // restore row 0\r
-                       state[0] = InvSbox[state[0]]; state[4] = InvSbox[state[4]];\r
-                       state[8] = InvSbox[state[8]]; state[12] = InvSbox[state[12]];\r
-               \r
-                       // restore row 1\r
-                       tmp = InvSbox[state[13]]; state[13] = InvSbox[state[9]];\r
-                       state[9] = InvSbox[state[5]]; state[5] = InvSbox[state[1]]; state[1] = tmp;\r
-               \r
-                       // restore row 2\r
-                       tmp = InvSbox[state[2]]; state[2] = InvSbox[state[10]]; state[10] = tmp;\r
-                       tmp = InvSbox[state[6]]; state[6] = InvSbox[state[14]]; state[14] = tmp;\r
-               \r
-                       // restore row 3\r
-                       tmp = InvSbox[state[3]]; state[3] = InvSbox[state[7]];\r
-                       state[7] = InvSbox[state[11]]; state[11] = InvSbox[state[15]]; state[15] = tmp;\r
-               }\r
-               \r
-               // recombine and mix each row in a column\r
-               protected function mixSubColumns ():void\r
-               {\r
-                       tmp.length=0;\r
-               \r
-                       // mixing column 0\r
-                       tmp[0] = Xtime2Sbox[state[0]] ^ Xtime3Sbox[state[5]] ^ Sbox[state[10]] ^ Sbox[state[15]];\r
-                       tmp[1] = Sbox[state[0]] ^ Xtime2Sbox[state[5]] ^ Xtime3Sbox[state[10]] ^ Sbox[state[15]];\r
-                       tmp[2] = Sbox[state[0]] ^ Sbox[state[5]] ^ Xtime2Sbox[state[10]] ^ Xtime3Sbox[state[15]];\r
-                       tmp[3] = Xtime3Sbox[state[0]] ^ Sbox[state[5]] ^ Sbox[state[10]] ^ Xtime2Sbox[state[15]];\r
-               \r
-                       // mixing column 1\r
-                       tmp[4] = Xtime2Sbox[state[4]] ^ Xtime3Sbox[state[9]] ^ Sbox[state[14]] ^ Sbox[state[3]];\r
-                       tmp[5] = Sbox[state[4]] ^ Xtime2Sbox[state[9]] ^ Xtime3Sbox[state[14]] ^ Sbox[state[3]];\r
-                       tmp[6] = Sbox[state[4]] ^ Sbox[state[9]] ^ Xtime2Sbox[state[14]] ^ Xtime3Sbox[state[3]];\r
-                       tmp[7] = Xtime3Sbox[state[4]] ^ Sbox[state[9]] ^ Sbox[state[14]] ^ Xtime2Sbox[state[3]];\r
-               \r
-                       // mixing column 2\r
-                       tmp[8] = Xtime2Sbox[state[8]] ^ Xtime3Sbox[state[13]] ^ Sbox[state[2]] ^ Sbox[state[7]];\r
-                       tmp[9] = Sbox[state[8]] ^ Xtime2Sbox[state[13]] ^ Xtime3Sbox[state[2]] ^ Sbox[state[7]];\r
-                       tmp[10]  = Sbox[state[8]] ^ Sbox[state[13]] ^ Xtime2Sbox[state[2]] ^ Xtime3Sbox[state[7]];\r
-                       tmp[11]  = Xtime3Sbox[state[8]] ^ Sbox[state[13]] ^ Sbox[state[2]] ^ Xtime2Sbox[state[7]];\r
-               \r
-                       // mixing column 3\r
-                       tmp[12] = Xtime2Sbox[state[12]] ^ Xtime3Sbox[state[1]] ^ Sbox[state[6]] ^ Sbox[state[11]];\r
-                       tmp[13] = Sbox[state[12]] ^ Xtime2Sbox[state[1]] ^ Xtime3Sbox[state[6]] ^ Sbox[state[11]];\r
-                       tmp[14] = Sbox[state[12]] ^ Sbox[state[1]] ^ Xtime2Sbox[state[6]] ^ Xtime3Sbox[state[11]];\r
-                       tmp[15] = Xtime3Sbox[state[12]] ^ Sbox[state[1]] ^ Sbox[state[6]] ^ Xtime2Sbox[state[11]];\r
-               \r
-                       state.position=0;\r
-                       state.writeBytes(tmp, 0, Nb*4);\r
-               }\r
-               \r
-               // restore and un-mix each row in a column\r
-               protected function invMixSubColumns ():void\r
-               {\r
-                       tmp.length=0;\r
-                       var i:uint;\r
-               \r
-                       // restore column 0\r
-                       tmp[0] = XtimeE[state[0]] ^ XtimeB[state[1]] ^ XtimeD[state[2]] ^ Xtime9[state[3]];\r
-                       tmp[5] = Xtime9[state[0]] ^ XtimeE[state[1]] ^ XtimeB[state[2]] ^ XtimeD[state[3]];\r
-                       tmp[10] = XtimeD[state[0]] ^ Xtime9[state[1]] ^ XtimeE[state[2]] ^ XtimeB[state[3]];\r
-                       tmp[15] = XtimeB[state[0]] ^ XtimeD[state[1]] ^ Xtime9[state[2]] ^ XtimeE[state[3]];\r
-               \r
-                       // restore column 1\r
-                       tmp[4] = XtimeE[state[4]] ^ XtimeB[state[5]] ^ XtimeD[state[6]] ^ Xtime9[state[7]];\r
-                       tmp[9] = Xtime9[state[4]] ^ XtimeE[state[5]] ^ XtimeB[state[6]] ^ XtimeD[state[7]];\r
-                       tmp[14] = XtimeD[state[4]] ^ Xtime9[state[5]] ^ XtimeE[state[6]] ^ XtimeB[state[7]];\r
-                       tmp[3] = XtimeB[state[4]] ^ XtimeD[state[5]] ^ Xtime9[state[6]] ^ XtimeE[state[7]];\r
-               \r
-                       // restore column 2\r
-                       tmp[8] = XtimeE[state[8]] ^ XtimeB[state[9]] ^ XtimeD[state[10]] ^ Xtime9[state[11]];\r
-                       tmp[13] = Xtime9[state[8]] ^ XtimeE[state[9]] ^ XtimeB[state[10]] ^ XtimeD[state[11]];\r
-                       tmp[2]  = XtimeD[state[8]] ^ Xtime9[state[9]] ^ XtimeE[state[10]] ^ XtimeB[state[11]];\r
-                       tmp[7]  = XtimeB[state[8]] ^ XtimeD[state[9]] ^ Xtime9[state[10]] ^ XtimeE[state[11]];\r
-               \r
-                       // restore column 3\r
-                       tmp[12] = XtimeE[state[12]] ^ XtimeB[state[13]] ^ XtimeD[state[14]] ^ Xtime9[state[15]];\r
-                       tmp[1] = Xtime9[state[12]] ^ XtimeE[state[13]] ^ XtimeB[state[14]] ^ XtimeD[state[15]];\r
-                       tmp[6] = XtimeD[state[12]] ^ Xtime9[state[13]] ^ XtimeE[state[14]] ^ XtimeB[state[15]];\r
-                       tmp[11] = XtimeB[state[12]] ^ XtimeD[state[13]] ^ Xtime9[state[14]] ^ XtimeE[state[15]];\r
-               \r
-                       for( i=0; i < 4 * Nb; i++ )\r
-                               state[i] = InvSbox[tmp[i]];\r
-               }\r
-               \r
-               // encrypt/decrypt columns of the key\r
-               protected function addRoundKey (key:ByteArray, offset:uint):void\r
-               {\r
-                       var idx:uint;\r
-               \r
-                       for( idx = 0; idx < 16; idx++ )\r
-                               state[idx] ^= key[idx+offset];\r
-               }\r
-\r
-               public function toString():String {\r
-                       return "aes"+(8*keyLength);\r
-               }\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/BlowFishKey.as
deleted file mode 100644 (file)
index c3350cb..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/**\r
- * BlowFishKey\r
- * \r
- * An Actionscript 3 implementation of the BlowFish encryption algorithm,\r
- * as documented at http://www.schneier.com/blowfish.html\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             The Bouncy Castle Crypto package, \r
- *             Copyright (c) 2000-2004 The Legion Of The Bouncy Castle\r
- *             (http://www.bouncycastle.org)\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Memory;\r
-\r
-       public class BlowFishKey implements ISymmetricKey\r
-       {\r
-\r
-               private static const KP:Array = [ 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0,\r
-                       0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5,\r
-                       0xB5470917, 0x9216D5D9, 0x8979FB1B ];\r
-\r
-               private static const KS0:Array = [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, 0x24A19947,\r
-                       0xB3916CF7, 0x0801F2E2, 0x858EFC16, 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, 0x0D95748F, 0x728EB658,\r
-                       0x718BCD58, 0x82154AEE, 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, 0xC5D1B023, 0x286085F0, 0xCA417918,\r
-                       0xB8DB38EF, 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\r
-                       0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, 0xA15486AF,\r
-                       0x7C72E993, 0xB3EE1411, 0x636FBC2A, 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, 0xAFD6BA33, 0x6C24CF5C,\r
-                       0x7A325381, 0x28958677, 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, 0x61D809CC, 0xFB21A991, 0x487CAC60,\r
-                       0x5DEC8032, 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\r
-                       0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, 0x6A51A0D2,\r
-                       0xD8542F68, 0x960FA728, 0xAB5133A3, 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, 0xA1F1651D, 0x39AF0176,\r
-                       0x66CA593E, 0x82430E88, 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, 0xE06F75D8, 0x85C12073, 0x401A449F,\r
-                       0x56C16AA6, 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\r
-                       0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, 0xC1A94FB6,\r
-                       0x409F60C4, 0x5E5C9EC2, 0x196A2463, 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, 0x6DFC511F, 0x9B30952C,\r
-                       0xCC814544, 0xAF5EBD09, 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, 0xC0CBA857, 0x45C8740F, 0xD20B5F39,\r
-                       0xB9D3FBDB, 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\r
-                       0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, 0x9E5C57BB,\r
-                       0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, 0x695B27B0, 0xBBCA58C8,\r
-                       0xE1FFA35D, 0xB8F011A0, 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, 0x9A53E479, 0xB6F84565, 0xD28E49BC,\r
-                       0x4BFB9790, 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\r
-                       0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, 0x8FF6E2FB,\r
-                       0xF2122B64, 0x8888B812, 0x900DF01C, 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, 0x2F2F2218, 0xBE0E1777,\r
-                       0xEA752DFE, 0x8B021FA1, 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81,\r
-                       0xD2ADA8D9, 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\r
-                       0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, 0x2464369B,\r
-                       0xF009B91E, 0x5563911D, 0x59DFA6AA, 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, 0x83260376, 0x6295CFA9,\r
-                       0x11C81968, 0x4E734A41, 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, 0xD60F573F, 0xBC9BC6E4, 0x2B60A476,\r
-                       0x81E67400, 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\r
-                       0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ];\r
-\r
-               private static const KS1:Array = [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, 0xECAA8C71,\r
-                       0x699A17FF, 0x5664526C, 0xC2B19EE1, 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, 0x3F54989A, 0x5B429D65,\r
-                       0x6B8FE4D6, 0x99F73FD6, 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, 0x4CDD2086, 0x8470EB26, 0x6382E9C6,\r
-                       0x021ECC5E, 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\r
-                       0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, 0xAE0CF51A,\r
-                       0x3CB574B2, 0x25837A58, 0xDC0921BD, 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, 0x3AE5E581, 0x37C2DADC,\r
-                       0xC8B57634, 0x9AF3DDA7, 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1,\r
-                       0x183EB331, 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\r
-                       0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, 0x7A584718,\r
-                       0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, 0xEF1C1847, 0x3215D908,\r
-                       0xDD433B37, 0x24C2BA16, 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, 0x71DFF89E, 0x10314E55, 0x81AC77D6,\r
-                       0x5F11199B, 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\r
-                       0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, 0x803E89D6,\r
-                       0x5266C825, 0x2E4CC978, 0x9C10B36A, 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, 0xF2F74EA7, 0x361D2B3D,\r
-                       0x1939260F, 0x19C27960, 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, 0xE3BC4595, 0xA67BC883, 0xB17F37D1,\r
-                       0x018CFF28, 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\r
-                       0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, 0xB5735C90,\r
-                       0x4C70A239, 0xD59E9E0B, 0xCBAADE14, 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, 0x648B1EAF, 0x19BDF0CA,\r
-                       0xA02369B9, 0x655ABB50, 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, 0x9B540B19, 0x875FA099, 0x95F7997E,\r
-                       0x623D7DA8, 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\r
-                       0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, 0x58EBF2EF,\r
-                       0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, 0x45EEE2B6, 0xA3AAABEA,\r
-                       0xDB6C4F15, 0xFACB4FD0, 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, 0xD81E799E, 0x86854DC7, 0xE44B476A,\r
-                       0x3D816250, 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\r
-                       0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, 0x3372F092,\r
-                       0x8D937E41, 0xD65FECF1, 0x6C223BDB, 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, 0xA6078084, 0x19F8509E,\r
-                       0xE8EFD855, 0x61D99735, 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, 0x9E447A2E, 0xC3453484, 0xFDD56705,\r
-                       0x0E1E9EC9, 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\r
-                       0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ];\r
-\r
-               private static const KS2:Array = [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, 0xD4082471,\r
-                       0x3320F46A, 0x43B7D4B7, 0x500061AF, 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, 0x4D95FC1D, 0x96B591AF,\r
-                       0x70F4DDD3, 0x66A02F45, 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, 0x96EB27B3, 0x55FD3941, 0xDA2547E6,\r
-                       0xABCA0A9A, 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\r
-                       0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, 0x20FE9E35,\r
-                       0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, 0x3A6EFA74, 0xDD5B4332,\r
-                       0x6841E7F7, 0xCA7820FB, 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, 0x55533A3A, 0x20838D87, 0xFE6BA9B7,\r
-                       0xD096954B, 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\r
-                       0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, 0x07F9C9EE,\r
-                       0x41041F0F, 0x404779A4, 0x5D886E17, 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60,\r
-                       0xDFF8E8A3, 0x1F636C1B, 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, 0x6B2395E0, 0x333E92E1, 0x3B240B62,\r
-                       0xEEBEB922, 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\r
-                       0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, 0xA812DC60,\r
-                       0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0xCC00FFA3,\r
-                       0xB5390F92, 0x690FED0B, 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, 0xBB132F88, 0x515BAD24, 0x7B9479BF,\r
-                       0x763BD6EB, 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\r
-                       0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, 0x44421659,\r
-                       0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, 0x9DBC8057, 0xF0F7C086,\r
-                       0x60787BF8, 0x6003604D, 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, 0x83426B33, 0xF01EAB71, 0xB0804187,\r
-                       0x3C005E5F, 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\r
-                       0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, 0x466E598E,\r
-                       0x20B45770, 0x8CD55591, 0xC902DE4C, 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, 0xB77F19B6, 0xE0A9DC09,\r
-                       0x662D09A1, 0xC4324633, 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F,\r
-                       0x2868F169, 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\r
-                       0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, 0x11E69ED7,\r
-                       0x2338EA63, 0x53C2DD94, 0xC2C21634, 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, 0x6F05E409, 0x4B7C0188,\r
-                       0x39720A3D, 0x7C927C24, 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, 0xED545578, 0x08FCA5B5, 0xD83D7CD3,\r
-                       0x4DAD0FC4, 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\r
-                       0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ];\r
-\r
-               private static const KS3:Array = [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, 0xD5118E9D,\r
-                       0xBF0F7315, 0xD62D1C7E, 0xC700C47B, 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, 0x5748AB2F, 0xBC946E79,\r
-                       0xC6A376D2, 0x6549C2C8, 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, 0x2939BBDB, 0xA9BA4650, 0xAC9526E8,\r
-                       0xBE5EE304, 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\r
-                       0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, 0xC72FEFD3,\r
-                       0xF752F7DA, 0x3F046F69, 0x77FA0A59, 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, 0xE990FD5A, 0x9E34D797,\r
-                       0x2CF0B7D9, 0x022B8B51, 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472,\r
-                       0x5A88F54C, 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\r
-                       0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, 0xC3EB9E15,\r
-                       0x3C9057A2, 0x97271AEC, 0xA93A072A, 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, 0x7533D928, 0xB155FDF5,\r
-                       0x03563482, 0x8ABA3CBB, 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, 0x4DE81751, 0x3830DC8E, 0x379D5862,\r
-                       0x9320F991, 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\r
-                       0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, 0x5BBEF7DD,\r
-                       0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0xFA6484BB,\r
-                       0x8D6612AE, 0xBF3C6F47, 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, 0x740E0D8D, 0xE75B1357, 0xF8721671,\r
-                       0xAF537D5D, 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\r
-                       0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, 0xA08839E1,\r
-                       0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, 0x1A908749, 0xD44FBD9A,\r
-                       0xD0DADECB, 0xD50ADA38, 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF,\r
-                       0x27D9459C, 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\r
-                       0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, 0x9F1F9532,\r
-                       0xE0D392DF, 0xD3A0342B, 0x8971F21E, 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, 0xDF359F8D, 0x9B992F2E,\r
-                       0xE60B6F47, 0x0FE3F11D, 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, 0x1618B166, 0xFD2C1D05, 0x848FD2C5,\r
-                       0xF6FB2299, 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\r
-                       0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, 0xC9AA53FD,\r
-                       0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, 0x53113EC0, 0x1640E3D3,\r
-                       0x38ABBD60, 0x2547ADF0, 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0,\r
-                       0x4CF9AA7E, 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\r
-                       0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ];\r
-\r
-               // ====================================\r
-               // Useful constants\r
-               // ====================================\r
-       \r
-               private static const ROUNDS:uint = 16;\r
-               private static const BLOCK_SIZE:uint = 8; // bytes = 64 bits\r
-               private static const SBOX_SK:uint = 256;\r
-               private static const P_SZ:uint = ROUNDS + 2;\r
-       \r
-               private var S0:Array;\r
-               private var S1:Array;\r
-               private var S2:Array;\r
-               private var S3:Array; // the s-boxes\r
-               private var P:Array; // the p-array\r
-       \r
-               private var key:ByteArray = null;\r
-\r
-               public function BlowFishKey(key:ByteArray) {\r
-                       this.key = key;\r
-                       setKey(key);\r
-               }\r
-\r
-               public function getBlockSize():uint\r
-               {\r
-                       return BLOCK_SIZE;\r
-               }\r
-               \r
-               public function decrypt(block:ByteArray, index:uint=0):void\r
-               {\r
-                       decryptBlock(block, index, block, index);\r
-               }\r
-               \r
-               public function dispose():void\r
-               {\r
-                       var i:uint=0;\r
-                       for (i=0;i<S0.length;i++) { S0[i]=0; }\r
-                       for (i=0;i<S1.length;i++) { S1[i]=0; }\r
-                       for (i=0;i<S2.length;i++) { S2[i]=0; }\r
-                       for (i=0;i<S3.length;i++) { S3[i]=0; }\r
-                       for (i=0;i<P.length;i++) { P[i]=0; }\r
-                       S0 = null;\r
-                       S1 = null;\r
-                       S2 = null;\r
-                       S3 = null;\r
-                       P = null;\r
-                       for (i=0;i<key.length;i++) {\r
-                               key[i]=0;\r
-                       }\r
-                       key.length = 0;\r
-                       key = null;\r
-                       Memory.gc();\r
-               }\r
-               \r
-               public function encrypt(block:ByteArray, index:uint=0):void\r
-               {\r
-                       encryptBlock(block, index, block, index);\r
-               }\r
-\r
-               // ==================================\r
-               // Private Implementation\r
-               // ==================================\r
-       \r
-               private function F(x:uint):uint\r
-               {\r
-                       return (((S0[(x >>> 24)] + S1[(x >>> 16) & 0xff]) ^ S2[(x >>> 8) & 0xff]) + S3[x & 0xff]);\r
-               }\r
-\r
-               /**\r
-                * apply the encryption cycle to each value pair in the table.\r
-                */\r
-               private function processTable(xl:uint, xr:uint, table:Array):void\r
-               {\r
-                       var size:uint = table.length;\r
-       \r
-                       for (var s:uint = 0; s < size; s += 2)\r
-                       {\r
-                               xl ^= P[0];\r
-       \r
-                               for (var i:uint = 1; i < ROUNDS; i += 2)\r
-                               {\r
-                                       xr ^= F(xl) ^ P[i];\r
-                                       xl ^= F(xr) ^ P[i + 1];\r
-                               }\r
-       \r
-                               xr ^= P[ROUNDS + 1];\r
-       \r
-                               table[s] = xr;\r
-                               table[s + 1] = xl;\r
-       \r
-                               xr = xl; // end of cycle swap\r
-                               xl = table[s];\r
-                       }\r
-               }\r
-       \r
-               private function setKey(key:ByteArray):void\r
-               {\r
-                       /*\r
-                        * - comments are from _Applied Crypto_, Schneier, p338 please be\r
-                        * careful comparing the two, AC numbers the arrays from 1, the enclosed\r
-                        * code from 0.\r
-                        * \r
-                        * (1) Initialise the S-boxes and the P-array, with a fixed string This\r
-                        * string contains the hexadecimal digits of pi (3.141...)\r
-                        */\r
-                       S0 = KS0.concat();\r
-                       S1 = KS1.concat();\r
-                       S2 = KS2.concat();\r
-                       S3 = KS3.concat();\r
-                       P = KP.concat();\r
-       \r
-                       /*\r
-                        * (2) Now, XOR P[0] with the first 32 bits of the key, XOR P[1] with\r
-                        * the second 32-bits of the key, and so on for all bits of the key (up\r
-                        * to P[17]). Repeatedly cycle through the key bits until the entire\r
-                        * P-array has been XOR-ed with the key bits\r
-                        */\r
-                       var keyLength:uint= key.length;\r
-                       var keyIndex:uint = 0;\r
-       \r
-                       for (var i:uint = 0; i < P_SZ; i++)\r
-                       {\r
-                               // get the 32 bits of the key, in 4 * 8 bit chunks\r
-                               var data:uint = 0x0000000;\r
-                               for (var j:uint = 0; j < 4; j++)\r
-                               {\r
-                                       // create a 32 bit block\r
-                                       data = (data << 8) | (key[keyIndex++] & 0xff);\r
-       \r
-                                       // wrap when we get to the end of the key\r
-                                       if (keyIndex >= keyLength)\r
-                                       {\r
-                                               keyIndex = 0;\r
-                                       }\r
-                               }\r
-                               // XOR the newly created 32 bit chunk onto the P-array\r
-                               P[i] ^= data;\r
-                       }\r
-       \r
-                       /*\r
-                        * (3) Encrypt the all-zero string with the Blowfish algorithm, using\r
-                        * the subkeys described in (1) and (2)\r
-                        * \r
-                        * (4) Replace P1 and P2 with the output of step (3)\r
-                        * \r
-                        * (5) Encrypt the output of step(3) using the Blowfish algorithm, with\r
-                        * the modified subkeys.\r
-                        * \r
-                        * (6) Replace P3 and P4 with the output of step (5)\r
-                        * \r
-                        * (7) Continue the process, replacing all elements of the P-array and\r
-                        * then all four S-boxes in order, with the output of the continuously\r
-                        * changing Blowfish algorithm\r
-                        */\r
-       \r
-                       processTable(0, 0, P);\r
-                       processTable(P[P_SZ - 2], P[P_SZ - 1], S0);\r
-                       processTable(S0[SBOX_SK - 2], S0[SBOX_SK - 1], S1);\r
-                       processTable(S1[SBOX_SK - 2], S1[SBOX_SK - 1], S2);\r
-                       processTable(S2[SBOX_SK - 2], S2[SBOX_SK - 1], S3);\r
-               }\r
-       \r
-               /**\r
-                * Encrypt the given input starting at the given offset and place the result\r
-                * in the provided buffer starting at the given offset. The input will be an\r
-                * exact multiple of our blocksize.\r
-                */\r
-               private function encryptBlock(src:ByteArray, srcIndex:uint, dst:ByteArray, dstIndex:uint):void\r
-               {\r
-                       var xl:uint = BytesTo32bits(src, srcIndex);\r
-                       var xr:uint = BytesTo32bits(src, srcIndex + 4);\r
-       \r
-                       xl ^= P[0];\r
-       \r
-                       for (var i:uint = 1; i < ROUNDS; i += 2)\r
-                       {\r
-                               xr ^= F(xl) ^ P[i];\r
-                               xl ^= F(xr) ^ P[i + 1];\r
-                       }\r
-       \r
-                       xr ^= P[ROUNDS + 1];\r
-       \r
-                       Bits32ToBytes(xr, dst, dstIndex);\r
-                       Bits32ToBytes(xl, dst, dstIndex + 4);\r
-               }\r
-       \r
-               /**\r
-                * Decrypt the given input starting at the given offset and place the result\r
-                * in the provided buffer starting at the given offset. The input will be an\r
-                * exact multiple of our blocksize.\r
-                */\r
-               private function decryptBlock(src:ByteArray, srcIndex:uint, dst:ByteArray, dstIndex:uint):void\r
-               {\r
-                       var xl:uint = BytesTo32bits(src, srcIndex);\r
-                       var xr:uint = BytesTo32bits(src, srcIndex + 4);\r
-       \r
-                       xl ^= P[ROUNDS + 1];\r
-       \r
-                       for (var i:uint = ROUNDS; i > 0; i -= 2)\r
-                       {\r
-                               xr ^= F(xl) ^ P[i];\r
-                               xl ^= F(xr) ^ P[i - 1];\r
-                       }\r
-       \r
-                       xr ^= P[0];\r
-       \r
-                       Bits32ToBytes(xr, dst, dstIndex);\r
-                       Bits32ToBytes(xl, dst, dstIndex + 4);\r
-               }\r
-       \r
-               private function BytesTo32bits(b:ByteArray, i:uint):uint\r
-               {\r
-                       return ((b[i] & 0xff) << 24) | ((b[i + 1] & 0xff) << 16) | ((b[i + 2] & 0xff) << 8) | ((b[i + 3] & 0xff));\r
-               }\r
-       \r
-               private function Bits32ToBytes(i:uint, b:ByteArray, offset:uint):void\r
-               {\r
-                       b[offset + 3] = i;\r
-                       b[offset + 2] = (i >> 8);\r
-                       b[offset + 1] = (i >> 16);\r
-                       b[offset] = (i >> 24);\r
-               }\r
-               \r
-               public function toString():String {\r
-                       return "blowfish";\r
-               }\r
-       \r
-       }\r
-               \r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CBCMode.as
deleted file mode 100644 (file)
index e3781be..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/**\r
- * CBCMode\r
- * \r
- * An ActionScript 3 implementation of the CBC confidentiality mode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       /**\r
-        * CBC confidentiality mode. why not.\r
-        */\r
-       public class CBCMode extends IVMode implements IMode\r
-       {\r
-               \r
-               public function CBCMode(key:ISymmetricKey, padding:IPad = null) {\r
-                       super(key, padding);\r
-               }\r
-\r
-               public function encrypt(src:ByteArray):void {\r
-                       padding.pad(src);\r
-                       var vector:ByteArray = getIV4e();\r
-                       for (var i:uint=0;i<src.length;i+=blockSize) {\r
-                               for (var j:uint=0;j<blockSize;j++) {\r
-                                       src[i+j] ^= vector[j];\r
-                               }\r
-                               key.encrypt(src, i);\r
-                               vector.position=0;\r
-                               vector.writeBytes(src, i, blockSize);\r
-                       }\r
-               }\r
-               public function decrypt(src:ByteArray):void {\r
-                       var vector:ByteArray = getIV4d();\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<src.length;i+=blockSize) {\r
-                               tmp.position=0;\r
-                               tmp.writeBytes(src, i, blockSize);\r
-                               key.decrypt(src, i);\r
-                               for (var j:uint=0;j<blockSize;j++) {\r
-                                       src[i+j] ^= vector[j];\r
-                               }\r
-                               vector.position=0;\r
-                               vector.writeBytes(tmp, 0, blockSize);\r
-                       }\r
-                       padding.unpad(src);\r
-               }\r
-               \r
-               public function toString():String {\r
-                       return key.toString()+"-cbc";\r
-               }\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFB8Mode.as
deleted file mode 100644 (file)
index 9baa284..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/**\r
- * CFB8Mode\r
- * \r
- * An ActionScript 3 implementation of the CFB-8 confidentiality mode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import com.hurlant.crypto.tests.TestCase;\r
-       import flash.utils.ByteArray;\r
-\r
-       /**\r
-        * \r
-        * Note: The constructor accepts an optional padding argument, but ignores it otherwise.\r
-        */\r
-       public class CFB8Mode extends IVMode implements IMode\r
-       {\r
-               public function CFB8Mode(key:ISymmetricKey, padding:IPad = null) {\r
-                       super(key, null);\r
-               }\r
-               \r
-               public function encrypt(src:ByteArray):void {\r
-                       var vector:ByteArray = getIV4e();\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<src.length;i++) {\r
-                               tmp.position = 0;\r
-                               tmp.writeBytes(vector);\r
-                               key.encrypt(vector);\r
-                               src[i] ^= vector[0];\r
-                               // rotate\r
-                               for (var j:uint=0;j<blockSize-1;j++) {\r
-                                       vector[j] = tmp[j+1];\r
-                               }\r
-                               vector[blockSize-1] = src[i];\r
-                       }\r
-               }\r
-               \r
-               public function decrypt(src:ByteArray):void {\r
-                       var vector:ByteArray = getIV4d();\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<src.length;i++) {\r
-                               var c:uint = src[i];\r
-                               tmp.position = 0;\r
-                               tmp.writeBytes(vector); // I <- tmp\r
-                               key.encrypt(vector);    // O <- vector\r
-                               src[i] ^= vector[0];\r
-                               // rotate\r
-                               for (var j:uint=0;j<blockSize-1;j++) {\r
-                                       vector[j] = tmp[j+1];\r
-                               }\r
-                               vector[blockSize-1] = c;\r
-                       }\r
-\r
-               }\r
-               public function toString():String {\r
-                       return key.toString()+"-cfb8";\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CFBMode.as
deleted file mode 100644 (file)
index 7b748b9..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/**\r
- * CFBMode\r
- * \r
- * An ActionScript 3 implementation of the CFB confidentiality mode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-\r
-       /**\r
-        * This is the "full" CFB.\r
-        * CFB1 and CFB8 are hiding somewhere else.\r
-        * \r
-        * Note: The constructor accepts an optional padding argument, but ignores it otherwise.\r
-        */\r
-       public class CFBMode extends IVMode implements IMode\r
-       {\r
-               \r
-               public function CFBMode(key:ISymmetricKey, padding:IPad = null) {\r
-                       super(key,null);\r
-               }\r
-\r
-               public function encrypt(src:ByteArray):void\r
-               {\r
-                       var l:uint = src.length;\r
-                       var vector:ByteArray = getIV4e();\r
-                       for (var i:uint=0;i<src.length;i+=blockSize) {\r
-                               key.encrypt(vector);\r
-                               var chunk:uint = (i+blockSize<l)?blockSize:l-i;\r
-                               for (var j:uint=0;j<chunk;j++) {\r
-                                       src[i+j] ^= vector[j];\r
-                               }\r
-                               vector.position=0;\r
-                               vector.writeBytes(src, i, chunk);\r
-                       }\r
-               }\r
-               \r
-               public function decrypt(src:ByteArray):void\r
-               {\r
-                       var l:uint = src.length;\r
-                       var vector:ByteArray = getIV4d();\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<src.length;i+=blockSize) {\r
-                               key.encrypt(vector);\r
-                               var chunk:uint = (i+blockSize<l)?blockSize:l-i;\r
-                               tmp.position=0;\r
-                               tmp.writeBytes(src, i, chunk);\r
-                               for (var j:uint=0;j<chunk;j++) {\r
-                                       src[i+j] ^= vector[j];\r
-                               }\r
-                               vector.position=0;\r
-                               vector.writeBytes(tmp);\r
-                       }\r
-               }\r
-               \r
-               public function toString():String {\r
-                       return key.toString()+"-cfb";\r
-               }\r
-\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/CTRMode.as
deleted file mode 100644 (file)
index fcd1284..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**\r
- * CTRMode\r
- * \r
- * An ActionScript 3 implementation of the counter confidentiality mode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-\r
-       public class CTRMode extends IVMode implements IMode\r
-       {\r
-\r
-               public function CTRMode(key:ISymmetricKey, padding:IPad = null) {\r
-                       super(key, padding);\r
-               }\r
-               \r
-               public function encrypt(src:ByteArray):void\r
-               {\r
-                       padding.pad(src);\r
-                       var vector:ByteArray = getIV4e();\r
-                       core(src, vector);\r
-               }\r
-               \r
-               public function decrypt(src:ByteArray):void\r
-               {\r
-                       var vector:ByteArray = getIV4d();\r
-                       core(src, vector);\r
-                       padding.unpad(src);\r
-               }\r
-               \r
-               private function core(src:ByteArray, iv:ByteArray):void {\r
-                       var X:ByteArray = new ByteArray;\r
-                       var Xenc:ByteArray = new ByteArray;\r
-                       X.writeBytes(iv);\r
-                       for (var i:uint=0;i<src.length;i+=blockSize) {\r
-                               Xenc.position=0;\r
-                               Xenc.writeBytes(X);\r
-                               key.encrypt(Xenc);\r
-                               for (var j:uint=0;j<blockSize;j++) {\r
-                                       src[i+j] ^= Xenc[j];\r
-                               }\r
-                               \r
-                               for (j=blockSize-1;j>=0;--j) {\r
-                                       X[j]++;\r
-                                       if (X[j]!=0)\r
-                                               break;\r
-                               }\r
-                       }\r
-               }\r
-               public function toString():String {\r
-                       return key.toString()+"-ctr";\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/DESKey.as
deleted file mode 100644 (file)
index 4a0b755..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-/**\r
- * DESKey\r
- * \r
- * An Actionscript 3 implementation of the Data Encryption Standard (DES)\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             The Bouncy Castle Crypto package, \r
- *             Copyright (c) 2000-2004 The Legion Of The Bouncy Castle\r
- *             (http://www.bouncycastle.org)\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.util.Memory;\r
-\r
-       public class DESKey implements ISymmetricKey\r
-       {\r
-               /**\r
-                * what follows is mainly taken from "Applied Cryptography", by Bruce\r
-                * Schneier, however it also bears great resemblance to Richard\r
-                * Outerbridge's D3DES...\r
-                */\r
-       \r
-               private static const Df_Key:Array = [ 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32,\r
-                               0x10, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67 ];\r
-       \r
-               private static const bytebit:Array = [ 128, 64, 32, 16, 8, 4, 2, 1 ];\r
-       \r
-               private static const bigbyte:Array = [ 0x800000, 0x400000, 0x200000, 0x100000, 0x80000, 0x40000, 0x20000, 0x10000, 0x8000,\r
-                               0x4000, 0x2000, 0x1000, 0x800, 0x400, 0x200, 0x100, 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1 ];\r
-       \r
-               /*\r
-                * Use the key schedule specified in the Standard (ANSI X3.92-1981).\r
-                */\r
-       \r
-               private static const pc1:Array = [ 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2,\r
-                               59, 51, 43, 35, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 60, 52, 44, 36, 28, 20, 12,\r
-                               4, 27, 19, 11, 3 ];\r
-       \r
-               private static const totrot:Array = [ 1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28 ];\r
-       \r
-               private static const pc2:Array = [ 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, 40,\r
-                               51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 ];\r
-       \r
-               private static const SP1:Array = [ 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004,\r
-                               0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004,\r
-                               0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, 0x00010004,\r
-                               0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000, 0x00010000, 0x01010404,\r
-                               0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, 0x00010400,\r
-                               0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, 0x01010404, 0x00010004, 0x01010000, 0x01000404,\r
-                               0x01000004, 0x00000404, 0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004,\r
-                               0x00010400, 0x00000000, 0x01010004 ];\r
-       \r
-               private static const SP2:Array = [ 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020,\r
-                               0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020,\r
-                               0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, 0x00100020,\r
-                               0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020, 0x00000000, 0x00108020,\r
-                               0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, 0x00000020,\r
-                               0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, 0x00008020, 0x80108000, 0x00100000, 0x80000020,\r
-                               0x00100020, 0x80008020, 0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000,\r
-                               0x80100020, 0x80108020, 0x00108000 ];\r
-       \r
-               private static const SP3:Array = [ 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208,\r
-                               0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208,\r
-                               0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, 0x08000208,\r
-                               0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000, 0x08020200, 0x08000000,\r
-                               0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, 0x08020208,\r
-                               0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, 0x08000208, 0x00020000, 0x08000000, 0x08020208,\r
-                               0x00000008, 0x00020208, 0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208,\r
-                               0x00000008, 0x08020008, 0x00020200 ];\r
-       \r
-               private static const SP4:Array = [ 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001,\r
-                               0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001,\r
-                               0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, 0x00800081,\r
-                               0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081, 0x00800080, 0x00800001,\r
-                               0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, 0x00800081,\r
-                               0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802081, 0x00000081, 0x00000001, 0x00002000,\r
-                               0x00800001, 0x00002001, 0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080,\r
-                               0x00800000, 0x00002000, 0x00802080 ];\r
-       \r
-               private static const SP5:Array = [ 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000,\r
-                               0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000,\r
-                               0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, 0x42080000,\r
-                               0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100, 0x00080000, 0x42000100,\r
-                               0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, 0x42080000,\r
-                               0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, 0x42080100, 0x00080100, 0x42000000, 0x42080100,\r
-                               0x02080000, 0x00000000, 0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000,\r
-                               0x40080000, 0x02080100, 0x40000100 ];\r
-       \r
-               private static const SP6:Array = [ 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010,\r
-                               0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010,\r
-                               0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, 0x20400010,\r
-                               0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000, 0x20004000, 0x00000010,\r
-                               0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, 0x20000000,\r
-                               0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, 0x00404010, 0x20404000, 0x00000000, 0x20400010,\r
-                               0x00000010, 0x00004000, 0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000,\r
-                               0x20000000, 0x00400010, 0x20004010 ];\r
-       \r
-               private static const SP7:Array = [ 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802,\r
-                               0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802,\r
-                               0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, 0x04200000,\r
-                               0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800, 0x04000000, 0x00200800,\r
-                               0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, 0x04000800,\r
-                               0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, 0x00000802, 0x04000002, 0x04200802, 0x04200000,\r
-                               0x00200800, 0x00000000, 0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002,\r
-                               0x04000800, 0x00000800, 0x00200002 ];\r
-       \r
-               private static const SP8:Array = [ 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040,\r
-                               0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040,\r
-                               0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, 0x00001040,\r
-                               0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000, 0x00041040, 0x00040000,\r
-                               0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, 0x10000040,\r
-                               0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, 0x00000000, 0x10041040, 0x00040040, 0x10000040,\r
-                               0x10040000, 0x10001000, 0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040,\r
-                               0x00040040, 0x10000000, 0x10041000 ];\r
-\r
-       \r
-               protected var key:ByteArray;\r
-               protected var encKey:Array;\r
-               protected var decKey:Array;\r
-       \r
-\r
-               public function DESKey(key:ByteArray) {\r
-                       this.key = key;\r
-                       this.encKey = generateWorkingKey(true, key, 0);\r
-                       this.decKey = generateWorkingKey(false, key, 0);\r
-               }\r
-\r
-               public function getBlockSize():uint\r
-               {\r
-                       return 8;\r
-               }\r
-               \r
-               public function decrypt(block:ByteArray, index:uint=0):void\r
-               {\r
-                       desFunc(decKey, block, index, block, index);\r
-               }\r
-               \r
-               public function dispose():void\r
-               {\r
-                       var i:uint=0;\r
-                       for (i=0;i<encKey.length;i++) { encKey[i]=0; }\r
-                       for (i=0;i<decKey.length;i++) { decKey[i]=0; }\r
-                       encKey=null;\r
-                       decKey=null;\r
-                       for (i=0;i<key.length;i++) { key[i]=0; }\r
-                       key.length = 0;\r
-                       key = null;\r
-                       Memory.gc();\r
-               }\r
-               \r
-               public function encrypt(block:ByteArray, index:uint=0):void\r
-               {\r
-                       desFunc(encKey, block, index, block, index);\r
-               }\r
-                       \r
-       \r
-               /**\r
-                * generate an integer based working key based on our secret key and what we\r
-                * processing we are planning to do.\r
-                * \r
-                * Acknowledgements for this routine go to James Gillogly & Phil Karn.\r
-                */\r
-               protected function generateWorkingKey(encrypting:Boolean, key:ByteArray, off:uint):Array\r
-               {\r
-                       //int[] newKey = new int[32];\r
-                       var newKey:Array = [];\r
-                       //boolean[] pc1m = new boolean[56], pcr = new boolean[56];\r
-                       var pc1m:ByteArray = new ByteArray;\r
-                       var pcr:ByteArray = new ByteArray;\r
-                       \r
-                       var l:uint;\r
-       \r
-                       for (var j:uint = 0; j < 56; j++)\r
-                       {\r
-                               l = pc1[j];\r
-       \r
-                               pc1m[j] = ((key[off + (l >>> 3)] & bytebit[l & 07]) != 0);\r
-                       }\r
-       \r
-                       for (var i:uint = 0; i < 16; i++)\r
-                       {\r
-                               var m:uint;\r
-                               var n:uint;\r
-       \r
-                               if (encrypting)\r
-                               {\r
-                                       m = i << 1;\r
-                               }\r
-                               else\r
-                               {\r
-                                       m = (15 - i) << 1;\r
-                               }\r
-       \r
-                               n = m + 1;\r
-                               newKey[m] = newKey[n] = 0;\r
-       \r
-                               for (j = 0; j < 28; j++)\r
-                               {\r
-                                       l = j + totrot[i];\r
-                                       if (l < 28)\r
-                                       {\r
-                                               pcr[j] = pc1m[l];\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pcr[j] = pc1m[l - 28];\r
-                                       }\r
-                               }\r
-       \r
-                               for (j = 28; j < 56; j++)\r
-                               {\r
-                                       l = j + totrot[i];\r
-                                       if (l < 56)\r
-                                       {\r
-                                               pcr[j] = pc1m[l];\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               pcr[j] = pc1m[l - 28];\r
-                                       }\r
-                               }\r
-       \r
-                               for (j = 0; j < 24; j++)\r
-                               {\r
-                                       if (pcr[pc2[j]])\r
-                                       {\r
-                                               newKey[m] |= bigbyte[j];\r
-                                       }\r
-       \r
-                                       if (pcr[pc2[j + 24]])\r
-                                       {\r
-                                               newKey[n] |= bigbyte[j];\r
-                                       }\r
-                               }\r
-                       }\r
-       \r
-                       //\r
-                       // store the processed key\r
-                       //\r
-                       for (i = 0; i != 32; i += 2)\r
-                       {\r
-                               var i1:uint;\r
-                               var i2:uint;\r
-       \r
-                               i1 = newKey[i];\r
-                               i2 = newKey[i + 1];\r
-       \r
-                               newKey[i] = ((i1 & 0x00fc0000) << 6) | ((i1 & 0x00000fc0) << 10) | ((i2 & 0x00fc0000) >>> 10)\r
-                                               | ((i2 & 0x00000fc0) >>> 6);\r
-       \r
-                               newKey[i + 1] = ((i1 & 0x0003f000) << 12) | ((i1 & 0x0000003f) << 16) | ((i2 & 0x0003f000) >>> 4)\r
-                                               | (i2 & 0x0000003f);\r
-                       }\r
-                       return newKey;\r
-               }\r
-       \r
-               /**\r
-                * the DES engine.\r
-                */\r
-               protected function desFunc(wKey:Array, inp:ByteArray, inOff:uint, out:ByteArray, outOff:uint):void\r
-               {\r
-                       var work:uint;\r
-                       var right:uint;\r
-                       var left:uint;\r
-       \r
-                       left = (inp[inOff + 0] & 0xff) << 24;\r
-                       left |= (inp[inOff + 1] & 0xff) << 16;\r
-                       left |= (inp[inOff + 2] & 0xff) << 8;\r
-                       left |= (inp[inOff + 3] & 0xff);\r
-       \r
-                       right = (inp[inOff + 4] & 0xff) << 24;\r
-                       right |= (inp[inOff + 5] & 0xff) << 16;\r
-                       right |= (inp[inOff + 6] & 0xff) << 8;\r
-                       right |= (inp[inOff + 7] & 0xff);\r
-\r
-                       work = ((left >>> 4) ^ right) & 0x0f0f0f0f;\r
-                       right ^= work;\r
-                       left ^= (work << 4);\r
-                       work = ((left >>> 16) ^ right) & 0x0000ffff;\r
-                       right ^= work;\r
-                       left ^= (work << 16);\r
-                       work = ((right >>> 2) ^ left) & 0x33333333;\r
-                       left ^= work;\r
-                       right ^= (work << 2);\r
-                       work = ((right >>> 8) ^ left) & 0x00ff00ff;\r
-                       left ^= work;\r
-                       right ^= (work << 8);\r
-                       right = ((right << 1) | ((right >>> 31) & 1)) & 0xffffffff;\r
-                       work = (left ^ right) & 0xaaaaaaaa;\r
-                       left ^= work;\r
-                       right ^= work;\r
-                       left = ((left << 1) | ((left >>> 31) & 1)) & 0xffffffff;\r
-\r
-                       for (var round:uint = 0; round < 8; round++)\r
-                       {\r
-                               var fval:uint;\r
-       \r
-                               work = (right << 28) | (right >>> 4);\r
-                               work ^= wKey[round * 4 + 0];\r
-                               fval = SP7[work & 0x3f];\r
-                               fval |= SP5[(work >>> 8) & 0x3f];\r
-                               fval |= SP3[(work >>> 16) & 0x3f];\r
-                               fval |= SP1[(work >>> 24) & 0x3f];\r
-                               work = right ^ wKey[round * 4 + 1];\r
-                               fval |= SP8[work & 0x3f];\r
-                               fval |= SP6[(work >>> 8) & 0x3f];\r
-                               fval |= SP4[(work >>> 16) & 0x3f];\r
-                               fval |= SP2[(work >>> 24) & 0x3f];\r
-                               left ^= fval;\r
-                               work = (left << 28) | (left >>> 4);\r
-                               work ^= wKey[round * 4 + 2];\r
-                               fval = SP7[work & 0x3f];\r
-                               fval |= SP5[(work >>> 8) & 0x3f];\r
-                               fval |= SP3[(work >>> 16) & 0x3f];\r
-                               fval |= SP1[(work >>> 24) & 0x3f];\r
-                               work = left ^ wKey[round * 4 + 3];\r
-                               fval |= SP8[work & 0x3f];\r
-                               fval |= SP6[(work >>> 8) & 0x3f];\r
-                               fval |= SP4[(work >>> 16) & 0x3f];\r
-                               fval |= SP2[(work >>> 24) & 0x3f];\r
-                               right ^= fval;\r
-                       }\r
-       \r
-                       right = (right << 31) | (right >>> 1);\r
-                       work = (left ^ right) & 0xaaaaaaaa;\r
-                       left ^= work;\r
-                       right ^= work;\r
-                       left = (left << 31) | (left >>> 1);\r
-                       work = ((left >>> 8) ^ right) & 0x00ff00ff;\r
-                       right ^= work;\r
-                       left ^= (work << 8);\r
-                       work = ((left >>> 2) ^ right) & 0x33333333;\r
-                       right ^= work;\r
-                       left ^= (work << 2);\r
-                       work = ((right >>> 16) ^ left) & 0x0000ffff;\r
-                       left ^= work;\r
-                       right ^= (work << 16);\r
-                       work = ((right >>> 4) ^ left) & 0x0f0f0f0f;\r
-                       left ^= work;\r
-                       right ^= (work << 4);\r
-       \r
-                       out[outOff + 0] = ((right >>> 24) & 0xff);\r
-                       out[outOff + 1] = ((right >>> 16) & 0xff);\r
-                       out[outOff + 2] = ((right >>> 8) & 0xff);\r
-                       out[outOff + 3] = (right & 0xff);\r
-                       out[outOff + 4] = ((left >>> 24) & 0xff);\r
-                       out[outOff + 5] = ((left >>> 16) & 0xff);\r
-                       out[outOff + 6] = ((left >>> 8) & 0xff);\r
-                       out[outOff + 7] = (left & 0xff);\r
-               }\r
-               \r
-               \r
-               public function toString():String {\r
-                       return "des";\r
-               }\r
-               \r
-               \r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ECBMode.as
deleted file mode 100644 (file)
index b2a7b77..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/**\r
- * ECBMode\r
- * \r
- * An ActionScript 3 implementation of the ECB confidentiality mode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Memory;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       /**\r
-        * ECB mode.\r
-        * This uses a padding and a symmetric key.\r
-        * If no padding is given, PKCS#5 is used.\r
-        */\r
-       public class ECBMode implements IMode, ICipher\r
-       {\r
-               private var key:ISymmetricKey;\r
-               private var padding:IPad;\r
-               \r
-               public function ECBMode(key:ISymmetricKey, padding:IPad = null) {\r
-                       this.key = key;\r
-                       if (padding == null) {\r
-                               padding = new PKCS5(key.getBlockSize());\r
-                       } else {\r
-                               padding.setBlockSize(key.getBlockSize());\r
-                       }\r
-                       this.padding = padding;\r
-               }\r
-               \r
-               public function getBlockSize():uint {\r
-                       return key.getBlockSize();\r
-               }\r
-               \r
-               public function encrypt(src:ByteArray):void {\r
-                       padding.pad(src);\r
-                       src.position = 0;\r
-                       var blockSize:uint = key.getBlockSize();\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       var dst:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<src.length;i+=blockSize) {\r
-                               tmp.length=0;\r
-                               src.readBytes(tmp, 0, blockSize);\r
-                               key.encrypt(tmp);\r
-                               dst.writeBytes(tmp);\r
-                       }\r
-                       src.length=0;\r
-                       src.writeBytes(dst);\r
-               }\r
-               public function decrypt(src:ByteArray):void {\r
-                       src.position = 0;\r
-                       var blockSize:uint = key.getBlockSize();\r
-                       \r
-                       // sanity check.\r
-                       if (src.length%blockSize!=0) {\r
-                               throw new Error("ECB mode cipher length must be a multiple of blocksize "+blockSize);\r
-                       }\r
-                       \r
-                       var tmp:ByteArray = new ByteArray;\r
-                       var dst:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<src.length;i+=blockSize) {\r
-                               tmp.length=0;\r
-                               src.readBytes(tmp, 0, blockSize);\r
-                               \r
-                               key.decrypt(tmp);\r
-                               dst.writeBytes(tmp);\r
-                       }\r
-                       padding.unpad(dst);\r
-                       src.length=0;\r
-                       src.writeBytes(dst);\r
-               }\r
-               public function dispose():void {\r
-                       key.dispose();\r
-                       key = null;\r
-                       padding = null;\r
-                       Memory.gc();\r
-               }\r
-               public function toString():String {\r
-                       return key.toString()+"-ecb";\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ICipher.as
deleted file mode 100644 (file)
index 328c024..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/**\r
- * ICipher\r
- * \r
- * A generic interface to use symmetric ciphers\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public interface ICipher\r
-       {\r
-               function getBlockSize():uint;\r
-               function encrypt(src:ByteArray):void;\r
-               function decrypt(src:ByteArray):void;\r
-               function dispose():void;\r
-               function toString():String;\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IMode.as
deleted file mode 100644 (file)
index 8a99b06..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/**\r
- * IMode\r
- * \r
- * An interface for confidentiality modes to implement\r
- * This could become deprecated at some point.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric \r
-{\r
-       public interface IMode extends ICipher\r
-       {\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IPad.as
deleted file mode 100644 (file)
index c686e26..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/**\r
- * IPad\r
- * \r
- * An interface for padding mechanisms to implement.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       /**\r
-        * Tiny interface that represents a padding mechanism.\r
-        */\r
-       public interface IPad\r
-       {\r
-               /**\r
-                * Add padding to the array\r
-                */\r
-               function pad(a:ByteArray):void;\r
-               /**\r
-                * Remove padding from the array.\r
-                * @throws Error if the padding is invalid.\r
-                */\r
-               function unpad(a:ByteArray):void;\r
-               /**\r
-                * Set the blockSize to work on\r
-                */\r
-               function setBlockSize(bs:uint):void;\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IStreamCipher.as
deleted file mode 100644 (file)
index fbcbf24..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/**\r
- * IStreamCipher\r
- * \r
- * A "marker" interface for stream ciphers.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric {\r
-       \r
-       /**\r
-        * A marker to indicate how this cipher works.\r
-        * A stream cipher:\r
-        * - does not use initialization vector\r
-        * - keeps some internal state between calls to encrypt() and decrypt()\r
-        * \r
-        */\r
-       public interface IStreamCipher extends ICipher {\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/ISymmetricKey.as
deleted file mode 100644 (file)
index 1699db5..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/**\r
- * ISymmetricKey\r
- * \r
- * An interface for symmetric encryption keys to implement.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public interface ISymmetricKey\r
-       {\r
-               /**\r
-                * Returns the block size used by this particular encryption algorithm\r
-                */\r
-               function getBlockSize():uint;\r
-               /**\r
-                * Encrypt one block of data in "block", starting at "index", of length "getBlockSize()"\r
-                */\r
-               function encrypt(block:ByteArray, index:uint=0):void;\r
-               /**\r
-                * Decrypt one block of data in "block", starting at "index", of length "getBlockSize()"\r
-                */\r
-               function decrypt(block:ByteArray, index:uint=0):void;\r
-               /**\r
-                * Attempts to destroy sensitive information from memory, such as encryption keys.\r
-                * Note: This is not guaranteed to work given the Flash sandbox model.\r
-                */\r
-               function dispose():void;\r
-               \r
-               function toString():String;\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/IVMode.as
deleted file mode 100644 (file)
index 100041a..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/**\r
- * IVMode\r
- * \r
- * An abstract class for confidentialy modes that rely on an initialization vector.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import com.hurlant.crypto.prng.Random;\r
-       import com.hurlant.crypto.tests.TestCase;\r
-       import com.hurlant.util.Memory;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       /**\r
-        * An "abtract" class to avoid redundant code in subclasses\r
-        */\r
-       public class IVMode\r
-       {\r
-               protected var key:ISymmetricKey;\r
-               protected var padding:IPad;\r
-               // random generator used to generate IVs\r
-               protected var prng:Random;\r
-               // optional static IV. used for testing only.\r
-               protected var iv:ByteArray;\r
-               // generated IV is stored here.\r
-               protected var lastIV:ByteArray;\r
-               protected var blockSize:uint;\r
-               \r
-               \r
-               public function IVMode(key:ISymmetricKey, padding:IPad = null) {\r
-                       this.key = key;\r
-                       blockSize = key.getBlockSize();\r
-                       if (padding == null) {\r
-                               padding = new PKCS5(blockSize);\r
-                       } else {\r
-                               padding.setBlockSize(blockSize);\r
-                       }\r
-                       this.padding = padding;\r
-                       \r
-                       prng = new Random;\r
-                       iv = null;\r
-                       lastIV = new ByteArray;\r
-               }\r
-               \r
-               public function getBlockSize():uint {\r
-                       return key.getBlockSize();\r
-               }\r
-               public function dispose():void {\r
-                       var i:uint;\r
-                       if (iv != null) {\r
-                               for (i=0;i<iv.length;i++) {\r
-                                       iv[i] = prng.nextByte();\r
-                               }\r
-                               iv.length=0;\r
-                               iv = null;\r
-                       }\r
-                       if (lastIV != null) {\r
-                               for (i=0;i<iv.length;i++) {\r
-                                       lastIV[i] = prng.nextByte();\r
-                               }\r
-                               lastIV.length=0;\r
-                               lastIV=null;\r
-                       }\r
-                       key.dispose();\r
-                       key = null;\r
-                       padding = null;\r
-                       prng.dispose();\r
-                       prng = null;\r
-                       Memory.gc();\r
-               }\r
-               /**\r
-                * Optional function to force the IV value.\r
-                * Normally, an IV gets generated randomly at every encrypt() call.\r
-                * Also, use this to set the IV before calling decrypt()\r
-                * (if not set before decrypt(), the IV is read from the beginning of the stream.)\r
-                */\r
-               public function set IV(value:ByteArray):void {\r
-                       iv = value;\r
-                       lastIV.length=0;\r
-                       lastIV.writeBytes(iv);\r
-               }\r
-               public function get IV():ByteArray {\r
-                       return lastIV;\r
-               }\r
-               \r
-               protected function getIV4e():ByteArray {\r
-                       var vec:ByteArray = new ByteArray;\r
-                       if (iv) {\r
-                               vec.writeBytes(iv);\r
-                       } else {\r
-                               prng.nextBytes(vec, blockSize);\r
-                       }\r
-                       lastIV.length=0;\r
-                       lastIV.writeBytes(vec);\r
-                       return vec;\r
-               }\r
-               protected function getIV4d():ByteArray {\r
-                       var vec:ByteArray = new ByteArray;\r
-                       if (iv) {\r
-                               vec.writeBytes(iv);\r
-                       } else {\r
-                               throw new Error("an IV must be set before calling decrypt()");\r
-                       }\r
-                       return vec;\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/NullPad.as
deleted file mode 100644 (file)
index 25f8c04..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/**\r
- * NullPad\r
- * \r
- * A padding class that doesn't pad.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-\r
-       /**\r
-        * A pad that does nothing.\r
-        * Useful when you don't want padding in your Mode.\r
-        */\r
-       public class NullPad implements IPad\r
-       {\r
-               public function unpad(a:ByteArray):void\r
-               {\r
-                       return;\r
-               }\r
-               \r
-               public function pad(a:ByteArray):void\r
-               {\r
-                       return;\r
-               }\r
-\r
-               public function setBlockSize(bs:uint):void {\r
-                       return;\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/OFBMode.as
deleted file mode 100644 (file)
index 8b41736..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/**\r
- * OFBMode\r
- * \r
- * An ActionScript 3 implementation of the OFB confidentiality mode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-\r
-       public class OFBMode extends IVMode implements IMode\r
-       {\r
-               public function OFBMode(key:ISymmetricKey, padding:IPad=null)\r
-               {\r
-                       super(key, null);\r
-               }\r
-               \r
-               public function encrypt(src:ByteArray):void\r
-               {\r
-                       var vector:ByteArray = getIV4e();\r
-                       core(src, vector);\r
-               }\r
-               \r
-               public function decrypt(src:ByteArray):void\r
-               {\r
-                       var vector:ByteArray = getIV4d();\r
-                       core(src, vector);\r
-               }\r
-               \r
-               private function core(src:ByteArray, iv:ByteArray):void { \r
-                       var l:uint = src.length;\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<src.length;i+=blockSize) {\r
-                               key.encrypt(iv);\r
-                               tmp.position=0;\r
-                               tmp.writeBytes(iv);\r
-                               var chunk:uint = (i+blockSize<l)?blockSize:l-i;\r
-                               for (var j:uint=0;j<chunk;j++) {\r
-                                       src[i+j] ^= iv[j];\r
-                               }\r
-                               iv.position=0;\r
-                               iv.writeBytes(tmp);\r
-                       }\r
-               }\r
-               public function toString():String {\r
-                       return key.toString()+"-ofb";\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/PKCS5.as
deleted file mode 100644 (file)
index 598daa0..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/**\r
- * PKCS5\r
- * \r
- * A padding implementation of PKCS5.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class PKCS5 implements IPad\r
-       {\r
-               private var blockSize:uint;\r
-               \r
-               public function PKCS5(blockSize:uint=0) {\r
-                       this.blockSize = blockSize;\r
-               }\r
-               \r
-               public function pad(a:ByteArray):void {\r
-                       var c:uint = blockSize-a.length%blockSize;\r
-                       for (var i:uint=0;i<c;i++){\r
-                               a[a.length] = c;\r
-                       }\r
-               }\r
-               public function unpad(a:ByteArray):void {\r
-                       var c:uint = a.length%blockSize;\r
-                       if (c!=0) throw new Error("PKCS#5::unpad: ByteArray.length isn't a multiple of the blockSize");\r
-                       c = a[a.length-1];\r
-                       for (var i:uint=c;i>0;i--) {\r
-                               var v:uint = a[a.length-1];\r
-                               a.length--;\r
-                               if (c!=v) throw new Error("PKCS#5:unpad: Invalid padding value. expected ["+c+"], found ["+v+"]");\r
-                       }\r
-                       // that is all.\r
-               }\r
-\r
-               public function setBlockSize(bs:uint):void {\r
-                       blockSize = bs;\r
-               }\r
-\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SSLPad.as
deleted file mode 100755 (executable)
index 8dd1324..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * TLSPad
- * 
- * A padding implementation used by TLS
- * Copyright (c) 2007 Henri Torgemane
- * 
- * See LICENSE.txt for full license information.
- */
-package com.hurlant.crypto.symmetric {
-       import flash.utils.ByteArray;
-       import com.hurlant.util.Hex;
-       import com.hurlant.crypto.tls.TLSError;
-       
-       public class SSLPad implements IPad {
-               private var blockSize:uint;
-               
-               public function SSLPad(blockSize:uint=0) {
-                       this.blockSize = blockSize;
-               }
-               public function pad(a:ByteArray):void {
-                       var c:uint = blockSize - (a.length+1)%blockSize;
-                       for (var i:uint=0;i<=c;i++) {
-                               a[a.length] = c;
-                       }
-                       
-               }
-               public function unpad(a:ByteArray):void {
-                       var c:uint = a.length%blockSize;
-                       if (c!=0) throw new TLSError("SSLPad::unpad: ByteArray.length isn't a multiple of the blockSize", TLSError.bad_record_mac);
-                       c = a[a.length-1];
-                       for (var i:uint=c;i>0;i--) {
-                               var v:uint = a[a.length-1];
-                               a.length--;
-                               // But LOOK! SSL 3.0 doesn't care about this, bytes are arbitrary!
-                               // if (c!=v) throw new TLSError("SSLPad:unpad: Invalid padding value. expected ["+c+"], found ["+v+"]", TLSError.bad_record_mac);
-                       }
-                       a.length--;
-                       
-               }
-               public function setBlockSize(bs:uint):void {
-                       blockSize = bs;
-               }
-       }
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/SimpleIVMode.as
deleted file mode 100644 (file)
index 590f0df..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/**\r
- * SimpleIVMode\r
- * \r
- * A convenience class that automatically places the IV\r
- * at the beginning of the encrypted stream, so it doesn't have to\r
- * be handled explicitely.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Memory;\r
-       \r
-       public class SimpleIVMode implements IMode, ICipher\r
-       {\r
-               protected var mode:IVMode;\r
-               protected var cipher:ICipher;\r
-               \r
-               public function SimpleIVMode(mode:IVMode) {\r
-                       this.mode = mode;\r
-                       cipher = mode as ICipher;\r
-               }\r
-               \r
-               public function getBlockSize():uint {\r
-                       return mode.getBlockSize();\r
-               }\r
-               \r
-               public function dispose():void {\r
-                       mode.dispose();\r
-                       mode = null;\r
-                       cipher = null;\r
-                       Memory.gc();\r
-               }\r
-               \r
-               public function encrypt(src:ByteArray):void {\r
-                       cipher.encrypt(src);\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       tmp.writeBytes(mode.IV);\r
-                       tmp.writeBytes(src);\r
-                       src.position=0;\r
-                       src.writeBytes(tmp);\r
-               }\r
-               \r
-               public function decrypt(src:ByteArray):void {\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       tmp.writeBytes(src, 0, getBlockSize());\r
-                       mode.IV = tmp;\r
-                       tmp = new ByteArray;\r
-                       tmp.writeBytes(src, getBlockSize());\r
-                       cipher.decrypt(tmp);\r
-                       src.length=0;\r
-                       src.writeBytes(tmp);\r
-               }\r
-               public function toString():String {\r
-                       return "simple-"+cipher.toString();\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TLSPad.as
deleted file mode 100644 (file)
index f3b6182..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/**\r
- * TLSPad\r
- * \r
- * A padding implementation used by TLS\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric {\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.crypto.tls.TLSError;\r
-       \r
-       public class TLSPad implements IPad {\r
-               private var blockSize:uint;\r
-               \r
-               public function TLSPad(blockSize:uint=0) {\r
-                       this.blockSize = blockSize;\r
-               }\r
-               public function pad(a:ByteArray):void {\r
-                       var c:uint = blockSize - (a.length+1)%blockSize;\r
-                       for (var i:uint=0;i<=c;i++) {\r
-                               a[a.length] = c;\r
-                       }\r
-               }\r
-               public function unpad(a:ByteArray):void {\r
-                       var c:uint = a.length%blockSize;\r
-                       if (c!=0) throw new TLSError("TLSPad::unpad: ByteArray.length isn't a multiple of the blockSize", TLSError.bad_record_mac);\r
-                       c = a[a.length-1];\r
-                       for (var i:uint=c;i>0;i--) {\r
-                               var v:uint = a[a.length-1];\r
-                               a.length--;\r
-                               if (c!=v) throw new TLSError("TLSPad:unpad: Invalid padding value. expected ["+c+"], found ["+v+"]", TLSError.bad_record_mac);\r
-                       }\r
-                       a.length--;\r
-                       // mostly ripped off from PKCS5.as, but with subtle differences\r
-               }\r
-               public function setBlockSize(bs:uint):void {\r
-                       blockSize = bs;\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/TripleDESKey.as
deleted file mode 100644 (file)
index 1e75011..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/**\r
- * TripleDESKey\r
- * \r
- * An Actionscript 3 implementation of Triple DES\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             The Bouncy Castle Crypto package, \r
- *             Copyright (c) 2000-2004 The Legion Of The Bouncy Castle\r
- *             (http://www.bouncycastle.org)\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Memory;\r
-       import com.hurlant.util.Hex;\r
-\r
-       public class TripleDESKey extends DESKey\r
-       {\r
-               protected var encKey2:Array;\r
-               protected var encKey3:Array;\r
-               protected var decKey2:Array;\r
-               protected var decKey3:Array;\r
-               \r
-               /**\r
-                * This supports 2TDES and 3TDES.\r
-                * If the key passed is 128 bits, 2TDES is used.\r
-                * If the key has 192 bits, 3TDES is used.\r
-                * Other key lengths give "undefined" results.\r
-                */\r
-               public function TripleDESKey(key:ByteArray)\r
-               {\r
-                       super(key);\r
-                       encKey2 = generateWorkingKey(false, key, 8);\r
-                       decKey2 = generateWorkingKey(true, key, 8);\r
-                       if (key.length>16) {\r
-                               encKey3 = generateWorkingKey(true, key, 16);\r
-                               decKey3 = generateWorkingKey(false, key, 16);\r
-                       } else {\r
-                               encKey3 = encKey;\r
-                               decKey3 = decKey;\r
-                       }\r
-               }\r
-\r
-               public override function dispose():void\r
-               {\r
-                       super.dispose();\r
-                       var i:uint = 0;\r
-                       if (encKey2!=null) {\r
-                               for (i=0;i<encKey2.length;i++) { encKey2[i]=0; }\r
-                               encKey2=null;\r
-                       }\r
-                       if (encKey3!=null) {\r
-                               for (i=0;i<encKey3.length;i++) { encKey3[i]=0; }\r
-                               encKey3=null;\r
-                       }\r
-                       if (decKey2!=null) {\r
-                               for (i=0;i<decKey2.length;i++) { decKey2[i]=0; }\r
-                               decKey2=null\r
-                       }\r
-                       if (decKey3!=null) {\r
-                               for (i=0;i<decKey3.length;i++) { decKey3[i]=0; }\r
-                               decKey3=null;\r
-                       }\r
-                       Memory.gc();\r
-               }\r
-               \r
-               public override function encrypt(block:ByteArray, index:uint=0):void\r
-               {\r
-                       desFunc(encKey, block,index, block,index);\r
-                       desFunc(encKey2, block,index, block,index);\r
-                       desFunc(encKey3, block,index, block,index);\r
-               }\r
-               \r
-               public override function decrypt(block:ByteArray, index:uint=0):void\r
-               {\r
-                       desFunc(decKey3, block, index, block, index);\r
-                       desFunc(decKey2, block, index, block, index);\r
-                       desFunc(decKey, block, index, block, index);\r
-               }\r
-               \r
-               public override function toString():String {\r
-                       return "3des";\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/XTeaKey.as
deleted file mode 100644 (file)
index 9d140dd..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/**\r
- * XTeaKey\r
- * \r
- * An ActionScript 3 implementation of the XTea algorithm\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.symmetric\r
-{\r
-       import com.hurlant.crypto.prng.Random;\r
-       import com.hurlant.util.Memory;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       \r
-       public class XTeaKey implements ISymmetricKey\r
-       {\r
-               public const NUM_ROUNDS:uint = 64;      \r
-               private var k:Array;\r
-\r
-               public function XTeaKey(a:ByteArray) {\r
-                       a.position=0;\r
-                       k = [a.readUnsignedInt(),a.readUnsignedInt(),a.readUnsignedInt(),a.readUnsignedInt()];\r
-               }\r
-               /**\r
-                * K is an hex string with 32 digits.\r
-                */\r
-               public static function parseKey(K:String):XTeaKey {\r
-                       var a:ByteArray = new ByteArray;\r
-                       a.writeUnsignedInt(parseInt(K.substr(0,8),16));\r
-                       a.writeUnsignedInt(parseInt(K.substr(8,8),16));\r
-                       a.writeUnsignedInt(parseInt(K.substr(16,8),16));\r
-                       a.writeUnsignedInt(parseInt(K.substr(24,8),16));\r
-                       a.position = 0;\r
-                       return new XTeaKey(a);\r
-               }\r
-               \r
-               public function getBlockSize():uint {\r
-                       return 8;\r
-               }\r
-\r
-               public function encrypt(block:ByteArray, index:uint=0):void {\r
-                       block.position = index;\r
-                       var v0:uint = block.readUnsignedInt();\r
-                       var v1:uint = block.readUnsignedInt();\r
-                       var i:uint;\r
-                       var sum:uint =0;\r
-                       var delta:uint = 0x9E3779B9;\r
-                       for (i=0; i<NUM_ROUNDS; i++) {\r
-                               v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);\r
-                               sum += delta;\r
-                       v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);\r
-                       }\r
-                       block.position-=8;\r
-                       block.writeUnsignedInt(v0);\r
-                       block.writeUnsignedInt(v1);\r
-               }\r
-               \r
-               public function decrypt(block:ByteArray, index:uint=0):void {\r
-                       block.position = index;\r
-                       var v0:uint = block.readUnsignedInt();\r
-                       var v1:uint = block.readUnsignedInt();\r
-                       var i:uint;\r
-                       var delta:uint = 0x9E3779B9;\r
-                       var sum:uint = delta*NUM_ROUNDS;\r
-                       for (i=0; i<NUM_ROUNDS; i++) {\r
-                               v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);\r
-                               sum -= delta;\r
-                               v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);\r
-                       }\r
-                       block.position-=8;\r
-                       block.writeUnsignedInt(v0);\r
-                       block.writeUnsignedInt(v1);\r
-               }\r
-\r
-               public function dispose():void {\r
-                       //private var k:Array;\r
-                       var r:Random = new Random;\r
-                       for (var i:uint=0;i<k.length;i++) {\r
-                               k[i] = r.nextByte();\r
-                               delete k[i];\r
-                       }\r
-                       k = null;\r
-                       Memory.gc();\r
-               }\r
-\r
-               public function toString():String {\r
-                       return "xtea";\r
-               }\r
-       }\r
-       \r
-\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/aeskey.pl
deleted file mode 100644 (file)
index b8f58fd..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/perl 
-use strict;
-use warnings;
-
-sub say {
-    my $w = shift;
-    print $w;
-    print "\n";
-}
-
-sub dump {
-   my $i = shift;
-   &say(sprintf("Sbox[%d] = _Sbox[%d]", $i, $i));
-   &say(sprintf("InvSbox[%d] = _InvSbox[%d]", $i, $i));
-   &say(sprintf("Xtime2Sbox[%d] = _Xtime2Sbox[%d]", $i, $i));
-   &say(sprintf("Xtime3Sbox[%d] = _Xtime3Sbox[%d]", $i, $i));
-   &say(sprintf("Xtime2[%d] = _Xtime2[%d]", $i, $i));
-   &say(sprintf("Xtime9[%d] = _Xtime9[%d]", $i, $i));
-   &say(sprintf("XtimeB[%d] = _XtimeB[%d]", $i, $i));
-   &say(sprintf("XtimeD[%d] = _XtimeD[%d]", $i, $i));
-   &say(sprintf("XtimeE[%d] = _XtimeE[%d]", $i, $i));
-}
-
-for (my $i=0;$i<256;$i++) {
-    &dump($i);
-}
-
-
-
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/symmetric/dump.txt
deleted file mode 100644 (file)
index 6206701..0000000
+++ /dev/null
@@ -1,2304 +0,0 @@
-Sbox[0] = _Sbox[0]
-InvSbox[0] = _InvSbox[0]
-Xtime2Sbox[0] = _Xtime2Sbox[0]
-Xtime3Sbox[0] = _Xtime3Sbox[0]
-Xtime2[0] = _Xtime2[0]
-Xtime9[0] = _Xtime9[0]
-XtimeB[0] = _XtimeB[0]
-XtimeD[0] = _XtimeD[0]
-XtimeE[0] = _XtimeE[0]
-Sbox[1] = _Sbox[1]
-InvSbox[1] = _InvSbox[1]
-Xtime2Sbox[1] = _Xtime2Sbox[1]
-Xtime3Sbox[1] = _Xtime3Sbox[1]
-Xtime2[1] = _Xtime2[1]
-Xtime9[1] = _Xtime9[1]
-XtimeB[1] = _XtimeB[1]
-XtimeD[1] = _XtimeD[1]
-XtimeE[1] = _XtimeE[1]
-Sbox[2] = _Sbox[2]
-InvSbox[2] = _InvSbox[2]
-Xtime2Sbox[2] = _Xtime2Sbox[2]
-Xtime3Sbox[2] = _Xtime3Sbox[2]
-Xtime2[2] = _Xtime2[2]
-Xtime9[2] = _Xtime9[2]
-XtimeB[2] = _XtimeB[2]
-XtimeD[2] = _XtimeD[2]
-XtimeE[2] = _XtimeE[2]
-Sbox[3] = _Sbox[3]
-InvSbox[3] = _InvSbox[3]
-Xtime2Sbox[3] = _Xtime2Sbox[3]
-Xtime3Sbox[3] = _Xtime3Sbox[3]
-Xtime2[3] = _Xtime2[3]
-Xtime9[3] = _Xtime9[3]
-XtimeB[3] = _XtimeB[3]
-XtimeD[3] = _XtimeD[3]
-XtimeE[3] = _XtimeE[3]
-Sbox[4] = _Sbox[4]
-InvSbox[4] = _InvSbox[4]
-Xtime2Sbox[4] = _Xtime2Sbox[4]
-Xtime3Sbox[4] = _Xtime3Sbox[4]
-Xtime2[4] = _Xtime2[4]
-Xtime9[4] = _Xtime9[4]
-XtimeB[4] = _XtimeB[4]
-XtimeD[4] = _XtimeD[4]
-XtimeE[4] = _XtimeE[4]
-Sbox[5] = _Sbox[5]
-InvSbox[5] = _InvSbox[5]
-Xtime2Sbox[5] = _Xtime2Sbox[5]
-Xtime3Sbox[5] = _Xtime3Sbox[5]
-Xtime2[5] = _Xtime2[5]
-Xtime9[5] = _Xtime9[5]
-XtimeB[5] = _XtimeB[5]
-XtimeD[5] = _XtimeD[5]
-XtimeE[5] = _XtimeE[5]
-Sbox[6] = _Sbox[6]
-InvSbox[6] = _InvSbox[6]
-Xtime2Sbox[6] = _Xtime2Sbox[6]
-Xtime3Sbox[6] = _Xtime3Sbox[6]
-Xtime2[6] = _Xtime2[6]
-Xtime9[6] = _Xtime9[6]
-XtimeB[6] = _XtimeB[6]
-XtimeD[6] = _XtimeD[6]
-XtimeE[6] = _XtimeE[6]
-Sbox[7] = _Sbox[7]
-InvSbox[7] = _InvSbox[7]
-Xtime2Sbox[7] = _Xtime2Sbox[7]
-Xtime3Sbox[7] = _Xtime3Sbox[7]
-Xtime2[7] = _Xtime2[7]
-Xtime9[7] = _Xtime9[7]
-XtimeB[7] = _XtimeB[7]
-XtimeD[7] = _XtimeD[7]
-XtimeE[7] = _XtimeE[7]
-Sbox[8] = _Sbox[8]
-InvSbox[8] = _InvSbox[8]
-Xtime2Sbox[8] = _Xtime2Sbox[8]
-Xtime3Sbox[8] = _Xtime3Sbox[8]
-Xtime2[8] = _Xtime2[8]
-Xtime9[8] = _Xtime9[8]
-XtimeB[8] = _XtimeB[8]
-XtimeD[8] = _XtimeD[8]
-XtimeE[8] = _XtimeE[8]
-Sbox[9] = _Sbox[9]
-InvSbox[9] = _InvSbox[9]
-Xtime2Sbox[9] = _Xtime2Sbox[9]
-Xtime3Sbox[9] = _Xtime3Sbox[9]
-Xtime2[9] = _Xtime2[9]
-Xtime9[9] = _Xtime9[9]
-XtimeB[9] = _XtimeB[9]
-XtimeD[9] = _XtimeD[9]
-XtimeE[9] = _XtimeE[9]
-Sbox[10] = _Sbox[10]
-InvSbox[10] = _InvSbox[10]
-Xtime2Sbox[10] = _Xtime2Sbox[10]
-Xtime3Sbox[10] = _Xtime3Sbox[10]
-Xtime2[10] = _Xtime2[10]
-Xtime9[10] = _Xtime9[10]
-XtimeB[10] = _XtimeB[10]
-XtimeD[10] = _XtimeD[10]
-XtimeE[10] = _XtimeE[10]
-Sbox[11] = _Sbox[11]
-InvSbox[11] = _InvSbox[11]
-Xtime2Sbox[11] = _Xtime2Sbox[11]
-Xtime3Sbox[11] = _Xtime3Sbox[11]
-Xtime2[11] = _Xtime2[11]
-Xtime9[11] = _Xtime9[11]
-XtimeB[11] = _XtimeB[11]
-XtimeD[11] = _XtimeD[11]
-XtimeE[11] = _XtimeE[11]
-Sbox[12] = _Sbox[12]
-InvSbox[12] = _InvSbox[12]
-Xtime2Sbox[12] = _Xtime2Sbox[12]
-Xtime3Sbox[12] = _Xtime3Sbox[12]
-Xtime2[12] = _Xtime2[12]
-Xtime9[12] = _Xtime9[12]
-XtimeB[12] = _XtimeB[12]
-XtimeD[12] = _XtimeD[12]
-XtimeE[12] = _XtimeE[12]
-Sbox[13] = _Sbox[13]
-InvSbox[13] = _InvSbox[13]
-Xtime2Sbox[13] = _Xtime2Sbox[13]
-Xtime3Sbox[13] = _Xtime3Sbox[13]
-Xtime2[13] = _Xtime2[13]
-Xtime9[13] = _Xtime9[13]
-XtimeB[13] = _XtimeB[13]
-XtimeD[13] = _XtimeD[13]
-XtimeE[13] = _XtimeE[13]
-Sbox[14] = _Sbox[14]
-InvSbox[14] = _InvSbox[14]
-Xtime2Sbox[14] = _Xtime2Sbox[14]
-Xtime3Sbox[14] = _Xtime3Sbox[14]
-Xtime2[14] = _Xtime2[14]
-Xtime9[14] = _Xtime9[14]
-XtimeB[14] = _XtimeB[14]
-XtimeD[14] = _XtimeD[14]
-XtimeE[14] = _XtimeE[14]
-Sbox[15] = _Sbox[15]
-InvSbox[15] = _InvSbox[15]
-Xtime2Sbox[15] = _Xtime2Sbox[15]
-Xtime3Sbox[15] = _Xtime3Sbox[15]
-Xtime2[15] = _Xtime2[15]
-Xtime9[15] = _Xtime9[15]
-XtimeB[15] = _XtimeB[15]
-XtimeD[15] = _XtimeD[15]
-XtimeE[15] = _XtimeE[15]
-Sbox[16] = _Sbox[16]
-InvSbox[16] = _InvSbox[16]
-Xtime2Sbox[16] = _Xtime2Sbox[16]
-Xtime3Sbox[16] = _Xtime3Sbox[16]
-Xtime2[16] = _Xtime2[16]
-Xtime9[16] = _Xtime9[16]
-XtimeB[16] = _XtimeB[16]
-XtimeD[16] = _XtimeD[16]
-XtimeE[16] = _XtimeE[16]
-Sbox[17] = _Sbox[17]
-InvSbox[17] = _InvSbox[17]
-Xtime2Sbox[17] = _Xtime2Sbox[17]
-Xtime3Sbox[17] = _Xtime3Sbox[17]
-Xtime2[17] = _Xtime2[17]
-Xtime9[17] = _Xtime9[17]
-XtimeB[17] = _XtimeB[17]
-XtimeD[17] = _XtimeD[17]
-XtimeE[17] = _XtimeE[17]
-Sbox[18] = _Sbox[18]
-InvSbox[18] = _InvSbox[18]
-Xtime2Sbox[18] = _Xtime2Sbox[18]
-Xtime3Sbox[18] = _Xtime3Sbox[18]
-Xtime2[18] = _Xtime2[18]
-Xtime9[18] = _Xtime9[18]
-XtimeB[18] = _XtimeB[18]
-XtimeD[18] = _XtimeD[18]
-XtimeE[18] = _XtimeE[18]
-Sbox[19] = _Sbox[19]
-InvSbox[19] = _InvSbox[19]
-Xtime2Sbox[19] = _Xtime2Sbox[19]
-Xtime3Sbox[19] = _Xtime3Sbox[19]
-Xtime2[19] = _Xtime2[19]
-Xtime9[19] = _Xtime9[19]
-XtimeB[19] = _XtimeB[19]
-XtimeD[19] = _XtimeD[19]
-XtimeE[19] = _XtimeE[19]
-Sbox[20] = _Sbox[20]
-InvSbox[20] = _InvSbox[20]
-Xtime2Sbox[20] = _Xtime2Sbox[20]
-Xtime3Sbox[20] = _Xtime3Sbox[20]
-Xtime2[20] = _Xtime2[20]
-Xtime9[20] = _Xtime9[20]
-XtimeB[20] = _XtimeB[20]
-XtimeD[20] = _XtimeD[20]
-XtimeE[20] = _XtimeE[20]
-Sbox[21] = _Sbox[21]
-InvSbox[21] = _InvSbox[21]
-Xtime2Sbox[21] = _Xtime2Sbox[21]
-Xtime3Sbox[21] = _Xtime3Sbox[21]
-Xtime2[21] = _Xtime2[21]
-Xtime9[21] = _Xtime9[21]
-XtimeB[21] = _XtimeB[21]
-XtimeD[21] = _XtimeD[21]
-XtimeE[21] = _XtimeE[21]
-Sbox[22] = _Sbox[22]
-InvSbox[22] = _InvSbox[22]
-Xtime2Sbox[22] = _Xtime2Sbox[22]
-Xtime3Sbox[22] = _Xtime3Sbox[22]
-Xtime2[22] = _Xtime2[22]
-Xtime9[22] = _Xtime9[22]
-XtimeB[22] = _XtimeB[22]
-XtimeD[22] = _XtimeD[22]
-XtimeE[22] = _XtimeE[22]
-Sbox[23] = _Sbox[23]
-InvSbox[23] = _InvSbox[23]
-Xtime2Sbox[23] = _Xtime2Sbox[23]
-Xtime3Sbox[23] = _Xtime3Sbox[23]
-Xtime2[23] = _Xtime2[23]
-Xtime9[23] = _Xtime9[23]
-XtimeB[23] = _XtimeB[23]
-XtimeD[23] = _XtimeD[23]
-XtimeE[23] = _XtimeE[23]
-Sbox[24] = _Sbox[24]
-InvSbox[24] = _InvSbox[24]
-Xtime2Sbox[24] = _Xtime2Sbox[24]
-Xtime3Sbox[24] = _Xtime3Sbox[24]
-Xtime2[24] = _Xtime2[24]
-Xtime9[24] = _Xtime9[24]
-XtimeB[24] = _XtimeB[24]
-XtimeD[24] = _XtimeD[24]
-XtimeE[24] = _XtimeE[24]
-Sbox[25] = _Sbox[25]
-InvSbox[25] = _InvSbox[25]
-Xtime2Sbox[25] = _Xtime2Sbox[25]
-Xtime3Sbox[25] = _Xtime3Sbox[25]
-Xtime2[25] = _Xtime2[25]
-Xtime9[25] = _Xtime9[25]
-XtimeB[25] = _XtimeB[25]
-XtimeD[25] = _XtimeD[25]
-XtimeE[25] = _XtimeE[25]
-Sbox[26] = _Sbox[26]
-InvSbox[26] = _InvSbox[26]
-Xtime2Sbox[26] = _Xtime2Sbox[26]
-Xtime3Sbox[26] = _Xtime3Sbox[26]
-Xtime2[26] = _Xtime2[26]
-Xtime9[26] = _Xtime9[26]
-XtimeB[26] = _XtimeB[26]
-XtimeD[26] = _XtimeD[26]
-XtimeE[26] = _XtimeE[26]
-Sbox[27] = _Sbox[27]
-InvSbox[27] = _InvSbox[27]
-Xtime2Sbox[27] = _Xtime2Sbox[27]
-Xtime3Sbox[27] = _Xtime3Sbox[27]
-Xtime2[27] = _Xtime2[27]
-Xtime9[27] = _Xtime9[27]
-XtimeB[27] = _XtimeB[27]
-XtimeD[27] = _XtimeD[27]
-XtimeE[27] = _XtimeE[27]
-Sbox[28] = _Sbox[28]
-InvSbox[28] = _InvSbox[28]
-Xtime2Sbox[28] = _Xtime2Sbox[28]
-Xtime3Sbox[28] = _Xtime3Sbox[28]
-Xtime2[28] = _Xtime2[28]
-Xtime9[28] = _Xtime9[28]
-XtimeB[28] = _XtimeB[28]
-XtimeD[28] = _XtimeD[28]
-XtimeE[28] = _XtimeE[28]
-Sbox[29] = _Sbox[29]
-InvSbox[29] = _InvSbox[29]
-Xtime2Sbox[29] = _Xtime2Sbox[29]
-Xtime3Sbox[29] = _Xtime3Sbox[29]
-Xtime2[29] = _Xtime2[29]
-Xtime9[29] = _Xtime9[29]
-XtimeB[29] = _XtimeB[29]
-XtimeD[29] = _XtimeD[29]
-XtimeE[29] = _XtimeE[29]
-Sbox[30] = _Sbox[30]
-InvSbox[30] = _InvSbox[30]
-Xtime2Sbox[30] = _Xtime2Sbox[30]
-Xtime3Sbox[30] = _Xtime3Sbox[30]
-Xtime2[30] = _Xtime2[30]
-Xtime9[30] = _Xtime9[30]
-XtimeB[30] = _XtimeB[30]
-XtimeD[30] = _XtimeD[30]
-XtimeE[30] = _XtimeE[30]
-Sbox[31] = _Sbox[31]
-InvSbox[31] = _InvSbox[31]
-Xtime2Sbox[31] = _Xtime2Sbox[31]
-Xtime3Sbox[31] = _Xtime3Sbox[31]
-Xtime2[31] = _Xtime2[31]
-Xtime9[31] = _Xtime9[31]
-XtimeB[31] = _XtimeB[31]
-XtimeD[31] = _XtimeD[31]
-XtimeE[31] = _XtimeE[31]
-Sbox[32] = _Sbox[32]
-InvSbox[32] = _InvSbox[32]
-Xtime2Sbox[32] = _Xtime2Sbox[32]
-Xtime3Sbox[32] = _Xtime3Sbox[32]
-Xtime2[32] = _Xtime2[32]
-Xtime9[32] = _Xtime9[32]
-XtimeB[32] = _XtimeB[32]
-XtimeD[32] = _XtimeD[32]
-XtimeE[32] = _XtimeE[32]
-Sbox[33] = _Sbox[33]
-InvSbox[33] = _InvSbox[33]
-Xtime2Sbox[33] = _Xtime2Sbox[33]
-Xtime3Sbox[33] = _Xtime3Sbox[33]
-Xtime2[33] = _Xtime2[33]
-Xtime9[33] = _Xtime9[33]
-XtimeB[33] = _XtimeB[33]
-XtimeD[33] = _XtimeD[33]
-XtimeE[33] = _XtimeE[33]
-Sbox[34] = _Sbox[34]
-InvSbox[34] = _InvSbox[34]
-Xtime2Sbox[34] = _Xtime2Sbox[34]
-Xtime3Sbox[34] = _Xtime3Sbox[34]
-Xtime2[34] = _Xtime2[34]
-Xtime9[34] = _Xtime9[34]
-XtimeB[34] = _XtimeB[34]
-XtimeD[34] = _XtimeD[34]
-XtimeE[34] = _XtimeE[34]
-Sbox[35] = _Sbox[35]
-InvSbox[35] = _InvSbox[35]
-Xtime2Sbox[35] = _Xtime2Sbox[35]
-Xtime3Sbox[35] = _Xtime3Sbox[35]
-Xtime2[35] = _Xtime2[35]
-Xtime9[35] = _Xtime9[35]
-XtimeB[35] = _XtimeB[35]
-XtimeD[35] = _XtimeD[35]
-XtimeE[35] = _XtimeE[35]
-Sbox[36] = _Sbox[36]
-InvSbox[36] = _InvSbox[36]
-Xtime2Sbox[36] = _Xtime2Sbox[36]
-Xtime3Sbox[36] = _Xtime3Sbox[36]
-Xtime2[36] = _Xtime2[36]
-Xtime9[36] = _Xtime9[36]
-XtimeB[36] = _XtimeB[36]
-XtimeD[36] = _XtimeD[36]
-XtimeE[36] = _XtimeE[36]
-Sbox[37] = _Sbox[37]
-InvSbox[37] = _InvSbox[37]
-Xtime2Sbox[37] = _Xtime2Sbox[37]
-Xtime3Sbox[37] = _Xtime3Sbox[37]
-Xtime2[37] = _Xtime2[37]
-Xtime9[37] = _Xtime9[37]
-XtimeB[37] = _XtimeB[37]
-XtimeD[37] = _XtimeD[37]
-XtimeE[37] = _XtimeE[37]
-Sbox[38] = _Sbox[38]
-InvSbox[38] = _InvSbox[38]
-Xtime2Sbox[38] = _Xtime2Sbox[38]
-Xtime3Sbox[38] = _Xtime3Sbox[38]
-Xtime2[38] = _Xtime2[38]
-Xtime9[38] = _Xtime9[38]
-XtimeB[38] = _XtimeB[38]
-XtimeD[38] = _XtimeD[38]
-XtimeE[38] = _XtimeE[38]
-Sbox[39] = _Sbox[39]
-InvSbox[39] = _InvSbox[39]
-Xtime2Sbox[39] = _Xtime2Sbox[39]
-Xtime3Sbox[39] = _Xtime3Sbox[39]
-Xtime2[39] = _Xtime2[39]
-Xtime9[39] = _Xtime9[39]
-XtimeB[39] = _XtimeB[39]
-XtimeD[39] = _XtimeD[39]
-XtimeE[39] = _XtimeE[39]
-Sbox[40] = _Sbox[40]
-InvSbox[40] = _InvSbox[40]
-Xtime2Sbox[40] = _Xtime2Sbox[40]
-Xtime3Sbox[40] = _Xtime3Sbox[40]
-Xtime2[40] = _Xtime2[40]
-Xtime9[40] = _Xtime9[40]
-XtimeB[40] = _XtimeB[40]
-XtimeD[40] = _XtimeD[40]
-XtimeE[40] = _XtimeE[40]
-Sbox[41] = _Sbox[41]
-InvSbox[41] = _InvSbox[41]
-Xtime2Sbox[41] = _Xtime2Sbox[41]
-Xtime3Sbox[41] = _Xtime3Sbox[41]
-Xtime2[41] = _Xtime2[41]
-Xtime9[41] = _Xtime9[41]
-XtimeB[41] = _XtimeB[41]
-XtimeD[41] = _XtimeD[41]
-XtimeE[41] = _XtimeE[41]
-Sbox[42] = _Sbox[42]
-InvSbox[42] = _InvSbox[42]
-Xtime2Sbox[42] = _Xtime2Sbox[42]
-Xtime3Sbox[42] = _Xtime3Sbox[42]
-Xtime2[42] = _Xtime2[42]
-Xtime9[42] = _Xtime9[42]
-XtimeB[42] = _XtimeB[42]
-XtimeD[42] = _XtimeD[42]
-XtimeE[42] = _XtimeE[42]
-Sbox[43] = _Sbox[43]
-InvSbox[43] = _InvSbox[43]
-Xtime2Sbox[43] = _Xtime2Sbox[43]
-Xtime3Sbox[43] = _Xtime3Sbox[43]
-Xtime2[43] = _Xtime2[43]
-Xtime9[43] = _Xtime9[43]
-XtimeB[43] = _XtimeB[43]
-XtimeD[43] = _XtimeD[43]
-XtimeE[43] = _XtimeE[43]
-Sbox[44] = _Sbox[44]
-InvSbox[44] = _InvSbox[44]
-Xtime2Sbox[44] = _Xtime2Sbox[44]
-Xtime3Sbox[44] = _Xtime3Sbox[44]
-Xtime2[44] = _Xtime2[44]
-Xtime9[44] = _Xtime9[44]
-XtimeB[44] = _XtimeB[44]
-XtimeD[44] = _XtimeD[44]
-XtimeE[44] = _XtimeE[44]
-Sbox[45] = _Sbox[45]
-InvSbox[45] = _InvSbox[45]
-Xtime2Sbox[45] = _Xtime2Sbox[45]
-Xtime3Sbox[45] = _Xtime3Sbox[45]
-Xtime2[45] = _Xtime2[45]
-Xtime9[45] = _Xtime9[45]
-XtimeB[45] = _XtimeB[45]
-XtimeD[45] = _XtimeD[45]
-XtimeE[45] = _XtimeE[45]
-Sbox[46] = _Sbox[46]
-InvSbox[46] = _InvSbox[46]
-Xtime2Sbox[46] = _Xtime2Sbox[46]
-Xtime3Sbox[46] = _Xtime3Sbox[46]
-Xtime2[46] = _Xtime2[46]
-Xtime9[46] = _Xtime9[46]
-XtimeB[46] = _XtimeB[46]
-XtimeD[46] = _XtimeD[46]
-XtimeE[46] = _XtimeE[46]
-Sbox[47] = _Sbox[47]
-InvSbox[47] = _InvSbox[47]
-Xtime2Sbox[47] = _Xtime2Sbox[47]
-Xtime3Sbox[47] = _Xtime3Sbox[47]
-Xtime2[47] = _Xtime2[47]
-Xtime9[47] = _Xtime9[47]
-XtimeB[47] = _XtimeB[47]
-XtimeD[47] = _XtimeD[47]
-XtimeE[47] = _XtimeE[47]
-Sbox[48] = _Sbox[48]
-InvSbox[48] = _InvSbox[48]
-Xtime2Sbox[48] = _Xtime2Sbox[48]
-Xtime3Sbox[48] = _Xtime3Sbox[48]
-Xtime2[48] = _Xtime2[48]
-Xtime9[48] = _Xtime9[48]
-XtimeB[48] = _XtimeB[48]
-XtimeD[48] = _XtimeD[48]
-XtimeE[48] = _XtimeE[48]
-Sbox[49] = _Sbox[49]
-InvSbox[49] = _InvSbox[49]
-Xtime2Sbox[49] = _Xtime2Sbox[49]
-Xtime3Sbox[49] = _Xtime3Sbox[49]
-Xtime2[49] = _Xtime2[49]
-Xtime9[49] = _Xtime9[49]
-XtimeB[49] = _XtimeB[49]
-XtimeD[49] = _XtimeD[49]
-XtimeE[49] = _XtimeE[49]
-Sbox[50] = _Sbox[50]
-InvSbox[50] = _InvSbox[50]
-Xtime2Sbox[50] = _Xtime2Sbox[50]
-Xtime3Sbox[50] = _Xtime3Sbox[50]
-Xtime2[50] = _Xtime2[50]
-Xtime9[50] = _Xtime9[50]
-XtimeB[50] = _XtimeB[50]
-XtimeD[50] = _XtimeD[50]
-XtimeE[50] = _XtimeE[50]
-Sbox[51] = _Sbox[51]
-InvSbox[51] = _InvSbox[51]
-Xtime2Sbox[51] = _Xtime2Sbox[51]
-Xtime3Sbox[51] = _Xtime3Sbox[51]
-Xtime2[51] = _Xtime2[51]
-Xtime9[51] = _Xtime9[51]
-XtimeB[51] = _XtimeB[51]
-XtimeD[51] = _XtimeD[51]
-XtimeE[51] = _XtimeE[51]
-Sbox[52] = _Sbox[52]
-InvSbox[52] = _InvSbox[52]
-Xtime2Sbox[52] = _Xtime2Sbox[52]
-Xtime3Sbox[52] = _Xtime3Sbox[52]
-Xtime2[52] = _Xtime2[52]
-Xtime9[52] = _Xtime9[52]
-XtimeB[52] = _XtimeB[52]
-XtimeD[52] = _XtimeD[52]
-XtimeE[52] = _XtimeE[52]
-Sbox[53] = _Sbox[53]
-InvSbox[53] = _InvSbox[53]
-Xtime2Sbox[53] = _Xtime2Sbox[53]
-Xtime3Sbox[53] = _Xtime3Sbox[53]
-Xtime2[53] = _Xtime2[53]
-Xtime9[53] = _Xtime9[53]
-XtimeB[53] = _XtimeB[53]
-XtimeD[53] = _XtimeD[53]
-XtimeE[53] = _XtimeE[53]
-Sbox[54] = _Sbox[54]
-InvSbox[54] = _InvSbox[54]
-Xtime2Sbox[54] = _Xtime2Sbox[54]
-Xtime3Sbox[54] = _Xtime3Sbox[54]
-Xtime2[54] = _Xtime2[54]
-Xtime9[54] = _Xtime9[54]
-XtimeB[54] = _XtimeB[54]
-XtimeD[54] = _XtimeD[54]
-XtimeE[54] = _XtimeE[54]
-Sbox[55] = _Sbox[55]
-InvSbox[55] = _InvSbox[55]
-Xtime2Sbox[55] = _Xtime2Sbox[55]
-Xtime3Sbox[55] = _Xtime3Sbox[55]
-Xtime2[55] = _Xtime2[55]
-Xtime9[55] = _Xtime9[55]
-XtimeB[55] = _XtimeB[55]
-XtimeD[55] = _XtimeD[55]
-XtimeE[55] = _XtimeE[55]
-Sbox[56] = _Sbox[56]
-InvSbox[56] = _InvSbox[56]
-Xtime2Sbox[56] = _Xtime2Sbox[56]
-Xtime3Sbox[56] = _Xtime3Sbox[56]
-Xtime2[56] = _Xtime2[56]
-Xtime9[56] = _Xtime9[56]
-XtimeB[56] = _XtimeB[56]
-XtimeD[56] = _XtimeD[56]
-XtimeE[56] = _XtimeE[56]
-Sbox[57] = _Sbox[57]
-InvSbox[57] = _InvSbox[57]
-Xtime2Sbox[57] = _Xtime2Sbox[57]
-Xtime3Sbox[57] = _Xtime3Sbox[57]
-Xtime2[57] = _Xtime2[57]
-Xtime9[57] = _Xtime9[57]
-XtimeB[57] = _XtimeB[57]
-XtimeD[57] = _XtimeD[57]
-XtimeE[57] = _XtimeE[57]
-Sbox[58] = _Sbox[58]
-InvSbox[58] = _InvSbox[58]
-Xtime2Sbox[58] = _Xtime2Sbox[58]
-Xtime3Sbox[58] = _Xtime3Sbox[58]
-Xtime2[58] = _Xtime2[58]
-Xtime9[58] = _Xtime9[58]
-XtimeB[58] = _XtimeB[58]
-XtimeD[58] = _XtimeD[58]
-XtimeE[58] = _XtimeE[58]
-Sbox[59] = _Sbox[59]
-InvSbox[59] = _InvSbox[59]
-Xtime2Sbox[59] = _Xtime2Sbox[59]
-Xtime3Sbox[59] = _Xtime3Sbox[59]
-Xtime2[59] = _Xtime2[59]
-Xtime9[59] = _Xtime9[59]
-XtimeB[59] = _XtimeB[59]
-XtimeD[59] = _XtimeD[59]
-XtimeE[59] = _XtimeE[59]
-Sbox[60] = _Sbox[60]
-InvSbox[60] = _InvSbox[60]
-Xtime2Sbox[60] = _Xtime2Sbox[60]
-Xtime3Sbox[60] = _Xtime3Sbox[60]
-Xtime2[60] = _Xtime2[60]
-Xtime9[60] = _Xtime9[60]
-XtimeB[60] = _XtimeB[60]
-XtimeD[60] = _XtimeD[60]
-XtimeE[60] = _XtimeE[60]
-Sbox[61] = _Sbox[61]
-InvSbox[61] = _InvSbox[61]
-Xtime2Sbox[61] = _Xtime2Sbox[61]
-Xtime3Sbox[61] = _Xtime3Sbox[61]
-Xtime2[61] = _Xtime2[61]
-Xtime9[61] = _Xtime9[61]
-XtimeB[61] = _XtimeB[61]
-XtimeD[61] = _XtimeD[61]
-XtimeE[61] = _XtimeE[61]
-Sbox[62] = _Sbox[62]
-InvSbox[62] = _InvSbox[62]
-Xtime2Sbox[62] = _Xtime2Sbox[62]
-Xtime3Sbox[62] = _Xtime3Sbox[62]
-Xtime2[62] = _Xtime2[62]
-Xtime9[62] = _Xtime9[62]
-XtimeB[62] = _XtimeB[62]
-XtimeD[62] = _XtimeD[62]
-XtimeE[62] = _XtimeE[62]
-Sbox[63] = _Sbox[63]
-InvSbox[63] = _InvSbox[63]
-Xtime2Sbox[63] = _Xtime2Sbox[63]
-Xtime3Sbox[63] = _Xtime3Sbox[63]
-Xtime2[63] = _Xtime2[63]
-Xtime9[63] = _Xtime9[63]
-XtimeB[63] = _XtimeB[63]
-XtimeD[63] = _XtimeD[63]
-XtimeE[63] = _XtimeE[63]
-Sbox[64] = _Sbox[64]
-InvSbox[64] = _InvSbox[64]
-Xtime2Sbox[64] = _Xtime2Sbox[64]
-Xtime3Sbox[64] = _Xtime3Sbox[64]
-Xtime2[64] = _Xtime2[64]
-Xtime9[64] = _Xtime9[64]
-XtimeB[64] = _XtimeB[64]
-XtimeD[64] = _XtimeD[64]
-XtimeE[64] = _XtimeE[64]
-Sbox[65] = _Sbox[65]
-InvSbox[65] = _InvSbox[65]
-Xtime2Sbox[65] = _Xtime2Sbox[65]
-Xtime3Sbox[65] = _Xtime3Sbox[65]
-Xtime2[65] = _Xtime2[65]
-Xtime9[65] = _Xtime9[65]
-XtimeB[65] = _XtimeB[65]
-XtimeD[65] = _XtimeD[65]
-XtimeE[65] = _XtimeE[65]
-Sbox[66] = _Sbox[66]
-InvSbox[66] = _InvSbox[66]
-Xtime2Sbox[66] = _Xtime2Sbox[66]
-Xtime3Sbox[66] = _Xtime3Sbox[66]
-Xtime2[66] = _Xtime2[66]
-Xtime9[66] = _Xtime9[66]
-XtimeB[66] = _XtimeB[66]
-XtimeD[66] = _XtimeD[66]
-XtimeE[66] = _XtimeE[66]
-Sbox[67] = _Sbox[67]
-InvSbox[67] = _InvSbox[67]
-Xtime2Sbox[67] = _Xtime2Sbox[67]
-Xtime3Sbox[67] = _Xtime3Sbox[67]
-Xtime2[67] = _Xtime2[67]
-Xtime9[67] = _Xtime9[67]
-XtimeB[67] = _XtimeB[67]
-XtimeD[67] = _XtimeD[67]
-XtimeE[67] = _XtimeE[67]
-Sbox[68] = _Sbox[68]
-InvSbox[68] = _InvSbox[68]
-Xtime2Sbox[68] = _Xtime2Sbox[68]
-Xtime3Sbox[68] = _Xtime3Sbox[68]
-Xtime2[68] = _Xtime2[68]
-Xtime9[68] = _Xtime9[68]
-XtimeB[68] = _XtimeB[68]
-XtimeD[68] = _XtimeD[68]
-XtimeE[68] = _XtimeE[68]
-Sbox[69] = _Sbox[69]
-InvSbox[69] = _InvSbox[69]
-Xtime2Sbox[69] = _Xtime2Sbox[69]
-Xtime3Sbox[69] = _Xtime3Sbox[69]
-Xtime2[69] = _Xtime2[69]
-Xtime9[69] = _Xtime9[69]
-XtimeB[69] = _XtimeB[69]
-XtimeD[69] = _XtimeD[69]
-XtimeE[69] = _XtimeE[69]
-Sbox[70] = _Sbox[70]
-InvSbox[70] = _InvSbox[70]
-Xtime2Sbox[70] = _Xtime2Sbox[70]
-Xtime3Sbox[70] = _Xtime3Sbox[70]
-Xtime2[70] = _Xtime2[70]
-Xtime9[70] = _Xtime9[70]
-XtimeB[70] = _XtimeB[70]
-XtimeD[70] = _XtimeD[70]
-XtimeE[70] = _XtimeE[70]
-Sbox[71] = _Sbox[71]
-InvSbox[71] = _InvSbox[71]
-Xtime2Sbox[71] = _Xtime2Sbox[71]
-Xtime3Sbox[71] = _Xtime3Sbox[71]
-Xtime2[71] = _Xtime2[71]
-Xtime9[71] = _Xtime9[71]
-XtimeB[71] = _XtimeB[71]
-XtimeD[71] = _XtimeD[71]
-XtimeE[71] = _XtimeE[71]
-Sbox[72] = _Sbox[72]
-InvSbox[72] = _InvSbox[72]
-Xtime2Sbox[72] = _Xtime2Sbox[72]
-Xtime3Sbox[72] = _Xtime3Sbox[72]
-Xtime2[72] = _Xtime2[72]
-Xtime9[72] = _Xtime9[72]
-XtimeB[72] = _XtimeB[72]
-XtimeD[72] = _XtimeD[72]
-XtimeE[72] = _XtimeE[72]
-Sbox[73] = _Sbox[73]
-InvSbox[73] = _InvSbox[73]
-Xtime2Sbox[73] = _Xtime2Sbox[73]
-Xtime3Sbox[73] = _Xtime3Sbox[73]
-Xtime2[73] = _Xtime2[73]
-Xtime9[73] = _Xtime9[73]
-XtimeB[73] = _XtimeB[73]
-XtimeD[73] = _XtimeD[73]
-XtimeE[73] = _XtimeE[73]
-Sbox[74] = _Sbox[74]
-InvSbox[74] = _InvSbox[74]
-Xtime2Sbox[74] = _Xtime2Sbox[74]
-Xtime3Sbox[74] = _Xtime3Sbox[74]
-Xtime2[74] = _Xtime2[74]
-Xtime9[74] = _Xtime9[74]
-XtimeB[74] = _XtimeB[74]
-XtimeD[74] = _XtimeD[74]
-XtimeE[74] = _XtimeE[74]
-Sbox[75] = _Sbox[75]
-InvSbox[75] = _InvSbox[75]
-Xtime2Sbox[75] = _Xtime2Sbox[75]
-Xtime3Sbox[75] = _Xtime3Sbox[75]
-Xtime2[75] = _Xtime2[75]
-Xtime9[75] = _Xtime9[75]
-XtimeB[75] = _XtimeB[75]
-XtimeD[75] = _XtimeD[75]
-XtimeE[75] = _XtimeE[75]
-Sbox[76] = _Sbox[76]
-InvSbox[76] = _InvSbox[76]
-Xtime2Sbox[76] = _Xtime2Sbox[76]
-Xtime3Sbox[76] = _Xtime3Sbox[76]
-Xtime2[76] = _Xtime2[76]
-Xtime9[76] = _Xtime9[76]
-XtimeB[76] = _XtimeB[76]
-XtimeD[76] = _XtimeD[76]
-XtimeE[76] = _XtimeE[76]
-Sbox[77] = _Sbox[77]
-InvSbox[77] = _InvSbox[77]
-Xtime2Sbox[77] = _Xtime2Sbox[77]
-Xtime3Sbox[77] = _Xtime3Sbox[77]
-Xtime2[77] = _Xtime2[77]
-Xtime9[77] = _Xtime9[77]
-XtimeB[77] = _XtimeB[77]
-XtimeD[77] = _XtimeD[77]
-XtimeE[77] = _XtimeE[77]
-Sbox[78] = _Sbox[78]
-InvSbox[78] = _InvSbox[78]
-Xtime2Sbox[78] = _Xtime2Sbox[78]
-Xtime3Sbox[78] = _Xtime3Sbox[78]
-Xtime2[78] = _Xtime2[78]
-Xtime9[78] = _Xtime9[78]
-XtimeB[78] = _XtimeB[78]
-XtimeD[78] = _XtimeD[78]
-XtimeE[78] = _XtimeE[78]
-Sbox[79] = _Sbox[79]
-InvSbox[79] = _InvSbox[79]
-Xtime2Sbox[79] = _Xtime2Sbox[79]
-Xtime3Sbox[79] = _Xtime3Sbox[79]
-Xtime2[79] = _Xtime2[79]
-Xtime9[79] = _Xtime9[79]
-XtimeB[79] = _XtimeB[79]
-XtimeD[79] = _XtimeD[79]
-XtimeE[79] = _XtimeE[79]
-Sbox[80] = _Sbox[80]
-InvSbox[80] = _InvSbox[80]
-Xtime2Sbox[80] = _Xtime2Sbox[80]
-Xtime3Sbox[80] = _Xtime3Sbox[80]
-Xtime2[80] = _Xtime2[80]
-Xtime9[80] = _Xtime9[80]
-XtimeB[80] = _XtimeB[80]
-XtimeD[80] = _XtimeD[80]
-XtimeE[80] = _XtimeE[80]
-Sbox[81] = _Sbox[81]
-InvSbox[81] = _InvSbox[81]
-Xtime2Sbox[81] = _Xtime2Sbox[81]
-Xtime3Sbox[81] = _Xtime3Sbox[81]
-Xtime2[81] = _Xtime2[81]
-Xtime9[81] = _Xtime9[81]
-XtimeB[81] = _XtimeB[81]
-XtimeD[81] = _XtimeD[81]
-XtimeE[81] = _XtimeE[81]
-Sbox[82] = _Sbox[82]
-InvSbox[82] = _InvSbox[82]
-Xtime2Sbox[82] = _Xtime2Sbox[82]
-Xtime3Sbox[82] = _Xtime3Sbox[82]
-Xtime2[82] = _Xtime2[82]
-Xtime9[82] = _Xtime9[82]
-XtimeB[82] = _XtimeB[82]
-XtimeD[82] = _XtimeD[82]
-XtimeE[82] = _XtimeE[82]
-Sbox[83] = _Sbox[83]
-InvSbox[83] = _InvSbox[83]
-Xtime2Sbox[83] = _Xtime2Sbox[83]
-Xtime3Sbox[83] = _Xtime3Sbox[83]
-Xtime2[83] = _Xtime2[83]
-Xtime9[83] = _Xtime9[83]
-XtimeB[83] = _XtimeB[83]
-XtimeD[83] = _XtimeD[83]
-XtimeE[83] = _XtimeE[83]
-Sbox[84] = _Sbox[84]
-InvSbox[84] = _InvSbox[84]
-Xtime2Sbox[84] = _Xtime2Sbox[84]
-Xtime3Sbox[84] = _Xtime3Sbox[84]
-Xtime2[84] = _Xtime2[84]
-Xtime9[84] = _Xtime9[84]
-XtimeB[84] = _XtimeB[84]
-XtimeD[84] = _XtimeD[84]
-XtimeE[84] = _XtimeE[84]
-Sbox[85] = _Sbox[85]
-InvSbox[85] = _InvSbox[85]
-Xtime2Sbox[85] = _Xtime2Sbox[85]
-Xtime3Sbox[85] = _Xtime3Sbox[85]
-Xtime2[85] = _Xtime2[85]
-Xtime9[85] = _Xtime9[85]
-XtimeB[85] = _XtimeB[85]
-XtimeD[85] = _XtimeD[85]
-XtimeE[85] = _XtimeE[85]
-Sbox[86] = _Sbox[86]
-InvSbox[86] = _InvSbox[86]
-Xtime2Sbox[86] = _Xtime2Sbox[86]
-Xtime3Sbox[86] = _Xtime3Sbox[86]
-Xtime2[86] = _Xtime2[86]
-Xtime9[86] = _Xtime9[86]
-XtimeB[86] = _XtimeB[86]
-XtimeD[86] = _XtimeD[86]
-XtimeE[86] = _XtimeE[86]
-Sbox[87] = _Sbox[87]
-InvSbox[87] = _InvSbox[87]
-Xtime2Sbox[87] = _Xtime2Sbox[87]
-Xtime3Sbox[87] = _Xtime3Sbox[87]
-Xtime2[87] = _Xtime2[87]
-Xtime9[87] = _Xtime9[87]
-XtimeB[87] = _XtimeB[87]
-XtimeD[87] = _XtimeD[87]
-XtimeE[87] = _XtimeE[87]
-Sbox[88] = _Sbox[88]
-InvSbox[88] = _InvSbox[88]
-Xtime2Sbox[88] = _Xtime2Sbox[88]
-Xtime3Sbox[88] = _Xtime3Sbox[88]
-Xtime2[88] = _Xtime2[88]
-Xtime9[88] = _Xtime9[88]
-XtimeB[88] = _XtimeB[88]
-XtimeD[88] = _XtimeD[88]
-XtimeE[88] = _XtimeE[88]
-Sbox[89] = _Sbox[89]
-InvSbox[89] = _InvSbox[89]
-Xtime2Sbox[89] = _Xtime2Sbox[89]
-Xtime3Sbox[89] = _Xtime3Sbox[89]
-Xtime2[89] = _Xtime2[89]
-Xtime9[89] = _Xtime9[89]
-XtimeB[89] = _XtimeB[89]
-XtimeD[89] = _XtimeD[89]
-XtimeE[89] = _XtimeE[89]
-Sbox[90] = _Sbox[90]
-InvSbox[90] = _InvSbox[90]
-Xtime2Sbox[90] = _Xtime2Sbox[90]
-Xtime3Sbox[90] = _Xtime3Sbox[90]
-Xtime2[90] = _Xtime2[90]
-Xtime9[90] = _Xtime9[90]
-XtimeB[90] = _XtimeB[90]
-XtimeD[90] = _XtimeD[90]
-XtimeE[90] = _XtimeE[90]
-Sbox[91] = _Sbox[91]
-InvSbox[91] = _InvSbox[91]
-Xtime2Sbox[91] = _Xtime2Sbox[91]
-Xtime3Sbox[91] = _Xtime3Sbox[91]
-Xtime2[91] = _Xtime2[91]
-Xtime9[91] = _Xtime9[91]
-XtimeB[91] = _XtimeB[91]
-XtimeD[91] = _XtimeD[91]
-XtimeE[91] = _XtimeE[91]
-Sbox[92] = _Sbox[92]
-InvSbox[92] = _InvSbox[92]
-Xtime2Sbox[92] = _Xtime2Sbox[92]
-Xtime3Sbox[92] = _Xtime3Sbox[92]
-Xtime2[92] = _Xtime2[92]
-Xtime9[92] = _Xtime9[92]
-XtimeB[92] = _XtimeB[92]
-XtimeD[92] = _XtimeD[92]
-XtimeE[92] = _XtimeE[92]
-Sbox[93] = _Sbox[93]
-InvSbox[93] = _InvSbox[93]
-Xtime2Sbox[93] = _Xtime2Sbox[93]
-Xtime3Sbox[93] = _Xtime3Sbox[93]
-Xtime2[93] = _Xtime2[93]
-Xtime9[93] = _Xtime9[93]
-XtimeB[93] = _XtimeB[93]
-XtimeD[93] = _XtimeD[93]
-XtimeE[93] = _XtimeE[93]
-Sbox[94] = _Sbox[94]
-InvSbox[94] = _InvSbox[94]
-Xtime2Sbox[94] = _Xtime2Sbox[94]
-Xtime3Sbox[94] = _Xtime3Sbox[94]
-Xtime2[94] = _Xtime2[94]
-Xtime9[94] = _Xtime9[94]
-XtimeB[94] = _XtimeB[94]
-XtimeD[94] = _XtimeD[94]
-XtimeE[94] = _XtimeE[94]
-Sbox[95] = _Sbox[95]
-InvSbox[95] = _InvSbox[95]
-Xtime2Sbox[95] = _Xtime2Sbox[95]
-Xtime3Sbox[95] = _Xtime3Sbox[95]
-Xtime2[95] = _Xtime2[95]
-Xtime9[95] = _Xtime9[95]
-XtimeB[95] = _XtimeB[95]
-XtimeD[95] = _XtimeD[95]
-XtimeE[95] = _XtimeE[95]
-Sbox[96] = _Sbox[96]
-InvSbox[96] = _InvSbox[96]
-Xtime2Sbox[96] = _Xtime2Sbox[96]
-Xtime3Sbox[96] = _Xtime3Sbox[96]
-Xtime2[96] = _Xtime2[96]
-Xtime9[96] = _Xtime9[96]
-XtimeB[96] = _XtimeB[96]
-XtimeD[96] = _XtimeD[96]
-XtimeE[96] = _XtimeE[96]
-Sbox[97] = _Sbox[97]
-InvSbox[97] = _InvSbox[97]
-Xtime2Sbox[97] = _Xtime2Sbox[97]
-Xtime3Sbox[97] = _Xtime3Sbox[97]
-Xtime2[97] = _Xtime2[97]
-Xtime9[97] = _Xtime9[97]
-XtimeB[97] = _XtimeB[97]
-XtimeD[97] = _XtimeD[97]
-XtimeE[97] = _XtimeE[97]
-Sbox[98] = _Sbox[98]
-InvSbox[98] = _InvSbox[98]
-Xtime2Sbox[98] = _Xtime2Sbox[98]
-Xtime3Sbox[98] = _Xtime3Sbox[98]
-Xtime2[98] = _Xtime2[98]
-Xtime9[98] = _Xtime9[98]
-XtimeB[98] = _XtimeB[98]
-XtimeD[98] = _XtimeD[98]
-XtimeE[98] = _XtimeE[98]
-Sbox[99] = _Sbox[99]
-InvSbox[99] = _InvSbox[99]
-Xtime2Sbox[99] = _Xtime2Sbox[99]
-Xtime3Sbox[99] = _Xtime3Sbox[99]
-Xtime2[99] = _Xtime2[99]
-Xtime9[99] = _Xtime9[99]
-XtimeB[99] = _XtimeB[99]
-XtimeD[99] = _XtimeD[99]
-XtimeE[99] = _XtimeE[99]
-Sbox[100] = _Sbox[100]
-InvSbox[100] = _InvSbox[100]
-Xtime2Sbox[100] = _Xtime2Sbox[100]
-Xtime3Sbox[100] = _Xtime3Sbox[100]
-Xtime2[100] = _Xtime2[100]
-Xtime9[100] = _Xtime9[100]
-XtimeB[100] = _XtimeB[100]
-XtimeD[100] = _XtimeD[100]
-XtimeE[100] = _XtimeE[100]
-Sbox[101] = _Sbox[101]
-InvSbox[101] = _InvSbox[101]
-Xtime2Sbox[101] = _Xtime2Sbox[101]
-Xtime3Sbox[101] = _Xtime3Sbox[101]
-Xtime2[101] = _Xtime2[101]
-Xtime9[101] = _Xtime9[101]
-XtimeB[101] = _XtimeB[101]
-XtimeD[101] = _XtimeD[101]
-XtimeE[101] = _XtimeE[101]
-Sbox[102] = _Sbox[102]
-InvSbox[102] = _InvSbox[102]
-Xtime2Sbox[102] = _Xtime2Sbox[102]
-Xtime3Sbox[102] = _Xtime3Sbox[102]
-Xtime2[102] = _Xtime2[102]
-Xtime9[102] = _Xtime9[102]
-XtimeB[102] = _XtimeB[102]
-XtimeD[102] = _XtimeD[102]
-XtimeE[102] = _XtimeE[102]
-Sbox[103] = _Sbox[103]
-InvSbox[103] = _InvSbox[103]
-Xtime2Sbox[103] = _Xtime2Sbox[103]
-Xtime3Sbox[103] = _Xtime3Sbox[103]
-Xtime2[103] = _Xtime2[103]
-Xtime9[103] = _Xtime9[103]
-XtimeB[103] = _XtimeB[103]
-XtimeD[103] = _XtimeD[103]
-XtimeE[103] = _XtimeE[103]
-Sbox[104] = _Sbox[104]
-InvSbox[104] = _InvSbox[104]
-Xtime2Sbox[104] = _Xtime2Sbox[104]
-Xtime3Sbox[104] = _Xtime3Sbox[104]
-Xtime2[104] = _Xtime2[104]
-Xtime9[104] = _Xtime9[104]
-XtimeB[104] = _XtimeB[104]
-XtimeD[104] = _XtimeD[104]
-XtimeE[104] = _XtimeE[104]
-Sbox[105] = _Sbox[105]
-InvSbox[105] = _InvSbox[105]
-Xtime2Sbox[105] = _Xtime2Sbox[105]
-Xtime3Sbox[105] = _Xtime3Sbox[105]
-Xtime2[105] = _Xtime2[105]
-Xtime9[105] = _Xtime9[105]
-XtimeB[105] = _XtimeB[105]
-XtimeD[105] = _XtimeD[105]
-XtimeE[105] = _XtimeE[105]
-Sbox[106] = _Sbox[106]
-InvSbox[106] = _InvSbox[106]
-Xtime2Sbox[106] = _Xtime2Sbox[106]
-Xtime3Sbox[106] = _Xtime3Sbox[106]
-Xtime2[106] = _Xtime2[106]
-Xtime9[106] = _Xtime9[106]
-XtimeB[106] = _XtimeB[106]
-XtimeD[106] = _XtimeD[106]
-XtimeE[106] = _XtimeE[106]
-Sbox[107] = _Sbox[107]
-InvSbox[107] = _InvSbox[107]
-Xtime2Sbox[107] = _Xtime2Sbox[107]
-Xtime3Sbox[107] = _Xtime3Sbox[107]
-Xtime2[107] = _Xtime2[107]
-Xtime9[107] = _Xtime9[107]
-XtimeB[107] = _XtimeB[107]
-XtimeD[107] = _XtimeD[107]
-XtimeE[107] = _XtimeE[107]
-Sbox[108] = _Sbox[108]
-InvSbox[108] = _InvSbox[108]
-Xtime2Sbox[108] = _Xtime2Sbox[108]
-Xtime3Sbox[108] = _Xtime3Sbox[108]
-Xtime2[108] = _Xtime2[108]
-Xtime9[108] = _Xtime9[108]
-XtimeB[108] = _XtimeB[108]
-XtimeD[108] = _XtimeD[108]
-XtimeE[108] = _XtimeE[108]
-Sbox[109] = _Sbox[109]
-InvSbox[109] = _InvSbox[109]
-Xtime2Sbox[109] = _Xtime2Sbox[109]
-Xtime3Sbox[109] = _Xtime3Sbox[109]
-Xtime2[109] = _Xtime2[109]
-Xtime9[109] = _Xtime9[109]
-XtimeB[109] = _XtimeB[109]
-XtimeD[109] = _XtimeD[109]
-XtimeE[109] = _XtimeE[109]
-Sbox[110] = _Sbox[110]
-InvSbox[110] = _InvSbox[110]
-Xtime2Sbox[110] = _Xtime2Sbox[110]
-Xtime3Sbox[110] = _Xtime3Sbox[110]
-Xtime2[110] = _Xtime2[110]
-Xtime9[110] = _Xtime9[110]
-XtimeB[110] = _XtimeB[110]
-XtimeD[110] = _XtimeD[110]
-XtimeE[110] = _XtimeE[110]
-Sbox[111] = _Sbox[111]
-InvSbox[111] = _InvSbox[111]
-Xtime2Sbox[111] = _Xtime2Sbox[111]
-Xtime3Sbox[111] = _Xtime3Sbox[111]
-Xtime2[111] = _Xtime2[111]
-Xtime9[111] = _Xtime9[111]
-XtimeB[111] = _XtimeB[111]
-XtimeD[111] = _XtimeD[111]
-XtimeE[111] = _XtimeE[111]
-Sbox[112] = _Sbox[112]
-InvSbox[112] = _InvSbox[112]
-Xtime2Sbox[112] = _Xtime2Sbox[112]
-Xtime3Sbox[112] = _Xtime3Sbox[112]
-Xtime2[112] = _Xtime2[112]
-Xtime9[112] = _Xtime9[112]
-XtimeB[112] = _XtimeB[112]
-XtimeD[112] = _XtimeD[112]
-XtimeE[112] = _XtimeE[112]
-Sbox[113] = _Sbox[113]
-InvSbox[113] = _InvSbox[113]
-Xtime2Sbox[113] = _Xtime2Sbox[113]
-Xtime3Sbox[113] = _Xtime3Sbox[113]
-Xtime2[113] = _Xtime2[113]
-Xtime9[113] = _Xtime9[113]
-XtimeB[113] = _XtimeB[113]
-XtimeD[113] = _XtimeD[113]
-XtimeE[113] = _XtimeE[113]
-Sbox[114] = _Sbox[114]
-InvSbox[114] = _InvSbox[114]
-Xtime2Sbox[114] = _Xtime2Sbox[114]
-Xtime3Sbox[114] = _Xtime3Sbox[114]
-Xtime2[114] = _Xtime2[114]
-Xtime9[114] = _Xtime9[114]
-XtimeB[114] = _XtimeB[114]
-XtimeD[114] = _XtimeD[114]
-XtimeE[114] = _XtimeE[114]
-Sbox[115] = _Sbox[115]
-InvSbox[115] = _InvSbox[115]
-Xtime2Sbox[115] = _Xtime2Sbox[115]
-Xtime3Sbox[115] = _Xtime3Sbox[115]
-Xtime2[115] = _Xtime2[115]
-Xtime9[115] = _Xtime9[115]
-XtimeB[115] = _XtimeB[115]
-XtimeD[115] = _XtimeD[115]
-XtimeE[115] = _XtimeE[115]
-Sbox[116] = _Sbox[116]
-InvSbox[116] = _InvSbox[116]
-Xtime2Sbox[116] = _Xtime2Sbox[116]
-Xtime3Sbox[116] = _Xtime3Sbox[116]
-Xtime2[116] = _Xtime2[116]
-Xtime9[116] = _Xtime9[116]
-XtimeB[116] = _XtimeB[116]
-XtimeD[116] = _XtimeD[116]
-XtimeE[116] = _XtimeE[116]
-Sbox[117] = _Sbox[117]
-InvSbox[117] = _InvSbox[117]
-Xtime2Sbox[117] = _Xtime2Sbox[117]
-Xtime3Sbox[117] = _Xtime3Sbox[117]
-Xtime2[117] = _Xtime2[117]
-Xtime9[117] = _Xtime9[117]
-XtimeB[117] = _XtimeB[117]
-XtimeD[117] = _XtimeD[117]
-XtimeE[117] = _XtimeE[117]
-Sbox[118] = _Sbox[118]
-InvSbox[118] = _InvSbox[118]
-Xtime2Sbox[118] = _Xtime2Sbox[118]
-Xtime3Sbox[118] = _Xtime3Sbox[118]
-Xtime2[118] = _Xtime2[118]
-Xtime9[118] = _Xtime9[118]
-XtimeB[118] = _XtimeB[118]
-XtimeD[118] = _XtimeD[118]
-XtimeE[118] = _XtimeE[118]
-Sbox[119] = _Sbox[119]
-InvSbox[119] = _InvSbox[119]
-Xtime2Sbox[119] = _Xtime2Sbox[119]
-Xtime3Sbox[119] = _Xtime3Sbox[119]
-Xtime2[119] = _Xtime2[119]
-Xtime9[119] = _Xtime9[119]
-XtimeB[119] = _XtimeB[119]
-XtimeD[119] = _XtimeD[119]
-XtimeE[119] = _XtimeE[119]
-Sbox[120] = _Sbox[120]
-InvSbox[120] = _InvSbox[120]
-Xtime2Sbox[120] = _Xtime2Sbox[120]
-Xtime3Sbox[120] = _Xtime3Sbox[120]
-Xtime2[120] = _Xtime2[120]
-Xtime9[120] = _Xtime9[120]
-XtimeB[120] = _XtimeB[120]
-XtimeD[120] = _XtimeD[120]
-XtimeE[120] = _XtimeE[120]
-Sbox[121] = _Sbox[121]
-InvSbox[121] = _InvSbox[121]
-Xtime2Sbox[121] = _Xtime2Sbox[121]
-Xtime3Sbox[121] = _Xtime3Sbox[121]
-Xtime2[121] = _Xtime2[121]
-Xtime9[121] = _Xtime9[121]
-XtimeB[121] = _XtimeB[121]
-XtimeD[121] = _XtimeD[121]
-XtimeE[121] = _XtimeE[121]
-Sbox[122] = _Sbox[122]
-InvSbox[122] = _InvSbox[122]
-Xtime2Sbox[122] = _Xtime2Sbox[122]
-Xtime3Sbox[122] = _Xtime3Sbox[122]
-Xtime2[122] = _Xtime2[122]
-Xtime9[122] = _Xtime9[122]
-XtimeB[122] = _XtimeB[122]
-XtimeD[122] = _XtimeD[122]
-XtimeE[122] = _XtimeE[122]
-Sbox[123] = _Sbox[123]
-InvSbox[123] = _InvSbox[123]
-Xtime2Sbox[123] = _Xtime2Sbox[123]
-Xtime3Sbox[123] = _Xtime3Sbox[123]
-Xtime2[123] = _Xtime2[123]
-Xtime9[123] = _Xtime9[123]
-XtimeB[123] = _XtimeB[123]
-XtimeD[123] = _XtimeD[123]
-XtimeE[123] = _XtimeE[123]
-Sbox[124] = _Sbox[124]
-InvSbox[124] = _InvSbox[124]
-Xtime2Sbox[124] = _Xtime2Sbox[124]
-Xtime3Sbox[124] = _Xtime3Sbox[124]
-Xtime2[124] = _Xtime2[124]
-Xtime9[124] = _Xtime9[124]
-XtimeB[124] = _XtimeB[124]
-XtimeD[124] = _XtimeD[124]
-XtimeE[124] = _XtimeE[124]
-Sbox[125] = _Sbox[125]
-InvSbox[125] = _InvSbox[125]
-Xtime2Sbox[125] = _Xtime2Sbox[125]
-Xtime3Sbox[125] = _Xtime3Sbox[125]
-Xtime2[125] = _Xtime2[125]
-Xtime9[125] = _Xtime9[125]
-XtimeB[125] = _XtimeB[125]
-XtimeD[125] = _XtimeD[125]
-XtimeE[125] = _XtimeE[125]
-Sbox[126] = _Sbox[126]
-InvSbox[126] = _InvSbox[126]
-Xtime2Sbox[126] = _Xtime2Sbox[126]
-Xtime3Sbox[126] = _Xtime3Sbox[126]
-Xtime2[126] = _Xtime2[126]
-Xtime9[126] = _Xtime9[126]
-XtimeB[126] = _XtimeB[126]
-XtimeD[126] = _XtimeD[126]
-XtimeE[126] = _XtimeE[126]
-Sbox[127] = _Sbox[127]
-InvSbox[127] = _InvSbox[127]
-Xtime2Sbox[127] = _Xtime2Sbox[127]
-Xtime3Sbox[127] = _Xtime3Sbox[127]
-Xtime2[127] = _Xtime2[127]
-Xtime9[127] = _Xtime9[127]
-XtimeB[127] = _XtimeB[127]
-XtimeD[127] = _XtimeD[127]
-XtimeE[127] = _XtimeE[127]
-Sbox[128] = _Sbox[128]
-InvSbox[128] = _InvSbox[128]
-Xtime2Sbox[128] = _Xtime2Sbox[128]
-Xtime3Sbox[128] = _Xtime3Sbox[128]
-Xtime2[128] = _Xtime2[128]
-Xtime9[128] = _Xtime9[128]
-XtimeB[128] = _XtimeB[128]
-XtimeD[128] = _XtimeD[128]
-XtimeE[128] = _XtimeE[128]
-Sbox[129] = _Sbox[129]
-InvSbox[129] = _InvSbox[129]
-Xtime2Sbox[129] = _Xtime2Sbox[129]
-Xtime3Sbox[129] = _Xtime3Sbox[129]
-Xtime2[129] = _Xtime2[129]
-Xtime9[129] = _Xtime9[129]
-XtimeB[129] = _XtimeB[129]
-XtimeD[129] = _XtimeD[129]
-XtimeE[129] = _XtimeE[129]
-Sbox[130] = _Sbox[130]
-InvSbox[130] = _InvSbox[130]
-Xtime2Sbox[130] = _Xtime2Sbox[130]
-Xtime3Sbox[130] = _Xtime3Sbox[130]
-Xtime2[130] = _Xtime2[130]
-Xtime9[130] = _Xtime9[130]
-XtimeB[130] = _XtimeB[130]
-XtimeD[130] = _XtimeD[130]
-XtimeE[130] = _XtimeE[130]
-Sbox[131] = _Sbox[131]
-InvSbox[131] = _InvSbox[131]
-Xtime2Sbox[131] = _Xtime2Sbox[131]
-Xtime3Sbox[131] = _Xtime3Sbox[131]
-Xtime2[131] = _Xtime2[131]
-Xtime9[131] = _Xtime9[131]
-XtimeB[131] = _XtimeB[131]
-XtimeD[131] = _XtimeD[131]
-XtimeE[131] = _XtimeE[131]
-Sbox[132] = _Sbox[132]
-InvSbox[132] = _InvSbox[132]
-Xtime2Sbox[132] = _Xtime2Sbox[132]
-Xtime3Sbox[132] = _Xtime3Sbox[132]
-Xtime2[132] = _Xtime2[132]
-Xtime9[132] = _Xtime9[132]
-XtimeB[132] = _XtimeB[132]
-XtimeD[132] = _XtimeD[132]
-XtimeE[132] = _XtimeE[132]
-Sbox[133] = _Sbox[133]
-InvSbox[133] = _InvSbox[133]
-Xtime2Sbox[133] = _Xtime2Sbox[133]
-Xtime3Sbox[133] = _Xtime3Sbox[133]
-Xtime2[133] = _Xtime2[133]
-Xtime9[133] = _Xtime9[133]
-XtimeB[133] = _XtimeB[133]
-XtimeD[133] = _XtimeD[133]
-XtimeE[133] = _XtimeE[133]
-Sbox[134] = _Sbox[134]
-InvSbox[134] = _InvSbox[134]
-Xtime2Sbox[134] = _Xtime2Sbox[134]
-Xtime3Sbox[134] = _Xtime3Sbox[134]
-Xtime2[134] = _Xtime2[134]
-Xtime9[134] = _Xtime9[134]
-XtimeB[134] = _XtimeB[134]
-XtimeD[134] = _XtimeD[134]
-XtimeE[134] = _XtimeE[134]
-Sbox[135] = _Sbox[135]
-InvSbox[135] = _InvSbox[135]
-Xtime2Sbox[135] = _Xtime2Sbox[135]
-Xtime3Sbox[135] = _Xtime3Sbox[135]
-Xtime2[135] = _Xtime2[135]
-Xtime9[135] = _Xtime9[135]
-XtimeB[135] = _XtimeB[135]
-XtimeD[135] = _XtimeD[135]
-XtimeE[135] = _XtimeE[135]
-Sbox[136] = _Sbox[136]
-InvSbox[136] = _InvSbox[136]
-Xtime2Sbox[136] = _Xtime2Sbox[136]
-Xtime3Sbox[136] = _Xtime3Sbox[136]
-Xtime2[136] = _Xtime2[136]
-Xtime9[136] = _Xtime9[136]
-XtimeB[136] = _XtimeB[136]
-XtimeD[136] = _XtimeD[136]
-XtimeE[136] = _XtimeE[136]
-Sbox[137] = _Sbox[137]
-InvSbox[137] = _InvSbox[137]
-Xtime2Sbox[137] = _Xtime2Sbox[137]
-Xtime3Sbox[137] = _Xtime3Sbox[137]
-Xtime2[137] = _Xtime2[137]
-Xtime9[137] = _Xtime9[137]
-XtimeB[137] = _XtimeB[137]
-XtimeD[137] = _XtimeD[137]
-XtimeE[137] = _XtimeE[137]
-Sbox[138] = _Sbox[138]
-InvSbox[138] = _InvSbox[138]
-Xtime2Sbox[138] = _Xtime2Sbox[138]
-Xtime3Sbox[138] = _Xtime3Sbox[138]
-Xtime2[138] = _Xtime2[138]
-Xtime9[138] = _Xtime9[138]
-XtimeB[138] = _XtimeB[138]
-XtimeD[138] = _XtimeD[138]
-XtimeE[138] = _XtimeE[138]
-Sbox[139] = _Sbox[139]
-InvSbox[139] = _InvSbox[139]
-Xtime2Sbox[139] = _Xtime2Sbox[139]
-Xtime3Sbox[139] = _Xtime3Sbox[139]
-Xtime2[139] = _Xtime2[139]
-Xtime9[139] = _Xtime9[139]
-XtimeB[139] = _XtimeB[139]
-XtimeD[139] = _XtimeD[139]
-XtimeE[139] = _XtimeE[139]
-Sbox[140] = _Sbox[140]
-InvSbox[140] = _InvSbox[140]
-Xtime2Sbox[140] = _Xtime2Sbox[140]
-Xtime3Sbox[140] = _Xtime3Sbox[140]
-Xtime2[140] = _Xtime2[140]
-Xtime9[140] = _Xtime9[140]
-XtimeB[140] = _XtimeB[140]
-XtimeD[140] = _XtimeD[140]
-XtimeE[140] = _XtimeE[140]
-Sbox[141] = _Sbox[141]
-InvSbox[141] = _InvSbox[141]
-Xtime2Sbox[141] = _Xtime2Sbox[141]
-Xtime3Sbox[141] = _Xtime3Sbox[141]
-Xtime2[141] = _Xtime2[141]
-Xtime9[141] = _Xtime9[141]
-XtimeB[141] = _XtimeB[141]
-XtimeD[141] = _XtimeD[141]
-XtimeE[141] = _XtimeE[141]
-Sbox[142] = _Sbox[142]
-InvSbox[142] = _InvSbox[142]
-Xtime2Sbox[142] = _Xtime2Sbox[142]
-Xtime3Sbox[142] = _Xtime3Sbox[142]
-Xtime2[142] = _Xtime2[142]
-Xtime9[142] = _Xtime9[142]
-XtimeB[142] = _XtimeB[142]
-XtimeD[142] = _XtimeD[142]
-XtimeE[142] = _XtimeE[142]
-Sbox[143] = _Sbox[143]
-InvSbox[143] = _InvSbox[143]
-Xtime2Sbox[143] = _Xtime2Sbox[143]
-Xtime3Sbox[143] = _Xtime3Sbox[143]
-Xtime2[143] = _Xtime2[143]
-Xtime9[143] = _Xtime9[143]
-XtimeB[143] = _XtimeB[143]
-XtimeD[143] = _XtimeD[143]
-XtimeE[143] = _XtimeE[143]
-Sbox[144] = _Sbox[144]
-InvSbox[144] = _InvSbox[144]
-Xtime2Sbox[144] = _Xtime2Sbox[144]
-Xtime3Sbox[144] = _Xtime3Sbox[144]
-Xtime2[144] = _Xtime2[144]
-Xtime9[144] = _Xtime9[144]
-XtimeB[144] = _XtimeB[144]
-XtimeD[144] = _XtimeD[144]
-XtimeE[144] = _XtimeE[144]
-Sbox[145] = _Sbox[145]
-InvSbox[145] = _InvSbox[145]
-Xtime2Sbox[145] = _Xtime2Sbox[145]
-Xtime3Sbox[145] = _Xtime3Sbox[145]
-Xtime2[145] = _Xtime2[145]
-Xtime9[145] = _Xtime9[145]
-XtimeB[145] = _XtimeB[145]
-XtimeD[145] = _XtimeD[145]
-XtimeE[145] = _XtimeE[145]
-Sbox[146] = _Sbox[146]
-InvSbox[146] = _InvSbox[146]
-Xtime2Sbox[146] = _Xtime2Sbox[146]
-Xtime3Sbox[146] = _Xtime3Sbox[146]
-Xtime2[146] = _Xtime2[146]
-Xtime9[146] = _Xtime9[146]
-XtimeB[146] = _XtimeB[146]
-XtimeD[146] = _XtimeD[146]
-XtimeE[146] = _XtimeE[146]
-Sbox[147] = _Sbox[147]
-InvSbox[147] = _InvSbox[147]
-Xtime2Sbox[147] = _Xtime2Sbox[147]
-Xtime3Sbox[147] = _Xtime3Sbox[147]
-Xtime2[147] = _Xtime2[147]
-Xtime9[147] = _Xtime9[147]
-XtimeB[147] = _XtimeB[147]
-XtimeD[147] = _XtimeD[147]
-XtimeE[147] = _XtimeE[147]
-Sbox[148] = _Sbox[148]
-InvSbox[148] = _InvSbox[148]
-Xtime2Sbox[148] = _Xtime2Sbox[148]
-Xtime3Sbox[148] = _Xtime3Sbox[148]
-Xtime2[148] = _Xtime2[148]
-Xtime9[148] = _Xtime9[148]
-XtimeB[148] = _XtimeB[148]
-XtimeD[148] = _XtimeD[148]
-XtimeE[148] = _XtimeE[148]
-Sbox[149] = _Sbox[149]
-InvSbox[149] = _InvSbox[149]
-Xtime2Sbox[149] = _Xtime2Sbox[149]
-Xtime3Sbox[149] = _Xtime3Sbox[149]
-Xtime2[149] = _Xtime2[149]
-Xtime9[149] = _Xtime9[149]
-XtimeB[149] = _XtimeB[149]
-XtimeD[149] = _XtimeD[149]
-XtimeE[149] = _XtimeE[149]
-Sbox[150] = _Sbox[150]
-InvSbox[150] = _InvSbox[150]
-Xtime2Sbox[150] = _Xtime2Sbox[150]
-Xtime3Sbox[150] = _Xtime3Sbox[150]
-Xtime2[150] = _Xtime2[150]
-Xtime9[150] = _Xtime9[150]
-XtimeB[150] = _XtimeB[150]
-XtimeD[150] = _XtimeD[150]
-XtimeE[150] = _XtimeE[150]
-Sbox[151] = _Sbox[151]
-InvSbox[151] = _InvSbox[151]
-Xtime2Sbox[151] = _Xtime2Sbox[151]
-Xtime3Sbox[151] = _Xtime3Sbox[151]
-Xtime2[151] = _Xtime2[151]
-Xtime9[151] = _Xtime9[151]
-XtimeB[151] = _XtimeB[151]
-XtimeD[151] = _XtimeD[151]
-XtimeE[151] = _XtimeE[151]
-Sbox[152] = _Sbox[152]
-InvSbox[152] = _InvSbox[152]
-Xtime2Sbox[152] = _Xtime2Sbox[152]
-Xtime3Sbox[152] = _Xtime3Sbox[152]
-Xtime2[152] = _Xtime2[152]
-Xtime9[152] = _Xtime9[152]
-XtimeB[152] = _XtimeB[152]
-XtimeD[152] = _XtimeD[152]
-XtimeE[152] = _XtimeE[152]
-Sbox[153] = _Sbox[153]
-InvSbox[153] = _InvSbox[153]
-Xtime2Sbox[153] = _Xtime2Sbox[153]
-Xtime3Sbox[153] = _Xtime3Sbox[153]
-Xtime2[153] = _Xtime2[153]
-Xtime9[153] = _Xtime9[153]
-XtimeB[153] = _XtimeB[153]
-XtimeD[153] = _XtimeD[153]
-XtimeE[153] = _XtimeE[153]
-Sbox[154] = _Sbox[154]
-InvSbox[154] = _InvSbox[154]
-Xtime2Sbox[154] = _Xtime2Sbox[154]
-Xtime3Sbox[154] = _Xtime3Sbox[154]
-Xtime2[154] = _Xtime2[154]
-Xtime9[154] = _Xtime9[154]
-XtimeB[154] = _XtimeB[154]
-XtimeD[154] = _XtimeD[154]
-XtimeE[154] = _XtimeE[154]
-Sbox[155] = _Sbox[155]
-InvSbox[155] = _InvSbox[155]
-Xtime2Sbox[155] = _Xtime2Sbox[155]
-Xtime3Sbox[155] = _Xtime3Sbox[155]
-Xtime2[155] = _Xtime2[155]
-Xtime9[155] = _Xtime9[155]
-XtimeB[155] = _XtimeB[155]
-XtimeD[155] = _XtimeD[155]
-XtimeE[155] = _XtimeE[155]
-Sbox[156] = _Sbox[156]
-InvSbox[156] = _InvSbox[156]
-Xtime2Sbox[156] = _Xtime2Sbox[156]
-Xtime3Sbox[156] = _Xtime3Sbox[156]
-Xtime2[156] = _Xtime2[156]
-Xtime9[156] = _Xtime9[156]
-XtimeB[156] = _XtimeB[156]
-XtimeD[156] = _XtimeD[156]
-XtimeE[156] = _XtimeE[156]
-Sbox[157] = _Sbox[157]
-InvSbox[157] = _InvSbox[157]
-Xtime2Sbox[157] = _Xtime2Sbox[157]
-Xtime3Sbox[157] = _Xtime3Sbox[157]
-Xtime2[157] = _Xtime2[157]
-Xtime9[157] = _Xtime9[157]
-XtimeB[157] = _XtimeB[157]
-XtimeD[157] = _XtimeD[157]
-XtimeE[157] = _XtimeE[157]
-Sbox[158] = _Sbox[158]
-InvSbox[158] = _InvSbox[158]
-Xtime2Sbox[158] = _Xtime2Sbox[158]
-Xtime3Sbox[158] = _Xtime3Sbox[158]
-Xtime2[158] = _Xtime2[158]
-Xtime9[158] = _Xtime9[158]
-XtimeB[158] = _XtimeB[158]
-XtimeD[158] = _XtimeD[158]
-XtimeE[158] = _XtimeE[158]
-Sbox[159] = _Sbox[159]
-InvSbox[159] = _InvSbox[159]
-Xtime2Sbox[159] = _Xtime2Sbox[159]
-Xtime3Sbox[159] = _Xtime3Sbox[159]
-Xtime2[159] = _Xtime2[159]
-Xtime9[159] = _Xtime9[159]
-XtimeB[159] = _XtimeB[159]
-XtimeD[159] = _XtimeD[159]
-XtimeE[159] = _XtimeE[159]
-Sbox[160] = _Sbox[160]
-InvSbox[160] = _InvSbox[160]
-Xtime2Sbox[160] = _Xtime2Sbox[160]
-Xtime3Sbox[160] = _Xtime3Sbox[160]
-Xtime2[160] = _Xtime2[160]
-Xtime9[160] = _Xtime9[160]
-XtimeB[160] = _XtimeB[160]
-XtimeD[160] = _XtimeD[160]
-XtimeE[160] = _XtimeE[160]
-Sbox[161] = _Sbox[161]
-InvSbox[161] = _InvSbox[161]
-Xtime2Sbox[161] = _Xtime2Sbox[161]
-Xtime3Sbox[161] = _Xtime3Sbox[161]
-Xtime2[161] = _Xtime2[161]
-Xtime9[161] = _Xtime9[161]
-XtimeB[161] = _XtimeB[161]
-XtimeD[161] = _XtimeD[161]
-XtimeE[161] = _XtimeE[161]
-Sbox[162] = _Sbox[162]
-InvSbox[162] = _InvSbox[162]
-Xtime2Sbox[162] = _Xtime2Sbox[162]
-Xtime3Sbox[162] = _Xtime3Sbox[162]
-Xtime2[162] = _Xtime2[162]
-Xtime9[162] = _Xtime9[162]
-XtimeB[162] = _XtimeB[162]
-XtimeD[162] = _XtimeD[162]
-XtimeE[162] = _XtimeE[162]
-Sbox[163] = _Sbox[163]
-InvSbox[163] = _InvSbox[163]
-Xtime2Sbox[163] = _Xtime2Sbox[163]
-Xtime3Sbox[163] = _Xtime3Sbox[163]
-Xtime2[163] = _Xtime2[163]
-Xtime9[163] = _Xtime9[163]
-XtimeB[163] = _XtimeB[163]
-XtimeD[163] = _XtimeD[163]
-XtimeE[163] = _XtimeE[163]
-Sbox[164] = _Sbox[164]
-InvSbox[164] = _InvSbox[164]
-Xtime2Sbox[164] = _Xtime2Sbox[164]
-Xtime3Sbox[164] = _Xtime3Sbox[164]
-Xtime2[164] = _Xtime2[164]
-Xtime9[164] = _Xtime9[164]
-XtimeB[164] = _XtimeB[164]
-XtimeD[164] = _XtimeD[164]
-XtimeE[164] = _XtimeE[164]
-Sbox[165] = _Sbox[165]
-InvSbox[165] = _InvSbox[165]
-Xtime2Sbox[165] = _Xtime2Sbox[165]
-Xtime3Sbox[165] = _Xtime3Sbox[165]
-Xtime2[165] = _Xtime2[165]
-Xtime9[165] = _Xtime9[165]
-XtimeB[165] = _XtimeB[165]
-XtimeD[165] = _XtimeD[165]
-XtimeE[165] = _XtimeE[165]
-Sbox[166] = _Sbox[166]
-InvSbox[166] = _InvSbox[166]
-Xtime2Sbox[166] = _Xtime2Sbox[166]
-Xtime3Sbox[166] = _Xtime3Sbox[166]
-Xtime2[166] = _Xtime2[166]
-Xtime9[166] = _Xtime9[166]
-XtimeB[166] = _XtimeB[166]
-XtimeD[166] = _XtimeD[166]
-XtimeE[166] = _XtimeE[166]
-Sbox[167] = _Sbox[167]
-InvSbox[167] = _InvSbox[167]
-Xtime2Sbox[167] = _Xtime2Sbox[167]
-Xtime3Sbox[167] = _Xtime3Sbox[167]
-Xtime2[167] = _Xtime2[167]
-Xtime9[167] = _Xtime9[167]
-XtimeB[167] = _XtimeB[167]
-XtimeD[167] = _XtimeD[167]
-XtimeE[167] = _XtimeE[167]
-Sbox[168] = _Sbox[168]
-InvSbox[168] = _InvSbox[168]
-Xtime2Sbox[168] = _Xtime2Sbox[168]
-Xtime3Sbox[168] = _Xtime3Sbox[168]
-Xtime2[168] = _Xtime2[168]
-Xtime9[168] = _Xtime9[168]
-XtimeB[168] = _XtimeB[168]
-XtimeD[168] = _XtimeD[168]
-XtimeE[168] = _XtimeE[168]
-Sbox[169] = _Sbox[169]
-InvSbox[169] = _InvSbox[169]
-Xtime2Sbox[169] = _Xtime2Sbox[169]
-Xtime3Sbox[169] = _Xtime3Sbox[169]
-Xtime2[169] = _Xtime2[169]
-Xtime9[169] = _Xtime9[169]
-XtimeB[169] = _XtimeB[169]
-XtimeD[169] = _XtimeD[169]
-XtimeE[169] = _XtimeE[169]
-Sbox[170] = _Sbox[170]
-InvSbox[170] = _InvSbox[170]
-Xtime2Sbox[170] = _Xtime2Sbox[170]
-Xtime3Sbox[170] = _Xtime3Sbox[170]
-Xtime2[170] = _Xtime2[170]
-Xtime9[170] = _Xtime9[170]
-XtimeB[170] = _XtimeB[170]
-XtimeD[170] = _XtimeD[170]
-XtimeE[170] = _XtimeE[170]
-Sbox[171] = _Sbox[171]
-InvSbox[171] = _InvSbox[171]
-Xtime2Sbox[171] = _Xtime2Sbox[171]
-Xtime3Sbox[171] = _Xtime3Sbox[171]
-Xtime2[171] = _Xtime2[171]
-Xtime9[171] = _Xtime9[171]
-XtimeB[171] = _XtimeB[171]
-XtimeD[171] = _XtimeD[171]
-XtimeE[171] = _XtimeE[171]
-Sbox[172] = _Sbox[172]
-InvSbox[172] = _InvSbox[172]
-Xtime2Sbox[172] = _Xtime2Sbox[172]
-Xtime3Sbox[172] = _Xtime3Sbox[172]
-Xtime2[172] = _Xtime2[172]
-Xtime9[172] = _Xtime9[172]
-XtimeB[172] = _XtimeB[172]
-XtimeD[172] = _XtimeD[172]
-XtimeE[172] = _XtimeE[172]
-Sbox[173] = _Sbox[173]
-InvSbox[173] = _InvSbox[173]
-Xtime2Sbox[173] = _Xtime2Sbox[173]
-Xtime3Sbox[173] = _Xtime3Sbox[173]
-Xtime2[173] = _Xtime2[173]
-Xtime9[173] = _Xtime9[173]
-XtimeB[173] = _XtimeB[173]
-XtimeD[173] = _XtimeD[173]
-XtimeE[173] = _XtimeE[173]
-Sbox[174] = _Sbox[174]
-InvSbox[174] = _InvSbox[174]
-Xtime2Sbox[174] = _Xtime2Sbox[174]
-Xtime3Sbox[174] = _Xtime3Sbox[174]
-Xtime2[174] = _Xtime2[174]
-Xtime9[174] = _Xtime9[174]
-XtimeB[174] = _XtimeB[174]
-XtimeD[174] = _XtimeD[174]
-XtimeE[174] = _XtimeE[174]
-Sbox[175] = _Sbox[175]
-InvSbox[175] = _InvSbox[175]
-Xtime2Sbox[175] = _Xtime2Sbox[175]
-Xtime3Sbox[175] = _Xtime3Sbox[175]
-Xtime2[175] = _Xtime2[175]
-Xtime9[175] = _Xtime9[175]
-XtimeB[175] = _XtimeB[175]
-XtimeD[175] = _XtimeD[175]
-XtimeE[175] = _XtimeE[175]
-Sbox[176] = _Sbox[176]
-InvSbox[176] = _InvSbox[176]
-Xtime2Sbox[176] = _Xtime2Sbox[176]
-Xtime3Sbox[176] = _Xtime3Sbox[176]
-Xtime2[176] = _Xtime2[176]
-Xtime9[176] = _Xtime9[176]
-XtimeB[176] = _XtimeB[176]
-XtimeD[176] = _XtimeD[176]
-XtimeE[176] = _XtimeE[176]
-Sbox[177] = _Sbox[177]
-InvSbox[177] = _InvSbox[177]
-Xtime2Sbox[177] = _Xtime2Sbox[177]
-Xtime3Sbox[177] = _Xtime3Sbox[177]
-Xtime2[177] = _Xtime2[177]
-Xtime9[177] = _Xtime9[177]
-XtimeB[177] = _XtimeB[177]
-XtimeD[177] = _XtimeD[177]
-XtimeE[177] = _XtimeE[177]
-Sbox[178] = _Sbox[178]
-InvSbox[178] = _InvSbox[178]
-Xtime2Sbox[178] = _Xtime2Sbox[178]
-Xtime3Sbox[178] = _Xtime3Sbox[178]
-Xtime2[178] = _Xtime2[178]
-Xtime9[178] = _Xtime9[178]
-XtimeB[178] = _XtimeB[178]
-XtimeD[178] = _XtimeD[178]
-XtimeE[178] = _XtimeE[178]
-Sbox[179] = _Sbox[179]
-InvSbox[179] = _InvSbox[179]
-Xtime2Sbox[179] = _Xtime2Sbox[179]
-Xtime3Sbox[179] = _Xtime3Sbox[179]
-Xtime2[179] = _Xtime2[179]
-Xtime9[179] = _Xtime9[179]
-XtimeB[179] = _XtimeB[179]
-XtimeD[179] = _XtimeD[179]
-XtimeE[179] = _XtimeE[179]
-Sbox[180] = _Sbox[180]
-InvSbox[180] = _InvSbox[180]
-Xtime2Sbox[180] = _Xtime2Sbox[180]
-Xtime3Sbox[180] = _Xtime3Sbox[180]
-Xtime2[180] = _Xtime2[180]
-Xtime9[180] = _Xtime9[180]
-XtimeB[180] = _XtimeB[180]
-XtimeD[180] = _XtimeD[180]
-XtimeE[180] = _XtimeE[180]
-Sbox[181] = _Sbox[181]
-InvSbox[181] = _InvSbox[181]
-Xtime2Sbox[181] = _Xtime2Sbox[181]
-Xtime3Sbox[181] = _Xtime3Sbox[181]
-Xtime2[181] = _Xtime2[181]
-Xtime9[181] = _Xtime9[181]
-XtimeB[181] = _XtimeB[181]
-XtimeD[181] = _XtimeD[181]
-XtimeE[181] = _XtimeE[181]
-Sbox[182] = _Sbox[182]
-InvSbox[182] = _InvSbox[182]
-Xtime2Sbox[182] = _Xtime2Sbox[182]
-Xtime3Sbox[182] = _Xtime3Sbox[182]
-Xtime2[182] = _Xtime2[182]
-Xtime9[182] = _Xtime9[182]
-XtimeB[182] = _XtimeB[182]
-XtimeD[182] = _XtimeD[182]
-XtimeE[182] = _XtimeE[182]
-Sbox[183] = _Sbox[183]
-InvSbox[183] = _InvSbox[183]
-Xtime2Sbox[183] = _Xtime2Sbox[183]
-Xtime3Sbox[183] = _Xtime3Sbox[183]
-Xtime2[183] = _Xtime2[183]
-Xtime9[183] = _Xtime9[183]
-XtimeB[183] = _XtimeB[183]
-XtimeD[183] = _XtimeD[183]
-XtimeE[183] = _XtimeE[183]
-Sbox[184] = _Sbox[184]
-InvSbox[184] = _InvSbox[184]
-Xtime2Sbox[184] = _Xtime2Sbox[184]
-Xtime3Sbox[184] = _Xtime3Sbox[184]
-Xtime2[184] = _Xtime2[184]
-Xtime9[184] = _Xtime9[184]
-XtimeB[184] = _XtimeB[184]
-XtimeD[184] = _XtimeD[184]
-XtimeE[184] = _XtimeE[184]
-Sbox[185] = _Sbox[185]
-InvSbox[185] = _InvSbox[185]
-Xtime2Sbox[185] = _Xtime2Sbox[185]
-Xtime3Sbox[185] = _Xtime3Sbox[185]
-Xtime2[185] = _Xtime2[185]
-Xtime9[185] = _Xtime9[185]
-XtimeB[185] = _XtimeB[185]
-XtimeD[185] = _XtimeD[185]
-XtimeE[185] = _XtimeE[185]
-Sbox[186] = _Sbox[186]
-InvSbox[186] = _InvSbox[186]
-Xtime2Sbox[186] = _Xtime2Sbox[186]
-Xtime3Sbox[186] = _Xtime3Sbox[186]
-Xtime2[186] = _Xtime2[186]
-Xtime9[186] = _Xtime9[186]
-XtimeB[186] = _XtimeB[186]
-XtimeD[186] = _XtimeD[186]
-XtimeE[186] = _XtimeE[186]
-Sbox[187] = _Sbox[187]
-InvSbox[187] = _InvSbox[187]
-Xtime2Sbox[187] = _Xtime2Sbox[187]
-Xtime3Sbox[187] = _Xtime3Sbox[187]
-Xtime2[187] = _Xtime2[187]
-Xtime9[187] = _Xtime9[187]
-XtimeB[187] = _XtimeB[187]
-XtimeD[187] = _XtimeD[187]
-XtimeE[187] = _XtimeE[187]
-Sbox[188] = _Sbox[188]
-InvSbox[188] = _InvSbox[188]
-Xtime2Sbox[188] = _Xtime2Sbox[188]
-Xtime3Sbox[188] = _Xtime3Sbox[188]
-Xtime2[188] = _Xtime2[188]
-Xtime9[188] = _Xtime9[188]
-XtimeB[188] = _XtimeB[188]
-XtimeD[188] = _XtimeD[188]
-XtimeE[188] = _XtimeE[188]
-Sbox[189] = _Sbox[189]
-InvSbox[189] = _InvSbox[189]
-Xtime2Sbox[189] = _Xtime2Sbox[189]
-Xtime3Sbox[189] = _Xtime3Sbox[189]
-Xtime2[189] = _Xtime2[189]
-Xtime9[189] = _Xtime9[189]
-XtimeB[189] = _XtimeB[189]
-XtimeD[189] = _XtimeD[189]
-XtimeE[189] = _XtimeE[189]
-Sbox[190] = _Sbox[190]
-InvSbox[190] = _InvSbox[190]
-Xtime2Sbox[190] = _Xtime2Sbox[190]
-Xtime3Sbox[190] = _Xtime3Sbox[190]
-Xtime2[190] = _Xtime2[190]
-Xtime9[190] = _Xtime9[190]
-XtimeB[190] = _XtimeB[190]
-XtimeD[190] = _XtimeD[190]
-XtimeE[190] = _XtimeE[190]
-Sbox[191] = _Sbox[191]
-InvSbox[191] = _InvSbox[191]
-Xtime2Sbox[191] = _Xtime2Sbox[191]
-Xtime3Sbox[191] = _Xtime3Sbox[191]
-Xtime2[191] = _Xtime2[191]
-Xtime9[191] = _Xtime9[191]
-XtimeB[191] = _XtimeB[191]
-XtimeD[191] = _XtimeD[191]
-XtimeE[191] = _XtimeE[191]
-Sbox[192] = _Sbox[192]
-InvSbox[192] = _InvSbox[192]
-Xtime2Sbox[192] = _Xtime2Sbox[192]
-Xtime3Sbox[192] = _Xtime3Sbox[192]
-Xtime2[192] = _Xtime2[192]
-Xtime9[192] = _Xtime9[192]
-XtimeB[192] = _XtimeB[192]
-XtimeD[192] = _XtimeD[192]
-XtimeE[192] = _XtimeE[192]
-Sbox[193] = _Sbox[193]
-InvSbox[193] = _InvSbox[193]
-Xtime2Sbox[193] = _Xtime2Sbox[193]
-Xtime3Sbox[193] = _Xtime3Sbox[193]
-Xtime2[193] = _Xtime2[193]
-Xtime9[193] = _Xtime9[193]
-XtimeB[193] = _XtimeB[193]
-XtimeD[193] = _XtimeD[193]
-XtimeE[193] = _XtimeE[193]
-Sbox[194] = _Sbox[194]
-InvSbox[194] = _InvSbox[194]
-Xtime2Sbox[194] = _Xtime2Sbox[194]
-Xtime3Sbox[194] = _Xtime3Sbox[194]
-Xtime2[194] = _Xtime2[194]
-Xtime9[194] = _Xtime9[194]
-XtimeB[194] = _XtimeB[194]
-XtimeD[194] = _XtimeD[194]
-XtimeE[194] = _XtimeE[194]
-Sbox[195] = _Sbox[195]
-InvSbox[195] = _InvSbox[195]
-Xtime2Sbox[195] = _Xtime2Sbox[195]
-Xtime3Sbox[195] = _Xtime3Sbox[195]
-Xtime2[195] = _Xtime2[195]
-Xtime9[195] = _Xtime9[195]
-XtimeB[195] = _XtimeB[195]
-XtimeD[195] = _XtimeD[195]
-XtimeE[195] = _XtimeE[195]
-Sbox[196] = _Sbox[196]
-InvSbox[196] = _InvSbox[196]
-Xtime2Sbox[196] = _Xtime2Sbox[196]
-Xtime3Sbox[196] = _Xtime3Sbox[196]
-Xtime2[196] = _Xtime2[196]
-Xtime9[196] = _Xtime9[196]
-XtimeB[196] = _XtimeB[196]
-XtimeD[196] = _XtimeD[196]
-XtimeE[196] = _XtimeE[196]
-Sbox[197] = _Sbox[197]
-InvSbox[197] = _InvSbox[197]
-Xtime2Sbox[197] = _Xtime2Sbox[197]
-Xtime3Sbox[197] = _Xtime3Sbox[197]
-Xtime2[197] = _Xtime2[197]
-Xtime9[197] = _Xtime9[197]
-XtimeB[197] = _XtimeB[197]
-XtimeD[197] = _XtimeD[197]
-XtimeE[197] = _XtimeE[197]
-Sbox[198] = _Sbox[198]
-InvSbox[198] = _InvSbox[198]
-Xtime2Sbox[198] = _Xtime2Sbox[198]
-Xtime3Sbox[198] = _Xtime3Sbox[198]
-Xtime2[198] = _Xtime2[198]
-Xtime9[198] = _Xtime9[198]
-XtimeB[198] = _XtimeB[198]
-XtimeD[198] = _XtimeD[198]
-XtimeE[198] = _XtimeE[198]
-Sbox[199] = _Sbox[199]
-InvSbox[199] = _InvSbox[199]
-Xtime2Sbox[199] = _Xtime2Sbox[199]
-Xtime3Sbox[199] = _Xtime3Sbox[199]
-Xtime2[199] = _Xtime2[199]
-Xtime9[199] = _Xtime9[199]
-XtimeB[199] = _XtimeB[199]
-XtimeD[199] = _XtimeD[199]
-XtimeE[199] = _XtimeE[199]
-Sbox[200] = _Sbox[200]
-InvSbox[200] = _InvSbox[200]
-Xtime2Sbox[200] = _Xtime2Sbox[200]
-Xtime3Sbox[200] = _Xtime3Sbox[200]
-Xtime2[200] = _Xtime2[200]
-Xtime9[200] = _Xtime9[200]
-XtimeB[200] = _XtimeB[200]
-XtimeD[200] = _XtimeD[200]
-XtimeE[200] = _XtimeE[200]
-Sbox[201] = _Sbox[201]
-InvSbox[201] = _InvSbox[201]
-Xtime2Sbox[201] = _Xtime2Sbox[201]
-Xtime3Sbox[201] = _Xtime3Sbox[201]
-Xtime2[201] = _Xtime2[201]
-Xtime9[201] = _Xtime9[201]
-XtimeB[201] = _XtimeB[201]
-XtimeD[201] = _XtimeD[201]
-XtimeE[201] = _XtimeE[201]
-Sbox[202] = _Sbox[202]
-InvSbox[202] = _InvSbox[202]
-Xtime2Sbox[202] = _Xtime2Sbox[202]
-Xtime3Sbox[202] = _Xtime3Sbox[202]
-Xtime2[202] = _Xtime2[202]
-Xtime9[202] = _Xtime9[202]
-XtimeB[202] = _XtimeB[202]
-XtimeD[202] = _XtimeD[202]
-XtimeE[202] = _XtimeE[202]
-Sbox[203] = _Sbox[203]
-InvSbox[203] = _InvSbox[203]
-Xtime2Sbox[203] = _Xtime2Sbox[203]
-Xtime3Sbox[203] = _Xtime3Sbox[203]
-Xtime2[203] = _Xtime2[203]
-Xtime9[203] = _Xtime9[203]
-XtimeB[203] = _XtimeB[203]
-XtimeD[203] = _XtimeD[203]
-XtimeE[203] = _XtimeE[203]
-Sbox[204] = _Sbox[204]
-InvSbox[204] = _InvSbox[204]
-Xtime2Sbox[204] = _Xtime2Sbox[204]
-Xtime3Sbox[204] = _Xtime3Sbox[204]
-Xtime2[204] = _Xtime2[204]
-Xtime9[204] = _Xtime9[204]
-XtimeB[204] = _XtimeB[204]
-XtimeD[204] = _XtimeD[204]
-XtimeE[204] = _XtimeE[204]
-Sbox[205] = _Sbox[205]
-InvSbox[205] = _InvSbox[205]
-Xtime2Sbox[205] = _Xtime2Sbox[205]
-Xtime3Sbox[205] = _Xtime3Sbox[205]
-Xtime2[205] = _Xtime2[205]
-Xtime9[205] = _Xtime9[205]
-XtimeB[205] = _XtimeB[205]
-XtimeD[205] = _XtimeD[205]
-XtimeE[205] = _XtimeE[205]
-Sbox[206] = _Sbox[206]
-InvSbox[206] = _InvSbox[206]
-Xtime2Sbox[206] = _Xtime2Sbox[206]
-Xtime3Sbox[206] = _Xtime3Sbox[206]
-Xtime2[206] = _Xtime2[206]
-Xtime9[206] = _Xtime9[206]
-XtimeB[206] = _XtimeB[206]
-XtimeD[206] = _XtimeD[206]
-XtimeE[206] = _XtimeE[206]
-Sbox[207] = _Sbox[207]
-InvSbox[207] = _InvSbox[207]
-Xtime2Sbox[207] = _Xtime2Sbox[207]
-Xtime3Sbox[207] = _Xtime3Sbox[207]
-Xtime2[207] = _Xtime2[207]
-Xtime9[207] = _Xtime9[207]
-XtimeB[207] = _XtimeB[207]
-XtimeD[207] = _XtimeD[207]
-XtimeE[207] = _XtimeE[207]
-Sbox[208] = _Sbox[208]
-InvSbox[208] = _InvSbox[208]
-Xtime2Sbox[208] = _Xtime2Sbox[208]
-Xtime3Sbox[208] = _Xtime3Sbox[208]
-Xtime2[208] = _Xtime2[208]
-Xtime9[208] = _Xtime9[208]
-XtimeB[208] = _XtimeB[208]
-XtimeD[208] = _XtimeD[208]
-XtimeE[208] = _XtimeE[208]
-Sbox[209] = _Sbox[209]
-InvSbox[209] = _InvSbox[209]
-Xtime2Sbox[209] = _Xtime2Sbox[209]
-Xtime3Sbox[209] = _Xtime3Sbox[209]
-Xtime2[209] = _Xtime2[209]
-Xtime9[209] = _Xtime9[209]
-XtimeB[209] = _XtimeB[209]
-XtimeD[209] = _XtimeD[209]
-XtimeE[209] = _XtimeE[209]
-Sbox[210] = _Sbox[210]
-InvSbox[210] = _InvSbox[210]
-Xtime2Sbox[210] = _Xtime2Sbox[210]
-Xtime3Sbox[210] = _Xtime3Sbox[210]
-Xtime2[210] = _Xtime2[210]
-Xtime9[210] = _Xtime9[210]
-XtimeB[210] = _XtimeB[210]
-XtimeD[210] = _XtimeD[210]
-XtimeE[210] = _XtimeE[210]
-Sbox[211] = _Sbox[211]
-InvSbox[211] = _InvSbox[211]
-Xtime2Sbox[211] = _Xtime2Sbox[211]
-Xtime3Sbox[211] = _Xtime3Sbox[211]
-Xtime2[211] = _Xtime2[211]
-Xtime9[211] = _Xtime9[211]
-XtimeB[211] = _XtimeB[211]
-XtimeD[211] = _XtimeD[211]
-XtimeE[211] = _XtimeE[211]
-Sbox[212] = _Sbox[212]
-InvSbox[212] = _InvSbox[212]
-Xtime2Sbox[212] = _Xtime2Sbox[212]
-Xtime3Sbox[212] = _Xtime3Sbox[212]
-Xtime2[212] = _Xtime2[212]
-Xtime9[212] = _Xtime9[212]
-XtimeB[212] = _XtimeB[212]
-XtimeD[212] = _XtimeD[212]
-XtimeE[212] = _XtimeE[212]
-Sbox[213] = _Sbox[213]
-InvSbox[213] = _InvSbox[213]
-Xtime2Sbox[213] = _Xtime2Sbox[213]
-Xtime3Sbox[213] = _Xtime3Sbox[213]
-Xtime2[213] = _Xtime2[213]
-Xtime9[213] = _Xtime9[213]
-XtimeB[213] = _XtimeB[213]
-XtimeD[213] = _XtimeD[213]
-XtimeE[213] = _XtimeE[213]
-Sbox[214] = _Sbox[214]
-InvSbox[214] = _InvSbox[214]
-Xtime2Sbox[214] = _Xtime2Sbox[214]
-Xtime3Sbox[214] = _Xtime3Sbox[214]
-Xtime2[214] = _Xtime2[214]
-Xtime9[214] = _Xtime9[214]
-XtimeB[214] = _XtimeB[214]
-XtimeD[214] = _XtimeD[214]
-XtimeE[214] = _XtimeE[214]
-Sbox[215] = _Sbox[215]
-InvSbox[215] = _InvSbox[215]
-Xtime2Sbox[215] = _Xtime2Sbox[215]
-Xtime3Sbox[215] = _Xtime3Sbox[215]
-Xtime2[215] = _Xtime2[215]
-Xtime9[215] = _Xtime9[215]
-XtimeB[215] = _XtimeB[215]
-XtimeD[215] = _XtimeD[215]
-XtimeE[215] = _XtimeE[215]
-Sbox[216] = _Sbox[216]
-InvSbox[216] = _InvSbox[216]
-Xtime2Sbox[216] = _Xtime2Sbox[216]
-Xtime3Sbox[216] = _Xtime3Sbox[216]
-Xtime2[216] = _Xtime2[216]
-Xtime9[216] = _Xtime9[216]
-XtimeB[216] = _XtimeB[216]
-XtimeD[216] = _XtimeD[216]
-XtimeE[216] = _XtimeE[216]
-Sbox[217] = _Sbox[217]
-InvSbox[217] = _InvSbox[217]
-Xtime2Sbox[217] = _Xtime2Sbox[217]
-Xtime3Sbox[217] = _Xtime3Sbox[217]
-Xtime2[217] = _Xtime2[217]
-Xtime9[217] = _Xtime9[217]
-XtimeB[217] = _XtimeB[217]
-XtimeD[217] = _XtimeD[217]
-XtimeE[217] = _XtimeE[217]
-Sbox[218] = _Sbox[218]
-InvSbox[218] = _InvSbox[218]
-Xtime2Sbox[218] = _Xtime2Sbox[218]
-Xtime3Sbox[218] = _Xtime3Sbox[218]
-Xtime2[218] = _Xtime2[218]
-Xtime9[218] = _Xtime9[218]
-XtimeB[218] = _XtimeB[218]
-XtimeD[218] = _XtimeD[218]
-XtimeE[218] = _XtimeE[218]
-Sbox[219] = _Sbox[219]
-InvSbox[219] = _InvSbox[219]
-Xtime2Sbox[219] = _Xtime2Sbox[219]
-Xtime3Sbox[219] = _Xtime3Sbox[219]
-Xtime2[219] = _Xtime2[219]
-Xtime9[219] = _Xtime9[219]
-XtimeB[219] = _XtimeB[219]
-XtimeD[219] = _XtimeD[219]
-XtimeE[219] = _XtimeE[219]
-Sbox[220] = _Sbox[220]
-InvSbox[220] = _InvSbox[220]
-Xtime2Sbox[220] = _Xtime2Sbox[220]
-Xtime3Sbox[220] = _Xtime3Sbox[220]
-Xtime2[220] = _Xtime2[220]
-Xtime9[220] = _Xtime9[220]
-XtimeB[220] = _XtimeB[220]
-XtimeD[220] = _XtimeD[220]
-XtimeE[220] = _XtimeE[220]
-Sbox[221] = _Sbox[221]
-InvSbox[221] = _InvSbox[221]
-Xtime2Sbox[221] = _Xtime2Sbox[221]
-Xtime3Sbox[221] = _Xtime3Sbox[221]
-Xtime2[221] = _Xtime2[221]
-Xtime9[221] = _Xtime9[221]
-XtimeB[221] = _XtimeB[221]
-XtimeD[221] = _XtimeD[221]
-XtimeE[221] = _XtimeE[221]
-Sbox[222] = _Sbox[222]
-InvSbox[222] = _InvSbox[222]
-Xtime2Sbox[222] = _Xtime2Sbox[222]
-Xtime3Sbox[222] = _Xtime3Sbox[222]
-Xtime2[222] = _Xtime2[222]
-Xtime9[222] = _Xtime9[222]
-XtimeB[222] = _XtimeB[222]
-XtimeD[222] = _XtimeD[222]
-XtimeE[222] = _XtimeE[222]
-Sbox[223] = _Sbox[223]
-InvSbox[223] = _InvSbox[223]
-Xtime2Sbox[223] = _Xtime2Sbox[223]
-Xtime3Sbox[223] = _Xtime3Sbox[223]
-Xtime2[223] = _Xtime2[223]
-Xtime9[223] = _Xtime9[223]
-XtimeB[223] = _XtimeB[223]
-XtimeD[223] = _XtimeD[223]
-XtimeE[223] = _XtimeE[223]
-Sbox[224] = _Sbox[224]
-InvSbox[224] = _InvSbox[224]
-Xtime2Sbox[224] = _Xtime2Sbox[224]
-Xtime3Sbox[224] = _Xtime3Sbox[224]
-Xtime2[224] = _Xtime2[224]
-Xtime9[224] = _Xtime9[224]
-XtimeB[224] = _XtimeB[224]
-XtimeD[224] = _XtimeD[224]
-XtimeE[224] = _XtimeE[224]
-Sbox[225] = _Sbox[225]
-InvSbox[225] = _InvSbox[225]
-Xtime2Sbox[225] = _Xtime2Sbox[225]
-Xtime3Sbox[225] = _Xtime3Sbox[225]
-Xtime2[225] = _Xtime2[225]
-Xtime9[225] = _Xtime9[225]
-XtimeB[225] = _XtimeB[225]
-XtimeD[225] = _XtimeD[225]
-XtimeE[225] = _XtimeE[225]
-Sbox[226] = _Sbox[226]
-InvSbox[226] = _InvSbox[226]
-Xtime2Sbox[226] = _Xtime2Sbox[226]
-Xtime3Sbox[226] = _Xtime3Sbox[226]
-Xtime2[226] = _Xtime2[226]
-Xtime9[226] = _Xtime9[226]
-XtimeB[226] = _XtimeB[226]
-XtimeD[226] = _XtimeD[226]
-XtimeE[226] = _XtimeE[226]
-Sbox[227] = _Sbox[227]
-InvSbox[227] = _InvSbox[227]
-Xtime2Sbox[227] = _Xtime2Sbox[227]
-Xtime3Sbox[227] = _Xtime3Sbox[227]
-Xtime2[227] = _Xtime2[227]
-Xtime9[227] = _Xtime9[227]
-XtimeB[227] = _XtimeB[227]
-XtimeD[227] = _XtimeD[227]
-XtimeE[227] = _XtimeE[227]
-Sbox[228] = _Sbox[228]
-InvSbox[228] = _InvSbox[228]
-Xtime2Sbox[228] = _Xtime2Sbox[228]
-Xtime3Sbox[228] = _Xtime3Sbox[228]
-Xtime2[228] = _Xtime2[228]
-Xtime9[228] = _Xtime9[228]
-XtimeB[228] = _XtimeB[228]
-XtimeD[228] = _XtimeD[228]
-XtimeE[228] = _XtimeE[228]
-Sbox[229] = _Sbox[229]
-InvSbox[229] = _InvSbox[229]
-Xtime2Sbox[229] = _Xtime2Sbox[229]
-Xtime3Sbox[229] = _Xtime3Sbox[229]
-Xtime2[229] = _Xtime2[229]
-Xtime9[229] = _Xtime9[229]
-XtimeB[229] = _XtimeB[229]
-XtimeD[229] = _XtimeD[229]
-XtimeE[229] = _XtimeE[229]
-Sbox[230] = _Sbox[230]
-InvSbox[230] = _InvSbox[230]
-Xtime2Sbox[230] = _Xtime2Sbox[230]
-Xtime3Sbox[230] = _Xtime3Sbox[230]
-Xtime2[230] = _Xtime2[230]
-Xtime9[230] = _Xtime9[230]
-XtimeB[230] = _XtimeB[230]
-XtimeD[230] = _XtimeD[230]
-XtimeE[230] = _XtimeE[230]
-Sbox[231] = _Sbox[231]
-InvSbox[231] = _InvSbox[231]
-Xtime2Sbox[231] = _Xtime2Sbox[231]
-Xtime3Sbox[231] = _Xtime3Sbox[231]
-Xtime2[231] = _Xtime2[231]
-Xtime9[231] = _Xtime9[231]
-XtimeB[231] = _XtimeB[231]
-XtimeD[231] = _XtimeD[231]
-XtimeE[231] = _XtimeE[231]
-Sbox[232] = _Sbox[232]
-InvSbox[232] = _InvSbox[232]
-Xtime2Sbox[232] = _Xtime2Sbox[232]
-Xtime3Sbox[232] = _Xtime3Sbox[232]
-Xtime2[232] = _Xtime2[232]
-Xtime9[232] = _Xtime9[232]
-XtimeB[232] = _XtimeB[232]
-XtimeD[232] = _XtimeD[232]
-XtimeE[232] = _XtimeE[232]
-Sbox[233] = _Sbox[233]
-InvSbox[233] = _InvSbox[233]
-Xtime2Sbox[233] = _Xtime2Sbox[233]
-Xtime3Sbox[233] = _Xtime3Sbox[233]
-Xtime2[233] = _Xtime2[233]
-Xtime9[233] = _Xtime9[233]
-XtimeB[233] = _XtimeB[233]
-XtimeD[233] = _XtimeD[233]
-XtimeE[233] = _XtimeE[233]
-Sbox[234] = _Sbox[234]
-InvSbox[234] = _InvSbox[234]
-Xtime2Sbox[234] = _Xtime2Sbox[234]
-Xtime3Sbox[234] = _Xtime3Sbox[234]
-Xtime2[234] = _Xtime2[234]
-Xtime9[234] = _Xtime9[234]
-XtimeB[234] = _XtimeB[234]
-XtimeD[234] = _XtimeD[234]
-XtimeE[234] = _XtimeE[234]
-Sbox[235] = _Sbox[235]
-InvSbox[235] = _InvSbox[235]
-Xtime2Sbox[235] = _Xtime2Sbox[235]
-Xtime3Sbox[235] = _Xtime3Sbox[235]
-Xtime2[235] = _Xtime2[235]
-Xtime9[235] = _Xtime9[235]
-XtimeB[235] = _XtimeB[235]
-XtimeD[235] = _XtimeD[235]
-XtimeE[235] = _XtimeE[235]
-Sbox[236] = _Sbox[236]
-InvSbox[236] = _InvSbox[236]
-Xtime2Sbox[236] = _Xtime2Sbox[236]
-Xtime3Sbox[236] = _Xtime3Sbox[236]
-Xtime2[236] = _Xtime2[236]
-Xtime9[236] = _Xtime9[236]
-XtimeB[236] = _XtimeB[236]
-XtimeD[236] = _XtimeD[236]
-XtimeE[236] = _XtimeE[236]
-Sbox[237] = _Sbox[237]
-InvSbox[237] = _InvSbox[237]
-Xtime2Sbox[237] = _Xtime2Sbox[237]
-Xtime3Sbox[237] = _Xtime3Sbox[237]
-Xtime2[237] = _Xtime2[237]
-Xtime9[237] = _Xtime9[237]
-XtimeB[237] = _XtimeB[237]
-XtimeD[237] = _XtimeD[237]
-XtimeE[237] = _XtimeE[237]
-Sbox[238] = _Sbox[238]
-InvSbox[238] = _InvSbox[238]
-Xtime2Sbox[238] = _Xtime2Sbox[238]
-Xtime3Sbox[238] = _Xtime3Sbox[238]
-Xtime2[238] = _Xtime2[238]
-Xtime9[238] = _Xtime9[238]
-XtimeB[238] = _XtimeB[238]
-XtimeD[238] = _XtimeD[238]
-XtimeE[238] = _XtimeE[238]
-Sbox[239] = _Sbox[239]
-InvSbox[239] = _InvSbox[239]
-Xtime2Sbox[239] = _Xtime2Sbox[239]
-Xtime3Sbox[239] = _Xtime3Sbox[239]
-Xtime2[239] = _Xtime2[239]
-Xtime9[239] = _Xtime9[239]
-XtimeB[239] = _XtimeB[239]
-XtimeD[239] = _XtimeD[239]
-XtimeE[239] = _XtimeE[239]
-Sbox[240] = _Sbox[240]
-InvSbox[240] = _InvSbox[240]
-Xtime2Sbox[240] = _Xtime2Sbox[240]
-Xtime3Sbox[240] = _Xtime3Sbox[240]
-Xtime2[240] = _Xtime2[240]
-Xtime9[240] = _Xtime9[240]
-XtimeB[240] = _XtimeB[240]
-XtimeD[240] = _XtimeD[240]
-XtimeE[240] = _XtimeE[240]
-Sbox[241] = _Sbox[241]
-InvSbox[241] = _InvSbox[241]
-Xtime2Sbox[241] = _Xtime2Sbox[241]
-Xtime3Sbox[241] = _Xtime3Sbox[241]
-Xtime2[241] = _Xtime2[241]
-Xtime9[241] = _Xtime9[241]
-XtimeB[241] = _XtimeB[241]
-XtimeD[241] = _XtimeD[241]
-XtimeE[241] = _XtimeE[241]
-Sbox[242] = _Sbox[242]
-InvSbox[242] = _InvSbox[242]
-Xtime2Sbox[242] = _Xtime2Sbox[242]
-Xtime3Sbox[242] = _Xtime3Sbox[242]
-Xtime2[242] = _Xtime2[242]
-Xtime9[242] = _Xtime9[242]
-XtimeB[242] = _XtimeB[242]
-XtimeD[242] = _XtimeD[242]
-XtimeE[242] = _XtimeE[242]
-Sbox[243] = _Sbox[243]
-InvSbox[243] = _InvSbox[243]
-Xtime2Sbox[243] = _Xtime2Sbox[243]
-Xtime3Sbox[243] = _Xtime3Sbox[243]
-Xtime2[243] = _Xtime2[243]
-Xtime9[243] = _Xtime9[243]
-XtimeB[243] = _XtimeB[243]
-XtimeD[243] = _XtimeD[243]
-XtimeE[243] = _XtimeE[243]
-Sbox[244] = _Sbox[244]
-InvSbox[244] = _InvSbox[244]
-Xtime2Sbox[244] = _Xtime2Sbox[244]
-Xtime3Sbox[244] = _Xtime3Sbox[244]
-Xtime2[244] = _Xtime2[244]
-Xtime9[244] = _Xtime9[244]
-XtimeB[244] = _XtimeB[244]
-XtimeD[244] = _XtimeD[244]
-XtimeE[244] = _XtimeE[244]
-Sbox[245] = _Sbox[245]
-InvSbox[245] = _InvSbox[245]
-Xtime2Sbox[245] = _Xtime2Sbox[245]
-Xtime3Sbox[245] = _Xtime3Sbox[245]
-Xtime2[245] = _Xtime2[245]
-Xtime9[245] = _Xtime9[245]
-XtimeB[245] = _XtimeB[245]
-XtimeD[245] = _XtimeD[245]
-XtimeE[245] = _XtimeE[245]
-Sbox[246] = _Sbox[246]
-InvSbox[246] = _InvSbox[246]
-Xtime2Sbox[246] = _Xtime2Sbox[246]
-Xtime3Sbox[246] = _Xtime3Sbox[246]
-Xtime2[246] = _Xtime2[246]
-Xtime9[246] = _Xtime9[246]
-XtimeB[246] = _XtimeB[246]
-XtimeD[246] = _XtimeD[246]
-XtimeE[246] = _XtimeE[246]
-Sbox[247] = _Sbox[247]
-InvSbox[247] = _InvSbox[247]
-Xtime2Sbox[247] = _Xtime2Sbox[247]
-Xtime3Sbox[247] = _Xtime3Sbox[247]
-Xtime2[247] = _Xtime2[247]
-Xtime9[247] = _Xtime9[247]
-XtimeB[247] = _XtimeB[247]
-XtimeD[247] = _XtimeD[247]
-XtimeE[247] = _XtimeE[247]
-Sbox[248] = _Sbox[248]
-InvSbox[248] = _InvSbox[248]
-Xtime2Sbox[248] = _Xtime2Sbox[248]
-Xtime3Sbox[248] = _Xtime3Sbox[248]
-Xtime2[248] = _Xtime2[248]
-Xtime9[248] = _Xtime9[248]
-XtimeB[248] = _XtimeB[248]
-XtimeD[248] = _XtimeD[248]
-XtimeE[248] = _XtimeE[248]
-Sbox[249] = _Sbox[249]
-InvSbox[249] = _InvSbox[249]
-Xtime2Sbox[249] = _Xtime2Sbox[249]
-Xtime3Sbox[249] = _Xtime3Sbox[249]
-Xtime2[249] = _Xtime2[249]
-Xtime9[249] = _Xtime9[249]
-XtimeB[249] = _XtimeB[249]
-XtimeD[249] = _XtimeD[249]
-XtimeE[249] = _XtimeE[249]
-Sbox[250] = _Sbox[250]
-InvSbox[250] = _InvSbox[250]
-Xtime2Sbox[250] = _Xtime2Sbox[250]
-Xtime3Sbox[250] = _Xtime3Sbox[250]
-Xtime2[250] = _Xtime2[250]
-Xtime9[250] = _Xtime9[250]
-XtimeB[250] = _XtimeB[250]
-XtimeD[250] = _XtimeD[250]
-XtimeE[250] = _XtimeE[250]
-Sbox[251] = _Sbox[251]
-InvSbox[251] = _InvSbox[251]
-Xtime2Sbox[251] = _Xtime2Sbox[251]
-Xtime3Sbox[251] = _Xtime3Sbox[251]
-Xtime2[251] = _Xtime2[251]
-Xtime9[251] = _Xtime9[251]
-XtimeB[251] = _XtimeB[251]
-XtimeD[251] = _XtimeD[251]
-XtimeE[251] = _XtimeE[251]
-Sbox[252] = _Sbox[252]
-InvSbox[252] = _InvSbox[252]
-Xtime2Sbox[252] = _Xtime2Sbox[252]
-Xtime3Sbox[252] = _Xtime3Sbox[252]
-Xtime2[252] = _Xtime2[252]
-Xtime9[252] = _Xtime9[252]
-XtimeB[252] = _XtimeB[252]
-XtimeD[252] = _XtimeD[252]
-XtimeE[252] = _XtimeE[252]
-Sbox[253] = _Sbox[253]
-InvSbox[253] = _InvSbox[253]
-Xtime2Sbox[253] = _Xtime2Sbox[253]
-Xtime3Sbox[253] = _Xtime3Sbox[253]
-Xtime2[253] = _Xtime2[253]
-Xtime9[253] = _Xtime9[253]
-XtimeB[253] = _XtimeB[253]
-XtimeD[253] = _XtimeD[253]
-XtimeE[253] = _XtimeE[253]
-Sbox[254] = _Sbox[254]
-InvSbox[254] = _InvSbox[254]
-Xtime2Sbox[254] = _Xtime2Sbox[254]
-Xtime3Sbox[254] = _Xtime3Sbox[254]
-Xtime2[254] = _Xtime2[254]
-Xtime9[254] = _Xtime9[254]
-XtimeB[254] = _XtimeB[254]
-XtimeD[254] = _XtimeD[254]
-XtimeE[254] = _XtimeE[254]
-Sbox[255] = _Sbox[255]
-InvSbox[255] = _InvSbox[255]
-Xtime2Sbox[255] = _Xtime2Sbox[255]
-Xtime3Sbox[255] = _Xtime3Sbox[255]
-Xtime2[255] = _Xtime2[255]
-Xtime9[255] = _Xtime9[255]
-XtimeB[255] = _XtimeB[255]
-XtimeD[255] = _XtimeD[255]
-XtimeE[255] = _XtimeE[255]
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/AESKeyTest.as
deleted file mode 100755 (executable)
index c43fc5f..0000000
+++ /dev/null
@@ -1,1220 +0,0 @@
-/**\r
- * AESKeyTest\r
- * \r
- * A test class for AESKey\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.prng.Random;\r
-       import com.hurlant.crypto.symmetric.AESKey;\r
-       import com.hurlant.crypto.symmetric.ECBMode;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       import flash.utils.getTimer;\r
-       \r
-       public class AESKeyTest extends TestCase\r
-       {\r
-               public function AESKeyTest(h:ITestHarness) {\r
-                       super(h, "AESKey Test");\r
-                       \r
-                       runTest(testGetBlockSize, "AES Block Size");\r
-                       runTest(testECB_TBL, "AES ECB Test Vectors");\r
-\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               \r
-               public function testGetBlockSize():void {\r
-                       var key:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<32;i++) {\r
-                               key[i]=i;\r
-                       }\r
-                       var k:AESKey = new AESKey(key);\r
-                       assert("128bit block size", k.getBlockSize()==16);\r
-               }\r
-               \r
-               /**\r
-                * http://csrc.nist.gov/encryption/aes/rijndael/rijndael-vals.zip\r
-                * this uses ecb_tbl.txt\r
-                * we test encryption and decryption with keys of length 128,192,256 bits.\r
-                */\r
-               public function testECB_TBL():void {\r
-                       var keys:Array = [\r
-                       "00010203050607080A0B0C0D0F101112",\r
-                       "14151617191A1B1C1E1F202123242526",\r
-                       "28292A2B2D2E2F30323334353738393A",\r
-                       "3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F606162",\r
-                       "64656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A",\r
-                       "8C8D8E8F91929394969798999B9C9D9E",\r
-                       "A0A1A2A3A5A6A7A8AAABACADAFB0B1B2",\r
-                       "B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6",\r
-                       "C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA",\r
-                       "DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE",\r
-                       "F0F1F2F3F5F6F7F8FAFBFCFDFE010002",\r
-                       "04050607090A0B0C0E0F101113141516",\r
-                       "2C2D2E2F31323334363738393B3C3D3E",\r
-                       "40414243454647484A4B4C4D4F505152",\r
-                       "54555657595A5B5C5E5F606163646566",\r
-                       "68696A6B6D6E6F70727374757778797A",\r
-                       "7C7D7E7F81828384868788898B8C8D8E",\r
-                       "A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6",\r
-                       "E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2",\r
-                       "08090A0B0D0E0F10121314151718191A",\r
-                       "6C6D6E6F71727374767778797B7C7D7E",\r
-                       "80818283858687888A8B8C8D8F909192",\r
-                       "94959697999A9B9C9E9FA0A1A3A4A5A6",\r
-                       "A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA",\r
-                       "BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE",\r
-                       "D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2",\r
-                       "E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6",\r
-                       "F8F9FAFBFDFEFE00020304050708090A",\r
-                       "0C0D0E0F11121314161718191B1C1D1E",\r
-                       "20212223252627282A2B2C2D2F303132",\r
-                       "34353637393A3B3C3E3F404143444546",\r
-                       "48494A4B4D4E4F50525354555758595A",\r
-                       "5C5D5E5F61626364666768696B6C6D6E",\r
-                       "70717273757677787A7B7C7D7F808182",\r
-                       "84858687898A8B8C8E8F909193949596",\r
-                       "98999A9B9D9E9FA0A2A3A4A5A7A8A9AA",\r
-                       "ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE",\r
-                       "C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2",\r
-                       "D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6",\r
-                       "E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA",\r
-                       "FCFDFEFF01020304060708090B0C0D0E",\r
-                       "10111213151617181A1B1C1D1F202122",\r
-                       "24252627292A2B2C2E2F303133343536",\r
-                       "38393A3B3D3E3F40424344454748494A",\r
-                       "4C4D4E4F51525354565758595B5C5D5E",\r
-                       "60616263656667686A6B6C6D6F707172",\r
-                       "74757677797A7B7C7E7F808183848586",\r
-                       "88898A8B8D8E8F90929394959798999A",\r
-                       "9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE",\r
-                       "B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2",\r
-                       "C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6",\r
-                       "D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA",\r
-                       "ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE",\r
-                       "00010203050607080A0B0C0D0F101112",\r
-                       "14151617191A1B1C1E1F202123242526",\r
-                       "28292A2B2D2E2F30323334353738393A",\r
-                       "3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F606162",\r
-                       "64656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A",\r
-                       "8C8D8E8F91929394969798999B9C9D9E",\r
-                       "A0A1A2A3A5A6A7A8AAABACADAFB0B1B2",\r
-                       "B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6",\r
-                       "C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA",\r
-                       "DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE",\r
-                       "F0F1F2F3F5F6F7F8FAFBFCFDFE010002",\r
-                       "04050607090A0B0C0E0F101113141516",\r
-                       "18191A1B1D1E1F20222324252728292A",\r
-                       "2C2D2E2F31323334363738393B3C3D3E",\r
-                       "40414243454647484A4B4C4D4F505152",\r
-                       "54555657595A5B5C5E5F606163646566",\r
-                       "68696A6B6D6E6F70727374757778797A",\r
-                       "7C7D7E7F81828384868788898B8C8D8E",\r
-                       "90919293959697989A9B9C9D9FA0A1A2",\r
-                       "A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6",\r
-                       "B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA",\r
-                       "CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE",\r
-                       "E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2",\r
-                       "F4F5F6F7F9FAFBFCFEFE010103040506",\r
-                       "08090A0B0D0E0F10121314151718191A",\r
-                       "1C1D1E1F21222324262728292B2C2D2E",\r
-                       "30313233353637383A3B3C3D3F404142",\r
-                       "44454647494A4B4C4E4F505153545556",\r
-                       "58595A5B5D5E5F60626364656768696A",\r
-                       "6C6D6E6F71727374767778797B7C7D7E",\r
-                       "80818283858687888A8B8C8D8F909192",\r
-                       "94959697999A9B9C9E9FA0A1A3A4A5A6",\r
-                       "A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA",\r
-                       "BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE",\r
-                       "D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2",\r
-                       "E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6",\r
-                       "F8F9FAFBFDFEFE00020304050708090A",\r
-                       "0C0D0E0F11121314161718191B1C1D1E",\r
-                       "20212223252627282A2B2C2D2F303132",\r
-                       "34353637393A3B3C3E3F404143444546",\r
-                       "48494A4B4D4E4F50525354555758595A",\r
-                       "5C5D5E5F61626364666768696B6C6D6E",\r
-                       "70717273757677787A7B7C7D7F808182",\r
-                       "84858687898A8B8C8E8F909193949596",\r
-                       "98999A9B9D9E9FA0A2A3A4A5A7A8A9AA",\r
-                       "ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE",\r
-                       "C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2",\r
-                       "D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6",\r
-                       "E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA",\r
-                       "FCFDFEFF01020304060708090B0C0D0E",\r
-                       "10111213151617181A1B1C1D1F202122",\r
-                       "24252627292A2B2C2E2F303133343536",\r
-                       "38393A3B3D3E3F40424344454748494A",\r
-                       "4C4D4E4F51525354565758595B5C5D5E",\r
-                       "60616263656667686A6B6C6D6F707172",\r
-                       "74757677797A7B7C7E7F808183848586",\r
-                       "88898A8B8D8E8F90929394959798999A",\r
-                       "9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE",\r
-                       "B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2",\r
-                       "C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6",\r
-                       "D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA",\r
-                       "ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE",\r
-                       "00010203050607080A0B0C0D0F101112",\r
-                       "14151617191A1B1C1E1F202123242526",\r
-                       "28292A2B2D2E2F30323334353738393A",\r
-                       "3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F606162",\r
-                       "64656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A",\r
-                       "8C8D8E8F91929394969798999B9C9D9E",\r
-                       "A0A1A2A3A5A6A7A8AAABACADAFB0B1B2",\r
-                       "00010203050607080A0B0C0D0F10111214151617191A1B1C",\r
-                       "1E1F20212324252628292A2B2D2E2F30323334353738393A",\r
-                       "3C3D3E3F41424344464748494B4C4D4E5051525355565758",\r
-                       "5A5B5C5D5F60616264656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A8C8D8E8F91929394",\r
-                       "969798999B9C9D9EA0A1A2A3A5A6A7A8AAABACADAFB0B1B2",\r
-                       "B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6C8C9CACBCDCECFD0",\r
-                       "D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE",\r
-                       "F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C",\r
-                       "0E0F10111314151618191A1B1D1E1F20222324252728292A",\r
-                       "2C2D2E2F31323334363738393B3C3D3E4041424345464748",\r
-                       "4A4B4C4D4F50515254555657595A5B5C5E5F606163646566",\r
-                       "68696A6B6D6E6F70727374757778797A7C7D7E7F81828384",\r
-                       "868788898B8C8D8E90919293959697989A9B9C9D9FA0A1A2",\r
-                       "A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6B8B9BABBBDBEBFC0",\r
-                       "C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE",\r
-                       "E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFC",\r
-                       "FEFE01010304050608090A0B0D0E0F10121314151718191A",\r
-                       "1C1D1E1F21222324262728292B2C2D2E3031323335363738",\r
-                       "3A3B3C3D3F40414244454647494A4B4C4E4F505153545556",\r
-                       "58595A5B5D5E5F60626364656768696A6C6D6E6F71727374",\r
-                       "767778797B7C7D7E80818283858687888A8B8C8D8F909192",\r
-                       "94959697999A9B9C9E9FA0A1A3A4A5A6A8A9AAABADAEAFB0",\r
-                       "D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBEC",\r
-                       "2A2B2C2D2F30313234353637393A3B3C3E3F404143444546",\r
-                       "48494A4B4D4E4F50525354555758595A5C5D5E5F61626364",\r
-                       "84858687898A8B8C8E8F90919394959698999A9B9D9E9FA0",\r
-                       "A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE",\r
-                       "C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDC",\r
-                       "1A1B1C1D1F20212224252627292A2B2C2E2F303133343536",\r
-                       "38393A3B3D3E3F40424344454748494A4C4D4E4F51525354",\r
-                       "929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE",\r
-                       "464748494B4C4D4E50515253555657585A5B5C5D5F606162",\r
-                       "828384858788898A8C8D8E8F91929394969798999B9C9D9E",\r
-                       "A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBC",\r
-                       "BEBFC0C1C3C4C5C6C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA",\r
-                       "DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEEF0F1F2F3F5F6F7F8",\r
-                       "FAFBFCFDFE01000204050607090A0B0C0E0F101113141516",\r
-                       "18191A1B1D1E1F20222324252728292A2C2D2E2F31323334",\r
-                       "363738393B3C3D3E40414243454647484A4B4C4D4F505152",\r
-                       "54555657595A5B5C5E5F60616364656668696A6B6D6E6F70",\r
-                       "727374757778797A7C7D7E7F81828384868788898B8C8D8E",\r
-                       "90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABAC",\r
-                       "AEAFB0B1B3B4B5B6B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA",\r
-                       "CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDEE0E1E2E3E5E6E7E8",\r
-                       "EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506",\r
-                       "08090A0B0D0E0F10121314151718191A1C1D1E1F21222324",\r
-                       "262728292B2C2D2E30313233353637383A3B3C3D3F404142",\r
-                       "44454647494A4B4C4E4F50515354555658595A5B5D5E5F60",\r
-                       "626364656768696A6C6D6E6F71727374767778797B7C7D7E",\r
-                       "80818283858687888A8B8C8D8F90919294959697999A9B9C",\r
-                       "9E9FA0A1A3A4A5A6A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA",\r
-                       "BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCED0D1D2D3D5D6D7D8",\r
-                       "DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6",\r
-                       "F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314",\r
-                       "161718191B1C1D1E20212223252627282A2B2C2D2F303132",\r
-                       "34353637393A3B3C3E3F40414344454648494A4B4D4E4F50",\r
-                       "525354555758595A5C5D5E5F61626364666768696B6C6D6E",\r
-                       "70717273757677787A7B7C7D7F80818284858687898A8B8C",\r
-                       "8E8F90919394959698999A9B9D9E9FA0A2A3A4A5A7A8A9AA",\r
-                       "ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBEC0C1C2C3C5C6C7C8",\r
-                       "CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6",\r
-                       "E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304",\r
-                       "060708090B0C0D0E10111213151617181A1B1C1D1F202122",\r
-                       "24252627292A2B2C2E2F30313334353638393A3B3D3E3F40",\r
-                       "424344454748494A4C4D4E4F51525354565758595B5C5D5E",\r
-                       "60616263656667686A6B6C6D6F70717274757677797A7B7C",\r
-                       "7E7F80818384858688898A8B8D8E8F90929394959798999A",\r
-                       "9C9D9E9FA1A2A3A4A6A7A8A9ABACADAEB0B1B2B3B5B6B7B8",\r
-                       "BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6",\r
-                       "D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4",\r
-                       "F6F7F8F9FBFCFDFE00010203050607080A0B0C0D0F101112",\r
-                       "14151617191A1B1C1E1F20212324252628292A2B2D2E2F30",\r
-                       "323334353738393A3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F60616264656667696A6B6C",\r
-                       "6E6F70717374757678797A7B7D7E7F80828384858788898A",\r
-                       "8C8D8E8F91929394969798999B9C9D9EA0A1A2A3A5A6A7A8",\r
-                       "AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6",\r
-                       "C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4",\r
-                       "E6E7E8E9EBECEDEEF0F1F2F3F5F6F7F8FAFBFCFDFE010002",\r
-                       "04050607090A0B0C0E0F10111314151618191A1B1D1E1F20",\r
-                       "222324252728292A2C2D2E2F31323334363738393B3C3D3E",\r
-                       "40414243454647484A4B4C4D4F50515254555657595A5B5C",\r
-                       "5E5F60616364656668696A6B6D6E6F70727374757778797A",\r
-                       "7C7D7E7F81828384868788898B8C8D8E9091929395969798",\r
-                       "9A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6",\r
-                       "B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4",\r
-                       "D6D7D8D9DBDCDDDEE0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2",\r
-                       "F4F5F6F7F9FAFBFCFEFE01010304050608090A0B0D0E0F10",\r
-                       "121314151718191A1C1D1E1F21222324262728292B2C2D2E",\r
-                       "30313233353637383A3B3C3D3F40414244454647494A4B4C",\r
-                       "4E4F50515354555658595A5B5D5E5F60626364656768696A",\r
-                       "6C6D6E6F71727374767778797B7C7D7E8081828385868788",\r
-                       "8A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6",\r
-                       "A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4",\r
-                       "C6C7C8C9CBCCCDCED0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2",\r
-                       "E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6F8F9FAFBFDFEFE00",\r
-                       "020304050708090A0C0D0E0F11121314161718191B1C1D1E",\r
-                       "20212223252627282A2B2C2D2F30313234353637393A3B3C",\r
-                       "3E3F40414344454648494A4B4D4E4F50525354555758595A",\r
-                       "5C5D5E5F61626364666768696B6C6D6E7071727375767778",\r
-                       "7A7B7C7D7F80818284858687898A8B8C8E8F909193949596",\r
-                       "98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4",\r
-                       "B6B7B8B9BBBCBDBEC0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2",\r
-                       "D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6E8E9EAEBEDEEEFF0",\r
-                       "F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E",\r
-                       "10111213151617181A1B1C1D1F20212224252627292A2B2C",\r
-                       "2E2F30313334353638393A3B3D3E3F40424344454748494A",\r
-                       "4C4D4E4F51525354565758595B5C5D5E6061626365666768",\r
-                       "6A6B6C6D6F70717274757677797A7B7C7E7F808183848586",\r
-                       "88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4",\r
-                       "A6A7A8A9ABACADAEB0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2",\r
-                       "C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6D8D9DADBDDDEDFE0",\r
-                       "E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE",\r
-                       "00010203050607080A0B0C0D0F10111214151617191A1B1C",\r
-                       "1E1F20212324252628292A2B2D2E2F30323334353738393A",\r
-                       "3C3D3E3F41424344464748494B4C4D4E5051525355565758",\r
-                       "5A5B5C5D5F60616264656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A8C8D8E8F91929394",\r
-                       "969798999B9C9D9EA0A1A2A3A5A6A7A8AAABACADAFB0B1B2",\r
-                       "B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6C8C9CACBCDCECFD0",\r
-                       "D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE",\r
-                       "F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C",\r
-                       "0E0F10111314151618191A1B1D1E1F20222324252728292A",\r
-                       "2C2D2E2F31323334363738393B3C3D3E4041424345464748",\r
-                       "4A4B4C4D4F50515254555657595A5B5C5E5F606163646566",\r
-                       "68696A6B6D6E6F70727374757778797A7C7D7E7F81828384",\r
-                       "868788898B8C8D8E90919293959697989A9B9C9D9FA0A1A2",\r
-                       "00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526",\r
-                       "28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E",\r
-                       "A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6",\r
-                       "C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE",\r
-                       "F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516",\r
-                       "18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E",\r
-                       "40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566",\r
-                       "68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E",\r
-                       "90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6",\r
-                       "B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE",\r
-                       "E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506",\r
-                       "08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E",\r
-                       "30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556",\r
-                       "58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E",\r
-                       "80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6",\r
-                       "A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE",\r
-                       "D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6",\r
-                       "70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596",\r
-                       "98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE",\r
-                       "C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6",\r
-                       "E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E",\r
-                       "10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536",\r
-                       "38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E",\r
-                       "60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586",\r
-                       "88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE",\r
-                       "B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6",\r
-                       "D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE",\r
-                       "00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526",\r
-                       "28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E",\r
-                       "A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6",\r
-                       "C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE",\r
-                       "F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516",\r
-                       "18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E",\r
-                       "40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566",\r
-                       "68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E",\r
-                       "90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6",\r
-                       "B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE",\r
-                       "E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506",\r
-                       "08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E",\r
-                       "30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556",\r
-                       "58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E",\r
-                       "80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6",\r
-                       "A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE",\r
-                       "D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6",\r
-                       "F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E",\r
-                       "20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546",\r
-                       "48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E",\r
-                       "70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596",\r
-                       "98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE",\r
-                       "C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6",\r
-                       "E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E",\r
-                       "10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536",\r
-                       "38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E",\r
-                       "60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586",\r
-                       "88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE",\r
-                       "B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6",\r
-                       "D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE",\r
-                       "00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526",\r
-                       "28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E",\r
-                       "A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6",\r
-                       "C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE",\r
-                       "F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516",\r
-                       "18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E",\r
-                       "40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566",\r
-                       "68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E",\r
-                       "90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6",\r
-                       "B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE",\r
-                       "E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506",\r
-                       "08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E",\r
-                       "30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556",\r
-                       "58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E",\r
-                       "80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6",\r
-                       "A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE",\r
-                       "D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6",\r
-                       "F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E",\r
-                       "20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546",\r
-                       "48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E",\r
-                       "70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596",\r
-                       "98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE",\r
-                       "C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6",\r
-                       "E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E",\r
-                       "10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536",\r
-                       "38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E",\r
-                       "60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586",\r
-                       "88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE",\r
-                       "B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6",\r
-                       "D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE",\r
-                       "00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526",\r
-                       "28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576",\r
-                       "78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E",\r
-                       "A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6",\r
-                       "C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE",\r
-                       "F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516",\r
-                       "18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E",\r
-                       "40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566",\r
-                       "68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E",\r
-                       "90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6",\r
-                       "B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE",\r
-                       "E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506",\r
-                       "08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E",\r
-                       "30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556",\r
-                       "58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E",\r
-                       "80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6",\r
-                       "A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE",\r
-                       "D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6",\r
-                       "F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E",\r
-                       "20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546",\r
-                       "48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E",\r
-                       "70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596",\r
-                       "98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE",\r
-                       "C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6",\r
-                       "E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E",\r
-                       "10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536",\r
-                       "38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E",\r
-                       "60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586",\r
-                       "88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE",\r
-                       "B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6",\r
-                       "D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE",\r
-                       "00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526",\r
-                       "28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E",\r
-                       "50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576"];\r
-                       \r
-                       var pts:Array = [\r
-                       "506812A45F08C889B97F5980038B8359",\r
-                       "5C6D71CA30DE8B8B00549984D2EC7D4B",\r
-                       "53F3F4C64F8616E4E7C56199F48F21F6",\r
-                       "A1EB65A3487165FB0F1C27FF9959F703",\r
-                       "3553ECF0B1739558B08E350A98A39BFA",\r
-                       "67429969490B9711AE2B01DC497AFDE8",\r
-                       "93385C1F2AEC8BED192F5A8E161DD508",\r
-                       "B5BF946BE19BEB8DB3983B5F4C6E8DDB",\r
-                       "41321EE10E21BD907227C4450FF42324",\r
-                       "00A82F59C91C8486D12C0A80124F6089",\r
-                       "7CE0FD076754691B4BBD9FAF8A1372FE",\r
-                       "23605A8243D07764541BC5AD355B3129",\r
-                       "12A8CFA23EA764FD876232B4E842BC44",\r
-                       "BCAF32415E8308B3723E5FDD853CCC80",\r
-                       "89AFAE685D801AD747ACE91FC49ADDE0",\r
-                       "F521D07B484357C4A69E76124A634216",\r
-                       "3E23B3BC065BCC152407E23896D77783",\r
-                       "79F0FBA002BE1744670E7E99290D8F52",\r
-                       "DA23FE9D5BD63E1D72E3DAFBE21A6C2A",\r
-                       "E3F5698BA90B6A022EFD7DB2C7E6C823",\r
-                       "BDC2691D4F1B73D2700679C3BCBF9C6E",\r
-                       "BA74E02093217EE1BA1B42BD5624349A",\r
-                       "B5C593B5851C57FBF8B3F57715E8F680",\r
-                       "3DA9BD9CEC072381788F9387C3BBF4EE",\r
-                       "4197F3051121702AB65D316B3C637374",\r
-                       "9F46C62EC4F6EE3F6E8C62554BC48AB7",\r
-                       "0220673FE9E699A4EBC8E0DBEB6979C8",\r
-                       "B2B99171337DED9BC8C2C23FF6F18867",\r
-                       "A7FACF4E301E984E5EFEEFD645B23505",\r
-                       "F7C762E4A9819160FD7ACFB6C4EEDCDD",\r
-                       "9B64FC21EA08709F4915436FAA70F1BE",\r
-                       "52AF2C3DE07EE6777F55A4ABFC100B3F",\r
-                       "2FCA001224386C57AA3F968CBE2C816F",\r
-                       "4149C73658A4A9C564342755EE2C132F",\r
-                       "AF60005A00A1772F7C07A48A923C23D2",\r
-                       "6FCCBC28363759914B6F0280AFAF20C6",\r
-                       "7D82A43DDF4FEFA2FC5947499884D386",\r
-                       "5D5A990EAAB9093AFE4CE254DFA49EF9",\r
-                       "4CD1E2FD3F4434B553AAE453F0ED1A02",\r
-                       "5A2C9A9641D4299125FA1B9363104B5E",\r
-                       "B517FE34C0FA217D341740BFD4FE8DD4",\r
-                       "014BAF2278A69D331D5180103643E99A",\r
-                       "B529BD8164F20D0AA443D4932116841C",\r
-                       "2E596DCBB2F33D4216A1176D5BD1E456",\r
-                       "7274A1EA2B7EE2424E9A0E4673689143",\r
-                       "AE20020BD4F13E9D90140BEE3B5D26AF",\r
-                       "BAAC065DA7AC26E855E79C8849D75A02",\r
-                       "7C917D8D1D45FAB9E2540E28832540CC",\r
-                       "BDE6F89E16DAADB0E847A2A614566A91",\r
-                       "C9DE163725F1F5BE44EBB1DB51D07FBC",\r
-                       "3AF57A58F0C07DFFA669572B521E2B92",\r
-                       "3D5EBAC306DDE4604F1B4FBBBFCDAE55",\r
-                       "C2DFA91BCEB76A1183C995020AC0B556",\r
-                       "C70F54305885E9A0746D01EC56C8596B",\r
-                       "C4F81B610E98012CE000182050C0C2B2",\r
-                       "EAAB86B1D02A95D7404EFF67489F97D4",\r
-                       "7C55BDB40B88870B52BEC3738DE82886",\r
-                       "BA6EAA88371FF0A3BD875E3F2A975CE0",\r
-                       "08059130C4C24BD30CF0575E4E0373DC",\r
-                       "9A8EAB004EF53093DFCF96F57E7EDA82",\r
-                       "0745B589E2400C25F117B1D796C28129",\r
-                       "2F1777781216CEC3F044F134B1B92BBE",\r
-                       "353A779FFC541B3A3805D90CE17580FC",\r
-                       "1A1EAE4415CEFCF08C4AC1C8F68BEA8F",\r
-                       "E6E7E4E5B0B3B2B5D4D5AAAB16111013",\r
-                       "F8F9FAFBFBF8F9E677767170EFE0E1E2",\r
-                       "63626160A1A2A3A445444B4A75727370",\r
-                       "717073720605040B2D2C2B2A05FAFBF9",\r
-                       "78797A7BEAE9E8EF3736292891969794",\r
-                       "838281803231300FDDDCDBDAA0AFAEAD",\r
-                       "18191A1BBFBCBDBA75747B7A7F78797A",\r
-                       "848586879B989996A3A2A5A4849B9A99",\r
-                       "0001020322212027CACBF4F551565754",\r
-                       "CECFCCCDAFACADB2515057564A454447",\r
-                       "92939091CDCECFC813121D1C80878685",\r
-                       "D2D3D0D16F6C6D6259585F5ED1EEEFEC",\r
-                       "ACADAEAF878485820F0E1110D5D2D3D0",\r
-                       "9091929364676619E6E7E0E1757A7B78",\r
-                       "BABBB8B98A89888F74757A7B92959497",\r
-                       "8D8C8F8E6E6D6C633B3A3D3CCAD5D4D7",\r
-                       "86878485010203040808F7F767606162",\r
-                       "8E8F8C8D656667788A8B8C8D010E0F0C",\r
-                       "C8C9CACB858687807A7B7475E7E0E1E2",\r
-                       "6D6C6F6E5053525D8C8D8A8BADD2D3D0",\r
-                       "28292A2B393A3B3C0607181903040506",\r
-                       "A5A4A7A6B0B3B28DDBDADDDCBDB2B3B0",\r
-                       "323330316467666130313E3F2C2B2A29",\r
-                       "27262524080B0A05171611100B141516",\r
-                       "040506074142434435340B0AA3A4A5A6",\r
-                       "242526271112130C61606766BDB2B3B0",\r
-                       "4B4A4948252627209E9F9091CEC9C8CB",\r
-                       "68696A6B6665646B9F9E9998D9E6E7E4",\r
-                       "34353637C5C6C7C0F0F1EEEF7C7B7A79",\r
-                       "32333031C2C1C13F0D0C0B0A050A0B08",\r
-                       "CDCCCFCEBEBDBCBBABAAA5A4181F1E1D",\r
-                       "212023223635343BA0A1A6A7445B5A59",\r
-                       "0E0F0C0DA8ABAAAD2F2E515002050407",\r
-                       "070605042A2928378E8F8889BDB2B3B0",\r
-                       "CBCAC9C893909196A9A8A7A6A5A2A3A0",\r
-                       "80818283C1C2C3CC9C9D9A9B0CF3F2F1",\r
-                       "1213101125262720FAFBE4E5B1B6B7B4",\r
-                       "7F7E7D7C3033320D97969190222D2C2F",\r
-                       "4E4F4C4D484B4A4D81808F8E53545556",\r
-                       "DCDDDEDFB0B3B2BD15141312A1BEBFBC",\r
-                       "93929190282B2A2DC4C5FAFB92959497",\r
-                       "F5F4F7F6C4C7C6D9373631307E717073",\r
-                       "93929190B6B5B4B364656A6B05020300",\r
-                       "BABBB8B90D0E0F00A4A5A2A3043B3A39",\r
-                       "D8D9DADB7F7C7D7A10110E0F787F7E7D",\r
-                       "FEFFFCFDEFECED923B3A3D3C6768696A",\r
-                       "D6D7D4D58A89888F96979899A5A2A3A0",\r
-                       "18191A1BA8ABAAA5303136379B848586",\r
-                       "6B6A6968A4A7A6A1D6D72829B0B7B6B5",\r
-                       "000102038A89889755545352A6A9A8AB",\r
-                       "2D2C2F2EB3B0B1B6B6B7B8B9F2F5F4F7",\r
-                       "979695943536373856575051E09F9E9D",\r
-                       "A4A5A6A7989B9A9DB1B0AFAE7A7D7C7F",\r
-                       "C1C0C3C2686B6A55A8A9AEAFEAE5E4E7",\r
-                       "C1C0C3C2141716118C8D828364636261",\r
-                       "93929190CCCFCEC196979091E0FFFEFD",\r
-                       "B4B5B6B7F9FAFBFC25241B1A6E69686B",\r
-                       "868784850704051AC7C6C1C08788898A",\r
-                       "F4F5F6F7AAA9A8AFFDFCF3F277707172",\r
-                       "D3D2D1D00605040BC3C2C5C43E010003",\r
-                       "73727170424140476A6B74750D0A0B08",\r
-                       "C2C3C0C10A0908F754555253A1AEAFAC",\r
-                       "6D6C6F6EF8FBFAFD82838C8DF8FFFEFD",\r
-                       "F5F4F7F684878689A6A7A0A1D2CDCCCF",\r
-                       "2D33EEF2C0430A8A9EBF45E809C40BB6",\r
-                       "6AA375D1FA155A61FB72353E0A5A8756",\r
-                       "BC3736518B9490DCB8ED60EB26758ED4",\r
-                       "AA214402B46CFFB9F761EC11263A311E",\r
-                       "02AEA86E572EEAB66B2C3AF5E9A46FD6",\r
-                       "E2AEF6ACC33B965C4FA1F91C75FF6F36",\r
-                       "0659DF46427162B9434865DD9499F91D",\r
-                       "49A44239C748FEB456F59C276A5658DF",\r
-                       "66208F6E9D04525BDEDB2733B6A6BE37",\r
-                       "3393F8DFC729C97F5480B950BC9666B0",\r
-                       "606834C8CE063F3234CF1145325DBD71",\r
-                       "FEC1C04F529BBD17D8CECFCC4718B17F",\r
-                       "32DF99B431ED5DC5ACF8CAF6DC6CE475",\r
-                       "7FDC2B746F3F665296943B83710D1F82",\r
-                       "8FBA1510A3C5B87E2EAA3F7A91455CA2",\r
-                       "2C9B468B1C2EED92578D41B0716B223B",\r
-                       "0A2BBF0EFC6BC0034F8A03433FCA1B1A",\r
-                       "25260E1F31F4104D387222E70632504B",\r
-                       "C527D25A49F08A5228D338642AE65137",\r
-                       "3B49FC081432F5890D0E3D87E884A69E",\r
-                       "D173F9ED1E57597E166931DF2754A083",\r
-                       "8C2B7CAFA5AFE7F13562DAEAE1ADEDE0",\r
-                       "AAF4EC8C1A815AEB826CAB741339532C",\r
-                       "40BE8C5D9108E663F38F1A2395279ECF",\r
-                       "0C8AD9BC32D43E04716753AA4CFBE351",\r
-                       "1407B1D5F87D63357C8DC7EBBAEBBFEE",\r
-                       "E62734D1AE3378C4549E939E6F123416",\r
-                       "5A752CFF2A176DB1A1DE77F2D2CDEE41",\r
-                       "A9C8C3A4EABEDC80C64730DDD018CD88",\r
-                       "EE9B3DBBDB86180072130834D305999A",\r
-                       "A7FA8C3586B8EBDE7568EAD6F634A879",\r
-                       "37E0F4A87F127D45AC936FE7AD88C10A",\r
-                       "3F77D8B5D92BAC148E4E46F697A535C5",\r
-                       "D25EBB686C40F7E2C4DA1014936571CA",\r
-                       "4F1C769D1E5B0552C7ECA84DEA26A549",\r
-                       "8548E2F882D7584D0FAFC54372B6633A",\r
-                       "87D7A336CB476F177CD2A51AF2A62CDF",\r
-                       "03B1FEAC668C4E485C1065DFC22B44EE",\r
-                       "BDA15E66819FA72D653A6866AA287962",\r
-                       "4D0C7A0D2505B80BF8B62CEB12467F0A",\r
-                       "626D34C9429B37211330986466B94E5F",\r
-                       "333C3E6BF00656B088A17E5FF0E7F60A",\r
-                       "687ED0CDC0D2A2BC8C466D05EF9D2891",\r
-                       "487830E78CC56C1693E64B2A6660C7B6",\r
-                       "7A48D6B7B52B29392AA2072A32B66160",\r
-                       "907320E64C8C5314D10F8D7A11C8618D",\r
-                       "B561F2CA2D6E65A4A98341F3ED9FF533",\r
-                       "DF769380D212792D026F049E2E3E48EF",\r
-                       "79F374BC445BDABF8FCCB8843D6054C6",\r
-                       "4E02F1242FA56B05C68DBAE8FE44C9D6",\r
-                       "CF73C93CBFF57AC635A6F4AD2A4A1545",\r
-                       "9923548E2875750725B886566784C625",\r
-                       "4888336B723A022C9545320F836A4207",\r
-                       "F84D9A5561B0608B1160DEE000C41BA8",\r
-                       "C23192A0418E30A19B45AE3E3625BF22",\r
-                       "B84E0690B28B0025381AD82A15E501A7",\r
-                       "ACEF5E5C108876C4F06269F865B8F0B0",\r
-                       "0F1B3603E0F5DDEA4548246153A5E064",\r
-                       "FBB63893450D42B58C6D88CD3C1809E3",\r
-                       "4BEF736DF150259DAE0C91354E8A5F92",\r
-                       "7D2D46242056EF13D3C3FC93C128F4C7",\r
-                       "E9C1BA2DF415657A256EDB33934680FD",\r
-                       "E23EE277B0AA0A1DFB81F7527C3514F1",\r
-                       "3E7445B0B63CAAF75E4A911E12106B4C",\r
-                       "767774752023222544455A5BE6E1E0E3",\r
-                       "72737475717E7F7CE9E8EBEA696A6B6C",\r
-                       "DFDEDDDC25262728C9C8CFCEF1EEEFEC",\r
-                       "FFFE0100707776755F5E5D5C7675746B",\r
-                       "E0E1E2E3424140479F9E9190292E2F2C",\r
-                       "2120272690EFEEED3B3A39384E4D4C4B",\r
-                       "ECEDEEEF5350516EA1A0A7A6A3ACADAE",\r
-                       "32333C3D25222320E9E8EBEACECDCCC3",\r
-                       "40414243626160678A8BB4B511161714",\r
-                       "94959293F5FAFBF81F1E1D1C7C7F7E79",\r
-                       "BEBFBCBD191A1B14CFCEC9C8546B6A69",\r
-                       "2C2D3233898E8F8CBBBAB9B8333031CE",\r
-                       "84858687BFBCBDBA37363938FDFAFBF8",\r
-                       "828384857669686B909192930B08090E",\r
-                       "BEBFBCBD9695948B707176779E919093",\r
-                       "8B8A85846067666521202322D0D3D2DD",\r
-                       "76777475F1F2F3F4F8F9E6E777707172",\r
-                       "A4A5A2A34F404142B4B5B6B727242522",\r
-                       "94959697E1E2E3EC16171011839C9D9E",\r
-                       "03023D3C06010003DEDFDCDDFFFCFDE2",\r
-                       "10111213F1F2F3F4CECFC0C1DBDCDDDE",\r
-                       "67666160724D4C4F1D1C1F1E73707176",\r
-                       "E6E7E4E5A8ABAAD584858283909F9E9D",\r
-                       "71707F7E565150537D7C7F7E6162636C",\r
-                       "64656667212223245555AAAA03040506",\r
-                       "9E9F9899ABA4A5A6CFCECDCC2B28292E",\r
-                       "C7C6C5C4D1D2D3DC626364653A454447",\r
-                       "F6F7E8E9E0E7E6E51D1C1F1E5B585966",\r
-                       "BCBDBEBF5D5E5F5868696667F4F3F2F1",\r
-                       "40414647B0AFAEAD9B9A99989B98999E",\r
-                       "69686B6A0201001F0F0E0908B4BBBAB9",\r
-                       "C7C6C9C8D8DFDEDD5A5B5859BEBDBCB3",\r
-                       "DEDFDCDD787B7A7DFFFEE1E0B2B5B4B7",\r
-                       "4D4C4B4A606F6E6DD0D1D2D3FBF8F9FE",\r
-                       "B7B6B5B4D7D4D5DAE5E4E3E2E1FEFFFC",\r
-                       "CECFB0B1F7F0F1F2AEAFACAD3E3D3C23",\r
-                       "CACBC8C9CDCECFC812131C1D494E4F4C",\r
-                       "9D9C9B9AD22D2C2FB1B0B3B20C0F0E09",\r
-                       "7A7B787964676659959493924F404142",\r
-                       "AAABA4A5CEC9C8CB1F1E1D1CABA8A9A6",\r
-                       "93929190282B2A2DC4C5FAFB92959497",\r
-                       "EFEEE9E8DED1D0D339383B3A888B8A8D",\r
-                       "7F7E7D7CA2A1A0AF78797E7F112E2F2C",\r
-                       "84859A9B2B2C2D2E868784852625245B",\r
-                       "B0B1B2B3070405026869666710171615",\r
-                       "ACADAAABBDA2A3A00D0C0F0E595A5B5C",\r
-                       "121310115655544B5253545569666764",\r
-                       "DEDFD0D166616063EAEBE8E94142434C",\r
-                       "DBDAD9D81417161166677879E0E7E6E5",\r
-                       "6A6B6C6DE0EFEEED2B2A2928C0C3C2C5",\r
-                       "B1B0B3B21714151A1A1B1C1D5649484B",\r
-                       "39380706A3A4A5A6C4C5C6C77271706F",\r
-                       "5C5D5E5F1013121539383736E2E5E4E7",\r
-                       "43424544EAD5D4D72E2F2C2D64676661",\r
-                       "55545756989B9A65F8F9FEFF18171615",\r
-                       "05040B0A525554573C3D3E3F4A494847",\r
-                       "14151617595A5B5C8584FBFA8E89888B",\r
-                       "7C7D7A7BFDF2F3F029282B2A51525354",\r
-                       "38393A3B1E1D1C1341404746C23D3C3E",\r
-                       "8D8C939240474645818083827C7F7E41",\r
-                       "3B3A39381A19181F32333C3D45424340",\r
-                       "F0F1F6F738272625828380817F7C7D7A",\r
-                       "89888B8A0407061966676061141B1A19",\r
-                       "D3D2DDDCAAADACAF9C9D9E9FE8EBEAE5",\r
-                       "834EADFCCAC7E1B30664B1ABA44815AB",\r
-                       "D9DC4DBA3021B05D67C0518F72B62BF1",\r
-                       "A291D86301A4A739F7392173AA3C604C",\r
-                       "4264B2696498DE4DF79788A9F83E9390",\r
-                       "EE9932B3721804D5A83EF5949245B6F6",\r
-                       "E6248F55C5FDCBCA9CBBB01C88A2EA77",\r
-                       "B8358E41B9DFF65FD461D55A99266247",\r
-                       "F0E2D72260AF58E21E015AB3A4C0D906",\r
-                       "475B8B823CE8893DB3C44A9F2A379FF7",\r
-                       "688F5281945812862F5F3076CF80412F",\r
-                       "08D1D2BC750AF553365D35E75AFACEAA",\r
-                       "8707121F47CC3EFCECA5F9A8474950A1",\r
-                       "E51AA0B135DBA566939C3B6359A980C5",\r
-                       "069A007FC76A459F98BAF917FEDF9521",\r
-                       "726165C1723FBCF6C026D7D00B091027",\r
-                       "D7C544DE91D55CFCDE1F84CA382200CE",\r
-                       "FED3C9A161B9B5B2BD611B41DC9DA357",\r
-                       "4F634CDC6551043409F30B635832CF82",\r
-                       "109CE98DB0DFB36734D9F3394711B4E6",\r
-                       "4EA6DFABA2D8A02FFDFFA89835987242",\r
-                       "5AE094F54AF58E6E3CDBF976DAC6D9EF",\r
-                       "764D8E8E0F29926DBE5122E66354FDBE",\r
-                       "3F0418F888CDF29A982BF6B75410D6A9",\r
-                       "E4A3E7CB12CDD56AA4A75197A9530220",\r
-                       "211677684AAC1EC1A160F44C4EBF3F26",\r
-                       "D21E439FF749AC8F18D6D4B105E03895",\r
-                       "D9F6FF44646C4725BD4C0103FF5552A7",\r
-                       "0B1256C2A00B976250CFC5B0C37ED382",\r
-                       "B056447FFC6DC4523A36CC2E972A3A79",\r
-                       "5E25CA78F0DE55802524D38DA3FE4456",\r
-                       "A5BCF4728FA5EAAD8567C0DC24675F83",\r
-                       "814E59F97ED84646B78B2CA022E9CA43",\r
-                       "15478BEEC58F4775C7A7F5D4395514D7",\r
-                       "253548FFCA461C67C8CBC78CD59F4756",\r
-                       "FD7AD8D73B9B0F8CC41600640F503D65",\r
-                       "06199DE52C6CBF8AF954CD65830BCD56",\r
-                       "F17C4FFE48E44C61BD891E257E725794",\r
-                       "9A5B4A402A3E8A59BE6BF5CD8154F029",\r
-                       "79BD40B91A7E07DC939D441782AE6B17",\r
-                       "D8CEAAF8976E5FBE1012D8C84F323799",\r
-                       "3316E2751E2E388B083DA23DD6AC3FBE",\r
-                       "8B7CFBE37DE7DCA793521819242C5816",\r
-                       "F23F033C0EEBF8EC55752662FD58CE68",\r
-                       "59EB34F6C8BDBACC5FC6AD73A59A1301",\r
-                       "DCDE8B6BD5CF7CC22D9505E3CE81261A",\r
-                       "E33CF7E524FED781E7042FF9F4B35DC7",\r
-                       "27963C8FACDF73062867D164DF6D064C",\r
-                       "77B1CE386B551B995F2F2A1DA994EEF8",\r
-                       "F083388B013679EFCF0BB9B15D52AE5C",\r
-                       "C5009E0DAB55DB0ABDB636F2600290C8",\r
-                       "7804881E26CD532D8514D3683F00F1B9",\r
-                       "46CDDCD73D1EB53E675CA012870A92A3",\r
-                       "A9FB44062BB07FE130A8E8299EACB1AB",\r
-                       "2B6FF8D7A5CC3A28A22D5A6F221AF26B",\r
-                       "1A9527C29B8ADD4B0E3E656DBB2AF8B4",\r
-                       "7F99CF2C75244DF015EB4B0C1050AEAE",\r
-                       "E84FF85B0D9454071909C1381646C4ED",\r
-                       "89AFD40F99521280D5399B12404F6DB4",\r
-                       "A09EF32DBC5119A35AB7FA38656F0329",\r
-                       "61773457F068C376C7829B93E696E716",\r
-                       "A34F0CAE726CCE41DD498747D891B967",\r
-                       "856F59496C7388EE2D2B1A27B7697847",\r
-                       "CB090C593EF7720BD95908FB93B49DF4",\r
-                       "A0AC75CD2F1923D460FC4D457AD95BAF",\r
-                       "2A2B282974777689E8E9EEEF525D5C5F",\r
-                       "909192939390919E0F0E09089788898A",\r
-                       "777675748D8E8F907170777649464744",\r
-                       "717073720605040B2D2C2B2A05FAFBF9",\r
-                       "64656667FEFDFCC31B1A1D1CA5AAABA8",\r
-                       "DBDAD9D86A696867B5B4B3B2C8D7D6D5",\r
-                       "5C5D5E5FE3E0E1FE31303736333C3D3E",\r
-                       "545556574B48494673727574546B6A69",\r
-                       "ECEDEEEFC6C5C4BB56575051F5FAFBF8",\r
-                       "464744452724252AC9C8CFCED2CDCCCF",\r
-                       "E6E7E4E54142435C878681801C131211",\r
-                       "72737071CFCCCDC2F9F8FFFE710E0F0C",\r
-                       "505152537370714EC3C2C5C4010E0F0C",\r
-                       "A8A9AAAB5C5F5E51AEAFA8A93D222320",\r
-                       "DEDFDCDDF6F5F4EB10111617FEF1F0F3",\r
-                       "BDBCBFBE5E5D5C530B0A0D0CFAC5C4C7",\r
-                       "8A8B8889050606F8F4F5F2F3636C6D6E",\r
-                       "A6A7A4A54D4E4F40B2B3B4B539262724",\r
-                       "9C9D9E9FE9EAEBF40E0F08099B949596",\r
-                       "2D2C2F2E1013121DCCCDCACBED121310",\r
-                       "F4F5F6F7EDEEEFD0EAEBECEDF7F8F9FA",\r
-                       "3D3C3F3E282B2A2573727574150A0B08",\r
-                       "B6B7B4B5F8FBFAE5B4B5B2B3A0AFAEAD",\r
-                       "B7B6B5B4989B9A95878681809BA4A5A6",\r
-                       "A8A9AAABE5E6E798E9E8EFEE4748494A",\r
-                       "ECEDEEEFD9DADBD4B9B8BFBE657A7B78",\r
-                       "7F7E7D7C696A6B74CACBCCCD929D9C9F",\r
-                       "08090A0B0605040BFFFEF9F8B9C6C7C4",\r
-                       "08090A0BF1F2F3CCFCFDFAFB68676665",\r
-                       "CACBC8C93A393837050403020D121310",\r
-                       "E9E8EBEA8281809F8F8E8988343B3A39",\r
-                       "515053524645444BD0D1D6D7340B0A09",\r
-                       "42434041ECEFEE1193929594C6C9C8CB",\r
-                       "EFEEEDECC2C1C0CF76777071455A5B58",\r
-                       "5F5E5D5C3F3C3D221D1C1B1A19161714",\r
-                       "000102034142434C1C1D1A1B8D727371",\r
-                       "8E8F8C8DB1B2B38C56575051050A0B08",\r
-                       "A7A6A5A4E8EBEAE57F7E7978CAD5D4D7",\r
-                       "8A8B888994979689454443429F909192",\r
-                       "8C8D8E8FE0E3E2ED45444342F1CECFCC",\r
-                       "FFFEFDFC4C4F4E31D8D9DEDFB6B9B8BB",\r
-                       "FDFCFFFECCCFCEC12F2E29286679787B",\r
-                       "67666564BAB9B8A77071767719161714",\r
-                       "9A9B98992D2E2F2084858283245B5A59",\r
-                       "A4A5A6A70B0809365C5D5A5B2C232221",\r
-                       "464744455754555AF3F2F5F4AFB0B1B2",\r
-                       "323330317675746B7273747549464744",\r
-                       "A8A9AAAB181B1A15808186872B141516",\r
-                       "E7E6E5E4202323DDAAABACAD343B3A39",\r
-                       "A8A9AAAB2221202FEDECEBEA1E010003",\r
-                       "F9F8FBFA5F5C5D42424344450E010003",\r
-                       "57565554F5F6F7F89697909120DFDEDD",\r
-                       "F8F9FAFBCCCFCEF1DDDCDBDA0E010003",\r
-                       "D9D8DBDA7073727D80818687C2DDDCDF",\r
-                       "C5C4C7C6080B0A1588898E8F68676665",\r
-                       "83828180DCDFDED186878081F0CFCECD",\r
-                       "98999A9BDDDEDFA079787F7E0A050407",\r
-                       "CECFCCCD4F4C4D429F9E9998DFC0C1C2",\r
-                       "404142436665647B29282F2EABA4A5A6",\r
-                       "33323130E6E5E4EB23222524DEA1A0A3",\r
-                       "CFCECDCCF6F5F4CBE6E7E0E199969794",\r
-                       "BABBB8B97271707FDCDDDADB29363734",\r
-                       "C9C8CBCA4447465926272021545B5A59",\r
-                       "050407067477767956575051221D1C1F"];\r
-                       \r
-                       var cts:Array = [\r
-                       "D8F532538289EF7D06B506A4FD5BE9C9",\r
-                       "59AB30F4D4EE6E4FF9907EF65B1FB68C",\r
-                       "BF1ED2FCB2AF3FD41443B56D85025CB1",\r
-                       "7316632D5C32233EDCB0780560EAE8B2",\r
-                       "408C073E3E2538072B72625E68B8364B",\r
-                       "E1F94DFA776597BEACA262F2F6366FEA",\r
-                       "F29E986C6A1C27D7B29FFD7EE92B75F1",\r
-                       "131C886A57F8C2E713ABA6955E2B55B5",\r
-                       "D2AB7662DF9B8C740210E5EEB61C199D",\r
-                       "14C10554B2859C484CAB5869BBE7C470",\r
-                       "DB4D498F0A49CF55445D502C1F9AB3B5",\r
-                       "6D96FEF7D66590A77A77BB2056667F7F",\r
-                       "316FB68EDBA736C53E78477BF913725C",\r
-                       "6936F2B93AF8397FD3A771FC011C8C37",\r
-                       "F3F92F7A9C59179C1FCC2C2BA0B082CD",\r
-                       "6A95EA659EE3889158E7A9152FF04EBC",\r
-                       "1959338344E945670678A5D432C90B93",\r
-                       "E49BDDD2369B83EE66E6C75A1161B394",\r
-                       "D3388F19057FF704B70784164A74867D",\r
-                       "23AA03E2D5E4CD24F3217E596480D1E1",\r
-                       "C84113D68B666AB2A50A8BDB222E91B9",\r
-                       "AC02403981CD4340B507963DB65CB7B6",\r
-                       "8D1299236223359474011F6BF5088414",\r
-                       "5A1D6AB8605505F7977E55B9A54D9B90",\r
-                       "72E9C2D519CF555E4208805AABE3B258",\r
-                       "A8F3E81C4A23A39EF4D745DFFE026E80",\r
-                       "546F646449D31458F9EB4EF5483AEE6C",\r
-                       "4DBE4BC84AC797C0EE4EFB7F1A07401C",\r
-                       "25E10BFB411BBD4D625AC8795C8CA3B3",\r
-                       "315637405054EC803614E43DEF177579",\r
-                       "60C5BC8A1410247295C6386C59E572A8",\r
-                       "01366FC8CA52DFE055D6A00A76471BA6",\r
-                       "ECC46595516EC612449C3F581E7D42FF",\r
-                       "6B7FFE4C602A154B06EE9C7DAB5331C9",\r
-                       "7DA234C14039A240DD02DD0FBF84EB67",\r
-                       "C7DC217D9E3604FFE7E91F080ECD5A3A",\r
-                       "37785901863F5C81260EA41E7580CDA5",\r
-                       "A07B9338E92ED105E6AD720FCCCE9FE4",\r
-                       "AE0FB9722418CC21A7DA816BBC61322C",\r
-                       "C826A193080FF91FFB21F71D3373C877",\r
-                       "1181B11B0E494E8D8B0AA6B1D5AC2C48",\r
-                       "6743C3D1519AB4F2CD9A78AB09A511BD",\r
-                       "DC55C076D52BACDF2EEFD952946A439D",\r
-                       "711B17B590FFC72B5C8E342B601E8003",\r
-                       "19983BB0950783A537E1339F4AA21C75",\r
-                       "3BA7762E15554169C0F4FA39164C410C",\r
-                       "A0564C41245AFCA7AF8AA2E0E588EA89",\r
-                       "5E36A42A2E099F54AE85ECD92E2381ED",\r
-                       "770036F878CD0F6CA2268172F106F2FE",\r
-                       "7E4E03908B716116443CCF7C94E7C259",\r
-                       "482735A48C30613A242DD494C7F9185D",\r
-                       "B4C0F6C9D4D7079ADDF9369FC081061D",\r
-                       "D5810FE0509AC53EDCD74F89962E6270",\r
-                       "03F17A16B3F91848269ECDD38EBB2165",\r
-                       "DA1248C3180348BAD4A93B4D9856C9DF",\r
-                       "3D10D7B63F3452C06CDF6CCE18BE0C2C",\r
-                       "4AB823E7477DFDDC0E6789018FCB6258",\r
-                       "E6478BA56A77E70CFDAA5C843ABDE30E",\r
-                       "1673064895FBEAF7F09C5429FF75772D",\r
-                       "4488033AE9F2EFD0CA9383BFCA1A94E9",\r
-                       "978F3B8C8F9D6F46626CAC3C0BCB9217",\r
-                       "E08C8A7E582E15E5527F1D9E2EECB236",\r
-                       "CEC155B76AC5FFDA4CF4F9CA91E49A7A",\r
-                       "D5AC7165763225DD2A38CDC6862C29AD",\r
-                       "03680FE19F7CE7275452020BE70E8204",\r
-                       "461DF740C9781C388E94BB861CEB54F6",\r
-                       "451BD60367F96483042742219786A074",\r
-                       "E4DFA42671A02E57EF173B85C0EA9F2B",\r
-                       "ED11B89E76274282227D854700A78B9E",\r
-                       "433946EAA51EA47AF33895F2B90B3B75",\r
-                       "6BC6D616A5D7D0284A5910AB35022528",\r
-                       "D2A920ECFE919D354B5F49EAE9719C98",\r
-                       "3A061B17F6A92885EFBD0676985B373D",\r
-                       "FADEEC16E33EA2F4688499D157E20D8F",\r
-                       "5CDEFEDE59601AA3C3CDA36FA6B1FA13",\r
-                       "9574B00039844D92EBBA7EE8719265F8",\r
-                       "9A9CF33758671787E5006928188643FA",\r
-                       "2CDDD634C846BA66BB46CBFEA4A674F9",\r
-                       "D28BAE029393C3E7E26E9FAFBBB4B98F",\r
-                       "EC27529B1BEE0A9AB6A0D73EBC82E9B7",\r
-                       "3CB25C09472AFF6EE7E2B47CCD7CCB17",\r
-                       "DEE33103A7283370D725E44CA38F8FE5",\r
-                       "27F9BCD1AAC64BFFC11E7815702C1A69",\r
-                       "5DF534FFAD4ED0749A9988E9849D0021",\r
-                       "A48BEE75DB04FB60CA2B80F752A8421B",\r
-                       "024C8CF70BC86EE5CE03678CB7AF45F9",\r
-                       "3C19AC0F8A3A3862CE577831301E166B",\r
-                       "C5E355B796A57421D59CA6BE82E73BCA",\r
-                       "D94033276417ABFB05A69D15B6E386E2",\r
-                       "24B36559EA3A9B9B958FE6DA3E5B8D85",\r
-                       "20FD4FEAA0E8BF0CCE7861D74EF4CB72",\r
-                       "350E20D5174277B9EC314C501570A11D",\r
-                       "87A29D61B7C604D238FE73045A7EFD57",\r
-                       "2C3164C1CC7D0064816BDC0FAA362C52",\r
-                       "195FE5E8A05A2ED594F6E4400EEE10B3",\r
-                       "E4663DF19B9A21A5A284C2BD7F905025",\r
-                       "21B88714CFB4E2A933BD281A2C4743FD",\r
-                       "CBFC3980D704FD0FC54378AB84E17870",\r
-                       "BC5144BAA48BDEB8B63E22E03DA418EF",\r
-                       "5A1DBAEF1EE2984B8395DA3BDFFA3CCC",\r
-                       "F0B11CD0729DFCC80CEC903D97159574",\r
-                       "9F95314ACFDDC6D1914B7F19A9CC8209",\r
-                       "595736F6F0F70914A94E9E007F022519",\r
-                       "1F19F57892CAE586FCDFB4C694DEB183",\r
-                       "540700EE1F6F3DAB0B3EDDF6CAEE1EF5",\r
-                       "14A342A91019A331687A2254E6626CA2",\r
-                       "7B25F3C3B2EEA18D743EF283140F29FF",\r
-                       "46C2587D66E5E6FA7F7CA6411AD28047",\r
-                       "09470E72229D954ED5EE73886DFEEBA9",\r
-                       "D77C03DE92D4D0D79EF8D4824EF365EB",\r
-                       "1D190219F290E0F1715D152D41A23593",\r
-                       "A2CD332CE3A0818769616292E87F757B",\r
-                       "D54AFA6CE60FBF9341A3690E21385102",\r
-                       "06E5C364DED628A3F5E05E613E356F46",\r
-                       "EAE63C0E62556DAC85D221099896355A",\r
-                       "1FED060E2C6FC93EE764403A889985A2",\r
-                       "C25235C1A30FDEC1C7CB5C5737B2A588",\r
-                       "796DBEF95147D4D30873AD8B7B92EFC0",\r
-                       "CBCF0FB34D98D0BD5C22CE37211A46BF",\r
-                       "94B44DA6466126CAFA7C7FD09063FC24",\r
-                       "D78C5B5EBF9B4DBDA6AE506C5074C8FE",\r
-                       "6C27444C27204B043812CF8CF95F9769",\r
-                       "BE94524EE5A2AA50BBA8B75F4C0AEBCF",\r
-                       "A0AEAAE91BA9F31F51AEB3588CF3A39E",\r
-                       "275297779C28266EF9FE4C6A13C08488",\r
-                       "86523D92BB8672CB01CF4A77FD725882",\r
-                       "4B8327640E9F33322A04DD96FCBF9A36",\r
-                       "CE52AF650D088CA559425223F4D32694",\r
-                       "DFF4945E0336DF4C1C56BC700EFF837F",\r
-                       "B6FDDEF4752765E347D5D2DC196D1252",\r
-                       "D23684E3D963B3AFCF1A114ACA90CBD6",\r
-                       "3A7AC027753E2A18C2CEAB9E17C11FD0",\r
-                       "8F6786BD007528BA26603C1601CDD0D8",\r
-                       "D17D073B01E71502E28B47AB551168B3",\r
-                       "A469DA517119FAB95876F41D06D40FFA",\r
-                       "6091AA3B695C11F5C0B6AD26D3D862FF",\r
-                       "70F9E67F9F8DF1294131662DC6E69364",\r
-                       "D154DCAFAD8B207FA5CBC95E9996B559",\r
-                       "4934D541E8B46FA339C805A7AEB9E5DA",\r
-                       "62564C738F3EFE186E1A127A0C4D3C61",\r
-                       "07805AA043986EB23693E23BEF8F3438",\r
-                       "DF0B4931038BADE848DEE3B4B85AA44B",\r
-                       "592D5FDED76582E4143C65099309477C",\r
-                       "C9B8D6545580D3DFBCDD09B954ED4E92",\r
-                       "5DCCD5D6EB7C1B42ACB008201DF707A0",\r
-                       "A2A91682FFEB6ED1D34340946829E6F9",\r
-                       "E45D185B797000348D9267960A68435D",\r
-                       "45E060DAE5901CDA8089E10D4F4C246B",\r
-                       "F6951AFACC0079A369C71FDCFF45DF50",\r
-                       "9E95E00F351D5B3AC3D0E22E626DDAD6",\r
-                       "9CB566FF26D92DAD083B51FDC18C173C",\r
-                       "C9C82766176A9B228EB9A974A010B4FB",\r
-                       "D8E26AA02945881D5137F1C1E1386E88",\r
-                       "C0E024CCD68FF5FFA4D139C355A77C55",\r
-                       "0B18B3D16F491619DA338640DF391D43",\r
-                       "DBE09AC8F66027BF20CB6E434F252EFC",\r
-                       "6D04E5E43C5B9CBE05FEB9606B6480FE",\r
-                       "DD1D6553B96BE526D9FEE0FBD7176866",\r
-                       "0260CA7E3F979FD015B0DD4690E16D2A",\r
-                       "9893734DE10EDCC8A67C3B110B8B8CC6",\r
-                       "93B30B750516B2D18808D710C2EE84EF",\r
-                       "16F65FA47BE3CB5E6DFE7C6C37016C0E",\r
-                       "F3847210D5391E2360608E5ACB560581",\r
-                       "8754462CD223366D0753913E6AF2643D",\r
-                       "1EA20617468D1B806A1FD58145462017",\r
-                       "3B155D927355D737C6BE9DDA60136E2E",\r
-                       "26144F7B66DAA91B6333DBD3850502B3",\r
-                       "E4F9A4AB52CED8134C649BF319EBCC90",\r
-                       "B9DDD29AC6128A6CAB121E34A4C62B36",\r
-                       "6FCDDAD898F2CE4EFF51294F5EAAF5C9",\r
-                       "C9A6FE2BF4028080BEA6F7FC417BD7E3",\r
-                       "6A2026846D8609D60F298A9C0673127F",\r
-                       "2CB25C005E26EFEA44336C4C97A4240B",\r
-                       "496967AB8680DDD73D09A0E4C7DCC8AA",\r
-                       "D5AF94DE93487D1F3A8C577CB84A66A4",\r
-                       "84BDAC569CAE2828705F267CC8376E90",\r
-                       "F7401DDA5AD5AB712B7EB5D10C6F99B6",\r
-                       "1C9D54318539EBD4C3B5B7E37BF119F0",\r
-                       "ACA572D65FB2764CFFD4A6ECA090EA0D",\r
-                       "36D9C627B8C2A886A10CCB36EAE3DFBB",\r
-                       "010EDBF5981E143A81D646E597A4A568",\r
-                       "8DB44D538DC20CC2F40F3067FD298E60",\r
-                       "930EB53BC71E6AC4B82972BDCD5AAFB3",\r
-                       "6C42A81EDCBC9517CCD89C30C95597B4",\r
-                       "DA389847AD06DF19D76EE119C71E1DD3",\r
-                       "E018FDAE13D3118F9A5D1A647A3F0462",\r
-                       "2AA65DB36264239D3846180FABDFAD20",\r
-                       "1472163E9A4F780F1CEB44B07ECF4FDB",\r
-                       "C8273FDC8F3A9F72E91097614B62397C",\r
-                       "66C8427DCD733AAF7B3470CB7D976E3F",\r
-                       "146131CB17F1424D4F8DA91E6F80C1D0",\r
-                       "2610D0AD83659081AE085266A88770DC",\r
-                       "38A2B5A974B0575C5D733917FB0D4570",\r
-                       "E21D401EBC60DE20D6C486E4F39A588B",\r
-                       "E51D5F88C670B079C0CA1F0C2C4405A2",\r
-                       "246A94788A642FB3D1B823C8762380C8",\r
-                       "B80C391C5C41A4C3B30C68E0E3D7550F",\r
-                       "B77C4754FC64EB9A1154A9AF0BB1F21C",\r
-                       "FB554DE520D159A06BF219FC7F34A02F",\r
-                       "A89FBA152D76B4927BEED160DDB76C57",\r
-                       "5676EAB4A98D2E8473B3F3D46424247C",\r
-                       "4E8F068BD7EDE52A639036EC86C33568",\r
-                       "F0193C4D7AFF1791EE4C07EB4A1824FC",\r
-                       "AC8686EECA9BA761AFE82D67B928C33F",\r
-                       "5FAF8573E33B145B6A369CD3606AB2C9",\r
-                       "31587E9944AB1C16B844ECAD0DF2E7DA",\r
-                       "D017FECD91148ABA37F6F3068AA67D8A",\r
-                       "788EF2F021A73CBA2794B616078A8500",\r
-                       "5D1EF20DCED6BCBC12131AC7C54788AA",\r
-                       "B3C8CF961FAF9EA05FDDE6D1E4D8F663",\r
-                       "143075C70605861C7FAC6526199E459F",\r
-                       "A5AE12EADE9A87268D898BFC8FC0252A",\r
-                       "0924F7CF2E877A4819F5244A360DCEA9",\r
-                       "3D9E9635AFCC3E291CC7AB3F27D1C99A",\r
-                       "9D80FEEBF87510E2B8FB98BB54FD788C",\r
-                       "5F9D1A082A1A37985F174002ECA01309",\r
-                       "A390EBB1D1403930184A44B4876646E4",\r
-                       "700FE918981C3195BB6C4BCB46B74E29",\r
-                       "907984406F7BF2D17FB1EB15B673D747",\r
-                       "C32A956DCFC875C2AC7C7CC8B8CC26E1",\r
-                       "02646E2EBFA9B820CF8424E9B9B6EB51",\r
-                       "621FDA3A5BBD54C6D3C685816BD4EAD8",\r
-                       "D4E216040426DFAF18B152469BC5AC2F",\r
-                       "9D0635B9D33B6CDBD71F5D246EA17CC8",\r
-                       "10ABAD1BD9BAE5448808765583A2CC1A",\r
-                       "6891889E16544E355FF65A793C39C9A8",\r
-                       "CC735582E68072C163CD9DDF46B91279",\r
-                       "C5C68B9AEEB7F878DF578EFA562F9574",\r
-                       "5F4764395A667A47D73452955D0D2CE8",\r
-                       "701448331F66106CEFDDF1EB8267C357",\r
-                       "CB3EE56D2E14B4E1941666F13379D657",\r
-                       "9FE16EFD18AB6E1981191851FEDB0764",\r
-                       "3DC9BA24E1B223589B147ADCEB4C8E48",\r
-                       "1C333032682E7D4DE5E5AFC05C3E483C",\r
-                       "D593CC99A95AFEF7E92038E05A59D00A",\r
-                       "51E7F96F53B4353923452C222134E1EC",\r
-                       "4075B357A1A2B473400C3B25F32F81A4",\r
-                       "302E341A3EBCD74F0D55F61714570284",\r
-                       "57ABDD8231280DA01C5042B78CF76522",\r
-                       "17F9EA7EEA17AC1ADF0E190FEF799E92",\r
-                       "2E1BDD563DD87EE5C338DD6D098D0A7A",\r
-                       "EB869996E6F8BFB2BFDD9E0C4504DBB2",\r
-                       "C2E01549E9DECF317468B3E018C61BA8",\r
-                       "8DA875D033C01DD463B244A1770F4A22",\r
-                       "8BA0DCF3A186844F026D022F8839D696",\r
-                       "E9691FF9A6CC6970E51670A0FD5B88C1",\r
-                       "F2BAEC06FAEED30F88EE63BA081A6E5B",\r
-                       "9C39D4C459AE5753394D6094ADC21E78",\r
-                       "6345B532A11904502EA43BA99C6BD2B2",\r
-                       "5FFAE3061A95172E4070CEDCE1E428C8",\r
-                       "0A4566BE4CDF9ADCE5DEC865B5AB34CD",\r
-                       "CA17FCCE79B7404F2559B22928F126FB",\r
-                       "97CA39B849ED73A6470A97C821D82F58",\r
-                       "8198CB06BC684C6D3E9B7989428DCF7A",\r
-                       "F53C464C705EE0F28D9A4C59374928BD",\r
-                       "9ADB3D4CCA559BB98C3E2ED73DBF1154",\r
-                       "1946DABF6A03A2A2C3D0B05080AED6FC",\r
-                       "5ED301D747D3CC715445EBDEC62F2FB4",\r
-                       "6585C8F43D13A6BEAB6419FC5935B9D0",\r
-                       "2A5B56A596680FCC0E05F5E0F151ECAE",\r
-                       "F5D6FF414FD2C6181494D20C37F2B8C4",\r
-                       "85399C01F59FFFB5204F19F8482F00B8",\r
-                       "92097B4C88A041DDF98144BC8D22E8E7",\r
-                       "89BD5B73B356AB412AEF9F76CEA2D65C",\r
-                       "2536969093C55FF9454692F2FAC2F530",\r
-                       "07FC76A872843F3F6E0081EE9396D637",\r
-                       "E38BA8EC2AA741358DCC93E8F141C491",\r
-                       "D028EE23E4A89075D0B03E868D7D3A42",\r
-                       "8CD9423DFC459E547155C5D1D522E540",\r
-                       "080E9517EB1677719ACF728086040AE3",\r
-                       "7C1700211A3991FC0ECDED0AB3E576B0",\r
-                       "DABCBCC855839251DB51E224FBE87435",\r
-                       "68D56FAD0406947A4DD27A7448C10F1D",\r
-                       "DA9A11479844D1FFEE24BBF3719A9925",\r
-                       "5E4BA572F8D23E738DA9B05BA24B8D81",\r
-                       "A115A2065D667E3F0B883837A6E903F8",\r
-                       "3E9E90DC33EAC2437D86AD30B137E66E",\r
-                       "01CE82D8FBCDAE824CB3C48E495C3692",\r
-                       "0C9CFF163CE936FAAF083CFD3DEA3117",\r
-                       "5131BA9BD48F2BBA85560680DF504B52",\r
-                       "9DC503BBF09823AEC8A977A5AD26CCB2",\r
-                       "9A6DB0C0862E506A9E397225884041D7",\r
-                       "430BF9570804185E1AB6365FC6A6860C",\r
-                       "3525EBC02F4886E6A5A3762813E8CE8A",\r
-                       "07FA265C763779CCE224C7BAD671027B",\r
-                       "E8B72B4E8BE243438C9FFF1F0E205872",\r
-                       "109D4F999A0E11ACE1F05E6B22CBCB50",\r
-                       "45A5E8D4C3ED58403FF08D68A0CC4029",\r
-                       "196865964DB3D417B6BD4D586BCB7634",\r
-                       "60436AD45AC7D30D99195F815D98D2AE",\r
-                       "BB07A23F0B61014B197620C185E2CD75",\r
-                       "5BC0B2850129C854423AFF0751FE343B",\r
-                       "7541A78F96738E6417D2A24BD2BECA40",\r
-                       "B0A303054412882E464591F1546C5B9E",\r
-                       "778C06D8A355EEEE214FCEA14B4E0EEF",\r
-                       "09614206D15CBACE63227D06DB6BEEBB",\r
-                       "41B97FB20E427A9FDBBB358D9262255D",\r
-                       "C1940F703D845F957652C2D64ABD7ADF",\r
-                       "D2D44FCDAE5332343366DB297EFCF21B",\r
-                       "EA8196B79DBE167B6AA9896E287EED2B",\r
-                       "D6B0B0C4BA6C7DBE5ED467A1E3F06C2D",\r
-                       "EC51EB295250C22C2FB01816FB72BCAE",\r
-                       "ADED6630A07CE9C7408A155D3BD0D36F",\r
-                       "697C9245B9937F32F5D1C82319F0363A",\r
-                       "AAD5AD50C6262AAEC30541A1B7B5B19C",\r
-                       "7D34B893855341EC625BD6875AC18C0D",\r
-                       "7EF05105440F83862F5D780E88F02B41",\r
-                       "C377C06403382061AF2C9C93A8E70DF6",\r
-                       "1DBDB3FFDC052DACC83318853ABC6DE5",\r
-                       "69A6EAB00432517D0BF483C91C0963C7",\r
-                       "0797F41DC217C80446E1D514BD6AB197",\r
-                       "9DFD76575902A637C01343C58E011A03",\r
-                       "ACF4328AE78F34B9FA9B459747CC2658",\r
-                       "B0479AEA12BAC4FE2384CF98995150C6",\r
-                       "9DD52789EFE3FFB99F33B3DA5030109A",\r
-                       "ABBB755E4621EF8F1214C19F649FB9FD",\r
-                       "DA27FB8174357BCE2BED0E7354F380F9",\r
-                       "C59A0663F0993838F6E5856593BDC5EF",\r
-                       "ED60B264B5213E831607A99C0CE5E57E",\r
-                       "E50548746846F3EB77B8C520640884ED",\r
-                       "28282CC7D21D6A2923641E52D188EF0C",\r
-                       "0DFA5B02ABB18E5A815305216D6D4F8E",\r
-                       "7359635C0EECEFE31D673395FB46FB99",\r
-                       "73C679F7D5AEF2745C9737BB4C47FB36",\r
-                       "B192BD472A4D2EAFB786E97458967626",\r
-                       "0EC327F6C8A2B147598CA3FDE61DC6A4",\r
-                       "FC418EB3C41B859B38D4B6F646629729",\r
-                       "30249E5AC282B1C981EA64B609F3A154",\r
-                       "5E6E08646D12150776BB43C2D78A9703",\r
-                       "FAEB3D5DE652CD3447DCEB343F30394A",\r
-                       "A8E88706823F6993EF80D05C1C7B2CF0",\r
-                       "8CED86677E6E00A1A1B15968F2D3CCE6",\r
-                       "9FC7C23858BE03BDEBB84E90DB6786A9",\r
-                       "B4FBD65B33F70D8CF7F1111AC4649C36",\r
-                       "C5C32D5ED03C4B53CC8C1BD0EF0DBBF6",\r
-                       "D1A7F03B773E5C212464B63709C6A891",\r
-                       "6B7161D8745947AC6950438EA138D028",\r
-                       "FD47A9F7E366EE7A09BC508B00460661",\r
-                       "00D40B003DC3A0D9310B659B98C7E416",\r
-                       "EEA4C79DCC8E2BDA691F20AC48BE0717",\r
-                       "E78F43B11C204403E5751F89D05A2509",\r
-                       "D0F0E3D1F1244BB979931E38DD1786EF",\r
-                       "042E639DC4E1E4DDE7B75B749EA6F765",\r
-                       "BC032FDD0EFE29503A980A7D07AB46A8",\r
-                       "0C93AC949C0DA6446EFFB86183B6C910",\r
-                       "E0D343E14DA75C917B4A5CEC4810D7C2",\r
-                       "0EAFB821748408279B937B626792E619",\r
-                       "FA1AC6E02D23B106A1FEF18B274A553F",\r
-                       "0DADFE019CD12368075507DF33C1A1E9",\r
-                       "3A0879B414465D9FFBAF86B33A63A1B9",\r
-                       "62199FADC76D0BE1805D3BA0B7D914BF",\r
-                       "1B06D6C5D333E742730130CF78E719B4",\r
-                       "F1F848824C32E9DCDCBF21580F069329",\r
-                       "1A09050CBD684F784D8E965E0782F28A",\r
-                       "79C2969E7DED2BA7D088F3F320692360",\r
-                       "091A658A2F7444C16ACCB669450C7B63",\r
-                       "97C1E3A72CCA65FA977D5ED0E8A7BBFC",\r
-                       "70C430C6DB9A17828937305A2DF91A2A",\r
-                       "629553457FBE2479098571C7C903FDE8",\r
-                       "A25B25A61F612669E7D91265C7D476BA",\r
-                       "EB7E4E49B8AE0F024570DDA293254FED",\r
-                       "38FE15D61CCA84516E924ADCE5014F67",\r
-                       "3AD208492249108C9F3EBEB167AD0583",\r
-                       "299BA9F9BF5AB05C3580FC26EDD1ED12",\r
-                       "19DC705B857A60FB07717B2EA5717781",\r
-                       "FFC8AEB885B5EFCAD06B6DBEBF92E76B",\r
-                       "F58900C5E0B385253FF2546250A0142B",\r
-                       "2EE67B56280BC462429CEE6E3370CBC1",\r
-                       "20DB650A9C8E9A84AB4D25F7EDC8F03F",\r
-                       "3C36DA169525CF818843805F25B78AE5",\r
-                       "9A781D960DB9E45E37779042FEA51922",\r
-                       "6560395EC269C672A3C288226EFDBA77",\r
-                       "8C772B7A189AC544453D5916EBB27B9A",\r
-                       "77CA5468CC48E843D05F78EED9D6578F",\r
-                       "72CDCC71DC82C60D4429C9E2D8195BAA",\r
-                       "8080D68CE60E94B40B5B8B69EEB35AFA",\r
-                       "44222D3CDE299C04369D58AC0EBA1E8E",\r
-                       "9B8721B0A8DFC691C5BC5885DBFCB27A",\r
-                       "0DC015CE9A3A3414B5E62EC643384183",\r
-                       "705715448A8DA412025CE38345C2A148",\r
-                       "C32B5B0B6FBAE165266C569F4B6ECF0B",\r
-                       "4DCA6C75192A01DDCA9476AF2A521E87",\r
-                       "058691E627ECBC36AC07B6DB423BD698",\r
-                       "7444527095838FE080FC2BCDD30847EB"];\r
-                       \r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var aes:AESKey = new AESKey(key);\r
-                               aes.encrypt(pt);\r
-                               var out:String = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+cts[i]+" to "+out, cts[i]==out);\r
-                               // now go back to plaintext.\r
-                               aes.decrypt(pt);\r
-                               out = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+pts[i]+" to "+out, pts[i]==out);\r
-                       }\r
-               }\r
-               \r
-       \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ARC4Test.as
deleted file mode 100755 (executable)
index 94683c3..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**\r
- * ARC4Test\r
- * \r
- * A test class for ARC4\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.util.Hex;\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.crypto.prng.ARC4;\r
-       \r
-       public class ARC4Test extends TestCase\r
-       {\r
-               public function ARC4Test(h:ITestHarness)\r
-               {\r
-                       super(h, "ARC4 Test");\r
-                       runTest(testLameVectors,"ARC4 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Sad test vectors pilfered from\r
-                * http://en.wikipedia.org/wiki/RC4\r
-                */\r
-               public function testLameVectors():void {\r
-                       var keys:Array = [\r
-                       Hex.fromString("Key"),\r
-                       Hex.fromString("Wiki"),\r
-                       Hex.fromString("Secret")];\r
-                       var pts:Array = [\r
-                       Hex.fromString("Plaintext"),\r
-                       Hex.fromString("pedia"),\r
-                       Hex.fromString("Attack at dawn")];\r
-                       var cts:Array = [\r
-                       "BBF316E8D940AF0AD3",\r
-                       "1021BF0420",\r
-                       "45A01F645FC35B383552544B9BF5"];\r
-                       \r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var rc4:ARC4 = new ARC4(key);\r
-                               rc4.encrypt(pt);\r
-                               var out:String = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+cts[i]+" to "+out, cts[i]==out);\r
-                               // now go back to plaintext\r
-                               rc4.init(key);\r
-                               rc4.decrypt(pt);\r
-                               out = Hex.fromArray(pt);\r
-                               assert("comparing "+pts[i]+" to "+out, pts[i]==out);\r
-                       }\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BigIntegerTest.as
deleted file mode 100755 (executable)
index ac6a4ee..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/**\r
- * BigIntegerTest\r
- * \r
- * A test class for BigInteger\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.math.BigInteger;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       public class BigIntegerTest extends TestCase\r
-       {\r
-               public function BigIntegerTest(h:ITestHarness)\r
-               {\r
-                       super(h, "BigInteger Tests");\r
-                       runTest(testAdd, "BigInteger Addition");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               public function testAdd():void {\r
-                       var n1:BigInteger = BigInteger.nbv(25);\r
-                       var n2:BigInteger = BigInteger.nbv(1002);\r
-                       var n3:BigInteger = n1.add(n2);\r
-                       var v:int = n3.valueOf();\r
-                       assert("25+1002 = "+v, 25+1002==v);\r
-\r
-                       var p:BigInteger = new BigInteger(Hex.toArray("e564d8b801a61f47"));\r
-                       var xp:BigInteger = new BigInteger(Hex.toArray("99246db2a3507fa"));\r
-                       \r
-                       xp = xp.add(p);\r
-                       \r
-                       assert("xp==eef71f932bdb2741", xp.toString(16)=="eef71f932bdb2741");\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/BlowFishKeyTest.as
deleted file mode 100755 (executable)
index 96645fb..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/**\r
- * BlowFishKeyTest\r
- * \r
- * A test class for BlowFishKey\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.symmetric.BlowFishKey;\r
-       import com.hurlant.util.Hex;\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class BlowFishKeyTest extends TestCase\r
-       {\r
-               public function BlowFishKeyTest(h:ITestHarness)\r
-               {\r
-                       super(h, "BlowFishKey Test");\r
-                       runTest(testECB,"BlowFish ECB Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Test vectors from http://www.schneier.com/code/vectors.txt\r
-                */\r
-               public function testECB():void {\r
-                       var keys:Array = [\r
-                       "0000000000000000",\r
-                       "FFFFFFFFFFFFFFFF",\r
-                       "3000000000000000",\r
-                       "1111111111111111",\r
-                       "0123456789ABCDEF",\r
-                       "1111111111111111",\r
-                       "0000000000000000",\r
-                       "FEDCBA9876543210",\r
-                       "7CA110454A1A6E57",\r
-                       "0131D9619DC1376E",\r
-                       "07A1133E4A0B2686",\r
-                       "3849674C2602319E",\r
-                       "04B915BA43FEB5B6",\r
-                       "0113B970FD34F2CE",\r
-                       "0170F175468FB5E6",\r
-                       "43297FAD38E373FE",\r
-                       "07A7137045DA2A16",\r
-                       "04689104C2FD3B2F",\r
-                       "37D06BB516CB7546",\r
-                       "1F08260D1AC2465E",\r
-                       "584023641ABA6176",\r
-                       "025816164629B007",\r
-                       "49793EBC79B3258F",\r
-                       "4FB05E1515AB73A7",\r
-                       "49E95D6D4CA229BF",\r
-                       "018310DC409B26D6",\r
-                       "1C587F1C13924FEF",\r
-                       "0101010101010101",\r
-                       "1F1F1F1F0E0E0E0E",\r
-                       "E0FEE0FEF1FEF1FE",\r
-                       "0000000000000000",\r
-                       "FFFFFFFFFFFFFFFF",\r
-                       "0123456789ABCDEF",\r
-                       "FEDCBA9876543210" ];\r
-                       var pts:Array = [\r
-                       "0000000000000000",\r
-                       "FFFFFFFFFFFFFFFF",\r
-                       "1000000000000001",\r
-                       "1111111111111111",\r
-                       "1111111111111111",\r
-                       "0123456789ABCDEF",\r
-                       "0000000000000000",\r
-                       "0123456789ABCDEF",\r
-                       "01A1D6D039776742",\r
-                       "5CD54CA83DEF57DA",\r
-                       "0248D43806F67172",\r
-                       "51454B582DDF440A",\r
-                       "42FD443059577FA2",\r
-                       "059B5E0851CF143A",\r
-                       "0756D8E0774761D2",\r
-                       "762514B829BF486A",\r
-                       "3BDD119049372802",\r
-                       "26955F6835AF609A",\r
-                       "164D5E404F275232",\r
-                       "6B056E18759F5CCA",\r
-                       "004BD6EF09176062",\r
-                       "480D39006EE762F2",\r
-                       "437540C8698F3CFA",\r
-                       "072D43A077075292",\r
-                       "02FE55778117F12A",\r
-                       "1D9D5C5018F728C2",\r
-                       "305532286D6F295A",\r
-                       "0123456789ABCDEF",\r
-                       "0123456789ABCDEF",\r
-                       "0123456789ABCDEF",\r
-                       "FFFFFFFFFFFFFFFF",\r
-                       "0000000000000000",\r
-                       "0000000000000000",\r
-                       "FFFFFFFFFFFFFFFF" ];\r
-                       var cts:Array = [\r
-                       "4EF997456198DD78",\r
-                       "51866FD5B85ECB8A",\r
-                       "7D856F9A613063F2",\r
-                       "2466DD878B963C9D",\r
-                       "61F9C3802281B096",\r
-                       "7D0CC630AFDA1EC7",\r
-                       "4EF997456198DD78",\r
-                       "0ACEAB0FC6A0A28D",\r
-                       "59C68245EB05282B",\r
-                       "B1B8CC0B250F09A0",\r
-                       "1730E5778BEA1DA4",\r
-                       "A25E7856CF2651EB",\r
-                       "353882B109CE8F1A",\r
-                       "48F4D0884C379918",\r
-                       "432193B78951FC98",\r
-                       "13F04154D69D1AE5",\r
-                       "2EEDDA93FFD39C79",\r
-                       "D887E0393C2DA6E3",\r
-                       "5F99D04F5B163969",\r
-                       "4A057A3B24D3977B",\r
-                       "452031C1E4FADA8E",\r
-                       "7555AE39F59B87BD",\r
-                       "53C55F9CB49FC019",\r
-                       "7A8E7BFA937E89A3",\r
-                       "CF9C5D7A4986ADB5",\r
-                       "D1ABB290658BC778",\r
-                       "55CB3774D13EF201",\r
-                       "FA34EC4847B268B2",\r
-                       "A790795108EA3CAE",\r
-                       "C39E072D9FAC631D",\r
-                       "014933E0CDAFF6E4",\r
-                       "F21E9A77B71C49BC",\r
-                       "245946885754369A",\r
-                       "6B5C5A9C5D9E0A5A" ];\r
-\r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var bf:BlowFishKey = new BlowFishKey(key);\r
-                               bf.encrypt(pt);\r
-                               var out:String = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+cts[i]+" to "+out, cts[i]==out);\r
-                               // now go back to plaintext\r
-                               bf.decrypt(pt);\r
-                               out = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+pts[i]+" to "+out, pts[i]==out);\r
-                       }\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CBCModeTest.as
deleted file mode 100755 (executable)
index 153aa00..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/**\r
- * CBCModeTest\r
- * \r
- * A test class for CBCMode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.symmetric.AESKey;\r
-       import com.hurlant.crypto.symmetric.CBCMode;\r
-       import com.hurlant.crypto.symmetric.NullPad;\r
-       import com.hurlant.crypto.symmetric.XTeaKey;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class CBCModeTest extends TestCase\r
-       {\r
-               public function CBCModeTest(h:ITestHarness) {\r
-                       super(h, "CBCMode Test");\r
-                       runTest(testAES,"CBC AES Test Vectors");\r
-                       runTest(testXTea,"CBC XTea Test Vectors");\r
-                       //\r
-                       runTest(testCBC_AES128, "CBC AES-128 Test Vectors");\r
-                       runTest(testCBC_AES192, "CBC AES-192 Test Vectors");\r
-                       runTest(testCBC_AES256, "CBC AES-256 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Hawt NIST Vectors: http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf\r
-                * Section F.2.1 and below.\r
-                */\r
-               public function testCBC_AES128():void {\r
-                       var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "7649abac8119b246cee98e9b12e9197d" + \r
-                               "5086cb9b507219ee95db113a917678b2" + \r
-                               "73bed6b8e3c1743b7116e69e22229516" + \r
-                               "3ff1caa1681fac09120eca307586e1a7");\r
-                       var cbc:CBCMode = new CBCMode(new AESKey(key), new NullPad);\r
-                       cbc.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cbc.encrypt(src);\r
-                       assert("CBC_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cbc.decrypt(src);\r
-                       assert("CBC_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               public function testCBC_AES192():void {\r
-                       var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "4f021db243bc633d7178183a9fa071e8" + \r
-                               "b4d9ada9ad7dedf4e5e738763f69145a" + \r
-                               "571b242012fb7ae07fa9baac3df102e0" + \r
-                               "08b0e27988598881d920a9e64f5615cd");\r
-                       var cbc:CBCMode = new CBCMode(new AESKey(key), new NullPad);\r
-                       cbc.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cbc.encrypt(src);\r
-                       assert("CBC_AES192 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cbc.decrypt(src);\r
-                       assert("CBC_AES192 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               public function testCBC_AES256():void {\r
-                       var key:ByteArray = Hex.toArray(\r
-                               "603deb1015ca71be2b73aef0857d7781" + \r
-                               "1f352c073b6108d72d9810a30914dff4");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "f58c4c04d6e5f1ba779eabfb5f7bfbd6" + \r
-                               "9cfc4e967edb808d679f777bc6702c7d" + \r
-                               "39f23369a9d9bacfa530e26304231461" + \r
-                               "b2eb05e2c39be9fcda6c19078c6a9d1b");\r
-                       var cbc:CBCMode = new CBCMode(new AESKey(key), new NullPad);\r
-                       cbc.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cbc.encrypt(src);\r
-                       assert("CBC_AES256 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cbc.decrypt(src);\r
-                       assert("CBC_AES256 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               \r
-               \r
-               /**\r
-                * For now the main goal is to show we can decrypt what we encrypt in this mode.\r
-                * Eventually, this should get correlated with some well known vectors.\r
-                */\r
-               public function testAES():void {\r
-                       var keys:Array = [\r
-                       "00010203050607080A0B0C0D0F101112",\r
-                       "14151617191A1B1C1E1F202123242526"];\r
-                       var cts:Array = [\r
-                       "D8F532538289EF7D06B506A4FD5BE9C94894C5508A8D8E29AB600DB0261F0555A8FA287B89E65C0973F1F8283E70C72863FE1C8F1F782084CE05626E961A67B3",\r
-                       "59AB30F4D4EE6E4FF9907EF65B1FB68C96890CE217689B1BE0C93ED51CF21BB5A0101A8C30714EC4F52DBC9C6F4126067D363F67ABE58463005E679B68F0B496"];\r
-                       var pts:Array = [\r
-                       "506812A45F08C889B97F5980038B8359506812A45F08C889B97F5980038B8359506812A45F08C889B97F5980038B8359",\r
-                       "5C6D71CA30DE8B8B00549984D2EC7D4B5C6D71CA30DE8B8B00549984D2EC7D4B5C6D71CA30DE8B8B00549984D2EC7D4B"];\r
-\r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var aes:AESKey = new AESKey(key);\r
-                               var cbc:CBCMode = new CBCMode(aes);\r
-                               cbc.IV = Hex.toArray("00000000000000000000000000000000");\r
-                               cbc.encrypt(pt);\r
-                               var str:String = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+cts[i]+" to "+str, cts[i]==str);\r
-                               // back to pt\r
-                               cbc.decrypt(pt);\r
-                               str = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+pts[i]+" to "+str, pts[i]==str);\r
-                       }\r
-               }\r
-               public function testXTea():void {\r
-                       var keys:Array=[\r
-                       "00000000000000000000000000000000",\r
-                       "2b02056806144976775d0e266c287843"];\r
-                       var cts:Array = [\r
-                       "2dc7e8d3695b0538d8f1640d46dca717790af2ab545e11f3b08e798eb3f17b1744299d4d20b534aa",\r
-                       "790958213819878370eb8251ffdac371081c5a457fc42502c63910306fea150be8674c3b8e675516"];\r
-                       var pts:Array=[\r
-                       "0000000000000000000000000000000000000000000000000000000000000000",\r
-                       "74657374206d652e74657374206d652e74657374206d652e74657374206d652e"];\r
-                       \r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var tea:XTeaKey = new XTeaKey(key);\r
-                               var cbc:CBCMode = new CBCMode(tea);\r
-                               cbc.IV = Hex.toArray("0000000000000000");\r
-                               cbc.encrypt(pt);\r
-                               var str:String = Hex.fromArray(pt);\r
-                               assert("comparing "+cts[i]+" to "+str, cts[i]==str);\r
-                               // now go back to plaintext.\r
-                               cbc.decrypt(pt);\r
-                               str = Hex.fromArray(pt);\r
-                               assert("comparing "+pts[i]+" to "+str, pts[i]==str);\r
-                       }\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFB8ModeTest.as
deleted file mode 100755 (executable)
index 481277f..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/**\r
- * CFB8ModeTest\r
- * \r
- * A test class for CFB8Mode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.crypto.symmetric.CFB8Mode;\r
-       import com.hurlant.crypto.symmetric.AESKey;\r
-       import com.hurlant.crypto.symmetric.NullPad;\r
-       \r
-       public class CFB8ModeTest extends TestCase\r
-       {\r
-               public function CFB8ModeTest(h:ITestHarness) {\r
-                       super(h,"CBF8Mode Test");\r
-                       runTest(testCFB8_AES128, "CFB-8 AES-128 Test Vectors");\r
-                       runTest(testCFB8_AES192, "CFB-8 AES-192 Test Vectors");\r
-                       runTest(testCFB8_AES256, "CFB-8 AES-192 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf\r
-                */\r
-               public function testCFB8_AES128():void {\r
-                       var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");\r
-                       var pt:ByteArray = Hex.toArray("6bc1bee22e409f96e93d7e117393172aae2d");\r
-                       var ct:ByteArray = Hex.toArray("3b79424c9c0dd436bace9e0ed4586a4f32b9");\r
-                       var cfb8:CFB8Mode = new CFB8Mode(new AESKey(key), new NullPad);\r
-                       cfb8.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cfb8.encrypt(src);\r
-                       assert("CFB8_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cfb8.decrypt(src);\r
-                       assert("CFB8_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               public function testCFB8_AES192():void {\r
-                       var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");\r
-                       var pt:ByteArray = Hex.toArray("6bc1bee22e409f96e93d7e117393172aae2d");\r
-                       var ct:ByteArray = Hex.toArray("cda2521ef0a905ca44cd057cbf0d47a0678a");\r
-                       var cfb8:CFB8Mode = new CFB8Mode(new AESKey(key), new NullPad);\r
-                       cfb8.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cfb8.encrypt(src);\r
-                       assert("CFB8_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cfb8.decrypt(src);\r
-                       assert("CFB8_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               public function testCFB8_AES256():void {\r
-                       var key:ByteArray = Hex.toArray("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4");\r
-                       var pt:ByteArray = Hex.toArray("6bc1bee22e409f96e93d7e117393172aae2d");\r
-                       var ct:ByteArray = Hex.toArray("dc1f1a8520a64db55fcc8ac554844e889700");\r
-                       var cfb8:CFB8Mode = new CFB8Mode(new AESKey(key), new NullPad);\r
-                       cfb8.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cfb8.encrypt(src);\r
-                       assert("CFB8_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cfb8.decrypt(src);\r
-                       assert("CFB8_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CFBModeTest.as
deleted file mode 100755 (executable)
index 9d63fe0..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/**\r
- * CFBModeTest\r
- * \r
- * A test class for CFBMode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.symmetric.AESKey;\r
-       import com.hurlant.crypto.symmetric.CFBMode;\r
-       import com.hurlant.crypto.symmetric.NullPad;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-\r
-       public class CFBModeTest extends TestCase\r
-       {\r
-               public function CFBModeTest(h:ITestHarness)\r
-               {\r
-                       super(h, "CFBMode Test");\r
-                       runTest(testCFB_AES128, "CFB AES-128 Test Vectors");\r
-                       runTest(testCFB_AES192, "CFB AES-192 Test Vectors");\r
-                       runTest(testCFB_AES256, "CFB AES-256 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf\r
-                */\r
-               public function testCFB_AES128():void {\r
-                       var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "3b3fd92eb72dad20333449f8e83cfb4a" + \r
-                               "c8a64537a0b3a93fcde3cdad9f1ce58b" + \r
-                               "26751f67a3cbb140b1808cf187a4f4df" + \r
-                               "c04b05357c5d1c0eeac4c66f9ff7f2e6");\r
-                       var cfb:CFBMode = new CFBMode(new AESKey(key), new NullPad);\r
-                       cfb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cfb.encrypt(src);\r
-                       assert("CFB_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cfb.decrypt(src);\r
-                       assert("CFB_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               public function testCFB_AES192():void {\r
-                       var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "cdc80d6fddf18cab34c25909c99a4174" + \r
-                               "67ce7f7f81173621961a2b70171d3d7a" + \r
-                               "2e1e8a1dd59b88b1c8e60fed1efac4c9" + \r
-                               "c05f9f9ca9834fa042ae8fba584b09ff");\r
-                       var cfb:CFBMode = new CFBMode(new AESKey(key), new NullPad);\r
-                       cfb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cfb.encrypt(src);\r
-                       assert("CFB_AES192 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cfb.decrypt(src);\r
-                       assert("CFB_AES192 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               public function testCFB_AES256():void {\r
-                       var key:ByteArray = Hex.toArray(\r
-                               "603deb1015ca71be2b73aef0857d7781" + \r
-                               "1f352c073b6108d72d9810a30914dff4");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "dc7e84bfda79164b7ecd8486985d3860" + \r
-                               "39ffed143b28b1c832113c6331e5407b" + \r
-                               "df10132415e54b92a13ed0a8267ae2f9" + \r
-                               "75a385741ab9cef82031623d55b1e471");\r
-                       var cfb:CFBMode = new CFBMode(new AESKey(key), new NullPad);\r
-                       cfb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       cfb.encrypt(src);\r
-                       assert("CFB_AES256 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       cfb.decrypt(src);\r
-                       assert("CFB_AES256 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/CTRModeTest.as
deleted file mode 100755 (executable)
index d82fda2..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/**\r
- * CTRModeTest\r
- * \r
- * A test class for CTRMode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.crypto.symmetric.CTRMode;\r
-       import com.hurlant.crypto.symmetric.AESKey;\r
-       import com.hurlant.crypto.symmetric.NullPad;\r
-       \r
-       public class CTRModeTest extends TestCase\r
-       {\r
-               public function CTRModeTest(h:ITestHarness)\r
-               {\r
-                       super(h, "CTRMode Test");\r
-                       runTest(testCTR_AES128, "CTR AES-128 Test Vectors");\r
-                       runTest(testCTR_AES192, "CTR AES-192 Test Vectors");\r
-                       runTest(testCTR_AES256, "CTR AES-256 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Vectors from http://csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38A.pdf\r
-                * Section F.5.1 and below.\r
-                */\r
-               public function testCTR_AES128():void {\r
-                       var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" +\r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "874d6191b620e3261bef6864990db6ce" + \r
-                               "9806f66b7970fdff8617187bb9fffdff" + \r
-                               "5ae4df3edbd5d35e5b4f09020db03eab" + \r
-                               "1e031dda2fbe03d1792170a0f3009cee");\r
-                       var ctr:CTRMode = new CTRMode(new AESKey(key), new NullPad);\r
-                       ctr.IV = Hex.toArray("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ctr.encrypt(src);\r
-                       var hsrc:String = Hex.fromArray(src);\r
-                       var hct:String = Hex.fromArray(ct);\r
-                       assert("CTR_AES128 test 1: "+hsrc+" != "+hct, hsrc==hct);\r
-                       ctr.decrypt(src);\r
-                       hsrc = Hex.fromArray(src);\r
-                       var hpt:String = Hex.fromArray(pt);\r
-                       assert("CTR_AES128 test 2: "+hsrc+" != "+hpt, hsrc==hpt);\r
-               }\r
-               public function testCTR_AES192():void {\r
-                       var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" +\r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "1abc932417521ca24f2b0459fe7e6e0b" + \r
-                               "090339ec0aa6faefd5ccc2c6f4ce8e94" + \r
-                               "1e36b26bd1ebc670d1bd1d665620abf7" + \r
-                               "4f78a7f6d29809585a97daec58c6b050");\r
-                       var ctr:CTRMode = new CTRMode(new AESKey(key), new NullPad);\r
-                       ctr.IV = Hex.toArray("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ctr.encrypt(src);\r
-                       var hsrc:String = Hex.fromArray(src);\r
-                       var hct:String = Hex.fromArray(ct);\r
-                       assert("CTR_AES192 test 1: "+hsrc+" != "+hct, hsrc==hct);\r
-                       ctr.decrypt(src);\r
-                       hsrc = Hex.fromArray(src);\r
-                       var hpt:String = Hex.fromArray(pt);\r
-                       assert("CTR_AES192 test 2: "+hsrc+" != "+hpt, hsrc==hpt);\r
-               }\r
-               public function testCTR_AES256():void {\r
-                       var key:ByteArray = Hex.toArray("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" +\r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "601ec313775789a5b7a7f504bbf3d228" + \r
-                               "f443e3ca4d62b59aca84e990cacaf5c5" + \r
-                               "2b0930daa23de94ce87017ba2d84988d" + \r
-                               "dfc9c58db67aada613c2dd08457941a6");\r
-                       var ctr:CTRMode = new CTRMode(new AESKey(key), new NullPad);\r
-                       ctr.IV = Hex.toArray("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ctr.encrypt(src);\r
-                       var hsrc:String = Hex.fromArray(src);\r
-                       var hct:String = Hex.fromArray(ct);\r
-                       assert("CTR_AES256 test 1: "+hsrc+" != "+hct, hsrc==hct);\r
-                       ctr.decrypt(src);\r
-                       hsrc = Hex.fromArray(src);\r
-                       var hpt:String = Hex.fromArray(pt);\r
-                       assert("CTR_AES256 test 2: "+hsrc+" != "+hpt, hsrc==hpt);\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/DESKeyTest.as
deleted file mode 100755 (executable)
index 5d09e01..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/**\r
- * DesKeyTest\r
- * \r
- * A test class for DesKey\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.symmetric.DESKey;\r
-       import com.hurlant.util.Hex;\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class DESKeyTest extends TestCase\r
-       {\r
-               public function DESKeyTest(h:ITestHarness)\r
-               {\r
-                       super(h, "DESKey Test");\r
-                       runTest(testECB,"DES ECB Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Test vectors mostly grabbed from\r
-                * http://csrc.nist.gov/publications/nistpubs/800-17/800-17.pdf\r
-                * (Appendix A and B)\r
-                * incomplete.\r
-                */\r
-               public function testECB():void {\r
-                       var keys:Array = [\r
-                       "3b3898371520f75e", // grabbed from the output of some js implementation out there\r
-                       "10316E028C8F3B4A", // appendix A vector\r
-                       "0101010101010101", // appendix B Table 1, round 0\r
-                       "0101010101010101", // round 1\r
-                       "0101010101010101", // 2\r
-                       "0101010101010101", \r
-                       "0101010101010101",\r
-                       "0101010101010101",\r
-                       "0101010101010101",\r
-                       "0101010101010101",\r
-                       "0101010101010101", // round 8\r
-                       "8001010101010101", // app B, tbl 2, round 0\r
-                       "4001010101010101",\r
-                       "2001010101010101",\r
-                       "1001010101010101",\r
-                       "0801010101010101",\r
-                       "0401010101010101",\r
-                       "0201010101010101",\r
-                       "0180010101010101",\r
-                       "0140010101010101", // round 8\r
-                        ];\r
-                       var pts:Array = [\r
-                       "0000000000000000", // js\r
-                       "0000000000000000", // App A\r
-                       "8000000000000000", // App B, tbl 1, rnd0\r
-                       "4000000000000000",\r
-                       "2000000000000000",\r
-                       "1000000000000000",\r
-                       "0800000000000000", // rnd 4\r
-                       "0400000000000000",\r
-                       "0200000000000000",\r
-                       "0100000000000000",\r
-                       "0080000000000000", // round 8\r
-                       "0000000000000000", // App B, tbl2, rnd0\r
-                       "0000000000000000",\r
-                       "0000000000000000",\r
-                       "0000000000000000",\r
-                       "0000000000000000",\r
-                       "0000000000000000",\r
-                       "0000000000000000",\r
-                       "0000000000000000",\r
-                       "0000000000000000", // rnd 8\r
-                        ];\r
-                       var cts:Array = [\r
-                       "83A1E814889253E0", // js\r
-                       "82DCBAFBDEAB6602", // App A\r
-                       "95F8A5E5DD31D900", // App b, tbl 1, rnd 0\r
-                       "DD7F121CA5015619",\r
-                       "2E8653104F3834EA",\r
-                       "4BD388FF6CD81D4F",\r
-                       "20B9E767B2FB1456",\r
-                       "55579380D77138EF",\r
-                       "6CC5DEFAAF04512F",\r
-                       "0D9F279BA5D87260",\r
-                       "D9031B0271BD5A0A", // rnd 8\r
-                       "95A8D72813DAA94D", // App B, tbl 2, rnd 0\r
-                       "0EEC1487DD8C26D5",\r
-                       "7AD16FFB79C45926",\r
-                       "D3746294CA6A6CF3",\r
-                       "809F5F873C1FD761",\r
-                       "C02FAFFEC989D1FC",\r
-                       "4615AA1D33E72F10",\r
-                       "2055123350C00858",\r
-                       "DF3B99D6577397C8", // rnd 8\r
-                        ];\r
-                       \r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var des:DESKey = new DESKey(key);\r
-                               des.encrypt(pt);\r
-                               var out:String = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+cts[i]+" to "+out, cts[i]==out);\r
-                               // now go back to plaintext\r
-                               des.decrypt(pt);\r
-                               out = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+pts[i]+" to "+out, pts[i]==out);\r
-                       }\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ECBModeTest.as
deleted file mode 100755 (executable)
index 2f0179c..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/**\r
- * ECBModeTest\r
- * \r
- * A test class for ECBMode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.symmetric.AESKey;\r
-       import com.hurlant.crypto.symmetric.ECBMode;\r
-       import com.hurlant.crypto.symmetric.NullPad;\r
-       import com.hurlant.crypto.symmetric.XTeaKey;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class ECBModeTest extends TestCase\r
-       {\r
-               public function ECBModeTest(h:ITestHarness) {\r
-                       super(h, "ECBMode Test");\r
-                       runTest(testAES,"ECB AES Test Vectors");\r
-                       runTest(testXTea,"ECB XTea Test Vectors");\r
-                       runTest(testECB_AES128,"ECB AES-128 Test Vectors");\r
-                       runTest(testECB_AES192,"ECB AES-192 Test Vectors");\r
-                       runTest(testECB_AES256,"ECB AES-256 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               /**\r
-                * For now the main goal is to show we can decrypt what we encrypt in this mode.\r
-                * Eventually, this should get correlated with some well known vectors.\r
-                * yay. found hawt test vectors: http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf\r
-                */\r
-               public function testECB_AES128():void {\r
-                       var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "3ad77bb40d7a3660a89ecaf32466ef97" + \r
-                               "f5d3d58503b9699de785895a96fdbaaf" + \r
-                               "43b1cd7f598ece23881b00e3ed030688" + \r
-                               "7b0c785e27e8ad3f8223207104725dd4");\r
-                       var ecb:ECBMode = new ECBMode(new AESKey(key), new NullPad);\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ecb.encrypt(src);\r
-                       assert("ECB_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       ecb.decrypt(src);\r
-                       assert("ECB_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               public function testECB_AES192():void {\r
-                       var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "bd334f1d6e45f25ff712a214571fa5cc" + \r
-                               "974104846d0ad3ad7734ecb3ecee4eef" + \r
-                               "ef7afd2270e2e60adce0ba2face6444e" + \r
-                               "9a4b41ba738d6c72fb16691603c18e0e");\r
-                       var ecb:ECBMode = new ECBMode(new AESKey(key), new NullPad);\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ecb.encrypt(src);\r
-                       assert("ECB_AES192 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       ecb.decrypt(src);\r
-                       assert("ECB_AES192 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               public function testECB_AES256():void {\r
-                       var key:ByteArray = Hex.toArray(\r
-                                       "603deb1015ca71be2b73aef0857d7781" + \r
-                                       "1f352c073b6108d72d9810a30914dff4");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "f3eed1bdb5d2a03c064b5a7e3db181f8" + \r
-                               "591ccb10d410ed26dc5ba74a31362870" + \r
-                               "b6ed21b99ca6f4f9f153e7b1beafed1d" + \r
-                               "23304b7a39f9f3ff067d8d8f9e24ecc7");\r
-                       var ecb:ECBMode = new ECBMode(new AESKey(key), new NullPad);\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ecb.encrypt(src);\r
-                       assert("ECB_AES256 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       ecb.decrypt(src);\r
-                       assert("ECB_AES256 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               // crappier, older testing. keeping around for no good reason.\r
-               public function testAES():void {\r
-                       var keys:Array = [\r
-                       "00010203050607080A0B0C0D0F101112",\r
-                       "14151617191A1B1C1E1F202123242526"];\r
-                       var pts:Array = [\r
-                       "506812A45F08C889B97F5980038B8359506812A45F08C889B97F5980038B8359506812A45F08C889B97F5980038B8359",\r
-                       "5C6D71CA30DE8B8B00549984D2EC7D4B5C6D71CA30DE8B8B00549984D2EC7D4B5C6D71CA30DE8B8B00549984D2EC7D4B"];\r
-                       var cts:Array = [\r
-                       "D8F532538289EF7D06B506A4FD5BE9C9D8F532538289EF7D06B506A4FD5BE9C9D8F532538289EF7D06B506A4FD5BE9C96DE5F607AB7EB8202F3957703B04E8B5",\r
-                       "59AB30F4D4EE6E4FF9907EF65B1FB68C59AB30F4D4EE6E4FF9907EF65B1FB68C59AB30F4D4EE6E4FF9907EF65B1FB68C2993487785CB1CFDA6BB4F0F345F76C7"];\r
-\r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var aes:AESKey = new AESKey(key);\r
-                               var ecb:ECBMode = new ECBMode(aes);\r
-                               ecb.encrypt(pt);\r
-                               var str:String = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+cts[i]+" to "+str, cts[i]==str);\r
-                               // back to pt\r
-                               ecb.decrypt(pt);\r
-                               str = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+pts[i]+" to "+str, pts[i]==str);\r
-                       }\r
-               }\r
-               public function testXTea():void {\r
-                       var keys:Array=[\r
-                       "00000000000000000000000000000000",\r
-                       "2b02056806144976775d0e266c287843"];\r
-                       var pts:Array=[\r
-                       "0000000000000000000000000000000000000000000000000000000000000000",\r
-                       "74657374206d652e74657374206d652e74657374206d652e74657374206d652e"];\r
-                       var cts:Array=[\r
-                       "2dc7e8d3695b05382dc7e8d3695b05382dc7e8d3695b05382dc7e8d3695b053820578a874233632d",\r
-                       "79095821381987837909582138198783790958213819878379095821381987830e4dc3c48b2edf32"];\r
-                       // self-fullfilling vectors.\r
-                       // oh well, at least I can decrypt what I produce. :(\r
-                       \r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var tea:XTeaKey = new XTeaKey(key);\r
-                               var ecb:ECBMode = new ECBMode(tea);\r
-                               ecb.encrypt(pt);\r
-                               var str:String = Hex.fromArray(pt);\r
-                               assert("comparing "+cts[i]+" to "+str, cts[i]==str);\r
-                               // now go back to plaintext.\r
-                               ecb.decrypt(pt);\r
-                               str = Hex.fromArray(pt);\r
-                               assert("comparing "+pts[i]+" to "+str, pts[i]==str);\r
-                       }\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/HMACTest.as
deleted file mode 100755 (executable)
index 340293f..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/**\r
- * HMACTest\r
- * \r
- * A test class for HMAC\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.hash.HMAC;\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.crypto.hash.SHA1;\r
-       import com.hurlant.crypto.hash.SHA224;\r
-       import com.hurlant.crypto.hash.SHA256;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class HMACTest extends TestCase\r
-       {\r
-               public function HMACTest(h:ITestHarness)\r
-               {\r
-                       super(h, "HMAC Test");\r
-                       runTest(testHMAC_MD5,"HMAC MD5 Test Vectors");\r
-                       runTest(testHMAC_SHA_1,"HMAC SHA-1 Test Vectors");\r
-                       runTest(testHMAC_SHA_2,"HMAC SHA-224/SHA-256 Test Vectors");\r
-                       runTest(testHMAC96_MD5,"HMAC-96 MD5 Test Vectors");\r
-                       runTest(testHMAC96_SHA_1,"HMAC-96 SHA-1 Test Vectors");\r
-                       runTest(testHMAC128_SHA_2,"HMAC-128 SHA-224/SHA-256 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               /**\r
-                * Test vectors taking from RFC2202\r
-                * http://tools.ietf.org/html/rfc2202\r
-                * Yes, it's from an RFC, jefe! Now waddayawant?\r
-                */\r
-               public function testHMAC_SHA_1():void {\r
-                       var keys:Array = [\r
-                       "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",\r
-                       Hex.fromString("Jefe"),\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",\r
-                       "0102030405060708090a0b0c0d0e0f10111213141516171819",\r
-                       "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"];\r
-                       var pts:Array = [\r
-                       Hex.fromString("Hi There"),\r
-                       Hex.fromString("what do ya want for nothing?"),\r
-                       "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",\r
-                       "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",\r
-                       Hex.fromString("Test With Truncation"),\r
-                       Hex.fromString("Test Using Larger Than Block-Size Key - Hash Key First"),\r
-                       Hex.fromString("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data")];\r
-                       var cts:Array = [\r
-                       "b617318655057264e28bc0b6fb378c8ef146be00",\r
-                       "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79",\r
-                       "125d7342b9ac11cd91a39af48aa17b4f63f175d3", \r
-                       "4c9007f4026250c6bc8414f9bf50c86c2d7235da", \r
-                       "4c1a03424b55e07fe7f27be1d58bb9324a9a5a04",\r
-                       "aa4ae5e15272d00e95705637ce8a3b55ed402112",\r
-                       "e8e99d0f45237d786d6bbaa7965c7808bbff1a91"];\r
-                       \r
-                       var hmac:HMAC = new HMAC(new SHA1());\r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var digest:ByteArray = hmac.compute(key, pt);\r
-                               assert("HMAC-SHA-1 test "+i, Hex.fromArray(digest) == cts[i]);\r
-                       }\r
-               }\r
-               public function testHMAC96_SHA_1():void {\r
-                       var hmac:HMAC = new HMAC(new SHA1, 96);\r
-                       var key:ByteArray = Hex.toArray("0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c");\r
-                       var pt:ByteArray = Hex.toArray(Hex.fromString("Test With Truncation"));\r
-                       var ct:String = "4c1a03424b55e07fe7f27be1";\r
-                       var digest:ByteArray = hmac.compute(key, pt);\r
-                       assert("HMAC96-SHA-1 test", Hex.fromArray(digest) == ct);\r
-               }\r
-               \r
-               public function testHMAC_MD5():void {\r
-                       var keys:Array = [\r
-                       Hex.fromString("Jefe"),\r
-                       "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",\r
-                       "0102030405060708090a0b0c0d0e0f10111213141516171819",\r
-                       "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"];\r
-                       var pts:Array = [\r
-                       Hex.fromString("what do ya want for nothing?"),\r
-                       Hex.fromString("Hi There"),\r
-                       "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",\r
-                       "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",\r
-                       Hex.fromString("Test With Truncation"),\r
-                       Hex.fromString("Test Using Larger Than Block-Size Key - Hash Key First"),\r
-                       Hex.fromString("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data")];\r
-                       var cts:Array = [\r
-                       "750c783e6ab0b503eaa86e310a5db738",\r
-                       "9294727a3638bb1c13f48ef8158bfc9d",\r
-                       "56be34521d144c88dbb8c733f0e8b3f6", \r
-                       "697eaf0aca3a3aea3a75164746ffaa79",\r
-                       "56461ef2342edc00f9bab995690efd4c",\r
-                       "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd",\r
-                       "6f630fad67cda0ee1fb1f562db3aa53e"];\r
-\r
-                       var hmac:HMAC = new HMAC(new MD5());\r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var digest:ByteArray = hmac.compute(key, pt);\r
-                               assert("HMAC-MD5 test "+i, Hex.fromArray(digest) == cts[i]);\r
-                       }\r
-               }\r
-               public function testHMAC96_MD5():void {\r
-                       var hmac:HMAC = new HMAC(new MD5, 96);\r
-                       var key:ByteArray = Hex.toArray("0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c");\r
-                       var pt:ByteArray = Hex.toArray(Hex.fromString("Test With Truncation"));\r
-                       var ct:String = "56461ef2342edc00f9bab995";\r
-                       var digest:ByteArray = hmac.compute(key, pt);\r
-                       assert("HMAC96-MD5 test", Hex.fromArray(digest) == ct);\r
-               }\r
-               \r
-               /**\r
-                * Test vectors for HMAC-SHA-2 taken from RFC4231\r
-                * http://www.ietf.org/rfc/rfc4231.txt\r
-                * Still the same lame strings, but hidden in hex. why not.\r
-                */\r
-               public function testHMAC_SHA_2():void {\r
-                       var keys:Array = [\r
-                       "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",\r
-                       "4a656665",\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",\r
-                       "0102030405060708090a0b0c0d0e0f10111213141516171819",\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",\r
-                       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"];\r
-                       var pts:Array = [\r
-                       "4869205468657265",\r
-                       "7768617420646f2079612077616e7420666f72206e6f7468696e673f",\r
-                       "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",\r
-                       "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",\r
-                       "54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374",\r
-                       "5468697320697320612074657374207573696e672061206c6172676572207468616e20626c6f636b2d73697a65206b657920616e642061206c6172676572207468616e20626c6f636b2d73697a6520646174612e20546865206b6579206e6565647320746f20626520686173686564206265666f7265206265696e6720757365642062792074686520484d414320616c676f726974686d2e"];\r
-                       var cts224:Array = [\r
-                       "896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22",\r
-                       "a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44",\r
-                       "7fb3cb3588c6c1f6ffa9694d7d6ad2649365b0c1f65d69d1ec8333ea",\r
-                       "6c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5a",\r
-                       "95e9a0db962095adaebe9b2d6f0dbce2d499f112f2d2b7273fa6870e",\r
-                       "3a854166ac5d9f023f54d517d0b39dbd946770db9c2b95c9f6f565d1"];\r
-                       var cts256:Array = [\r
-                       "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7",\r
-                       "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843",\r
-                       "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe",\r
-                       "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b",\r
-                       "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54",\r
-                       "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2"];\r
-                       // 384 and 512 will be added. someday. if I ever figure how to do 64bit computations half efficiently in as3\r
-\r
-                       var hmac224:HMAC = new HMAC(new SHA224);\r
-                       var hmac256:HMAC = new HMAC(new SHA256);\r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var digest224:ByteArray = hmac224.compute(key, pt);\r
-                               assert("HMAC-SHA-224 test "+i, Hex.fromArray(digest224) == cts224[i]);\r
-                               var digest256:ByteArray = hmac256.compute(key, pt);\r
-                               assert("HMAC-SHA-256 test "+i, Hex.fromArray(digest256) == cts256[i]);\r
-                       }\r
-               }\r
-               public function testHMAC128_SHA_2():void {\r
-                       var hmac224:HMAC = new HMAC(new SHA224,128);\r
-                       var hmac256:HMAC = new HMAC(new SHA256,128);\r
-                       var key:ByteArray = Hex.toArray("0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c");\r
-                       var pt:ByteArray = Hex.toArray("546573742057697468205472756e636174696f6e");\r
-                       var ct224:String = "0e2aea68a90c8d37c988bcdb9fca6fa8";\r
-                       var ct256:String = "a3b6167473100ee06e0c796c2955552b";\r
-                       var digest224:ByteArray = hmac224.compute(key, pt);\r
-                       assert("HMAC128-SHA-224 test", Hex.fromArray(digest224) == ct224);\r
-                       var digest256:ByteArray = hmac256.compute(key, pt);\r
-                       assert("HMAC128-SHA-256 test", Hex.fromArray(digest256) == ct256);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/ITestHarness.as
deleted file mode 100755 (executable)
index 3a8daab..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**\r
- * ITestHarness\r
- * \r
- * An interface to specify what's available for test cases to use.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       public interface ITestHarness\r
-       {\r
-               function beginTestCase(name:String):void;\r
-               function endTestCase():void;\r
-               \r
-               function beginTest(name:String):void;\r
-               function passTest():void;\r
-               function failTest(msg:String):void;\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD2Test.as
deleted file mode 100755 (executable)
index 8b4106a..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/**\r
- * MD2Test\r
- * \r
- * A test class for MD2\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.hash.MD2;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class MD2Test extends TestCase\r
-       {\r
-               public function MD2Test(h:ITestHarness)\r
-               {\r
-                       super(h, "MD2 Test");\r
-                       runTest(testMd2, "MD2 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Test Vectors grabbed from\r
-                * http://www.faqs.org/rfcs/rfc1319.html\r
-                */\r
-               public function testMd2():void {\r
-                       var srcs:Array = [\r
-                       "",\r
-                       Hex.fromString("a"),\r
-                       Hex.fromString("abc"),\r
-                       Hex.fromString("message digest"),\r
-                       Hex.fromString("abcdefghijklmnopqrstuvwxyz"),\r
-                       Hex.fromString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),\r
-                       Hex.fromString("12345678901234567890123456789012345678901234567890123456789012345678901234567890")\r
-                       ];\r
-                       var hashes:Array = [\r
-                       "8350e5a3e24c153df2275c9f80692773",\r
-                       "32ec01ec4a6dac72c0ab96fb34c0b5d1",\r
-                       "da853b0d3f88d99b30283a69e6ded6bb",\r
-                       "ab4f496bfb2a530b219ff33031fe06b0",\r
-                       "4e8ddff3650292ab5a4108c3aa47940b",\r
-                       "da33def2a42df13975352846c30338cd",\r
-                       "d5976f79d83d3a0dc9806c3c66f3efd8"\r
-                       ];\r
-                       var md2:MD2 = new MD2;\r
-                       for (var i:uint=0;i<srcs.length;i++) {\r
-                               var src:ByteArray = Hex.toArray(srcs[i]);\r
-                               var digest:ByteArray = md2.hash(src);\r
-                               assert("MD2 Test "+i, Hex.fromArray(digest) == hashes[i]);\r
-                       }\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/MD5Test.as
deleted file mode 100755 (executable)
index 14c3f2f..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**\r
- * MD5Test\r
- * \r
- * A test class for MD5\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class MD5Test extends TestCase\r
-       {\r
-               public function MD5Test(h:ITestHarness)\r
-               {\r
-                       super(h, "MD5 Test");\r
-                       runTest(testMd5,"MD5 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Test Vectors grabbed from\r
-                * http://www.faqs.org/rfcs/rfc1321.html\r
-                */\r
-               public function testMd5():void {\r
-                       var srcs:Array = [\r
-                       "",\r
-                       Hex.fromString("a"),\r
-                       Hex.fromString("abc"),\r
-                       Hex.fromString("message digest"),\r
-                       Hex.fromString("abcdefghijklmnopqrstuvwxyz"),\r
-                       Hex.fromString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),\r
-                       Hex.fromString("12345678901234567890123456789012345678901234567890123456789012345678901234567890")\r
-                       ];\r
-                       var hashes:Array = [\r
-                       "d41d8cd98f00b204e9800998ecf8427e",\r
-                       "0cc175b9c0f1b6a831c399e269772661",\r
-                       "900150983cd24fb0d6963f7d28e17f72",\r
-                       "f96b697d7cb7938d525a2f31aaf161d0",\r
-                       "c3fcd3d76192e4007dfb496cca67e13b",\r
-                       "d174ab98d277d9f5a5611c2c9f419d9f",\r
-                       "57edf4a22be3c955ac49da2e2107b67a"\r
-                       ];\r
-                       var md5:MD5 = new MD5;\r
-                       for (var i:uint=0;i<srcs.length;i++) {\r
-                               var src:ByteArray = Hex.toArray(srcs[i]);\r
-                               var digest:ByteArray = md5.hash(src);\r
-                               assert("MD5 Test "+i, Hex.fromArray(digest) == hashes[i]);\r
-                       }\r
-                       \r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/OFBModeTest.as
deleted file mode 100755 (executable)
index 979d20b..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/**\r
- * OFBModeTest\r
- * \r
- * A test class for OFBMode\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.crypto.symmetric.OFBMode;\r
-       import com.hurlant.crypto.symmetric.AESKey;\r
-       import com.hurlant.crypto.symmetric.NullPad;\r
-       \r
-       public class OFBModeTest extends TestCase\r
-       {\r
-               public function OFBModeTest(h:ITestHarness)\r
-               {\r
-                       super(h, "OFBMode Test");\r
-                       runTest(testOFB_AES128,"OFB AES-128 Test Vectors");\r
-                       runTest(testOFB_AES192,"OFB AES-192 Test Vectors");\r
-                       runTest(testOFB_AES256,"OFB AES-256 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Nist Vectors: http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf\r
-                * Section F.4.1 and below.\r
-                */\r
-               public function testOFB_AES128():void {\r
-                       var key:ByteArray = Hex.toArray("2b7e151628aed2a6abf7158809cf4f3c");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" +\r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "3b3fd92eb72dad20333449f8e83cfb4a" +\r
-                               "7789508d16918f03f53c52dac54ed825" + \r
-                               "9740051e9c5fecf64344f7a82260edcc" + \r
-                               "304c6528f659c77866a510d9c1d6ae5e");\r
-                       var ofb:OFBMode = new OFBMode(new AESKey(key), new NullPad);\r
-                       ofb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ofb.encrypt(src);\r
-                       assert("OFB_AES128 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       ofb.decrypt(src);\r
-                       assert("OFB_AES128 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               \r
-               public function testOFB_AES192():void {\r
-                       var key:ByteArray = Hex.toArray("8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "cdc80d6fddf18cab34c25909c99a4174" + \r
-                               "fcc28b8d4c63837c09e81700c1100401" + \r
-                               "8d9a9aeac0f6596f559c6d4daf59a5f2" + \r
-                               "6d9f200857ca6c3e9cac524bd9acc92a");\r
-                       var ofb:OFBMode = new OFBMode(new AESKey(key), new NullPad);\r
-                       ofb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ofb.encrypt(src);\r
-                       assert("OFB_AES192 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       ofb.decrypt(src);\r
-                       assert("OFB_AES192 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               \r
-               public function testOFB_AES256():void {\r
-                       var key:ByteArray = Hex.toArray(\r
-                               "603deb1015ca71be2b73aef0857d7781" + \r
-                               "1f352c073b6108d72d9810a30914dff4");\r
-                       var pt:ByteArray = Hex.toArray(\r
-                               "6bc1bee22e409f96e93d7e117393172a" + \r
-                               "ae2d8a571e03ac9c9eb76fac45af8e51" + \r
-                               "30c81c46a35ce411e5fbc1191a0a52ef" + \r
-                               "f69f2445df4f9b17ad2b417be66c3710");\r
-                       var ct:ByteArray = Hex.toArray(\r
-                               "dc7e84bfda79164b7ecd8486985d3860" + \r
-                               "4febdc6740d20b3ac88f6ad82a4fb08d" + \r
-                               "71ab47a086e86eedf39d1c5bba97c408" + \r
-                               "0126141d67f37be8538f5a8be740e484");\r
-                       var ofb:OFBMode = new OFBMode(new AESKey(key), new NullPad);\r
-                       ofb.IV = Hex.toArray("000102030405060708090a0b0c0d0e0f");\r
-                       var src:ByteArray = new ByteArray;\r
-                       src.writeBytes(pt);\r
-                       ofb.encrypt(src);\r
-                       assert("OFB_AES256 test 1", Hex.fromArray(src)==Hex.fromArray(ct));\r
-                       ofb.decrypt(src);\r
-                       assert("OFB_AES256 test 2", Hex.fromArray(src)==Hex.fromArray(pt));\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/RSAKeyTest.as
deleted file mode 100755 (executable)
index 6ada0fc..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/**\r
- * RSAKeyTest\r
- * \r
- * A test class for RSAKey\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.rsa.RSAKey;\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.util.der.PEM;\r
-       \r
-       public class RSAKeyTest extends TestCase\r
-       {\r
-               public function RSAKeyTest(h:ITestHarness)\r
-               {\r
-                       super(h, "RSA Testing");\r
-                       \r
-                       runTest(testSmoke,"RSA smoke test");\r
-                       runTest(testGenerate, "RSA Key Generation test");\r
-                       runTest(testPEM, "RSA Private Key PEM parsing");\r
-                       runTest(testPEM2, "RSA Public Key PEM parsing");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               public function testSmoke():void {\r
-                       var N:String ="C4E3F7212602E1E396C0B6623CF11D26204ACE3E7D26685E037AD2507DCE82FC" + \r
-                                       "28F2D5F8A67FC3AFAB89A6D818D1F4C28CFA548418BD9F8E7426789A67E73E41";\r
-                       var E:String = "10001";\r
-                       var D:String = "7cd1745aec69096129b1f42da52ac9eae0afebbe0bc2ec89253598dcf454960e" + \r
-                                       "3e5e4ec9f8c87202b986601dd167253ee3fb3fa047e14f1dfd5ccd37e931b29d";\r
-                       var P:String = "f0e4dd1eac5622bd3932860fc749bbc48662edabdf3d2826059acc0251ac0d3b";\r
-                       var Q:String = "d13cb38fbcd06ee9bca330b4000b3dae5dae12b27e5173e4d888c325cda61ab3";\r
-                       var DMP1:String = "b3d5571197fc31b0eb6b4153b425e24c033b054d22b9c8282254fe69d8c8c593";\r
-                       var DMQ1:String = "968ffe89e50d7b72585a79b65cfdb9c1da0963cceb56c3759e57334de5a0ac3f";\r
-                       var IQMP:String = "d9bc4f420e93adad9f007d0e5744c2fe051c9ed9d3c9b65f439a18e13d6e3908";\r
-                       // create a key.\r
-                       var rsa:RSAKey = RSAKey.parsePrivateKey(N,E,D, P,Q,DMP1,DMQ1,IQMP);\r
-                       var txt:String = "hello";\r
-                       var src:ByteArray = Hex.toArray(Hex.fromString(txt));\r
-                       var dst:ByteArray = new ByteArray;\r
-                       var dst2:ByteArray = new ByteArray;\r
-                       rsa.encrypt(src, dst, src.length);\r
-                       rsa.decrypt(dst, dst2, dst.length);\r
-                       var txt2:String = Hex.toString(Hex.fromArray(dst2));\r
-                       assert("rsa encrypt+decrypt", txt==txt2);\r
-               }\r
-               \r
-               public function testGenerate():void {\r
-                       var rsa:RSAKey = RSAKey.generate(256, "10001");\r
-                       // same lame smoke test here.\r
-                       var txt:String = "hello";\r
-                       var src:ByteArray = Hex.toArray(Hex.fromString(txt));\r
-                       var dst:ByteArray = new ByteArray;\r
-                       var dst2:ByteArray = new ByteArray;\r
-                       rsa.encrypt(src, dst, src.length);\r
-                       rsa.decrypt(dst, dst2, dst.length);\r
-                       var txt2:String = Hex.toString(Hex.fromArray(dst2));\r
-                       assert("rsa encrypt+decrypt", txt==txt2);\r
-               }\r
-               \r
-               public function testPEM():void {\r
-                       var pem:String = "-----BEGIN RSA PRIVATE KEY-----\n" + \r
-                                       "MGQCAQACEQDJG3bkuB9Ie7jOldQTVdzPAgMBAAECEQCOGqcPhP8t8mX8cb4cQEaR\n" + \r
-                                       "AgkA5WTYuAGmH0cCCQDgbrto0i7qOQIINYr5btGrtccCCQCYy4qX4JDEMQIJAJll\n" + \r
-                                       "OnLVtCWk\n" + \r
-                                       "-----END RSA PRIVATE KEY-----";\r
-                       var rsa:RSAKey = PEM.readRSAPrivateKey(pem);\r
-                       //trace(rsa.dump());\r
-\r
-                       // obligatory use\r
-                       var txt:String = "hello";\r
-                       var src:ByteArray = Hex.toArray(Hex.fromString(txt));\r
-                       var dst:ByteArray = new ByteArray;\r
-                       var dst2:ByteArray = new ByteArray;\r
-                       rsa.encrypt(src, dst, src.length);\r
-                       rsa.decrypt(dst, dst2, dst.length);\r
-                       var txt2:String = Hex.toString(Hex.fromArray(dst2));\r
-                       assert("rsa encrypt+decrypt", txt==txt2);\r
-               }\r
-               public function testPEM2():void {\r
-                       var pem:String = "-----BEGIN PUBLIC KEY-----\n" + \r
-                                       "MCwwDQYJKoZIhvcNAQEBBQADGwAwGAIRAMkbduS4H0h7uM6V1BNV3M8CAwEAAQ==\n" + \r
-                                       "-----END PUBLIC KEY-----";\r
-                       var rsa:RSAKey = PEM.readRSAPublicKey(pem);\r
-                       //trace(rsa.dump());\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA1Test.as
deleted file mode 100755 (executable)
index dc216f9..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/**\r
- * SHA1Test\r
- * \r
- * A test class for SHA1\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.hash.SHA1;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class SHA1Test extends TestCase\r
-       {\r
-               public function SHA1Test(h:ITestHarness)\r
-               {\r
-                       super(h, "SHA-1 Test");\r
-                       runTest(testSha1,"SHA-1 Test Vectors");\r
-                       runTest(testLongSha1,"SHA-1 Long Test Vectors");\r
-                       h.endTestCase();\r
-               }               \r
-               \r
-               /**\r
-                * Test Vectors grabbed from\r
-                * http://csrc.nist.gov/cryptval/shs.htm\r
-                */\r
-               public function testSha1():void {\r
-                       var srcs:Array = [\r
-                       "",\r
-                       "a8",\r
-                       "3000",\r
-                       "42749e",\r
-                       "9fc3fe08",\r
-                       "b5c1c6f1af",\r
-                       "e47571e5022e",\r
-                       "3e1b28839fb758",\r
-                       "a81350cbb224cb90",\r
-                       "c243d167923dec3ce1",\r
-                       "50ac18c59d6a37a29bf4",\r
-                       "98e2b611ad3b1cccf634f6",\r
-                       "73fe9afb68e1e8712e5d4eec",\r
-                       "9e701ed7d412a9226a2a130e66",\r
-                       "6d3ee90413b0a7cbf69e5e6144ca",\r
-                       "fae24d56514efcb530fd4802f5e71f",\r
-                       "c5a22dd6eda3fe2bdc4ddb3ce6b35fd1",\r
-                       "d98cded2adabf08fda356445c781802d95",\r
-                       "bcc6d7087a84f00103ccb32e5f5487a751a2",\r
-                       "36ecacb1055434190dbbc556c48bafcb0feb0d",\r
-                       "5ff9edb69e8f6bbd498eb4537580b7fba7ad31d0",\r
-                       "c95b441d8270822a46a798fae5defcf7b26abace36",\r
-                       "83104c1d8a55b28f906f1b72cb53f68cbb097b44f860",\r
-                       "755175528d55c39c56493d697b790f099a5ce741f7754b",\r
-                       "088fc38128bbdb9fd7d65228b3184b3faac6c8715f07272f",\r
-                       "a4a586eb9245a6c87e3adf1009ac8a49f46c07e14185016895",\r
-                       "8e7c555270c006092c2a3189e2a526b873e2e269f0fb28245256",\r
-                       "a5f3bfa6bb0ba3b59f6b9cbdef8a558ec565e8aa3121f405e7f2f0",\r
-                       "589054f0d2bd3c2c85b466bfd8ce18e6ec3e0b87d944cd093ba36469",\r
-                       "a0abb12083b5bbc78128601bf1cbdbc0fdf4b862b24d899953d8da0ff3",\r
-                       "82143f4cea6fadbf998e128a8811dc75301cf1db4f079501ea568da68eeb",\r
-                       "9f1231dd6df1ff7bc0b0d4f989d048672683ce35d956d2f57913046267e6f3",\r
-                       "041c512b5eed791f80d3282f3a28df263bb1df95e1239a7650e5670fc2187919",\r
-                       "17e81f6ae8c2e5579d69dafa6e070e7111461552d314b691e7a3e7a4feb3fae418",\r
-                       "d15976b23a1d712ad28fad04d805f572026b54dd64961fda94d5355a0cc98620cf77",\r
-                       "09fce4d434f6bd32a44e04b848ff50ec9f642a8a85b37a264dc73f130f22838443328f",\r
-                       "f17af27d776ec82a257d8d46d2b46b639462c56984cc1be9c1222eadb8b26594a25c709d",\r
-                       "b13ce635d6f8758143ffb114f2f601cb20b6276951416a2f94fbf4ad081779d79f4f195b22",\r
-                       "5498793f60916ff1c918dde572cdea76da8629ba4ead6d065de3dfb48de94d234cc1c5002910",\r
-                       "498a1e0b39fa49582ae688cd715c86fbaf8a81b8b11b4d1594c49c902d197c8ba8a621fd6e3be5",\r
-                       "3a36ae71521f9af628b3e34dcb0d4513f84c78ee49f10416a98857150b8b15cb5c83afb4b570376e",\r
-                       "dcc76b40ae0ea3ba253e92ac50fcde791662c5b6c948538cffc2d95e9de99cac34dfca38910db2678f",\r
-                       "5b5ec6ec4fd3ad9c4906f65c747fd4233c11a1736b6b228b92e90cddabb0c7c2fcf9716d3fad261dff33",\r
-                       "df48a37b29b1d6de4e94717d60cdb4293fcf170bba388bddf7a9035a15d433f20fd697c3e4c8b8c5f590ab",\r
-                       "1f179b3b82250a65e1b0aee949e218e2f45c7a8dbfd6ba08de05c55acfc226b48c68d7f7057e5675cd96fcfc",\r
-                       "ee3d72da3a44d971578972a8e6780ce64941267e0f7d0179b214fa97855e1790e888e09fbe3a70412176cb3b54",\r
-                       "d4d4c7843d312b30f610b3682254c8be96d5f6684503f8fbfbcd15774fc1b084d3741afb8d24aaa8ab9c104f7258",\r
-                       "32c094944f5936a190a0877fb9178a7bf60ceae36fd530671c5b38c5dbd5e6a6c0d615c2ac8ad04b213cc589541cf6",\r
-                       "e5d3180c14bf27a5409fa12b104a8fd7e9639609bfde6ee82bbf9648be2546d29688a65e2e3f3da47a45ac14343c9c02",\r
-                       "e7b6e4b69f724327e41e1188a37f4fe38b1dba19cbf5a7311d6e32f1038e97ab506ee05aebebc1eed09fc0e357109818b9",\r
-                       "bc880cb83b8ac68ef2fedc2da95e7677ce2aa18b0e2d8b322701f67af7d5e7a0d96e9e33326ccb7747cfff0852b961bfd475",\r
-                       "235ea9c2ba7af25400f2e98a47a291b0bccdaad63faa2475721fda5510cc7dad814bce8dabb611790a6abe56030b798b75c944",\r
-                       "07e3e29fed63104b8410f323b975fd9fba53f636af8c4e68a53fb202ca35dd9ee07cb169ec5186292e44c27e5696a967f5e67709",\r
-                       "65d2a1dd60a517eb27bfbf530cf6a5458f9d5f4730058bd9814379547f34241822bf67e6335a6d8b5ed06abf8841884c636a25733f",\r
-                       "dcc86b3bd461615bab739d8daafac231c0f462e819ad29f9f14058f3ab5b75941d4241ea2f17ebb8a458831b37a9b16dead4a76a9b0e",\r
-                       "4627d54f0568dc126b62a8c35fb46a9ac5024400f2995e51635636e1afc4373dbb848eb32df23914230560b82477e9c3572647a7f2bb92",\r
-                       "ba531affd4381168ef24d8b275a84d9254c7f5cc55fded53aa8024b2c5c5c8aa7146fe1d1b83d62b70467e9a2e2cb67b3361830adbab28d7",\r
-                       "8764dcbcf89dcf4282eb644e3d568bdccb4b13508bfa7bfe0ffc05efd1390be22109969262992d377691eb4f77f3d59ea8466a74abf57b2ef4",\r
-                       "497d9df9ddb554f3d17870b1a31986c1be277bc44feff713544217a9f579623d18b5ffae306c25a45521d2759a72c0459b58957255ab592f3be4",\r
-                       "72c3c2e065aefa8d9f7a65229e818176eef05da83f835107ba90ec2e95472e73e538f783b416c04654ba8909f26a12db6e5c4e376b7615e4a25819",\r
-                       "7cc9894454d0055ab5069a33984e2f712bef7e3124960d33559f5f3b81906bb66fe64da13c153ca7f5cabc89667314c32c01036d12ecaf5f9a78de98",\r
-                       "74e8404d5a453c5f4d306f2cfa338ca65501c840ddab3fb82117933483afd6913c56aaf8a0a0a6b2a342fc3d9dc7599f4a850dfa15d06c61966d74ea59",\r
-                       "46fe5ed326c8fe376fcc92dc9e2714e2240d3253b105adfbb256ff7a19bc40975c604ad7c0071c4fd78a7cb64786e1bece548fa4833c04065fe593f6fb10",\r
-                       "836dfa2524d621cf07c3d2908835de859e549d35030433c796b81272fd8bc0348e8ddbc7705a5ad1fdf2155b6bc48884ac0cd376925f069a37849c089c8645",\r
-                       "7e3a4c325cb9c52b88387f93d01ae86d42098f5efa7f9457388b5e74b6d28b2438d42d8b64703324d4aa25ab6aad153ae30cd2b2af4d5e5c00a8a2d0220c6116"];\r
-                       var hashes:Array = [\r
-                               "da39a3ee5e6b4b0d3255bfef95601890afd80709",\r
-                               "99f2aa95e36f95c2acb0eaf23998f030638f3f15",\r
-                               "f944dcd635f9801f7ac90a407fbc479964dec024",\r
-                               "a444319e9b6cc1e8464c511ec0969c37d6bb2619",\r
-                               "16a0ff84fcc156fd5d3ca3a744f20a232d172253",\r
-                               "fec9deebfcdedaf66dda525e1be43597a73a1f93",\r
-                               "8ce051181f0ed5e9d0c498f6bc4caf448d20deb5",\r
-                               "67da53837d89e03bf652ef09c369a3415937cfd3",\r
-                               "305e4ff9888ad855a78573cddf4c5640cce7e946",\r
-                               "5902b77b3265f023f9bbc396ba1a93fa3509bde7",\r
-                               "fcade5f5d156bf6f9af97bdfa9c19bccfb4ff6ab",\r
-                               "1d20fbe00533c10e3cbd6b27088a5de0c632c4b5",\r
-                               "7e1b7e0f7a8f3455a9c03e9580fd63ae205a2d93",\r
-                               "706f0677146307b20bb0e8d6311e329966884d13",\r
-                               "a7241a703aaf0d53fe142f86bf2e849251fa8dff",\r
-                               "400f53546916d33ad01a5e6df66822dfbdc4e9e6",\r
-                               "fac8ab93c1ae6c16f0311872b984f729dc928ccd",\r
-                               "fba6d750c18da58f6e2aab10112b9a5ef3301b3b",\r
-                               "29d27c2d44c205c8107f0351b05753ac708226b6",\r
-                               "b971bfc1ebd6f359e8d74cb7ecfe7f898d0ba845",\r
-                               "96d08c430094b9fcc164ad2fb6f72d0a24268f68",\r
-                               "a287ea752a593d5209e287881a09c49fa3f0beb1",\r
-                               "a06c713779cbd88519ed4a585ac0cb8a5e9d612b",\r
-                               "bff7d52c13a3688132a1d407b1ab40f5b5ace298",\r
-                               "c7566b91d7b6f56bdfcaa9781a7b6841aacb17e9",\r
-                               "ffa30c0b5c550ea4b1e34f8a60ec9295a1e06ac1",\r
-                               "29e66ed23e914351e872aa761df6e4f1a07f4b81",\r
-                               "b28cf5e5b806a01491d41f69bd9248765c5dc292",\r
-                               "60224fb72c46069652cd78bcd08029ef64da62f3",\r
-                               "b72c4a86f72608f24c05f3b9088ef92fba431df7",\r
-                               "73779ad5d6b71b9b8328ef7220ff12eb167076ac",\r
-                               "a09671d4452d7cf50015c914a1e31973d20cc1a0",\r
-                               "e88cdcd233d99184a6fd260b8fca1b7f7687aee0",\r
-                               "010def22850deb1168d525e8c84c28116cb8a269",\r
-                               "aeaa40ba1717ed5439b1e6ea901b294ba500f9ad",\r
-                               "c6433791238795e34f080a5f1f1723f065463ca0",\r
-                               "e21e22b89c1bb944a32932e6b2a2f20d491982c3",\r
-                               "575323a9661f5d28387964d2ba6ab92c17d05a8a",\r
-                               "feb44494af72f245bfe68e86c4d7986d57c11db7",\r
-                               "cff2290b3648ba2831b98dde436a72f9ebf51eee",\r
-                               "9b4efe9d27b965905b0c3dab67b8d7c9ebacd56c",\r
-                               "afedb0ff156205bcd831cbdbda43db8b0588c113",\r
-                               "8deb1e858f88293a5e5e4d521a34b2a4efa70fc4",\r
-                               "95cbdac0f74afa69cebd0e5c7defbc6faf0cbeaf",\r
-                               "f0307bcb92842e5ae0cd4f4f14f3df7f877fbef2",\r
-                               "7b13bb0dbf14964bd63b133ac85e22100542ef55",\r
-                               "c314d2b6cf439be678d2a74e890d96cfac1c02ed",\r
-                               "4d0be361e410b47a9d67d8ce0bb6a8e01c53c078",\r
-                               "e5353431ffae097f675cbf498869f6fbb6e1c9f2",\r
-                               "b8720a7068a085c018ab18961de2765aa6cd9ac4",\r
-                               "b0732181568543ba85f2b6da602b4b065d9931aa",\r
-                               "9c22674cf3222c3ba921672694aafee4ce67b96b",\r
-                               "d128335f4cecca9066cdae08958ce656ff0b4cfc",\r
-                               "0b67c57ac578de88a2ae055caeaec8bb9b0085a0",\r
-                               "c766f912a89d4ccda88e0cce6a713ef5f178b596",\r
-                               "9aa3925a9dcb177b15ccff9b78e70cf344858779",\r
-                               "4811fa30042fc076acf37c8e2274d025307e5943",\r
-                               "6743018450c9730761ee2b130df9b91c1e118150",\r
-                               "71ad4a19d37d92a5e6ef3694ddbeb5aa61ada645",\r
-                               "a7d9dc68dacefb7d6116186048cb355cc548e11d",\r
-                               "142e429f0522ba5abf5131fa81df82d355b96909",\r
-                               "ef72db70dcbcab991e9637976c6faf00d22caae9",\r
-                               "f220a7457f4588d639dc21407c942e9843f8e26b",\r
-                               "ddd2117b6e309c233ede85f962a0c2fc215e5c69",\r
-                               "a3054427cdb13f164a610b348702724c808a0dcc"];\r
-                       // ok. let's loop.\r
-                       var sha1:SHA1 = new SHA1;\r
-                       for (var i:uint=0;i<srcs.length;i++) {\r
-                               var src:ByteArray = Hex.toArray(srcs[i]);\r
-                               var digest:ByteArray = sha1.hash(src);\r
-                               assert("SHA1 Test "+i, Hex.fromArray(digest) == hashes[i]);\r
-                       }\r
-                       \r
-               }\r
-               /**\r
-                * A few long SHA-1, from the same page\r
-                */\r
-               public function testLongSha1():void {\r
-                       var srcs:Array = [\r
-                       "ec29561244ede706b6eb30a1c371d74450a105c3f9735f7fa9fe38cf67f304a5736a106e92e17139a6813b1c81a4f3d3fb9546ab4296fa9f722826c066869edacd73b2548035185813e22634a9da44000d95a281ff9f264ecce0a931222162d021cca28db5f3c2aa24945ab1e31cb413ae29810fd794cad5dfaf29ec43cb38d198fe4ae1da2359780221405bd6712a5305da4b1b737fce7cd21c0eb7728d08235a9011",\r
-                       "5fc2c3f6a7e79dc94be526e5166a238899d54927ce470018fbfd668fd9dd97cbf64e2c91584d01da63be3cc9fdff8adfefc3ac728e1e335b9cdc87f069172e323d094b47fa1e652afe4d6aa147a9f46fda33cacb65f3aa12234746b9007a8c85fe982afed7815221e43dba553d8fe8a022cdac1b99eeeea359e5a9d2e72e382dffa6d19f359f4f27dc3434cd27daeeda8e38594873398678065fbb23665aba9309d946135da0e4a4afdadff14db18e85e71dd93c3bf9faf7f25c8194c4269b1ee3d9934097ab990025d9c3aaf63d5109f52335dd3959d38ae485050e4bbb6235574fc0102be8f7a306d6e8de6ba6becf80f37415b57f9898a5824e77414197422be3d36a6080",\r
-                       "0f865f46a8f3aed2da18482aa09a8f390dc9da07d51d1bd10fe0bf5f3928d5927d08733d32075535a6d1c8ac1b2dc6ba0f2f633dc1af68e3f0fa3d85e6c60cb7b56c239dc1519a007ea536a07b518ecca02a6c31b46b76f021620ef3fc6976804018380e5ab9c558ebfc5cb1c9ed2d974722bf8ab6398f1f2b82fa5083f85c16a5767a3a07271d67743f00850ce8ec428c7f22f1cf01f99895c0c844845b06a06cecb0c6cf83eb55a1d4ebc44c2c13f6f7aa5e0e08abfd84e7864279057abc471ee4a45dbbb5774afa24e51791a0eada11093b88681fe30baa3b2e94113dc63342c51ca5d1a6096d0897b626e42cb91761058008f746f35465465540ad8c6b8b60f7e1461b3ce9e6529625984cb8c7d46f07f735be067588a0117f23e34ff57800e2bbe9a1605fde6087fb15d22c5d3ac47566b8c448b0cee40373e5ba6eaa21abee71366afbb27dbbd300477d70c371e7b8963812f5ed4fb784fb2f3bd1d3afe883cdd47ef32beaea",\r
-                       "4893f1c763625f2c6ce53aacf28026f14b3cd8687e1a1d3b60a81e80fcd1e2b038f9145ab64a0718f948f7c3c9ac92e3d86fb669a5257da1a18c776291653688338210a3242120f101788e8acc9110db9258b1554bf3d26602516ea93606a25a7f566c0c758fb39ecd9d876bc5d8abc1c3205095382c2474cb1f8bbdb45c2c0e659cb0fc703ec607a5de6bcc7a28687db1ee1c8f34797bb2441d5706d210df8c2d7d65dbded36414d063c117b52a51f7a4eb9cac0782e008b47459ed5acac0bc1f20121087f992ad985511b33c866d18e63f585478ee5a5e654b19d81231d98683ae3f0533565aba43dce408d7e3c4c6be11d8f05165f29c9dcb2030c4ee31d3a04e7421aa92c3231a1fc07e50e95fea7389a5e65891afaba51cf55e36a9d089bf293accb356d5d06547307d6e41456d4ed146a056179971c56521c83109bf922866186e184a99a96c7bb96df8937e35970e438412a2b8d744cf2ad87cb605d4232e976f9f15169776e4e5b6b786132c966b25fc56d815c56c819af5e159aa39f8a93d38115f5580cda93bc073c30b39920e726fe861b72483a3f886269ab7a8eefe952f35d25c4eb7f443f4f3f26e43d51fb54591e6a6dad25fcdf5142033084e5624bdd51435e77dea86b8",\r
-                       "cf494c18a4e17bf03910631471bca5ba7edea8b9a63381e3463517961749848eb03abefd4ce676dece3740860255f57c261a558aa9c7f11432f549a9e4ce31d8e17c79450ce2ccfc148ad904aedfb138219d7052088520495355dadd90f72e6f69f9c6176d3d45f113f275b7fbc2a295784d41384cd7d629b23d1459a22e45fd5097ec9bf65fa965d3555ec77367903c32141065fc24da5c56963d46a2da3c279e4035fb2fb1c0025d9dda5b9e3443d457d92401a0d3f58b48469ecb1862dc975cdbe75ca099526db8b0329b03928206f084c633c04eef5e8e377f118d30edf592504be9d2802651ec78aeb02aea167a03fc3e23e5fc907c324f283f89ab37e84687a9c74ccf055402db95c29ba2c8d79b2bd4fa96459f8e3b78e07e923b81198267492196ecb71e01c331f8df245ec5bdf8d0e05c91e63bb299f0f6324895304dda721d39410458f117c87b7dd6a0ee734b79fcbe482b2c9e9aa0cef03a39d4b0c86de3bc34b4aadabfa373fd2258f7c40c187744d237080762382f547a36adb117839ca72f8ebbc5a20a07e86f4c8bb923f5787698d278f6db0040e76e54645bb0f97083995b34b9aa445fc424455058795828dd00c32471ec402a307f5aa1b37b1a86d6dae3bcbfbe9ba41cab0beeabf489af0073d4b3837d3f14b815120bc3602d072b5aeefcdec655fe756b660eba7dcf34675acbce317746270599424b9248791a0780449c1eabbb9459cc1e588bfd74df9b1b711c85c09d8aa171b309281947e8f4b6ac438753158f4f36fa"];\r
-                       var hashes:Array = [\r
-                       "970111c4e77bcc88cc20459c02b69b4aa8f58217",\r
-                       "0423dc76a8791107d14e13f5265b343f24cc0f19",\r
-                       "6692a71d73e00f27df976bc56df4970650d90e45",\r
-                       "dc5859dd5163c4354d5d577b855fa98e37f04384",\r
-                       "4c17926feb6e87f5bca7890d8a5cde744f231dab"];\r
-                       // ok. let's loop.\r
-                       var sha1:SHA1 = new SHA1;\r
-                       for (var i:uint=0;i<srcs.length;i++) {\r
-                               var src:ByteArray = Hex.toArray(srcs[i]);\r
-                               var digest:ByteArray = sha1.hash(src);\r
-                               assert("SHA1 Long Test "+i, Hex.fromArray(digest) == hashes[i]);\r
-                       }\r
-                       \r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA224Test.as
deleted file mode 100755 (executable)
index 12208a8..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**\r
- * SHA224Test\r
- * \r
- * A test class for SHA224\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.hash.SHA224;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class SHA224Test extends TestCase\r
-       {\r
-               public function SHA224Test(h:ITestHarness)\r
-               {\r
-                       super(h,"SHA-224 Test");\r
-                       runTest(testSha224,"SHA-224 Test Vectors");\r
-                       // takes a few seconds, but uncomment if you must.\r
-                       //runTest(testLongSha224,"SHA-224 Long Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Test vectors courtesy of\r
-                * http://www.ietf.org/rfc/rfc3874.txt\r
-                */\r
-               public function testSha224():void {\r
-                       var srcs:Array = [\r
-                       Hex.fromString("abc"),\r
-                       Hex.fromString("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")];\r
-                       var hashes:Array = [\r
-                       "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7",\r
-                       "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525"];\r
-                       \r
-                       var sha224:SHA224 = new SHA224;\r
-                       for (var i:uint=0;i<srcs.length;i++) {\r
-                               var src:ByteArray = Hex.toArray(srcs[i]);\r
-                               var digest:ByteArray = sha224.hash(src);\r
-                               assert("SHA224 Test "+i, Hex.fromArray(digest) == hashes[i]);\r
-                       }\r
-               }\r
-               public function testLongSha224():void {\r
-                       var src:ByteArray = new ByteArray;\r
-                       var a:uint = "a".charCodeAt(0);\r
-                       for (var i:uint=0;i<1e6;i++) {\r
-                               src[i] = a;\r
-                       }\r
-                       var sha224:SHA224 = new SHA224;\r
-                       var digest:ByteArray = sha224.hash(src);\r
-                       var hash:String = "20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67";\r
-                       assert("SHA224 Long Test", Hex.fromArray(digest) == hash);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/SHA256Test.as
deleted file mode 100755 (executable)
index a2b4c6c..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/**\r
- * SHA256Test\r
- * \r
- * A test class for SHA256\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.hash.SHA256;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class SHA256Test extends TestCase\r
-       {\r
-               public function SHA256Test(h:ITestHarness)\r
-               {\r
-                       super(h,"SHA-256 Test");\r
-                       runTest(testSha256,"SHA-256 Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Test vectors courtesy of\r
-                * https://www.cosic.esat.kuleuven.be/nessie/testvectors/hash/sha/Sha-2-256.unverified.test-vectors\r
-                */\r
-               public function testSha256():void {\r
-                       var srcs:Array = [\r
-                       Hex.fromString(""),\r
-                       Hex.fromString("a"),\r
-                       Hex.fromString("abc"),\r
-                       Hex.fromString("message digest"),\r
-                       Hex.fromString("abcdefghijklmnopqrstuvwxyz"),\r
-                       Hex.fromString("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"),\r
-                       Hex.fromString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),\r
-                       Hex.fromString("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),\r
-                       ];\r
-                       var hashes:Array = [\r
-                       "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",\r
-                       "CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB",\r
-                       "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD",\r
-                       "F7846F55CF23E14EEBEAB5B4E1550CAD5B509E3348FBC4EFA3A1413D393CB650",\r
-                       "71C480DF93D6AE2F1EFAD1447C66C9525E316218CF51FC8D9ED832F2DAF18B73",\r
-                       "248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1",\r
-                       "DB4BFCBD4DA0CD85A60C3C37D3FBD8805C77F15FC6B1FDFE614EE0A7C8FDB4C0",\r
-                       "F371BC4A311F2B009EEF952DD83CA80E2B60026C8E935592D0F9C308453C813E"];\r
-                       \r
-                       // loop.\r
-                       var sha256:SHA256 = new SHA256;\r
-                       for (var i:uint=0;i<srcs.length;i++) {\r
-                               var src:ByteArray = Hex.toArray(srcs[i]);\r
-                               var digest:ByteArray = sha256.hash(src);\r
-                               assert("SHA256 Test "+i, Hex.fromArray(digest) == hashes[i].toLowerCase());\r
-                       }\r
-                       \r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TLSPRFTest.as
deleted file mode 100755 (executable)
index 07fe9c6..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/**\r
- * TLSPRFTest\r
- * \r
- * A test class for TLFPRF\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.crypto.prng.TLSPRF;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       public class TLSPRFTest extends TestCase\r
-       {\r
-               public function TLSPRFTest(h:ITestHarness) {\r
-                       super(h, "TLS-PRF Testing");\r
-                       runTest(testVector, "TLF-PRF Test Vector");\r
-                       h.endTestCase()\r
-               }\r
-               \r
-               /**\r
-                * Test Vector as defined in\r
-                * http://www.imc.org/ietf-tls/mail-archive/msg01589.html\r
-                */\r
-               private function testVector():void {\r
-                       var secret:ByteArray = new ByteArray;\r
-                       for (var i:uint=0;i<48;i++) {\r
-                               secret[i]= 0xab;\r
-                       }\r
-                       var label:String = "PRF Testvector";\r
-                       var seed:ByteArray = new ByteArray;\r
-                       for (i=0;i<64;i++) {\r
-                               seed[i] = 0xcd;\r
-                       }\r
-                       var prf:TLSPRF = new TLSPRF(secret, label, seed);\r
-                       var out:ByteArray = new ByteArray;\r
-                       prf.nextBytes(out, 104);\r
-                       var expected:String = "D3 D4 D1 E3 49 B5 D5 15 04 46 66 D5 1D E3 2B AB" + \r
-                                       "25 8C B5 21 B6 B0 53 46 3E 35 48 32 FD 97 67 54" + \r
-                                       "44 3B CF 9A 29 65 19 BC 28 9A BC BC 11 87 E4 EB" + \r
-                                       "D3 1E 60 23 53 77 6C 40 8A AF B7 4C BC 85 EF F6" + \r
-                                       "92 55 F9 78 8F AA 18 4C BB 95 7A 98 19 D8 4A 5D" + \r
-                                       "7E B0 06 EB 45 9D 3A E8 DE 98 10 45 4B 8B 2D 8F" + \r
-                                       "1A FB C6 55 A8 C9 A0 13";\r
-                       var expect:String = Hex.fromArray(Hex.toArray(expected));\r
-                       assert("out == expected", Hex.fromArray(out)==expect);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TestCase.as
deleted file mode 100755 (executable)
index 4be402b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/**\r
- * TestCase\r
- * \r
- * Embryonic unit test support class.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       public class TestCase \r
-       {\r
-               public var harness:ITestHarness;\r
-               \r
-               public function TestCase(h:ITestHarness, title:String) {\r
-                       harness = h;\r
-                       harness.beginTestCase(title);\r
-               }\r
-               \r
-               \r
-               public function assert(msg:String, value:Boolean):void {\r
-                       if (value) {\r
-//                             TestHarness.print("+ ",msg);\r
-                               return;\r
-                       }\r
-                       throw new Error("Test Failure:"+msg);\r
-               }\r
-               \r
-               public function runTest(f:Function, title:String):void {\r
-                       harness.beginTest(title);\r
-                       try {\r
-                               f();\r
-                       } catch (e:Error) {\r
-                               trace("EXCEPTION THROWN: "+e);\r
-                               trace(e.getStackTrace());\r
-                               harness.failTest(e.toString());\r
-                               return;\r
-                       }\r
-                       harness.passTest();\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/TripleDESKeyTest.as
deleted file mode 100755 (executable)
index 148451f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/**\r
- * TripleDESKeyTest\r
- * \r
- * A test class for TripleDESKey\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.symmetric.TripleDESKey;\r
-       import com.hurlant.util.Hex;\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.crypto.symmetric.ICipher;\r
-       import com.hurlant.crypto.symmetric.ECBMode;\r
-       \r
-       public class TripleDESKeyTest extends TestCase\r
-       {\r
-               public function TripleDESKeyTest(h:ITestHarness)\r
-               {\r
-                       super(h, "Triped Des Test");\r
-                       runTest(testECB,"Triple DES ECB Test Vectors");\r
-                       h.endTestCase();\r
-               }\r
-               \r
-               /**\r
-                * Lots of vectors at http://csrc.nist.gov/publications/nistpubs/800-20/800-20.pdf\r
-                * XXX move them in here.\r
-                */\r
-               public function testECB():void {\r
-                       var keys:Array = [\r
-                       "010101010101010101010101010101010101010101010101",\r
-                       "dd24b3aafcc69278d650dad234956b01e371384619492ac4",\r
-                       ];\r
-                       var pts:Array = [\r
-                       "8000000000000000",\r
-                       "F36B21045A030303",\r
-                       ];\r
-                       var cts:Array = [\r
-                       "95F8A5E5DD31D900",\r
-                       "E823A43DEEA4D0A4",\r
-                       ];\r
-                       \r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var ede:TripleDESKey = new TripleDESKey(key);\r
-                               ede.encrypt(pt);\r
-                               var out:String = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+cts[i]+" to "+out, cts[i]==out);\r
-                               // now go back to plaintext\r
-                               ede.decrypt(pt);\r
-                               out = Hex.fromArray(pt).toUpperCase();\r
-                               assert("comparing "+pts[i]+" to "+out, pts[i]==out);\r
-                       }\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tests/XTeaKeyTest.as
deleted file mode 100755 (executable)
index 90a0b48..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/**\r
- * XTeaKeyTest\r
- * \r
- * A test class for XTeaKey\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tests\r
-{\r
-       import com.hurlant.crypto.prng.Random;\r
-       import com.hurlant.crypto.symmetric.ECBMode;\r
-       import com.hurlant.crypto.symmetric.XTeaKey;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       import flash.utils.getTimer;\r
-       \r
-       public class XTeaKeyTest extends TestCase\r
-       {\r
-               public function XTeaKeyTest(h:ITestHarness) {\r
-                       super(h, "XTeaKey Test");\r
-                       runTest(testGetBlockSize, "XTea Block Size");\r
-                       runTest(testVectors, "XTea Test Vectors");\r
-                       \r
-                       h.endTestCase();\r
-               }\r
-               \r
-               public function testGetBlockSize():void {\r
-                       var tea:XTeaKey = new XTeaKey(Hex.toArray("deadbabecafebeefdeadbabecafebeef"));\r
-                       assert("tea blocksize", tea.getBlockSize()==8);\r
-               }\r
-               \r
-               public function testVectors():void {\r
-                       // blah.\r
-                       // can't find working test vectors.\r
-                       // algorithms should not get published without vectors :(\r
-                       var keys:Array=[\r
-                       "00000000000000000000000000000000",\r
-                       "2b02056806144976775d0e266c287843"];\r
-                       var pts:Array=[\r
-                       "0000000000000000",\r
-                       "74657374206d652e"];\r
-                       var cts:Array=[\r
-                       "2dc7e8d3695b0538",\r
-                       "7909582138198783"];\r
-                       // self-fullfilling vectors.\r
-                       // oh well, at least I can decrypt what I produce. :(\r
-                       \r
-                       for (var i:uint=0;i<keys.length;i++) {\r
-                               var key:ByteArray = Hex.toArray(keys[i]);\r
-                               var pt:ByteArray = Hex.toArray(pts[i]);\r
-                               var tea:XTeaKey = new XTeaKey(key);\r
-                               tea.encrypt(pt);\r
-                               var out:String = Hex.fromArray(pt);\r
-                               assert("comparing "+cts[i]+" to "+out, cts[i]==out);\r
-                               // now go back to plaintext.\r
-                               pt.position=0;\r
-                               tea.decrypt(pt);\r
-                               out = Hex.fromArray(pt);\r
-                               assert("comparing "+pts[i]+" to "+out, pts[i]==out);\r
-                       }\r
-               }\r
-\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/BulkCiphers.as
deleted file mode 100644 (file)
index 2b1e717..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * BulkCiphers
- * 
- * An enumeration of bulk ciphers available for TLS, along with their properties,
- * with a few convenience methods to go with it.
- * Copyright (c) 2007 Henri Torgemane
- * 
- * See LICENSE.txt for full license information.
- */
-package com.hurlant.crypto.tls {
-       import com.hurlant.crypto.Crypto;
-       import flash.utils.ByteArray;
-       import com.hurlant.crypto.symmetric.ICipher;
-       import com.hurlant.crypto.symmetric.TLSPad;
-       import com.hurlant.crypto.symmetric.SSLPad;
-       
-       public class BulkCiphers {
-               public static const STREAM_CIPHER:uint = 0;
-               public static const BLOCK_CIPHER:uint = 1;
-
-               public static const NULL:uint = 0;
-               public static const RC4_40:uint = 1;
-               public static const RC4_128:uint = 2
-               public static const RC2_CBC_40:uint = 3; // XXX I don't have that one.
-               public static const DES_CBC:uint = 4;
-               public static const DES3_EDE_CBC:uint = 5;
-               public static const DES40_CBC:uint = 6;
-               public static const IDEA_CBC:uint = 7; // XXX I don't have that one.
-               public static const AES_128:uint = 8;
-               public static const AES_256:uint = 9;
-               
-               private static const algos:Array =
-               ['', 'rc4', 'rc4', '', 'des-cbc', '3des-cbc', 'des-cbc', '', 'aes', 'aes'];
-               
-               private static var _props:Array;
-               
-               init();
-               private static function init():void {
-                       _props = [];
-                       _props[NULL]                    = new BulkCiphers(STREAM_CIPHER,  0,  0,   0,  0,  0);
-                       _props[RC4_40]                  = new BulkCiphers(STREAM_CIPHER,  5, 16,  40,  0,  0);
-                       _props[RC4_128]                 = new BulkCiphers(STREAM_CIPHER, 16, 16, 128,  0,  0);
-                       _props[RC2_CBC_40]              = new BulkCiphers( BLOCK_CIPHER,  5, 16,  40,  8,  8);
-                       _props[DES_CBC]                 = new BulkCiphers( BLOCK_CIPHER,  8,  8,  56,  8,  8);
-                       _props[DES3_EDE_CBC]    = new BulkCiphers( BLOCK_CIPHER, 24, 24, 168,  8,  8);
-                       _props[DES40_CBC]               = new BulkCiphers( BLOCK_CIPHER,  5,  8,  40,  8,  8);
-                       _props[IDEA_CBC]                = new BulkCiphers( BLOCK_CIPHER, 16, 16, 128,  8,  8);
-                       _props[AES_128]                 = new BulkCiphers( BLOCK_CIPHER, 16, 16, 128, 16, 16);
-                       _props[AES_256]                 = new BulkCiphers( BLOCK_CIPHER, 32, 32, 256, 16, 16);
-               }
-       
-               private static function getProp(cipher:uint):BulkCiphers {
-                       var p:BulkCiphers = _props[cipher];
-                       if (p==null) {
-                               throw new Error("Unknown bulk cipher "+cipher.toString(16));
-                       }
-                       return p;
-               }
-               public static function getType(cipher:uint):uint {
-                       return getProp(cipher).type;
-               }
-               public static function getKeyBytes(cipher:uint):uint {
-                       return getProp(cipher).keyBytes;
-               }
-               public static function getExpandedKeyBytes(cipher:uint):uint {
-                       return getProp(cipher).expandedKeyBytes;
-               }
-               public static function getEffectiveKeyBits(cipher:uint):uint {
-                       return getProp(cipher).effectiveKeyBits;
-               }
-               public static function getIVSize(cipher:uint):uint {
-                       return getProp(cipher).IVSize;
-               }
-               public static function getBlockSize(cipher:uint):uint {
-                       return getProp(cipher).blockSize;
-               }
-               public static function getCipher(cipher:uint, key:ByteArray, proto:uint):ICipher {
-                       if (proto == TLSSecurityParameters.PROTOCOL_VERSION) {
-                               return Crypto.getCipher(algos[cipher], key, new TLSPad);
-                       } else {
-                               return Crypto.getCipher(algos[cipher], key, new SSLPad);
-                       }
-               }
-
-       
-               private var type:uint;
-               private var keyBytes:uint;
-               private var expandedKeyBytes:uint;
-               private var effectiveKeyBits:uint;
-               private var IVSize:uint;
-               private var blockSize:uint;
-               
-               public function BulkCiphers(t:uint, kb:uint, ekb:uint, fkb:uint, ivs:uint, bs:uint) {
-                       type = t;
-                       keyBytes = kb;
-                       expandedKeyBytes = ekb;
-                       effectiveKeyBits = fkb;
-                       IVSize = ivs;
-                       blockSize = bs;
-               }
-       }
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/CipherSuites.as
deleted file mode 100644 (file)
index e9beb0a..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/**\r
- * CipherSuites\r
- * \r
- * An enumeration of cipher-suites available for TLS to use, along with\r
- * their properties, and some convenience methods\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.crypto.hash.SHA1;\r
-       \r
-       public class CipherSuites {\r
-               \r
-               \r
-               // only the lines marked "ok" are currently implemented.\r
-               \r
-               // rfc 2246\r
-               \r
-               public static const TLS_NULL_WITH_NULL_NULL:uint                                = 0x0000; // ok\r
-               public static const TLS_RSA_WITH_NULL_MD5:uint                                  = 0x0001; // ok\r
-               public static const TLS_RSA_WITH_NULL_SHA:uint                                  = 0x0002; // ok\r
-               public static const TLS_RSA_WITH_RC4_128_MD5:uint                               = 0x0004; // ok\r
-               public static const TLS_RSA_WITH_RC4_128_SHA:uint                               = 0x0005; // ok\r
-               public static const TLS_RSA_WITH_IDEA_CBC_SHA:uint                              = 0x0007;\r
-               public static const TLS_RSA_WITH_DES_CBC_SHA:uint                               = 0x0009; // ok\r
-               public static const TLS_RSA_WITH_3DES_EDE_CBC_SHA:uint                  = 0x000A; // ok\r
-               \r
-               public static const TLS_DH_DSS_WITH_DES_CBC_SHA:uint                    = 0x000C;\r
-               public static const TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA:uint               = 0x000D;\r
-               public static const TLS_DH_RSA_WITH_DES_CBC_SHA:uint                    = 0x000F;\r
-               public static const TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA:uint               = 0x0010;\r
-               public static const TLS_DHE_DSS_WITH_DES_CBC_SHA:uint                   = 0x0012;\r
-               public static const TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA:uint              = 0x0013;\r
-               public static const TLS_DHE_RSA_WITH_DES_CBC_SHA:uint                   = 0x0015;\r
-               public static const TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:uint              = 0x0016;\r
-               \r
-               public static const TLS_DH_anon_WITH_RC4_128_MD5:uint                   = 0x0018;\r
-               public static const TLS_DH_anon_WITH_DES_CBC_SHA:uint                   = 0x001A;\r
-               public static const TLS_DH_anon_WITH_3DES_EDE_CBC_SHA:uint              = 0x001B;\r
-               \r
-               // rfc3268\r
-               \r
-               public static const TLS_RSA_WITH_AES_128_CBC_SHA:uint                   = 0x002F; // ok\r
-               public static const TLS_DH_DSS_WITH_AES_128_CBC_SHA:uint                = 0x0030;\r
-               public static const TLS_DH_RSA_WITH_AES_128_CBC_SHA:uint                = 0x0031;\r
-               public static const TLS_DHE_DSS_WITH_AES_128_CBC_SHA:uint               = 0x0032;\r
-               public static const TLS_DHE_RSA_WITH_AES_128_CBC_SHA:uint               = 0x0033;\r
-               public static const TLS_DH_anon_WITH_AES_128_CBC_SHA:uint               = 0x0034;\r
-               \r
-               public static const TLS_RSA_WITH_AES_256_CBC_SHA:uint                   = 0x0035; // ok\r
-               public static const TLS_DH_DSS_WITH_AES_256_CBC_SHA:uint                = 0x0036;\r
-               public static const TLS_DH_RSA_WITH_AES_256_CBC_SHA:uint                = 0x0037;\r
-               public static const TLS_DHE_DSS_WITH_AES_256_CBC_SHA:uint               = 0x0038;\r
-               public static const TLS_DHE_RSA_WITH_AES_256_CBC_SHA:uint               = 0x0039;\r
-               public static const TLS_DH_anon_WITH_AES_256_CBC_SHA:uint               = 0x003A;\r
-               \r
-               private static var _props:Array;\r
-               \r
-               init();\r
-               private static function init():void {\r
-                       _props = [];\r
-                       _props[TLS_NULL_WITH_NULL_NULL]                 = new CipherSuites(BulkCiphers.NULL, MACs.NULL, KeyExchanges.NULL);\r
-                       _props[TLS_RSA_WITH_NULL_MD5]                   = new CipherSuites(BulkCiphers.NULL, MACs.MD5, KeyExchanges.RSA);\r
-                       _props[TLS_RSA_WITH_NULL_SHA]                   = new CipherSuites(BulkCiphers.NULL, MACs.SHA1, KeyExchanges.RSA);\r
-                       _props[TLS_RSA_WITH_RC4_128_MD5]                = new CipherSuites(BulkCiphers.RC4_128, MACs.MD5, KeyExchanges.RSA);\r
-                       _props[TLS_RSA_WITH_RC4_128_SHA]                = new CipherSuites(BulkCiphers.RC4_128, MACs.SHA1, KeyExchanges.RSA);\r
-                       _props[TLS_RSA_WITH_DES_CBC_SHA]                = new CipherSuites(BulkCiphers.DES_CBC, MACs.SHA1, KeyExchanges.RSA);\r
-                       _props[TLS_RSA_WITH_3DES_EDE_CBC_SHA]   = new CipherSuites(BulkCiphers.DES3_EDE_CBC, MACs.SHA1, KeyExchanges.RSA);\r
-                       _props[TLS_RSA_WITH_AES_128_CBC_SHA]    = new CipherSuites(BulkCiphers.AES_128, MACs.SHA1, KeyExchanges.RSA);\r
-                       _props[TLS_RSA_WITH_AES_256_CBC_SHA]    = new CipherSuites(BulkCiphers.AES_256, MACs.SHA1, KeyExchanges.RSA);\r
-                       \r
-                       // ...\r
-                       // more later\r
-               }\r
-               \r
-               private static function getProp(cipher:uint):CipherSuites {\r
-                       var p:CipherSuites = _props[cipher];\r
-                       if (p==null) {\r
-                               throw new Error("Unknown cipher "+cipher.toString(16));\r
-                       }\r
-                       return p;\r
-               }\r
-               public static function getBulkCipher(cipher:uint):uint {\r
-                       return getProp(cipher).cipher;\r
-               }\r
-               public static function getMac(cipher:uint):uint {\r
-                       return getProp(cipher).hash;\r
-               }\r
-               public static function getKeyExchange(cipher:uint):uint {\r
-                       return getProp(cipher).key;\r
-               }\r
-               \r
-               public static function getDefaultSuites():Array {\r
-                       // a list of acceptable ciphers, sorted by preference.\r
-                       return [\r
-                               TLS_RSA_WITH_AES_256_CBC_SHA,\r
-                               TLS_RSA_WITH_3DES_EDE_CBC_SHA,\r
-                               TLS_RSA_WITH_AES_128_CBC_SHA,\r
-                               TLS_RSA_WITH_RC4_128_SHA,\r
-                               TLS_RSA_WITH_RC4_128_MD5,\r
-                               TLS_RSA_WITH_DES_CBC_SHA\r
-                       ];\r
-               }\r
-               \r
-               public var cipher:uint;\r
-               public var hash:uint;\r
-               public var key:uint;\r
-               \r
-               public function CipherSuites(cipher:uint, hash:uint, key:uint) {\r
-                       this.cipher = cipher;\r
-                       this.hash = hash;\r
-                       this.key = key;\r
-               }\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/IConnectionState.as
deleted file mode 100644 (file)
index a5f0e11..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**\r
- * IConnectionState\r
- * \r
- * Interface for TLS/SSL Connection states.\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import flash.utils.ByteArray;\r
-       public interface IConnectionState {\r
-               function decrypt(type:uint, length:uint, p:ByteArray) : ByteArray; \r
-               function encrypt(type:uint, p:ByteArray) : ByteArray; \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/ISecurityParameters.as
deleted file mode 100755 (executable)
index 3c18aa3..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/**\r
- * ISecurityParameters\r
- * \r
- * This class encapsulates all the security parameters that get negotiated\r
- * during the TLS handshake. It also holds all the key derivation methods.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import flash.utils.ByteArray;\r
-       \r
-       public interface ISecurityParameters {\r
-               function get version() : uint;\r
-               function reset():void;\r
-               function getBulkCipher():uint;\r
-               function getCipherType():uint;\r
-               function getMacAlgorithm():uint;\r
-               function setCipher(cipher:uint):void;\r
-               function setCompression(algo:uint):void;\r
-               function setPreMasterSecret(secret:ByteArray):void;\r
-               function setClientRandom(secret:ByteArray):void;\r
-               function setServerRandom(secret:ByteArray):void;\r
-               function get useRSA():Boolean;\r
-               function computeVerifyData(side:uint, handshakeMessages:ByteArray):ByteArray;\r
-               function computeCertificateVerify( side:uint, handshakeRecords:ByteArray):ByteArray;\r
-               function getConnectionStates():Object;\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/KeyExchanges.as
deleted file mode 100644 (file)
index 8b9fd0d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/**\r
- * KeyExchanges\r
- * \r
- * An enumeration of key exchange methods defined by TLS\r
- * ( right now, only RSA is actually implemented )\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       public class KeyExchanges {\r
-               public static const NULL:uint = 0;\r
-               public static const RSA:uint = 1;\r
-               public static const DH_DSS:uint = 2;\r
-               public static const DH_RSA:uint = 3;\r
-               public static const DHE_DSS:uint = 4;\r
-               public static const DHE_RSA:uint = 5;\r
-               public static const DH_anon:uint = 6;\r
-               \r
-               public static function useRSA(p:uint):Boolean {\r
-                       return (p==RSA);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/MACs.as
deleted file mode 100644 (file)
index 09d79e7..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/**\r
- * MACs\r
- * \r
- * An enumeration of MACs implemented for TLS 1.0/SSL 3.0\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import com.hurlant.crypto.Crypto;\r
-       import com.hurlant.crypto.hash.HMAC;\r
-       import com.hurlant.crypto.hash.MAC;\r
-       \r
-       public class MACs {\r
-               public static const NULL:uint = 0;\r
-               public static const MD5:uint = 1;\r
-               public static const SHA1:uint = 2;\r
-               \r
-               public static function getHashSize(hash:uint):uint {\r
-                       return [0,16,20][hash];\r
-               }       \r
-               \r
-               public static function getPadSize(hash:uint):int {\r
-                       return [0, 48, 40][hash];\r
-               }       \r
-               \r
-               public static function getHMAC(hash:uint):HMAC {\r
-                       if (hash==NULL) return null;\r
-                       return Crypto.getHMAC(['',"md5","sha1"][hash]);\r
-               }\r
-       \r
-               public static function getMAC(hash:uint):MAC {\r
-                       return Crypto.getMAC(['', "md5", "sha1"][hash]);\r
-               } \r
-               \r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLConnectionState.as
deleted file mode 100644 (file)
index 1ef9c38..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/**
- * TLSConnectionState
- * 
- * This class encapsulates the read or write state of a TLS connection,
- * and implementes the encrypting and hashing of packets. 
- * Copyright (c) 2007 Henri Torgemane
- * 
- * See LICENSE.txt for full license information.
- */
-package com.hurlant.crypto.tls {
-       import flash.utils.IDataInput;
-       import flash.utils.ByteArray;
-       import com.hurlant.crypto.hash.MD5;
-       import com.hurlant.crypto.hash.MAC;
-       import com.hurlant.crypto.hash.IHash;
-       import com.hurlant.crypto.symmetric.ICipher;
-       import com.hurlant.crypto.symmetric.IVMode;
-       import com.hurlant.util.Hex;
-       import com.hurlant.util.ArrayUtil;
-       
-       public class SSLConnectionState implements IConnectionState {
-
-               // compression state
-               
-               // cipher state
-               private var bulkCipher:uint;
-               private var cipherType:uint;
-               private var CIPHER_key:ByteArray;
-               private var CIPHER_IV:ByteArray;
-               private var cipher:ICipher;
-               private var ivmode:IVMode;
-               
-               // mac secret
-               private var macAlgorithm:uint;
-               private var MAC_write_secret:ByteArray;
-               private var mac:MAC;
-               
-               // sequence number. uint64
-               
-               private var seq_lo:uint = 0x0;
-               private var seq_hi:uint = 0x0;
-
-               public function SSLConnectionState(
-                               bulkCipher:uint=0, cipherType:uint=0, macAlgorithm:uint=0,
-                               mac_enc:ByteArray=null, key:ByteArray=null, IV:ByteArray=null) {
-                       this.bulkCipher = bulkCipher;
-                       this.cipherType = cipherType;
-                       this.macAlgorithm = macAlgorithm;
-                       MAC_write_secret = mac_enc;
-                       mac = MACs.getMAC(macAlgorithm);
-                       
-                       CIPHER_key = key;
-                       CIPHER_IV = IV;
-                       cipher = BulkCiphers.getCipher(bulkCipher, key, 0x0300);
-                       if (cipher is IVMode) {
-                               ivmode = cipher as IVMode;
-                               ivmode.IV = IV;
-                       }
-
-               }
-               
-               public function decrypt(type:uint, length:uint, p:ByteArray):ByteArray {
-                       // decompression is a nop.
-                       
-                       if (cipherType == BulkCiphers.STREAM_CIPHER) {
-                               if (bulkCipher == BulkCiphers.NULL) {
-                                       // no-op
-                               } else {
-                                       cipher.decrypt(p);
-                               }
-                       } else {
-                               p.position = 0;
-                               // block cipher
-                               if (bulkCipher == BulkCiphers.NULL) {
-                               
-                               } else {
-                                       var nextIV:ByteArray = new ByteArray;
-                                       nextIV.writeBytes(p, p.length-CIPHER_IV.length, CIPHER_IV.length);
-                                       p.position = 0;
-                                       cipher.decrypt(p);
-
-                                       CIPHER_IV = nextIV;
-                                       ivmode.IV = nextIV;
-                               }
-                       }
-       
-                       if (macAlgorithm!=MACs.NULL) {
-                               // there will be CTX delay here as well, 
-                               // I should probably optmize the hell out of it
-                               var data:ByteArray = new ByteArray;
-                               var len:uint = p.length - mac.getHashSize();
-                               data.writeUnsignedInt(seq_hi);
-                               data.writeUnsignedInt(seq_lo);
-                               
-                               data.writeByte(type);
-                               data.writeShort(len);
-                               if (len!=0) {
-                                       data.writeBytes(p, 0, len);
-                               }
-                               var mac_enc:ByteArray = mac.compute(MAC_write_secret, data);
-                               // compare "mac" with the last X bytes of p.
-                               var mac_received:ByteArray = new ByteArray;
-                               mac_received.writeBytes(p, len, mac.getHashSize());
-                               if (ArrayUtil.equals(mac_enc, mac_received)) {
-                                       // happy happy joy joy
-                               } else {
-                                       throw new TLSError("Bad Mac Data", TLSError.bad_record_mac);
-                               }
-                               p.length = len;
-                               p.position = 0;
-                       }
-                       // increment seq
-                       seq_lo++;
-                       if (seq_lo==0) seq_hi++;
-                       return p;
-               }
-               public function encrypt(type:uint, p:ByteArray):ByteArray {
-                       var mac_enc:ByteArray = null;
-                       if (macAlgorithm!=MACs.NULL) {
-                               var data:ByteArray = new ByteArray;
-                               // data.writeUnsignedInt(seq);
-                               
-                               // Sequence
-                               data.writeUnsignedInt(seq_hi);
-                               data.writeUnsignedInt(seq_lo);
-                               
-                               // Type
-                               data.writeByte(type);
-                               
-                               // Length
-                               data.writeShort(p.length);
-                               
-                               // The data
-                               if (p.length!=0) {
-                                       data.writeBytes(p);
-                               }
-                       
-                               // trace("data for the MAC: " + Hex.fromArray(data));
-                               mac_enc = mac.compute(MAC_write_secret, data);
-                               // trace("MAC: " + Hex.fromArray( mac_enc ));
-                               p.position = p.length;
-                               p.writeBytes(mac_enc);
-                       }
-                       
-                       // trace("Record to encrypt: " + Hex.fromArray(p));
-                       
-                       p.position = 0;
-                       if (cipherType == BulkCiphers.STREAM_CIPHER) {
-                               // stream cipher
-                               if (bulkCipher == BulkCiphers.NULL) {
-                                       // no-op
-                               } else {
-                                       cipher.encrypt(p);
-                               }
-                       } else {
-                               // block cipher
-                               cipher.encrypt(p);
-                               // adjust IV
-                               var nextIV:ByteArray = new ByteArray;
-                               nextIV.writeBytes(p, p.length-CIPHER_IV.length, CIPHER_IV.length);
-                               CIPHER_IV = nextIV;
-                               ivmode.IV = nextIV;
-                       }
-                       // increment seq
-                       seq_lo++;
-                       if (seq_lo==0) seq_hi++;
-                       return p;
-               }
-               
-       }
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLEvent.as
deleted file mode 100755 (executable)
index 9a63521..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/**\r
- * SSLEvent\r
- * \r
- * This is used by TLSEngine to let the application layer know\r
- * when we're ready for sending, or have received application data\r
- * This Event was created by Bobby Parker to support SSL 3.0.\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import flash.events.Event;\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class SSLEvent extends Event {\r
-               \r
-               static public const DATA:String = "data";\r
-               static public const READY:String = "ready";\r
-               \r
-               public var data:ByteArray;\r
-               \r
-               public function SSLEvent(type:String, data:ByteArray = null) {\r
-                       this.data = data;\r
-                       super(type, false, false);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/SSLSecurityParameters.as
deleted file mode 100755 (executable)
index 3549461..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/**\r
- * TLSSecurityParameters\r
- * \r
- * This class encapsulates all the security parameters that get negotiated\r
- * during the TLS handshake. It also holds all the key derivation methods.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.crypto.hash.SHA1;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;\r
-       \r
-       public class SSLSecurityParameters implements ISecurityParameters {\r
-               \r
-               // COMPRESSION\r
-               public static const COMPRESSION_NULL:uint = 0;\r
-               \r
-               private var entity:uint; // SERVER | CLIENT\r
-               private var bulkCipher:uint; // BULK_CIPHER_*\r
-               private var cipherType:uint; // STREAM_CIPHER | BLOCK_CIPHER\r
-               private var keySize:uint;\r
-               private var keyMaterialLength:uint;\r
-               private var keyBlock:ByteArray;\r
-               private var IVSize:uint;\r
-               private var MAC_length:uint;\r
-               private var macAlgorithm:uint; // MAC_*\r
-               private var hashSize:uint;\r
-               private var compression:uint; // COMPRESSION_NULL\r
-               private var masterSecret:ByteArray; // 48 bytes\r
-               private var clientRandom:ByteArray; // 32 bytes\r
-               private var serverRandom:ByteArray; // 32 bytes\r
-               private var pad_1:ByteArray; // varies\r
-               private var pad_2:ByteArray; // varies\r
-               private var ignoreCNMismatch:Boolean = true;\r
-               private var trustAllCerts:Boolean = false;\r
-               private var trustSelfSigned:Boolean = false;\r
-               public static const PROTOCOL_VERSION:uint = 0x0300;\r
-               \r
-               // not strictly speaking part of this, but yeah.\r
-               public var keyExchange:uint;\r
-               \r
-               public function get version() : uint { \r
-                       return PROTOCOL_VERSION;\r
-               }\r
-               public function SSLSecurityParameters(entity:uint, localCert:ByteArray = null, localKey:ByteArray = null) {\r
-                       this.entity = entity;\r
-                       reset();\r
-               }\r
-               \r
-               public function reset():void {\r
-                       bulkCipher = BulkCiphers.NULL;\r
-                       cipherType = BulkCiphers.BLOCK_CIPHER;\r
-                       macAlgorithm = MACs.NULL;\r
-                       compression = COMPRESSION_NULL;\r
-                       masterSecret = null;\r
-               }\r
-               \r
-               public function getBulkCipher():uint {\r
-                       return bulkCipher;\r
-               }\r
-               public function getCipherType():uint {\r
-                       return cipherType;\r
-               }\r
-               public function getMacAlgorithm():uint {\r
-                       return macAlgorithm;\r
-               }\r
-               \r
-               public function setCipher(cipher:uint):void {\r
-                       bulkCipher = CipherSuites.getBulkCipher(cipher);\r
-                       cipherType = BulkCiphers.getType(bulkCipher);\r
-                       keySize = BulkCiphers.getExpandedKeyBytes(bulkCipher);   // 8\r
-                       keyMaterialLength = BulkCiphers.getKeyBytes(bulkCipher); // 5\r
-                       IVSize = BulkCiphers.getIVSize(bulkCipher);\r
-\r
-\r
-                       keyExchange = CipherSuites.getKeyExchange(cipher);\r
-                       \r
-                       macAlgorithm = CipherSuites.getMac(cipher);\r
-                       hashSize = MACs.getHashSize(macAlgorithm);\r
-                       pad_1 = new ByteArray();\r
-                       pad_2 = new ByteArray();\r
-                       for (var x:int = 0; x < 48; x++) {\r
-                               pad_1.writeByte(0x36);\r
-                               pad_2.writeByte(0x5c);\r
-                       }                       \r
-               }\r
-               public function setCompression(algo:uint):void {\r
-                       compression = algo;\r
-               }\r
-               \r
-               public function setPreMasterSecret(secret:ByteArray):void {\r
-                       /* Warning! Following code may cause madness\r
-                                Tread not here, unless ye be men of valor.\r
-                       \r
-                       ***** Official Prophylactic Comment ******\r
-                               (to protect the unwary...this code actually works, that's all you need to know)\r
-                       \r
-                       This does two things, computes the master secret, and generates the keyBlock\r
-                       \r
-                       \r
-                       To compute the master_secret, the following algorithm is used.\r
-                        for SSL 3, this means\r
-                        master = MD5( premaster + SHA1('A' + premaster + client_random + server_random ) ) +\r
-                                               MD5( premaster + SHA1('BB' + premaster + client_random + server_random ) ) +\r
-                                               MD5( premaster + SHA1('CCC' + premaster + client_random + server_random ) )\r
-                       */              \r
-                       var tempHashA:ByteArray = new ByteArray(); // temporary hash, gets reused a lot\r
-                       var tempHashB:ByteArray = new ByteArray(); // temporary hash, gets reused a lot\r
-                       \r
-                       var shaHash:ByteArray;\r
-                       var mdHash:ByteArray;\r
-                       \r
-                       var i:int;\r
-                       var j:int;\r
-                       \r
-                       var sha:SHA1 = new SHA1();\r
-                       var md:MD5 = new MD5();\r
-                                       \r
-                       var k:ByteArray = new ByteArray();\r
-                       \r
-                       k.writeBytes(secret);\r
-                       k.writeBytes(clientRandom);\r
-                       k.writeBytes(serverRandom);\r
-                       \r
-                       masterSecret = new ByteArray();\r
-                       var pad_char:uint = 0x41;\r
-                       \r
-                       for ( i = 0; i < 3; i++) {\r
-                               // SHA portion\r
-                               tempHashA.position = 0;\r
-                                                               \r
-                               for ( j = 0; j < i + 1; j++) {\r
-                                       tempHashA.writeByte(pad_char);\r
-                               }\r
-                               pad_char++;\r
-                               \r
-                               tempHashA.writeBytes(k);\r
-                               shaHash = sha.hash(tempHashA);\r
-                               \r
-                               // MD5 portion\r
-                               tempHashB.position = 0;\r
-                               tempHashB.writeBytes(secret); \r
-                               tempHashB.writeBytes(shaHash); \r
-                               mdHash = md.hash(tempHashB);\r
-                               \r
-                               // copy into my key\r
-                               masterSecret.writeBytes(mdHash);\r
-                       }\r
-                       \r
-                       // *************** END MASTER SECRET **************\r
-                       \r
-                       // More prophylactic comments\r
-                       // *************** START KEY BLOCK ****************\r
-                       \r
-                       // So here, I'm setting up the keyBlock array that I will derive MACs, keys, and IVs from.\r
-                       // Rebuild k (hash seed)\r
-                        \r
-                       k.position = 0; \r
-                       k.writeBytes(masterSecret);\r
-                       k.writeBytes(serverRandom);\r
-                       k.writeBytes(clientRandom);\r
-                       \r
-                       keyBlock = new ByteArray(); \r
-                       \r
-                       tempHashA = new ByteArray();\r
-                       tempHashB = new ByteArray();\r
-                       // now for 16 iterations to get 256 bytes (16 * 16), better to have more than not enough\r
-                       pad_char = 0x41;\r
-                       for ( i = 0; i < 16; i++) {\r
-                               tempHashA.position = 0; \r
-                               \r
-                               for ( j = 0; j < i + 1; j++) {\r
-                                       tempHashA.writeByte(pad_char);\r
-                               }\r
-                               pad_char++;\r
-                               tempHashA.writeBytes(k);\r
-                               shaHash = sha.hash(tempHashA);  \r
-                               \r
-                               tempHashB.position = 0; \r
-                               tempHashB.writeBytes(masterSecret);\r
-                               tempHashB.writeBytes(shaHash, 0);\r
-                               mdHash = md.hash(tempHashB);\r
-                               \r
-                               keyBlock.writeBytes(mdHash); \r
-                       }\r
-               }\r
-               \r
-               public function setClientRandom(secret:ByteArray):void {\r
-                       clientRandom = secret;\r
-               }\r
-               public function setServerRandom(secret:ByteArray):void {\r
-                       serverRandom = secret;\r
-               }\r
-               \r
-               public function get useRSA():Boolean {\r
-                       return KeyExchanges.useRSA(keyExchange);\r
-               }\r
-               \r
-               // This is the Finished message\r
-               // if you value your sanity, stay away...far away\r
-               public function computeVerifyData(side:uint, handshakeMessages:ByteArray):ByteArray {\r
-                       // for SSL 3.0, this consists of\r
-                       //      finished = md5( masterSecret + pad2 + md5( handshake + sender + masterSecret + pad1 ) ) +\r
-                       //                         sha1( masterSecret + pad2 + sha1( handshake + sender + masterSecret + pad1 ) )\r
-                       \r
-                       // trace("Handshake messages: " + Hex.fromArray(handshakeMessages));\r
-                       var sha:SHA1 = new SHA1();\r
-                       var md:MD5 = new MD5();\r
-                       var k:ByteArray = new ByteArray(); // handshake + sender + masterSecret + pad1\r
-                       var j:ByteArray = new ByteArray(); // masterSecret + pad2 + k\r
-                       \r
-                       var innerKey:ByteArray;\r
-                       var outerKey:ByteArray = new ByteArray();\r
-                       \r
-                       var hashSha:ByteArray;\r
-                       var hashMD:ByteArray;\r
-                       \r
-                       var sideBytes:ByteArray = new ByteArray();\r
-                       if (side == TLSEngine.CLIENT) {\r
-                               sideBytes.writeUnsignedInt(0x434C4E54);\r
-                        } else {\r
-                               sideBytes.writeUnsignedInt(0x53525652);\r
-                       }\r
-                       \r
-                       // Do the SHA1 part of the routine first\r
-                       masterSecret.position = 0;\r
-                       k.writeBytes(handshakeMessages);\r
-                       k.writeBytes(sideBytes);\r
-                       k.writeBytes(masterSecret);\r
-                       k.writeBytes(pad_1, 0, 40); // limited to 40 chars for SHA1\r
-                               \r
-                       innerKey = sha.hash(k);\r
-                       // trace("Inner SHA Key: " + Hex.fromArray(innerKey));\r
-                       \r
-                       j.writeBytes(masterSecret);\r
-                       j.writeBytes(pad_2, 0, 40); // limited to 40 chars for SHA1\r
-                       j.writeBytes(innerKey);\r
-                       \r
-                       hashSha = sha.hash(j);\r
-                       // trace("Outer SHA Key: " + Hex.fromArray(hashSha));\r
-                       \r
-                       // Rebuild k for MD5\r
-                       k = new ByteArray();\r
-                       \r
-                       k.writeBytes(handshakeMessages);\r
-                       k.writeBytes(sideBytes);\r
-                       k.writeBytes(masterSecret);\r
-                       k.writeBytes(pad_1); // Take the whole length of pad_1 & pad_2 for MD5\r
-                       \r
-                       innerKey = md.hash(k);\r
-                       // trace("Inner MD5 Key: " + Hex.fromArray(innerKey));\r
-                       \r
-                       j = new ByteArray();\r
-                       j.writeBytes(masterSecret);\r
-                       j.writeBytes(pad_2); // see above re: 48 byte pad\r
-                       j.writeBytes(innerKey); \r
-                       \r
-                       hashMD = md.hash(j);\r
-                       // trace("Outer MD5 Key: " + Hex.fromArray(hashMD));\r
-                       \r
-                       outerKey.writeBytes(hashMD, 0, hashMD.length);\r
-                       outerKey.writeBytes(hashSha, 0, hashSha.length);\r
-                       var out:String = Hex.fromArray(outerKey);\r
-                       // trace("Finished Message: " + out);\r
-                       outerKey.position = 0;\r
-                       \r
-                       return outerKey;\r
-               \r
-               }\r
-               \r
-               public function computeCertificateVerify( side:uint, handshakeMessages:ByteArray ):ByteArray {\r
-                       // TODO: Implement this, but I don't forsee it being necessary at this point in time, since for purposes\r
-                       // of the override, I'm only going to use TLS\r
-                       return null;  \r
-               }\r
-               \r
-               public function getConnectionStates():Object {\r
-                       \r
-                       if (masterSecret != null) {\r
-                               // so now, I have to derive the actual keys from the keyblock that I generated in setPremasterSecret.\r
-                               // for MY purposes, I need RSA-AES 128/256 + SHA\r
-                               // so I'm gonna have keylen = 32, minlen = 32, mac_length = 20, iv_length = 16\r
-                               // but...I can get this data from the settings returned in the constructor when this object is \r
-                               // It strikes me that TLS does this more elegantly...\r
-                               \r
-                               var mac_length:int = hashSize as Number;\r
-                               var key_length:int = keySize as Number;\r
-                               var iv_length:int = IVSize as Number;\r
-                               \r
-                               var client_write_MAC:ByteArray = new ByteArray();\r
-                               var server_write_MAC:ByteArray = new ByteArray();\r
-                               var client_write_key:ByteArray = new ByteArray();\r
-                               var server_write_key:ByteArray = new ByteArray();\r
-                               var client_write_IV:ByteArray = new ByteArray();\r
-                               var server_write_IV:ByteArray = new ByteArray();\r
-               \r
-                               // Derive the keys from the keyblock\r
-                               // Get the MACs first\r
-                               keyBlock.position = 0;\r
-                               keyBlock.readBytes(client_write_MAC, 0, mac_length);\r
-                               keyBlock.readBytes(server_write_MAC, 0, mac_length);\r
-                               \r
-                               // keyBlock.position is now at MAC_length * 2\r
-                               // then get the keys\r
-                               keyBlock.readBytes(client_write_key, 0, key_length);\r
-                               keyBlock.readBytes(server_write_key, 0, key_length);\r
-                               \r
-                               // keyBlock.position is now at (MAC_length * 2) + (keySize * 2) \r
-                               // and then the IVs\r
-                               keyBlock.readBytes(client_write_IV, 0, iv_length);\r
-                               keyBlock.readBytes(server_write_IV, 0, iv_length);\r
-                               \r
-                               // reset this in case it's needed, for some reason or another, but I doubt it\r
-                               keyBlock.position = 0;\r
-                               \r
-                               var client_write:SSLConnectionState = new SSLConnectionState(\r
-                                               bulkCipher, cipherType, macAlgorithm,\r
-                                               client_write_MAC, client_write_key, client_write_IV);\r
-                               var server_write:SSLConnectionState = new SSLConnectionState(\r
-                                               bulkCipher, cipherType, macAlgorithm,\r
-                                               server_write_MAC, server_write_key, server_write_IV);\r
-                               \r
-                               if (entity == TLSEngine.CLIENT) {\r
-                                       return {read:server_write, write:client_write};\r
-                               } else {\r
-                                       return {read:client_write, write:server_write};\r
-                               }\r
-\r
-\r
-                       } else {\r
-                               return {read:new SSLConnectionState, write:new SSLConnectionState};\r
-                       }\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConfig.as
deleted file mode 100644 (file)
index 2cd1d27..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/**\r
- * TLSConfig\r
- * \r
- * A set of configuration parameters for use by a TLSSocket or a TLSEngine.\r
- * Most parameters are optional and will be set to appropriate default values for most use.\r
- * \r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.der.PEM;\r
-       import com.hurlant.crypto.rsa.RSAKey;\r
-       import com.hurlant.crypto.cert.X509CertificateCollection;\r
-       import com.hurlant.crypto.cert.MozillaRootCertificates;\r
-       \r
-       public class TLSConfig {\r
-               public var entity:uint; // SERVER | CLIENT\r
-               \r
-               public var certificate:ByteArray;\r
-               public var privateKey:RSAKey;\r
-               \r
-               public var cipherSuites:Array;\r
-               \r
-               public var compressions:Array;\r
-               public var ignoreCommonNameMismatch:Boolean = false;\r
-               public var trustAllCertificates:Boolean = false;\r
-               public var trustSelfSignedCertificates:Boolean = false;\r
-               public var promptUserForAcceptCert:Boolean = false;\r
-               public var CAStore:X509CertificateCollection;\r
-               public var localKeyStore:X509CertificateCollection;\r
-               public var version:uint;\r
-               \r
-               public function TLSConfig(      entity:uint, cipherSuites:Array = null, compressions:Array = null, \r
-                                                                       certificate:ByteArray = null, privateKey:RSAKey = null, CAStore:X509CertificateCollection = null, ver:uint = 0x00) {\r
-                       this.entity = entity;\r
-                       this.cipherSuites = cipherSuites;\r
-                       this.compressions = compressions;\r
-                       this.certificate = certificate;\r
-                       this.privateKey = privateKey;\r
-                       this.CAStore = CAStore;\r
-                       this.version = ver;\r
-                       // default settings.\r
-                       if (cipherSuites==null) {\r
-                               this.cipherSuites = CipherSuites.getDefaultSuites();\r
-                       }\r
-                       if (compressions==null) {\r
-                               this.compressions = [TLSSecurityParameters.COMPRESSION_NULL];\r
-                       }\r
-                       \r
-                       if (CAStore==null) {\r
-                               this.CAStore = new MozillaRootCertificates;\r
-                       }\r
-                       \r
-                       if (ver==0x00) {\r
-                               // Default to TLS\r
-                               this.version = TLSSecurityParameters.PROTOCOL_VERSION;\r
-                       } \r
-               }\r
-               \r
-               public function setPEMCertificate(cert:String, key:String = null):void {\r
-                       if (key == null) {\r
-                               key = cert; // for folks who like to concat those two in one file.\r
-                       }\r
-                       certificate = PEM.readCertIntoArray(cert);\r
-                       privateKey = PEM.readRSAPrivateKey(key);\r
-               }\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSConnectionState.as
deleted file mode 100644 (file)
index 0d09a6c..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/**\r
- * TLSConnectionState\r
- * \r
- * This class encapsulates the read or write state of a TLS connection,\r
- * and implementes the encrypting and hashing of packets. \r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import flash.utils.IDataInput;\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.crypto.hash.HMAC;\r
-       import com.hurlant.crypto.hash.IHash;\r
-       import com.hurlant.crypto.symmetric.ICipher;\r
-       import com.hurlant.crypto.symmetric.IVMode;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.util.ArrayUtil;\r
-       \r
-       public class TLSConnectionState implements IConnectionState {\r
-\r
-\r
-               // compression state\r
-               \r
-               // cipher state\r
-               private var bulkCipher:uint;\r
-               private var cipherType:uint;\r
-               private var CIPHER_key:ByteArray;\r
-               private var CIPHER_IV:ByteArray;\r
-               private var cipher:ICipher;\r
-               private var ivmode:IVMode;\r
-               \r
-               // mac secret\r
-               private var macAlgorithm:uint;\r
-               private var MAC_write_secret:ByteArray;\r
-               private var hmac:HMAC;\r
-               \r
-               // sequence number. uint64\r
-               private var seq_lo:uint;\r
-               private var seq_hi:uint;\r
-               \r
-\r
-\r
-               public function TLSConnectionState(\r
-                               bulkCipher:uint=0, cipherType:uint=0, macAlgorithm:uint=0,\r
-                               mac:ByteArray=null, key:ByteArray=null, IV:ByteArray=null) {\r
-                       this.bulkCipher = bulkCipher;\r
-                       this.cipherType = cipherType;\r
-                       this.macAlgorithm = macAlgorithm;\r
-                       MAC_write_secret = mac;\r
-                       hmac = MACs.getHMAC(macAlgorithm);\r
-                       CIPHER_key = key;\r
-                       CIPHER_IV = IV;\r
-                       cipher = BulkCiphers.getCipher(bulkCipher, key, 0x0301);\r
-                       if (cipher is IVMode) {\r
-                               ivmode = cipher as IVMode;\r
-                               ivmode.IV = IV;\r
-                       }\r
-               }\r
-               \r
-               public function decrypt(type:uint, length:uint, p:ByteArray):ByteArray {\r
-                       // decompression is a nop.\r
-                       \r
-                       if (cipherType == BulkCiphers.STREAM_CIPHER) {\r
-                               if (bulkCipher == BulkCiphers.NULL) {\r
-                                       // no-op\r
-                               } else {\r
-                                       cipher.decrypt(p);\r
-                               }\r
-                       } else {\r
-                               // block cipher\r
-                               var nextIV:ByteArray = new ByteArray;\r
-                               nextIV.writeBytes(p, p.length-CIPHER_IV.length, CIPHER_IV.length);\r
-                               \r
-                               cipher.decrypt(p);\r
-\r
-\r
-                               CIPHER_IV = nextIV;\r
-                               ivmode.IV = nextIV;\r
-                       }\r
-                       if (macAlgorithm!=MACs.NULL) {\r
-                               var data:ByteArray = new ByteArray;\r
-                               var len:uint = p.length - hmac.getHashSize();\r
-                               data.writeUnsignedInt(seq_hi);\r
-                               data.writeUnsignedInt(seq_lo);\r
-                               data.writeByte(type);\r
-                               data.writeShort(TLSSecurityParameters.PROTOCOL_VERSION);\r
-                               data.writeShort(len);\r
-                               if (len!=0) {\r
-                                       data.writeBytes(p, 0, len);\r
-                               }\r
-                               var mac:ByteArray = hmac.compute(MAC_write_secret, data);\r
-                               // compare "mac" with the last X bytes of p.\r
-                               var mac_received:ByteArray = new ByteArray;\r
-                               mac_received.writeBytes(p, len, hmac.getHashSize());\r
-                               if (ArrayUtil.equals(mac, mac_received)) {\r
-                                       // happy happy joy joy\r
-                               } else {\r
-                                       throw new TLSError("Bad Mac Data", TLSError.bad_record_mac);\r
-                               }\r
-                               p.length = len;\r
-                               p.position = 0;\r
-                       }\r
-                       // increment seq\r
-                       seq_lo++;\r
-                       if (seq_lo==0) seq_hi++;\r
-                       return p;\r
-               }\r
-               public function encrypt(type:uint, p:ByteArray):ByteArray {\r
-                       var mac:ByteArray = null;\r
-                       if (macAlgorithm!=MACs.NULL) {\r
-                               var data:ByteArray = new ByteArray;\r
-                               data.writeUnsignedInt(seq_hi);\r
-                               data.writeUnsignedInt(seq_lo);\r
-                               data.writeByte(type);\r
-                               data.writeShort(TLSSecurityParameters.PROTOCOL_VERSION);\r
-                               data.writeShort(p.length);\r
-                               if (p.length!=0) {\r
-                                       data.writeBytes(p, 0, p.length);\r
-                               }\r
-                               mac = hmac.compute(MAC_write_secret, data);\r
-                               p.position = p.length;\r
-                               p.writeBytes(mac);\r
-                       }\r
-                       p.position = 0;\r
-                       if (cipherType == BulkCiphers.STREAM_CIPHER) {\r
-                               // stream cipher\r
-                               if (bulkCipher == BulkCiphers.NULL) {\r
-                                       // no-op\r
-                               } else {\r
-                                       cipher.encrypt(p);\r
-                               }\r
-                       } else {\r
-                               // block cipher\r
-                               cipher.encrypt(p);\r
-                               // adjust IV\r
-                               var nextIV:ByteArray = new ByteArray;\r
-                               nextIV.writeBytes(p, p.length-CIPHER_IV.length, CIPHER_IV.length);\r
-                               CIPHER_IV = nextIV;\r
-                               ivmode.IV = nextIV;\r
-                       }\r
-                       // increment seq\r
-                       seq_lo++;\r
-                       if (seq_lo==0) seq_hi++;\r
-                       // compression is a nop.\r
-                       return p;\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEngine.as
deleted file mode 100644 (file)
index 72f3941..0000000
+++ /dev/null
@@ -1,895 +0,0 @@
-/**
- * TLSEngine
- * 
- * A TLS protocol implementation.
- * See comment below for some details.
- * Copyright (c) 2007 Henri Torgemane
- * 
- * Patched(heavily) by Bobby Parker (shortwave@gmail.com)
- * 
- * See LICENSE.txt for full license information.
- */
-package com.hurlant.crypto.tls {
-       import com.hurlant.crypto.cert.X509Certificate;
-       import com.hurlant.crypto.cert.X509CertificateCollection;
-       import com.hurlant.crypto.prng.Random;
-       import com.hurlant.util.ArrayUtil;
-       import com.hurlant.util.Hex;
-       
-       import flash.events.Event;
-       import flash.events.EventDispatcher;
-       import flash.events.ProgressEvent;
-       import flash.utils.ByteArray;
-       import flash.utils.IDataInput;
-       import flash.utils.IDataOutput;
-       import flash.utils.clearTimeout;
-       import flash.utils.setTimeout;
-       import com.hurlant.crypto.prng.ARC4;
-
-
-       [Event(name="close", type="flash.events.Event")]
-       [Event(name="socketData", type="flash.events.ProgressEvent")]
-       [Event(name="ready", type="com.hurlant.crypto.tls.TLSEvent")]
-       [Event(name="data", type="com.hurlant.crypto.tls.TLSEvent")]
-       
-       /**
-        * The heart of the TLS protocol.
-        * This class can work in server or client mode.
-        * 
-        * This doesn't fully implement the TLS protocol.
-        * 
-        * Things missing that I'd like to add:
-        * - support for client-side certificates
-        * - general code clean-up to make sure we don't have gaping securite holes
-        * 
-        * Things that aren't there that I won't add:
-        * - support for "export" cypher suites (deprecated in later TLS versions)
-        * - support for "anon" cypher suites (deprecated in later TLS versions)
-        * 
-        * Things that I'm unsure about adding later:
-        * - compression. Compressing encrypted streams is barely worth the CPU cycles.
-        * - diffie-hellman based key exchange mechanisms. Nifty, but would we miss it?
-        * 
-        * @author henri
-        * 
-        */
-       public class TLSEngine extends EventDispatcher {
-               
-               public static const SERVER:uint = 0;
-               public static const CLIENT:uint = 1;
-               public var protocol_version:uint;
-
-
-       
-               private static const PROTOCOL_HANDSHAKE:uint = 22;
-               private static const PROTOCOL_ALERT:uint = 21;
-               private static const PROTOCOL_CHANGE_CIPHER_SPEC:uint = 20;
-               private static const PROTOCOL_APPLICATION_DATA:uint = 23;
-
-
-               private static const STATE_NEW:uint = 0; // brand new. nothing happened yet
-               private static const STATE_NEGOTIATING:uint = 1; // we're figuring out what to use
-               private static const STATE_READY:uint = 2; // we're ready for AppData stuff to go over us.
-               private static const STATE_CLOSED:uint = 3; // we're done done.
-               
-               private var _entity:uint; // SERVER | CLIENT
-               private var _config:TLSConfig;
-               
-               private var _state:uint;
-               
-               private var _securityParameters:ISecurityParameters;
-               
-               private var _currentReadState:IConnectionState;
-               private var _currentWriteState:IConnectionState;
-               private var _pendingReadState:IConnectionState;
-               private var _pendingWriteState:IConnectionState;
-               
-               private var _handshakePayloads:ByteArray;
-               private var _handshakeRecords:ByteArray; // For client-side certificate verify 
-               
-               private var _iStream:IDataInput;
-               private var _oStream:IDataOutput;
-               
-               // temporary store for X509 certs received by this engine.
-               private var _store:X509CertificateCollection;
-               // the main certificate received from the other side.
-               private var _otherCertificate:X509Certificate;
-               
-               public function get peerCertificate() : X509Certificate {
-                       return _otherCertificate;
-               }
-               // If this isn't null, we expect this identity to be found in the Cert's Subject CN.
-               private var _otherIdentity:String;
-               
-               // The client-side cert
-               private var _myCertficate:X509Certificate;
-               // My Identity
-               private var _myIdentity:String;
-               
-               /**
-                * 
-                * @param config                A TLSConfig instance describing how we're supposed to work
-                * @param iStream               An input stream to read TLS data from
-                * @param oStream               An output stream to write TLS data to
-                * @param otherIdentity An optional identifier. If set, this will be checked against the Subject CN of the other side's certificate.
-                * 
-                */
-               function TLSEngine(config:TLSConfig, iStream:IDataInput, oStream:IDataOutput, otherIdentity:String = null) {
-                       _entity = config.entity;
-                       _config = config;
-                       _iStream = iStream;
-                       _oStream = oStream;
-                       _otherIdentity = otherIdentity;
-                       
-                       _state = STATE_NEW;
-                       
-                       // Pick the right set of callbacks
-                       _entityHandshakeHandlers = _entity == CLIENT ? handshakeHandlersClient : handshakeHandlersServer;
-                       
-                       // setting up new security parameters needs to be controlled by...something.
-                       if (_config.version == SSLSecurityParameters.PROTOCOL_VERSION) {
-                               _securityParameters = new SSLSecurityParameters(_entity);
-                       } else {
-                               _securityParameters = new TLSSecurityParameters(_entity, _config.certificate, _config.privateKey);
-                       }
-                       protocol_version = _config.version;
-                       
-                       // So this...why is it here, other than to preclude a possible null pointer situation?
-                       var states:Object = _securityParameters.getConnectionStates();
-                       
-                       _currentReadState = states.read;
-                       _currentWriteState = states.write;
-                       
-                       _handshakePayloads = new ByteArray;
-                       
-                       _store = new X509CertificateCollection;
-               }
-               
-               /**
-                * This starts the TLS negotiation for a TLS Client.
-                * 
-                * This is a no-op for a TLS Server.
-                * 
-                */
-               public function start():void {
-                       if (_entity == CLIENT) {
-                               try {
-                                       startHandshake();
-                               } catch (e:TLSError) {
-                                       handleTLSError(e);
-                               }
-                       }
-               }
-               
-               
-               public function dataAvailable(e:* = null):void {
-                       if (_state == STATE_CLOSED) return; // ignore
-                       try {
-                               parseRecord(_iStream);
-                       } catch (e:TLSError) {
-                               handleTLSError(e);
-                       }
-               }
-               
-               public function close(e:TLSError = null):void {
-                       if (_state == STATE_CLOSED) return; // ignore
-                       // ok. send an Alert to let the peer know
-                       var rec:ByteArray = new ByteArray;
-                       if (e==null && _state != STATE_READY) {
-                               // use canceled while handshaking. be nice about it
-                               rec[0] = 1;
-                               rec[1] = TLSError.user_canceled;
-                               sendRecord(PROTOCOL_ALERT, rec);
-                       }
-                       rec[0] = 2;
-                       if (e == null) {
-                               rec[1] = TLSError.close_notify;
-                       } else {
-                               rec[1] = e.errorID;
-                               trace("TLSEngine shutdown triggered by "+e);
-                       }
-                       sendRecord(PROTOCOL_ALERT, rec);
-                       
-                       _state = STATE_CLOSED;
-                       dispatchEvent(new Event(Event.CLOSE));
-               }
-               
-               private var _packetQueue:Array = [];
-               private function parseRecord(stream:IDataInput):void {
-                       var p:ByteArray;
-                       while(_state!=STATE_CLOSED && stream.bytesAvailable>4) {
-                               
-                               if (_packetQueue.length>0) {
-                                       var packet:Object = _packetQueue.shift();
-                                       p = packet.data;
-                                       if (stream.bytesAvailable+p.length>=packet.length) {
-                                               // we have a whole packet. put together.
-                                               stream.readBytes(p, p.length, packet.length-p.length);
-                                               parseOneRecord(packet.type, packet.length, p);
-                                               // do another loop to parse any leftover record
-                                               continue;
-                                       } else {
-                                               // not enough. grab the data and park it.
-                                               stream.readBytes(p, p.length, stream.bytesAvailable);
-                                               _packetQueue.push(packet);
-                                               continue;
-                                       }
-                               }
-
-
-                               var type:uint = stream.readByte();
-                               var ver:uint = stream.readShort();
-                               var length:uint = stream.readShort();
-                               if (length>16384+2048) { // support compression and encryption overhead.
-                                       throw new TLSError("Excessive TLS Record length: "+length, TLSError.record_overflow);
-                               }
-                               // Can pretty much assume that if I'm here, I've got a default config, so let's use it.
-                               if (ver != _securityParameters.version ) {
-                                       throw new TLSError("Unsupported TLS version: "+ver.toString(16), TLSError.protocol_version);
-                               }
-
-                               p = new ByteArray;
-                               var actualLength:uint = Math.min(stream.bytesAvailable, length);
-                               stream.readBytes(p, 0, actualLength);
-                               if (actualLength == length) {
-                                       parseOneRecord(type, length, p);
-                               } else {
-                                       _packetQueue.push({type:type, length:length, data:p});
-                               }
-                       }
-               }
-               
-               
-               // Protocol handler map, provides a mapping of protocol types to individual packet handlers
-               private var protocolHandlers:Object = { 23 : parseApplicationData, // PROTOCOL_APPLICATION_DATA
-                                                                                         22 : parseHandshake, // PROTOCOL_HANDSHAKE
-                                                                                         21 : parseAlert, // PROTOCOL_ALERT
-                                                                                         20 : parseChangeCipherSpec }; // PROTOCOL_CHANGE_CIPHER_SPEC
-               
-               /**
-                * Modified to support the notion of a handler map(see above ), since it makes for better clarity (IMHO of course).
-                */
-               private function parseOneRecord(type:uint, length:uint, p:ByteArray):void {
-                       p = _currentReadState.decrypt(type, length, p);
-                       if (p.length>16384) { 
-                               throw new TLSError("Excessive Decrypted TLS Record length: "+p.length, TLSError.record_overflow);
-                       }
-                       if (protocolHandlers.hasOwnProperty( type )) {
-                               while( p != null)
-                                       p = protocolHandlers[ type ]( p );
-                       } else {
-                               throw new TLSError("Unsupported TLS Record Content Type: "+type.toString( 16 ), TLSError.unexpected_message);
-                       }
-               }
-               
-               ///////// handshake handling
-               // session identifier
-               // peer certificate
-               // compression method
-               // cipher spec
-               // master secret
-               // is resumable
-               private static const HANDSHAKE_HELLO_REQUEST:uint = 0;
-               private static const HANDSHAKE_CLIENT_HELLO:uint = 1;
-               private static const HANDSHAKE_SERVER_HELLO:uint = 2;
-               private static const HANDSHAKE_CERTIFICATE:uint = 11;
-               private static const HANDSHAKE_SERVER_KEY_EXCHANGE:uint = 12;
-               private static const HANDSHAKE_CERTIFICATE_REQUEST:uint = 13;
-               private static const HANDSHAKE_HELLO_DONE:uint = 14;
-               private static const HANDSHAKE_CERTIFICATE_VERIFY:uint = 15;
-               private static const HANDSHAKE_CLIENT_KEY_EXCHANGE:uint = 16;
-               private static const HANDSHAKE_FINISHED:uint = 20;
-
-               // Server handshake handler map
-               private var handshakeHandlersServer:Object = { 0 : notifyStateError, // HANDSHAKE_HELLO_REQUEST
-                                                                                                          1 : parseHandshakeClientHello, // HANDSHAKE_CLIENT_HELLO
-                                                                                                          2 : notifyStateError, // HANDSHAKE_SERVER_HELLO 
-                                                                                                          11 : loadCertificates, // HANDSHAKE_CERTIFICATE
-                                                                                                          12 : notifyStateError, // HANDSHAKE_SERVER_KEY_EXCHANGE
-                                                                                                          13 : notifyStateError, // HANDSHAKE_CERTIFICATE_REQUEST
-                                                                                                          14 : notifyStateError, // HANDSHAKE_HELLO_DONE
-                                                                                                          15 : notifyStateError, // HANDSHAKE_CERTIFICATE_VERIFY
-                                                                                                          16 : parseHandshakeClientKeyExchange, // HANDSHAKE_CLIENT_KEY_EXCHANGE
-                                                                                                          20 : verifyHandshake // HANDSHAKE_FINISHED                                                                                                      
-                                                                                                               };
-                                                                                                               
-               // Client handshake handler map                                                                         
-               private var handshakeHandlersClient:Object = { 0 : parseHandshakeHello, // HANDSHAKE_HELLO_REQUEST
-                                                                                                          1 : notifyStateError, // HANDSHAKE_CLIENT_HELLO
-                                                                                                          2 : parseHandshakeServerHello, // HANDSHAKE_SERVER_HELLO
-                                                                                                          11 : loadCertificates, // HANDSHAKE_CERTIFICATE
-                                                                                                          12 : parseServerKeyExchange, // HANDSHAKE_SERVER_KEY_EXCHANGE
-                                                                                                          13 : setStateRespondWithCertificate, // HANDSHAKE_CERTIFICATE
-                                                                                                          14 : sendClientAck, // HANDSHAKE_HELLO_DONE  
-                                                                                                          15 : notifyStateError, // HANDSHAKE_CERTIFICATE_VERIFY
-                                                                                                          16 : notifyStateError, // HANDSHAKE_CLIENT_KEY_EXCHANGE
-                                                                                                          20 : verifyHandshake // HANDSHAKE_FINISHED
-                                                                                                               };
-               private var _entityHandshakeHandlers:Object;
-               private var _handshakeCanContinue:Boolean = true; // For handling cases where I might need to pause processing during a handshake (cert issues, etc.).
-               private var _handshakeQueue:Array = [];
-               /**
-                * The handshake is always started by the client.
-                */
-               private function startHandshake():void {
-                       _state = STATE_NEGOTIATING;
-                       // reset some other handshake state. XXX
-                       sendClientHello();
-               }
-               
-               /**
-                * Handle the incoming handshake packet.
-                * 
-                */
-               private function parseHandshake(p:ByteArray):ByteArray {
-                       
-                       if (p.length<4) {
-                               trace("Handshake packet is way too short. bailing.");
-                               return null;
-                       }
-
-                       p.position = 0;
-                       
-                       var rec:ByteArray = p;
-                       var type:uint = rec.readUnsignedByte();
-                       var tmp:uint = rec.readUnsignedByte();
-                       var length:uint = (tmp<<16) | rec.readUnsignedShort();
-                       if (length+4>p.length) {
-                               // partial read.
-                               trace("Handshake packet is incomplete. bailing.");
-                               return null;
-                       }
-
-                       // we need to copy the record, to have a valid FINISHED exchange.
-                       if (type!=HANDSHAKE_FINISHED) { 
-                               _handshakePayloads.writeBytes(p, 0, length+4);
-                       } 
-                       
-                       // Surf the handler map and find the right handler for this handshake packet type. 
-                       // I modified the individual handlers so they encapsulate all possible knowledge 
-                       // about the incoming packet type, so no previous handling or massaging of the data 
-                       // is required, as was the case using the switch statement. BP
-                       if (_entityHandshakeHandlers.hasOwnProperty( type )) {
-                               if (_entityHandshakeHandlers[ type ] is Function) 
-                                       _entityHandshakeHandlers[ type ]( rec );
-                       } else {
-                               throw new TLSError( "Unimplemented or unknown handshake type!", TLSError.internal_error );
-                       }
-                       
-                       // Get set up for the next packet.
-                       if (length+4<p.length) {
-                               var n:ByteArray = new ByteArray;
-                               n.writeBytes(p,length+4, p.length-(length+4));
-                               return n;
-                       } else {
-                               return null;
-                       }
-               }
-               
-               /**
-                * Throw an error when the detected handshake state isn't a valid state for the given entity type (client vs. server, etc. ).
-                * This really should abort the handshake, since there's no case in which a server should EVER be confused about the type of entity it is. BP
-                */
-               private function notifyStateError( rec:ByteArray ) : void {
-                       throw new TLSError( "Invalid handshake state for a TLS Entity type of " + _entity, TLSError.internal_error ); 
-               }
-               
-               /**
-                * two unimplemented functions
-                */
-               private function parseClientKeyExchange( rec:ByteArray ) : void {
-                       throw new TLSError( "ClientKeyExchange is currently unimplemented!", TLSError.internal_error );
-               }
-               
-               private function parseServerKeyExchange( rec:ByteArray ) : void {
-                       throw new TLSError( "ServerKeyExchange is currently unimplemented!", TLSError.internal_error );
-               }
-               
-               /**
-                * Test the server's Finished message for validity against the data we know about. Only slightly rewritten. BP
-                */
-               private function verifyHandshake( rec:ByteArray):void {
-                       // Get the Finished message
-                       var verifyData:ByteArray = new ByteArray;
-                       // This, in the vain hope that noboby is using SSL 2 anymore
-                       if (_securityParameters.version == SSLSecurityParameters.PROTOCOL_VERSION) {
-                               rec.readBytes(verifyData, 0, 36); // length should be (in fact, better be) 16 + 20 (md5-size + sha1-size)
-                       } else { // presuming TLS
-                               rec.readBytes(verifyData, 0, 12);
-                       }
-                       
-                       var data:ByteArray = _securityParameters.computeVerifyData(1-_entity, _handshakePayloads);
-
-                       if (ArrayUtil.equals(verifyData, data)) {
-                               _state = STATE_READY;
-                               dispatchEvent(new TLSEvent(TLSEvent.READY));
-                       } else {
-                               throw new TLSError("Invalid Finished mac.", TLSError.bad_record_mac);
-                       }
-               }
-
-               // enforceClient/enforceServer removed in favor of state-driven function maps
-
-               /**
-                * Handle a HANDSHAKE_HELLO
-                */
-               private function parseHandshakeHello( rec:ByteArray ) : void {
-                       if (_state != STATE_READY) {
-                               trace("Received an HELLO_REQUEST before being in state READY. ignoring.");
-                               return;
-                       }
-                       _handshakePayloads = new ByteArray;
-                       startHandshake();
-               }
-               
-               /**
-                * Handle a HANDSHAKE_CLIENT_KEY_EXCHANGE
-                */
-               private function parseHandshakeClientKeyExchange(rec:ByteArray):void {
-                       if (_securityParameters.useRSA) {
-                               // skip 2 bytes for length.
-                               var len:uint = rec.readShort();
-                               var cipher:ByteArray = new ByteArray;
-                               rec.readBytes(cipher, 0, len);
-                               var preMasterSecret:ByteArray = new ByteArray;
-                               _config.privateKey.decrypt(cipher, preMasterSecret, len);
-                               _securityParameters.setPreMasterSecret(preMasterSecret);
-                               
-                               // now is a good time to get our pending states
-                               var o:Object = _securityParameters.getConnectionStates();
-                               _pendingReadState = o.read;
-                               _pendingWriteState = o.write;
-                               
-                       } else {
-                               throw new TLSError("parseHandshakeClientKeyExchange not implemented for DH modes.", TLSError.internal_error);
-                       }
-                       
-               }
-               
-               /** 
-                * Handle HANDSHAKE_SERVER_HELLO - client-side
-                */
-               private function parseHandshakeServerHello( rec:IDataInput ) : void {
-                       
-                       var ver:uint = rec.readShort(); 
-                       if (ver != _securityParameters.version) {
-                               throw new TLSError("Unsupported TLS version: "+ver.toString(16), TLSError.protocol_version);
-                       }                       
-                       var random:ByteArray = new ByteArray;
-                       rec.readBytes(random, 0, 32);
-                       var session_length:uint = rec.readByte();
-                       var session:ByteArray = new ByteArray;
-                       if (session_length > 0) {
-                               // some implementations don't assign a session ID
-                               rec.readBytes(session, 0, session_length);
-                       }
-                       
-                       _securityParameters.setCipher(rec.readShort()); 
-                       _securityParameters.setCompression(rec.readByte());
-                       _securityParameters.setServerRandom(random);
-               }
-               
-               /**
-                *  Handle HANDSHAKE_CLIENT_HELLO - server side
-                */
-               private function parseHandshakeClientHello( rec:IDataInput ) : void {
-                       var ret:Object;
-                       var ver:uint = rec.readShort(); 
-                       if (ver != _securityParameters.version) {
-                               throw new TLSError("Unsupported TLS version: "+ver.toString(16), TLSError.protocol_version);
-                       }
-                       
-                       var random:ByteArray = new ByteArray;
-                       rec.readBytes(random, 0, 32);
-                       var session_length:uint = rec.readByte();
-                       var session:ByteArray = new ByteArray;
-                       if (session_length > 0) {
-                               // some implementations don't assign a session ID
-                               rec.readBytes(session, 0, session_length);
-                       }
-                       var suites:Array = [];
-                       
-                       var suites_length:uint = rec.readShort();
-                       for (var i:uint=0;i<suites_length/2;i++) {
-                               suites.push(rec.readShort());
-                       }
-               
-                       var compressions:Array = [];
-                       
-                       var comp_length:uint = rec.readByte();
-                       for (i=0;i<comp_length;i++) {
-                               compressions.push(rec.readByte());
-                       }
-
-                       ret = {random:random, session:session, suites:suites, compressions:compressions};
-                       
-                       var sofar:uint = 2+32+1+session_length+2+suites_length+1+comp_length;
-                       var extensions:Array = [];
-                       if (sofar<length) {
-                               // we have extensions. great.
-                               var ext_total_length:uint = rec.readShort();
-                               while (ext_total_length>0) {
-                                       var ext_type:uint = rec.readShort();
-                                       var ext_length:uint = rec.readShort();
-                                       var ext_data:ByteArray = new ByteArray;
-                                       rec.readBytes(ext_data, 0, ext_length);
-                                       ext_total_length -= 4+ext_length;
-                                       extensions.push({type:ext_type, length:ext_length, data:ext_data});
-                               }
-                       }
-                       ret.ext = extensions;
-                       
-                       sendServerHello(ret);
-                       sendCertificate();
-                       // TODO: Modify to handle case of requesting a certificate from the client, for "client authentication", 
-                       // and testing purposes, will probably never actually need it.
-                       sendServerHelloDone();
-               }
-               
-               private function sendClientHello():void {
-                       var rec:ByteArray = new ByteArray;
-                       // version - modified to support version attribute from ISecurityParameters
-                       rec.writeShort(_securityParameters.version);  
-                       // random
-                       var prng:Random = new Random;
-                       var clientRandom:ByteArray = new ByteArray;
-                       prng.nextBytes(clientRandom, 32);
-                       _securityParameters.setClientRandom(clientRandom);
-                       rec.writeBytes(clientRandom,0,32);
-                       // session
-                       rec.writeByte(32);
-                       prng.nextBytes(rec, 32);
-                       // Cipher suites
-                       var cs:Array = _config.cipherSuites;
-                       rec.writeShort(2* cs.length);
-                       for (var i:int=0;i<cs.length;i++) {
-                               rec.writeShort(cs[i]);
-                       }
-                       // Compression
-                       cs = _config.compressions;
-                       rec.writeByte(cs.length);
-                       for (i=0;i<cs.length;i++) {
-                               rec.writeByte(cs[i]);
-                       }
-                       // no extensions, yet.
-                       rec.position = 0;
-                       sendHandshake(HANDSHAKE_CLIENT_HELLO, rec.length, rec);
-               }
-               
-               private function findMatch(a1:Array, a2:Array):int {
-                       for (var i:int=0;i<a1.length;i++) {
-                               var e:uint = a1[i];
-                               if (a2.indexOf(e)>-1) {
-                                       return e;
-                               }
-                       }
-                       return -1;
-               }
-               
-               private function sendServerHello(v:Object):void {
-                       var cipher:int = findMatch(_config.cipherSuites, v.suites);
-                       if (cipher == -1) {
-                               throw new TLSError("No compatible cipher found.", TLSError.handshake_failure);
-                       }
-                       _securityParameters.setCipher(cipher);
-                       
-                       var comp:int = findMatch(_config.compressions, v.compressions);
-                       if (comp == 01) {
-                               throw new TLSError("No compatible compression method found.", TLSError.handshake_failure);
-                       }
-                       _securityParameters.setCompression(comp);
-                       _securityParameters.setClientRandom(v.random);
-
-
-                       var rec:ByteArray = new ByteArray;
-                       rec.writeShort(_securityParameters.version);
-                       var prng:Random = new Random;
-                       var serverRandom:ByteArray = new ByteArray;
-                       prng.nextBytes(serverRandom, 32);
-                       _securityParameters.setServerRandom(serverRandom);
-                       rec.writeBytes(serverRandom,0,32);
-                       // session
-                       rec.writeByte(32);
-                       prng.nextBytes(rec, 32);
-                       // Cipher suite
-                       rec.writeShort(v.suites[0]);
-                       // Compression
-                       rec.writeByte(v.compressions[0]);
-                       rec.position = 0;
-                       sendHandshake(HANDSHAKE_SERVER_HELLO, rec.length, rec);
-               }
-               
-               private var sendClientCert:Boolean = false;
-               private function setStateRespondWithCertificate( r:ByteArray = null) : void {
-                       sendClientCert = true;
-               }
-               
-               private function sendCertificate( r:ByteArray = null ):void {
-                       var cert:ByteArray = _config.certificate;
-                       var len:uint;
-                       var len2:uint;
-                       var rec:ByteArray = new ByteArray;
-                       // Look for a certficate chain, if we have one, send it, if we don't, send an empty record.
-                       if (cert != null) { 
-                               len = cert.length;
-                               len2 = cert.length + 3;
-                               rec.writeByte(len2>>16);
-                               rec.writeShort(len2&65535);
-                               rec.writeByte(len>>16);
-                               rec.writeShort(len&65535);
-                               rec.writeBytes(cert);
-                       } else {
-                               rec.writeShort( 0 );
-                               rec.writeByte( 0 );
-                       }
-                       rec.position = 0;
-                       sendHandshake(HANDSHAKE_CERTIFICATE, rec.length, rec);
-               }
-               
-               private function sendCertificateVerify():void {
-                       var rec:ByteArray = new ByteArray();
-                       // Encrypt the handshake payloads here
-                       var data:ByteArray = _securityParameters.computeCertificateVerify(_entity, _handshakePayloads);
-                       data.position=0;
-                       sendHandshake(HANDSHAKE_CERTIFICATE_VERIFY, data.length, data);
-               }
-               
-               private function sendServerHelloDone():void {
-                       var rec:ByteArray = new ByteArray;
-                       sendHandshake(HANDSHAKE_HELLO_DONE, rec.length, rec);
-               }
-               
-               private function sendClientKeyExchange():void {
-                       if (_securityParameters.useRSA) {
-                               var p:ByteArray = new ByteArray;
-                               p.writeShort(_securityParameters.version);
-                               var prng:Random = new Random;
-                               prng.nextBytes(p, 46);
-                               p.position = 0;
-
-                               var preMasterSecret:ByteArray = new ByteArray;
-                               preMasterSecret.writeBytes(p, 0, p.length);
-                               preMasterSecret.position = 0;
-                               _securityParameters.setPreMasterSecret(preMasterSecret);
-                                                       
-                               var enc_key:ByteArray = new ByteArray;
-                               _otherCertificate.getPublicKey().encrypt(preMasterSecret, enc_key, preMasterSecret.length); 
-                               
-                               enc_key.position = 0;
-                               var rec:ByteArray = new ByteArray;
-                               
-                               // TLS requires the size of the premaster key be sent BUT
-                               // SSL 3.0 does not
-                               if (_securityParameters.version > 0x0300) { 
-                                       rec.writeShort(enc_key.length);
-                               }
-                               rec.writeBytes(enc_key, 0, enc_key.length);
-                               
-                               rec.position=0;
-                               
-                               sendHandshake(HANDSHAKE_CLIENT_KEY_EXCHANGE, rec.length, rec);
-                               
-                               // now is a good time to get our pending states
-                               var o:Object = _securityParameters.getConnectionStates();
-                               _pendingReadState = o.read;
-                               _pendingWriteState = o.write;
-                               
-                       } else {
-                               throw new TLSError("Non-RSA Client Key Exchange not implemented.", TLSError.internal_error);
-                       }
-               }
-               private function sendFinished():void {
-                       var data:ByteArray = _securityParameters.computeVerifyData(_entity, _handshakePayloads);
-                       data.position=0;
-                       sendHandshake(HANDSHAKE_FINISHED, data.length, data);
-               }
-               
-               private function sendHandshake(type:uint, len:uint, payload:IDataInput):void {
-                       var rec:ByteArray = new ByteArray;
-                       rec.writeByte(type);
-                       rec.writeByte(0);
-                       rec.writeShort(len);
-                       payload.readBytes(rec, rec.position, len);
-                       _handshakePayloads.writeBytes(rec, 0, rec.length);
-                       sendRecord(PROTOCOL_HANDSHAKE, rec);
-               }
-               
-               private function sendChangeCipherSpec():void {
-                       var rec:ByteArray = new ByteArray;
-                       rec[0] = 1;
-                       sendRecord(PROTOCOL_CHANGE_CIPHER_SPEC, rec);
-                       
-                       // right after, switch the cipher for writing.
-                       _currentWriteState = _pendingWriteState;
-                       _pendingWriteState = null;      
-               }
-               
-               public function sendApplicationData(data:ByteArray, offset:uint=0, length:uint=0):void {
-                       var rec:ByteArray = new ByteArray;
-                       var len:uint = length;
-                       // BIG FAT WARNING: Patch from Arlen Cuss ALA As3crypto group on Google code. 
-                       // This addresses data overflow issues when the packet size hits the max length boundary.
-                       if (len == 0) len = data.length;  
-                       while (len>16384) {
-                               rec.position = 0;
-                               rec.writeBytes(data, offset, 16384);
-                               rec.position = 0;
-                               sendRecord(PROTOCOL_APPLICATION_DATA, rec);
-                               offset += 16384;
-                               len -= 16384;
-                       }
-                       rec.position = 0;
-                       rec.writeBytes(data, offset, len);
-                       // trace("Data I'm sending..." + Hex.fromArray( data ));
-                       rec.position = 0;
-                       sendRecord(PROTOCOL_APPLICATION_DATA, rec);
-               }
-               private function sendRecord(type:uint, payload:ByteArray):void {
-                       // encrypt
-                       payload = _currentWriteState.encrypt(type, payload);
-                       
-                       _oStream.writeByte(type);
-                       _oStream.writeShort(_securityParameters.version);
-                       _oStream.writeShort(payload.length);
-                       _oStream.writeBytes(payload, 0, payload.length);
-                       
-                       scheduleWrite();
-               }
-               
-               private var _writeScheduler:uint;
-               private function scheduleWrite():void {
-                       if (_writeScheduler!=0) return;
-                       _writeScheduler = setTimeout(commitWrite, 0);
-               }
-               private function commitWrite():void {
-                       clearTimeout(_writeScheduler);
-                       _writeScheduler = 0;
-                       if (_state != STATE_CLOSED) {
-                               dispatchEvent(new ProgressEvent(ProgressEvent.SOCKET_DATA));
-                       }
-               }
-               
-               private function sendClientAck( rec:ByteArray ):void {
-                       if ( _handshakeCanContinue ) {
-                               // If I have a pending cert request, send it
-                               if (sendClientCert)
-                                       sendCertificate();
-                               // send a client key exchange
-                               sendClientKeyExchange();
-                               // Send the certificate verify, if we have one
-                               if (_config.certificate != null)
-                                       sendCertificateVerify();
-                               // send a change cipher spec
-                               sendChangeCipherSpec();
-                               // send a finished
-                               sendFinished();
-                       }
-               }
-
-               /**
-                * Vaguely gross function that parses a RSA key out of a certificate.
-                * 
-                * As long as that certificate looks just the way we expect it to.
-                * 
-                */
-               private function loadCertificates( rec:ByteArray ):void {
-                       var tmp:uint = rec.readByte();
-                       var certs_len:uint = (tmp<<16) | rec.readShort();
-                       var certs:Array = [];
-                       
-                       while (certs_len>0) {
-                               tmp = rec.readByte();
-                               var cert_len:uint = (tmp<<16) | rec.readShort();
-                               var cert:ByteArray = new ByteArray;
-                               rec.readBytes(cert, 0, cert_len);
-                               certs.push(cert);
-                               certs_len -= 3 + cert_len;
-                       }
-                       
-                       var firstCert:X509Certificate = null;
-                       for (var i:int=0;i<certs.length;i++) {
-                               var x509:X509Certificate = new X509Certificate(certs[i]);
-                               _store.addCertificate(x509);
-                               if (firstCert==null) {
-                                       firstCert = x509;
-                               }
-                       }
-
-                       
-                       // Test first for trust override parameters
-                       // This nice trust override stuff comes from Joey Parrish via As3crypto forums
-                       var certTrusted:Boolean;
-                       if (_config.trustAllCertificates) {
-                               certTrusted = true; // Blatantly trust everything
-                       } else if (_config.trustSelfSignedCertificates ) {
-                               // Self-signed certs
-                               certTrusted = firstCert.isSelfSigned(new Date); 
-                       } else {
-                               // Certs with a signer in the CA store - realistically, I should setup an event chain to handle this
-                               certTrusted = firstCert.isSigned(_store, _config.CAStore );
-                       }
-       
-                       // Good so far
-                       if (certTrusted) {                                                      
-                               // ok, that's encouraging. now for the hostname match.
-                               if (_otherIdentity==null || _config.ignoreCommonNameMismatch ) {
-                                       // we don't care who we're talking with. groovy.
-                                       _otherCertificate = firstCert;
-                               } else {
-                                       // use regex to handle wildcard certs
-                                       var commonName:String = firstCert.getCommonName();
-                                       // replace all regex special characters with escaped version, except for asterisk
-                                       // replace the asterisk with a regex sequence to match one or more non-dot characters
-                                       var commonNameRegex:RegExp = new RegExp( commonName.replace(/[\^\\\-$.[\]|()?+{}]/g, "\\$&").replace(/\*/g, "[^.]+"), "gi");
-                                       if (commonNameRegex.exec(_otherIdentity)) {
-                                               _otherCertificate = firstCert;
-                                       } else {
-                                               if (_config.promptUserForAcceptCert ) {
-                                                       _handshakeCanContinue = false;
-                                                       dispatchEvent( new TLSEvent( TLSEvent.PROMPT_ACCEPT_CERT ));
-                                               } else {
-                                                       throw new TLSError("Invalid common name: "+firstCert.getCommonName()+", expected "+_otherIdentity, TLSError.bad_certificate);
-                                               }
-                                       }
-                               }
-                       
-                       } else {
-                               // Let's ask the user if we can accept this cert. I'm not certain of the behaviour in case of timeouts, 
-                               // so I probably need to handle the case by killing and restarting the connection rather than continuing if it becomes 
-                               // an issue. We shall see. BP
-                               if (_config.promptUserForAcceptCert) {
-                                       _handshakeCanContinue = false;
-                                       dispatchEvent( new TLSEvent( TLSEvent.PROMPT_ACCEPT_CERT ));
-                               } else {
-                                       // Cannot continue, die.
-                                       throw new TLSError("Cannot verify certificate", TLSError.bad_certificate);
-                               }
-                       }
-               }
-               
-               // Accept the peer cert, and keep going
-               public function acceptPeerCertificate() : void {
-                       _handshakeCanContinue = true;
-                       sendClientAck( null );
-               }
-               
-               // Step off biotch! No trust for you!
-               public function rejectPeerCertificate() : void {
-                       throw new TLSError("Peer certificate not accepted!", TLSError.bad_certificate);
-               }
-               
-               
-               private function parseAlert(p:ByteArray):void {
-                       //throw new Error("Alert not implemented.");
-                       // 7.2
-                       trace("GOT ALERT! type="+p[1]);
-                       close();
-               }
-               private function parseChangeCipherSpec(p:ByteArray):void {
-                       p.readUnsignedByte();
-                       if (_pendingReadState==null) {
-                               throw new TLSError("Not ready to Change Cipher Spec, damnit.", TLSError.unexpected_message);
-                       }
-                       _currentReadState = _pendingReadState;
-                       _pendingReadState = null;
-                       // 7.1
-               }
-               private function parseApplicationData(p:ByteArray):void {
-                       if (_state != STATE_READY) {
-                               throw new TLSError("Too soon for data!", TLSError.unexpected_message);
-                               return;
-                       }
-                       dispatchEvent(new TLSEvent(TLSEvent.DATA, p));
-               }
-               
-               private function handleTLSError(e:TLSError):void {
-                       // basic rules to keep things simple:
-                       // - Make a good faith attempt at notifying peers
-                       // - TLSErrors are always fatal.
-                       // BP: Meh...not always. Common Name mismatches appear to be common on servers. Instead of closing, let's pause, and ask for confirmation 
-                       // before we tear the connection down.
-                       
-                       close(e);
-               }
-       }
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSError.as
deleted file mode 100644 (file)
index 16fac6d..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/**\r
- * TLSError\r
- * \r
- * A error that can be thrown when something wrong happens in the TLS protocol.\r
- * This is handled in TLSEngine by generating a TLS ALERT as appropriate.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       public class TLSError extends Error {\r
-               public static const close_notify:uint = 0;\r
-               public static const unexpected_message:uint = 10;\r
-        public static const bad_record_mac:uint = 20;\r
-        public static const decryption_failed:uint = 21;\r
-        public static const record_overflow:uint = 22;\r
-        public static const decompression_failure:uint = 30;\r
-        public static const handshake_failure:uint = 40;\r
-        public static const bad_certificate:uint = 42;\r
-        public static const unsupported_certificate:uint = 43;\r
-        public static const certificate_revoked:uint = 44;\r
-        public static const certificate_expired:uint = 45;\r
-        public static const certificate_unknown:uint = 46;\r
-        public static const illegal_parameter:uint = 47;\r
-        public static const unknown_ca:uint = 48;\r
-        public static const access_denied:uint = 49;\r
-        public static const decode_error:uint = 50;\r
-        public static const decrypt_error:uint = 51;\r
-        public static const protocol_version:uint = 70;\r
-        public static const insufficient_security:uint = 71;\r
-        public static const internal_error:uint = 80;\r
-        public static const user_canceled:uint = 90;\r
-        public static const no_renegotiation:uint = 100;\r
-        \r
-        public function TLSError(message:String, id:int) {\r
-               super(message,id);\r
-        }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSEvent.as
deleted file mode 100644 (file)
index d988d1e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/**\r
- * TLSEvent\r
- * \r
- * This is used by TLSEngine to let the application layer know\r
- * when we're ready for sending, or have received application data\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import flash.events.Event;\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class TLSEvent extends Event {\r
-               \r
-               static public const DATA:String = "data";\r
-               static public const READY:String = "ready";\r
-               static public const PROMPT_ACCEPT_CERT:String = "promptAcceptCert";\r
-               \r
-               public var data:ByteArray;\r
-               \r
-               public function TLSEvent(type:String, data:ByteArray = null) {\r
-                       this.data = data;\r
-                       super(type, false, false);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSecurityParameters.as
deleted file mode 100644 (file)
index 2637811..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/**\r
- * TLSSecurityParameters\r
- * \r
- * This class encapsulates all the security parameters that get negotiated\r
- * during the TLS handshake. It also holds all the key derivation methods.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Patched by Bobby Parker (sh0rtwave@gmail.com)\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import com.hurlant.crypto.hash.MD5;\r
-       import com.hurlant.crypto.hash.SHA1;\r
-       import com.hurlant.crypto.prng.TLSPRF;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       import flash.utils.ByteArray;
-       import com.hurlant.crypto.rsa.RSAKey;\r
-       \r
-       public class TLSSecurityParameters implements ISecurityParameters {\r
-               \r
-               // COMPRESSION\r
-               public static const COMPRESSION_NULL:uint = 0;\r
-               \r
-               // This is probably not smart. Revise this to use all settings from TLSConfig, since this shouldn't really know about\r
-               // user settings, those are best handled from the engine at a session level.\r
-               public static var IGNORE_CN_MISMATCH:Boolean = true;\r
-               public static var ENABLE_USER_CLIENT_CERTIFICATE:Boolean = false;\r
-               public static var USER_CERTIFICATE:String;\r
-               \r
-               \r
-               private var cert:ByteArray; // Local Cert\r
-               private var key:RSAKey; // local key\r
-               private var entity:uint; // SERVER | CLIENT\r
-               private var bulkCipher:uint; // BULK_CIPHER_*\r
-               private var cipherType:uint; // STREAM_CIPHER | BLOCK_CIPHER\r
-               private var keySize:uint;\r
-               private var keyMaterialLength:uint;\r
-               private var IVSize:uint;\r
-               private var macAlgorithm:uint; // MAC_*\r
-               private var hashSize:uint;\r
-               private var compression:uint; // COMPRESSION_NULL\r
-               private var masterSecret:ByteArray; // 48 bytes\r
-               private var clientRandom:ByteArray; // 32 bytes\r
-               private var serverRandom:ByteArray; // 32 bytes\r
-               private var ignoreCNMismatch:Boolean = true;\r
-               private var trustAllCerts:Boolean = false;\r
-               private var trustSelfSigned:Boolean = false;\r
-               public static const PROTOCOL_VERSION:uint = 0x0301; 
-               private var tlsDebug:Boolean = false;\r
-
-               \r
-               // not strictly speaking part of this, but yeah.\r
-               public var keyExchange:uint;\r
-               public function TLSSecurityParameters(entity:uint, localCert:ByteArray = null, localKey:RSAKey = null) {\r
-                       this.entity = entity;\r
-                       reset();\r
-                       key = localKey;\r
-                       cert = localCert;\r
-               }\r
-               \r
-               public function get version() : uint {\r
-                       return PROTOCOL_VERSION;\r
-               }\r
-               \r
-               public function reset():void {\r
-                       bulkCipher = BulkCiphers.NULL;\r
-                       cipherType = BulkCiphers.BLOCK_CIPHER;\r
-                       macAlgorithm = MACs.NULL;\r
-                       compression = COMPRESSION_NULL;\r
-                       masterSecret = null;\r
-               }\r
-               \r
-               public function getBulkCipher():uint {\r
-                       return bulkCipher;\r
-               }\r
-               public function getCipherType():uint {\r
-                       return cipherType;\r
-               }\r
-               public function getMacAlgorithm():uint {\r
-                       return macAlgorithm;\r
-               }\r
-               \r
-               public function setCipher(cipher:uint):void {\r
-                       bulkCipher = CipherSuites.getBulkCipher(cipher);\r
-                       cipherType = BulkCiphers.getType(bulkCipher);\r
-                       keySize = BulkCiphers.getExpandedKeyBytes(bulkCipher);   // 8\r
-                       keyMaterialLength = BulkCiphers.getKeyBytes(bulkCipher); // 5\r
-                       IVSize = BulkCiphers.getIVSize(bulkCipher);\r
-                       \r
-                       keyExchange = CipherSuites.getKeyExchange(cipher);\r
-                       \r
-                       macAlgorithm = CipherSuites.getMac(cipher);\r
-                       hashSize = MACs.getHashSize(macAlgorithm);\r
-               }\r
-               public function setCompression(algo:uint):void {\r
-                       compression = algo;\r
-               }\r
-               public function setPreMasterSecret(secret:ByteArray):void {\r
-                       // compute master_secret\r
-                       var seed:ByteArray = new ByteArray;\r
-                       seed.writeBytes(clientRandom, 0, clientRandom.length);\r
-                       seed.writeBytes(serverRandom, 0, serverRandom.length);\r
-                       var prf:TLSPRF = new TLSPRF(secret, "master secret", seed);\r
-                       masterSecret = new ByteArray;\r
-                       prf.nextBytes(masterSecret, 48);\r
-                       if (tlsDebug)\r
-                               trace("Master Secret: " + Hex.fromArray( masterSecret, true ));\r
-               }\r
-               public function setClientRandom(secret:ByteArray):void {\r
-                       clientRandom = secret;\r
-               }\r
-               public function setServerRandom(secret:ByteArray):void { \r
-                       serverRandom = secret;\r
-               }\r
-               \r
-               public function get useRSA():Boolean {\r
-                       return KeyExchanges.useRSA(keyExchange);\r
-               }\r
-               \r
-               public function computeVerifyData(side:uint, handshakeMessages:ByteArray):ByteArray {\r
-                       var seed:ByteArray = new ByteArray;\r
-                       var md5:MD5 = new MD5;\r
-                       if (tlsDebug)\r
-                               trace("Handshake value: " + Hex.fromArray(handshakeMessages, true ));\r
-                       seed.writeBytes(md5.hash(handshakeMessages),0,md5.getHashSize());\r
-                       var sha:SHA1 = new SHA1;\r
-                       seed.writeBytes(sha.hash(handshakeMessages),0,sha.getHashSize());\r
-                       if (tlsDebug)\r
-                               trace("Seed in: " + Hex.fromArray(seed, true ));\r
-                       var prf:TLSPRF = new TLSPRF(masterSecret, (side==TLSEngine.CLIENT) ? "client finished" : "server finished", seed);\r
-                       var out:ByteArray = new ByteArray;\r
-                       prf.nextBytes(out, 12);\r
-                       if (tlsDebug)\r
-                               trace("Finished out: " + Hex.fromArray(out, true ));\r
-                       out.position = 0;\r
-                       return out;\r
-               }\r
-               \r
-               // client side certficate check - This is probably incorrect somehow\r
-               public function computeCertificateVerify( side:uint, handshakeMessages:ByteArray ):ByteArray {\r
-                       var seed:ByteArray = new ByteArray;\r
-                       var md5:MD5 = new MD5;\r
-                       seed.writeBytes(md5.hash(handshakeMessages),0,md5.getHashSize());\r
-                       var sha:SHA1 = new SHA1;\r
-                       seed.writeBytes(sha.hash(handshakeMessages),0,sha.getHashSize());\r
-                       \r
-                       // Now that I have my hashes of existing handshake messages (which I'm not sure about the length of yet) then \r
-                       // Sign that with my private key\r
-                       seed.position = 0;\r
-                       var out:ByteArray = new ByteArray();\r
-                       key.sign( seed, out, seed.bytesAvailable);\r
-                       out.position = 0;\r
-                       return out;     \r
-               }\r
-               \r
-               public function getConnectionStates():Object {\r
-                       if (masterSecret != null) {\r
-                               var seed:ByteArray = new ByteArray;\r
-                               seed.writeBytes(serverRandom, 0, serverRandom.length);\r
-                               seed.writeBytes(clientRandom, 0, clientRandom.length);\r
-                               var prf:TLSPRF = new TLSPRF(masterSecret, "key expansion", seed);\r
-                               \r
-                               var client_write_MAC:ByteArray = new ByteArray;\r
-                               prf.nextBytes(client_write_MAC, hashSize);\r
-                               var server_write_MAC:ByteArray = new ByteArray;\r
-                               prf.nextBytes(server_write_MAC, hashSize);\r
-                               var client_write_key:ByteArray = new ByteArray;\r
-                               prf.nextBytes(client_write_key, keyMaterialLength);\r
-                               var server_write_key:ByteArray = new ByteArray;\r
-                               prf.nextBytes(server_write_key, keyMaterialLength);\r
-                               var client_write_IV:ByteArray = new ByteArray;\r
-                               prf.nextBytes(client_write_IV, IVSize);\r
-                               var server_write_IV:ByteArray = new ByteArray;\r
-                               prf.nextBytes(server_write_IV, IVSize);\r
-\r
-                               var client_write:TLSConnectionState = new TLSConnectionState(\r
-                                               bulkCipher, cipherType, macAlgorithm,\r
-                                               client_write_MAC, client_write_key, client_write_IV);\r
-                               var server_write:TLSConnectionState = new TLSConnectionState(\r
-                                               bulkCipher, cipherType, macAlgorithm,\r
-                                               server_write_MAC, server_write_key, server_write_IV);\r
-                               \r
-                               if (entity == TLSEngine.CLIENT) {\r
-                                       return {read:server_write, write:client_write};\r
-                               } else {\r
-                                       return {read:client_write, write:server_write};\r
-                               }\r
-\r
-                       } else {\r
-                               return {read:new TLSConnectionState, write:new TLSConnectionState};\r
-                       }\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocket.as
deleted file mode 100644 (file)
index 10004a7..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-/**\r
- * TLSSocket\r
- * \r
- * This is the "end-user" TLS class.\r
- * It works just like a Socket, by encapsulating a Socket and\r
- * wrapping the TLS protocol around the data that passes over it.\r
- * This class can either create a socket connection, or reuse an\r
- * existing connected socket. The later is useful for STARTTLS flows.\r
- * \r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import flash.events.Event;\r
-       import flash.events.EventDispatcher;\r
-       import flash.events.IOErrorEvent;\r
-       import flash.events.ProgressEvent;\r
-       import flash.events.SecurityErrorEvent;\r
-       import flash.net.ObjectEncoding;\r
-       import flash.net.Socket;\r
-       import flash.utils.ByteArray;\r
-       import flash.utils.Endian;\r
-       import flash.utils.IDataInput;\r
-       import flash.utils.IDataOutput;\r
-       import flash.utils.clearTimeout;\r
-       import flash.utils.setTimeout;
-       import com.hurlant.crypto.cert.X509Certificate;
-       \r
-       \r
-       [Event(name="close", type="flash.events.Event")]\r
-       [Event(name="connect", type="flash.events.Event")]\r
-       [Event(name="ioError", type="flash.events.IOErrorEvent")]\r
-       [Event(name="securityError", type="flash.events.SecurityErrorEvent")]\r
-       [Event(name="socketData", type="flash.events.ProgressEvent")]\r
-       [Event(name="acceptPeerCertificatePrompt", type="flash.events.Event")]\r
-       \r
-       /**\r
-        * It feels like a socket, but it wraps the stream\r
-        * over TLS 1.0\r
-        * \r
-        * That's all.\r
-        * \r
-        */\r
-       public class TLSSocket extends Socket implements IDataInput, IDataOutput {\r
-               \r
-               private var _endian:String;\r
-               private var _objectEncoding:uint;\r
-               \r
-               private var _iStream:ByteArray;\r
-               private var _oStream:ByteArray;\r
-               private var _iStream_cursor:uint;\r
-               \r
-               private var _socket:Socket;\r
-               private var _config:TLSConfig;\r
-               private var _engine:TLSEngine;\r
-               public static const ACCEPT_PEER_CERT_PROMPT:String = "acceptPeerCertificatePrompt"\r
-               \r
-               public function TLSSocket(host:String = null, port:int = 0, config:TLSConfig = null) {\r
-                       _config = config;\r
-                       if (host!=null && port!=0) {\r
-                               connect(host, port);\r
-                       }\r
-               }\r
-               \r
-               override public function get bytesAvailable():uint {\r
-                       return _iStream.bytesAvailable;\r
-               }\r
-               override public function get connected():Boolean {\r
-                       return _socket.connected;\r
-               }\r
-               override public function get endian():String {\r
-                       return _endian;\r
-               }\r
-               override public function set endian(value:String):void {\r
-                       _endian = value;\r
-                       _iStream.endian = value;\r
-                       _oStream.endian = value;\r
-               }\r
-               override public function get objectEncoding():uint {\r
-                       return _objectEncoding;\r
-               }\r
-               override public function set objectEncoding(value:uint):void {\r
-                       _objectEncoding = value;\r
-                       _iStream.objectEncoding = value;\r
-                       _oStream.objectEncoding = value;\r
-               }\r
-               \r
-               \r
-               private function onTLSData(event:TLSEvent):void {\r
-                       if (_iStream.position == _iStream.length) {\r
-                               _iStream.position = 0;\r
-                               _iStream.length = 0;\r
-                               _iStream_cursor = 0;\r
-                       }\r
-                       var cursor:uint = _iStream.position;\r
-                       _iStream.position = _iStream_cursor;\r
-                       _iStream.writeBytes(event.data);\r
-                       _iStream_cursor = _iStream.position;\r
-                       _iStream.position = cursor;\r
-                       dispatchEvent(new ProgressEvent(ProgressEvent.SOCKET_DATA, false, false, event.data.length));\r
-               }\r
-               \r
-               private function onTLSReady(event:TLSEvent):void {\r
-                       _ready = true;\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               private function onTLSClose(event:Event):void {\r
-                       dispatchEvent(event);\r
-                       // trace("Received TLS close");\r
-                       close();\r
-               }\r
-               \r
-               private var _ready:Boolean;\r
-               private var _writeScheduler:uint;\r
-               private function scheduleWrite():void {\r
-                       if (_writeScheduler!=0) return;\r
-                       _writeScheduler = setTimeout(commitWrite, 0);\r
-               }\r
-               private function commitWrite():void {\r
-                       clearTimeout(_writeScheduler);\r
-                       _writeScheduler = 0;\r
-                       if (_ready) {\r
-                               _engine.sendApplicationData(_oStream);\r
-                               _oStream.length = 0;\r
-                       }\r
-               }\r
-               \r
-               \r
-               override public function close():void {\r
-                       _ready = false;\r
-                       _engine.close();\r
-                       if (_socket.connected) {\r
-                               _socket.flush();\r
-                               _socket.close();\r
-                       }\r
-               }\r
-               public function setTLSConfig( config:TLSConfig) : void {\r
-                       _config = config;\r
-               }               \r
-\r
-               override public function connect(host:String, port:int):void {\r
-                       init(new Socket, _config, host);\r
-                       _socket.connect(host, port);\r
-                       _engine.start();\r
-               }\r
-               \r
-               public function releaseSocket() : void {\r
-                       _socket.removeEventListener(Event.CONNECT, dispatchEvent);\r
-                       _socket.removeEventListener(IOErrorEvent.IO_ERROR, dispatchEvent);\r
-                       _socket.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, dispatchEvent);\r
-                       _socket.removeEventListener(Event.CLOSE, dispatchEvent);\r
-                       _socket.removeEventListener(ProgressEvent.SOCKET_DATA, _engine.dataAvailable);\r
-                       _socket = null; \r
-               }\r
-               \r
-               public function reinitialize(host:String, config:TLSConfig) : void {\r
-                       // Reinitialize the connection using new values\r
-                       // but re-use the existing socket\r
-                       // Doubt this is useful in any valid context other than my specific case (VMWare)\r
-                       var ba:ByteArray = new ByteArray;\r
-                       \r
-                       if (_socket.bytesAvailable > 0) {\r
-                               _socket.readBytes(ba, 0, _socket.bytesAvailable);       \r
-                       }\r
-                       // Do nothing with it.\r
-                       _iStream = new ByteArray;\r
-                       _oStream = new ByteArray;\r
-                       _iStream_cursor = 0;\r
-                       objectEncoding = ObjectEncoding.DEFAULT;\r
-                       endian = Endian.BIG_ENDIAN;\r
-                       /* \r
-                       _socket.addEventListener(Event.CONNECT, dispatchEvent);\r
-                       _socket.addEventListener(IOErrorEvent.IO_ERROR, dispatchEvent);\r
-                       _socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, dispatchEvent);\r
-                       _socket.addEventListener(Event.CLOSE, dispatchEvent);\r
-                       */\r
-                       \r
-                       if (config == null) {\r
-                               config = new TLSConfig(TLSEngine.CLIENT);\r
-                       }\r
-                       \r
-                       _engine = new TLSEngine(config, _socket, _socket, host);\r
-                       _engine.addEventListener(TLSEvent.DATA, onTLSData);\r
-                       _engine.addEventListener(TLSEvent.READY, onTLSReady);\r
-                       _engine.addEventListener(Event.CLOSE, onTLSClose);\r
-                       _engine.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*):void { _socket.flush(); });\r
-                       _socket.addEventListener(ProgressEvent.SOCKET_DATA, _engine.dataAvailable);\r
-                       _engine.addEventListener( TLSEvent.PROMPT_ACCEPT_CERT, onAcceptCert );\r
-\r
-                       _ready = false;\r
-                       _engine.start();\r
-               }\r
-               \r
-               public function startTLS(socket:Socket, host:String, config:TLSConfig = null):void {\r
-                       if (!socket.connected) {\r
-                               throw new Error("Cannot STARTTLS on a socket that isn't connected.");\r
-                       }\r
-                       init(socket, config, host);\r
-                       _engine.start();\r
-               }\r
-               \r
-               private function init(socket:Socket, config:TLSConfig, host:String):void {\r
-                       _iStream = new ByteArray;\r
-                       _oStream = new ByteArray;\r
-                       _iStream_cursor = 0;\r
-                       objectEncoding = ObjectEncoding.DEFAULT;\r
-                       endian = Endian.BIG_ENDIAN;\r
-                       _socket = socket;\r
-                       _socket.addEventListener(Event.CONNECT, dispatchEvent);\r
-                       _socket.addEventListener(IOErrorEvent.IO_ERROR, dispatchEvent);\r
-                       _socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, dispatchEvent);\r
-                       _socket.addEventListener(Event.CLOSE, dispatchEvent);\r
-                       \r
-                       if (config == null) {\r
-                               config = new TLSConfig(TLSEngine.CLIENT);\r
-                       }\r
-                       _engine = new TLSEngine(config, _socket, _socket, host);\r
-                       _engine.addEventListener(TLSEvent.DATA, onTLSData);\r
-                       _engine.addEventListener( TLSEvent.PROMPT_ACCEPT_CERT, onAcceptCert );\r
-                       _engine.addEventListener(TLSEvent.READY, onTLSReady);\r
-                       _engine.addEventListener(Event.CLOSE, onTLSClose);\r
-                       _engine.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*):void { if(connected) _socket.flush(); });\r
-                       _socket.addEventListener(ProgressEvent.SOCKET_DATA, _engine.dataAvailable);\r
-\r
-                       _ready = false;\r
-               }\r
-               \r
-               override public function flush():void {\r
-                       commitWrite();\r
-                       _socket.flush();\r
-               }\r
-               \r
-               override public function readBoolean():Boolean {\r
-                       return _iStream.readBoolean();\r
-               }\r
-               \r
-               override public function readByte():int {\r
-                       return _iStream.readByte();\r
-               }\r
-               \r
-               override public function readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void {\r
-                       return _iStream.readBytes(bytes, offset, length);\r
-               }\r
-               \r
-               override public function readDouble():Number {\r
-                       return _iStream.readDouble();\r
-               }\r
-               \r
-               override public function readFloat():Number {\r
-                       return _iStream.readFloat();\r
-               }\r
-               \r
-               override public function readInt():int {\r
-                       return _iStream.readInt();\r
-               }\r
-               \r
-               override public function readMultiByte(length:uint, charSet:String):String {\r
-                       return _iStream.readMultiByte(length, charSet);\r
-               }\r
-               \r
-               override public function readObject():* {\r
-                       return _iStream.readObject();\r
-               }\r
-               \r
-               override public function readShort():int {\r
-                       return _iStream.readShort();\r
-               }\r
-               \r
-               override public function readUnsignedByte():uint {\r
-                       return _iStream.readUnsignedByte();\r
-               }\r
-               \r
-               override public function readUnsignedInt():uint {\r
-                       return _iStream.readUnsignedInt();\r
-               }\r
-               \r
-               override public function readUnsignedShort():uint {\r
-                       return _iStream.readUnsignedShort();\r
-               }\r
-               \r
-               override public function readUTF():String {\r
-                       return _iStream.readUTF();\r
-               }\r
-               \r
-               override public function readUTFBytes(length:uint):String {\r
-                       return _iStream.readUTFBytes(length);\r
-               }\r
-               \r
-               override public function writeBoolean(value:Boolean):void {\r
-                       _oStream.writeBoolean(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeByte(value:int):void {\r
-                       _oStream.writeByte(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void {\r
-                       _oStream.writeBytes(bytes, offset, length);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeDouble(value:Number):void {\r
-                       _oStream.writeDouble(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeFloat(value:Number):void {\r
-                       _oStream.writeFloat(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeInt(value:int):void {\r
-                       _oStream.writeInt(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeMultiByte(value:String, charSet:String):void {\r
-                       _oStream.writeMultiByte(value, charSet);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeObject(object:*):void {\r
-                       _oStream.writeObject(object);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeShort(value:int):void {\r
-                       _oStream.writeShort(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeUnsignedInt(value:uint):void {\r
-                       _oStream.writeUnsignedInt(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeUTF(value:String):void {\r
-                       _oStream.writeUTF(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               override public function writeUTFBytes(value:String):void {\r
-                       _oStream.writeUTFBytes(value);\r
-                       scheduleWrite();\r
-               }\r
-               \r
-               public function getPeerCertificate() : X509Certificate {\r
-                       return _engine.peerCertificate;\r
-               }\r
-               \r
-               public function onAcceptCert( event:TLSEvent ) : void {\r
-                       dispatchEvent( new TLSSocketEvent( _engine.peerCertificate ) );\r
-               }\r
-               \r
-               // These are just a passthroughs to the engine. Encapsulation, et al\r
-               public function acceptPeerCertificate( event:Event ) : void {\r
-                       _engine.acceptPeerCertificate();\r
-               }\r
-       \r
-               public function rejectPeerCertificate( event:Event ) : void {\r
-                       _engine.rejectPeerCertificate();\r
-               }\r
-               \r
-       }\r
-}\r
-       \r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSSocketEvent.as
deleted file mode 100644 (file)
index c38f0dc..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/**\r
- * TLSEvent\r
- * \r
- * This is used by TLSEngine to let the application layer know\r
- * when we're ready for sending, or have received application data\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.crypto.tls {\r
-       import flash.events.Event;\r
-       import flash.utils.ByteArray;
-       import com.hurlant.crypto.cert.X509Certificate;\r
-       \r
-       public class TLSSocketEvent extends Event {\r
-               \r
-               static public const PROMPT_ACCEPT_CERT:String = "promptAcceptCert";\r
-               \r
-               public var cert:X509Certificate;\r
-               \r
-               public function TLSSocketEvent( cert:X509Certificate = null) { \r
-                       super(PROMPT_ACCEPT_CERT, false, false);\r
-                       this.cert = cert;\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/crypto/tls/TLSTest.as
deleted file mode 100644 (file)
index d7c70f3..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * TLSTest
- * 
- * A test class for TLS. Not a finished product.
- * Copyright (c) 2007 Henri Torgemane
- * 
- * See LICENSE.txt for full license information.
- */
-package com.hurlant.crypto.tls {
-       import com.hurlant.crypto.cert.X509Certificate;
-       import com.hurlant.crypto.cert.X509CertificateCollection;
-       import com.hurlant.util.Hex;
-       import com.hurlant.util.der.PEM;
-       
-       import flash.events.Event;
-       import flash.events.ProgressEvent;
-       import flash.net.Socket;
-       import flash.utils.ByteArray;
-       import flash.utils.getTimer;
-       
-       public class TLSTest {
-               
-               
-               public var myDebugData:String;
-       
-               //[Embed(source="/src/host.cert",mimeType="application/octet-stream")]
-               public var myCert:Class;
-               //[Embed(source="/src/host.key",mimeType="application/octet-stream")]
-               public var myKey:Class;
-               
-               public function TLSTest(host:String = null, port:int = 0, type:int = 0 ) {
-                       //loopback();
-                       if (host != null) {
-                               if (type == 0) { // SSL 3.0
-                                       connectLoginYahooCom();
-                                       // connectLocalSSL(host, port);
-                               } else {
-                                       connectLocalTLS(host, port);
-                               }
-                       } else {
-                               testSocket();
-                       }
-               }
-               
-               public function connectLoginYahooCom():void {
-                       trace("Connecting test socket");
-                       var s:Socket = new Socket("esx.bluebearllc.net", 903);
-                       
-                       var clientConfig:TLSConfig = new TLSConfig(TLSEngine.CLIENT, 
-                                                                                       null, 
-                                                                                       null, 
-                                                                                       null, 
-                                                                                       null, 
-                                                                                       null, 
-                                                                                       SSLSecurityParameters.PROTOCOL_VERSION);
-                       
-                       var client:TLSEngine = new TLSEngine(clientConfig, s, s);
-                       // hook some events.
-                       s.addEventListener(ProgressEvent.SOCKET_DATA, client.dataAvailable);
-                       client.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*):void { s.flush(); });
-                       client.start();
-                       
-               }
-               public function connectLocalTLS(host:String, port:int):void {
-                       var s:Socket = new Socket(host, port);
-                       
-                       var clientConfig:TLSConfig = new TLSConfig(TLSEngine.CLIENT);
-               
-                       var client:TLSEngine = new TLSEngine(clientConfig, s, s);
-                       // hook some events.
-                       s.addEventListener(ProgressEvent.SOCKET_DATA, client.dataAvailable);
-                       client.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*):void { s.flush(); });
-                       
-                       client.start();
-                       
-               }
-               public function connectLocalSSL(host:String, port:int):void {
-                       var s:Socket = new Socket(host, port);
-                       
-                       var clientConfig:TLSConfig = new TLSConfig(TLSEngine.CLIENT,
-                                                                                       null, 
-                                                                                       null, 
-                                                                                       null, 
-                                                                                       null, 
-                                                                                       null, 
-                                                                                       SSLSecurityParameters.PROTOCOL_VERSION); 
-                       
-                       var client:TLSEngine = new TLSEngine(clientConfig, s, s);
-                       // hook some events.
-                       s.addEventListener(ProgressEvent.SOCKET_DATA, client.dataAvailable);
-                       client.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*):void { s.flush(); });
-                       
-                       client.start();
-               }
-               
-               public function loopback():void {
-                       
-                       var server_write:ByteArray = new ByteArray;
-                       var client_write:ByteArray = new ByteArray;
-                       var server_write_cursor:uint = 0;
-                       var client_write_cursor:uint = 0;
-                       
-                       var clientConfig:TLSConfig = new TLSConfig(TLSEngine.CLIENT, null, null, null, null, null, SSLSecurityParameters.PROTOCOL_VERSION);
-                       var serverConfig:TLSConfig = new TLSConfig(TLSEngine.SERVER, null, null, null, null, null, SSLSecurityParameters.PROTOCOL_VERSION);
-
-
-                       var cert:ByteArray = new myCert;
-                       var key:ByteArray = new myKey;
-                       serverConfig.setPEMCertificate(cert.readUTFBytes(cert.length), key.readUTFBytes(key.length));
-                       // tmp, for debugging. currently useless
-                       cert.position = 0;
-                       key.position = 0;
-                       clientConfig.setPEMCertificate(cert.readUTFBytes(cert.length), key.readUTFBytes(key.length));
-                       // put the server cert in the client's trusted store, to keep things happy.
-                       clientConfig.CAStore = new X509CertificateCollection;
-                       cert.position = 0;
-                       var x509:X509Certificate = new X509Certificate(PEM.readCertIntoArray(cert.readUTFBytes(cert.length)));
-                       clientConfig.CAStore.addCertificate(x509);
-
-
-                       var server:TLSEngine = new TLSEngine(serverConfig, client_write, server_write);
-                       var client:TLSEngine = new TLSEngine(clientConfig, server_write, client_write);
-                       
-                       server.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*=null):void {
-                               trace("server wrote something!");
-                               trace(Hex.fromArray(server_write));
-                               var l:uint = server_write.position;
-                               server_write.position = server_write_cursor;
-                               client.dataAvailable(e);
-                               server_write.position = l;
-                               server_write_cursor = l;
-                       });
-                       client.addEventListener(ProgressEvent.SOCKET_DATA, function(e:*=null):void {
-                               trace("client wrote something!");
-                               trace(Hex.fromArray(client_write));
-                               var l:uint = client_write.position;
-                               client_write.position = client_write_cursor;
-                               server.dataAvailable(e);
-                               client_write.position = l;
-                               client_write_cursor = l;
-                       });
-                       
-                       server.start();
-                       client.start();
-               }
-               
-               public function testSocket():void {
-                       var hosts:Array = [
-                               "bugs.adobe.com",                       // apache
-                               "login.yahoo.com",              // apache, bigger response
-                               "login.live.com",                       // IIS-6, chain of 3 certs
-                               "banking.wellsfargo.com",       // custom, sends its CA cert along for the ride.
-                               "www.bankofamerica.com"         // sun-one, chain of 3 certs
-                       ];
-                       var i:int =0;
-                       (function next():void {
-                               testHost(hosts[i++], next);
-                       })();
-               }
-               
-               private function testHost(host:String, next:Function):void {
-                       if (host==null) return;
-                       var t1:int = getTimer();
-                       
-                       var host:String = host;
-                       var t:TLSSocket = new TLSSocket;
-                       t.connect(host, 4433); 
-                       t.writeUTFBytes("GET / HTTP/1.0\nHost: "+host+"\n\n");
-                       t.addEventListener(Event.CLOSE, function(e:*):void {
-                               var s:String = t.readUTFBytes(t.bytesAvailable);
-                               trace("Response from "+host+": "+s.length+" characters");
-                               var bytes:ByteArray = new ByteArray();
-                               t.readBytes(bytes, 0, t.bytesAvailable);
-                               trace(Hex.fromArray(bytes));
-                               trace("Time used = "+(getTimer()-t1)+"ms");
-                               next();
-                       });
-               }
-       }
-}
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/BarrettReduction.as
deleted file mode 100755 (executable)
index 48d1563..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.hurlant.math\r
-{\r
-       use namespace bi_internal;\r
-\r
-       internal class BarrettReduction implements IReduction\r
-       {\r
-               private var m:BigInteger;\r
-               private var r2:BigInteger;\r
-               private var q3:BigInteger;\r
-               private var mu:BigInteger;\r
-               \r
-               public function BarrettReduction(m:BigInteger) {\r
-                       // setup Barrett\r
-                       r2 = new BigInteger;\r
-                       q3 = new BigInteger;\r
-                       BigInteger.ONE.dlShiftTo(2*m.t, r2);\r
-                       mu = r2.divide(m);\r
-                       this.m = m;\r
-               }\r
-               \r
-               public function revert(x:BigInteger):BigInteger\r
-               {\r
-                       return x;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param x\r
-                * @param y\r
-                * @param r = x*y mod m; x != r\r
-                * \r
-                */\r
-               public function mulTo(x:BigInteger, y:BigInteger, r:BigInteger):void\r
-               {\r
-                       x.multiplyTo(y, r);\r
-                       reduce(r);\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param x\r
-                * @param r = x^2 mod m; x != r\r
-                * \r
-                */\r
-               public function sqrTo(x:BigInteger, r:BigInteger):void\r
-               {\r
-                       x.squareTo(r);\r
-                       reduce(r);\r
-               }\r
-               \r
-               public function convert(x:BigInteger):BigInteger\r
-               {\r
-                       if (x.s<0 || x.t>2*m.t) {\r
-                               return x.mod(m);\r
-                       } else if (x.compareTo(m)<0) {\r
-                               return x;\r
-                       } else {\r
-                               var r:BigInteger = new BigInteger;\r
-                               x.copyTo(r);\r
-                               reduce(r);\r
-                               return r;\r
-                       }\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param x = x mod m (HAC 14.42)\r
-                * \r
-                */\r
-               public function reduce(lx:BigInteger):void\r
-               {\r
-                       var x:BigInteger = lx as BigInteger;\r
-                       x.drShiftTo(m.t-1,r2);\r
-                       if (x.t>m.t+1) {\r
-                               x.t = m.t+1;\r
-                               x.clamp();\r
-                       }\r
-                       mu.multiplyUpperTo(r2, m.t+1, q3);\r
-                       m.multiplyLowerTo(q3, m.t+1, r2);\r
-                       while (x.compareTo(r2)<0) {\r
-                               x.dAddOffset(1, m.t+1);\r
-                       }\r
-                       x.subTo(r2,x);\r
-                       while (x.compareTo(m)>=0) {\r
-                               x.subTo(m,x);\r
-                       }\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/BigInteger.as
deleted file mode 100644 (file)
index 119db17..0000000
+++ /dev/null
@@ -1,1543 +0,0 @@
-/**\r
- * BigInteger\r
- * \r
- * An ActionScript 3 implementation of BigInteger (light version)\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * Derived from:\r
- *             The jsbn library, Copyright (c) 2003-2005 Tom Wu\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.math\r
-{\r
-\r
-       import com.hurlant.crypto.prng.Random;\r
-       import com.hurlant.util.Hex;\r
-       import com.hurlant.util.Memory;\r
-       \r
-       import flash.utils.ByteArray;\r
-       use namespace bi_internal;\r
-\r
-       public class BigInteger\r
-       {\r
-               public static const DB:int = 30; // number of significant bits per chunk\r
-               public static const DV:int = (1<<DB);\r
-               public static const DM:int = (DV-1); // Max value in a chunk\r
-               \r
-               public static const BI_FP:int = 52;\r
-               public static const FV:Number = Math.pow(2, BI_FP);\r
-               public static const F1:int = BI_FP - DB;\r
-               public static const F2:int = 2*DB - BI_FP;\r
-               \r
-               public static const ZERO:BigInteger = nbv(0);\r
-               public static const ONE:BigInteger  = nbv(1);\r
-               \r
-               /*bi_internal */public var t:int; // number of chunks.\r
-               bi_internal var s:int; // sign\r
-               bi_internal var a:Array; // chunks\r
-               \r
-               /**\r
-                * \r
-                * @param value\r
-                * @param radix  WARNING: If value is ByteArray, this holds the number of bytes to use.\r
-                * @param unsigned\r
-                * \r
-                */\r
-               public function BigInteger(value:* = null, radix:int = 0, unsigned:Boolean = false) {\r
-                       a = new Array;\r
-                       if (value is String) {\r
-                               if (radix&&radix!=16) throw new Error("BigInteger construction with radix!=16 is not supported.");\r
-                               value = Hex.toArray(value);\r
-                               radix=0;\r
-                       }\r
-                       if (value is ByteArray) {\r
-                               var array:ByteArray = value as ByteArray;\r
-                               var length:int = radix || (array.length - array.position);\r
-                               fromArray(array, length, unsigned);\r
-                       }\r
-               }\r
-               public function dispose():void {\r
-                       var r:Random = new Random;\r
-                       for (var i:uint=0;i<a.length;i++) {\r
-                               a[i] = r.nextByte();\r
-                               delete a[i];\r
-                       }\r
-                       a=null;\r
-                       t=0;\r
-                       s=0;\r
-                       Memory.gc();\r
-               }\r
-               \r
-               public function toString(radix:Number=16):String {\r
-                       if (s<0) return "-"+negate().toString(radix);\r
-                       var k:int;\r
-                       switch (radix) {\r
-                               case 2:   k=1; break;\r
-                               case 4:   k=2; break;\r
-                               case 8:   k=3; break;\r
-                               case 16:  k=4; break;\r
-                               case 32:  k=5; break;\r
-                               default:\r
-//                                     return toRadix(radix);\r
-                       }\r
-                       var km:int = (1<<k)-1;\r
-                       var d:int = 0;\r
-                       var m:Boolean = false;\r
-                       var r:String = "";\r
-                       var i:int = t;\r
-                       var p:int = DB-(i*DB)%k;\r
-                       if (i-->0) {\r
-                               if (p<DB && (d=a[i]>>p)>0) {\r
-                                       m = true;\r
-                                       r = d.toString(36);\r
-                               }\r
-                               while (i >= 0) {\r
-                                       if (p<k) {\r
-                                               d = (a[i]&((1<<p)-1))<<(k-p);\r
-                                               d|= a[--i]>>(p+=DB-k);\r
-                                       } else {\r
-                                               d = (a[i]>>(p-=k))&km;\r
-                                               if (p<=0) {\r
-                                                       p += DB;\r
-                                                       --i;\r
-                                               }\r
-                                       }\r
-                                       if (d>0) {\r
-                                               m = true;\r
-                                       }\r
-                                       if (m) {\r
-                                               r += d.toString(36);\r
-                                       }\r
-                               }\r
-                       }\r
-                       return m?r:"0";\r
-               }\r
-               public function toArray(array:ByteArray):uint {\r
-                       const k:int = 8;\r
-                       const km:int = (1<<8)-1;\r
-                       var d:int = 0;\r
-                       var i:int = t;\r
-                       var p:int = DB-(i*DB)%k;\r
-                       var m:Boolean = false;\r
-                       var c:int = 0;\r
-                       if (i-->0) {\r
-                               if (p<DB && (d=a[i]>>p)>0) {\r
-                                       m = true;\r
-                                       array.writeByte(d);\r
-                                       c++;\r
-                               }\r
-                               while (i >= 0) {\r
-                                       if (p<k) {\r
-                                               d = (a[i]&((1<<p)-1))<<(k-p);\r
-                                               d|= a[--i]>>(p+=DB-k);\r
-                                       } else {\r
-                                               d = (a[i]>>(p-=k))&km;\r
-                                               if (p<=0) {\r
-                                                       p += DB;\r
-                                                       --i;\r
-                                               }\r
-                                       }\r
-                                       if (d>0) {\r
-                                               m = true;\r
-                                       }\r
-                                       if (m) {\r
-                                               array.writeByte(d);\r
-                                               c++;\r
-                                       }\r
-                               }\r
-                       }\r
-                       return c;\r
-               }\r
-               /**\r
-                * best-effort attempt to fit into a Number.\r
-                * precision can be lost if it just can't fit.\r
-                */\r
-               public function valueOf():Number {\r
-                       if (s==-1) {\r
-                               return -negate().valueOf();\r
-                       }\r
-                       var coef:Number = 1;\r
-                       var value:Number = 0;\r
-                       for (var i:uint=0;i<t;i++) {\r
-                               value += a[i]*coef;\r
-                               coef *= DV;\r
-                       }\r
-                       return value;\r
-               }\r
-               /**\r
-                * -this\r
-                */\r
-               public function negate():BigInteger {\r
-                       var r:BigInteger = nbi();\r
-                       ZERO.subTo(this, r);\r
-                       return r;\r
-               }\r
-               /**\r
-                * |this|\r
-                */\r
-               public function abs():BigInteger {\r
-                       return (s<0)?negate():this;\r
-               }\r
-               /**\r
-                * return + if this > v, - if this < v, 0 if equal\r
-                */\r
-               public function compareTo(v:BigInteger):int {\r
-                       var r:int = s - v.s;\r
-                       if (r!=0) {\r
-                               return r;\r
-                       }\r
-                       var i:int = t;\r
-                       r = i-v.t;\r
-                       if (r!=0) {\r
-                               return r;\r
-                       }\r
-                       while (--i >=0) {\r
-                               r=a[i]-v.a[i];\r
-                               if (r != 0) return r;\r
-                       }\r
-                       return 0;\r
-               }\r
-               /**\r
-                * returns bit length of the integer x\r
-                */\r
-               bi_internal function nbits(x:int):int {\r
-                       var r:int = 1;\r
-                       var t:int;\r
-                       if ((t=x>>>16) != 0) { x = t; r += 16; }\r
-                       if ((t=x>>8) != 0) { x = t; r += 8; }\r
-                       if ((t=x>>4) != 0) { x = t; r += 4; }\r
-                       if ((t=x>>2) != 0) { x = t; r += 2; }\r
-                       if ((t=x>>1) != 0) { x = t; r += 1; }\r
-                       return r;\r
-               }\r
-               /**\r
-                * returns the number of bits in this\r
-                */\r
-               public function bitLength():int {\r
-                       if (t<=0) return 0;\r
-                       return DB*(t-1)+nbits(a[t-1]^(s&DM));\r
-               }\r
-               /**\r
-                * \r
-                * @param v\r
-                * @return this % v\r
-                * \r
-                */\r
-               public function mod(v:BigInteger):BigInteger {\r
-                       var r:BigInteger = nbi();\r
-                       abs().divRemTo(v,null,r);\r
-                       if (s<0 && r.compareTo(ZERO)>0) {\r
-                               v.subTo(r,r);\r
-                       }\r
-                       return r;\r
-               }\r
-               /**\r
-                * this^e % m, 0 <= e < 2^32\r
-                */\r
-               public function modPowInt(e:int, m:BigInteger):BigInteger {\r
-                       var z:IReduction;\r
-                       if (e<256 || m.isEven()) {\r
-                               z = new ClassicReduction(m);\r
-                       } else {\r
-                               z = new MontgomeryReduction(m);\r
-                       }\r
-                       return exp(e, z);\r
-               }\r
-\r
-               /**\r
-                * copy this to r\r
-                */\r
-               bi_internal function copyTo(r:BigInteger):void {\r
-                       for (var i:int = t-1; i>=0; --i) {\r
-                               r.a[i] = a[i];\r
-                       }\r
-                       r.t = t;\r
-                       r.s = s;\r
-               }\r
-               /**\r
-                * set from integer value "value", -DV <= value < DV\r
-                */\r
-               bi_internal function fromInt(value:int):void {\r
-                       t = 1;\r
-                       s = (value<0)?-1:0;\r
-                       if (value>0) {\r
-                               a[0] = value;\r
-                       } else if (value<-1) {\r
-                               a[0] = value+DV;\r
-                       } else {\r
-                               t = 0;\r
-                       }\r
-               }\r
-               /**\r
-                * set from ByteArray and length,\r
-                * starting a current position\r
-                * If length goes beyond the array, pad with zeroes.\r
-                */\r
-               bi_internal function fromArray(value:ByteArray, length:int, unsigned:Boolean = false):void {\r
-                       var p:int = value.position;\r
-                       var i:int = p+length;\r
-                       var sh:int = 0;\r
-                       const k:int = 8;\r
-                       t = 0;\r
-                       s = 0;\r
-                       while (--i >= p) {\r
-                               var x:int = i<value.length?value[i]:0;\r
-                               if (sh == 0) {\r
-                                       a[t++] = x;\r
-                               } else if (sh+k > DB) {\r
-                                       a[t-1] |= (x&((1<<(DB-sh))-1))<<sh;\r
-                                       a[t++] = x>>(DB-sh);\r
-                               } else {\r
-                                       a[t-1] |= x<<sh;\r
-                               }\r
-                               sh += k;\r
-                               if (sh >= DB) sh -= DB;\r
-                       }\r
-                       if (!unsigned && (value[0]&0x80)==0x80) {\r
-                               s = -1;\r
-                               if (sh > 0) {\r
-                                       a[t-1] |= ((1<<(DB-sh))-1)<<sh;\r
-                               }\r
-                       }\r
-                       clamp();\r
-                       value.position = Math.min(p+length,value.length);\r
-               }\r
-               /**\r
-                * clamp off excess high words\r
-                */\r
-               bi_internal function clamp():void {\r
-                       var c:int = s&DM;\r
-                       while (t>0 && a[t-1]==c) {\r
-                               --t;\r
-                       }\r
-               }\r
-               /**\r
-                * r = this << n*DB\r
-                */\r
-               bi_internal function dlShiftTo(n:int, r:BigInteger):void {\r
-                       var i:int;\r
-                       for (i=t-1; i>=0; --i) {\r
-                               r.a[i+n] = a[i];\r
-                       }\r
-                       for (i=n-1; i>=0; --i) {\r
-                               r.a[i] = 0;\r
-                       }\r
-                       r.t = t+n;\r
-                       r.s = s;\r
-               }\r
-               /**\r
-                * r = this >> n*DB\r
-                */\r
-               bi_internal function drShiftTo(n:int, r:BigInteger):void {\r
-                       var i:int;\r
-                       for (i=n; i<t; ++i) {\r
-                               r.a[i-n] = a[i];\r
-                       }\r
-                       r.t = Math.max(t-n,0);\r
-                       r.s = s;\r
-               }\r
-               /**\r
-                * r = this << n\r
-                */\r
-               bi_internal function lShiftTo(n:int, r:BigInteger):void {\r
-                       var bs:int = n%DB;\r
-                       var cbs:int = DB-bs;\r
-                       var bm:int = (1<<cbs)-1;\r
-                       var ds:int = n/DB;\r
-                       var c:int = (s<<bs)&DM;\r
-                       var i:int;\r
-                       for (i=t-1; i>=0; --i) {\r
-                               r.a[i+ds+1] = (a[i]>>cbs)|c;\r
-                               c = (a[i]&bm)<<bs;\r
-                       }\r
-                       for (i=ds-1; i>=0; --i) {\r
-                               r.a[i] = 0;\r
-                       }\r
-                       r.a[ds] = c;\r
-                       r.t = t+ds+1;\r
-                       r.s = s;\r
-                       r.clamp();\r
-               }\r
-               /**\r
-                * r = this >> n\r
-                */\r
-               bi_internal function rShiftTo(n:int, r:BigInteger):void {\r
-                       r.s = s;\r
-                       var ds:int = n/DB;\r
-                       if (ds >= t) {\r
-                               r.t = 0;\r
-                               return;\r
-                       }\r
-                       var bs:int = n%DB;\r
-                       var cbs:int = DB-bs;\r
-                       var bm:int = (1<<bs)-1;\r
-                       r.a[0] = a[ds]>>bs;\r
-                       var i:int;\r
-                       for (i=ds+1; i<t; ++i) {\r
-                               r.a[i-ds-1] |= (a[i]&bm)<<cbs;\r
-                               r.a[i-ds] = a[i]>>bs;\r
-                       }\r
-                       if (bs>0) {\r
-                               r.a[t-ds-1] |= (s&bm)<<cbs;\r
-                       }\r
-                       r.t = t-ds;\r
-                       r.clamp();\r
-               }\r
-               /**\r
-                * r = this - v\r
-                */\r
-               bi_internal function subTo(v:BigInteger, r:BigInteger):void {\r
-                       var i:int = 0;\r
-                       var c:int = 0;\r
-                       var m:int = Math.min(v.t, t);\r
-                       while (i<m) {\r
-                               c += a[i] - v.a[i];\r
-                               r.a[i++] = c & DM;\r
-                               c >>= DB;\r
-                       }\r
-                       if (v.t < t) {\r
-                               c -= v.s;\r
-                               while (i< t) {\r
-                                       c+= a[i];\r
-                                       r.a[i++] = c&DM;\r
-                                       c >>= DB;\r
-                               }\r
-                               c += s;\r
-                       } else {\r
-                               c += s;\r
-                               while (i < v.t) {\r
-                                       c -= v.a[i];\r
-                                       r.a[i++] = c&DM;\r
-                                       c >>= DB;\r
-                               }\r
-                               c -= v.s;\r
-                       }\r
-                       r.s = (c<0)?-1:0;\r
-                       if (c<-1) {\r
-                               r.a[i++] = DV+c;\r
-                       } else if (c>0) {\r
-                               r.a[i++] = c;\r
-                       }\r
-                       r.t = i;\r
-                       r.clamp();\r
-               }\r
-               /**\r
-                * am: Compute w_j += (x*this_i), propagates carries,\r
-                * c is initial carry, returns final carry.\r
-                * c < 3*dvalue, x < 2*dvalue, this_i < dvalue\r
-                */\r
-               bi_internal function am(i:int,x:int,w:BigInteger,j:int,c:int,n:int):int {\r
-                       var xl:int = x&0x7fff;\r
-                       var xh:int = x>>15;\r
-                       while(--n >= 0) {\r
-                               var l:int = a[i]&0x7fff;\r
-                               var h:int = a[i++]>>15;\r
-                               var m:int = xh*l + h*xl;\r
-                               l = xl*l + ((m&0x7fff)<<15)+w.a[j]+(c&0x3fffffff);\r
-                               c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\r
-                               w.a[j++] = l&0x3fffffff;\r
-                       }\r
-                       return c;\r
-               }\r
-               /**\r
-                * r = this * v, r != this,a (HAC 14.12)\r
-                * "this" should be the larger one if appropriate\r
-                */\r
-               bi_internal function multiplyTo(v:BigInteger, r:BigInteger):void {\r
-                       var x:BigInteger = abs();\r
-                       var y:BigInteger = v.abs();\r
-                       var i:int = x.t;\r
-                       r.t = i+y.t;\r
-                       while (--i >= 0) {\r
-                               r.a[i] = 0;\r
-                       }\r
-                       for (i=0; i<y.t; ++i) {\r
-                               r.a[i+x.t] = x.am(0, y.a[i], r, i, 0, x.t);\r
-                       }\r
-                       r.s = 0;\r
-                       r.clamp();\r
-                       if (s!=v.s) {\r
-                               ZERO.subTo(r, r);\r
-                       }\r
-               }\r
-               /**\r
-                * r = this^2, r != this (HAC 14.16)\r
-                */\r
-               bi_internal function squareTo(r:BigInteger):void {\r
-                       var x:BigInteger = abs();\r
-                       var i:int = r.t = 2*x.t;\r
-                       while (--i>=0) r.a[i] = 0;\r
-                       for (i=0; i<x.t-1; ++i) {\r
-                               var c:int = x.am(i, x.a[i], r, 2*i, 0, 1);\r
-                               if ((r.a[i+x.t] += x.am(i+1, 2*x.a[i], r, 2*i+1, c, x.t-i-1)) >= DV) {\r
-                                       r.a[i+x.t] -= DV;\r
-                                       r.a[i+x.t+1] = 1;\r
-                               }\r
-                       }\r
-                       if (r.t>0) {\r
-                               r.a[r.t-1] += x.am(i, x.a[i], r, 2*i, 0, 1);\r
-                       }\r
-                       r.s = 0;\r
-                       r.clamp();\r
-               }\r
-               /**\r
-                * divide this by m, quotient and remainder to q, r (HAC 14.20)\r
-                * r != q, this != m. q or r may be null.\r
-                */\r
-               bi_internal function divRemTo(m:BigInteger, q:BigInteger = null, r:BigInteger = null):void {\r
-                       var pm:BigInteger = m.abs();\r
-                       if (pm.t <= 0) return;\r
-                       var pt:BigInteger = abs();\r
-                       if (pt.t < pm.t) {\r
-                               if (q!=null) q.fromInt(0);\r
-                               if (r!=null) copyTo(r);\r
-                               return;\r
-                       }\r
-                       if (r==null) r = nbi();\r
-                       var y:BigInteger = nbi();\r
-                       var ts:int = s;\r
-                       var ms:int = m.s;\r
-                       var nsh:int = DB-nbits(pm.a[pm.t-1]); // normalize modulus\r
-                       if (nsh>0) {\r
-                               pm.lShiftTo(nsh, y);\r
-                               pt.lShiftTo(nsh, r);\r
-                       } else {\r
-                               pm.copyTo(y);\r
-                               pt.copyTo(r);\r
-                       }\r
-                       var ys:int = y.t;\r
-                       var y0:int = y.a[ys-1];\r
-                       if (y0==0) return;\r
-                       var yt:Number = y0*(1<<F1)+((ys>1)?y.a[ys-2]>>F2:0);\r
-                       var d1:Number = FV/yt;\r
-                       var d2:Number = (1<<F1)/yt;\r
-                       var e:Number = 1<<F2;\r
-                       var i:int = r.t;\r
-                       var j:int = i-ys;\r
-                       var t:BigInteger = (q==null)?nbi():q;\r
-                       y.dlShiftTo(j,t);\r
-                       if (r.compareTo(t)>=0) {\r
-                               r.a[r.t++] = 1;\r
-                               r.subTo(t,r);\r
-                       }\r
-                       ONE.dlShiftTo(ys,t);\r
-                       t.subTo(y,y); // "negative" y so we can replace sub with am later.\r
-                       while(y.t<ys) y.(y.t++, 0);\r
-                       while(--j >= 0) {\r
-                               // Estimate quotient digit\r
-                               var qd:int = (r.a[--i]==y0)?DM:Number(r.a[i])*d1+(Number(r.a[i-1])+e)*d2;\r
-                               if ((r.a[i]+= y.am(0, qd, r, j, 0, ys))<qd) { // Try it out\r
-                                       y.dlShiftTo(j, t);\r
-                                       r.subTo(t,r);\r
-                                       while (r.a[i]<--qd) {\r
-                                               r.subTo(t,r);\r
-                                       }\r
-                               }\r
-                       }\r
-                       if (q!=null) {\r
-                               r.drShiftTo(ys,q);\r
-                               if (ts!=ms) {\r
-                                       ZERO.subTo(q,q);\r
-                               }\r
-                       }\r
-                       r.t = ys;\r
-                       r.clamp();\r
-                       if (nsh>0) {\r
-                               r.rShiftTo(nsh, r); // Denormalize remainder\r
-                       }\r
-                       if (ts<0) {\r
-                               ZERO.subTo(r,r);\r
-                       }\r
-               }\r
-               /**\r
-                * return "-1/this % 2^DB"; useful for Mont. reduction\r
-                * justification:\r
-                *         xy == 1 (mod n)\r
-                *         xy =  1+km\r
-                *       xy(2-xy) = (1+km)(1-km)\r
-                * x[y(2-xy)] =  1-k^2.m^2\r
-                * x[y(2-xy)] == 1 (mod m^2)\r
-                * if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\r
-                * should reduce x and y(2-xy) by m^2 at each step to keep size bounded\r
-                * [XXX unit test the living shit out of this.]\r
-                */\r
-               bi_internal function invDigit():int {\r
-                       if (t<1) return 0;\r
-                       var x:int = a[0];\r
-                       if ((x&1)==0) return 0;\r
-                       var y:int = x&3;                                                        // y == 1/x mod 2^2\r
-                       y = (y*(2-(x&0xf )*y))             &0xf;        // y == 1/x mod 2^4\r
-                       y = (y*(2-(x&0xff)*y))             &0xff;       // y == 1/x mod 2^8\r
-                       y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;     // y == 1/x mod 2^16\r
-                       // last step - calculate inverse mod DV directly;\r
-                       // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\r
-                       // XXX 48 bit ints? Whaaaa? is there an implicit float conversion in here?\r
-                       y = (y*(2-x*y%DV))%DV;  // y == 1/x mod 2^dbits\r
-                       // we really want the negative inverse, and -DV < y < DV\r
-                       return (y>0)?DV-y:-y;\r
-               }\r
-               /**\r
-                * true iff this is even\r
-                */\r
-               bi_internal function isEven():Boolean {\r
-                       return ((t>0)?(a[0]&1):s) == 0;\r
-               }\r
-               /**\r
-                * this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)\r
-                */\r
-               bi_internal function exp(e:int, z:IReduction):BigInteger {\r
-                       if (e > 0xffffffff || e < 1) return ONE;\r
-                       var r:BigInteger = nbi();\r
-                       var r2:BigInteger = nbi();\r
-                       var g:BigInteger = z.convert(this);\r
-                       var i:int = nbits(e)-1;\r
-                       g.copyTo(r);\r
-                       while(--i>=0) {\r
-                               z.sqrTo(r, r2);\r
-                               if ((e&(1<<i))>0) {\r
-                                       z.mulTo(r2,g,r);\r
-                               } else {\r
-                                       var t:BigInteger = r;\r
-                                       r = r2;\r
-                                       r2 = t;\r
-                               }\r
-                               \r
-                       }\r
-                       return z.revert(r);\r
-               }\r
-               bi_internal function intAt(str:String, index:int):int {\r
-                       return parseInt(str.charAt(index), 36);\r
-               }\r
-\r
-\r
-               protected function nbi():* {\r
-                       return new BigInteger;\r
-               }\r
-               /**\r
-                * return bigint initialized to value\r
-                */\r
-               public static function nbv(value:int):BigInteger {\r
-                       var bn:BigInteger = new BigInteger;\r
-                       bn.fromInt(value);\r
-                       return bn;\r
-               }\r
-\r
-\r
-               // Functions above are sufficient for RSA encryption.\r
-               // The stuff below is useful for decryption and key generation\r
-\r
-               public static const lowprimes:Array = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];\r
-               public static const lplim:int = (1<<26)/lowprimes[lowprimes.length-1];\r
-\r
-\r
-               public function clone():BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       this.copyTo(r);\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @return value as integer\r
-                * \r
-                */\r
-               public function intValue():int {\r
-                       if (s<0) {\r
-                               if (t==1) {\r
-                                       return a[0]-DV;\r
-                               } else if (t==0) {\r
-                                       return -1;\r
-                               }\r
-                       } else if (t==1) {\r
-                               return a[0];\r
-                       } else if (t==0) {\r
-                               return 0;\r
-                       }\r
-                       // assumes 16 < DB < 32\r
-                       return  ((a[1]&((1<<(32-DB))-1))<<DB)|a[0];\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @return value as byte\r
-                * \r
-                */\r
-               public function byteValue():int {\r
-                       return (t==0)?s:(a[0]<<24)>>24;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @return value as short (assumes DB>=16)\r
-                * \r
-                */\r
-               public function shortValue():int {\r
-                       return (t==0)?s:(a[0]<<16)>>16;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param r\r
-                * @return x s.t. r^x < DV\r
-                * \r
-                */\r
-               protected function chunkSize(r:Number):int {\r
-                       return Math.floor(Math.LN2*DB/Math.log(r));\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @return 0 if this ==0, 1 if this >0\r
-                * \r
-                */\r
-               public function sigNum():int {\r
-                       if (s<0) {\r
-                               return -1;\r
-                       } else if (t<=0 || (t==1 && a[0]<=0)) {\r
-                               return 0;\r
-                       } else{\r
-                               return 1;\r
-                       }\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param b: radix to use\r
-                * @return a string representing the integer converted to the radix.\r
-                * \r
-                */\r
-               protected function toRadix(b:uint=10):String {\r
-                       if (sigNum()==0 || b<2 || b>32) return "0";\r
-                       var cs:int = chunkSize(b);\r
-                       var a:Number = Math.pow(b, cs);\r
-                       var d:BigInteger = nbv(a);\r
-                       var y:BigInteger = nbi();\r
-                       var z:BigInteger = nbi();\r
-                       var r:String = "";\r
-                       divRemTo(d, y, z);\r
-                       while (y.sigNum()>0) {\r
-                               r = (a+z.intValue()).toString(b).substr(1) + r;\r
-                               y.divRemTo(d,y,z);\r
-                       }\r
-                       return z.intValue().toString(b) + r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param s a string to convert from using radix.\r
-                * @param b a radix\r
-                * \r
-                */\r
-               protected function fromRadix(s:String, b:int = 10):void {\r
-                       fromInt(0);\r
-                       var cs:int = chunkSize(b);\r
-                       var d:Number = Math.pow(b, cs);\r
-                       var mi:Boolean = false;\r
-                       var j:int = 0;\r
-                       var w:int = 0;\r
-                       for (var i:int=0;i<s.length;++i) {\r
-                               var x:int = intAt(s, i);\r
-                               if (x<0) {\r
-                                       if (s.charAt(i) == "-" && sigNum() == 0) {\r
-                                               mi = true;\r
-                                       }\r
-                                       continue;\r
-                               }\r
-                               w = b*w+x;\r
-                               if (++j >= cs) {\r
-                                       dMultiply(d);\r
-                                       dAddOffset(w,0);\r
-                                       j=0;\r
-                                       w=0;\r
-                               }\r
-                       }\r
-                       if (j>0) {\r
-                               dMultiply(Math.pow(b,j));\r
-                               dAddOffset(w,0);\r
-                       }\r
-                       if (mi) {\r
-                               BigInteger.ZERO.subTo(this, this);\r
-                       }\r
-               }\r
-               \r
-               // XXX function fromNumber not written yet.\r
-               \r
-               /**\r
-                * \r
-                * @return a byte array.\r
-                * \r
-                */\r
-               public function toByteArray():ByteArray {\r
-                       var i:int = t;\r
-                       var r:ByteArray = new ByteArray;\r
-                       r[0] = s;\r
-                       var p:int = DB-(i*DB)%8;\r
-                       var d:int;\r
-                       var k:int=0;\r
-                       if (i-->0) {\r
-                               if (p<DB && (d=a[i]>>p)!=(s&DM)>>p) {\r
-                                       r[k++] = d|(s<<(DB-p));\r
-                               }\r
-                               while (i>=0) {\r
-                                       if(p<8) {\r
-                                               d = (a[i]&((1<<p)-1))<<(8-p);\r
-                                               d|= a[--i]>>(p+=DB-8);\r
-                                       } else {\r
-                                               d = (a[i]>>(p-=8))&0xff;\r
-                                               if (p<=0) {\r
-                                                       p += DB;\r
-                                                       --i;\r
-                                               }\r
-                                       }\r
-                                       if ((d&0x80)!=0) d|=-256;\r
-                                       if (k==0 && (s&0x80)!=(d&0x80)) ++k;\r
-                                       if (k>0 || d!=s) r[k++] = d;\r
-                               } \r
-                       }\r
-                       return r;\r
-               }\r
-\r
-               public function equals(a:BigInteger):Boolean {\r
-                       return compareTo(a)==0;\r
-               }\r
-               public function min(a:BigInteger):BigInteger {\r
-                       return (compareTo(a)<0)?this:a;\r
-               }\r
-               public function max(a:BigInteger):BigInteger {\r
-                       return (compareTo(a)>0)?this:a;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param a     a BigInteger to perform the operation with\r
-                * @param op a Function implementing the operation\r
-                * @param r a BigInteger to store the result of the operation\r
-                * \r
-                */\r
-               protected function bitwiseTo(a:BigInteger, op:Function, r:BigInteger):void {\r
-                       var i:int;\r
-                       var f:int;\r
-                       var m:int = Math.min(a.t, t);\r
-                       for (i=0; i<m; ++i) {\r
-                               r.a[i] = op(this.a[i],a.a[i]);\r
-                       }\r
-                       if (a.t<t) {\r
-                               f = a.s&DM;\r
-                               for (i=m;i<t;++i) {\r
-                                       r.a[i] = op(this.a[i],f);\r
-                               }\r
-                               r.t = t;\r
-                       } else {\r
-                               f = s&DM;\r
-                               for (i=m;i<a.t;++i) {\r
-                                       r.a[i] = op(f,a.a[i]);\r
-                               }\r
-                               r.t = a.t;\r
-                       }\r
-                       r.s = op(s, a.s);\r
-                       r.clamp();\r
-               }\r
-               \r
-               private function op_and(x:int, y:int):int {return x&y;}\r
-               public function and(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       bitwiseTo(a, op_and, r);\r
-                       return r;\r
-               }\r
-               \r
-               private function op_or(x:int, y:int):int {return x|y;}\r
-               public function or(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       bitwiseTo(a, op_or, r);\r
-                       return r;\r
-               }\r
-               \r
-               private function op_xor(x:int, y:int):int {return x^y;}\r
-               public function xor(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       bitwiseTo(a, op_xor, r);\r
-                       return r;\r
-               }\r
-               \r
-               private function op_andnot(x:int, y:int):int { return x&~y;}\r
-               public function andNot(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       bitwiseTo(a, op_andnot, r);\r
-                       return r;\r
-               }\r
-               \r
-               public function not():BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       for (var i:int=0;i<t;++i) {\r
-                               r[i] = DM&~a[i];\r
-                       }\r
-                       r.t = t;\r
-                       r.s = ~s;\r
-                       return r;\r
-               }\r
-               \r
-               public function shiftLeft(n:int):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       if (n<0) {\r
-                               rShiftTo(-n, r);\r
-                       } else {\r
-                               lShiftTo(n, r);\r
-                       }\r
-                       return r;\r
-               }\r
-               public function shiftRight(n:int):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       if (n<0) {\r
-                               lShiftTo(-n, r);\r
-                       } else {\r
-                               rShiftTo(n, r);\r
-                       }\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param x\r
-                * @return index of lowet 1-bit in x, x < 2^31\r
-                * \r
-                */\r
-               private function lbit(x:int):int {\r
-                       if (x==0) return -1;\r
-                       var r:int = 0;\r
-                       if ((x&0xffff)==0) { x>>= 16; r += 16; }\r
-                       if ((x&0xff) == 0) { x>>=  8; r +=  8; }\r
-                       if ((x&0xf)  == 0) { x>>=  4; r +=  4; }\r
-                       if ((x&0x3)  == 0) { x>>=  2; r +=  2; }\r
-                       if ((x&0x1)  == 0) ++r;\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @return index of lowest 1-bit (or -1 if none)\r
-                * \r
-                */\r
-               public function getLowestSetBit():int {\r
-                       for (var i:int=0;i<t;++i) {\r
-                               if (a[i]!=0) return i*DB+lbit(a[i]);\r
-                       }\r
-                       if (s<0) return t*DB;\r
-                       return -1;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param x\r
-                * @return number of 1 bits in x\r
-                * \r
-                */\r
-               private function cbit(x:int):int {\r
-                       var r:uint =0;\r
-                       while (x!=0) { x &= x-1; ++r }\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @return number of set bits\r
-                * \r
-                */\r
-               public function bitCount():int {\r
-                       var r:int=0;\r
-                       var x:int = s&DM;\r
-                       for (var i:int=0;i<t;++i) {\r
-                               r += cbit(a[i]^x);\r
-                       }\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param n\r
-                * @return true iff nth bit is set\r
-                * \r
-                */\r
-               public function testBit(n:int):Boolean {\r
-                       var j:int = Math.floor(n/DB);\r
-                       if (j>=t) {\r
-                               return s!=0;\r
-                       }\r
-                       return ((a[j]&(1<<(n%DB)))!=0);\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param n\r
-                * @param op\r
-                * @return this op (1<<n)\r
-                * \r
-                */\r
-               protected function changeBit(n:int,op:Function):BigInteger {\r
-                       var r:BigInteger = BigInteger.ONE.shiftLeft(n);\r
-                       bitwiseTo(r, op, r);\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param n\r
-                * @return this | (1<<n)\r
-                * \r
-                */\r
-               public function setBit(n:int):BigInteger { return changeBit(n, op_or); }\r
-\r
-               /**\r
-                * \r
-                * @param n\r
-                * @return this & ~(1<<n)\r
-                * \r
-                */\r
-               public function clearBit(n:int):BigInteger { return changeBit(n, op_andnot); }\r
-\r
-               /**\r
-                * \r
-                * @param n\r
-                * @return this ^ (1<<n)\r
-                * \r
-                */\r
-               public function flipBit(n:int):BigInteger { return changeBit(n, op_xor); }\r
-\r
-               /**\r
-                * \r
-                * @param a\r
-                * @param r = this + a\r
-                * \r
-                */\r
-               protected function addTo(a:BigInteger, r:BigInteger):void {\r
-                       var i:int = 0;\r
-                       var c:int = 0;\r
-                       var m:int = Math.min(a.t, t);\r
-                       while (i<m) {\r
-                               c += this.a[i] + a.a[i];\r
-                               r.a[i++] = c&DM;\r
-                               c>>=DB;\r
-                       }\r
-                       if (a.t < t) {\r
-                               c += a.s;\r
-                               while (i<t) {\r
-                                       c += this.a[i];\r
-                                       r.a[i++] = c&DM;\r
-                                       c >>= DB;\r
-                               }\r
-                               c += s;\r
-                       } else {\r
-                               c += s;\r
-                               while (i<a.t) {\r
-                                       c += a.a[i];\r
-                                       r.a[i++] = c&DM;\r
-                                       c >>= DB;\r
-                               }\r
-                               c += a.s;\r
-                       }\r
-                       r.s = (c<0)?-1:0;\r
-                       if (c>0) {\r
-                               r.a[i++] = c;\r
-                       } else if (c<-1) {\r
-                               r.a[i++] = DV+c;\r
-                       }\r
-                       r.t = i;\r
-                       r.clamp();\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param a\r
-                * @return this + a\r
-                * \r
-                */\r
-               public function add(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       addTo(a,r);\r
-                       return r;\r
-               }\r
-\r
-               /**\r
-                * \r
-                * @param a\r
-                * @return this - a\r
-                * \r
-                */\r
-               public function subtract(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       subTo(a,r);\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param a\r
-                * @return this * a\r
-                * \r
-                */\r
-               public function multiply(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       multiplyTo(a,r);\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param a\r
-                * @return this / a\r
-                * \r
-                */\r
-               public function divide(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       divRemTo(a, r, null);\r
-                       return r;\r
-               }\r
-               \r
-               public function remainder(a:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       divRemTo(a, null, r);\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param a\r
-                * @return [this/a, this%a]\r
-                * \r
-                */\r
-               public function divideAndRemainder(a:BigInteger):Array {\r
-                       var q:BigInteger = new BigInteger;\r
-                       var r:BigInteger = new BigInteger;\r
-                       divRemTo(a, q, r);\r
-                       return [q,r];\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * this *= n, this >=0, 1 < n < DV\r
-                * \r
-                * @param n\r
-                * \r
-                */\r
-               bi_internal function dMultiply(n:int):void {\r
-                       a[t] = am(0, n-1, this, 0, 0, t);\r
-                       ++t;\r
-                       clamp();\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * this += n << w words, this >= 0\r
-                * \r
-                * @param n\r
-                * @param w\r
-                * \r
-                */\r
-               bi_internal function dAddOffset(n:int, w:int):void {\r
-                       while (t<=w) {\r
-                               a[t++] = 0;\r
-                       }\r
-                       a[w] += n;\r
-                       while (a[w] >= DV) {\r
-                               a[w] -= DV;\r
-                               if (++w >= t) {\r
-                                       a[t++] = 0;\r
-                               }\r
-                               ++a[w];\r
-                       }\r
-               }\r
-\r
-               /**\r
-                * \r
-                * @param e\r
-                * @return this^e\r
-                * \r
-                */\r
-               public function pow(e:int):BigInteger {\r
-                       return exp(e, new NullReduction);\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param a\r
-                * @param n\r
-                * @param r = lower n words of "this * a", a.t <= n\r
-                * \r
-                */\r
-               bi_internal function multiplyLowerTo(a:BigInteger, n:int, r:BigInteger):void {\r
-                       var i:int = Math.min(t+a.t, n);\r
-                       r.s = 0; // assumes a, this >= 0\r
-                       r.t = i;\r
-                       while (i>0) {\r
-                               r.a[--i]=0;\r
-                       }\r
-                       var j:int;\r
-                       for (j=r.t-t;i<j;++i) {\r
-                               r.a[i+t] = am(0, a.a[i], r, i, 0, t);\r
-                       }\r
-                       for (j=Math.min(a.t,n);i<j;++i) {\r
-                               am(0, a.a[i], r, i, 0, n-i);\r
-                       }\r
-                       r.clamp();\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param a\r
-                * @param n\r
-                * @param r = "this * a" without lower n words, n > 0\r
-                * \r
-                */\r
-               bi_internal function multiplyUpperTo(a:BigInteger, n:int, r:BigInteger):void {\r
-                       --n;\r
-                       var i:int = r.t = t+a.t-n;\r
-                       r.s = 0; // assumes a,this >= 0\r
-                       while (--i>=0) {\r
-                               r.a[i] = 0;\r
-                       }\r
-                       for (i=Math.max(n-t,0);i<a.t;++i) {\r
-                               r.a[t+i-n] = am(n-i, a.a[i], r, 0, 0, t+i-n);\r
-                       }\r
-                       r.clamp();\r
-                       r.drShiftTo(1,r);\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param e\r
-                * @param m\r
-                * @return this^e % m (HAC 14.85)\r
-                * \r
-                */\r
-               public function modPow(e:BigInteger, m:BigInteger):BigInteger {\r
-                       var i:int = e.bitLength();\r
-                       var k:int;\r
-                       var r:BigInteger = nbv(1);\r
-                       var z:IReduction;\r
-                       \r
-                       if (i<=0) {\r
-                               return r;\r
-                       } else if (i<18) {\r
-                               k=1;\r
-                       } else if (i<48) {\r
-                               k=3;\r
-                       } else if (i<144) {\r
-                               k=4;\r
-                       } else if (i<768) {\r
-                               k=5;\r
-                       } else {\r
-                               k=6;\r
-                       }\r
-                       if (i<8) {\r
-                               z = new ClassicReduction(m);\r
-                       } else if (m.isEven()) {\r
-                               z = new BarrettReduction(m);\r
-                       } else {\r
-                               z = new MontgomeryReduction(m);\r
-                       }\r
-                       // precomputation\r
-                       var g:Array = [];\r
-                       var n:int = 3;\r
-                       var k1:int = k-1;\r
-                       var km:int = (1<<k)-1;\r
-                       g[1] = z.convert(this);\r
-                       if (k > 1) {\r
-                               var g2:BigInteger = new BigInteger;\r
-                               z.sqrTo(g[1], g2);\r
-                               while (n<=km) {\r
-                                       g[n] = new BigInteger;\r
-                                       z.mulTo(g2, g[n-2], g[n]);\r
-                                       n += 2;\r
-                               }\r
-                       }\r
-                       \r
-                       var j:int = e.t-1;\r
-                       var w:int;\r
-                       var is1:Boolean = true;\r
-                       var r2:BigInteger = new BigInteger;\r
-                       var t:BigInteger;\r
-                       i = nbits(e.a[j])-1;\r
-                       while (j>=0) {\r
-                               if (i>=k1) {\r
-                                       w = (e.a[j]>>(i-k1))&km;\r
-                               } else {\r
-                                       w = (e.a[j]&((1<<(i+1))-1))<<(k1-i);\r
-                                       if (j>0) {\r
-                                               w |= e.a[j-1]>>(DB+i-k1);\r
-                                       }\r
-                               }\r
-                               n = k;\r
-                               while ((w&1)==0) {\r
-                                       w >>= 1;\r
-                                       --n;\r
-                               }\r
-                               if ((i -= n) <0) {\r
-                                       i += DB;\r
-                                       --j;\r
-                               }\r
-                               if (is1) { // ret == 1, don't bother squaring or multiplying it\r
-                                       g[w].copyTo(r);\r
-                                       is1 = false;\r
-                               } else {\r
-                                       while (n>1) {\r
-                                               z.sqrTo(r, r2);\r
-                                               z.sqrTo(r2, r);\r
-                                               n -= 2;\r
-                                       }\r
-                                       if (n>0) {\r
-                                               z.sqrTo(r, r2);\r
-                                       } else {\r
-                                               t = r;\r
-                                               r = r2;\r
-                                               r2 = t;\r
-                                       }\r
-                                       z.mulTo(r2, g[w], r);\r
-                               }\r
-                               while (j>=0 && (e.a[j]&(1<<i)) == 0) {\r
-                                       z.sqrTo(r, r2);\r
-                                       t = r;\r
-                                       r = r2;\r
-                                       r2 = t;\r
-                                       if (--i<0) {\r
-                                               i = DB-1;\r
-                                               --j;\r
-                                       }\r
-                                       \r
-                               }\r
-                       }\r
-                       return z.revert(r);\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param a\r
-                * @return gcd(this, a) (HAC 14.54)\r
-                * \r
-                */\r
-               public function gcd(a:BigInteger):BigInteger {\r
-                       var x:BigInteger = (s<0)?negate():clone();\r
-                       var y:BigInteger = (a.s<0)?a.negate():a.clone();\r
-                       if (x.compareTo(y)<0) {\r
-                               var t:BigInteger=x;\r
-                               x=y;\r
-                               y=t;\r
-                       }\r
-                       var i:int = x.getLowestSetBit();\r
-                       var g:int = y.getLowestSetBit();\r
-                       if (g<0) return x;\r
-                       if (i<g) g= i;\r
-                       if (g>0) {\r
-                               x.rShiftTo(g, x);\r
-                               y.rShiftTo(g, y);\r
-                       }\r
-                       while (x.sigNum()>0) {\r
-                               if ((i = x.getLowestSetBit()) >0) {\r
-                                       x.rShiftTo(i, x);\r
-                               }\r
-                               if ((i = y.getLowestSetBit()) >0) {\r
-                                       y.rShiftTo(i, y);\r
-                               }\r
-                               if (x.compareTo(y) >= 0) {\r
-                                       x.subTo(y, x);\r
-                                       x.rShiftTo(1, x);\r
-                               } else {\r
-                                       y.subTo(x, y);\r
-                                       y.rShiftTo(1, y);\r
-                               }\r
-                       }\r
-                       if (g>0) {\r
-                               y.lShiftTo(g, y);\r
-                       }\r
-                       return y;\r
-               }\r
-\r
-               /**\r
-                * \r
-                * @param n\r
-                * @return this % n, n < 2^DB\r
-                * \r
-                */\r
-               protected function modInt(n:int):int {\r
-                       if (n<=0) return 0;\r
-                       var d:int = DV%n;\r
-                       var r:int = (s<0)?n-1:0;\r
-                       if (t>0) {\r
-                               if (d==0) {\r
-                                       r = a[0]%n;\r
-                               } else {\r
-                                       for (var i:int=t-1;i>=0;--i) {\r
-                                               r = (d*r+a[i])%n;\r
-                                       }\r
-                               }\r
-                       }\r
-                       return r;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param m\r
-                * @return 1/this %m (HAC 14.61)\r
-                * \r
-                */\r
-               public function modInverse(m:BigInteger):BigInteger {\r
-                       var ac:Boolean = m.isEven();\r
-                       if ((isEven()&&ac) || m.sigNum()==0) {\r
-                               return BigInteger.ZERO;\r
-                       }\r
-                       var u:BigInteger = m.clone();\r
-                       var v:BigInteger = clone();\r
-                       var a:BigInteger = nbv(1);\r
-                       var b:BigInteger = nbv(0);\r
-                       var c:BigInteger = nbv(0);\r
-                       var d:BigInteger = nbv(1);\r
-                       while (u.sigNum()!=0) {\r
-                               while (u.isEven()) {\r
-                                       u.rShiftTo(1,u);\r
-                                       if (ac) {\r
-                                               if (!a.isEven() || !b.isEven()) {\r
-                                                       a.addTo(this,a);\r
-                                                       b.subTo(m,b);\r
-                                               }\r
-                                               a.rShiftTo(1,a);\r
-                                       } else if (!b.isEven()) {\r
-                                               b.subTo(m,b);\r
-                                       }\r
-                                       b.rShiftTo(1,b);\r
-                               }\r
-                               while (v.isEven()) {\r
-                                       v.rShiftTo(1,v);\r
-                                       if (ac) {\r
-                                               if (!c.isEven() || !d.isEven()) {\r
-                                                       c.addTo(this,c);\r
-                                                       d.subTo(m,d);\r
-                                               }\r
-                                               c.rShiftTo(1,c);\r
-                                       } else if (!d.isEven()) {\r
-                                               d.subTo(m,d);\r
-                                       }\r
-                                       d.rShiftTo(1,d);\r
-                               }\r
-                               if (u.compareTo(v)>=0) {\r
-                                       u.subTo(v,u);\r
-                                       if (ac) {\r
-                                               a.subTo(c,a);\r
-                                       }\r
-                                       b.subTo(d,b);\r
-                               } else {\r
-                                       v.subTo(u,v);\r
-                                       if (ac) {\r
-                                               c.subTo(a,c);\r
-                                       }\r
-                                       d.subTo(b,d);\r
-                               }\r
-                       }\r
-                       if (v.compareTo(BigInteger.ONE) != 0) {\r
-                               return BigInteger.ZERO;\r
-                       }\r
-                       if (d.compareTo(m) >= 0) {\r
-                               return d.subtract(m);\r
-                       }\r
-                       if (d.sigNum()<0) {\r
-                               d.addTo(m,d);\r
-                       } else {\r
-                               return d;\r
-                       }\r
-                       if (d.sigNum()<0) {\r
-                               return d.add(m);\r
-                       } else {\r
-                               return d;\r
-                       }\r
-               }\r
-\r
-               /**\r
-                * \r
-                * @param t\r
-                * @return primality with certainty >= 1-.5^t\r
-                * \r
-                */\r
-               public function isProbablePrime(t:int):Boolean {\r
-                       var i:int;\r
-                       var x:BigInteger = abs();\r
-                       if (x.t == 1 && x.a[0]<=lowprimes[lowprimes.length-1]) {\r
-                               for (i=0;i<lowprimes.length;++i) {\r
-                                       if (x[0]==lowprimes[i]) return true;\r
-                               }\r
-                               return false;\r
-                       }\r
-                       if (x.isEven()) return false;\r
-                       i = 1;\r
-                       while (i<lowprimes.length) {\r
-                               var m:int = lowprimes[i];\r
-                               var j:int = i+1;\r
-                               while (j<lowprimes.length && m<lplim) {\r
-                                       m *= lowprimes[j++];\r
-                               }\r
-                               m = x.modInt(m);\r
-                               while (i<j) {\r
-                                       if (m%lowprimes[i++]==0) {\r
-                                               return false;\r
-                                       }\r
-                               }\r
-                       }\r
-                       return x.millerRabin(t);\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param t\r
-                * @return true if probably prime (HAC 4.24, Miller-Rabin)\r
-                * \r
-                */\r
-               protected function millerRabin(t:int):Boolean {\r
-                       var n1:BigInteger = subtract(BigInteger.ONE);\r
-                       var k:int = n1.getLowestSetBit();\r
-                       if (k<=0) {\r
-                               return false;\r
-                       }\r
-                       var r:BigInteger = n1.shiftRight(k);\r
-                       t = (t+1)>>1;\r
-                       if (t>lowprimes.length) {\r
-                               t = lowprimes.length;\r
-                       }\r
-                       var a:BigInteger = new BigInteger;\r
-                       for (var i:int=0;i<t;++i) {\r
-                               a.fromInt(lowprimes[i]);\r
-                               var y:BigInteger = a.modPow(r, this);\r
-                               if (y.compareTo(BigInteger.ONE)!=0 && y.compareTo(n1)!=0) {\r
-                                       var j:int = 1;\r
-                                       while (j++<k && y.compareTo(n1)!=0) {\r
-                                               y = y.modPowInt(2, this);\r
-                                               if (y.compareTo(BigInteger.ONE)==0) {\r
-                                                       return false;\r
-                                               }\r
-                                       }\r
-                                       if (y.compareTo(n1)!=0) {\r
-                                               return false;\r
-                                       }\r
-                               }\r
-                       }\r
-                       return true;\r
-               }\r
-\r
-               /**\r
-                * Tweak our BigInteger until it looks prime enough\r
-                * \r
-                * @param bits\r
-                * @param t\r
-                * \r
-                */\r
-               public function primify(bits:int, t:int):void {\r
-                       if (!testBit(bits-1)) { // force MSB set\r
-                               bitwiseTo(BigInteger.ONE.shiftLeft(bits-1), op_or, this);\r
-                       }\r
-                       if (isEven()) {\r
-                               dAddOffset(1,0);        // force odd\r
-                       }\r
-                       while (!isProbablePrime(t)) {\r
-                               dAddOffset(2,0);\r
-                               while(bitLength()>bits) subTo(BigInteger.ONE.shiftLeft(bits-1),this);\r
-                       }\r
-               }\r
-\r
-       }\r
-}\r
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/ClassicReduction.as
deleted file mode 100755 (executable)
index ea9f17c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.hurlant.math\r
-{\r
-       use namespace bi_internal;\r
-       \r
-       /**\r
-        * Modular reduction using "classic" algorithm\r
-        */\r
-       internal class ClassicReduction implements IReduction\r
-       {\r
-               private var m:BigInteger;\r
-               public function ClassicReduction(m:BigInteger) {\r
-                       this.m = m;\r
-               }\r
-               public function convert(x:BigInteger):BigInteger {\r
-                       if (x.s<0 || x.compareTo(m)>=0) {\r
-                               return x.mod(m);\r
-                       }\r
-                       return x;\r
-               }\r
-               public function revert(x:BigInteger):BigInteger {\r
-                       return x;\r
-               }\r
-               public function reduce(x:BigInteger):void {\r
-                       x.divRemTo(m, null,x);\r
-               }\r
-               public function mulTo(x:BigInteger, y:BigInteger, r:BigInteger):void {\r
-                       x.multiplyTo(y,r);\r
-                       reduce(r);\r
-               }\r
-               public function sqrTo(x:BigInteger, r:BigInteger):void {\r
-                       x.squareTo(r);\r
-                       reduce(r);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/IReduction.as
deleted file mode 100755 (executable)
index 210a054..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.hurlant.math\r
-{\r
-       internal interface IReduction\r
-       {\r
-               function convert(x:BigInteger):BigInteger;\r
-               function revert(x:BigInteger):BigInteger;\r
-               function reduce(x:BigInteger):void;\r
-               function mulTo(x:BigInteger, y:BigInteger, r:BigInteger):void;\r
-               function sqrTo(x:BigInteger, r:BigInteger):void;\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/MontgomeryReduction.as
deleted file mode 100755 (executable)
index 47a16d6..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.hurlant.math\r
-{\r
-       use namespace bi_internal;\r
-       /**\r
-        * Montgomery reduction\r
-        */\r
-       internal class MontgomeryReduction implements IReduction\r
-       {\r
-               private var m:BigInteger;\r
-               private var mp:int;\r
-               private var mpl:int;\r
-               private var mph:int;\r
-               private var um:int;\r
-               private var mt2:int;\r
-               public function MontgomeryReduction(m:BigInteger) {\r
-                       this.m = m;\r
-                       mp = m.invDigit();\r
-                       mpl = mp & 0x7fff;\r
-                       mph = mp>>15;\r
-                       um = (1<<(BigInteger.DB-15))-1;\r
-                       mt2 = 2*m.t;\r
-               }\r
-               /**\r
-                * xR mod m\r
-                */\r
-               public function convert(x:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       x.abs().dlShiftTo(m.t, r);\r
-                       r.divRemTo(m, null, r);\r
-                       if (x.s<0 && r.compareTo(BigInteger.ZERO)>0) {\r
-                               m.subTo(r,r);\r
-                       }\r
-                       return r;\r
-               }\r
-               /**\r
-                * x/R mod m\r
-                */\r
-               public function revert(x:BigInteger):BigInteger {\r
-                       var r:BigInteger = new BigInteger;\r
-                       x.copyTo(r);\r
-                       reduce(r);\r
-                       return r;\r
-               }\r
-               /**\r
-                * x = x/R mod m (HAC 14.32)\r
-                */\r
-               public function reduce(x:BigInteger):void {\r
-                       while (x.t<=mt2) {              // pad x so am has enough room later\r
-                               x.a[x.t++] = 0;\r
-                       }\r
-                       for (var i:int=0; i<m.t; ++i) {\r
-                               // faster way of calculating u0 = x[i]*mp mod DV\r
-                               var j:int = x.a[i]&0x7fff;\r
-                               var u0:int = (j*mpl+(((j*mph+(x.a[i]>>15)*mpl)&um)<<15))&BigInteger.DM;\r
-                               // use am to combine the multiply-shift-add into one call\r
-                               j = i+m.t;\r
-                               x.a[j] += m.am(0, u0, x, i, 0, m.t);\r
-                               // propagate carry\r
-                               while (x.a[j]>=BigInteger.DV) {\r
-                                       x.a[j] -= BigInteger.DV;\r
-                                       x.a[++j]++;\r
-                               }\r
-                       }\r
-                       x.clamp();\r
-                       x.drShiftTo(m.t, x);\r
-                       if (x.compareTo(m)>=0) {\r
-                               x.subTo(m,x);\r
-                       }\r
-               }\r
-               /**\r
-                * r = "x^2/R mod m"; x != r\r
-                */\r
-               public function sqrTo(x:BigInteger, r:BigInteger):void {\r
-                       x.squareTo(r);\r
-                       reduce(r);\r
-               }\r
-               /**\r
-                * r = "xy/R mod m"; x,y != r\r
-                */\r
-               public function mulTo(x:BigInteger, y:BigInteger, r:BigInteger):void {\r
-                       x.multiplyTo(y,r);\r
-                       reduce(r);\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/NullReduction.as
deleted file mode 100755 (executable)
index 5b55832..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.hurlant.math\r
-{\r
-       use namespace bi_internal;\r
-       /**\r
-        * A "null" reducer\r
-        */\r
-       public class NullReduction implements IReduction\r
-       {\r
-               public function revert(x:BigInteger):BigInteger\r
-               {\r
-                       return x;\r
-               }\r
-               \r
-               public function mulTo(x:BigInteger, y:BigInteger, r:BigInteger):void\r
-               {\r
-                       x.multiplyTo(y,r);\r
-               }\r
-               \r
-               public function sqrTo(x:BigInteger, r:BigInteger):void\r
-               {\r
-                       x.squareTo(r);\r
-               }\r
-               \r
-               public function convert(x:BigInteger):BigInteger\r
-               {\r
-                       return x;\r
-               }\r
-               \r
-               public function reduce(x:BigInteger):void\r
-               {\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/math/bi_internal.as
deleted file mode 100755 (executable)
index dc86aad..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/**\r
- * bi_internal\r
- * \r
- * A namespace. w00t.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.math {\r
-       public namespace bi_internal = "http://crypto.hurlant.com/BigInteger";\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/ArrayUtil.as
deleted file mode 100755 (executable)
index b02b8d5..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/**\r
- * ArrayUtil\r
- * \r
- * A class that allows to compare two ByteArrays.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util {\r
-       import flash.utils.ByteArray;\r
-       \r
-       \r
-       public class ArrayUtil {\r
-               \r
-               public static function equals(a1:ByteArray, a2:ByteArray):Boolean {\r
-                       if (a1.length != a2.length) return false;\r
-                       var l:int = a1.length;\r
-                       for (var i:int=0;i<l;i++) {\r
-                               if (a1[i]!=a2[i]) return false;\r
-                       }\r
-                       return true;\r
-               }\r
-       }\r
-       \r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Base64.as
deleted file mode 100755 (executable)
index bcb349c..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/* Base64 library for ActionScript 3.0.\r
- * Based on: Ma Bingyao code.\r
- * Optimized by: Jean-Philippe Auclair  / jpauclair.wordpress.com\r
- * Copyright (C) 2007 Ma Bingyao <andot@ujn.edu.cn>\r
- * LastModified: Oct 26, 2009\r
- * This library is free.  You can redistribute it and/or modify it.\r
- */\r
-package com.hurlant.util{\r
-    import flash.utils.ByteArray;\r
-\r
-    public class Base64\r
-    {\r
-        private static const _encodeChars : Vector.<int> = InitEncoreChar();\r
-        private static const _decodeChars : Vector.<int> = InitDecodeChar();\r
-\r
-        public static function encodeByteArray(data : ByteArray) : String\r
-        {\r
-            var out : ByteArray = new ByteArray();\r
-            //Presetting the length keep the memory smaller and optimize speed since there is no "grow" needed\r
-            out.length = (2 + data.length - ((data.length + 2) % 3)) * 4 / 3; //Preset length //1.6 to 1.5 ms\r
-            var i : int = 0;\r
-            var r : int = data.length % 3;\r
-            var len : int = data.length - r;\r
-            var c : int;   //read (3) character AND write (4) characters\r
-\r
-            while (i < len)\r
-            {\r
-                //Read 3 Characters (8bit * 3 = 24 bits)\r
-                c = data[i++] << 16 | data[i++] << 8 | data[i++];\r
-\r
-                //Cannot optimize this to read int because of the positioning overhead. (as3 bytearray seek is slow)\r
-                //Convert to 4 Characters (6 bit * 4 = 24 bits)\r
-                c = (_encodeChars[c >>> 18] << 24) | (_encodeChars[c >>> 12 & 0x3f] << 16) | (_encodeChars[c >>> 6 & 0x3f] << 8) | _encodeChars[c & 0x3f];\r
-\r
-                //Optimization: On older and slower computer, do one write Int instead of 4 write byte: 1.5 to 0.71 ms\r
-                out.writeInt(c);\r
-                /*\r
-                 out.writeByte(_encodeChars[c >> 18] );\r
-                 out.writeByte(_encodeChars[c >> 12 & 0x3f]);\r
-                 out.writeByte(_encodeChars[c >> 6 & 0x3f]);\r
-                 out.writeByte(_encodeChars[c & 0x3f]);\r
-                 */\r
-            }\r
-\r
-            if (r == 1) //Need two "=" padding\r
-            {\r
-                //Read one char, write two chars, write padding\r
-                c = data[i];\r
-                c = (_encodeChars[c >>> 2] << 24) | (_encodeChars[(c & 0x03) << 4] << 16) | 61 << 8 | 61;\r
-                out.writeInt(c);\r
-            }\r
-            else if (r == 2) //Need one "=" padding\r
-            {\r
-                c = data[i++] << 8 | data[i];\r
-                c = (_encodeChars[c >>> 10] << 24) | (_encodeChars[c >>> 4 & 0x3f] << 16) | (_encodeChars[(c & 0x0f) << 2] << 8) | 61;\r
-                out.writeInt(c);\r
-            }\r
-\r
-            out.position = 0;\r
-            return out.readUTFBytes(out.length);\r
-        }\r
-\r
-\r
-        public static function decodeToByteArray(str : String) : ByteArray\r
-        {\r
-            var c1 : int;\r
-            var c2 : int;\r
-            var c3 : int;\r
-            var c4 : int;\r
-            var i : int;\r
-            var len : int;\r
-            var out : ByteArray;\r
-            len = str.length;\r
-            i = 0;\r
-            out = new ByteArray();\r
-            var byteString : ByteArray = new ByteArray();\r
-            byteString.writeUTFBytes(str);\r
-            while (i < len)\r
-            {\r
-                //c1\r
-                do\r
-                {\r
-                    c1 = _decodeChars[byteString[i++]];\r
-                } while (i < len && c1 == -1);\r
-                if (c1 == -1) break;\r
-\r
-                //c2\r
-                do\r
-                {\r
-                    c2 = _decodeChars[byteString[i++]];\r
-                } while (i < len && c2 == -1);\r
-                if (c2 == -1) break;\r
-\r
-                out.writeByte((c1 << 2) | ((c2 & 0x30) >> 4));\r
-\r
-                //c3\r
-                do\r
-                {\r
-                    c3 = byteString[i++];\r
-                    if (c3 == 61) return out;\r
-\r
-                    c3 = _decodeChars[c3];\r
-                } while (i < len && c3 == -1);\r
-                if (c3 == -1) break;\r
-\r
-                out.writeByte(((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2));\r
-\r
-                //c4\r
-                do {\r
-                    c4 = byteString[i++];\r
-                    if (c4 == 61) return out;\r
-\r
-                    c4 = _decodeChars[c4];\r
-                } while (i < len && c4 == -1);\r
-                if (c4 == -1) break;\r
-\r
-                out.writeByte(((c3 & 0x03) << 6) | c4);\r
-\r
-            }\r
-\r
-            out.position = 0;\r
-\r
-            return out;\r
-        }\r
-\r
-        public static function encode(data : String) : String {\r
-            // Convert string to ByteArray\r
-            var bytes : ByteArray = new ByteArray();\r
-            bytes.writeUTFBytes(data);\r
-\r
-            // Return encoded ByteArray\r
-            return encodeByteArray(bytes);\r
-        }\r
-\r
-        public static function decode(data : String) : String {\r
-            // Decode data to ByteArray\r
-            var bytes : ByteArray = decodeToByteArray(data);\r
-\r
-            // Convert to string and return\r
-            return bytes.readUTFBytes(bytes.length);\r
-        }\r
-\r
-        public static function InitEncoreChar() : Vector.<int>\r
-        {\r
-            var encodeChars : Vector.<int> = new Vector.<int>();\r
-            // We could push the number directly, but i think it's nice to see the characters (with no overhead on encode/decode)\r
-            var chars : String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\r
-            for (var i : int = 0; i < 64; i++)\r
-            {\r
-                encodeChars.push(chars.charCodeAt(i));\r
-            }\r
-            /*\r
-             encodeChars.push(\r
-             65, 66, 67, 68, 69, 70, 71, 72,\r
-             73, 74, 75, 76, 77, 78, 79, 80,\r
-             81, 82, 83, 84, 85, 86, 87, 88,\r
-             89, 90, 97, 98, 99, 100, 101, 102,\r
-             103, 104, 105, 106, 107, 108, 109, 110,\r
-             111, 112, 113, 114, 115, 116, 117, 118,\r
-             119, 120, 121, 122, 48, 49, 50, 51,\r
-             52, 53, 54, 55, 56, 57, 43, 47);\r
-             */\r
-            return encodeChars;\r
-        }\r
-\r
-        public static function InitDecodeChar() : Vector.<int>\r
-        {\r
-            var decodeChars : Vector.<int> = new Vector.<int>();\r
-\r
-            decodeChars.push(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,\r
-                    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,\r
-                    -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\r
-                    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,\r
-                    -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\r
-                    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1\r
-                    - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r
-                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);\r
-            return decodeChars;\r
-        }\r
-    }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Hex.as
deleted file mode 100755 (executable)
index 98d887b..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/**\r
- * Hex\r
- * \r
- * Utility class to convert Hex strings to ByteArray or String types.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class Hex\r
-       {\r
-               /**\r
-                * Support straight hex, or colon-laced hex.\r
-                * (that means 23:03:0e:f0, but *NOT* 23:3:e:f0)\r
-                * Whitespace characters are ignored.\r
-                */\r
-               public static function toArray(hex:String):ByteArray {\r
-                       hex = hex.replace(/\s|:/gm,'');\r
-                       var a:ByteArray = new ByteArray;\r
-                       if (hex.length&1==1) hex="0"+hex;\r
-                       for (var i:uint=0;i<hex.length;i+=2) {\r
-                               a[i/2] = parseInt(hex.substr(i,2),16);\r
-                       }\r
-                       return a;\r
-               }\r
-               \r
-               public static function fromArray(array:ByteArray, colons:Boolean=false):String {\r
-                       var s:String = "";\r
-                       for (var i:uint=0;i<array.length;i++) {\r
-                               s+=("0"+array[i].toString(16)).substr(-2,2);\r
-                               if (colons) {\r
-                                       if (i<array.length-1) s+=":";\r
-                               }\r
-                       }\r
-                       return s;\r
-               }\r
-               \r
-               /**\r
-                * \r
-                * @param hex\r
-                * @return a UTF-8 string decoded from hex\r
-                * \r
-                */\r
-               public static function toString(hex:String):String {\r
-                       var a:ByteArray = toArray(hex);\r
-                       return a.readUTFBytes(a.length);\r
-               }\r
-               \r
-               \r
-               /**\r
-                * \r
-                * @param str\r
-                * @return a hex string encoded from the UTF-8 string str\r
-                * \r
-                */\r
-               public static function fromString(str:String, colons:Boolean=false):String {\r
-                       var a:ByteArray = new ByteArray;\r
-                       a.writeUTFBytes(str);\r
-                       return fromArray(a, colons);\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/Memory.as
deleted file mode 100755 (executable)
index 688e1bc..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/**\r
- * Memory\r
- * \r
- * A class with a few memory-management methods, as much as \r
- * such a thing exists in a Flash player.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util\r
-{\r
-       import flash.net.LocalConnection;\r
-       import flash.system.System;\r
-       \r
-       public class Memory\r
-       {\r
-               public static function gc():void {\r
-                       // force a GC\r
-                       try {\r
-                          new LocalConnection().connect('foo');\r
-                          new LocalConnection().connect('foo');\r
-                       } catch (e:*) {}\r
-               }\r
-               public static function get used():uint {\r
-                       return System.totalMemory;\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ByteString.as
deleted file mode 100755 (executable)
index fb8b280..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/**\r
- * ByteString\r
- * \r
- * An ASN1 type for a ByteString, represented with a ByteArray\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-\r
-       public class ByteString extends ByteArray implements IAsn1Type\r
-       {\r
-               private var type:uint;\r
-               private var len:uint;\r
-               \r
-               public function ByteString(type:uint = 0x04, length:uint = 0x00) {\r
-                       this.type = type;\r
-                       this.len = length;\r
-               }\r
-               \r
-               public function getLength():uint\r
-               {\r
-                       return len;\r
-               }\r
-               \r
-               public function getType():uint\r
-               {\r
-                       return type;\r
-               }\r
-               \r
-               public function toDER():ByteArray {\r
-                       return DER.wrapDER(type, this);\r
-               }\r
-               \r
-               override public function toString():String {\r
-                       return DER.indent+"ByteString["+type+"]["+len+"]["+Hex.fromArray(this)+"]";\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/DER.as
deleted file mode 100755 (executable)
index bb5ecce..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/**\r
- * DER\r
- * \r
- * A basic class to parse DER structures.\r
- * It is very incomplete, but sufficient to extract whatever data we need so far.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import com.hurlant.math.BigInteger;\r
-       \r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.der.Sequence;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       // goal 1: to be able to parse an RSA Private Key PEM file.\r
-       // goal 2: to parse an X509v3 cert. kinda.\r
-       \r
-       /**\r
-        * DER for dummies:\r
-        * http://luca.ntop.org/Teaching/Appunti/asn1.html\r
-        * \r
-        * This class does the bare minimum to get by. if that.\r
-        */\r
-       public class DER\r
-       {\r
-               public static var indent:String = "";\r
-               \r
-               public static function parse(der:ByteArray, structure:*=null):IAsn1Type {\r
-/*                     if (der.position==0) {\r
-                               trace("DER.parse: "+Hex.fromArray(der));\r
-                       }\r
- */                    // type\r
-                       var type:int = der.readUnsignedByte();\r
-                       var constructed:Boolean = (type&0x20)!=0;\r
-                       type &=0x1F;\r
-                       // length\r
-                       var len:int = der.readUnsignedByte();\r
-                       if (len>=0x80) {\r
-                               // long form of length\r
-                               var count:int = len & 0x7f;\r
-                               len = 0;\r
-                               while (count>0) {\r
-                                       len = (len<<8) | der.readUnsignedByte();\r
-                                       count--;\r
-                               }\r
-                       }\r
-                       // data\r
-                       var b:ByteArray\r
-                       switch (type) {\r
-                               case 0x00: // WHAT IS THIS THINGY? (seen as 0xa0)\r
-                                       // (note to self: read a spec someday.)\r
-                                       // for now, treat as a sequence.\r
-                               case 0x10: // SEQUENCE/SEQUENCE OF. whatever\r
-                                       // treat as an array\r
-                                       var p:int = der.position;\r
-                                       var o:Sequence = new Sequence(type, len);\r
-                                       var arrayStruct:Array = structure as Array;\r
-                                       if (arrayStruct!=null) {\r
-                                               // copy the array, as we destroy it later.\r
-                                               arrayStruct = arrayStruct.concat();\r
-                                       }\r
-                                       while (der.position < p+len) {\r
-                                               var tmpStruct:Object = null\r
-                                               if (arrayStruct!=null) {\r
-                                                       tmpStruct = arrayStruct.shift();\r
-                                               }\r
-                                               if (tmpStruct!=null) {\r
-                                                       while (tmpStruct && tmpStruct.optional) {\r
-                                                               // make sure we have something that looks reasonable. XXX I'm winging it here..\r
-                                                               var wantConstructed:Boolean = (tmpStruct.value is Array);\r
-                                                               var isConstructed:Boolean = isConstructedType(der);\r
-                                                               if (wantConstructed!=isConstructed) {\r
-                                                                       // not found. put default stuff, or null\r
-                                                                       o.push(tmpStruct.defaultValue);\r
-                                                                       o[tmpStruct.name] = tmpStruct.defaultValue;\r
-                                                                       // try the next thing\r
-                                                                       tmpStruct = arrayStruct.shift();\r
-                                                               } else {\r
-                                                                       break;\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-                                               if (tmpStruct!=null) {\r
-                                                       var name:String = tmpStruct.name;\r
-                                                       var value:* = tmpStruct.value;\r
-                                                       if (tmpStruct.extract) {\r
-                                                               // we need to keep a binary copy of this element\r
-                                                               var size:int = getLengthOfNextElement(der);\r
-                                                               var ba:ByteArray = new ByteArray;\r
-                                                               ba.writeBytes(der, der.position, size);\r
-                                                               o[name+"_bin"] = ba;\r
-                                                       }\r
-                                                       var obj:IAsn1Type = DER.parse(der, value);\r
-                                                       o.push(obj);\r
-                                                       o[name] = obj;\r
-                                               } else {\r
-                                                       o.push(DER.parse(der));\r
-                                               }\r
-                                       }\r
-                                       return o;\r
-                               case 0x11: // SET/SET OF\r
-                                       p = der.position;\r
-                                       var s:Set = new Set(type, len);\r
-                                       while (der.position < p+len) {\r
-                                               s.push(DER.parse(der));\r
-                                       }\r
-                                       return s;\r
-                               case 0x02: // INTEGER\r
-                                       // put in a BigInteger\r
-                                       b = new ByteArray;\r
-                                       der.readBytes(b,0,len);\r
-                                       b.position=0;\r
-                                       return new Integer(type, len, b);\r
-                               case 0x06: // OBJECT IDENTIFIER:\r
-                                       b = new ByteArray;\r
-                                       der.readBytes(b,0,len);\r
-                                       b.position=0;\r
-                                       return new ObjectIdentifier(type, len, b);\r
-                               default:\r
-                                       trace("I DONT KNOW HOW TO HANDLE DER stuff of TYPE "+type);\r
-                                       // fall through\r
-                               case 0x03: // BIT STRING\r
-                                       if (der[der.position]==0) {\r
-                                               //trace("Horrible Bit String pre-padding removal hack."); // I wish I had the patience to find a spec for this.\r
-                                               der.position++;\r
-                                               len--;\r
-                                       }\r
-                               case 0x04: // OCTET STRING\r
-                                       // stuff in a ByteArray for now.\r
-                                       var bs:ByteString = new ByteString(type, len);\r
-                                       der.readBytes(bs,0,len);\r
-                                       return bs;\r
-                               case 0x05: // NULL\r
-                                       // if len!=0, something's horribly wrong.\r
-                                       // should I check?\r
-                                       return null;\r
-                               case 0x13: // PrintableString\r
-                                       var ps:PrintableString = new PrintableString(type, len);\r
-                                       ps.setString(der.readMultiByte(len, "US-ASCII"));\r
-                                       return ps;\r
-                               case 0x22: // XXX look up what this is. openssl uses this to store my email.\r
-                               case 0x14: // T61String - an horrible format we don't even pretend to support correctly\r
-                                       ps = new PrintableString(type, len);\r
-                                       ps.setString(der.readMultiByte(len, "latin1"));\r
-                                       return ps;\r
-                               case 0x17: // UTCTime\r
-                                       var ut:UTCTime = new UTCTime(type, len);\r
-                                       ut.setUTCTime(der.readMultiByte(len, "US-ASCII"));\r
-                                       return ut;\r
-                       }\r
-               }\r
-               \r
-               private static function getLengthOfNextElement(b:ByteArray):int {\r
-                       var p:uint = b.position;\r
-                       // length\r
-                       b.position++;\r
-                       var len:int = b.readUnsignedByte();\r
-                       if (len>=0x80) {\r
-                               // long form of length\r
-                               var count:int = len & 0x7f;\r
-                               len = 0;\r
-                               while (count>0) {\r
-                                       len = (len<<8) | b.readUnsignedByte();\r
-                                       count--;\r
-                               }\r
-                       }\r
-                       len += b.position-p; // length of length\r
-                       b.position = p;\r
-                       return len;\r
-               }\r
-               private static function isConstructedType(b:ByteArray):Boolean {\r
-                       var type:int = b[b.position];\r
-                       return (type&0x20)!=0;\r
-               }\r
-               \r
-               public static function wrapDER(type:int, data:ByteArray):ByteArray {\r
-                       var d:ByteArray = new ByteArray;\r
-                       d.writeByte(type);\r
-                       var len:int = data.length;\r
-                       if (len<128) {\r
-                               d.writeByte(len);\r
-                       } else if (len<256) {\r
-                               d.writeByte(1 | 0x80);\r
-                               d.writeByte(len);\r
-                       } else if (len<65536) {\r
-                               d.writeByte(2 | 0x80);\r
-                               d.writeByte(len>>8);\r
-                               d.writeByte(len);\r
-                       } else if (len<65536*256) {\r
-                               d.writeByte(3 | 0x80);\r
-                               d.writeByte(len>>16);\r
-                               d.writeByte(len>>8);\r
-                               d.writeByte(len);\r
-                       } else {\r
-                               d.writeByte(4 | 0x80);\r
-                               d.writeByte(len>>24);\r
-                               d.writeByte(len>>16);\r
-                               d.writeByte(len>>8);\r
-                               d.writeByte(len);\r
-                       }\r
-                       d.writeBytes(data);\r
-                       d.position=0;\r
-                       return d;\r
-                       \r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/IAsn1Type.as
deleted file mode 100755 (executable)
index f4f2112..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/**\r
- * IAsn1Type\r
- * \r
- * An interface for Asn-1 types.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public interface IAsn1Type\r
-       {\r
-               function getType():uint;\r
-               function getLength():uint;\r
-               \r
-               function toDER():ByteArray;\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Integer.as
deleted file mode 100755 (executable)
index e2f045c..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/**\r
- * Integer\r
- * \r
- * An ASN1 type for an Integer, represented with a BigInteger\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import com.hurlant.math.BigInteger;\r
-       import flash.utils.ByteArray;\r
-\r
-       public class Integer extends BigInteger implements IAsn1Type\r
-       {\r
-               private var type:uint;\r
-               private var len:uint;\r
-               \r
-               public function Integer(type:uint, length:uint, b:ByteArray) {\r
-                       this.type = type;\r
-                       this.len = length;\r
-                       super(b);\r
-               }\r
-               \r
-               public function getLength():uint\r
-               {\r
-                       return len;\r
-               }\r
-               \r
-               public function getType():uint\r
-               {\r
-                       return type;\r
-               }\r
-               \r
-               override public function toString(radix:Number=0):String {\r
-                       return DER.indent+"Integer["+type+"]["+len+"]["+super.toString(16)+"]";\r
-               }\r
-               \r
-               public function toDER():ByteArray {\r
-                       return null;\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/OID.as
deleted file mode 100755 (executable)
index 4d43d95..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/**\r
- * OID\r
- * \r
- * A list of various ObjectIdentifiers.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       public class OID\r
-       {\r
-\r
-               public static const RSA_ENCRYPTION:String           = "1.2.840.113549.1.1.1";\r
-               public static const MD2_WITH_RSA_ENCRYPTION:String  = "1.2.840.113549.1.1.2";\r
-               public static const MD5_WITH_RSA_ENCRYPTION:String  = "1.2.840.113549.1.1.4";\r
-               public static const SHA1_WITH_RSA_ENCRYPTION:String = "1.2.840.113549.1.1.5";\r
-               public static const MD2_ALGORITHM:String = "1.2.840.113549.2.2";\r
-               public static const MD5_ALGORITHM:String = "1.2.840.113549.2.5";\r
-               public static const DSA:String = "1.2.840.10040.4.1";\r
-               public static const DSA_WITH_SHA1:String = "1.2.840.10040.4.3";\r
-               public static const DH_PUBLIC_NUMBER:String = "1.2.840.10046.2.1";\r
-               public static const SHA1_ALGORITHM:String = "1.3.14.3.2.26";\r
-               \r
-               public static const COMMON_NAME:String = "2.5.4.3";\r
-               public static const SURNAME:String = "2.5.4.4";\r
-               public static const COUNTRY_NAME:String = "2.5.4.6";\r
-               public static const LOCALITY_NAME:String = "2.5.4.7";\r
-               public static const STATE_NAME:String = "2.5.4.8";\r
-               public static const ORGANIZATION_NAME:String = "2.5.4.10";\r
-               public static const ORG_UNIT_NAME:String = "2.5.4.11";\r
-               public static const TITLE:String = "2.5.4.12";\r
-\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/ObjectIdentifier.as
deleted file mode 100755 (executable)
index 932acd7..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/**\r
- * ObjectIdentifier\r
- * \r
- * An ASN1 type for an ObjectIdentifier\r
- * We store the oid in an Array.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class ObjectIdentifier implements IAsn1Type\r
-       {\r
-               private var type:uint;\r
-               private var len:uint;\r
-               private var oid:Array;\r
-               \r
-               public function ObjectIdentifier(type:uint, length:uint, b:*) {\r
-                       this.type = type;\r
-                       this.len = length;\r
-                       if (b is ByteArray) {\r
-                               parse(b as ByteArray);\r
-                       } else if (b is String) {\r
-                               generate(b as String);\r
-                       } else {\r
-                               throw new Error("Invalid call to new ObjectIdentifier");\r
-                       }\r
-               }\r
-               \r
-               private function generate(s:String):void {\r
-                       oid = s.split(".");\r
-               }\r
-               \r
-               private function parse(b:ByteArray):void {\r
-                       // parse stuff\r
-                       // first byte = 40*value1 + value2\r
-                       var o:uint = b.readUnsignedByte();\r
-                       var a:Array = []\r
-                       a.push(uint(o/40));\r
-                       a.push(uint(o%40));\r
-                       var v:uint = 0;\r
-                       while (b.bytesAvailable>0) {\r
-                               o = b.readUnsignedByte();\r
-                               var last:Boolean = (o&0x80)==0;\r
-                               o &= 0x7f;\r
-                               v = v*128 + o;\r
-                               if (last) {\r
-                                       a.push(v);\r
-                                       v = 0;\r
-                               }\r
-                       }\r
-                       oid = a;\r
-               }\r
-               \r
-               public function getLength():uint\r
-               {\r
-                       return len;\r
-               }\r
-               \r
-               public function getType():uint\r
-               {\r
-                       return type;\r
-               }\r
-               \r
-               public function toDER():ByteArray {\r
-                       var tmp:Array = [];\r
-                       tmp[0] = oid[0]*40 + oid[1];\r
-                       for (var i:int=2;i<oid.length;i++) {\r
-                               var v:int = parseInt(oid[i]);\r
-                               if (v<128) {\r
-                                       tmp.push(v);\r
-                               } else if (v<128*128) {\r
-                                       tmp.push( (v>>7)|0x80 );\r
-                                       tmp.push( v&0x7f );\r
-                               } else if (v<128*128*128) {\r
-                                       tmp.push( (v>>14)|0x80 );\r
-                                       tmp.push( (v>>7)&0x7f | 0x80 );\r
-                                       tmp.push( v&0x7f);\r
-                               } else if (v<128*128*128*128) {\r
-                                       tmp.push( (v>>21)|0x80 );\r
-                                       tmp.push( (v>>14) & 0x7f | 0x80 );\r
-                                       tmp.push( (v>>7) & 0x7f | 0x80 );\r
-                                       tmp.push( v & 0x7f );\r
-                               } else {\r
-                                       throw new Error("OID element bigger than we thought. :(");\r
-                               }\r
-                       }\r
-                       len = tmp.length;\r
-                       if (type==0) {\r
-                               type = 6;\r
-                       }\r
-                       tmp.unshift(len); // assume length is small enough to fit here.\r
-                       tmp.unshift(type);\r
-                       var b:ByteArray = new ByteArray;\r
-                       for (i=0;i<tmp.length;i++) {\r
-                               b[i] = tmp[i];\r
-                       }\r
-                       return b;\r
-               }\r
-\r
-               public function toString():String {\r
-                       return DER.indent+oid.join(".");\r
-               }\r
-               \r
-               public function dump():String {\r
-                       return "OID["+type+"]["+len+"]["+toString()+"]";\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PEM.as
deleted file mode 100755 (executable)
index 5693e76..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/**\r
- * PEM\r
- * \r
- * A class to parse some PEM stuff.\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import com.hurlant.crypto.rsa.RSAKey;\r
-       import com.hurlant.math.BigInteger;\r
-       import com.hurlant.util.Base64;\r
-       \r
-       import flash.utils.ByteArray;\r
-       import com.hurlant.util.Hex;\r
-       \r
-       public class PEM\r
-       {\r
-               private static const RSA_PRIVATE_KEY_HEADER:String = "-----BEGIN RSA PRIVATE KEY-----";\r
-               private static const RSA_PRIVATE_KEY_FOOTER:String = "-----END RSA PRIVATE KEY-----";\r
-               private static const RSA_PUBLIC_KEY_HEADER:String = "-----BEGIN PUBLIC KEY-----";\r
-               private static const RSA_PUBLIC_KEY_FOOTER:String = "-----END PUBLIC KEY-----";\r
-               private static const CERTIFICATE_HEADER:String = "-----BEGIN CERTIFICATE-----";\r
-               private static const CERTIFICATE_FOOTER:String = "-----END CERTIFICATE-----";\r
-               \r
-               \r
-               \r
-               /**\r
-                * \r
-                * Read a structure encoded according to\r
-                * ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-1v2.asc\r
-                * section 11.1.2\r
-                * \r
-                * @param str\r
-                * @return \r
-                * \r
-                */\r
-               public static function readRSAPrivateKey(str:String):RSAKey {\r
-                       var der:ByteArray = extractBinary(RSA_PRIVATE_KEY_HEADER, RSA_PRIVATE_KEY_FOOTER, str);\r
-                       if (der==null) return null;\r
-                       var obj:* = DER.parse(der);\r
-                       if (obj is Array) {\r
-                               var arr:Array = obj as Array;\r
-                               // arr[0] is Version. should be 0. should be checked. shoulda woulda coulda.\r
-                               return new RSAKey(\r
-                                       arr[1],                         // N\r
-                                       arr[2].valueOf(),       // E\r
-                                       arr[3],                         // D\r
-                                       arr[4],                         // P\r
-                                       arr[5],                         // Q\r
-                                       arr[6],                         // DMP1\r
-                                       arr[7],                         // DMQ1 \r
-                                       arr[8]);                        // IQMP\r
-                       } else {\r
-                               // dunno\r
-                               return null;\r
-                       }\r
-               }\r
-               \r
-               \r
-               /**\r
-                * Read a structure encoded according to some spec somewhere\r
-                * Also, follows some chunk from\r
-                * ftp://ftp.rsasecurity.com/pub/pkcs/ascii/pkcs-1v2.asc\r
-                * section 11.1\r
-                * \r
-                * @param str\r
-                * @return \r
-                * \r
-                */\r
-               public static function readRSAPublicKey(str:String):RSAKey {\r
-                       var der:ByteArray = extractBinary(RSA_PUBLIC_KEY_HEADER, RSA_PUBLIC_KEY_FOOTER, str);\r
-                       if (der==null) return null;\r
-                       var obj:* = DER.parse(der);\r
-                       if (obj is Array) {\r
-                               var arr:Array = obj as Array;\r
-                               // arr[0] = [ <some crap that means "rsaEncryption">, null ]; ( apparently, that's an X-509 Algorithm Identifier.\r
-                               if (arr[0][0].toString()!=OID.RSA_ENCRYPTION) {\r
-                                       return null;\r
-                               }\r
-                               // arr[1] is a ByteArray begging to be parsed as DER\r
-                               arr[1].position = 1; // there's a 0x00 byte up front. find out why later. like, read a spec.\r
-                               obj = DER.parse(arr[1]);\r
-                               if (obj is Array) {\r
-                                       arr = obj as Array;\r
-                                       // arr[0] = modulus\r
-                                       // arr[1] = public expt.\r
-                                       return new RSAKey(arr[0], arr[1]);\r
-                               } else {\r
-                                       return null;\r
-                               }\r
-                       } else {\r
-                               // dunno\r
-                               return null;\r
-                       }\r
-               }\r
-\r
-               public static function readCertIntoArray(str:String):ByteArray {\r
-                       var tmp:ByteArray = extractBinary(CERTIFICATE_HEADER, CERTIFICATE_FOOTER, str);\r
-                       return tmp;\r
-               }\r
-               \r
-               private static function extractBinary(header:String, footer:String, str:String):ByteArray {\r
-                       var i:int = str.indexOf(header);\r
-                       if (i==-1) return null;\r
-                       i += header.length;\r
-                       var j:int = str.indexOf(footer);\r
-                       if (j==-1) return null;\r
-                       var b64:String = str.substring(i, j);\r
-                       // remove whitesapces.\r
-                       b64 = b64.replace(/\s/mg, '');\r
-                       // decode\r
-                       return Base64.decodeToByteArray(b64);\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/PrintableString.as
deleted file mode 100755 (executable)
index ed1775e..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/**\r
- * PrintableString\r
- * \r
- * An ASN1 type for a PrintableString, held within a String\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class PrintableString implements IAsn1Type\r
-       {\r
-               protected var type:uint;\r
-               protected var len:uint;\r
-               protected var str:String;\r
-               \r
-               public function PrintableString(type:uint, length:uint) {\r
-                       this.type = type;\r
-                       this.len = length;\r
-               }\r
-               \r
-               public function getLength():uint\r
-               {\r
-                       return len;\r
-               }\r
-               \r
-               public function getType():uint\r
-               {\r
-                       return type;\r
-               }\r
-               \r
-               public function setString(s:String):void {\r
-                       str = s;\r
-               }\r
-               public function getString():String {\r
-                       return str;\r
-               }\r
-               \r
-               public function toString():String {\r
-                       return DER.indent+str;\r
-               }\r
-               \r
-               public function toDER():ByteArray {\r
-                       return null; // XXX not implemented\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Sequence.as
deleted file mode 100755 (executable)
index c352414..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/**\r
- * Sequence\r
- * \r
- * An ASN1 type for a Sequence, implemented as an Array\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public dynamic class Sequence extends Array implements IAsn1Type\r
-       {\r
-               protected var type:uint;\r
-               protected var len:uint;\r
-               \r
-               public function Sequence(type:uint = 0x30, length:uint = 0x00) {\r
-                       this.type = type;\r
-                       this.len = length;\r
-               }\r
-               \r
-               public function getLength():uint\r
-               {\r
-                       return len;\r
-               }\r
-               \r
-               public function getType():uint\r
-               {\r
-                       return type;\r
-               }\r
-\r
-               public function toDER():ByteArray {\r
-                       var tmp:ByteArray = new ByteArray;\r
-                       for (var i:int=0;i<length;i++) {\r
-                               var e:IAsn1Type = this[i];\r
-                               if (e == null) { // XXX Arguably, I could have a der.Null class instead\r
-                                       tmp.writeByte(0x05);\r
-                                       tmp.writeByte(0x00);\r
-                               } else {\r
-                                       tmp.writeBytes(e.toDER());\r
-                               }\r
-                       }\r
-                       return DER.wrapDER(type, tmp);\r
-               }\r
-               \r
-               public function toString():String {\r
-                       var s:String = DER.indent;\r
-                       DER.indent += "    ";\r
-                       var t:String = "";\r
-                       for (var i:int=0;i<length;i++) {\r
-                               if (this[i]==null) continue;\r
-                               var found:Boolean = false;\r
-                               for (var key:String in this) {\r
-                                       if ( (i.toString()!=key) && this[i]==this[key]) {\r
-                                               t += key+": "+this[i]+"\n";\r
-                                               found = true;\r
-                                               break;\r
-                                       }\r
-                               }\r
-                               if (!found) t+=this[i]+"\n";\r
-                       }\r
-//                     var t:String = join("\n");\r
-                       DER.indent= s;\r
-                       return DER.indent+"Sequence["+type+"]["+len+"][\n"+t+"\n"+s+"]";\r
-               }\r
-               \r
-               /////////\r
-               \r
-               public function findAttributeValue(oid:String):IAsn1Type {\r
-                       for each (var set:* in this) {\r
-                               if (set is Set) {\r
-                                       var child:* = set[0];\r
-                                       if (child is Sequence) {\r
-                                               var tmp:* = child[0];\r
-                                               if (tmp is ObjectIdentifier) {\r
-                                                       var id:ObjectIdentifier = tmp as ObjectIdentifier;\r
-                                                       if (id.toString()==oid) {\r
-                                                               return child[1] as IAsn1Type;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-                       return null;\r
-               }\r
-               \r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Set.as
deleted file mode 100755 (executable)
index c0bfa47..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/**\r
- * Set\r
- * \r
- * An ASN1 type for an Set, that extends a Sequence\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       public dynamic class Set extends Sequence implements IAsn1Type\r
-       {\r
-               public function Set(type:uint = 0x31, length:uint = 0x00) {\r
-                       super(type, length);\r
-               }\r
-\r
-\r
-               public override function toString():String {\r
-                       var s:String = DER.indent;\r
-                       DER.indent += "    ";\r
-                       var t:String = join("\n");\r
-                       DER.indent= s;\r
-                       return DER.indent+"Set["+type+"]["+len+"][\n"+t+"\n"+s+"]";\r
-               }\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/Type.as
deleted file mode 100755 (executable)
index 3dc6dcd..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/**\r
- * Type\r
- * \r
- * A few Asn-1 structures\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import com.hurlant.util.Hex;\r
-       \r
-       public class Type\r
-       {\r
-               public static const TLS_CERT:Array = [ \r
-                       {name:"signedCertificate", extract:true, value: [\r
-                               {name:"versionHolder", optional:true, value: [\r
-                                       {name:"version"}\r
-                               ], defaultValue: function():Sequence{ \r
-                                               var s:Sequence = new Sequence(0, 0); \r
-                                               var v:Integer = new Integer(2,1, Hex.toArray("00"));\r
-                                               s.push(v);\r
-                                               s.version = v;\r
-                                               return s;\r
-                                       }()\r
-                               },\r
-                               {name:"serialNumber"},\r
-                               {name:"signature", value: [\r
-                                       {name:"algorithmId"}\r
-                               ]},\r
-                               {name:"issuer", extract:true, value: [ \r
-                                       {name:"type"},\r
-                                       {name:"value"}\r
-                               ]},\r
-                               {name:"validity", value: [\r
-                                       {name:"notBefore"},\r
-                                       {name:"notAfter"}\r
-                               ]},\r
-                               {name:"subject", extract:true, value: [\r
-                               ]},\r
-                               {name:"subjectPublicKeyInfo", value: [\r
-                                       {name:"algorithm", value: [\r
-                                               {name:"algorithmId"}\r
-                                       ]},\r
-                                       {name:"subjectPublicKey"}\r
-                               ]},\r
-                               {name:"extensions", value: [\r
-                               ]}\r
-                       ]}, \r
-                       {name:"algorithmIdentifier",value:[\r
-                               {name:"algorithmId"}\r
-                       ]}, \r
-                       {name:"encrypted", value:null}\r
-               ];\r
-               public static const CERTIFICATE:Array = [\r
-                       {name:"tbsCertificate", value:[\r
-                               {name:"tag0", value:[\r
-                                       {name:"version"}\r
-                               ]},\r
-                               {name:"serialNumber"},\r
-                               {name:"signature"},\r
-                               {name:"issuer", value:[\r
-                                       {name:"type"},\r
-                                       {name:"value"}\r
-                               ]},\r
-                               {name:"validity", value:[\r
-                                       {name:"notBefore"},\r
-                                       {name:"notAfter"}\r
-                               ]},\r
-                               {name:"subject"},\r
-                               {name:"subjectPublicKeyInfo", value:[\r
-                                       {name:"algorithm"},\r
-                                       {name:"subjectPublicKey"}\r
-                               ]},\r
-                               {name:"issuerUniqueID"},\r
-                               {name:"subjectUniqueID"},\r
-                               {name:"extensions"}\r
-                       ]},\r
-                       {name:"signatureAlgorithm"},\r
-                       {name:"signatureValue"}\r
-               ];\r
-               public static const RSA_PUBLIC_KEY:Array = [\r
-                       {name:"modulus"},\r
-                       {name:"publicExponent"}\r
-               ];\r
-               public static const RSA_SIGNATURE:Array = [\r
-                       {name:"algorithm", value:[\r
-                               {name:"algorithmId"}\r
-                        ]},\r
-                       {name:"hash"}\r
-               ];\r
-               \r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/flash-src/com/hurlant/util/der/UTCTime.as
deleted file mode 100755 (executable)
index 4e49686..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/**\r
- * UTCTime\r
- * \r
- * An ASN1 type for UTCTime, represented as a Date\r
- * Copyright (c) 2007 Henri Torgemane\r
- * \r
- * See LICENSE.txt for full license information.\r
- */\r
-package com.hurlant.util.der\r
-{\r
-       import flash.utils.ByteArray;\r
-       \r
-       public class UTCTime implements IAsn1Type\r
-       {\r
-               protected var type:uint;\r
-               protected var len:uint;\r
-               public var date:Date;\r
-               \r
-               public function UTCTime(type:uint, len:uint)\r
-               {\r
-                       this.type = type;\r
-                       this.len = len;\r
-               }\r
-               \r
-               public function getLength():uint\r
-               {\r
-                       return len;\r
-               }\r
-               \r
-               public function getType():uint\r
-               {\r
-                       return type;\r
-               }\r
-               \r
-               public function setUTCTime(str:String):void {\r
-                       \r
-                       var year:uint = parseInt(str.substr(0, 2));\r
-                       if (year<50) {\r
-                               year+=2000;\r
-                       } else {\r
-                               year+=1900;\r
-                       }\r
-                       var month:uint = parseInt(str.substr(2,2));\r
-                       var day:uint = parseInt(str.substr(4,2));\r
-                       var hour:uint = parseInt(str.substr(6,2));\r
-                       var minute:uint = parseInt(str.substr(8,2));\r
-                       // XXX this could be off by up to a day. parse the rest. someday.\r
-                       date = new Date(year, month-1, day, hour, minute);\r
-               }\r
-               \r
-               \r
-               public function toString():String {\r
-                       return DER.indent+"UTCTime["+type+"]["+len+"]["+date+"]";\r
-               }\r
-               \r
-               public function toDER():ByteArray {\r
-                       return null // XXX not implemented\r
-               }\r
-       }\r
-}
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/sample.html b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/sample.html
deleted file mode 100644 (file)
index 8ac4dca..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-  Lincense: Public Domain
--->
-
-<html><head>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-  <title>Sample of web_socket.js</title>
-  
-  <!-- Include these three JS files: -->
-  <script type="text/javascript" src="swfobject.js"></script>
-  <script type="text/javascript" src="web_socket.js"></script>
-
-  <script type="text/javascript">
-    
-    // Set URL of your WebSocketMain.swf here:
-    WEB_SOCKET_SWF_LOCATION = "WebSocketMain.swf";
-    // Set this to dump debug message from Flash to console.log:
-    WEB_SOCKET_DEBUG = true;
-    
-    // Everything below is the same as using standard WebSocket.
-    
-    var ws;
-    
-    function init() {
-
-      // Connect to Web Socket.
-      // Change host/port here to your own Web Socket server.
-      ws = new WebSocket("ws://localhost:10081/");
-
-      // Set event handlers.
-      ws.onopen = function() {
-        output("onopen");
-      };
-      ws.onmessage = function(e) {
-        // e.data contains received string.
-        output("onmessage: " + e.data);
-      };
-      ws.onclose = function() {
-        output("onclose");
-      };
-      ws.onerror = function() {
-        output("onerror");
-      };
-
-    }
-    
-    function onSubmit() {
-      var input = document.getElementById("input");
-      // You can send message to the Web Socket using ws.send.
-      ws.send(input.value);
-      output("send: " + input.value);
-      input.value = "";
-      input.focus();
-    }
-    
-    function onCloseClick() {
-      ws.close();
-    }
-    
-    function output(str) {
-      var log = document.getElementById("log");
-      var escaped = str.replace(/&/, "&amp;").replace(/</, "&lt;").
-        replace(/>/, "&gt;").replace(/"/, "&quot;"); // "
-      log.innerHTML = escaped + "<br>" + log.innerHTML;
-    }
-
-  </script>
-</head><body onload="init();">
-  <form onsubmit="onSubmit(); return false;">
-    <input type="text" id="input">
-    <input type="submit" value="Send">
-    <button onclick="onCloseClick(); return false;">close</button>
-  </form>
-  <div id="log"></div>
-</body></html>
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/swfobject.js b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/swfobject.js
deleted file mode 100644 (file)
index 8eafe9d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*     SWFObject v2.2 <http://code.google.com/p/swfobject/> 
-       is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
-*/
-var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
\ No newline at end of file
diff --git a/node/node_modules/socket.io-client/lib/vendor/web-socket-js/web_socket.js b/node/node_modules/socket.io-client/lib/vendor/web-socket-js/web_socket.js
deleted file mode 100644 (file)
index bed899c..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-// Copyright: Hiroshi Ichikawa <http://gimite.net/en/>
-// License: New BSD License
-// Reference: http://dev.w3.org/html5/websockets/
-// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol
-
-(function() {
-  
-  if (window.WebSocket) return;
-
-  var console = window.console;
-  if (!console || !console.log || !console.error) {
-    console = {log: function(){ }, error: function(){ }};
-  }
-  
-  if (!swfobject.hasFlashPlayerVersion("10.0.0")) {
-    console.error("Flash Player >= 10.0.0 is required.");
-    return;
-  }
-  if (location.protocol == "file:") {
-    console.error(
-      "WARNING: web-socket-js doesn't work in file:///... URL " +
-      "unless you set Flash Security Settings properly. " +
-      "Open the page via Web server i.e. http://...");
-  }
-
-  /**
-   * This class represents a faux web socket.
-   * @param {string} url
-   * @param {array or string} protocols
-   * @param {string} proxyHost
-   * @param {int} proxyPort
-   * @param {string} headers
-   */
-  WebSocket = function(url, protocols, proxyHost, proxyPort, headers) {
-    var self = this;
-    self.__id = WebSocket.__nextId++;
-    WebSocket.__instances[self.__id] = self;
-    self.readyState = WebSocket.CONNECTING;
-    self.bufferedAmount = 0;
-    self.__events = {};
-    if (!protocols) {
-      protocols = [];
-    } else if (typeof protocols == "string") {
-      protocols = [protocols];
-    }
-    // Uses setTimeout() to make sure __createFlash() runs after the caller sets ws.onopen etc.
-    // Otherwise, when onopen fires immediately, onopen is called before it is set.
-    setTimeout(function() {
-      WebSocket.__addTask(function() {
-        WebSocket.__flash.create(
-            self.__id, url, protocols, proxyHost || null, proxyPort || 0, headers || null);
-      });
-    }, 0);
-  };
-
-  /**
-   * Send data to the web socket.
-   * @param {string} data  The data to send to the socket.
-   * @return {boolean}  True for success, false for failure.
-   */
-  WebSocket.prototype.send = function(data) {
-    if (this.readyState == WebSocket.CONNECTING) {
-      throw "INVALID_STATE_ERR: Web Socket connection has not been established";
-    }
-    // We use encodeURIComponent() here, because FABridge doesn't work if
-    // the argument includes some characters. We don't use escape() here
-    // because of this:
-    // https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#escape_and_unescape_Functions
-    // But it looks decodeURIComponent(encodeURIComponent(s)) doesn't
-    // preserve all Unicode characters either e.g. "\uffff" in Firefox.
-    // Note by wtritch: Hopefully this will not be necessary using ExternalInterface.  Will require
-    // additional testing.
-    var result = WebSocket.__flash.send(this.__id, encodeURIComponent(data));
-    if (result < 0) { // success
-      return true;
-    } else {
-      this.bufferedAmount += result;
-      return false;
-    }
-  };
-
-  /**
-   * Close this web socket gracefully.
-   */
-  WebSocket.prototype.close = function() {
-    if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) {
-      return;
-    }
-    this.readyState = WebSocket.CLOSING;
-    WebSocket.__flash.close(this.__id);
-  };
-
-  /**
-   * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
-   *
-   * @param {string} type
-   * @param {function} listener
-   * @param {boolean} useCapture
-   * @return void
-   */
-  WebSocket.prototype.addEventListener = function(type, listener, useCapture) {
-    if (!(type in this.__events)) {
-      this.__events[type] = [];
-    }
-    this.__events[type].push(listener);
-  };
-
-  /**
-   * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
-   *
-   * @param {string} type
-   * @param {function} listener
-   * @param {boolean} useCapture
-   * @return void
-   */
-  WebSocket.prototype.removeEventListener = function(type, listener, useCapture) {
-    if (!(type in this.__events)) return;
-    var events = this.__events[type];
-    for (var i = events.length - 1; i >= 0; --i) {
-      if (events[i] === listener) {
-        events.splice(i, 1);
-        break;
-      }
-    }
-  };
-
-  /**
-   * Implementation of {@link <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration">DOM 2 EventTarget Interface</a>}
-   *
-   * @param {Event} event
-   * @return void
-   */
-  WebSocket.prototype.dispatchEvent = function(event) {
-    var events = this.__events[event.type] || [];
-    for (var i = 0; i < events.length; ++i) {
-      events[i](event);
-    }
-    var handler = this["on" + event.type];
-    if (handler) handler(event);
-  };
-
-  /**
-   * Handles an event from Flash.
-   * @param {Object} flashEvent
-   */
-  WebSocket.prototype.__handleEvent = function(flashEvent) {
-    if ("readyState" in flashEvent) {
-      this.readyState = flashEvent.readyState;
-    }
-    if ("protocol" in flashEvent) {
-      this.protocol = flashEvent.protocol;
-    }
-    
-    var jsEvent;
-    if (flashEvent.type == "open" || flashEvent.type == "error") {
-      jsEvent = this.__createSimpleEvent(flashEvent.type);
-    } else if (flashEvent.type == "close") {
-      // TODO implement jsEvent.wasClean
-      jsEvent = this.__createSimpleEvent("close");
-    } else if (flashEvent.type == "message") {
-      var data = decodeURIComponent(flashEvent.message);
-      jsEvent = this.__createMessageEvent("message", data);
-    } else {
-      throw "unknown event type: " + flashEvent.type;
-    }
-    
-    this.dispatchEvent(jsEvent);
-  };
-  
-  WebSocket.prototype.__createSimpleEvent = function(type) {
-    if (document.createEvent && window.Event) {
-      var event = document.createEvent("Event");
-      event.initEvent(type, false, false);
-      return event;
-    } else {
-      return {type: type, bubbles: false, cancelable: false};
-    }
-  };
-  
-  WebSocket.prototype.__createMessageEvent = function(type, data) {
-    if (document.createEvent && window.MessageEvent && !window.opera) {
-      var event = document.createEvent("MessageEvent");
-      event.initMessageEvent("message", false, false, data, null, null, window, null);
-      return event;
-    } else {
-      // IE and Opera, the latter one truncates the data parameter after any 0x00 bytes.
-      return {type: type, data: data, bubbles: false, cancelable: false};
-    }
-  };
-  
-  /**
-   * Define the WebSocket readyState enumeration.
-   */
-  WebSocket.CONNECTING = 0;
-  WebSocket.OPEN = 1;
-  WebSocket.CLOSING = 2;
-  WebSocket.CLOSED = 3;
-
-  WebSocket.__flash = null;
-  WebSocket.__instances = {};
-  WebSocket.__tasks = [];
-  WebSocket.__nextId = 0;
-  
-  /**
-   * Load a new flash security policy file.
-   * @param {string} url
-   */
-  WebSocket.loadFlashPolicyFile = function(url){
-    WebSocket.__addTask(function() {
-      WebSocket.__flash.loadManualPolicyFile(url);
-    });
-  };
-
-  /**
-   * Loads WebSocketMain.swf and creates WebSocketMain object in Flash.
-   */
-  WebSocket.__initialize = function() {
-    if (WebSocket.__flash) return;
-    
-    if (WebSocket.__swfLocation) {
-      // For backword compatibility.
-      window.WEB_SOCKET_SWF_LOCATION = WebSocket.__swfLocation;
-    }
-    if (!window.WEB_SOCKET_SWF_LOCATION) {
-      console.error("[WebSocket] set WEB_SOCKET_SWF_LOCATION to location of WebSocketMain.swf");
-      return;
-    }
-    var container = document.createElement("div");
-    container.id = "webSocketContainer";
-    // Hides Flash box. We cannot use display: none or visibility: hidden because it prevents
-    // Flash from loading at least in IE. So we move it out of the screen at (-100, -100).
-    // But this even doesn't work with Flash Lite (e.g. in Droid Incredible). So with Flash
-    // Lite, we put it at (0, 0). This shows 1x1 box visible at left-top corner but this is
-    // the best we can do as far as we know now.
-    container.style.position = "absolute";
-    if (WebSocket.__isFlashLite()) {
-      container.style.left = "0px";
-      container.style.top = "0px";
-    } else {
-      container.style.left = "-100px";
-      container.style.top = "-100px";
-    }
-    var holder = document.createElement("div");
-    holder.id = "webSocketFlash";
-    container.appendChild(holder);
-    document.body.appendChild(container);
-    // See this article for hasPriority:
-    // http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-7ffd.html
-    swfobject.embedSWF(
-      WEB_SOCKET_SWF_LOCATION,
-      "webSocketFlash",
-      "1" /* width */,
-      "1" /* height */,
-      "10.0.0" /* SWF version */,
-      null,
-      null,
-      {hasPriority: true, swliveconnect : true, allowScriptAccess: "always"},
-      null,
-      function(e) {
-        if (!e.success) {
-          console.error("[WebSocket] swfobject.embedSWF failed");
-        }
-      });
-  };
-  
-  /**
-   * Called by Flash to notify JS that it's fully loaded and ready
-   * for communication.
-   */
-  WebSocket.__onFlashInitialized = function() {
-    // We need to set a timeout here to avoid round-trip calls
-    // to flash during the initialization process.
-    setTimeout(function() {
-      WebSocket.__flash = document.getElementById("webSocketFlash");
-      WebSocket.__flash.setCallerUrl(location.href);
-      WebSocket.__flash.setDebug(!!window.WEB_SOCKET_DEBUG);
-      for (var i = 0; i < WebSocket.__tasks.length; ++i) {
-        WebSocket.__tasks[i]();
-      }
-      WebSocket.__tasks = [];
-    }, 0);
-  };
-  
-  /**
-   * Called by Flash to notify WebSockets events are fired.
-   */
-  WebSocket.__onFlashEvent = function() {
-    setTimeout(function() {
-      try {
-        // Gets events using receiveEvents() instead of getting it from event object
-        // of Flash event. This is to make sure to keep message order.
-        // It seems sometimes Flash events don't arrive in the same order as they are sent.
-        var events = WebSocket.__flash.receiveEvents();
-        for (var i = 0; i < events.length; ++i) {
-          WebSocket.__instances[events[i].webSocketId].__handleEvent(events[i]);
-        }
-      } catch (e) {
-        console.error(e);
-      }
-    }, 0);
-    return true;
-  };
-  
-  // Called by Flash.
-  WebSocket.__log = function(message) {
-    console.log(decodeURIComponent(message));
-  };
-  
-  // Called by Flash.
-  WebSocket.__error = function(message) {
-    console.error(decodeURIComponent(message));
-  };
-  
-  WebSocket.__addTask = function(task) {
-    if (WebSocket.__flash) {
-      task();
-    } else {
-      WebSocket.__tasks.push(task);
-    }
-  };
-  
-  /**
-   * Test if the browser is running flash lite.
-   * @return {boolean} True if flash lite is running, false otherwise.
-   */
-  WebSocket.__isFlashLite = function() {
-    if (!window.navigator || !window.navigator.mimeTypes) {
-      return false;
-    }
-    var mimeType = window.navigator.mimeTypes["application/x-shockwave-flash"];
-    if (!mimeType || !mimeType.enabledPlugin || !mimeType.enabledPlugin.filename) {
-      return false;
-    }
-    return mimeType.enabledPlugin.filename.match(/flashlite/i) ? true : false;
-  };
-  
-  if (!window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION) {
-    if (window.addEventListener) {
-      window.addEventListener("load", function(){
-        WebSocket.__initialize();
-      }, false);
-    } else {
-      window.attachEvent("onload", function(){
-        WebSocket.__initialize();
-      });
-    }
-  }
-  
-})();
diff --git a/node/node_modules/socket.io-client/package.json b/node/node_modules/socket.io-client/package.json
deleted file mode 100644 (file)
index 5ebfdf6..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-    "name": "socket.io-client"
-  , "description": "Socket.IO client for the browser and node.js"
-  , "version": "0.8.4"
-  , "main" : "./lib/io.js"
-  , "browserify": "./dist/socket.io.js"
-  , "homepage": "http://socket.io"
-  , "keywords": ["websocket", "socket", "realtime", "socket.io", "comet", "ajax"]
-  , "author": "Guillermo Rauch <guillermo@learnboost.com>"
-  , "contributors": [
-        { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }
-      , { "name": "Arnout Kazemier", "email": "info@3rd-eden.com" }
-      , { "name": "Vladimir Dronnikov", "email": "dronnikov@gmail.com" }
-      , { "name": "Einar Otto Stangvik", "email": "einaros@gmail.com" }
-    ]
-  , "repository": {
-        "type": "git"
-      , "url": "https://github.com/LearnBoost/socket.io-client.git"
-    }
-  , "dependencies": {
-        "uglify-js": "1.0.6"
-      , "websocket-client": "1.0.0"
-      , "xmlhttprequest": "1.2.2"
-    }
-  , "devDependencies": {
-        "expresso": "0.7.7"
-      , "express": "2.3.11"
-      , "jade": "0.12.1"
-      , "stylus": "0.13.3"
-      , "socket.io": "0.8.4"
-      , "socket.io-client": "0.8.4"
-    }
-  , "engines": { "node": ">= 0.4.0" }
-}
diff --git a/node/node_modules/socket.io-client/support/should.js b/node/node_modules/socket.io-client/support/should.js
deleted file mode 100644 (file)
index 2a8fb97..0000000
+++ /dev/null
@@ -1,1238 +0,0 @@
-
-/**
- * should.js by TJ Holowaychuk (MIT), adapted to run in browser and node.
- */
-
-(function (should) {
-
-  if ('undefined' != typeof exports) {
-    module.exports = exports = should = require('assert');
-  }
-
-  /**
-   * Expose constructor.
-   */
-
-  should.Assertion = Assertion;
-
-  /**
-   * Possible assertion flags.
-   */
-
-  var flags = {
-      not: ['be', 'have', 'include']
-    , an: ['instance']
-    , and: ['be', 'have', 'include', 'an']
-    , be: ['an']
-    , have: ['an', 'own']
-    , include: ['an']
-    , not: ['include', 'have', 'be']
-    , own: []
-    , instance: []
-  };
-
-  /**
-   * Extend Object.prototype.
-   */
-
-  if ('object' == typeof process) {
-    Object.defineProperty(
-        Object.prototype
-      , 'should'
-      , {
-            get: function () {
-              var self = this.valueOf()
-                , fn = function () {
-                    return new Assertion(self);
-                  };
-
-              if ('undefined' != typeof exports) {
-                fn.__proto__ = exports;
-                fn.exports = exports;
-              }
-
-              return fn;
-            }
-          , enumerable: false
-        }
-    );
-  } else {
-    Object.prototype.should = function () {
-      return new Assertion(this.valueOf());
-    };
-  }
-
-  /**
-   * Constructor
-   *
-   * @api private
-   */
-
-  function Assertion (obj) {
-    if (obj !== undefined) {
-      this.obj = obj;
-      this.flags = {};
-
-      var $flags = keys(flags);
-
-      for (var i = 0, l = $flags.length; i < l; i++) {
-        this[$flags[i]] = new FlaggedAssertion(this, $flags[i]);
-      }
-    }
-  };
-
-  /**
-   * Performs an assertion
-   *
-   * @api private
-   */
-
-  Assertion.prototype.assert = function (truth, msg, error) {
-    var msg = this.flags.not ? error : msg
-      , ok = this.flags.not ? !truth : truth;
-
-    if (!ok) {
-      throw new Error(msg);
-    }
-
-    this.flags = {};
-  };
-
-  /**
-   * Checks if the value is true
-   *
-   * @api public
-   */
-
-  Assertion.prototype.be_true = function () {
-    this.assert(
-        this.obj === true
-      , 'expected ' + i(this.obj) + ' to be true'
-      , 'expected ' + i(this.obj) + ' to not be true');
-    return this;
-  };
-
-  /**
-   * Checks if the value is true
-   *
-   * @api public
-   */
-
-  Assertion.prototype.be_false = function () {
-    this.assert(
-        this.obj === false
-      , 'expected ' + i(this.obj) + ' to be false'
-      , 'expected ' + i(this.obj) + ' to not be false'
-    );
-    return this;
-  };
-
-  /**
-   * Check if the value is truthy
-   *
-   * @api public
-   */
-
-  Assertion.prototype.ok = function () {
-    this.assert(
-        this.obj == true
-      , 'expected ' + i(this.obj) + ' to be true'
-      , 'expected ' + i(this.obj) + ' to not be true');
-  };
-
-  /**
-   * Checks if the array is empty.
-   *
-   * @api public
-   */
-
-  Assertion.prototype.empty = function () {
-    this.obj.should().have.property('length');
-    this.assert(
-        0 === this.obj.length
-      , 'expected ' + i(this.obj) + ' to be empty'
-      , 'expected ' + i(this.obj) + ' to not be empty');
-    return this;
-  };
-
-  /**
-   * Checks if the obj is arguments.
-   *
-   * @api public
-   */
-
-  Assertion.prototype.arguments = function () {
-    this.assert(
-        '[object Arguments]' == Object.prototype.toString.call(this.obj)
-      , 'expected ' + i(this.obj) + ' to be arguments'
-      , 'expected ' + i(this.obj) + ' to not be arguments');
-    return this;
-  };
-
-  /**
-   * Checks if the obj exactly equals another.
-   *
-   * @api public
-   */
-
-  Assertion.prototype.equal = function (obj) {
-    this.assert(
-        obj === this.obj
-      , 'expected ' + i(this.obj) + ' to equal ' + i(obj)
-      , 'expected ' + i(this.obj) + ' to not equal ' + i(obj));
-    return this;
-  };
-
-  /**
-   * Checks if the obj sortof equals another.
-   *
-   * @api public
-   */
-
-  Assertion.prototype.eql = function (obj) {
-    this.assert(
-        should.eql(obj, this.obj)
-      , 'expected ' + i(this.obj) + ' to sort of equal ' + i(obj)
-      , 'expected ' + i(this.obj) + ' to sort of not equal ' + i(obj));
-    return this;
-  };
-
-  /**
-   * Assert within start to finish (inclusive). 
-   *
-   * @param {Number} start
-   * @param {Number} finish
-   * @api public
-   */
-
-  Assertion.prototype.within = function (start, finish) {
-    var range = start + '..' + finish;
-    this.assert(
-        this.obj >= start && this.obj <= finish
-      , 'expected ' + i(this.obj) + ' to be within ' + range
-      , 'expected ' + i(this.obj) + ' to not be within ' + range);
-    return this;
-  };
-
-  /**
-   * Assert typeof. 
-   *
-   * @api public
-   */
-
-  Assertion.prototype.a = function (type) {
-    this.assert(
-        type == typeof this.obj
-      , 'expected ' + i(this.obj) + ' to be a ' + type
-      , 'expected ' + i(this.obj) + ' not to be a ' + type);
-    return this;
-  };
-
-  /**
-   * Assert instanceof. 
-   *
-   * @api public
-   */
-
-  Assertion.prototype.of = function (constructor) {
-    var name = constructor.name;
-    this.assert(
-        this.obj instanceof constructor
-      , 'expected ' + i(this.obj) + ' to be an instance of ' + name
-      , 'expected ' + i(this.obj) + ' not to be an instance of ' + name);
-    return this;
-  };
-
-  /**
-   * Assert numeric value above _n_.
-   *
-   * @param {Number} n
-   * @api public
-   */
-
-  Assertion.prototype.greaterThan =
-  Assertion.prototype.above = function (n) {
-    this.assert(
-        this.obj > n
-      , 'expected ' + i(this.obj) + ' to be above ' + n
-      , 'expected ' + i(this.obj) + ' to be below ' + n);
-    return this;
-  };
-
-  /**
-   * Assert numeric value below _n_.
-   *
-   * @param {Number} n
-   * @api public
-   */
-
-  Assertion.prototype.lessThan =
-  Assertion.prototype.below = function (n) {
-    this.assert(
-        this.obj < n
-      , 'expected ' + i(this.obj) + ' to be below ' + n
-      , 'expected ' + i(this.obj) + ' to be above ' + n);
-    return this;
-  };
-  
-  /**
-   * Assert string value matches _regexp_.
-   *
-   * @param {RegExp} regexp
-   * @api public
-   */
-
-  Assertion.prototype.match = function (regexp) {
-    this.assert(
-        regexp.exec(this.obj)
-      , 'expected ' + i(this.obj) + ' to match ' + regexp
-      , 'expected ' + i(this.obj) + ' not to match ' + regexp);
-    return this;
-  };
-
-  /**
-   * Assert property "length" exists and has value of _n_.
-   *
-   * @param {Number} n
-   * @api public
-   */
-
-  Assertion.prototype.length = function (n) {
-    this.obj.should().have.property('length');
-    var len = this.obj.length;
-    this.assert(
-        n == len
-      , 'expected ' + i(this.obj) + ' to have a length of ' + n + ' but got ' + len
-      , 'expected ' + i(this.obj) + ' to not have a length of ' + len);
-    return this;
-  };
-
-  /**
-   * Assert substring.
-   *
-   * @param {String} str
-   * @api public
-   */
-
-  Assertion.prototype.string = function(str){
-    this.obj.should().be.a('string');
-    this.assert(
-        ~this.obj.indexOf(str)
-      , 'expected ' + i(this.obj) + ' to include ' + i(str)
-      , 'expected ' + i(this.obj) + ' to not include ' + i(str));
-    return this;
-  };
-
-  /**
-   * Assert inclusion of object.
-   *
-   * @param {Object} obj
-   * @api public
-   */
-
-  Assertion.prototype.object = function(obj){
-    this.obj.should().be.a('object');
-    var included = true;
-    for (var key in obj) {
-      if (obj.hasOwnProperty(key) && !should.eql(obj[key], this.obj[key])) {
-        included = false;
-        break;
-      }
-    }
-    this.assert(
-        included
-      , 'expected ' + i(this.obj) + ' to include ' + i(obj)
-      , 'expected ' + i(this.obj) + ' to not include ' + i(obj));
-    return this;
-  };
-
-  /**
-   * Assert property _name_ exists, with optional _val_.
-   *
-   * @param {String} name
-   * @param {Mixed} val
-   * @api public
-   */
-
-  Assertion.prototype.property = function (name, val) {
-    if (this.flags.own) {
-      this.assert(
-          this.obj.hasOwnProperty(name)
-        , 'expected ' + i(this.obj) + ' to have own property ' + i(name)
-        , 'expected ' + i(this.obj) + ' to not have own property ' + i(name));
-      return this;
-    }
-
-    if (this.flags.not && undefined !== val) {
-      if (undefined === this.obj[name]) {
-        throw new Error(i(this.obj) + ' has no property ' + i(name));
-      }
-    } else {
-      this.assert(
-          undefined !== this.obj[name]
-        , 'expected ' + i(this.obj) + ' to have a property ' + i(name)
-        , 'expected ' + i(this.obj) + ' to not have a property ' + i(name));
-    }
-    
-    if (undefined !== val) {
-      this.assert(
-          val === this.obj[name]
-        , 'expected ' + i(this.obj) + ' to have a property ' + i(name)
-          + ' of ' + i(val) + ', but got ' + i(this.obj[name])
-        , 'expected ' + i(this.obj) + ' to not have a property ' + i(name)
-          + ' of ' + i(val));
-    }
-
-    this.obj = this.obj[name];
-    return this;
-  };
-
-  /**
-   * Assert that the array contains _obj_.
-   *
-   * @param {Mixed} obj
-   * @api public
-   */
-
-  Assertion.prototype.contain = function (obj) {
-    this.obj.should().be.an.instance.of(Array);
-    this.assert(
-        ~indexOf(this.obj, obj)
-      , 'expected ' + i(this.obj) + ' to contain ' + i(obj)
-      , 'expected ' + i(this.obj) + ' to not contain ' + i(obj));
-    return this;
-  };
-
-  /**
-   * Assert exact keys or inclusion of keys by using
-   * the `.include` modifier.
-   *
-   * @param {Array|String ...} keys
-   * @api public
-   */
-
-  Assertion.prototype.key =
-  Assertion.prototype.keys = function (keys) {
-    var str
-      , ok = true;
-
-    keys = keys instanceof Array
-      ? keys
-      : Array.prototype.slice.call(arguments);
-
-    if (!keys.length) throw new Error('keys required');
-
-    var actual = keys(this.obj)
-      , len = keys.length;
-
-    // Inclusion
-    ok = every(keys, function(key){
-      return ~indexOf(actual, key);
-    });
-
-    // Strict
-    if (!this.flags.not && !this.flags.include) {
-      ok = ok && keys.length == actual.length;
-    }
-
-    // Key string
-    if (len > 1) {
-      keys = map(keys, function(key){
-        return i(key);
-      });
-      var last = keys.pop();
-      str = keys.join(', ') + ', and ' + last;
-    } else {
-      str = i(keys[0]);
-    }
-
-    // Form
-    str = (len > 1 ? 'keys ' : 'key ') + str;
-
-    // Have / include
-    str = (this.flag.include ? 'include ' : 'have ') + str;
-
-    // Assertion
-    this.assert(
-        ok
-      , 'expected ' + i(this.obj) + ' to ' + str
-      , 'expected ' + i(this.obj) + ' to not ' + str);
-
-    return this;
-  };
-
-  /**
-   * Assertion with a flag.
-   *
-   * @api private
-   */
-
-  function FlaggedAssertion (parent, flag) {
-    this.parent = parent;
-    this.obj = parent.obj;
-
-    this.flag = flag;
-    this.flags = {};
-    this.flags[flag] = true;
-
-    for (var i in parent.flags) {
-      if (parent.flags.hasOwnProperty(i)) {
-        this.flags[i] = true;
-      }
-    }
-
-    var $flags = flags[flag];
-
-    for (var i = 0, l = $flags.length; i < l; i++) {
-      this[$flags[i]] = new FlaggedAssertion(this, $flags[i]);
-    }
-  };
-
-  /**
-   * Inherits from assertion
-   */
-
-  FlaggedAssertion.prototype = new Assertion;
-
-  /**
-   * Array every compatibility
-   *
-   * @see bit.ly/5Fq1N2
-   * @api public
-   */
-
-  function every (arr, fn, thisObj) {
-    var scope = thisObj || window;
-    for (var i = 0, j = arr.length; i < j; ++i) {
-      if (!fn.call(scope, arr[i], i, arr)) {
-        return false;
-      }
-    }
-    return true;
-  };
-
-  /**
-   * Array indexOf compatibility.
-   *
-   * @see bit.ly/a5Dxa2
-   * @api public
-   */
-
-  function indexOf (arr, o, i) {
-    if (Array.prototype.indexOf) {
-      return Array.prototype.indexOf.call(arr, o, i);
-    }
-
-    for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0
-        ; i < j && arr[i] !== o; i++);
-
-    return j <= i ? -1 : i;
-  };
-
-  /**
-   * Inspects an object.
-   *
-   * @see taken from node.js `util` module (copyright Joyent, MIT license)
-   * @api private
-   */
-
-  function i (obj, showHidden, depth) {
-    var seen = [];
-
-    function stylize (str) {
-      return str;
-    };
-
-    function format (value, recurseTimes) {
-      // Provide a hook for user-specified inspect functions.
-      // Check that value is an object with an inspect function on it
-      if (value && typeof value.inspect === 'function' &&
-          // Filter out the util module, it's inspect function is special
-          value !== exports &&
-          // Also filter out any prototype objects using the circular check.
-          !(value.constructor && value.constructor.prototype === value)) {
-        return value.inspect(recurseTimes);
-      }
-
-      // Primitive types cannot have properties
-      switch (typeof value) {
-        case 'undefined':
-          return stylize('undefined', 'undefined');
-
-        case 'string':
-          var simple = '\'' + json.stringify(value).replace(/^"|"$/g, '')
-                                                   .replace(/'/g, "\\'")
-                                                   .replace(/\\"/g, '"') + '\'';
-          return stylize(simple, 'string');
-
-        case 'number':
-          return stylize('' + value, 'number');
-
-        case 'boolean':
-          return stylize('' + value, 'boolean');
-      }
-      // For some reason typeof null is "object", so special case here.
-      if (value === null) {
-        return stylize('null', 'null');
-      }
-
-      // Look up the keys of the object.
-      var visible_keys = keys(value);
-      var $keys = showHidden ? Object.getOwnPropertyNames(value) : visible_keys;
-
-      // Functions without properties can be shortcutted.
-      if (typeof value === 'function' && $keys.length === 0) {
-        if (isRegExp(value)) {
-          return stylize('' + value, 'regexp');
-        } else {
-          var name = value.name ? ': ' + value.name : '';
-          return stylize('[Function' + name + ']', 'special');
-        }
-      }
-
-      // Dates without properties can be shortcutted
-      if (isDate(value) && $keys.length === 0) {
-        return stylize(value.toUTCString(), 'date');
-      }
-
-      var base, type, braces;
-      // Determine the object type
-      if (isArray(value)) {
-        type = 'Array';
-        braces = ['[', ']'];
-      } else {
-        type = 'Object';
-        braces = ['{', '}'];
-      }
-
-      // Make functions say that they are functions
-      if (typeof value === 'function') {
-        var n = value.name ? ': ' + value.name : '';
-        base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']';
-      } else {
-        base = '';
-      }
-
-      // Make dates with properties first say the date
-      if (isDate(value)) {
-        base = ' ' + value.toUTCString();
-      }
-
-      if ($keys.length === 0) {
-        return braces[0] + base + braces[1];
-      }
-
-      if (recurseTimes < 0) {
-        if (isRegExp(value)) {
-          return stylize('' + value, 'regexp');
-        } else {
-          return stylize('[Object]', 'special');
-        }
-      }
-
-      seen.push(value);
-
-      var output = map($keys, function(key) {
-        var name, str;
-        if (value.__lookupGetter__) {
-          if (value.__lookupGetter__(key)) {
-            if (value.__lookupSetter__(key)) {
-              str = stylize('[Getter/Setter]', 'special');
-            } else {
-              str = stylize('[Getter]', 'special');
-            }
-          } else {
-            if (value.__lookupSetter__(key)) {
-              str = stylize('[Setter]', 'special');
-            }
-          }
-        }
-        if (indexOf(visible_keys, key) < 0) {
-          name = '[' + key + ']';
-        }
-        if (!str) {
-          if (indexOf(seen, value[key]) < 0) {
-            if (recurseTimes === null) {
-              str = format(value[key]);
-            } else {
-              str = format(value[key], recurseTimes - 1);
-            }
-            if (str.indexOf('\n') > -1) {
-              if (isArray(value)) {
-                str = map(str.split('\n'), function(line) {
-                  return '  ' + line;
-                }).join('\n').substr(2);
-              } else {
-                str = '\n' + map(str.split('\n'), function(line) {
-                  return '   ' + line;
-                }).join('\n');
-              }
-            }
-          } else {
-            str = stylize('[Circular]', 'special');
-          }
-        }
-        if (typeof name === 'undefined') {
-          if (type === 'Array' && key.match(/^\d+$/)) {
-            return str;
-          }
-          name = json.stringify('' + key);
-          if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
-            name = name.substr(1, name.length - 2);
-            name = stylize(name, 'name');
-          } else {
-            name = name.replace(/'/g, "\\'")
-                       .replace(/\\"/g, '"')
-                       .replace(/(^"|"$)/g, "'");
-            name = stylize(name, 'string');
-          }
-        }
-
-        return name + ': ' + str;
-      });
-
-      seen.pop();
-
-      var numLinesEst = 0;
-      var length = reduce(output, function(prev, cur) {
-        numLinesEst++;
-        if (indexOf(cur, '\n') >= 0) numLinesEst++;
-        return prev + cur.length + 1;
-      }, 0);
-
-      if (length > 50) {
-        output = braces[0] +
-                 (base === '' ? '' : base + '\n ') +
-                 ' ' +
-                 output.join(',\n  ') +
-                 ' ' +
-                 braces[1];
-
-      } else {
-        output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
-      }
-
-      return output;
-    }
-    return format(obj, (typeof depth === 'undefined' ? 2 : depth));
-  };
-
-  function isArray (ar) {
-    return ar instanceof Array ||
-      Object.prototype.toString.call(ar) == '[object Array]';
-  };
-
-  function isRegExp(re) {
-    var s = '' + re;
-    return re instanceof RegExp || // easy case
-           // duck-type for context-switching evalcx case
-           typeof(re) === 'function' &&
-           re.constructor.name === 'RegExp' &&
-           re.compile &&
-           re.test &&
-           re.exec &&
-           s.match(/^\/.*\/[gim]{0,3}$/);
-  };
-
-  function isDate(d) {
-    if (d instanceof Date) return true;
-    return false;
-  };
-
-  function keys (obj) {
-    if (Object.keys) {
-      return Object.keys(obj);
-    }
-
-    var keys = [];
-
-    for (var i in obj) {
-      if (obj.hasOwnProperty(i)) {
-        keys.push(i);
-      }
-    }
-
-    return keys;
-  }
-
-  function map (arr, mapper, that) {
-    if (Array.prototype.map) {
-      return Array.prototype.map.call(arr, mapper, that);
-    }
-
-    var other= new Array(arr.length);
-
-    for (var i= 0, n = arr.length; i<n; i++)
-      if (i in arr)
-        other[i] = mapper.call(that, arr[i], i, arr);
-
-    return other;
-  };
-
-  function reduce (arr, fun) {
-    if (Array.prototype.reduce) {
-      return Array.prototype.reduce.apply(
-          arr
-        , Array.prototype.slice.call(arguments, 1)
-      );
-    }
-
-    var len = +this.length;
-
-    if (typeof fun !== "function")
-      throw new TypeError();
-
-    // no value to return if no initial value and an empty array
-    if (len === 0 && arguments.length === 1)
-      throw new TypeError();
-
-    var i = 0;
-    if (arguments.length >= 2) {
-      var rv = arguments[1];
-    } else {
-      do {
-        if (i in this) {
-          rv = this[i++];
-          break;
-        }
-
-        // if array contains no values, no initial value to return
-        if (++i >= len)
-          throw new TypeError();
-      } while (true);
-    }
-
-    for (; i < len; i++) {
-      if (i in this)
-        rv = fun.call(null, rv, this[i], i, this);
-    }
-
-    return rv;
-  };
-
-  /**
-   * Strict equality
-   *
-   * @api public
-   */
-
-  should.equal = function (a, b) {
-    if (a !== b) {
-      should.fail('expected ' + i(a) + ' to equal ' + i(b));
-    }
-  };
-
-  /**
-   * Fails with msg
-   *
-   * @param {String} msg
-   * @api public
-   */
-
-  should.fail = function (msg) {
-    throw new Error(msg);
-  };
-
-  /**
-   * Asserts deep equality
-   *
-   * @see taken from node.js `assert` module (copyright Joyent, MIT license)
-   * @api private
-   */
-
-  should.eql = function eql (actual, expected) {
-    // 7.1. All identical values are equivalent, as determined by ===.
-    if (actual === expected) { 
-      return true;
-    } else if ('undefined' != typeof Buffer 
-        && Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
-      if (actual.length != expected.length) return false;
-
-      for (var i = 0; i < actual.length; i++) {
-        if (actual[i] !== expected[i]) return false;
-      }
-
-      return true;
-
-    // 7.2. If the expected value is a Date object, the actual value is
-    // equivalent if it is also a Date object that refers to the same time.
-    } else if (actual instanceof Date && expected instanceof Date) {
-      return actual.getTime() === expected.getTime();
-
-    // 7.3. Other pairs that do not both pass typeof value == "object",
-    // equivalence is determined by ==.
-    } else if (typeof actual != 'object' && typeof expected != 'object') {
-      return actual == expected;
-
-    // 7.4. For all other Object pairs, including Array objects, equivalence is
-    // determined by having the same number of owned properties (as verified
-    // with Object.prototype.hasOwnProperty.call), the same set of keys
-    // (although not necessarily the same order), equivalent values for every
-    // corresponding key, and an identical "prototype" property. Note: this
-    // accounts for both named and indexed properties on Arrays.
-    } else {
-      return objEquiv(actual, expected);
-    }
-  }
-
-  function isUndefinedOrNull (value) {
-    return value === null || value === undefined;
-  }
-
-  function isArguments (object) {
-    return Object.prototype.toString.call(object) == '[object Arguments]';
-  }
-
-  function objEquiv (a, b) {
-    if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
-      return false;
-    // an identical "prototype" property.
-    if (a.prototype !== b.prototype) return false;
-    //~~~I've managed to break Object.keys through screwy arguments passing.
-    //   Converting to array solves the problem.
-    if (isArguments(a)) {
-      if (!isArguments(b)) {
-        return false;
-      }
-      a = pSlice.call(a);
-      b = pSlice.call(b);
-      return should.eql(a, b);
-    }
-    try{
-      var ka = keys(a),
-        kb = keys(b),
-        key, i;
-    } catch (e) {//happens when one is a string literal and the other isn't
-      return false;
-    }
-    // having the same number of owned properties (keys incorporates hasOwnProperty)
-    if (ka.length != kb.length)
-      return false;
-    //the same set of keys (although not necessarily the same order),
-    ka.sort();
-    kb.sort();
-    //~~~cheap key test
-    for (i = ka.length - 1; i >= 0; i--) {
-      if (ka[i] != kb[i])
-        return false;
-    }
-    //equivalent values for every corresponding key, and
-    //~~~possibly expensive deep test
-    for (i = ka.length - 1; i >= 0; i--) {
-      key = ka[i];
-      if (!should.eql(a[key], b[key]))
-         return false;
-    }
-    return true;
-  }
-
-  var json = (function () {
-    "use strict";
-
-    if ('object' == typeof JSON && JSON.parse && JSON.stringify) {
-      return {
-          parse: nativeJSON.parse
-        , stringify: nativeJSON.stringify
-      }
-    }
-
-    var JSON = {};
-
-    function f(n) {
-        // Format integers to have at least two digits.
-        return n < 10 ? '0' + n : n;
-    }
-
-    function date(d, key) {
-      return isFinite(d.valueOf()) ?
-          d.getUTCFullYear()     + '-' +
-          f(d.getUTCMonth() + 1) + '-' +
-          f(d.getUTCDate())      + 'T' +
-          f(d.getUTCHours())     + ':' +
-          f(d.getUTCMinutes())   + ':' +
-          f(d.getUTCSeconds())   + 'Z' : null;
-    };
-
-    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
-        gap,
-        indent,
-        meta = {    // table of character substitutions
-            '\b': '\\b',
-            '\t': '\\t',
-            '\n': '\\n',
-            '\f': '\\f',
-            '\r': '\\r',
-            '"' : '\\"',
-            '\\': '\\\\'
-        },
-        rep;
-
-
-    function quote(string) {
-
-  // If the string contains no control characters, no quote characters, and no
-  // backslash characters, then we can safely slap some quotes around it.
-  // Otherwise we must also replace the offending characters with safe escape
-  // sequences.
-
-        escapable.lastIndex = 0;
-        return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
-            var c = meta[a];
-            return typeof c === 'string' ? c :
-                '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-        }) + '"' : '"' + string + '"';
-    }
-
-
-    function str(key, holder) {
-
-  // Produce a string from holder[key].
-
-        var i,          // The loop counter.
-            k,          // The member key.
-            v,          // The member value.
-            length,
-            mind = gap,
-            partial,
-            value = holder[key];
-
-  // If the value has a toJSON method, call it to obtain a replacement value.
-
-        if (value instanceof Date) {
-            value = date(key);
-        }
-
-  // If we were called with a replacer function, then call the replacer to
-  // obtain a replacement value.
-
-        if (typeof rep === 'function') {
-            value = rep.call(holder, key, value);
-        }
-
-  // What happens next depends on the value's type.
-
-        switch (typeof value) {
-        case 'string':
-            return quote(value);
-
-        case 'number':
-
-  // JSON numbers must be finite. Encode non-finite numbers as null.
-
-            return isFinite(value) ? String(value) : 'null';
-
-        case 'boolean':
-        case 'null':
-
-  // If the value is a boolean or null, convert it to a string. Note:
-  // typeof null does not produce 'null'. The case is included here in
-  // the remote chance that this gets fixed someday.
-
-            return String(value);
-
-  // If the type is 'object', we might be dealing with an object or an array or
-  // null.
-
-        case 'object':
-
-  // Due to a specification blunder in ECMAScript, typeof null is 'object',
-  // so watch out for that case.
-
-            if (!value) {
-                return 'null';
-            }
-
-  // Make an array to hold the partial results of stringifying this object value.
-
-            gap += indent;
-            partial = [];
-
-  // Is the value an array?
-
-            if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-  // The value is an array. Stringify every element. Use null as a placeholder
-  // for non-JSON values.
-
-                length = value.length;
-                for (i = 0; i < length; i += 1) {
-                    partial[i] = str(i, value) || 'null';
-                }
-
-  // Join all of the elements together, separated with commas, and wrap them in
-  // brackets.
-
-                v = partial.length === 0 ? '[]' : gap ?
-                    '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
-                    '[' + partial.join(',') + ']';
-                gap = mind;
-                return v;
-            }
-
-  // If the replacer is an array, use it to select the members to be stringified.
-
-            if (rep && typeof rep === 'object') {
-                length = rep.length;
-                for (i = 0; i < length; i += 1) {
-                    if (typeof rep[i] === 'string') {
-                        k = rep[i];
-                        v = str(k, value);
-                        if (v) {
-                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
-                        }
-                    }
-                }
-            } else {
-
-  // Otherwise, iterate through all of the keys in the object.
-
-                for (k in value) {
-                    if (Object.prototype.hasOwnProperty.call(value, k)) {
-                        v = str(k, value);
-                        if (v) {
-                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
-                        }
-                    }
-                }
-            }
-
-  // Join all of the member texts together, separated with commas,
-  // and wrap them in braces.
-
-            v = partial.length === 0 ? '{}' : gap ?
-                '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
-                '{' + partial.join(',') + '}';
-            gap = mind;
-            return v;
-        }
-    }
-
-  // If the JSON object does not yet have a stringify method, give it one.
-
-    JSON.stringify = function (value, replacer, space) {
-
-  // The stringify method takes a value and an optional replacer, and an optional
-  // space parameter, and returns a JSON text. The replacer can be a function
-  // that can replace values, or an array of strings that will select the keys.
-  // A default replacer method can be provided. Use of the space parameter can
-  // produce text that is more easily readable.
-
-        var i;
-        gap = '';
-        indent = '';
-
-  // If the space parameter is a number, make an indent string containing that
-  // many spaces.
-
-        if (typeof space === 'number') {
-            for (i = 0; i < space; i += 1) {
-                indent += ' ';
-            }
-
-  // If the space parameter is a string, it will be used as the indent string.
-
-        } else if (typeof space === 'string') {
-            indent = space;
-        }
-
-  // If there is a replacer, it must be a function or an array.
-  // Otherwise, throw an error.
-
-        rep = replacer;
-        if (replacer && typeof replacer !== 'function' &&
-                (typeof replacer !== 'object' ||
-                typeof replacer.length !== 'number')) {
-            throw new Error('JSON.stringify');
-        }
-
-  // Make a fake root object containing our value under the key of ''.
-  // Return the result of stringifying the value.
-
-        return str('', {'': value});
-    };
-
-  // If the JSON object does not yet have a parse method, give it one.
-
-    JSON.parse = function (text, reviver) {
-    // The parse method takes a text and an optional reviver function, and returns
-    // a JavaScript value if the text is a valid JSON text.
-
-        var j;
-
-        function walk(holder, key) {
-
-    // The walk method is used to recursively walk the resulting structure so
-    // that modifications can be made.
-
-            var k, v, value = holder[key];
-            if (value && typeof value === 'object') {
-                for (k in value) {
-                    if (Object.prototype.hasOwnProperty.call(value, k)) {
-                        v = walk(value, k);
-                        if (v !== undefined) {
-                            value[k] = v;
-                        } else {
-                            delete value[k];
-                        }
-                    }
-                }
-            }
-            return reviver.call(holder, key, value);
-        }
-
-
-    // Parsing happens in four stages. In the first stage, we replace certain
-    // Unicode characters with escape sequences. JavaScript handles many characters
-    // incorrectly, either silently deleting them, or treating them as line endings.
-
-        text = String(text);
-        cx.lastIndex = 0;
-        if (cx.test(text)) {
-            text = text.replace(cx, function (a) {
-                return '\\u' +
-                    ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
-            });
-        }
-
-    // In the second stage, we run the text against regular expressions that look
-    // for non-JSON patterns. We are especially concerned with '()' and 'new'
-    // because they can cause invocation, and '=' because it can cause mutation.
-    // But just to be safe, we want to reject all unexpected forms.
-
-    // We split the second stage into 4 regexp operations in order to work around
-    // crippling inefficiencies in IE's and Safari's regexp engines. First we
-    // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-    // replace all simple value tokens with ']' characters. Third, we delete all
-    // open brackets that follow a colon or comma or that begin the text. Finally,
-    // we look to see that the remaining characters are only whitespace or ']' or
-    // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
-        if (/^[\],:{}\s]*$/
-                .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
-                    .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
-                    .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-    // In the third stage we use the eval function to compile the text into a
-    // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-    // in JavaScript: it can begin a block or an object literal. We wrap the text
-    // in parens to eliminate the ambiguity.
-
-            j = eval('(' + text + ')');
-
-    // In the optional fourth stage, we recursively walk the new structure, passing
-    // each name/value pair to a reviver function for possible transformation.
-
-            return typeof reviver === 'function' ?
-                walk({'': j}, '') : j;
-        }
-
-    // If the text is not JSON parseable, then a SyntaxError is thrown.
-
-        throw new SyntaxError('JSON.parse');
-    };
-
-    return JSON;
-  })();
-
-})('undefined' != typeof exports ? exports : (should = {}));
diff --git a/node/node_modules/socket.io-client/support/test-runner/app.js b/node/node_modules/socket.io-client/support/test-runner/app.js
deleted file mode 100644 (file)
index 167430a..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-
-/**
- * Module dependencies.
- */
-
-var express = require('express')
-  , stylus = require('stylus')
-  , sio = require('socket.io')
-  , path = require('path')
-  , fs = require('fs');
-
-/**
- * App.
- */
-
-var app = express.createServer();
-
-/**
- * Initial port to listen to.
- */
-
-var port = 3000;
-
-/**
- * Transport to test with.
- */
-
-var args = process.argv.slice(2)
-  , transport = args.length ? args[0] : 'xhr-polling';
-
-/**
- * A map of tests to socket.io ports we're listening on.
- */
-
-var testsPorts = {};
-
-/**
- * App configuration.
- */
-
-app.configure(function () {
-  app.use(stylus.middleware({ src: __dirname + '/public' }))
-  app.use(express.static(__dirname + '/public'));
-  app.set('views', __dirname);
-  app.set('view engine', 'jade');
-});
-
-/**
- * App routes.
- */
-
-app.get('/', function (req, res) {
-  res.render('index', {
-      layout: false
-    , testsPorts: testsPorts
-  });
-});
-
-/**
- * Sends test files.
- */
-
-app.get('/test/:file', function (req, res) {
-  res.sendfile(path.normalize(__dirname + '/../../test/' + req.params.file));
-});
-
-/**
- * App listen.
- */
-
-app.listen(port++, function () {
-  var addr = app.address();
-  console.error('   listening on http://' + addr.address + ':' + addr.port);
-});
-
-/**
- * Override handler to simplify development
- */
-
-function handler (req, res) {
-  fs.readFile(__dirname + '/../../dist/socket.io.js', 'utf8', function (err, b) {
-    if (err) {
-      res.writeHead(404);
-      res.end('Error');
-      return;
-    }
-
-    res.writeHead(200, { 'Content-Type': 'application/javascript' });
-    res.end(b);
-  });
-};
-
-/**
- * Socket.IO default server (to serve client)
- */
-
-var io = sio.listen(app);
-
-io.configure(function () {
-  io.set('browser client handler', handler);
-  io.set('transports', [
-      transport
-  ]);
-});
-
-/**
- * Scopes servers for a given test suite.
- */
-
-var currentSuite;
-
-function suite (name, fn) {
-  currentSuite = testsPorts[name] = {};
-  fn();
-};
-
-/**
- * Creates a socket io server
- */
-
-function server (name, fn) {
-  currentSuite[name] = port;
-
-  var io = sio.listen(port);
-  io.configure(function () {
-    io.set('transports', [transport]);
-  });
-
-  fn(io);
-  port++;
-};
-
-/**
- * Socket.IO servers.
- */
-
-suite('socket.test.js', function () {
-
-  server('test connecting the socket and disconnecting', function (io) {
-    io.sockets.on('connection', function () {});
-  });
-
-  server('test receiving messages', function (io) {
-    io.sockets.on('connection', function (socket) {
-      var messages = 0;
-      var interval = setInterval(function () {
-        socket.send(++messages);
-
-        if (messages == 3) {
-          clearInterval(interval);
-          setTimeout(function () {
-            socket.disconnect();
-          }, 500);
-        }
-      }, 50);
-    });
-  });
-
-  server('test sending messages', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        socket.send(msg);
-      });
-    });
-  });
-
-  server('test acks sent from client', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.send('tobi', function () {
-        socket.send('tobi 2');
-      });
-    });
-  });
-
-  server('test acks sent from server', function (io) {
-    io.sockets.on('connection', function (socket) {});
-  });
-
-  server('test connecting to namespaces', function (io) {
-    io.of('/woot').on('connection', function (socket) {
-      socket.send('connected to woot');
-    });
-
-    io.of('/chat').on('connection', function (socket) {
-      socket.send('connected to chat');
-    });
-  });
-
-  server('test disconnecting from namespaces', function (io) {
-    io.of('/a').on('connection', function (socket) {});
-    io.of('/b').on('connection', function (socket) {});
-  });
-
-  server('test authorizing for namespaces', function (io) {
-    io.of('/a')
-      .authorization(function (data, fn) {
-        fn(null, false);
-      })
-      .on('connection', function (socket) {});
-  });
-
-  server('test sending json from server', function (io) {
-    io.sockets.on('connection', function (socket) {
-      io.sockets.json.send(3141592);
-    });
-  });
-
-  server('test sending json from client', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (arr) {
-        if (Array.isArray(arr) && arr.length == 3) {
-          socket.send('echo');
-        }
-      });
-    });
-  });
-
-  server('test emitting an event from server', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.emit('woot');
-    });
-  });
-
-  server('test emitting multiple events at once to the server', function (io) {
-    io.sockets.on('connection', function (socket) {
-      var messages = [];
-
-      socket.on('print', function (msg) {
-        if (messages.indexOf(msg) >= 0) {
-          console.error('duplicate message');
-        }
-
-        messages.push(msg);
-        if (messages.length == 2) {
-          socket.emit('done');
-        }
-      });
-    });
-  });
-
-  server('test emitting an event to server', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.on('woot', function () {
-        socket.emit('echo');
-      });
-    });
-  });
-
-  server('test emitting an event from server and sending back data', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.emit('woot', 1, function (a) {
-        if (a === 'test') {
-          socket.emit('done');
-        }
-      });
-    });
-  });
-
-  server('test emitting an event to server and sending back data', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.on('tobi', function (a, b, fn) {
-        if (a === 1 && b === 2) {
-          fn({ hello: 'world' });
-        }
-      });
-    });
-  });
-
-  server('test encoding a payload', function (io) {
-    io.of('/woot').on('connection', function (socket) {
-      var count = 0;
-
-      socket.on('message', function (a) {
-        if (a == 'ñ') {
-          if (++count == 4) {
-            socket.emit('done');
-          }
-        }
-      });
-    });
-  });
-
-  server('test sending query strings to the server', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.json.send(socket.handshake);
-    })
-  });
-
-  server('test sending newline', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        if (msg == '\n') {
-          socket.emit('done');
-        }
-      });
-    });
-  });
-
-  server('test sending unicode', function (io) {
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        if (msg.test == "\u2028") {
-          socket.emit('done');
-        }
-      });
-    });
-  });
-
-});
diff --git a/node/node_modules/socket.io-client/support/test-runner/index.jade b/node/node_modules/socket.io-client/support/test-runner/index.jade
deleted file mode 100644 (file)
index 50ccce2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-doctype 5
-html
-  head
-    link(href='/stylesheets/main.css', rel='stylesheet', media='all')
-    script(src='/socket.io/socket.io.js')
-    script(src='/javascript/jquery.js')
-    script(src='/javascript/should.js')
-    script(src='/javascript/script.js')
-    script(src='/javascript/runner.js')
-
-    - var json = JSON.stringify(testsPorts);
-    script
-      var testsPorts = !{json}
-
-    script
-      $(function () {
-        run(
-            'io.test.js'
-          , 'parser.test.js'
-          , 'util.test.js'
-          , 'events.test.js'
-          , 'socket.test.js'
-        );
-      });
-
-    title Socket.IO tests runner
-  body
-    h2 Socket.IO test runner
diff --git a/node/node_modules/socket.io-client/support/test-runner/public/javascript/jquery.js b/node/node_modules/socket.io-client/support/test-runner/public/javascript/jquery.js
deleted file mode 100644 (file)
index 3a8cd46..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu May 12 15:04:36 2011 -0400
- */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("<!doctype><html><body></body></html>");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bF.test(a)?d(a,e):b_(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bU,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bQ),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bD(a,b,c){var d=b==="width"?bx:by,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bn(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bm(a){f.nodeName(a,"input")?bl(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bl)}function bl(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bk(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bj(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bi(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bh(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(S.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(y,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem
-)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,O(a.origType,a.selector),f.extend({},a,{handler:N,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,O(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?F:E):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=F;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=F;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=F,this.stopPropagation()},isDefaultPrevented:E,isPropagationStopped:E,isImmediatePropagationStopped:E};var G=function(a){var b=a.relatedTarget;a.type=a.data;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&f.event.handle.apply(this,arguments)}catch(d){}},H=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?H:G,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?H:G)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&L("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&L("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var I,J=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var M={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||E,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=y.exec(h),k="",j&&(k=j[0],h=h.replace(y,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,M[h]?(a.push(M[h]+k),h=h+k):h=(M[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+O(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+O(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var P=/Until$/,Q=/^(?:parents|prevUntil|prevAll)/,R=/,/,S=/^.[^:#\[\.,]*$/,T=Array.prototype.slice,U=f.expr.match.POS,V={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(X(this,a,!1),"not",a)},filter:function(a){return this.pushStack(X(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=U.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/<tbody/i,bb=/<|&#?\w+;/,bc=/<(?:script|object|embed|option|style)/i,bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bh(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bn)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bc.test(a[0])&&(f.support.checkClone||!bd.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||
-b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1></$2>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bm(k[i]);else bm(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bo=/alpha\([^)]*\)/i,bp=/opacity=([^)]*)/,bq=/-([a-z])/ig,br=/([A-Z]|^ms)/g,bs=/^-?\d+(?:px)?$/i,bt=/^-?\d/,bu=/^[+\-]=/,bv=/[^+\-\.\de]+/g,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB,bC=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bu.test(d)&&(d=+d.replace(bv,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bq,bC)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bD(a,b,d):f.swap(a,bw,function(){e=bD(a,b,d)});if(e<=0){e=bz(a,b,b),e==="0px"&&bB&&(e=bB(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bs.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cv(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cm.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cn.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cq||cs(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!co&&(cr?(co=1,g=function(){co&&(cr(g),e.tick())},cr(g)):co=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cq||cs(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
diff --git a/node/node_modules/socket.io-client/support/test-runner/public/javascript/runner.js b/node/node_modules/socket.io-client/support/test-runner/public/javascript/runner.js
deleted file mode 100644 (file)
index 5059601..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-// useful globals
-
-var currentSuite, currentCase;
-
-// loads common.js module
-function load (test, fn) {
-  module = {};
-  $script('/test/' + test, function () {
-    fn(module.exports);
-  });
-};
-
-// load all tests
-function run () {
-  var tests = Array.prototype.slice.call(arguments)
-    , i = 0;
-
-  function complete () {
-    $('body').append('<p>All suites completed</p>');
-  };
-
-  if (tests.length) {
-    // load dom
-    $('body').append('<ul class="test-list">');
-
-    // run suites
-    suite(tests[i], function check (res) {
-      if (tests[++i]) {
-        suite(tests[i], check);
-      } else {
-        complete();
-      }
-    });
-  } else {
-    complete();
-  }
-};
-
-// gets keys for an object
-function keys (obj) {
-  if (Object.keys) return Object.keys(obj);
-
-  var keys = [];
-
-  for (var i in obj) {
-    if (obj.hasOwnProperty(i)) {
-      keys.push(i);
-    }
-  }
-
-  return keys;
-};
-
-// runs a suite
-function suite (file, fn) {
-  var passed = {}
-    , failed = {};
-
-  // register current suite
-  currentSuite = file;
-
-  // inject test case
-  var li = $('<li class="loading">').append(
-    $('<span class="name">').append(
-      $('<a>').attr('href', '/test/' + file).text(file)
-    )
-  ).appendTo('.test-list');
-
-  // dynamically load module
-  load(file, function (suite) {
-    if (!suite) return;
-
-    var start = new Date;
-
-    function complete () {
-      var ok = !keys(failed).length
-        , elapsed = Math.round((new Date - start) / 1000);
-
-      // update dom
-      li.removeClass('loading');
-      li.append('<span class="bullet">&bull;</span>');
-
-      if (ok) {
-        li.append(' all passed');
-      } else {
-        li.append(' failing test');
-        li.addClass('test-failure');
-      }
-
-      li.append(
-        $('<div class="details">')
-          .html(
-              'Passed: ' + keys(passed).length
-            + ' &mdash; Failed: <em>' + keys(failed).length
-            + '</em> &mdash; Elapsed: <em>' + elapsed
-            + '</em> seconds &mdash; '
-          )
-          .append(
-            $('<a>Show details</a>')
-              .attr('href', '#')
-              .click(function () {
-                li.toggleClass('cases');
-                $(this).text(
-                  li.hasClass('cases')
-                    ? 'Hide details'
-                    : 'Show details'
-                );
-                return false;
-              })
-          )
-      );
-
-      var casesUl = $('<ul class="cases">').appendTo(li);
-      for (var i = 0, l = cases.length; i < l; i++) {
-        var detail = $('<li>')
-          .text(cases[i])
-          .addClass(failed[cases[i]] ? 'failed' : '')
-          .appendTo(casesUl);
-
-        if (failed[cases[i]]) {
-          if (window.console && console.log) {
-            console.log(failed[cases[i]]);
-          }
-
-          detail.append($('<span class="error">').text(String(failed[cases[i]])));
-        }
-      }
-
-      // fire callback
-      fn({
-          status: ok
-        , passed: passed
-        , failed: failed
-      });
-    };
-
-    var cases = keys(suite)
-      , i = 0;
-
-    if (!cases.length) {
-      return complete();
-    }
-
-    currentCase = cases[i];
-
-    test(suite[cases[i]], function check (err) {
-      if (err) {
-        failed[cases[i]] = err;
-      } else {
-        passed[cases[i]] = true;
-      }
-
-      if (cases[++i]) {
-        currentCase = cases[i];
-        test(suite[cases[i]], check);
-      } else {
-        complete();
-      }
-    });
-  });
-};
-
-// runs a test
-function test (testcase, fn) {
-  var timer;
-
-  window.onerror = function (err) {
-    complete(err);
-  };
-
-  function complete (err) {
-    if (complete.run) return;
-    if (timer) clearTimeout(timer);
-    complete.run = true;
-    window.onerror = null;
-    fn(err);
-  };
-
-  try {
-    if (testcase.length > 0) {
-      var timer = setTimeout(function () {
-        complete(new Error('Timeout'));
-      }, 2000);
-
-      testcase(complete);
-    } else {
-      testcase();
-      complete();
-    }
-  } catch (e) {
-    complete(e);
-  }
-};
-
-// exposes a function to easily create a server for the current test
-
-function create (nsp) {
-  if (!testsPorts[currentSuite]) {
-    throw new Error('No socket server defined for suite "' + currentSuite + '"');
-  }
-
-  if (!testsPorts[currentSuite][currentCase]) {
-    throw new Error('No socket server defined for suite "' + currentSuite
-      + '" and case "' + currentCase + '"');
-  }
-
-  return io.connect(
-      document.location.protocol + '//' + document.location.hostname
-    + ':' + testsPorts[currentSuite][currentCase] + (nsp || '')
-  );
-};
diff --git a/node/node_modules/socket.io-client/support/test-runner/public/javascript/script.js b/node/node_modules/socket.io-client/support/test-runner/public/javascript/script.js
deleted file mode 100644 (file)
index 075e4f4..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-!function(win, doc, timeout) {
-  var head = doc.getElementsByTagName('head')[0],
-      list = {}, ids = {}, delay = {},
-      scripts = {}, s = 'string', f = false,
-      push = 'push', domContentLoaded = 'DOMContentLoaded', readyState = 'readyState',
-      addEventListener = 'addEventListener', onreadystatechange = 'onreadystatechange',
-      every = function(ar, fn) {
-        for (var i = 0, j = ar.length; i < j; ++i) {
-          if (!fn(ar[i])) {
-            return f;
-          }
-        }
-        return 1;
-      };
-      function each(ar, fn) {
-        every(ar, function(el) {
-          return !fn(el);
-        });
-      }
-
-  if (!doc[readyState] && doc[addEventListener]) {
-    doc[addEventListener](domContentLoaded, function fn() {
-      doc.removeEventListener(domContentLoaded, fn, f);
-      doc[readyState] = "complete";
-    }, f);
-    doc[readyState] = "loading";
-  }
-
-  var $script = function(paths, idOrDone, optDone) {
-    paths = paths[push] ? paths : [paths];
-    var idOrDoneIsDone = idOrDone && idOrDone.call,
-        done = idOrDoneIsDone ? idOrDone : optDone,
-        id = idOrDoneIsDone ? paths.join('') : idOrDone,
-        queue = paths.length;
-        function loopFn(item) {
-          return item.call ? item() : list[item];
-        }
-        function callback() {
-          if (!--queue) {
-            list[id] = 1;
-            done && done();
-            for (var dset in delay) {
-              every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = []);
-            }
-          }
-        }
-    timeout(function() {
-      each(paths, function(path) {
-        if (scripts[path]) {
-          id && (ids[id] = 1);
-          callback();
-          return;
-        }
-        scripts[path] = 1;
-        id && (ids[id] = 1);
-        create($script.path ?
-          $script.path + path + '.js' :
-          path, callback);
-      });
-    }, 0);
-    return $script;
-  };
-
-  function create(path, fn) {
-    var el = doc.createElement("script"),
-        loaded = f;
-    el.onload = el.onerror = el[onreadystatechange] = function () {
-      if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) {
-        return;
-      }
-      el.onload = el[onreadystatechange] = null;
-      loaded = 1;
-      fn();
-    };
-    el.async = 1;
-    el.src = path;
-    head.insertBefore(el, head.firstChild);
-  }
-
-  $script.get = create;
-
-  $script.ready = function(deps, ready, req) {
-    deps = deps[push] ? deps : [deps];
-    var missing = [];
-    !each(deps, function(dep) {
-      list[dep] || missing[push](dep);
-    }) && every(deps, function(dep) {
-      return list[dep];
-    }) ? ready() : !function(key) {
-      delay[key] = delay[key] || [];
-      delay[key][push](ready);
-      req && req(missing);
-    }(deps.join('|'));
-    return $script;
-  };
-
-  var old = win.$script;
-  $script.noConflict = function () {
-    win.$script = old;
-    return this;
-  };
-
-  (typeof module !== 'undefined' && module.exports) ?
-    (module.exports = $script) :
-    (win['$script'] = $script);
-
-}(this, document, setTimeout);
diff --git a/node/node_modules/socket.io-client/support/test-runner/public/stylesheets/main.css b/node/node_modules/socket.io-client/support/test-runner/public/stylesheets/main.css
deleted file mode 100644 (file)
index 9ff44d5..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-body {
-  font-family: "Helvetica", "Helvetica Neue", sans-serif;
-  margin: 0;
-  color: #333;
-  font-size: 16px;
-  line-height: 1.5em;
-  word-spacing: 0.1em;
-  font-weight: 400;
-  background: #f9f9f9;
-  padding: 50px;
-}
-a {
-  border-bottom: 1px solid #999;
-  text-decoration: none;
-}
-a:hover {
-  border-color: transparent;
-  background: #eaeaea;
-}
-h2 {
-  font-weight: normal;
-  font-size: 28px;
-  margin: 24px 0 32px;
-}
-h2 a {
-  color: #666;
-  font-style: normal;
-}
-.test-list {
-  margin: 0;
-  padding: 0;
-  list-style: none;
-}
-.test-list > li {
-  margin-left: 36px;
-  margin-bottom: 12px;
-  position: relative;
-}
-.test-list > li::before {
-  content: "✔";
-  background: #acd843;
-  padding: 1px 6px;
-  position: absolute;
-  top: -2px;
-  right: 100%;
-  margin-right: 8px;
-  color: #fff;
-}
-.test-list > li.loading::before {
-  content: "…";
-  font-size: 18px;
-  line-height: 16px;
-  vertical-align: middle;
-  padding: 0px 4px 10px;
-  background: #ccc;
-}
-.test-list > li.test-failure::before {
-  content: "✘";
-  font-size: 18px;
-  padding: 1px 7px;
-  background: #cd3a33;
-}
-.test-list > li span.name {
-  display: inline-block;
-  width: 150px;
-}
-.test-list > li span.bullet {
-  display: inline-block;
-  width: 20px;
-  font-size: 20px;
-  vertical-align: middle;
-}
-.test-list > li a {
-  color: #333;
-}
-.test-list > li .details {
-  font-size: 12px;
-  color: #666;
-}
-.test-list > li .details em {
-  font-style: normal;
-  color: #333;
-}
-.test-list > li ul.cases {
-  font-size: 11px;
-  padding: 0;
-  display: none;
-}
-.test-list > li ul.cases li {
-  list-style-type: none;
-  color: #000;
-}
-.test-list > li ul.cases li::before {
-  content: "✔";
-  color: #acd843;
-  margin-right: 5px;
-}
-.test-list > li ul.cases li.failed::before {
-  content: "✘";
-  color: #cd3a33;
-  margin-right: 6px;
-  margin-left: 1px;
-}
-.test-list > li ul.cases li.failed {
-  color: #cd3a33;
-}
-.test-list > li.cases ul.cases {
-  display: block;
-}
-.test-list > li.cases ul.cases span.error {
-  color: #cd3a33;
-  display: block;
-  line-height: 5px;
-  padding-left: 14px;
-  padding-bottom: 5px;
-}
diff --git a/node/node_modules/socket.io-client/support/test-runner/public/stylesheets/main.styl b/node/node_modules/socket.io-client/support/test-runner/public/stylesheets/main.styl
deleted file mode 100644 (file)
index ca3eeca..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-// design heavily based on https://github.com/kkaefer/overlord, released under MIT
-// Copyright (c) 2010-2011 Konstantin Käfer
-
-body
-  font-family 'Helvetica', 'Helvetica Neue', sans-serif
-  margin 0
-  color #333
-  font-size 16px
-  line-height 1.5em
-  word-spacing 0.1em
-  font-weight 400
-  background #F9F9F9
-  padding 50px
-
-a
-  border-bottom 1px solid #999
-  text-decoration none
-  &:hover
-    border-color transparent
-    background #EAEAEA
-
-h2
-  font-weight normal
-  font-size 28px
-  margin 24px 0 32px
-  a
-    color #666
-    font-style normal
-
-.test-list
-  margin 0
-  padding 0
-  list-style none
-  > li
-    margin-left 36px
-    margin-bottom 12px
-    position relative
-    &::before
-      content "✔"
-      background #ACD843
-      padding 1px 6px
-      position absolute
-      top -2px
-      right 100%
-      margin-right 8px
-      color white
-    &.loading::before
-      content "…"
-      font-size 18px
-      line-height 16px
-      vertical-align middle
-      padding 0px 4px 10px
-      background #ccc
-    &.test-failure::before
-      content "✘"
-      font-size 18px
-      padding 1px 7px
-      background #CD3A33
-    span.name
-      display inline-block
-      width 150px
-    span.bullet
-      display inline-block
-      width 20px
-      font-size 20px
-      vertical-align middle
-    a
-      color #333
-    .details
-      font-size 12px
-      color #666
-      em
-        font-style normal
-        color #333
-    ul.cases
-      font-size 11px
-      padding 0
-      display none
-      li
-        list-style-type none
-        color #000
-        &::before
-          content "✔"
-          color #ACD843
-          margin-right 5px
-        &.failed::before
-          content "✘"
-          color #CD3A33
-          margin-right 6px
-          margin-left 1px
-        &.failed
-          color #CD3A33
-  > li.cases
-    ul.cases
-      display block
-      span.error
-        color #CD3A33
-        display block
-        line-height 5px
-        padding-left 14px
-        padding-bottom 5px
diff --git a/node/node_modules/socket.io-client/test/events.test.js b/node/node_modules/socket.io-client/test/events.test.js
deleted file mode 100644 (file)
index 6240d0c..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (module, io, should) {
-
-  module.exports = {
-
-    'add listeners': function () {
-      var event = new io.EventEmitter
-        , calls = 0;
-
-      event.on('test', function (a, b) {
-        ++calls;
-        a.should().eql('a');
-        b.should().eql('b');
-      });
-
-      event.emit('test', 'a', 'b');
-      calls.should().eql(1);
-      event.on.should().eql(event.addListener);
-    },
-
-    'remove listener': function () {
-      var event = new io.EventEmitter;
-      function empty () { }
-
-      event.on('test', empty);
-      event.on('test:more', empty);
-      event.removeAllListeners('test');
-
-      event.listeners('test').should().eql([]);
-      event.listeners('test:more').should().eql([empty]);
-    },
-
-    'remove all listeners with no arguments': function () {
-      var event = new io.EventEmitter;
-      function empty () { }
-
-      event.on('test', empty);
-      event.on('test:more', empty);
-      event.removeAllListeners();
-
-      // TODO: with node 0.5 we'll change this to expect []
-      event.listeners('test').should().eql([empty]);
-      event.listeners('test:more').should().eql([empty]);
-    },
-
-    'remove listeners functions': function () {
-      var event = new io.EventEmitter
-        , calls = 0;
-
-      function one () { ++calls }
-      function two () { ++calls }
-      function three () { ++calls }
-
-      event.on('one', one);
-      event.removeListener('one', one);
-      event.listeners('one').should().eql([]);
-
-      event.on('two', two);
-      event.removeListener('two', one);
-      event.listeners('two').should().eql([two]);
-
-      event.on('three', three);
-      event.on('three', two);
-      event.removeListener('three', three);
-      event.listeners('three').should().eql([two]);
-    },
-
-    'number of arguments': function () {
-      var event = new io.EventEmitter
-        , number = [];
-
-      event.on('test', function () {
-        number.push(arguments.length);
-      });
-
-      event.emit('test');
-      event.emit('test', null);
-      event.emit('test', null, null);
-      event.emit('test', null, null, null);
-      event.emit('test', null, null, null, null);
-      event.emit('test', null, null, null, null, null);
-
-      [0, 1, 2, 3, 4, 5].should().eql(number);
-    },
-
-    'once': function () {
-      var event = new io.EventEmitter
-        , calls = 0;
-
-      event.once('test', function (a, b) {
-        ++calls;
-      });
-
-      event.emit('test', 'a', 'b');
-      event.emit('test', 'a', 'b');
-      event.emit('test', 'a', 'b');
-
-      function removed () {
-        should().fail('not removed');
-      };
-
-      event.once('test:removed', removed);
-      event.removeListener('test:removed', removed);
-      event.emit('test:removed');
-
-      calls.should().eql(1);
-    }
-
-  };
-
-})(
-    'undefined' == typeof module ? module = {} : module
-  , 'undefined' == typeof io ? require('socket.io-client') : io
-  , 'undefined' == typeof should || !should.fail ? require('should') : should
-);
diff --git a/node/node_modules/socket.io-client/test/io.test.js b/node/node_modules/socket.io-client/test/io.test.js
deleted file mode 100644 (file)
index d9f0b09..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (module, io, should) {
-
-  module.exports = {
-    
-    'client version number': function () {
-      io.version.should().match(/([0-9]+)\.([0-9]+)\.([0-9]+)/);
-    },
-
-    'socket.io protocol version': function () {
-      io.protocol.should().be.a('number');
-      io.protocol.toString().should().match(/^\d+$/);
-    },
-
-    'socket.io available transports': function () {
-      (io.transports.length > 0).should().be_true;
-    }
-
-  };
-
-})(
-    'undefined' == typeof module ? module = {} : module
-  , 'undefined' == typeof io ? require('socket.io-client') : io
-  , 'undefined' == typeof should ? require('should') : should
-);
diff --git a/node/node_modules/socket.io-client/test/node/builder.common.js b/node/node_modules/socket.io-client/test/node/builder.common.js
deleted file mode 100644 (file)
index fa8d46e..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-var vm = require('vm')
-  , should = require('should');
-
-/**
- * Generates evn variables for the vm so we can `emulate` a browser.
- * @returns {Object} evn variables
- */
-
-exports.env = function env () {
-  var details = {
-      location: {
-          port: 8080
-        , host: 'www.example.org'
-        , hostname: 'www.example.org'
-        , href: 'http://www.example.org/example/'
-        , pathname: '/example/'
-        , protocol: 'http:'
-        , search: ''
-        , hash: ''
-      }
-    , console: {
-        log:   function(){},
-        info:  function(){},
-        warn:  function(){},
-        error: function(){}
-      }
-    , navigator: {
-          userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit'
-           + '/534.27 (KHTML, like Gecko) Chrome/12.0.716.0 Safari/534.27'
-        , appName: 'socket.io'
-        , platform: process.platform
-        , appVersion: process.version
-    , }
-    , name: 'socket.io'
-    , innerWidth: 1024
-    , innerHeight: 768
-    , length: 1
-    , outerWidth: 1024
-    , outerHeight: 768
-    , pageXOffset: 0
-    , pageYOffset: 0
-    , screenX: 0
-    , screenY: 0
-    , screenLeft: 0
-    , screenTop: 0
-    , scrollX: 0
-    , scrollY: 0
-    , scrollTop: 0
-    , scrollLeft: 0
-    , screen: {
-          width: 0
-        , height: 0
-      }
-  };
-
-  // circular references
-  details.window = details.self = details.contentWindow = details;
-
-  // callable methods
-  details.Image = details.scrollTo = details.scrollBy = details.scroll = 
-  details.resizeTo = details.resizeBy = details.prompt = details.print = 
-  details.open = details.moveTo = details.moveBy = details.focus = 
-  details.createPopup = details.confirm = details.close = details.blur = 
-  details.alert = details.clearTimeout = details.clearInterval = 
-  details.setInterval = details.setTimeout = details.XMLHttpRequest = 
-  details.getComputedStyle = details.trigger = details.dispatchEvent = 
-  details.removeEventListener = details.addEventListener = function(){};
-
-  // frames
-  details.frames = [details];
-
-  // document
-  details.document = details;
-  details.document.domain = details.location.href;
-
-  return details;
-};
-
-/**
- * Executes a script in a browser like env and returns
- * the result
- *
- * @param {String} contents The script content
- * @returns {Object} The evaluated script.
- */
-
-exports.execute = function execute (contents) {
-  var env = exports.env() 
-    , script = vm.createScript(contents);
-
-  // run the script with `browser like` globals
-  script.runInNewContext(env);
-
-  return env;
-};
diff --git a/node/node_modules/socket.io-client/test/node/builder.test.js b/node/node_modules/socket.io-client/test/node/builder.test.js
deleted file mode 100644 (file)
index 989e2bc..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var builder = require('../../bin/builder')
-  , common = require('./builder.common')
-  , should = require('should');
-
-/**
- * Tests.
- */
-
-module.exports = {
-
-  'version number': function () {
-    builder.version.should().match(/([0-9]+)\.([0-9]+)\.([0-9]+)/);
-    builder.version.should().equal(require('../../lib/io').version);
-  },
-
-  'production build LOC': function () {
-    builder(function (err, result) {
-      should.strictEqual(err, null)
-
-      var lines = result.split('\n');
-      lines.length.should().be.below(5);
-      lines[0].should().match(/production/gi);
-      Buffer.byteLength(result).should().be.below(43000);
-    });
-  },
-
-  'development build LOC': function () {
-    builder({ minify: false }, function (err, result) {
-      should.strictEqual(err, null)
-
-      var lines = result.split('\n');
-      lines.length.should().be.above(5);
-      lines[0].should().match(/development/gi);
-      Buffer.byteLength(result).should().be.above(35000);
-    });
-  },
-
-  'default builds': function () {
-    builder(function (err, result) {
-      should.strictEqual(err, null);
-
-      var io = common.execute(result).io
-        , transports = Object.keys(io.Transport)
-        , defaults = Object.keys(builder.transports);
-
-      /* XHR transport is private, but still available */
-      transports.length.should().be.equal(defaults.length + 1);
-
-      defaults.forEach(function (transport) {
-        transports.indexOf(transport).should().be.above(-1);
-      })
-    });
-  },
-
-  'custom build': function () {
-    builder(['websocket'], function (err, result) {
-      should.strictEqual(err, null);
-
-      var io = common.execute(result).io
-        , transports = Object.keys(io.Transport);
-
-      transports.should().have.length(1);
-      transports[0].should().eql('websocket');
-    });
-  },
-
-  'custom code': function () {
-    var custom = 'var hello = "world";';
-    builder({ custom: [custom], minify: false }, function (err, result) {
-      should.strictEqual(err, null);
-
-      result.should().include.string(custom);
-    });
-  },
-
-  'node if': function () {
-    var custom = '// if node \nvar hello = "world";\n'
-      + '// end node\nvar pew = "pew";';
-
-    builder({ custom: [custom], minify: false }, function (err, result) {
-      should.strictEqual(err, null);
-
-      result.should().not.include.string(custom);
-      result.should().not.include.string('// if node');
-      result.should().not.include.string('// end node');
-      result.should().not.include.string('"world"');
-
-      result.should().include.string('var pew = "pew"');
-    });
-  },
-
-  'preserve the encoding during minification': function () {
-    builder(function (err, result) {
-      should.strictEqual(err, null);
-
-      result.should().match(/(\\ufffd)/g);
-    })
-  },
-
-  'globals': function () {
-    builder(function (err, result) {
-      should.strictEqual(err, null);
-
-      var io = common.execute(result)
-        , env = common.env()
-        , allowed = ['io', 'swfobject', 'WEB_SOCKET_DISABLE_AUTO_INITIALIZATION'];
-
-      Array.prototype.push.apply(allowed, Object.keys(env));
-
-      Object.keys(io).forEach(function (global) {
-        var index = allowed.indexOf(global);
-
-        // the global is not allowed!
-        if (!~index) {
-          throw new Error('Global leak: ' + global);
-        }
-      });
-    })
-  }
-
-};
diff --git a/node/node_modules/socket.io-client/test/parser.test.js b/node/node_modules/socket.io-client/test/parser.test.js
deleted file mode 100644 (file)
index 0022afb..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (module, io, should) {
-
-  var parser = io.parser;
-
-  module.exports = {
-
-    'decoding error packet': function () {
-      parser.decodePacket('7:::').should().eql({
-          type: 'error'
-        , reason: ''
-        , advice: ''
-        , endpoint: ''
-      });
-    },
-
-    'decoding error packet with reason': function () {
-      parser.decodePacket('7:::0').should().eql({
-          type: 'error'
-        , reason: 'transport not supported'
-        , advice: ''
-        , endpoint: ''
-      });
-    },
-
-    'decoding error packet with reason and advice': function () {
-      parser.decodePacket('7:::2+0').should().eql({
-          type: 'error'
-        , reason: 'unauthorized'
-        , advice: 'reconnect'
-        , endpoint: ''
-      });
-    },
-
-    'decoding error packet with endpoint': function () {
-      parser.decodePacket('7::/woot').should().eql({
-          type: 'error'
-        , reason: ''
-        , advice: ''
-        , endpoint: '/woot'
-      });
-    },
-
-    'decoding ack packet': function () {
-      parser.decodePacket('6:::140').should().eql({
-          type: 'ack'
-        , ackId: '140'
-        , endpoint: ''
-        , args: []
-      });
-    },
-
-    'decoding ack packet with args': function () {
-      parser.decodePacket('6:::12+["woot","wa"]').should().eql({
-          type: 'ack'
-        , ackId: '12'
-        , endpoint: ''
-        , args: ['woot', 'wa']
-      });
-    },
-
-    'decoding ack packet with bad json': function () {
-      var thrown = false;
-
-      try {
-        parser.decodePacket('6:::1+{"++]').should().eql({
-            type: 'ack'
-          , ackId: '1'
-          , endpoint: ''
-          , args: []
-        });
-      } catch (e) {
-        thrown = true;
-      }
-
-      thrown.should().be_false;
-    },
-
-    'decoding json packet': function () {
-      parser.decodePacket('4:::"2"').should().eql({
-          type: 'json'
-        , endpoint: ''
-        , data: '2'
-      });
-    },
-
-    'decoding json packet with message id and ack data': function () {
-      parser.decodePacket('4:1+::{"a":"b"}').should().eql({
-          type: 'json'
-        , id: 1
-        , ack: 'data'
-        , endpoint: ''
-        , data: { a: 'b' }
-      });
-    },
-
-    'decoding an event packet': function () {
-      parser.decodePacket('5:::{"name":"woot"}').should().eql({
-          type: 'event'
-        , name: 'woot'
-        , endpoint: ''
-        , args: []
-      });
-    },
-
-    'decoding an event packet with message id and ack': function () {
-      parser.decodePacket('5:1+::{"name":"tobi"}').should().eql({
-          type: 'event'
-        , id: 1
-        , ack: 'data'
-        , endpoint: ''
-        , name: 'tobi'
-        , args: []
-      });
-    },
-
-    'decoding an event packet with data': function () {
-      parser.decodePacket('5:::{"name":"edwald","args":[{"a": "b"},2,"3"]}')
-      .should().eql({
-          type: 'event'
-        , name: 'edwald'
-        , endpoint: ''
-        , args: [{a: 'b'}, 2, '3']
-      });
-    },
-
-    'decoding a message packet': function () {
-      parser.decodePacket('3:::woot').should().eql({
-          type: 'message'
-        , endpoint: ''
-        , data: 'woot'
-      });
-    },
-
-    'decoding a message packet with id and endpoint': function () {
-      parser.decodePacket('3:5:/tobi').should().eql({
-          type: 'message'
-        , id: 5
-        , ack: true
-        , endpoint: '/tobi'
-        , data: ''
-      });
-    },
-
-    'decoding a heartbeat packet': function () {
-      parser.decodePacket('2:::').should().eql({
-          type: 'heartbeat'
-        , endpoint: ''
-      });
-    },
-
-    'decoding a connection packet': function () {
-      parser.decodePacket('1::/tobi').should().eql({
-          type: 'connect'
-        , endpoint: '/tobi'
-        , qs: ''
-      });
-    },
-
-    'decoding a connection packet with query string': function () {
-      parser.decodePacket('1::/test:?test=1').should().eql({
-          type: 'connect'
-        , endpoint: '/test'
-        , qs: '?test=1'
-      });
-    },
-
-    'decoding a disconnection packet': function () {
-      parser.decodePacket('0::/woot').should().eql({
-          type: 'disconnect'
-        , endpoint: '/woot'
-      });
-    },
-
-    'encoding error packet': function () {
-      parser.encodePacket({
-          type: 'error'
-        , reason: ''
-        , advice: ''
-        , endpoint: ''
-      }).should().eql('7::');
-    },
-
-    'encoding error packet with reason': function () {
-      parser.encodePacket({
-          type: 'error'
-        , reason: 'transport not supported'
-        , advice: ''
-        , endpoint: ''
-      }).should().eql('7:::0');
-    },
-
-    'encoding error packet with reason and advice': function () {
-      parser.encodePacket({
-          type: 'error'
-        , reason: 'unauthorized'
-        , advice: 'reconnect'
-        , endpoint: ''
-      }).should().eql('7:::2+0');
-    },
-
-    'encoding error packet with endpoint': function () {
-      parser.encodePacket({
-          type: 'error'
-        , reason: ''
-        , advice: ''
-        , endpoint: '/woot'
-      }).should().eql('7::/woot');
-    },
-
-    'encoding ack packet': function () {
-      parser.encodePacket({
-          type: 'ack'
-        , ackId: '140'
-        , endpoint: ''
-        , args: []
-      }).should().eql('6:::140');
-    },
-
-    'encoding ack packet with args': function () {
-      parser.encodePacket({
-          type: 'ack'
-        , ackId: '12'
-        , endpoint: ''
-        , args: ['woot', 'wa']
-      }).should().eql('6:::12+["woot","wa"]');
-    },
-
-    'encoding json packet': function () {
-      parser.encodePacket({
-          type: 'json'
-        , endpoint: ''
-        , data: '2'
-      }).should().eql('4:::"2"');
-    },
-
-    'encoding json packet with message id and ack data': function () {
-      parser.encodePacket({
-          type: 'json'
-        , id: 1
-        , ack: 'data'
-        , endpoint: ''
-        , data: { a: 'b' }
-      }).should().eql('4:1+::{"a":"b"}');
-    },
-
-    'encoding an event packet': function () {
-      parser.encodePacket({
-          type: 'event'
-        , name: 'woot'
-        , endpoint: ''
-        , args: []
-      }).should().eql('5:::{"name":"woot"}');
-    },
-
-    'encoding an event packet with message id and ack': function () {
-      parser.encodePacket({
-          type: 'event'
-        , id: 1
-        , ack: 'data'
-        , endpoint: ''
-        , name: 'tobi'
-        , args: []
-      }).should().eql('5:1+::{"name":"tobi"}');
-    },
-
-    'encoding an event packet with data': function () {
-      parser.encodePacket({
-          type: 'event'
-        , name: 'edwald'
-        , endpoint: ''
-        , args: [{a: 'b'}, 2, '3']
-      }).should().eql('5:::{"name":"edwald","args":[{"a":"b"},2,"3"]}');
-    },
-
-    'encoding a message packet': function () {
-      parser.encodePacket({
-          type: 'message'
-        , endpoint: ''
-        , data: 'woot'
-      }).should().eql('3:::woot');
-    },
-
-    'encoding a message packet with id and endpoint': function () {
-      parser.encodePacket({
-          type: 'message'
-        , id: 5
-        , ack: true
-        , endpoint: '/tobi'
-        , data: ''
-      }).should().eql('3:5:/tobi');
-    },
-
-    'encoding a heartbeat packet': function () {
-      parser.encodePacket({
-          type: 'heartbeat'
-        , endpoint: ''
-      }).should().eql('2::');
-    },
-
-    'encoding a connection packet': function () {
-      parser.encodePacket({
-          type: 'connect'
-        , endpoint: '/tobi'
-        , qs: ''
-      }).should().eql('1::/tobi');
-    },
-
-    'encoding a connection packet with query string': function () {
-      parser.encodePacket({
-          type: 'connect'
-        , endpoint: '/test'
-        , qs: '?test=1'
-      }).should().eql('1::/test:?test=1');
-    },
-
-    'encoding a disconnection packet': function () {
-      parser.encodePacket({
-          type: 'disconnect'
-        , endpoint: '/woot'
-      }).should().eql('0::/woot');
-    },
-
-    'test decoding a payload': function () {
-      parser.decodePayload('\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d'
-        + '\ufffd3\ufffd0::').should().eql([
-          { type: 'message', data: '5', endpoint: '' }
-        , { type: 'message', data: '53d', endpoint: '' }
-        , { type: 'disconnect', endpoint: '' }
-      ]);
-    },
-
-    'test encoding a payload': function () {
-      parser.encodePayload([
-          parser.encodePacket({ type: 'message', data: '5', endpoint: '' })
-        , parser.encodePacket({ type: 'message', data: '53d', endpoint: '' })
-      ]).should().eql('\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d')
-    },
-
-    'test decoding newline': function () {
-      parser.decodePacket('3:::\n').should().eql({
-          type: 'message'
-        , endpoint: ''
-        , data: '\n'
-      });
-    }
-
-  };
-
-})(
-    'undefined' == typeof module ? module = {} : module
-  , 'undefined' == typeof io ? require('socket.io-client') : io
-  , 'undefined' == typeof should ? require('should') : should
-);
diff --git a/node/node_modules/socket.io-client/test/socket.test.js b/node/node_modules/socket.io-client/test/socket.test.js
deleted file mode 100644 (file)
index 53c967e..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (module, io, should) {
-
-  if ('object' == typeof global) {
-    return module.exports = { '': function () {} };
-  }
-
-  module.exports = {
-
-    'test connecting the socket and disconnecting': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('connect', function () {
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test receiving messages': function (next) {
-      var socket = create()
-        , connected = false
-        , messages = 0;
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('connect', function () {
-        connected = true;
-      });
-
-      socket.on('message', function (i) {
-        String(++messages).should().equal(i);
-      });
-
-      socket.on('disconnect', function (reason) {
-        connected.should().be_true;
-        messages.should().equal(3);
-        reason.should().eql('booted');
-        next();
-      });
-    },
-
-    'test sending messages': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('connect', function () {
-        socket.send('echo');
-
-        socket.on('message', function (msg) {
-          msg.should().equal('echo');
-          socket.disconnect();
-          next();
-        });
-      });
-    },
-
-    'test acks sent from client': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('connect', function () {
-        socket.on('message', function (msg) {
-          if ('tobi 2' == msg) {
-            socket.disconnect();
-            next();
-          }
-        });
-      });
-    },
-
-    'test acks sent from server': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('connect', function () {
-        socket.send('ooo', function () {
-          socket.disconnect();
-          next();
-        });
-      });
-    },
-
-    'test connecting to namespaces': function (next) {
-      var io = create()
-        , socket = io.socket
-        , namespaces = 2
-        , connect = 0;
-
-      function finish () {
-        socket.of('').disconnect();
-        connect.should().equal(3);
-        next();
-      }
-
-      socket.on('connect', function(){
-        connect++;
-      });
-
-      socket.of('/woot').on('connect', function () {
-        connect++;
-      }).on('message', function (msg) {
-        msg.should().equal('connected to woot');
-        --namespaces || finish();
-      }).on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.of('/chat').on('connect', function () {
-        connect++;
-      }).on('message', function (msg) {
-        msg.should().equal('connected to chat');
-        --namespaces || finish();
-      }).on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-    },
-
-    'test disconnecting from namespaces': function (next) {
-      var socket = create().socket
-        , namespaces = 2
-        , disconnections = 0;
-
-      function finish () {
-        socket.of('').disconnect();
-        next();
-      };
-
-      socket.of('/a').on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.of('/a').on('connect', function () {
-        socket.of('/a').disconnect();
-      });
-
-      socket.of('/a').on('disconnect', function () {
-        --namespaces || finish();
-      });
-
-      socket.of('/b').on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.of('/b').on('connect', function () {
-        socket.of('/b').disconnect();
-      });
-
-      socket.of('/b').on('disconnect', function () {
-        --namespaces || finish();
-      });
-    },
-
-    'test authorizing for namespaces': function (next) {
-      var socket = create().socket
-
-      function finish () {
-        socket.of('').disconnect();
-        next();
-      };
-
-      socket.of('/a')
-        .on('connect_failed', function (msg) {
-          next();
-        })
-        .on('error', function (msg) {
-          throw new Error(msg || 'Received an error');
-        });
-    },
-
-    'test sending json from server': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('message', function (msg) {
-        msg.should().eql(3141592);
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test sending json from client': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.json.send([1, 2, 3]);
-      socket.on('message', function (msg) {
-        msg.should().equal('echo');
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test emitting an event from server': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('woot', function () {
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test emitting an event to server': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.emit('woot');
-      socket.on('echo', function () {
-        socket.disconnect();
-        next();
-      })
-    },
-
-    'test emitting multiple events at once to the server': function (next) {
-      var socket = create();
-
-      socket.on('connect', function () {
-        socket.emit('print', 'foo');
-        socket.emit('print', 'bar');
-      });
-
-      socket.on('done', function () {
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test emitting an event from server and sending back data': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('woot', function (a, fn) {
-        a.should().eql(1);
-        fn('test');
-
-        socket.on('done', function () {
-          socket.disconnect();
-          next();
-        });
-      });
-    },
-
-    'test emitting an event to server and sending back data': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.emit('tobi', 1, 2, function (a) {
-        a.should().eql({ hello: 'world' });
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test encoding a payload': function (next) {
-      var socket = create('/woot');
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('connect', function () {
-        socket.socket.setBuffer(true);
-        socket.send('ñ');
-        socket.send('ñ');
-        socket.send('ñ');
-        socket.send('ñ');
-        socket.socket.setBuffer(false);
-      });
-
-      socket.on('done', function () {
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test sending query strings to the server': function (next) {
-      var socket = create('?foo=bar');
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.on('message', function (data) {
-        data.query.foo.should().eql('bar');
-
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test sending newline': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.send('\n');
-
-      socket.on('done', function () {
-        socket.disconnect();
-        next();
-      });
-    },
-
-    'test sending unicode': function (next) {
-      var socket = create();
-
-      socket.on('error', function (msg) {
-        throw new Error(msg || 'Received an error');
-      });
-
-      socket.json.send({ test: "\u2028" });
-
-      socket.on('done', function () {
-        socket.disconnect();
-        next();
-      });
-    }
-
-  };
-
-})(
-    'undefined' == typeof module ? module = {} : module
-  , 'undefined' == typeof io ? require('socket.io-client') : io
-  , 'undefined' == typeof should ? require('should-browser') : should
-);
diff --git a/node/node_modules/socket.io-client/test/util.test.js b/node/node_modules/socket.io-client/test/util.test.js
deleted file mode 100644 (file)
index 30db5a6..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-(function (module, io, should) {
-
-  module.exports = {
-
-    'parse uri': function () {
-      var http = io.util.parseUri('http://google.com')
-        , https = io.util.parseUri('https://www.google.com:80')
-        , query = io.util.parseUri('google.com:8080/foo/bar?foo=bar');
-
-      http.protocol.should().eql('http');
-      http.port.should().eql('');
-      http.host.should().eql('google.com');
-      https.protocol.should().eql('https');
-      https.port.should().eql('80');
-      https.host.should().eql('www.google.com');
-      query.port.should().eql('8080');
-      query.query.should().eql('foo=bar');
-      query.path.should().eql('/foo/bar');
-      query.relative.should().eql('/foo/bar?foo=bar');
-    },
-
-    'unique uri': function () {
-      var protocol = io.util.parseUri('http://google.com')
-        , noprotocol = io.util.parseUri('google.com')
-        , https = io.util.parseUri('https://google.com')
-        , path = io.util.parseUri('https://google.com/google.com/com/?foo=bar');
-
-      if ('object' == typeof window) {
-        io.util.uniqueUri(protocol).should().eql('http://google.com:3000');
-        io.util.uniqueUri(noprotocol).should().eql('http://google.com:3000');
-      } else {
-        io.util.uniqueUri(protocol).should().eql('http://google.com:80');
-        io.util.uniqueUri(noprotocol).should().eql('http://google.com:80');
-      }
-
-      io.util.uniqueUri(https).should().eql('https://google.com:443');
-      io.util.uniqueUri(path).should().eql('https://google.com:443');
-    },
-
-    'chunk query string': function () {
-      io.util.chunkQuery('foo=bar').should().be.a('object');
-      io.util.chunkQuery('foo=bar').foo.should().eql('bar');
-    },
-
-    'merge query strings': function () {
-      var base = io.util.query('foo=bar', 'foo=baz')
-        , add = io.util.query('foo=bar', 'bar=foo')
-
-      base.should().eql('?foo=baz');
-      add.should().eql('?foo=bar&bar=foo');
-
-      io.util.query('','').should().eql('');
-      io.util.query('foo=bar', '').should().eql('?foo=bar');
-      io.util.query('', 'foo=bar').should().eql('?foo=bar');
-    },
-
-    'request': function () {
-      var type = typeof io.util.request();
-      type.should().eql('object');
-    },
-
-    'is array': function () {
-      io.util.isArray([]).should().be_true;
-      io.util.isArray({}).should().be_false;
-      io.util.isArray('str').should().be_false;
-      io.util.isArray(new Date).should().be_false;
-      io.util.isArray(true).should().be_false;
-      io.util.isArray(arguments).should().be_false;
-    },
-
-    'merge, deep merge': function () {
-      var start = {
-            foo: 'bar'
-          , bar: 'baz'
-          }
-        , duplicate = {
-            foo: 'foo'
-          , bar: 'bar'
-          }
-        , extra = {
-            ping: 'pong'
-          }
-        , deep = {
-            level1:{
-              foo: 'bar'
-            , level2: {
-                foo: 'bar'
-              ,  level3:{
-                  foo: 'bar'
-                , rescursive: deep
-                }
-              }
-            }
-          }
-          // same structure, but changed names
-        , deeper = {
-            foo: 'bar'
-          , level1:{
-              foo: 'baz'
-            , level2: {
-                foo: 'foo'
-              ,  level3:{
-                  foo: 'pewpew'
-                , rescursive: deep
-                }
-              }
-            }
-          };
-
-      io.util.merge(start, duplicate);
-
-      start.foo.should().eql('foo');
-      start.bar.should().eql('bar');
-
-      io.util.merge(start, extra);
-      start.ping.should().eql('pong');
-      start.foo.should().eql('foo');
-
-      io.util.merge(deep, deeper);
-
-      deep.foo.should().eql('bar');
-      deep.level1.foo.should().eql('baz');
-      deep.level1.level2.foo.should().eql('foo');
-      deep.level1.level2.level3.foo.should().eql('pewpew');
-    },
-
-    'defer': function (next) {
-      var now = +new Date;
-
-      io.util.defer(function () {
-        ((new Date - now) >= ( io.util.webkit ? 100 : 0 )).should().be_true();
-        next();
-      })
-    },
-
-    'indexOf': function () {
-      var data = ['socket', 2, 3, 4, 'socket', 5, 6, 7, 'io'];
-      io.util.indexOf(data, 'socket', 1).should().eql(4);
-      io.util.indexOf(data, 'socket').should().eql(0);
-      io.util.indexOf(data, 'waffles').should().eql(-1);
-    }
-
-  };
-
-})(
-    'undefined' == typeof module ? module = {} : module
-  , 'undefined' == typeof io ? require('socket.io-client') : io
-  , 'undefined' == typeof should ? require('should') : should
-);
diff --git a/node/node_modules/socket.io/.gitignore b/node/node_modules/socket.io/.gitignore
deleted file mode 100644 (file)
index 43378d0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.DS_Store
-lib-cov
-*.seed
-*.log
-*.csv
-*.dat
-*.out
-*.pid
-node_modules
diff --git a/node/node_modules/socket.io/.npmignore b/node/node_modules/socket.io/.npmignore
deleted file mode 100644 (file)
index 39e9864..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-support
-test
-examples
diff --git a/node/node_modules/socket.io/History.md b/node/node_modules/socket.io/History.md
deleted file mode 100644 (file)
index caa757d..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-
-0.8.3 / 2011-09-03
-==================
-
-  * Fixed `\n` parsing for non-JSON packets (fixes #479).
-  * Fixed parsing of certain unicode characters (fixes #451).
-  * Fixed transport message packet logging.
-  * Fixed emission of `error` event resulting in an uncaught exception if unhandled (fixes #476).
-  * Fixed; allow for falsy values as the configuration value of `log level` (fixes #491).
-  * Fixed repository URI in `package.json`. Fixes #504.
-  * Added text/plain content-type to handshake responses [einaros]
-  * Improved single byte writes [einaros]
-  * Updated socket.io-flashsocket default port from 843 to 10843 [3rd-Eden]
-  * Updated client.
-
-0.8.2 / 2011-08-29
-==================
-
-  * Updated client.
-
-0.8.1 / 2011-08-29
-==================
-
-  * Fixed utf8 bug in send framing in websocket [einaros]
-  * Fixed typo in docs [Znarkus]
-  * Fixed bug in send framing for over 64kB of data in websocket [einaros]
-  * Corrected ping handling in websocket transport [einaros]
-
-0.8.0 / 2011-08-28
-==================
-
-  * Updated to work with two-level websocket versioning. [einaros]
-  * Added hybi07 support. [einaros]
-  * Added hybi10 support. [einaros]
-  * Added http referrer verification to manager.js verifyOrigin. [einaors]
-
-0.7.11 / 2011-08-27
-===================
-
-  * Updated socket.io-client.
-
-0.7.10 / 2011-08-27
-===================
-
-  * Updated socket.io-client.
-
-0.7.9 / 2011-08-12
-==================
-
-  * Updated socket.io-client.
-  * Make sure we only do garbage collection when the server we receive is actually run.
-
-0.7.8 / 2011-08-08
-==================
-
-  * Changed; make sure sio#listen passes options to both HTTP server and socket.io manager.
-  * Added docs for sio#listen.
-  * Added options parameter support for Manager constructor.
-  * Added memory leaks tests and test-leaks Makefile task.
-  * Removed auto npm-linking from make test.
-  * Make sure that you can disable heartbeats. [3rd-Eden]
-  * Fixed rooms memory leak [3rd-Eden]
-  * Send response once we got all POST data, not immediately [Pita]
-  * Fixed onLeave behavior with missing clientsk [3rd-Eden]
-  * Prevent duplicate references in rooms.
-  * Added alias for `to` to `in` and `in` to `to`.
-  * Fixed roomClients definition.
-  * Removed dependency on redis for installation without npm [3rd-Eden]
-  * Expose path and querystring in handshakeData [3rd-Eden]
-
-0.7.7 / 2011-07-12
-==================
-
-  * Fixed double dispatch handling with emit to closed clients.
-  * Added test for emitting to closed clients to prevent regression.
-  * Fixed race condition in redis test.
-  * Changed Transport#end instrumentation.
-  * Leveraged $emit instead of emit internally.
-  * Made tests faster.
-  * Fixed double disconnect events.
-  * Fixed disconnect logic
-  * Simplified remote events handling in Socket.
-  * Increased testcase timeout.
-  * Fixed unknown room emitting (GH-291). [3rd-Eden]
-  * Fixed `address` in handshakeData. [3rd-Eden]
-  * Removed transports definition in chat example.
-  * Fixed room cleanup
-  * Fixed; make sure the client is cleaned up after booting.
-  * Make sure to mark the client as non-open if the connection is closed.
-  * Removed unneeded `buffer` declarations.
-  * Fixed; make sure to clear socket handlers and subscriptions upon transport close.
-
-0.7.6 / 2011-06-30
-==================
-
-  * Fixed general dispatching when a client has closed.
-
-0.7.5 / 2011-06-30
-==================
-
-  * Fixed dispatching to clients that are disconnected.
-
-0.7.4 / 2011-06-30
-==================
-
-  * Fixed; only clear handlers if they were set. [level09]
-
-0.7.3 / 2011-06-30
-==================
-
-  * Exposed handshake data to clients.
-  * Refactored dispatcher interface.
-  * Changed; Moved id generation method into the manager.
-  * Added sub-namespace authorization. [3rd-Eden]
-  * Changed; normalized SocketNamespace local eventing [dvv]
-  * Changed; Use packet.reason or default to 'packet' [3rd-Eden]
-  * Changed console.error to console.log.
-  * Fixed; bind both servers at the same time do that the test never times out.
-  * Added 304 support.
-  * Removed `Transport#name` for abstract interface.
-  * Changed; lazily require http and https module only when needed. [3rd-Eden]
-
-0.7.2 / 2011-06-22
-==================
-
-  * Make sure to write a packet (of type `noop`) when closing a poll.
-    This solves a problem with cross-domain requests being flagged as aborted and
-    reconnection being triggered.
-  * Added `noop` message type.
-
-0.7.1 / 2011-06-21 
-==================
-
-  * Fixed cross-domain XHR.
-  * Added CORS test to xhr-polling suite.
-
-0.7.0 / 2010-06-21
-==================
-
-  * http://socket.io/announcement.html
diff --git a/node/node_modules/socket.io/Makefile b/node/node_modules/socket.io/Makefile
deleted file mode 100644 (file)
index 7981705..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-ALL_TESTS = $(shell find test/ -name '*.test.js')
-
-run-tests:
-       @./node_modules/.bin/expresso \
-               -t 3000 \
-               -I support \
-               -I lib \
-               --serial \
-               $(TESTFLAGS) \
-               $(TESTS)
-
-test:
-       @$(MAKE) TESTS="$(ALL_TESTS)" run-tests
-
-test-cov:
-       @TESTFLAGS=--cov $(MAKE) test
-
-test-leaks:
-       @ls test/leaks/* | xargs node --expose_debug_as=debug --expose_gc
-
-.PHONY: test
diff --git a/node/node_modules/socket.io/Readme.md b/node/node_modules/socket.io/Readme.md
deleted file mode 100644 (file)
index 86c0233..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-# Socket.IO
-
-Socket.IO is a Node.JS project that makes WebSockets and realtime possible in
-all browsers. It also enhances WebSockets by providing built-in multiplexing,
-horizontal scalability, automatic JSON encoding/decoding, and more.
-
-## How to Install
-
-    npm install socket.io
-
-## How to use
-
-First, require `socket.io`:
-
-```js
-var io = require('socket.io');
-```
-
-Next, attach it to a HTTP/HTTPS server. If you're using the fantastic `express`
-web framework:
-
-```js
-var app = express.createServer()
-  , io = io.listen(app);
-
-app.listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.emit('news', { hello: 'world' });
-  socket.on('my other event', function (data) {
-    console.log(data);
-  });
-});
-```
-
-Finally, load it from the client side code:
-
-```html
-<script src="/socket.io/socket.io.js"></script>
-<script>
-  var socket = io.connect('http://localhost');
-  socket.on('news', function (data) {
-    console.log(data);
-    socket.emit('my other event', { my: 'data' });
-  });
-</script>
-```
-
-For more thorough examples, look at the `examples/` directory.
-
-## Short recipes
-
-### Sending and receiving events.
-
-Socket.IO allows you to emit and receive custom events.
-Besides `connect`, `message` and `disconnect`, you can emit custom events:
-
-```js
-// note, io.listen(<port>) will create a http server for you
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  io.sockets.emit('this', { will: 'be received by everyone' });
-
-  socket.on('private message', function (from, msg) {
-    console.log('I received a private message by ', from, ' saying ', msg);
-  });
-
-  socket.on('disconnect', function () {
-    sockets.emit('user disconnected');
-  });
-});
-```
-
-### Storing data associated to a client
-
-Sometimes it's necessary to store data associated with a client that's
-necessary for the duration of the session.
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.on('set nickname', function (name) {
-    socket.set('nickname', name, function () { socket.emit('ready'); });
-  });
-
-  socket.on('msg', function () {
-    socket.get('nickname', function (err, name) {
-      console.log('Chat message by ', name);
-    });
-  });
-});
-```
-
-#### Client side
-
-```html
-<script>
-  var socket = io.connect('http://localhost');
-
-  socket.on('connect', function () {
-    socket.emit('set nickname', confirm('What is your nickname?'));
-    socket.on('ready', function () {
-      console.log('Connected !');
-      socket.emit('msg', confirm('What is your message?'));
-    });
-  });
-</script>
-```
-
-### Restricting yourself to a namespace
-
-If you have control over all the messages and events emitted for a particular
-application, using the default `/` namespace works.
-
-If you want to leverage 3rd-party code, or produce code to share with others,
-socket.io provides a way of namespacing a `socket`.
-
-This has the benefit of `multiplexing` a single connection. Instead of
-socket.io using two `WebSocket` connections, it'll use one.
-
-The following example defines a socket that listens on '/chat' and one for
-'/news':
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-var chat = io
-  .of('/chat');
-  .on('connection', function (socket) {
-    socket.emit('a message', { that: 'only', '/chat': 'will get' });
-    chat.emit('a message', { everyone: 'in', '/chat': 'will get' });
-  });
-
-var news = io
-  .of('/news');
-  .on('connection', function (socket) {
-    socket.emit('item', { news: 'item' });
-  });
-```
-
-#### Client side:
-
-```html
-<script>
-  var chat = io.connect('http://localhost/chat')
-    , news = io.connect('http://localhost/news');
-
-  chat.on('connect', function () {
-    chat.emit('hi!');
-  });
-
-  news.on('news', function () {
-    news.emit('woot');
-  });
-</script>
-```
-
-### Sending volatile messages.
-
-Sometimes certain messages can be dropped. Let's say you have an app that
-shows realtime tweets for the keyword `bieber`. 
-
-If a certain client is not ready to receive messages (because of network slowness
-or other issues, or because he's connected through long polling and is in the
-middle of a request-response cycle), if he doesn't receive ALL the tweets related
-to bieber your application won't suffer.
-
-In that case, you might want to send those messages as volatile messages.
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  var tweets = setInterval(function () {
-    getBieberTweet(function (tweet) {
-      socket.volatile.emit('bieber tweet', tweet);
-    });
-  }, 100);
-
-  socket.on('disconnect', function () {
-    clearInterval(tweets);
-  });
-});
-```
-
-#### Client side
-
-In the client side, messages are received the same way whether they're volatile
-or not.
-
-### Getting acknowledgements
-
-Sometimes, you might want to get a callback when the client confirmed the message
-reception.
-
-To do this, simply pass a function as the last parameter of `.send` or `.emit`.
-What's more, when you use `.emit`, the acknowledgement is done by you, which
-means you can also pass data along:
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.on('ferret', function (name, fn) {
-    fn('woot');
-  });
-});
-```
-
-#### Client side
-
-```html
-<script>
-  var socket = io.connect(); // TIP: .connect with no args does auto-discovery
-  socket.on('connection', function () {
-    socket.emit('ferret', 'tobi', function (data) {
-      console.log(data); // data will be 'woot'
-    });
-  });
-</script>
-```
-
-### Broadcasting messages
-
-To broadcast, simply add a `broadcast` flag to `emit` and `send` method calls.
-Broadcasting means sending a message to everyone else except for the socket
-that starts it.
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.broadcast.emit('user connected');
-  socket.broadcast.json.send({ a: 'message' });
-});
-```
-
-### Rooms
-
-Sometimes you want to put certain sockets in the same room, so that it's easy
-to broadcast to all of them together.
-
-Think of this as built-in channels for sockets. Sockets `join` and `leave`
-rooms in each socket.
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.join('justin bieber fans');
-  socket.broadcast.to('justin bieber fans').emit('new fan');
-  io.sockets.in('rammstein fans').emit('new non-fan');
-});
-```
-
-### Using it just as a cross-browser WebSocket
-
-If you just want the WebSocket semantics, you can do that too.
-Simply leverage `send` and listen on the `message` event:
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.sockets.on('connection', function (socket) {
-  socket.on('message', function () { });
-  socket.on('disconnect', function () { });
-});
-```
-
-#### Client side
-
-```html
-<script>
-  var socket = io.connect('http://localhost/');
-  socket.on('connect', function () {
-    socket.send('hi');
-
-    socket.on('message', function (msg) {
-      // my msg
-    });
-  });
-</script>
-```
-
-### Changing configuration
-
-Configuration in socket.io is TJ-style:
-
-#### Server side
-
-```js
-var io = require('socket.io').listen(80);
-
-io.configure(function () {
-  io.set('transports', ['websocket', 'flashsocket', 'xhr-polling']);
-});
-
-io.configure('development', function () {
-  io.set('transports', ['websocket', 'xhr-polling']);
-  io.enable('log');
-});
-```
-
-## License 
-
-(The MIT License)
-
-Copyright (c) 2011 Guillermo Rauch &lt;guillermo@learnboost.com&gt;
-
-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.
diff --git a/node/node_modules/socket.io/examples/chat/app.js b/node/node_modules/socket.io/examples/chat/app.js
deleted file mode 100644 (file)
index 23f09f0..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-
-/**
- * Bootstrap app.
- */
-
-require.paths.unshift(__dirname + '/../../lib/');
-
-/**
- * Module dependencies.
- */
-
-var express = require('express')
-  , stylus = require('stylus')
-  , nib = require('nib')
-  , sio = require('socket.io');
-
-/**
- * App.
- */
-
-var app = express.createServer();
-
-/**
- * App configuration.
- */
-
-app.configure(function () {
-  app.use(stylus.middleware({ src: __dirname + '/public', compile: compile }))
-  app.use(express.static(__dirname + '/public'));
-  app.set('views', __dirname);
-  app.set('view engine', 'jade');
-
-  function compile (str, path) {
-    return stylus(str)
-      .set('filename', path)
-      .use(nib());
-  };
-});
-
-/**
- * App routes.
- */
-
-app.get('/', function (req, res) {
-  res.render('index', { layout: false });
-});
-
-/**
- * App listen.
- */
-
-app.listen(3000, function () {
-  var addr = app.address();
-  console.log('   app listening on http://' + addr.address + ':' + addr.port);
-});
-
-/**
- * Socket.IO server (single process only)
- */
-
-var io = sio.listen(app)
-  , nicknames = {};
-
-io.sockets.on('connection', function (socket) {
-  socket.on('user message', function (msg) {
-    socket.broadcast.emit('user message', socket.nickname, msg);
-  });
-
-  socket.on('nickname', function (nick, fn) {
-    if (nicknames[nick]) {
-      fn(true);
-    } else {
-      fn(false);
-      nicknames[nick] = socket.nickname = nick;
-      socket.broadcast.emit('announcement', nick + ' connected');
-      io.sockets.emit('nicknames', nicknames);
-    }
-  });
-
-  socket.on('disconnect', function () {
-    if (!socket.nickname) return;
-
-    delete nicknames[socket.nickname];
-    socket.broadcast.emit('announcement', socket.nickname + ' disconnected');
-    socket.broadcast.emit('nicknames', nicknames);
-  });
-});
diff --git a/node/node_modules/socket.io/examples/chat/index.jade b/node/node_modules/socket.io/examples/chat/index.jade
deleted file mode 100644 (file)
index 0633d8b..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-doctype 5
-html
-  head
-    link(href='/stylesheets/style.css', rel='stylesheet')
-    script(src='http://code.jquery.com/jquery-1.6.1.min.js')
-    script(src='/socket.io/socket.io.js')
-    script
-      // socket.io specific code
-      var socket = io.connect();
-
-      socket.on('connect', function () {
-        $('#chat').addClass('connected');
-      });
-
-      socket.on('announcement', function (msg) {
-        $('#lines').append($('<p>').append($('<em>').text(msg)));
-      });
-
-      socket.on('nicknames', function (nicknames) {
-        $('#nicknames').empty().append($('<span>Online: </span>'));
-        for (var i in nicknames) {
-          $('#nicknames').append($('<b>').text(nicknames[i]));
-        }
-      });
-
-      socket.on('user message', message);
-      socket.on('reconnect', function () {
-        $('#lines').remove();
-        message('System', 'Reconnected to the server');
-      });
-
-      socket.on('reconnecting', function () {
-        message('System', 'Attempting to re-connect to the server');
-      });
-
-      socket.on('error', function (e) {
-        message('System', e ? e : 'A unknown error occurred');
-      });
-
-      function message (from, msg) {
-        $('#lines').append($('<p>').append($('<b>').text(from), msg));
-      }
-
-      // dom manipulation
-      $(function () {
-        $('#set-nickname').submit(function (ev) {
-          socket.emit('nickname', $('#nick').val(), function (set) {
-            if (!set) {
-              clear();
-              return $('#chat').addClass('nickname-set');
-            }
-            $('#nickname-err').css('visibility', 'visible');
-          });
-          return false;
-        });
-
-        $('#send-message').submit(function () {
-          message('me', $('#message').val());
-          socket.emit('user message', $('#message').val());
-          clear();
-          $('#lines').get(0).scrollTop = 10000000;
-          return false;
-        });
-
-        function clear () {
-          $('#message').val('').focus();
-        };
-      });
-  body
-    #chat
-      #nickname
-        form.wrap#set-nickname
-          p Please type in your nickname and press enter.
-          input#nick
-          p#nickname-err Nickname already in use
-      #connecting
-        .wrap Connecting to socket.io server
-      #messages
-        #nicknames
-        #lines
-      form#send-message
-        input#message
-        button Send
diff --git a/node/node_modules/socket.io/examples/chat/package.json b/node/node_modules/socket.io/examples/chat/package.json
deleted file mode 100644 (file)
index f095e85..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-    "name": "chat.io"
-  , "description": "example chat application with socket.io"
-  , "version": "0.0.1"
-  , "dependencies": {
-        "express": "2.3.11"
-      , "jade": "0.12.1"
-      , "stylus": "0.13.3"
-      , "nib": "0.0.8"
-    }
-}
diff --git a/node/node_modules/socket.io/examples/chat/public/stylesheets/mixins.styl b/node/node_modules/socket.io/examples/chat/public/stylesheets/mixins.styl
deleted file mode 100644 (file)
index fb5644c..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-border-radius(n)
-  -webkit-border-radius n
-  -moz-border-radius n
-  border-radius n
-
-// replace str with val
-
-replace(expr, str, val)
-  expr = clone(expr)
-  for e, i in expr
-    if str == e
-      expr[i] = val
-  expr
-
-// normalize gradient point (webkit)
-
-grad-point(pos)
-  if length(pos) == 1
-    return left pos if pos in (top bottom)
-    return pos top if pos in (left right)
-  else if pos[0] in (top bottom)
-    pos[1] pos[0]
-  else
-    pos
-
-// implicit color stop position
-
-pos-in-stops(i, stops)
-  len = length(stops)
-  if len - 1 == i
-    100%
-  else if i
-    unit(i / len * 100, '%')
-  else
-    0%
-
-// normalize color stops
-//   - (color pos) -> (pos color)
-//   - (color) -> (implied-pos color)
-
-normalize-stops(stops)
-  stops = clone(stops)
-  for stop, i in stops
-    if length(stop) == 1
-      color = stop[0]
-      stop[0] = pos-in-stops(i, stops)
-      stop[1] = color
-    else if typeof(stop[1]) == 'unit'
-      pos = stop[1]
-      stop[1] = stop[0]
-      stop[0] = pos
-  stops
-
-// join color stops with the given translation function
-
-join-stops(stops, translate)
-  str = ''
-  len = length(stops)
-  for stop, i in stops
-    str += ', ' if i
-    pos = stop[0]
-    color = stop[1]
-    str += translate(color, pos)
-  unquote(str)
-
-// webkit translation function
-
-webkit-stop(color, pos)
-  s('color-stop(%d, %s)', pos / 100, color)
-
-// mozilla translation function
-
-moz-stop(color, pos)
-  s('%s %s', color, pos)
-
-// create a linear gradient with the given start
-// position, followed by color stops
-
-linear-gradient(start, stops...)
-  error('color stops required') unless length(stops)
-  prop = current-property[0]
-  val = current-property[1]
-  stops = normalize-stops(stops)
-
-  // webkit
-  end = grad-point(opposite-position(start))
-  webkit = s('-webkit-gradient(linear, %s, %s, %s)', grad-point(start), end, join-stops(stops, webkit-stop))
-  add-property(prop, replace(val, '__CALL__', webkit))
-
-  // moz
-  stops = join-stops(stops, moz-stop)
-  moz = s('-moz-linear-gradient(%s, %s)', start, stops)
-  add-property(prop, replace(val, '__CALL__', moz))
-
-  // literal
-  s('linear-gradient(%s, %s)', start, stops)
diff --git a/node/node_modules/socket.io/examples/chat/public/stylesheets/style.css b/node/node_modules/socket.io/examples/chat/public/stylesheets/style.css
deleted file mode 100644 (file)
index 42cf98f..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-#chat,
-#nickname,
-#messages {
-  width: 600px;
-}
-#chat {
-  position: relative;
-  border: 1px solid #ccc;
-}
-#nickname,
-#connecting {
-  position: absolute;
-  height: 410px;
-  z-index: 100;
-  left: 0;
-  top: 0;
-  background: #fff;
-  text-align: center;
-  width: 600px;
-  font: 15px Georgia;
-  color: #666;
-  display: block;
-}
-#nickname .wrap,
-#connecting .wrap {
-  padding-top: 150px;
-}
-#nickname input {
-  border: 1px solid #ccc;
-  padding: 10px;
-}
-#nickname input:focus {
-  border-color: #999;
-  outline: 0;
-}
-#nickname #nickname-err {
-  color: #8b0000;
-  font-size: 12px;
-  visibility: hidden;
-}
-.connected #connecting {
-  display: none;
-}
-.nickname-set #nickname {
-  display: none;
-}
-#messages {
-  height: 380px;
-  background: #eee;
-}
-#messages em {
-  text-shadow: 0 1px 0 #fff;
-  color: #999;
-}
-#messages p {
-  padding: 0;
-  margin: 0;
-  font: 12px Helvetica, Arial;
-  padding: 5px 10px;
-}
-#messages p b {
-  display: inline-block;
-  padding-right: 10px;
-}
-#messages p:nth-child(even) {
-  background: #fafafa;
-}
-#messages #nicknames {
-  background: #ccc;
-  padding: 2px 4px 4px;
-  font: 11px Helvetica;
-}
-#messages #nicknames span {
-  color: #000;
-}
-#messages #nicknames b {
-  display: inline-block;
-  color: #fff;
-  background: #999;
-  padding: 3px 6px;
-  margin-right: 5px;
-  -webkit-border-radius: 10px;
-  -moz-border-radius: 10px;
-  border-radius: 10px;
-  text-shadow: 0 1px 0 #666;
-}
-#messages #lines {
-  height: 355px;
-  overflow: auto;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-#messages #lines::-webkit-scrollbar {
-  width: 6px;
-  height: 6px;
-}
-#messages #lines::-webkit-scrollbar-button:start:decrement,
-#messages #lines ::-webkit-scrollbar-button:end:increment {
-  display: block;
-  height: 10px;
-}
-#messages #lines::-webkit-scrollbar-button:vertical:increment {
-  background-color: #fff;
-}
-#messages #lines::-webkit-scrollbar-track-piece {
-  background-color: #fff;
-  -webkit-border-radius: 3px;
-}
-#messages #lines::-webkit-scrollbar-thumb:vertical {
-  height: 50px;
-  background-color: #ccc;
-  -webkit-border-radius: 3px;
-}
-#messages #lines::-webkit-scrollbar-thumb:horizontal {
-  width: 50px;
-  background-color: #fff;
-  -webkit-border-radius: 3px;
-}
-#send-message {
-  background: #fff;
-  position: relative;
-}
-#send-message input {
-  border: none;
-  height: 30px;
-  padding: 0 10px;
-  line-height: 30px;
-  vertical-align: middle;
-  width: 580px;
-}
-#send-message input:focus {
-  outline: 0;
-}
-#send-message button {
-  position: absolute;
-  top: 5px;
-  right: 5px;
-}
-button {
-  margin: 0;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  user-select: none;
-  display: inline-block;
-  text-decoration: none;
-  background: #43a1f7;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #43a1f7), color-stop(1, #377ad0));
-  background: -webkit-linear-gradient(top, #43a1f7 0%, #377ad0 100%);
-  background: -moz-linear-gradient(top, #43a1f7 0%, #377ad0 100%);
-  background: linear-gradient(top, #43a1f7 0%, #377ad0 100%);
-  border: 1px solid #2e70c4;
-  -webkit-border-radius: 16px;
-  -moz-border-radius: 16px;
-  border-radius: 16px;
-  color: #fff;
-  font-family: "lucida grande", sans-serif;
-  font-size: 11px;
-  font-weight: normal;
-  line-height: 1;
-  padding: 3px 10px 5px 10px;
-  text-align: center;
-  text-shadow: 0 -1px 1px #2d6dc0;
-}
-button:hover,
-button.hover {
-  background: darker;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #43a1f7), color-stop(1, #2e70c4));
-  background: -webkit-linear-gradient(top, #43a1f7 0%, #2e70c4 100%);
-  background: -moz-linear-gradient(top, #43a1f7 0%, #2e70c4 100%);
-  background: linear-gradient(top, #43a1f7 0%, #2e70c4 100%);
-  border: 1px solid #2e70c4;
-  cursor: pointer;
-  text-shadow: 0 -1px 1px #2c6bbb;
-}
-button:active,
-button.active {
-  background: #2e70c4;
-  border: 1px solid #2e70c4;
-  border-bottom: 1px solid #2861aa;
-  text-shadow: 0 -1px 1px #2b67b5;
-}
-button:focus,
-button.focus {
-  outline: none;
-  -webkit-box-shadow: 0 1px 0 0 rgba(255,255,255,0.4), 0 0 4px 0 #377ad0;
-  -moz-box-shadow: 0 1px 0 0 rgba(255,255,255,0.4), 0 0 4px 0 #377ad0;
-  box-shadow: 0 1px 0 0 rgba(255,255,255,0.4), 0 0 4px 0 #377ad0;
-}
diff --git a/node/node_modules/socket.io/examples/chat/public/stylesheets/style.styl b/node/node_modules/socket.io/examples/chat/public/stylesheets/style.styl
deleted file mode 100644 (file)
index 6289c94..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-@import 'nib'
-
-#chat, #nickname, #messages
-  width 600px
-
-#chat
-  position relative
-  border 1px solid #ccc
-
-#nickname, #connecting
-  position absolute
-  height 410px
-  z-index 100
-  left 0
-  top 0
-  background #fff
-  text-align center
-  width 600px
-  font 15px Georgia
-  color #666
-  display block
-  .wrap
-    padding-top 150px
-
-#nickname
-  input
-    border 1px solid #ccc
-    padding 10px
-    &:focus
-      border-color #999
-      outline 0
-  #nickname-err
-    color darkred
-    font-size 12px
-    visibility hidden
-
-.connected
-  #connecting
-    display none
-
-.nickname-set
-  #nickname
-    display none
-
-#messages
-  height 380px
-  background #eee
-  em
-    text-shadow 0 1px 0 #fff
-    color #999
-  p
-    padding 0
-    margin 0
-    font 12px Helvetica, Arial
-    padding 5px 10px
-    b
-      display inline-block
-      padding-right 10px
-  p:nth-child(even)
-    background #fafafa
-  #nicknames
-    background #ccc
-    padding 2px 4px 4px
-    font 11px Helvetica
-    span
-      color black
-    b
-      display inline-block
-      color #fff
-      background #999
-      padding 3px 6px
-      margin-right 5px
-      border-radius 10px
-      text-shadow 0 1px 0 #666
-  #lines
-    height 355px
-    overflow auto
-    overflow-x hidden
-    overflow-y auto
-    &::-webkit-scrollbar
-      width 6px
-      height 6px
-    &::-webkit-scrollbar-button:start:decrement, ::-webkit-scrollbar-button:end:increment
-      display block
-      height 10px
-    &::-webkit-scrollbar-button:vertical:increment
-      background-color #fff
-    &::-webkit-scrollbar-track-piece
-      background-color #fff
-      -webkit-border-radius 3px
-    &::-webkit-scrollbar-thumb:vertical
-      height 50px
-      background-color #ccc
-      -webkit-border-radius 3px
-    &::-webkit-scrollbar-thumb:horizontal
-      width 50px
-      background-color #fff
-      -webkit-border-radius 3px
-
-#send-message
-  background #fff
-  position relative
-  input
-    border none
-    height 30px
-    padding 0 10px
-    line-height 30px
-    vertical-align middle
-    width 580px
-    &:focus
-      outline 0
-  button
-    position absolute
-    top 5px
-    right 5px
-
-button
-  download-button()
diff --git a/node/node_modules/socket.io/examples/irc-output/app.js b/node/node_modules/socket.io/examples/irc-output/app.js
deleted file mode 100644 (file)
index 591ec2a..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-
-/**
- * Bootstrap app.
- */
-
-require.paths.unshift(__dirname + '/../../lib/');
-
-/**
- * Module dependencies.
- */
-
-var express = require('express')
-  , stylus = require('stylus')
-  , nib = require('nib')
-  , sio = require('socket.io')
-  , irc = require('./irc');
-
-/**
- * App.
- */
-
-var app = express.createServer();
-
-/**
- * App configuration.
- */
-
-app.configure(function () {
-  app.use(stylus.middleware({ src: __dirname + '/public', compile: compile }))
-  app.use(express.static(__dirname + '/public'));
-  app.set('views', __dirname);
-  app.set('view engine', 'jade');
-
-  function compile (str, path) {
-    return stylus(str)
-      .set('filename', path)
-      .use(nib());
-  };
-});
-
-/**
- * App routes.
- */
-
-app.get('/', function (req, res) {
-  res.render('index', { layout: false });
-});
-
-/**
- * App listen.
- */
-
-app.listen(3000, function () {
-  var addr = app.address();
-  console.log('   app listening on http://' + addr.address + ':' + addr.port);
-});
-
-/**
- * Socket.IO server
- */
-
-var io = sio.listen(app)
-
-/**
- * Connect to IRC.
- */
-
-var client = new irc.Client('irc.freenode.net', 6667);
-client.connect('socketio\\test\\' + String(Math.random()).substr(-3));
-client.on('001', function () {
-  this.send('JOIN', '#node.js');
-});
-client.on('PART', function (prefix) {
-  io.sockets.emit('announcement', irc.user(prefix) + ' left the channel');
-});
-client.on('JOIN', function (prefix) {
-  io.sockets.emit('announcement', irc.user(prefix) + ' joined the channel');
-});
-client.on('PRIVMSG', function (prefix, channel, text) {
-  io.sockets.emit('irc message', irc.user(prefix), text);
-});
diff --git a/node/node_modules/socket.io/examples/irc-output/index.jade b/node/node_modules/socket.io/examples/irc-output/index.jade
deleted file mode 100644 (file)
index 5468632..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-doctype 5
-html
-  head
-    link(href='/stylesheets/style.css', rel='stylesheet')
-    script(src='http://code.jquery.com/jquery-1.6.1.min.js')
-    script(src='/socket.io/socket.io.js')
-    script
-      var socket = io.connect();
-
-      socket.on('connect', function () {
-        $('#irc').addClass('connected');
-      });
-
-      socket.on('announcement', function (msg) {
-        $('#messages').append($('<p>').append($('<em>').text(msg)));
-        $('#messages').get(0).scrollTop = 10000000;
-      });
-
-      socket.on('irc message', function (user, msg) {
-        $('#messages').append($('<p>').append($('<b>').text(user), msg));
-        $('#messages').get(0).scrollTop = 10000000;
-      });
-  body
-    h2 Node.JS IRC
-    #irc
-      #connecting
-        .wrap Connecting to socket.io server
-      #messages
diff --git a/node/node_modules/socket.io/examples/irc-output/irc.js b/node/node_modules/socket.io/examples/irc-output/irc.js
deleted file mode 100644 (file)
index c89ddb0..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * From https://github.com/felixge/nodelog/
- */
-
-var sys = require('sys');
-var tcp = require('net');
-var irc = exports;
-
-function bind(fn, scope) {
-  var bindArgs = Array.prototype.slice.call(arguments);
-  bindArgs.shift();
-  bindArgs.shift();
-
-  return function() {
-    var args = Array.prototype.slice.call(arguments);
-    fn.apply(scope, bindArgs.concat(args));
-  };
-}
-
-function each(set, iterator) {
-  for (var i = 0; i < set.length; i++) {
-    var r = iterator(set[i], i);
-    if (r === false) {
-      return;
-    }
-  }
-}
-
-var Client = irc.Client = function(host, port) {
-  this.host = host || 'localhost';
-  this.port = port || 6667;
-
-  this.connection = null;
-  this.buffer = '';
-  this.encoding = 'utf8';
-  this.timeout = 10 * 60 * 60 * 1000;
-
-  this.nick = null;
-  this.user = null;
-  this.real = null;
-}
-sys.inherits(Client, process.EventEmitter);
-
-Client.prototype.connect = function(nick, user, real) {
-  var connection = tcp.createConnection(this.port, this.host);
-  connection.setEncoding(this.encoding);
-  connection.setTimeout(this.timeout);
-  connection.addListener('connect', bind(this.onConnect, this));
-  connection.addListener('data', bind(this.onReceive, this));
-  connection.addListener('end', bind(this.onEof, this));
-  connection.addListener('timeout', bind(this.onTimeout, this));
-  connection.addListener('close', bind(this.onClose, this));
-
-  this.nick = nick;
-  this.user = user || 'guest';
-  this.real = real || 'Guest';
-
-  this.connection = connection;
-};
-
-Client.prototype.disconnect = function(why) {
-  if (this.connection.readyState !== 'closed') {
-    this.connection.close();
-    sys.puts('disconnected (reason: '+why+')');
-    this.emit('DISCONNECT', why);
-  }
-};
-
-Client.prototype.send = function(arg1) {
-  if (this.connection.readyState !== 'open') {
-    return this.disconnect('cannot send with readyState: '+this.connection.readyState);
-  }
-
-  var message = [];
-  for (var i = 0; i< arguments.length; i++) {
-    if (arguments[i]) {
-      message.push(arguments[i]);
-    }
-  }
-  message = message.join(' ');
-
-  sys.puts('> '+message);
-  message = message + "\r\n";
-  this.connection.write(message, this.encoding);
-};
-
-Client.prototype.parse = function(message) {
-  var match = message.match(/(?:(:[^\s]+) )?([^\s]+) (.+)/);
-  var parsed = {
-    prefix: match[1],
-    command: match[2]
-  };
-
-  var params = match[3].match(/(.*?) ?:(.*)/);
-  if (params) {
-    // Params before :
-    params[1] = (params[1])
-      ? params[1].split(' ')
-      : [];
-    // Rest after :
-    params[2] = params[2]
-      ? [params[2]]
-      : [];
-
-    params = params[1].concat(params[2]);
-  } else {
-    params = match[3].split(' ');
-  }
-
-  parsed.params = params;
-  return parsed;
-};
-
-Client.prototype.onConnect = function() {
-  this.send('NICK', this.nick);
-  this.send('USER', this.user, '0', '*', ':'+this.real);
-};
-
-Client.prototype.onReceive = function(chunk) {
-  this.buffer = this.buffer + chunk;
-  
-  while (this.buffer) {
-    var offset = this.buffer.indexOf("\r\n");
-    if (offset < 0) {
-      return;
-    }
-  
-    var message = this.buffer.substr(0, offset);
-    this.buffer = this.buffer.substr(offset + 2);
-    sys.puts('< '+message);
-
-    message = this.parse(message);
-
-    this.emit.apply(this, [message.command, message.prefix].concat(message.params));
-
-    if (message !== false) {
-      this.onMessage(message);
-    }
-  }
-}; 
-
-Client.prototype.onMessage = function(message) {
-  switch (message.command) {
-    case 'PING':
-      this.send('PONG', ':'+message.params[0]);
-      break;
-  }
-};
-
-Client.prototype.onEof = function() {
-  this.disconnect('eof');
-};
-
-Client.prototype.onTimeout = function() {
-  this.disconnect('timeout');
-};
-
-Client.prototype.onClose = function() {
-  this.disconnect('close');
-};
-
-exports.user = function(prefix) {
-  return prefix.match(/:([^!]+)!/)[1]
-};
diff --git a/node/node_modules/socket.io/examples/irc-output/package.json b/node/node_modules/socket.io/examples/irc-output/package.json
deleted file mode 100644 (file)
index 88bf42f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    "name": "socket.io-irc"
-  , "version": "0.0.1"
-  , "dependencies": {
-        "express": "2.3.11"
-      , "jade": "0.12.1"
-      , "stylus": "0.13.3"
-      , "nib": "0.0.8"
-    }
-}
diff --git a/node/node_modules/socket.io/examples/irc-output/public/stylesheets/style.styl b/node/node_modules/socket.io/examples/irc-output/public/stylesheets/style.styl
deleted file mode 100644 (file)
index 2713512..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-@import 'nib'
-
-h2
-  font bold 18px Helvetica Neue, Arial
-
-#irc, #messages
-  width 600px
-
-#irc
-  position relative
-  border 1px solid #ccc
-
-#connecting
-  position absolute
-  height 410px
-  z-index 100
-  left 0
-  top 0
-  background #fff
-  text-align center
-  width 600px
-  font 15px Georgia
-  color #666
-  display block
-  .wrap
-    padding-top 150px
-
-.connected
-  #connecting
-    display none
-
-#messages
-  height 380px
-  background #eee
-  overflow auto
-  overflow-x hidden
-  overflow-y auto
-  &::-webkit-scrollbar
-    width 6px
-    height 6px
-  &::-webkit-scrollbar-button:start:decrement, ::-webkit-scrollbar-button:end:increment
-    display block
-    height 10px
-  &::-webkit-scrollbar-button:vertical:increment
-    background-color #fff
-  &::-webkit-scrollbar-track-piece
-    background-color #fff
-    -webkit-border-radius 3px
-  &::-webkit-scrollbar-thumb:vertical
-    height 50px
-    background-color #ccc
-    -webkit-border-radius 3px
-  &::-webkit-scrollbar-thumb:horizontal
-    width 50px
-    background-color #fff
-    -webkit-border-radius 3px
-  em
-    text-shadow 0 1px 0 #fff
-    color #999
-  p
-    padding 0
-    margin 0
-    font 12px Helvetica, Arial
-    padding 5px 10px
-    b
-      display inline-block
-      padding-right 10px
-  p:nth-child(even)
-    background #fafafa
diff --git a/node/node_modules/socket.io/index.js b/node/node_modules/socket.io/index.js
deleted file mode 100644 (file)
index cc00c10..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-module.exports = require('./lib/socket.io');
diff --git a/node/node_modules/socket.io/lib/logger.js b/node/node_modules/socket.io/lib/logger.js
deleted file mode 100644 (file)
index ce480ea..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var util = require('./util')
-  , toArray = util.toArray;
-
-/**
- * Log levels.
- */
-
-var levels = [
-    'error'
-  , 'warn'
-  , 'info'
-  , 'debug'
-];
-
-/**
- * Colors for log levels.
- */
-
-var colors = [
-    31
-  , 33
-  , 36
-  , 90
-];
-
-/**
- * Pads the nice output to the longest log level.
- */
-
-function pad (str) {
-  var max = 0;
-
-  for (var i = 0, l = levels.length; i < l; i++)
-    max = Math.max(max, levels[i].length);
-
-  if (str.length < max)
-    return str + new Array(max - str.length + 1).join(' ');
-
-  return str;
-};
-
-/**
- * Logger (console).
- *
- * @api public
- */
-
-var Logger = module.exports = function (opts) {
-  opts = opts || {}
-  this.colors = false !== opts.colors;
-  this.level = 3;
-};
-
-/**
- * Log method.
- *
- * @api public
- */
-
-Logger.prototype.log = function (type) {
-  var index = levels.indexOf(type);
-
-  if (index > this.level)
-    return this;
-
-  console.log.apply(
-      console
-    , [this.colors
-        ? '   \033[' + colors[index] + 'm' + pad(type) + ' -\033[39m'
-        : type + ':'
-      ].concat(toArray(arguments).slice(1))
-  );
-
-  return this;
-};
-
-/**
- * Generate methods.
- */
-
-levels.forEach(function (name) {
-  Logger.prototype[name] = function () {
-    this.log.apply(this, [name].concat(toArray(arguments)));
-  };
-});
diff --git a/node/node_modules/socket.io/lib/manager.js b/node/node_modules/socket.io/lib/manager.js
deleted file mode 100644 (file)
index d974afc..0000000
+++ /dev/null
@@ -1,1026 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var fs = require('fs')
-  , url = require('url')
-  , util = require('./util')
-  , store = require('./store')
-  , client = require('socket.io-client')
-  , transports = require('./transports')
-  , Logger = require('./logger')
-  , Socket = require('./socket')
-  , MemoryStore = require('./stores/memory')
-  , SocketNamespace = require('./namespace')
-  , EventEmitter = process.EventEmitter;
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = Manager;
-
-/**
- * Default transports.
- */
-
-var defaultTransports = exports.defaultTransports = [
-    'websocket'
-  , 'htmlfile'
-  , 'xhr-polling'
-  , 'jsonp-polling'
-];
-
-/**
- * Inherited defaults.
- */
-
-var parent = module.parent.exports
-  , protocol = parent.protocol;
-
-/**
- * Manager constructor.
- *
- * @param {HTTPServer} server
- * @param {Object} options, optional
- * @api public
- */
-
-function Manager (server, options) {
-  this.server = server;
-  this.namespaces = {};
-  this.sockets = this.of('');
-  this.settings = {
-      origins: '*:*'
-    , log: true
-    , store: new MemoryStore
-    , logger: new Logger
-    , heartbeats: true
-    , resource: '/socket.io'
-    , transports: defaultTransports
-    , authorization: false
-    , 'log level': 3
-    , 'close timeout': 25
-    , 'heartbeat timeout': 15
-    , 'heartbeat interval': 20
-    , 'polling duration': 20
-    , 'flash policy server': true
-    , 'flash policy port': 10843
-    , 'destroy upgrade': true
-    , 'browser client': true
-    , 'browser client minification': false
-    , 'browser client etag': false
-    , 'browser client handler': false
-    , 'client store expiration': 15
-  };
-
-  for (var i in options) {
-    this.settings[i] = options[i];
-  }
-
-  this.initStore();
-
-  // reset listeners
-  this.oldListeners = server.listeners('request');
-  server.removeAllListeners('request');
-
-  var self = this;
-
-  server.on('request', function (req, res) {
-    self.handleRequest(req, res);
-  });
-
-  server.on('upgrade', function (req, socket, head) {
-    self.handleUpgrade(req, socket, head);
-  });
-
-  server.on('close', function () {
-    clearInterval(self.gc);
-  });
-
-  server.once('listening', function () {
-    self.gc = setInterval(self.garbageCollection.bind(self), 10000);
-  });
-
-  for (var i in transports) {
-    if (transports[i].init) {
-      transports[i].init(this);
-    }
-  }
-
-  this.log.info('socket.io started');
-};
-
-Manager.prototype.__proto__ = EventEmitter.prototype
-
-/**
- * Store accessor shortcut.
- *
- * @api public
- */
-
-Manager.prototype.__defineGetter__('store', function () {
-  var store = this.get('store');
-  store.manager = this;
-  return store;
-});
-
-/**
- * Logger accessor.
- *
- * @api public
- */
-
-Manager.prototype.__defineGetter__('log', function () {
-  if (this.disabled('log')) return;
-
-  var logger = this.get('logger');
-  logger.level = this.get('log level') || -1;
-
-  return logger;
-});
-
-/**
- * Get settings.
- *
- * @api public
- */
-
-Manager.prototype.get = function (key) {
-  return this.settings[key];
-};
-
-/**
- * Set settings
- *
- * @api public
- */
-
-Manager.prototype.set = function (key, value) {
-  if (arguments.length == 1) return this.get(key);
-  this.settings[key] = value;
-  this.emit('set:' + key, this.settings[key], key);
-  return this;
-};
-
-/**
- * Enable a setting
- *
- * @api public
- */
-
-Manager.prototype.enable = function (key) {
-  this.settings[key] = true;
-  this.emit('set:' + key, this.settings[key], key);
-  return this;
-};
-
-/**
- * Disable a setting
- *
- * @api public
- */
-
-Manager.prototype.disable = function (key) {
-  this.settings[key] = false;
-  this.emit('set:' + key, this.settings[key], key);
-  return this;
-};
-
-/**
- * Checks if a setting is enabled
- *
- * @api public
- */
-
-Manager.prototype.enabled = function (key) {
-  return !!this.settings[key];
-};
-
-/**
- * Checks if a setting is disabled
- *
- * @api public
- */
-
-Manager.prototype.disabled = function (key) {
-  return !this.settings[key];
-};
-
-/**
- * Configure callbacks.
- *
- * @api public
- */
-
-Manager.prototype.configure = function (env, fn) {
-  if ('function' == typeof env) {
-    env.call(this);
-  } else if (env == process.env.NODE_ENV) {
-    fn.call(this);
-  }
-
-  return this;
-};
-
-/**
- * Initializes everything related to the message dispatcher.
- *
- * @api private
- */
-
-Manager.prototype.initStore = function () {
-  this.handshaken = {};
-  this.connected = {};
-  this.open = {};
-  this.closed = {};
-  this.closedA = [];
-  this.rooms = {};
-  this.roomClients = {};
-
-  var self = this;
-
-  this.store.subscribe('handshake', function (id, data) {
-    self.onHandshake(id, data);
-  });
-
-  this.store.subscribe('connect', function (id) {
-    self.onConnect(id);
-  });
-
-  this.store.subscribe('open', function (id) {
-    self.onOpen(id);
-  });
-
-  this.store.subscribe('join', function (id, room) {
-    self.onJoin(id, room);
-  });
-
-  this.store.subscribe('leave', function (id, room) {
-    self.onLeave(id, room);
-  });
-
-  this.store.subscribe('close', function (id) {
-    self.onClose(id);
-  });
-
-  this.store.subscribe('dispatch', function (room, packet, volatile, exceptions) {
-    self.onDispatch(room, packet, volatile, exceptions);
-  });
-
-  this.store.subscribe('disconnect', function (id) {
-    self.onDisconnect(id);
-  });
-};
-
-/**
- * Called when a client handshakes.
- *
- * @param text
- */
-
-Manager.prototype.onHandshake = function (id, data) {
-  this.handshaken[id] = data;
-};
-
-/**
- * Called when a client connects (ie: transport first opens)
- *
- * @api private
- */
-
-Manager.prototype.onConnect = function (id) {
-  this.connected[id] = true;
-};
-
-/**
- * Called when a client opens a request in a different node.
- *
- * @api private
- */
-
-Manager.prototype.onOpen = function (id) {
-  this.open[id] = true;
-
-  // if we were buffering messages for the client, clear them
-  if (this.closed[id]) {
-    var self = this;
-
-    this.closedA.splice(this.closedA.indexOf(id), 1);
-
-    this.store.unsubscribe('dispatch:' + id, function () {
-      delete self.closed[id];
-    });
-  }
-
-  // clear the current transport
-  if (this.transports[id]) {
-    this.transports[id].discard();
-    this.transports[id] = null;
-  }
-};
-
-/**
- * Called when a message is sent to a namespace and/or room.
- *
- * @api private
- */
-
-Manager.prototype.onDispatch = function (room, packet, volatile, exceptions) {
-  if (this.rooms[room]) {
-    for (var i = 0, l = this.rooms[room].length; i < l; i++) {
-      var id = this.rooms[room][i];
-
-      if (!~exceptions.indexOf(id)) {
-        if (this.transports[id] && this.transports[id].open) {
-          this.transports[id].onDispatch(packet, volatile);
-        } else if (!volatile) {
-          this.onClientDispatch(id, packet);
-        }
-      }
-    }
-  }
-};
-
-/**
- * Called when a client joins a nsp / room.
- *
- * @api private
- */
-
-Manager.prototype.onJoin = function (id, name) {
-  if (!this.roomClients[id]) {
-    this.roomClients[id] = {};
-  }
-
-  if (!this.rooms[name]) {
-    this.rooms[name] = [];
-  }
-
-  if (!~this.rooms[name].indexOf(id)) {
-    this.rooms[name].push(id);
-    this.roomClients[id][name] = true;
-  }
-};
-
-/**
- * Called when a client leaves a nsp / room.
- *
- * @param private
- */
-
-Manager.prototype.onLeave = function (id, room) {
-  if (this.rooms[room]) {
-    var index = this.rooms[room].indexOf(id);
-
-    if (index >= 0) {
-      this.rooms[room].splice(index, 1);
-    }
-
-    if (!this.rooms[room].length) {
-      delete this.rooms[room];
-    }
-    delete this.roomClients[id][room];
-  }
-};
-
-/**
- * Called when a client closes a request in different node.
- *
- * @api private
- */
-
-Manager.prototype.onClose = function (id) {
-  if (this.open[id]) {
-    delete this.open[id];
-  }
-
-  this.closed[id] = [];
-  this.closedA.push(id);
-
-  var self = this;
-
-  this.store.subscribe('dispatch:' + id, function (packet, volatile) {
-    if (!volatile) {
-      self.onClientDispatch(id, packet);
-    }
-  });
-};
-
-/**
- * Dispatches a message for a closed client.
- *
- * @api private
- */
-
-Manager.prototype.onClientDispatch = function (id, packet) {
-  if (this.closed[id]) {
-    this.closed[id].push(packet);
-  }
-};
-
-/**
- * Receives a message for a client.
- *
- * @api private
- */
-
-Manager.prototype.onClientMessage = function (id, packet) {
-  if (this.namespaces[packet.endpoint]) {
-    this.namespaces[packet.endpoint].handlePacket(id, packet);
-  }
-};
-
-/**
- * Fired when a client disconnects (not triggered).
- *
- * @api private
- */
-
-Manager.prototype.onClientDisconnect = function (id, reason) {
-  for (var name in this.namespaces) {
-    if (this.roomClients[id][name]) {
-      this.namespaces[name].handleDisconnect(id, reason);
-    }
-  }
-
-  this.onDisconnect(id);
-};
-
-/**
- * Called when a client disconnects.
- *
- * @param text
- */
-
-Manager.prototype.onDisconnect = function (id, local) {
-  delete this.handshaken[id];
-
-  if (this.open[id]) {
-    delete this.open[id];
-  }
-
-  if (this.connected[id]) {
-    delete this.connected[id];
-  }
-
-  if (this.transports[id]) {
-    this.transports[id].discard();
-    delete this.transports[id];
-  }
-
-  if (this.closed[id]) {
-    delete this.closed[id];
-    this.closedA.splice(this.closedA.indexOf(id), 1);
-  }
-
-  if (this.roomClients[id]) {
-    for (var room in this.roomClients[id]) {
-      this.onLeave(id, room);
-    }
-    delete this.roomClients[id]
-  }
-
-  this.store.destroyClient(id, this.get('client store expiration'));
-
-  this.store.unsubscribe('dispatch:' + id);
-
-  if (local) {
-    this.store.unsubscribe('message:' + id);
-    this.store.unsubscribe('disconnect:' + id);
-  }
-};
-
-/**
- * Handles an HTTP request.
- *
- * @api private
- */
-
-Manager.prototype.handleRequest = function (req, res) {
-  var data = this.checkRequest(req);
-
-  if (!data) {
-    for (var i = 0, l = this.oldListeners.length; i < l; i++) {
-      this.oldListeners[i].call(this.server, req, res);
-    }
-
-    return;
-  }
-
-  if (data.static || !data.transport && !data.protocol) {
-    if (data.static && this.enabled('browser client')) {
-      this.handleClientRequest(req, res, data);
-    } else {
-      res.writeHead(200);
-      res.end('Welcome to socket.io.');
-
-      this.log.info('unhandled socket.io url');
-    }
-
-    return;
-  }
-
-  if (data.protocol != protocol) {
-    res.writeHead(500);
-    res.end('Protocol version not supported.');
-
-    this.log.info('client protocol version unsupported');
-  } else {
-    if (data.id) {
-      this.handleHTTPRequest(data, req, res);
-    } else {
-      this.handleHandshake(data, req, res);
-    }
-  }
-};
-
-/**
- * Handles an HTTP Upgrade.
- *
- * @api private
- */
-
-Manager.prototype.handleUpgrade = function (req, socket, head) {
-  var data = this.checkRequest(req)
-    , self = this;
-
-  if (!data) {
-    if (this.enabled('destroy upgrade')) {
-      socket.end();
-      this.log.debug('destroying non-socket.io upgrade');
-    }
-
-    return;
-  }
-
-  req.head = head;
-  this.handleClient(data, req);
-};
-
-/**
- * Handles a normal handshaken HTTP request (eg: long-polling)
- *
- * @api private
- */
-
-Manager.prototype.handleHTTPRequest = function (data, req, res) {
-  req.res = res;
-  this.handleClient(data, req);
-};
-
-/**
- * Intantiantes a new client.
- *
- * @api private
- */
-
-Manager.prototype.handleClient = function (data, req) {
-  var socket = req.socket
-    , store = this.store
-    , self = this;
-
-  if (undefined != data.query.disconnect) {
-    if (this.transports[data.id] && this.transports[data.id].open) {
-      this.transports[data.id].onForcedDisconnect();
-    } else {
-      this.store.publish('disconnect-force:' + data.id);
-    }
-    return;
-  }
-
-  if (!~this.get('transports').indexOf(data.transport)) {
-    this.log.warn('unknown transport: "' + data.transport + '"');
-    req.connection.end();
-    return;
-  }
-
-  var transport = new transports[data.transport](this, data, req)
-    , handshaken = this.handshaken[data.id];
-
-  if (handshaken) {
-    if (transport.open) {
-      if (this.closed[data.id] && this.closed[data.id].length) {
-        transport.payload(this.closed[data.id]);
-        this.closed[data.id] = [];
-      }
-
-      this.onOpen(data.id);
-      this.store.publish('open', data.id);
-      this.transports[data.id] = transport;
-    }
-
-    if (!this.connected[data.id]) {
-      this.onConnect(data.id);
-      this.store.publish('connect', data.id);
-
-      // flag as used
-      delete handshaken.issued;
-      this.onHandshake(data.id, handshaken);
-      this.store.publish('handshake', data.id, handshaken);
-
-      // initialize the socket for all namespaces
-      for (var i in this.namespaces) {
-        var socket = this.namespaces[i].socket(data.id, true);
-
-        // echo back connect packet and fire connection event
-        if (i === '') {
-          this.namespaces[i].handlePacket(data.id, { type: 'connect' });
-        }
-      }
-
-      this.store.subscribe('message:' + data.id, function (packet) {
-        self.onClientMessage(data.id, packet);
-      });
-
-      this.store.subscribe('disconnect:' + data.id, function (reason) {
-        self.onClientDisconnect(data.id, reason);
-      });
-    }
-  } else {
-    if (transport.open) {
-      transport.error('client not handshaken', 'reconnect');
-    }
-
-    transport.discard();
-  }
-};
-
-/**
- * Dictionary for static file serving
- *
- * @api public
- */
-
-Manager.static = {
-    cache: {}
-  , paths: {
-        '/static/flashsocket/WebSocketMain.swf': client.dist + '/WebSocketMain.swf'
-      , '/static/flashsocket/WebSocketMainInsecure.swf':
-          client.dist + '/WebSocketMainInsecure.swf'
-      , '/socket.io.js':  client.dist + '/socket.io.js'
-      , '/socket.io.js.min': client.dist + '/socket.io.min.js'
-    }
-  , mime: {
-        'js': {
-            contentType: 'application/javascript'
-          , encoding: 'utf8'
-        }
-      , 'swf': {
-            contentType: 'application/x-shockwave-flash'
-          , encoding: 'binary'
-        }
-    }
-};
-
-/**
- * Serves the client.
- *
- * @api private
- */
-
-Manager.prototype.handleClientRequest = function (req, res, data) {
-  var static = Manager.static
-    , extension = data.path.split('.').pop()
-    , file = data.path + (this.enabled('browser client minification')
-        && extension == 'js' ? '.min' : '')
-    , location = static.paths[file]
-    , cache = static.cache[file];
-
-  var self = this;
-
-  /**
-   * Writes a response, safely
-   *
-   * @api private
-   */
-
-  function write (status, headers, content, encoding) {
-    try {
-      res.writeHead(status, headers || null);
-      res.end(content || '', encoding || null);
-    } catch (e) {}
-  }
-
-  function serve () {
-    if (req.headers['if-none-match'] === cache.Etag) {
-      return write(304);
-    }
-
-    var mime = static.mime[extension]
-      , headers = {
-      'Content-Type': mime.contentType
-    , 'Content-Length': cache.length
-    };
-
-    if (self.enabled('browser client etag') && cache.Etag) {
-      headers.Etag = cache.Etag;
-    }
-
-    write(200, headers, cache.content, mime.encoding);
-    self.log.debug('served static ' + data.path);
-  }
-
-  if (this.get('browser client handler')) {
-    this.get('browser client handler').call(this, req, res);
-  } else if (!cache) {
-    fs.readFile(location, function (err, data) {
-      if (err) {
-        write(500, null, 'Error serving static ' + data.path);
-        self.log.warn('Can\'t cache '+ data.path +', ' + err.message);
-        return;
-      }
-
-      cache = Manager.static.cache[file] = {
-        content: data
-      , length: data.length
-      , Etag: client.version
-      };
-
-      serve();
-    });
-  } else {
-    serve();
-  }
-};
-
-/**
- * Generates a session id.
- *
- * @api private
- */
-
-Manager.prototype.generateId = function () {
-  return Math.abs(Math.random() * Math.random() * Date.now() | 0).toString()
-    + Math.abs(Math.random() * Math.random() * Date.now() | 0).toString();
-};
-
-/**
- * Handles a handshake request.
- *
- * @api private
- */
-
-Manager.prototype.handleHandshake = function (data, req, res) {
-  var self = this;
-
-  function writeErr (status, message) {
-    if (data.query.jsonp) {
-      res.writeHead(200, { 'Content-Type': 'application/javascript' });
-      res.end('io.j[' + data.query.jsonp + '](new Error("' + message + '"));');
-    } else {
-      res.writeHead(status, { 'Content-Type': 'text/plain' });
-      res.end(message);
-    }
-  };
-
-  function error (err) {
-    writeErr(500, 'handshake error');
-    self.log.warn('handshake error ' + err);
-  };
-
-  if (!this.verifyOrigin(req)) {
-    writeErr(403, 'handshake bad origin');
-    return;
-  }
-
-  var handshakeData = this.handshakeData(data);
-
-  this.authorize(handshakeData, function (err, authorized, newData) {
-    if (err) return error(err);
-
-    if (authorized) {
-      var id = self.generateId()
-        , hs = [
-              id
-            , self.enabled('heartbeats') ? self.get('heartbeat timeout') || '' : ''
-            , self.get('close timeout') || ''
-            , self.transports(data).join(',')
-          ].join(':');
-
-      if (data.query.jsonp) {
-        hs = 'io.j[' + data.query.jsonp + '](' + JSON.stringify(hs) + ');';
-        res.writeHead(200, { 'Content-Type': 'application/javascript' });
-      } else {
-        res.writeHead(200, { 'Content-Type': 'text/plain' });
-      }
-
-      res.end(hs);
-
-      self.onHandshake(id, newData || handshakeData);
-      self.store.publish('handshake', id, newData || handshakeData);
-
-      self.log.info('handshake authorized', id);
-    } else {
-      writeErr(403, 'handshake unauthorized');
-      self.log.info('handshake unauthorized');
-    }
-  })
-};
-
-/**
- * Gets normalized handshake data
- *
- * @api private
- */
-
-Manager.prototype.handshakeData = function (data) {
-  var connection = data.request.connection
-    , connectionAddress
-    , date = new Date;
-
-  if (connection.remoteAddress) {
-    connectionAddress = {
-        address: connection.remoteAddress
-      , port: connection.remotePort
-    }; 
-  } else if (connection.socket && connection.socket.remoteAddress) {
-    connectionAddress = {
-        address: connection.socket.remoteAddress
-      , port: connection.socket.remotePort
-    }; 
-  }
-
-  return {
-      headers: data.headers
-    , address: connectionAddress
-    , time: date.toString()
-    , query: data.query
-    , url: data.request.url
-    , xdomain: !!data.request.headers.origin
-    , secure: data.request.connection.secure
-    , issued: +date
-  };
-};
-
-/**
- * Verifies the origin of a request.
- *
- * @api private
- */
-
-Manager.prototype.verifyOrigin = function (request) {
-  var origin = request.headers.origin || request.headers.referer
-    , origins = this.get('origins');
-
-  if (origin === 'null') origin = '*';
-
-  if (origins.indexOf('*:*') !== -1) {
-    return true;
-  }
-
-  if (origin) {
-    try {
-      var parts = url.parse(origin);
-      var ok =
-        ~origins.indexOf(parts.hostname + ':' + parts.port) ||
-        ~origins.indexOf(parts.hostname + ':*') ||
-        ~origins.indexOf('*:' + parts.port);
-      if (!ok) this.log.warn('illegal origin: ' + origin);
-      return ok;
-    } catch (ex) {
-      this.log.warn('error parsing origin');
-    }
-  }
-  else {
-    this.log.warn('origin missing from handshake, yet required by config');        
-  }
-  return false;
-};
-
-/**
- * Handles an incoming packet.
- *
- * @api private
- */
-
-Manager.prototype.handlePacket = function (sessid, packet) {
-  this.of(packet.endpoint || '').handlePacket(sessid, packet);
-};
-
-/**
- * Performs authentication.
- *
- * @param Object client request data
- * @api private
- */
-
-Manager.prototype.authorize = function (data, fn) {
-  if (this.get('authorization')) {
-    var self = this;
-
-    this.get('authorization').call(this, data, function (err, authorized) {
-      self.log.debug('client ' + authorized ? 'authorized' : 'unauthorized');
-      fn(err, authorized);
-    });
-  } else {
-    this.log.debug('client authorized');
-    fn(null, true);
-  }
-
-  return this;
-};
-
-/**
- * Retrieves the transports adviced to the user.
- *
- * @api private
- */
-
-Manager.prototype.transports = function (data) {
-  var transp = this.get('transports')
-    , ret = [];
-
-  for (var i = 0, l = transp.length; i < l; i++) {
-    var transport = transp[i];
-
-    if (transport) {
-      if (!transport.checkClient || transport.checkClient(data)) {
-        ret.push(transport);
-      }
-    }
-  }
-
-  return ret;
-};
-
-/**
- * Checks whether a request is a socket.io one.
- *
- * @return {Object} a client request data object or `false`
- * @api private
- */
-
-var regexp = /^\/([^\/]+)\/?([^\/]+)?\/?([^\/]+)?\/?$/
-
-Manager.prototype.checkRequest = function (req) {
-  var resource = this.get('resource');
-
-  if (req.url.substr(0, resource.length) == resource) {
-    var uri = url.parse(req.url.substr(resource.length), true)
-      , path = uri.pathname || ''
-      , pieces = path.match(regexp);
-
-    // client request data
-    var data = {
-        query: uri.query || {}
-      , headers: req.headers
-      , request: req
-      , path: path
-    };
-
-    if (pieces) {
-      data.protocol = Number(pieces[1]);
-      data.transport = pieces[2];
-      data.id = pieces[3];
-      data.static = !!Manager.static.paths[path];
-    };
-
-    return data;
-  }
-
-  return false;
-};
-
-/**
- * Declares a socket namespace
- *
- * @api public
- */
-
-Manager.prototype.of = function (nsp) {
-  if (this.namespaces[nsp]) {
-    return this.namespaces[nsp];
-  }
-
-  return this.namespaces[nsp] = new SocketNamespace(this, nsp);
-};
-
-/**
- * Perform garbage collection on long living objects and properties that cannot
- * be removed automatically.
- *
- * @api private
- */
-
-Manager.prototype.garbageCollection = function () {
-  // clean up unused handshakes
-  var ids = Object.keys(this.handshaken)
-    , i = ids.length
-    , now = Date.now()
-    , handshake;
-
-  while (i--) {
-    handshake = this.handshaken[ids[i]];
-
-    if ('issued' in handshake && (now - handshake.issued) >= 3E4) {
-      this.onDisconnect(ids[i]);
-    }
-  }
-};
diff --git a/node/node_modules/socket.io/lib/namespace.js b/node/node_modules/socket.io/lib/namespace.js
deleted file mode 100644 (file)
index b5b26ff..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/**
- * Module dependencies.
- */
-
-var Socket = require('./socket')
-  , EventEmitter = process.EventEmitter
-  , parser = require('./parser')
-  , util = require('./util');
-
-/**
- * Exports the constructor.
- */
-
-exports = module.exports = SocketNamespace;
-
-/**
- * Constructor.
- *
- * @api public.
- */
-
-function SocketNamespace (mgr, name) {
-  this.manager = mgr;
-  this.name = name || '';
-  this.sockets = {};
-  this.auth = false;
-  this.setFlags();
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-SocketNamespace.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Copies emit since we override it
- *
- * @api private
- */
-
-SocketNamespace.prototype.$emit = EventEmitter.prototype.emit;
-
-/**
- * Retrieves all clients as Socket instances as an array.
- *
- * @api public
- */
-
-SocketNamespace.prototype.clients = function (room) {
-  var room = this.name + (room !== undefined ?
-     '/' + room : '');
-
-  if (!this.manager.rooms[room]) {
-    return [];
-  }
-
-  return this.manager.rooms[room].map(function (id) {
-    return this.socket(id);
-  }, this);
-};
-
-/**
- * Access logger interface.
- *
- * @api public
- */
-
-SocketNamespace.prototype.__defineGetter__('log', function () {
-  return this.manager.log;
-});
-
-/**
- * Access store.
- *
- * @api public
- */
-
-SocketNamespace.prototype.__defineGetter__('store', function () {
-  return this.manager.store;
-});
-
-/**
- * JSON message flag.
- *
- * @api public
- */
-
-SocketNamespace.prototype.__defineGetter__('json', function () {
-  this.flags.json = true;
-  return this;
-});
-
-/**
- * Volatile message flag.
- *
- * @api public
- */
-
-SocketNamespace.prototype.__defineGetter__('volatile', function () {
-  this.flags.volatile = true;
-  return this;
-});
-
-/**
- * Overrides the room to relay messages to (flag)
- *
- * @api public
- */
-
-SocketNamespace.prototype.in = SocketNamespace.prototype.to = function (room) {
-  this.flags.endpoint = this.name + (room ? '/' + room : '');
-  return this;
-};
-
-/**
- * Adds a session id we should prevent relaying messages to (flag)
- *
- * @api public
- */
-
-SocketNamespace.prototype.except = function (id) {
-  this.flags.exceptions.push(id);
-  return this;
-};
-
-/**
- * Sets the default flags.
- *
- * @api private
- */
-
-SocketNamespace.prototype.setFlags = function () {
-  this.flags = {
-      endpoint: this.name
-    , exceptions: []
-  };
-  return this;
-};
-
-/**
- * Sends out a packet
- *
- * @api private
- */
-
-SocketNamespace.prototype.packet = function (packet) {
-  packet.endpoint = this.name;
-
-  var store = this.store
-    , log = this.log
-    , volatile = this.flags.volatile
-    , exceptions = this.flags.exceptions
-    , packet = parser.encodePacket(packet);
-
-  this.manager.onDispatch(this.flags.endpoint, packet, volatile, exceptions);
-  this.store.publish('dispatch', this.flags.endpoint, packet, volatile, exceptions);
-
-  this.setFlags();
-
-  return this;
-};
-
-/**
- * Sends to everyone.
- *
- * @api public
- */
-
-SocketNamespace.prototype.send = function (data) {
-  return this.packet({
-      type: this.flags.json ? 'json' : 'message'
-    , data: data
-  });
-};
-
-/**
- * Emits to everyone (override)
- *
- * @api private
- */
-
-SocketNamespace.prototype.emit = function (name) {
-  if (name == 'newListener') {
-    return this.$emit.apply(this, arguments);
-  }
-
-  return this.packet({
-      type: 'event'
-    , name: name
-    , args: util.toArray(arguments).slice(1)
-  });
-};
-
-/**
- * Retrieves or creates a write-only socket for a client, unless specified.
- *
- * @param {Boolean} whether the socket will be readable when initialized
- * @api private
- */
-
-SocketNamespace.prototype.socket = function (sid, readable) {
-  if (!this.sockets[sid]) {
-    this.sockets[sid] = new Socket(this.manager, sid, this, readable);
-  }
-
-  return this.sockets[sid];
-};
-
-/**
- * Sets authorization for this namespace
- *
- * @api public
- */
-
-SocketNamespace.prototype.authorization = function (fn) {
-  this.auth = fn;
-  return this;
-};
-
-/**
- * Called when a socket disconnects entirely.
- *
- * @api private
- */
-
-SocketNamespace.prototype.handleDisconnect = function (sid, reason) {
-  if (this.sockets[sid] && this.sockets[sid].readable) {
-    this.sockets[sid].onDisconnect(reason);
-    delete this.sockets[sid];
-  }
-};
-
-/**
- * Performs authentication.
- *
- * @param Object client request data
- * @api private
- */
-
-SocketNamespace.prototype.authorize = function (data, fn) {
-  if (this.auth) {
-    var self = this;
-
-    this.auth.call(this, data, function (err, authorized) {
-      self.log.debug('client ' +
-        (authorized ? '' : 'un') + 'authorized for ' + self.name);
-      fn(err, authorized);
-    });
-  } else {
-    this.log.debug('client authorized for ' + this.name);
-    fn(null, true);
-  }
-
-  return this;
-};
-
-/**
- * Handles a packet.
- *
- * @api private
- */
-
-SocketNamespace.prototype.handlePacket = function (sessid, packet) {
-  var socket = this.socket(sessid)
-    , dataAck = packet.ack == 'data'
-    , self = this;
-
-  function ack () {
-    self.log.debug('sending data ack packet');
-    socket.packet({
-        type: 'ack'
-      , args: util.toArray(arguments)
-      , ackId: packet.id
-    });
-  };
-
-  function error (err) {
-    self.log.warn('handshake error ' + err + ' for ' + self.name);
-    socket.packet({ type: 'error', reason: err });
-  };
-
-  function connect () {
-    self.manager.onJoin(sessid, self.name);
-    self.store.publish('join', sessid, self.name);
-
-    // packet echo
-    socket.packet({ type: 'connect' });
-
-    // emit connection event
-    self.$emit('connection', socket);
-  };
-
-  switch (packet.type) {
-    case 'connect':
-      if (packet.endpoint == '') {
-        connect();
-      } else {
-        var manager = this.manager
-          , handshakeData = manager.handshaken[sessid];
-
-        this.authorize(handshakeData, function (err, authorized, newData) {
-          if (err) return error(err);
-
-          if (authorized) {
-            manager.onHandshake(sessid, newData || handshakeData);
-            self.store.publish('handshake', sessid, newData || handshakeData);
-            connect();
-          } else {
-            error('unauthorized');
-          }
-        });
-      }
-      break;
-
-    case 'ack':
-      if (socket.acks[packet.ackId]) {
-        socket.acks[packet.ackId].apply(socket, packet.args);
-      } else {
-        this.log.info('unknown ack packet');
-      }
-      break;
-
-    case 'event':
-      var params = [packet.name].concat(packet.args);
-
-      if (dataAck) {
-        params.push(ack);
-      }
-
-      socket.$emit.apply(socket, params);
-      break;
-
-    case 'disconnect':
-      this.manager.onLeave(sessid, this.name);
-      this.store.publish('leave', sessid, this.name);
-
-      socket.$emit('disconnect', packet.reason || 'packet');
-      break;
-
-    case 'json':
-    case 'message':
-      var params = ['message', packet.data];
-
-      if (dataAck)
-        params.push(ack);
-
-      socket.$emit.apply(socket, params);
-  };
-};
diff --git a/node/node_modules/socket.io/lib/parser.js b/node/node_modules/socket.io/lib/parser.js
deleted file mode 100644 (file)
index 707c637..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-/**
- * Packet types.
- */
-
-var packets = exports.packets = [
-    'disconnect'
-  , 'connect'
-  , 'heartbeat'
-  , 'message'
-  , 'json'
-  , 'event'
-  , 'ack'
-  , 'error'
-  , 'noop'
-];
-
-/**
- * Errors reasons.
- */
-
-var reasons = exports.reasons = [
-    'transport not supported'
-  , 'client not handshaken'
-  , 'unauthorized'
-];
-
-/**
- * Errors advice.
- */
-
-var advice = exports.advice = [
-    'reconnect'
-];
-
-/**
- * Encodes a packet.
- *
- * @api private
- */
-
-exports.encodePacket = function (packet) {
-  var type = packets.indexOf(packet.type)
-    , id = packet.id || ''
-    , endpoint = packet.endpoint || ''
-    , ack = packet.ack
-    , data = null;
-
-  switch (packet.type) {
-    case 'error':
-      var reason = packet.reason ? reasons.indexOf(packet.reason) : ''
-        , adv = packet.advice ? advice.indexOf(packet.advice) : ''
-
-      if (reason !== '' || adv !== '')
-        data = reason + (adv !== '' ? ('+' + adv) : '')
-
-      break;
-
-    case 'message':
-      if (packet.data !== '')
-        data = packet.data;
-      break;
-
-    case 'event':
-      var ev = { name: packet.name };
-
-      if (packet.args && packet.args.length) {
-        ev.args = packet.args;
-      }
-
-      data = JSON.stringify(ev);
-      break;
-
-    case 'json':
-      data = JSON.stringify(packet.data);
-      break;
-
-    case 'connect':
-      if (packet.qs)
-        data = packet.qs;
-      break;
-
-    case 'ack':
-      data = packet.ackId
-        + (packet.args && packet.args.length
-            ? '+' + JSON.stringify(packet.args) : '');
-      break;
-  }
-
-  // construct packet with required fragments
-  var encoded = [
-      type
-    , id + (ack == 'data' ? '+' : '')
-    , endpoint
-  ];
-
-  // data fragment is optional
-  if (data !== null && data !== undefined)
-    encoded.push(data);
-
-  return encoded.join(':');
-};
-
-/**
- * Encodes multiple messages (payload).
- *
- * @param {Array} messages
- * @api private
- */
-
-exports.encodePayload = function (packets) {
-  var decoded = '';
-
-  if (packets.length == 1)
-    return packets[0];
-
-  for (var i = 0, l = packets.length; i < l; i++) {
-    var packet = packets[i];
-    decoded += '\ufffd' + packet.length + '\ufffd' + packets[i]
-  }
-
-  return decoded;
-};
-
-/**
- * Decodes a packet
- *
- * @api private
- */
-
-var regexp = /([^:]+):([0-9]+)?(\+)?:([^:]+)?:?([\s\S]*)?/;
-
-exports.decodePacket = function (data) {
-  var pieces = data.match(regexp);
-
-  if (!pieces) return {};
-
-  var id = pieces[2] || ''
-    , data = pieces[5] || ''
-    , packet = {
-          type: packets[pieces[1]]
-        , endpoint: pieces[4] || ''
-      };
-
-  // whether we need to acknowledge the packet
-  if (id) {
-    packet.id = id;
-    if (pieces[3])
-      packet.ack = 'data';
-    else
-      packet.ack = true;
-  }
-
-  // handle different packet types
-  switch (packet.type) {
-    case 'error':
-      var pieces = data.split('+');
-      packet.reason = reasons[pieces[0]] || '';
-      packet.advice = advice[pieces[1]] || '';
-      break;
-
-    case 'message':
-      packet.data = data || '';
-      break;
-
-    case 'event':
-      try {
-        var opts = JSON.parse(data);
-        packet.name = opts.name;
-        packet.args = opts.args;
-      } catch (e) { }
-
-      packet.args = packet.args || [];
-      break;
-
-    case 'json':
-      try {
-        packet.data = JSON.parse(data);
-      } catch (e) { }
-      break;
-
-    case 'connect':
-      packet.qs = data || '';
-      break;
-
-    case 'ack':
-      var pieces = data.match(/^([0-9]+)(\+)?(.*)/);
-      if (pieces) {
-        packet.ackId = pieces[1];
-        packet.args = [];
-
-        if (pieces[3]) {
-          try {
-            packet.args = pieces[3] ? JSON.parse(pieces[3]) : [];
-          } catch (e) { }
-        }
-      }
-      break;
-
-    case 'disconnect':
-    case 'heartbeat':
-      break;
-  };
-
-  return packet;
-};
-
-/**
- * Decodes data payload. Detects multiple messages
- *
- * @return {Array} messages
- * @api public
- */
-
-exports.decodePayload = function (data) {
-  if (data[0] == '\ufffd') {
-    var ret = [];
-
-    for (var i = 1, length = ''; i < data.length; i++) {
-      if (data[i] == '\ufffd') {
-        ret.push(exports.decodePacket(data.substr(i + 1).substr(0, length)));
-        i += Number(length) + 1;
-        length = '';
-      } else {
-        length += data[i];
-      }
-    }
-
-    return ret;
-  } else {
-    return [exports.decodePacket(data)];
-  }
-};
diff --git a/node/node_modules/socket.io/lib/socket.io.js b/node/node_modules/socket.io/lib/socket.io.js
deleted file mode 100644 (file)
index 4c0bae5..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var client = require('socket.io-client');
-
-/**
- * Version.
- */
-
-exports.version = '0.8.4';
-
-/**
- * Supported protocol version.
- */
-
-exports.protocol = 1;
-
-/**
- * Client that we serve.
- */
-
-exports.clientVersion = client.version;
-
-/**
- * Attaches a manager
- *
- * @param {HTTPServer/Number} a HTTP/S server or a port number to listen on.
- * @param {Object} opts to be passed to Manager and/or http server
- * @param {Function} callback if a port is supplied
- * @api public
- */
-
-exports.listen = function (server, options, fn) {
-  if ('function' == typeof options) {
-    fn = options;
-    options = {};
-  }
-
-  if ('undefined' == typeof server) {
-    // create a server that listens on port 80
-    server = 80;
-  }
-
-  if ('number' == typeof server) {
-    // if a port number is passed
-    var port = server;
-
-    if (options && options.key)
-      server = require('https').createServer(options);
-    else
-      server = require('http').createServer();
-
-    // default response
-    server.on('request', function (req, res) {
-      res.writeHead(200);
-      res.end('Welcome to socket.io.');
-    });
-
-    server.listen(port, fn);
-  }
-
-  // otherwise assume a http/s server
-  return new exports.Manager(server, options);
-};
-
-/**
- * Manager constructor.
- *
- * @api public
- */
-
-exports.Manager = require('./manager');
-
-/**
- * Transport constructor.
- *
- * @api public
- */
-
-exports.Transport = require('./transport');
-
-/**
- * Socket constructor.
- *
- * @api public
- */
-
-exports.Socket = require('./socket');
-
-/**
- * Store constructor.
- *
- * @api public
- */
-
-exports.Store = require('./store');
-
-/**
- * Memory Store constructor.
- *
- * @api public
- */
-
-exports.MemoryStore = require('./stores/memory');
-
-/**
- * Redis Store constructor.
- *
- * @api public
- */
-
-exports.RedisStore = require('./stores/redis');
-
-/**
- * Parser.
- *
- * @api public
- */
-
-exports.parser = require('./parser');
diff --git a/node/node_modules/socket.io/lib/socket.js b/node/node_modules/socket.io/lib/socket.js
deleted file mode 100644 (file)
index c0d7b50..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var parser = require('./parser')
-  , util = require('./util')
-  , EventEmitter = process.EventEmitter
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = Socket;
-
-/**
- * Default error event listener to prevent uncaught exceptions.
- */
-
-var defaultError = function () {};
-
-/**
- * Socket constructor.
- *
- * @param {Manager} manager instance
- * @param {String} session id
- * @param {Namespace} namespace the socket belongs to
- * @param {Boolean} whether the 
- * @api public
- */
-
-function Socket (manager, id, nsp, readable) {
-  this.id = id;
-  this.namespace = nsp;
-  this.manager = manager;
-  this.disconnected = false;
-  this.ackPackets = 0;
-  this.acks = {};
-  this.setFlags();
-  this.readable = readable;
-  this.store = this.manager.store.client(this.id);
-  this.on('error', defaultError);
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-Socket.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Accessor shortcut for the handshake data
- *
- * @api private
- */
-
-Socket.prototype.__defineGetter__('handshake', function () {
-  return this.manager.handshaken[this.id];
-});
-
-/**
- * Accessor shortcut for the logger.
- *
- * @api private
- */
-
-Socket.prototype.__defineGetter__('log', function () {
-  return this.manager.log;
-});
-
-/**
- * JSON message flag.
- *
- * @api public
- */
-
-Socket.prototype.__defineGetter__('json', function () {
-  this.flags.json = true;
-  return this;
-});
-
-/**
- * Volatile message flag.
- *
- * @api public
- */
-
-Socket.prototype.__defineGetter__('volatile', function () {
-  this.flags.volatile = true;
-  return this;
-});
-
-/**
- * Broadcast message flag.
- *
- * @api public
- */
-
-Socket.prototype.__defineGetter__('broadcast', function () {
-  this.flags.broadcast = true;
-  return this;
-});
-
-/**
- * Overrides the room to broadcast messages to (flag)
- *
- * @api public
- */
-
-Socket.prototype.to = Socket.prototype.in = function (room) {
-  this.flags.room = room;
-  return this;
-};
-
-/**
- * Resets flags
- *
- * @api private
- */
-
-Socket.prototype.setFlags = function () {
-  this.flags = {
-      endpoint: this.namespace.name
-    , room: ''
-  };
-  return this;
-};
-
-/**
- * Triggered on disconnect
- *
- * @api private
- */
-
-Socket.prototype.onDisconnect = function (reason) {
-  if (!this.disconnected) {
-    this.$emit('disconnect', reason);
-    this.disconnected = true;
-  }
-};
-
-/**
- * Joins a user to a room.
- *
- * @api public
- */
-
-Socket.prototype.join = function (name, fn) {
-  var nsp = this.namespace.name
-    , name = (nsp + '/') + name;
-
-  this.manager.onJoin(this.id, name);
-  this.manager.store.publish('join', this.id, name);
-
-  if (fn) {
-    this.log.warn('Client#join callback is deprecated');
-    fn();
-  }
-
-  return this;
-};
-
-/**
- * Un-joins a user from a room.
- *
- * @api public
- */
-
-Socket.prototype.leave = function (name, fn) {
-  var nsp = this.namespace.name
-    , name = (nsp + '/') + name;
-
-  this.manager.onLeave(this.id, name);
-  this.manager.store.publish('leave', this.id, name);
-
-  if (fn) {
-    this.log.warn('Client#leave callback is deprecated');
-    fn();
-  }
-
-  return this;
-};
-
-/**
- * Transmits a packet.
- *
- * @api private
- */
-
-Socket.prototype.packet = function (packet) {
-  if (this.flags.broadcast) {
-    this.log.debug('broadcasting packet');
-    this.namespace.in(this.flags.room).except(this.id).packet(packet);
-  } else {
-    packet.endpoint = this.flags.endpoint;
-    packet = parser.encodePacket(packet);
-
-    this.dispatch(packet, this.flags.volatile);
-  }
-
-  this.setFlags();
-
-  return this;
-};
-
-/**
- * Dispatches a packet
- *
- * @api private
- */
-
-Socket.prototype.dispatch = function (packet, volatile) {
-  if (this.manager.transports[this.id] && this.manager.transports[this.id].open) {
-    this.manager.transports[this.id].onDispatch(packet, volatile);
-  } else {
-    if (!volatile) {
-      this.manager.onClientDispatch(this.id, packet, volatile);
-    }
-
-    this.manager.store.publish('dispatch:' + this.id, packet, volatile);
-  }
-};
-
-/**
- * Stores data for the client.
- *
- * @api public
- */
-
-Socket.prototype.set = function (key, value, fn) {
-  this.store.set(key, value, fn);
-  return this;
-};
-
-/**
- * Retrieves data for the client
- *
- * @api public
- */
-
-Socket.prototype.get = function (key, fn) {
-  this.store.get(key, fn);
-  return this;
-};
-
-/**
- * Checks data for the client
- *
- * @api public
- */
-
-Socket.prototype.has = function (key, fn) {
-  this.store.has(key, fn);
-  return this;
-};
-
-/**
- * Deletes data for the client
- *
- * @api public
- */
-
-Socket.prototype.del = function (key, fn) {
-  this.store.del(key, fn);
-  return this;
-};
-
-/**
- * Kicks client
- *
- * @api public
- */
-
-Socket.prototype.disconnect = function () {
-  if (!this.disconnected) {
-    this.log.info('booting client');
-
-    if (this.manager.transports[this.id] && this.manager.transports[this.id].open) {
-      this.manager.transports[this.id].onForcedDisconnect();
-    } else {
-      this.manager.onClientDisconnect(this.id);
-      this.manager.store.publish('disconnect:' + this.id);
-    }
-  }
-
-  return this;
-};
-
-/**
- * Send a message.
- *
- * @api public
- */
-
-Socket.prototype.send = function (data, fn) {
-  var packet = {
-      type: this.flags.json ? 'json' : 'message'
-    , data: data
-  };
-
-  if (fn) {
-    packet.id = ++this.ackPackets;
-    packet.ack = true;
-    this.acks[packet.id] = fn;
-  }
-
-  return this.packet(packet);
-};
-
-/**
- * Original emit function.
- *
- * @api private
- */
-
-Socket.prototype.$emit = EventEmitter.prototype.emit;
-
-/**
- * Emit override for custom events.
- *
- * @api public
- */
-
-Socket.prototype.emit = function (ev) {
-  if (ev == 'newListener') {
-    return this.$emit.apply(this, arguments);
-  }
-
-  var args = util.toArray(arguments).slice(1)
-    , lastArg = args[args.length - 1]
-    , packet = {
-          type: 'event'
-        , name: ev
-      };
-
-  if ('function' == typeof lastArg) {
-    packet.id = ++this.ackPackets;
-    packet.ack = lastArg.length ? 'data' : true;
-    this.acks[packet.id] = lastArg;
-    args = args.slice(0, args.length - 1);
-  }
-
-  packet.args = args;
-
-  return this.packet(packet);
-};
diff --git a/node/node_modules/socket.io/lib/store.js b/node/node_modules/socket.io/lib/store.js
deleted file mode 100644 (file)
index 06c0389..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Expose the constructor.
- */
-
-exports = module.exports = Store;
-
-/**
- * Module dependencies.
- */
-
-var EventEmitter = process.EventEmitter;
-
-/**
- * Store interface
- *
- * @api public
- */
-
-function Store (options) {
-  this.options = options;
-  this.clients = {};
-};
-
-/**
- * Inherit from EventEmitter.
- */
-
-Store.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Initializes a client store
- *
- * @param {String} id
- * @api public
- */
-
-Store.prototype.client = function (id) {
-  if (!this.clients[id]) {
-    this.clients[id] = new (this.constructor.Client)(this, id);
-  }
-
-  return this.clients[id];
-};
-
-/**
- * Destroys a client
- *
- * @api {String} sid
- * @param {Number} number of seconds to expire client data
- * @api private
- */
-
-Store.prototype.destroyClient = function (id, expiration) {
-  if (this.clients[id]) {
-    this.clients[id].destroy(expiration);
-    delete this.clients[id];
-  }
-
-  return this;
-};
-
-/**
- * Destroys the store
- *
- * @param {Number} number of seconds to expire client data
- * @api private
- */
-
-Store.prototype.destroy = function (clientExpiration) {
-  var keys = Object.keys(this.clients)
-    , count = keys.length;
-
-  for (var i = 0, l = count; i < l; i++) {
-    this.destroyClient(keys[i], clientExpiration);
-  }
-
-  this.clients = {};
-
-  return this;
-};
-
-/**
- * Client.
- *
- * @api public
- */
-
-Store.Client = function (store, id) {
-  this.store = store;
-  this.id = id;
-};
diff --git a/node/node_modules/socket.io/lib/stores/memory.js b/node/node_modules/socket.io/lib/stores/memory.js
deleted file mode 100644 (file)
index 8b731a7..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var crypto = require('crypto')
-  , Store = require('../store');
-
-/**
- * Exports the constructor.
- */
-
-exports = module.exports = Memory;
-Memory.Client = Client;
-
-/**
- * Memory store
- *
- * @api public
- */
-
-function Memory (opts) {
-  Store.call(this, opts);
-};
-
-/**
- * Inherits from Store.
- */
-
-Memory.prototype.__proto__ = Store.prototype;
-
-/**
- * Publishes a message.
- *
- * @api private
- */
-
-Memory.prototype.publish = function () { };
-
-/**
- * Subscribes to a channel
- *
- * @api private
- */
-
-Memory.prototype.subscribe = function () { };
-
-/**
- * Unsubscribes
- *
- * @api private
- */
-
-Memory.prototype.unsubscribe = function () { };
-
-/**
- * Client constructor
- *
- * @api private
- */
-
-function Client () {
-  Store.Client.apply(this, arguments);
-  this.data = {};
-};
-
-/**
- * Inherits from Store.Client
- */
-
-Client.prototype.__proto__ = Store.Client;
-
-/**
- * Gets a key
- *
- * @api public
- */
-
-Client.prototype.get = function (key, fn) {
-  fn(null, this.data[key] === undefined ? null : this.data[key]);
-  return this;
-};
-
-/**
- * Sets a key
- *
- * @api public
- */
-
-Client.prototype.set = function (key, value, fn) {
-  this.data[key] = value;
-  fn && fn(null);
-  return this;
-};
-
-/**
- * Has a key
- *
- * @api public
- */
-
-Client.prototype.has = function (key, fn) {
-  fn(null, key in this.data);
-};
-
-/**
- * Deletes a key
- *
- * @api public
- */
-
-Client.prototype.del = function (key, fn) {
-  delete this.data[key];
-  fn && fn(null);
-  return this;
-};
-
-/**
- * Destroys the client.
- *
- * @param {Number} number of seconds to expire data
- * @api private
- */
-
-Client.prototype.destroy = function (expiration) {
-  if ('number' != typeof expiration) {
-    this.data = {};
-  } else {
-    var self = this;
-
-    setTimeout(function () {
-      self.data = {};
-    }, expiration * 1000);
-  }
-
-  return this;
-};
diff --git a/node/node_modules/socket.io/lib/stores/redis.js b/node/node_modules/socket.io/lib/stores/redis.js
deleted file mode 100644 (file)
index 26f7a92..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var crypto = require('crypto')
-  , Store = require('../store')
-  , assert = require('assert');
-
-/**
- * Exports the constructor.
- */
-
-exports = module.exports = Redis;
-Redis.Client = Client;
-
-/**
- * Redis store.
- * Options:
- *     - nodeId (fn) gets an id that uniquely identifies this node
- *     - redis (fn) redis constructor, defaults to redis
- *     - redisPub (object) options to pass to the pub redis client
- *     - redisSub (object) options to pass to the sub redis client
- *     - redisClient (object) options to pass to the general redis client
- *     - pack (fn) custom packing, defaults to JSON or msgpack if installed
- *     - unpack (fn) custom packing, defaults to JSON or msgpack if installed
- *
- * @api public
- */
-
-function Redis (opts) {
-  opts = opts || {};
-
-  // node id to uniquely identify this node
-  var nodeId = opts.nodeId || function () {
-    // by default, we generate a random id 
-    return Math.abs(Math.random() * Math.random() * Date.now() | 0);
-  };
-
-  this.nodeId = nodeId();
-
-  // packing / unpacking mechanism
-  if (opts.pack) {
-    this.pack = opts.pack;
-    this.unpack = opts.unpack;
-  } else {
-    try {
-      var msgpack = require('msgpack');
-      this.pack = msgpack.pack;
-      this.unpack = msgpack.unpack;
-    } catch (e) {
-      this.pack = JSON.stringify;
-      this.unpack = JSON.parse;
-    }
-  }
-
-  var redis = opts.redis || require('redis');
-
-  // initialize a pubsub client and a regular client
-  this.pub = redis.createClient(opts.redisPub);
-  this.sub = redis.createClient(opts.redisSub);
-  this.cmd = redis.createClient(opts.redisClient);
-
-  Store.call(this, opts);
-};
-
-/**
- * Inherits from Store.
- */
-
-Redis.prototype.__proto__ = Store.prototype;
-
-/**
- * Publishes a message.
- *
- * @api private
- */
-
-Redis.prototype.publish = function (name) {
-  var args = Array.prototype.slice.call(arguments, 1);
-  this.pub.publish(name, this.pack({ nodeId: this.nodeId, args: args }));
-  this.emit.apply(this, ['publish', name].concat(args));
-};
-
-/**
- * Subscribes to a channel
- *
- * @api private
- */
-
-Redis.prototype.subscribe = function (name, consumer, fn) {
-  this.sub.subscribe(name);
-
-  if (consumer || fn) {
-    var self = this;
-
-    self.sub.on('subscribe', function subscribe (ch) {
-      if (name == ch) {
-        function message (ch, msg) {
-          if (name == ch) {
-            msg = self.unpack(msg);
-
-            // we check that the message consumed wasnt emitted by this node
-            if (self.nodeId != msg.nodeId) {
-              consumer.apply(null, msg.args);
-            }
-          }
-        };
-
-        self.sub.on('message', message);
-
-        self.on('unsubscribe', function unsubscribe (ch) {
-          if (name == ch) {
-            self.sub.removeListener('message', message);
-            self.removeEvent('unsubscribe', unsubscribe);
-          }
-        });
-
-        self.sub.removeListener('subscribe', subscribe);
-
-        fn && fn();
-      }
-    });
-  }
-
-  this.emit('subscribe', name, consumer, fn);
-};
-
-/**
- * Unsubscribes
- *
- * @api private
- */
-
-Redis.prototype.unsubscribe = function (name, fn) {
-  this.sub.unsubscribe(name);
-
-  if (fn) {
-    var client = this.sub;
-
-    client.on('unsubscribe', function unsubscribe (ch) {
-      if (name == ch) {
-        fn();
-        client.removeListener('unsubscribe', unsubscribe);
-      }
-    });
-  }
-
-  this.emit('unsubscribe', name, fn);
-};
-
-/**
- * Destroys the store
- *
- * @api public
- */
-
-Redis.prototype.destroy = function () {
-  Store.prototype.destroy.call(this);
-
-  this.pub.end();
-  this.sub.end();
-  this.cmd.end();
-};
-
-/**
- * Client constructor
- *
- * @api private
- */
-
-function Client (store, id) {
-  Store.Client.call(this, store, id);
-};
-
-/**
- * Inherits from Store.Client
- */
-
-Client.prototype.__proto__ = Store.Client;
-
-/**
- * Redis hash get
- *
- * @api private
- */
-
-Client.prototype.get = function (key, fn) {
-  this.store.cmd.hget(this.id, key, fn);
-  return this;
-};
-
-/**
- * Redis hash set
- *
- * @api private
- */
-
-Client.prototype.set = function (key, value, fn) {
-  this.store.cmd.hset(this.id, key, value, fn);
-  return this;
-};
-
-/**
- * Redis hash del
- *
- * @api private
- */
-
-Client.prototype.del = function (key, fn) {
-  this.store.cmd.hdel(this.id, key, fn);
-  return this;
-};
-
-/**
- * Redis hash has
- *
- * @api private
- */
-
-Client.prototype.has = function (key, fn) {
-  this.store.cmd.hexists(this.id, key, function (err, has) {
-    if (err) return fn(err);
-    fn(null, !!has);
-  });
-  return this;
-};
-
-/**
- * Destroys client
- *
- * @param {Number} number of seconds to expire data
- * @api private
- */
-
-Client.prototype.destroy = function (expiration) {
-  if ('number' != typeof expiration) {
-    this.store.cmd.del(this.id);
-  } else {
-    this.store.cmd.expire(this.id, expiration);
-  }
-
-  return this;
-};
diff --git a/node/node_modules/socket.io/lib/transport.js b/node/node_modules/socket.io/lib/transport.js
deleted file mode 100644 (file)
index 61f456f..0000000
+++ /dev/null
@@ -1,534 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var parser = require('./parser');
-
-/**
- * Expose the constructor.
- */
-
-exports = module.exports = Transport;
-
-/**
- * Transport constructor.
- *
- * @api public
- */
-
-function Transport (mng, data, req) {
-  this.manager = mng;
-  this.id = data.id;
-  this.disconnected = false;
-  this.drained = true;
-  this.handleRequest(req);
-};
-
-/**
- * Access the logger.
- *
- * @api public
- */
-
-Transport.prototype.__defineGetter__('log', function () {
-  return this.manager.log;
-});
-
-/**
- * Access the store.
- *
- * @api public
- */
-
-Transport.prototype.__defineGetter__('store', function () {
-  return this.manager.store;
-});
-
-/**
- * Handles a request when it's set.
- *
- * @api private
- */
-
-Transport.prototype.handleRequest = function (req) {
-  this.log.debug('setting request', req.method, req.url);
-  this.req = req;
-
-  if (req.method == 'GET') {
-    this.socket = req.socket;
-    this.open = true;
-    this.drained = true;
-    this.setHeartbeatInterval();
-
-    this.setHandlers();
-    this.onSocketConnect();
-  }
-};
-
-/**
- * Called when a connection is first set.
- *
- * @api private
- */
-
-Transport.prototype.onSocketConnect = function () { };
-
-/**
- * Sets transport handlers
- *
- * @api private
- */
-
-Transport.prototype.setHandlers = function () {
-  var self = this;
-
-  // we need to do this in a pub/sub way since the client can POST the message
-  // over a different socket (ie: different Transport instance)
-  this.store.subscribe('heartbeat-clear:' + this.id, function () {
-    self.onHeartbeatClear();
-  });
-
-  this.store.subscribe('disconnect-force:' + this.id, function () {
-    self.onForcedDisconnect();
-  });
-
-  this.store.subscribe('dispatch:' + this.id, function (packet, volatile) {
-    self.onDispatch(packet, volatile);
-  });
-
-  this.bound = {
-      end: this.onSocketEnd.bind(this)
-    , close: this.onSocketClose.bind(this)
-    , error: this.onSocketError.bind(this)
-    , drain: this.onSocketDrain.bind(this)
-  };
-
-  this.socket.on('end', this.bound.end);
-  this.socket.on('close', this.bound.close);
-  this.socket.on('error', this.bound.error);
-  this.socket.on('drain', this.bound.drain);
-
-  this.handlersSet = true;
-};
-
-/**
- * Removes transport handlers
- *
- * @api private
- */
-
-Transport.prototype.clearHandlers = function () {
-  if (this.handlersSet) {
-    this.store.unsubscribe('disconnect-force:' + this.id);
-    this.store.unsubscribe('heartbeat-clear:' + this.id);
-    this.store.unsubscribe('dispatch:' + this.id);
-
-    this.socket.removeListener('end', this.bound.end);
-    this.socket.removeListener('close', this.bound.close);
-    this.socket.removeListener('error', this.bound.error);
-    this.socket.removeListener('drain', this.bound.drain);
-  }
-};
-
-/**
- * Called when the connection dies
- *
- * @api private
- */
-
-Transport.prototype.onSocketEnd = function () {
-  this.end('socket end');
-};
-
-/**
- * Called when the connection dies
- *
- * @api private
- */
-
-Transport.prototype.onSocketClose = function (error) {
-  this.end(error ? 'socket error' : 'socket close');
-};
-
-/**
- * Called when the connection has an error.
- *
- * @api private
- */
-
-Transport.prototype.onSocketError = function (err) {
-  if (this.open) {
-    this.socket.destroy();
-    this.onClose();
-  }
-
-  this.log.info('socket error '  + err.stack);
-};
-
-/**
- * Called when the connection is drained.
- *
- * @api private
- */
-
-Transport.prototype.onSocketDrain = function () {
-  this.drained = true;
-};
-
-/**
- * Called upon receiving a heartbeat packet.
- *
- * @api private
- */
-
-Transport.prototype.onHeartbeatClear = function () {
-  this.clearHeartbeatTimeout();
-  this.setHeartbeatInterval();
-};
-
-/**
- * Called upon a forced disconnection.
- *
- * @api private
- */
-
-Transport.prototype.onForcedDisconnect = function () {
-  if (!this.disconnected) {
-    this.log.info('transport end by forced client disconnection');
-    if (this.open) {
-      this.packet({ type: 'disconnect' });
-    }
-    this.end('booted');
-  }
-};
-
-/**
- * Dispatches a packet.
- *
- * @api private
- */
-
-Transport.prototype.onDispatch = function (packet, volatile) {
-  if (volatile) {
-    this.writeVolatile(packet);
-  } else {
-    this.write(packet);
-  }
-};
-
-/**
- * Sets the close timeout.
- */
-
-Transport.prototype.setCloseTimeout = function () {
-  if (!this.closeTimeout) {
-    var self = this;
-
-    this.closeTimeout = setTimeout(function () {
-      self.log.debug('fired close timeout for client', self.id);
-      self.closeTimeout = null;
-      self.end('close timeout');
-    }, this.manager.get('close timeout') * 1000);
-
-    this.log.debug('set close timeout for client', this.id);
-  }
-};
-
-/**
- * Clears the close timeout.
- */
-
-Transport.prototype.clearCloseTimeout = function () {
-  if (this.closeTimeout) {
-    clearTimeout(this.closeTimeout);
-    this.closeTimeout = null;
-
-    this.log.debug('cleared close timeout for client', this.id);
-  }
-};
-
-/**
- * Sets the heartbeat timeout
- */
-
-Transport.prototype.setHeartbeatTimeout = function () {
-  if (!this.heartbeatTimeout && this.manager.enabled('heartbeats')) {
-    var self = this;
-
-    this.heartbeatTimeout = setTimeout(function () {
-      self.log.debug('fired heartbeat timeout for client', self.id);
-      self.heartbeatTimeout = null;
-      self.end('heartbeat timeout');
-    }, this.manager.get('heartbeat timeout') * 1000);
-
-    this.log.debug('set heartbeat timeout for client', this.id);
-  }
-};
-
-/**
- * Clears the heartbeat timeout
- *
- * @param text
- */
-
-Transport.prototype.clearHeartbeatTimeout = function () {
-  if (this.heartbeatTimeout && this.manager.enabled('heartbeats')) {
-    clearTimeout(this.heartbeatTimeout);
-    this.heartbeatTimeout = null;
-    this.log.debug('cleared heartbeat timeout for client', this.id);
-  }
-};
-
-/**
- * Sets the heartbeat interval. To be called when a connection opens and when
- * a heartbeat is received.
- *
- * @api private
- */
-
-Transport.prototype.setHeartbeatInterval = function () {
-  if (!this.heartbeatInterval && this.manager.enabled('heartbeats')) {
-    var self = this;
-
-    this.heartbeatInterval = setTimeout(function () {
-      self.heartbeat();
-      self.heartbeatInterval = null;
-    }, this.manager.get('heartbeat interval') * 1000);
-
-    this.log.debug('set heartbeat interval for client', this.id);
-  }
-};
-
-/**
- * Clears all timeouts.
- *
- * @api private
- */
-
-Transport.prototype.clearTimeouts = function () {
-  this.clearCloseTimeout();
-  this.clearHeartbeatTimeout();
-  this.clearHeartbeatInterval();
-};
-
-/**
- * Sends a heartbeat
- *
- * @api private
- */
-
-Transport.prototype.heartbeat = function () {
-  if (this.open) {
-    this.log.debug('emitting heartbeat for client', this.id);
-    this.packet({ type: 'heartbeat' });
-    this.setHeartbeatTimeout();
-  }
-
-  return this;
-};
-
-/**
- * Handles a message.
- *
- * @param {Object} packet object
- * @api private
- */
-
-Transport.prototype.onMessage = function (packet) {
-  var current = this.manager.transports[this.id];
-
-  if ('heartbeat' == packet.type) {
-    this.log.debug('got heartbeat packet');
-
-    if (current && current.open) {
-      current.onHeartbeatClear();
-    } else {
-      this.store.publish('heartbeat-clear:' + this.id);
-    }
-  } else {
-    if ('disconnect' == packet.type && packet.endpoint == '') {
-      this.log.debug('got disconnection packet');
-
-      if (current) {
-        current.onForcedDisconnect();
-      } else {
-        this.store.publish('disconnect-force:' + this.id);
-      }
-
-      return;
-    }
-
-    if (packet.id && packet.ack != 'data') {
-      this.log.debug('acknowledging packet automatically');
-
-      var ack = parser.encodePacket({
-          type: 'ack'
-        , ackId: packet.id
-        , endpoint: packet.endpoint || ''
-      });
-
-      if (current && current.open) {
-        current.onDispatch(ack);
-      } else {
-        this.manager.onClientDispatch(this.id, ack);
-        this.store.publish('dispatch:' + this.id, ack);
-      }
-    }
-
-    // handle packet locally or publish it
-    if (current) {
-      this.manager.onClientMessage(this.id, packet);
-    } else {
-      this.store.publish('message:' + this.id, packet);
-    }
-  }
-};
-
-/**
- * Clears the heartbeat interval
- *
- * @api private
- */
-
-Transport.prototype.clearHeartbeatInterval = function () {
-  if (this.heartbeatInterval && this.manager.enabled('heartbeats')) {
-    clearTimeout(this.heartbeatInterval);
-    this.heartbeatInterval = null;
-    this.log.debug('cleared heartbeat interval for client', this.id);
-  }
-};
-
-/**
- * Finishes the connection and makes sure client doesn't reopen
- *
- * @api private
- */
-
-Transport.prototype.disconnect = function (reason) {
-  this.packet({ type: 'disconnect' });
-  this.end(reason);
-
-  return this;
-};
-
-/**
- * Closes the connection.
- *
- * @api private
- */
-
-Transport.prototype.close = function () {
-  if (this.open) {
-    this.doClose();
-    this.onClose();
-  }
-};
-
-/**
- * Called upon a connection close.
- *
- * @api private
- */
-
-Transport.prototype.onClose = function () {
-  if (this.open) {
-    this.setCloseTimeout();
-    this.clearHandlers();
-    this.open = false;
-    this.manager.onClose(this.id);
-    this.store.publish('close', this.id);
-  }
-};
-
-/**
- * Cleans up the connection, considers the client disconnected.
- *
- * @api private
- */
-
-Transport.prototype.end = function (reason) {
-  if (!this.disconnected) {
-    this.log.info('transport end');
-
-    var local = this.manager.transports[this.id];
-
-    this.close();
-    this.clearTimeouts();
-    this.disconnected = true;
-
-    if (local) {
-      this.manager.onClientDisconnect(this.id, reason, true);
-    } else {
-      this.store.publish('disconnect:' + this.id, reason);
-    }
-  }
-};
-
-/**
- * Signals that the transport should pause and buffer data.
- *
- * @api public
- */
-
-Transport.prototype.discard = function () {
-  this.log.debug('discarding transport');
-  this.discarded = true;
-  this.clearTimeouts();
-  this.clearHandlers();
-
-  return this;
-};
-
-/**
- * Writes an error packet with the specified reason and advice.
- *
- * @param {Number} advice
- * @param {Number} reason
- * @api public
- */
-
-Transport.prototype.error = function (reason, advice) {
-  this.packet({
-      type: 'error'
-    , reason: reason
-    , advice: advice
-  });
-
-  this.log.warn(reason, advice ? ('client should ' + advice) : '');
-  this.end('error');
-};
-
-/**
- * Write a packet.
- *
- * @api public
- */
-
-Transport.prototype.packet = function (obj) {
-  return this.write(parser.encodePacket(obj));
-};
-
-/**
- * Writes a volatile message.
- *
- * @api private
- */
-
-Transport.prototype.writeVolatile = function (msg) {
-  if (this.open) {
-    if (this.drained) {
-      this.write(msg);
-    } else {
-      this.log.debug('ignoring volatile packet, buffer not drained');
-    }
-  } else {
-    this.log.debug('ignoring volatile packet, transport not open');
-  }
-};
diff --git a/node/node_modules/socket.io/lib/transports/flashsocket.js b/node/node_modules/socket.io/lib/transports/flashsocket.js
deleted file mode 100644 (file)
index 1676819..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-var WebSocket = require('./websocket');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = FlashSocket;
-
-/**
- * The FlashSocket transport is just a proxy
- * for WebSocket connections.
- *
- * @api public
- */
-function FlashSocket (mng, data, req) {
-  return WebSocket.call(this, mng, data, req);
-}
-
-/**
- * Inherits from WebSocket.
- */
-
-FlashSocket.prototype.__proto__ = WebSocket.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-FlashSocket.prototype.name = 'flashsocket';
-
-/**
- * Listens for new configuration changes of the Manager
- * this way we can enable and disable the flash server.
- *
- * @param {Manager} Manager instance.
- * @api private
- */
-
-var server;
-
-FlashSocket.init = function (manager) {
-  function create () {
-    server = require('policyfile').createServer({ 
-      log: function(msg){
-        manager.log.info(msg.toLowerCase());
-      }
-    }, manager.get('origins'));
-
-    server.on('close', function (e) {
-      server = null;
-    });
-
-    server.listen(manager.get('flash policy port'), manager.server);
-
-    manager.flashPolicyServer = server;
-  }
-
-  // listen for origin changes, so we can update the server
-  manager.on('set:origins', function (value, key) {
-    if (!server) return;
-
-    // update the origins and compile a new response buffer
-    server.origins = Array.isArray(value) ? value : [value];
-    server.compile();
-  });
-
-  // destory the server and create a new server
-  manager.on('set:flash policy port', function (value, key) {
-    var transports = manager.get('transports');
-
-    if (server && server.port !== value && ~transports.indexOf('flashsocket')) {
-      // destroy the server and rebuild it on a new port
-      server.close();
-      create();
-    }
-  });
-
-  // only start the server
-  manager.on('set:transports', function (value, key){
-    if (!server && ~manager.get('transports').indexOf('flashsocket')) {
-      create();
-    }
-  });
-
-  // check if we need to initialize at start
-  if (~manager.get('transports').indexOf('flashsocket')){
-    create();
-  }
-};
diff --git a/node/node_modules/socket.io/lib/transports/htmlfile.js b/node/node_modules/socket.io/lib/transports/htmlfile.js
deleted file mode 100644 (file)
index 6bbac75..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var HTTPTransport = require('./http');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = HTMLFile;
-
-/**
- * HTMLFile transport constructor.
- *
- * @api public
- */
-
-function HTMLFile (mng, data, req) {
-  HTTPTransport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-HTMLFile.prototype.__proto__ = HTTPTransport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-HTMLFile.prototype.name = 'htmlfile';
-
-/**
- * Handles the request.
- *
- * @api private
- */
-
-HTMLFile.prototype.handleRequest = function (req) {
-  HTTPTransport.prototype.handleRequest.call(this, req);
-
-  if (req.method == 'GET') {
-    req.res.writeHead(200, {
-        'Content-Type': 'text/html'
-      , 'Connection': 'keep-alive'
-      , 'Transfer-Encoding': 'chunked'
-    });
-
-    req.res.write(
-        '<html><body>'
-      + '<script>var _ = function (msg) { parent.s._(msg, document); };</script>'
-      + new Array(174).join(' ')
-    );
-  }
-};
-
-/**
- * Performs the write.
- *
- * @api private
- */
-
-HTMLFile.prototype.write = function (data) {
-  data = '<script>_(' + JSON.stringify(data) + ');</script>';
-
-  if (this.response.write(data)) {
-    this.drained = true;
-  }
-
-  this.log.debug(this.name + ' writing', data);
-};
diff --git a/node/node_modules/socket.io/lib/transports/http-polling.js b/node/node_modules/socket.io/lib/transports/http-polling.js
deleted file mode 100644 (file)
index c71fc9c..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var HTTPTransport = require('./http');
-
-/**
- * Exports the constructor.
- */
-
-exports = module.exports = HTTPPolling;
-
-/**
- * HTTP polling constructor.
- *
- * @api public.
- */
-
-function HTTPPolling (mng, data, req) {
-  HTTPTransport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from HTTPTransport.
- *
- * @api public.
- */
-
-HTTPPolling.prototype.__proto__ = HTTPTransport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-HTTPPolling.prototype.name = 'httppolling';
-
-/**
- * Removes heartbeat timeouts for polling.
- */
-
-HTTPPolling.prototype.setHeartbeatInterval = function () {
-  return this;
-};
-
-/**
- * Handles a request
- *
- * @api private
- */
-
-HTTPPolling.prototype.handleRequest = function (req) {
-  HTTPTransport.prototype.handleRequest.call(this, req);
-
-  if (req.method == 'GET') {
-    var self = this;
-
-    this.pollTimeout = setTimeout(function () {
-      self.packet({ type: 'noop' });
-      self.log.debug(self.name + ' closed due to exceeded duration');
-    }, this.manager.get('polling duration') * 1000);
-
-    this.log.debug('setting poll timeout');
-  }
-};
-
-/**
- * Clears polling timeout
- *
- * @api private
- */
-
-HTTPPolling.prototype.clearPollTimeout = function () {
-  if (this.pollTimeout) {
-    clearTimeout(this.pollTimeout);
-    this.pollTimeout = null;
-    this.log.debug('clearing poll timeout');
-  }
-
-  return this;
-};
-
-/**
- * Override clear timeouts to clear the poll timeout
- *
- * @api private
- */
-
-HTTPPolling.prototype.clearTimeouts = function () {
-  HTTPTransport.prototype.clearTimeouts.call(this);
-
-  this.clearPollTimeout();
-};
-
-/**
- * doWrite to clear poll timeout
- *
- * @api private
- */
-
-HTTPPolling.prototype.doWrite = function () {
-  this.clearPollTimeout();
-};
-
-/**
- * Performs a write.
- *
- * @api private.
- */
-
-HTTPPolling.prototype.write = function (data, close) {
-  this.doWrite(data);
-  this.response.end();
-  this.onClose();
-};
-
-/**
- * Override end.
- *
- * @api private
- */
-
-HTTPPolling.prototype.end = function () {
-  this.clearPollTimeout();
-  return HTTPTransport.prototype.end.call(this);
-};
-
diff --git a/node/node_modules/socket.io/lib/transports/http.js b/node/node_modules/socket.io/lib/transports/http.js
deleted file mode 100644 (file)
index d5be006..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var Transport = require('../transport')
-  , parser = require('../parser')
-  , qs = require('querystring');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = HTTPTransport;
-
-/**
- * HTTP interface constructor. For all non-websocket transports.
- *
- * @api public
- */
-
-function HTTPTransport (mng, data, req) {
-  Transport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-HTTPTransport.prototype.__proto__ = Transport.prototype;
-
-/**
- * Handles a request.
- *
- * @api private
- */
-
-HTTPTransport.prototype.handleRequest = function (req) {
-  if (req.method == 'POST') {
-    var buffer = ''
-      , res = req.res
-      , origin = req.headers.origin
-      , headers = { 'Content-Length': 1 }
-      , self = this;
-
-    req.on('data', function (data) {
-      buffer += data;
-    });
-
-    req.on('end', function () {
-      res.writeHead(200, headers);
-      res.end('1');
-
-      self.onData(self.postEncoded ? qs.parse(buffer).d : buffer);
-    });
-
-    if (origin) {
-      // https://developer.mozilla.org/En/HTTP_Access_Control
-      headers['Access-Control-Allow-Origin'] = '*';
-
-      if (req.headers.cookie) {
-        headers['Access-Control-Allow-Credentials'] = 'true';
-      }
-    }
-  } else {
-    this.response = req.res;
-
-    Transport.prototype.handleRequest.call(this, req);
-  }
-};
-
-/**
- * Handles data payload.
- *
- * @api private
- */
-
-HTTPTransport.prototype.onData = function (data) {
-  var messages = parser.decodePayload(data);
-  this.log.debug(this.name + ' received data packet', data);
-
-  for (var i = 0, l = messages.length; i < l; i++) {
-    this.onMessage(messages[i]);
-  }
-};
-
-/**
- * Closes the request-response cycle
- *
- * @api private
- */
-
-HTTPTransport.prototype.doClose = function () {
-  this.response.end();
-};
-
-/**
- * Writes a payload of messages
- *
- * @api private
- */
-
-HTTPTransport.prototype.payload = function (msgs) {
-  this.write(parser.encodePayload(msgs));
-};
diff --git a/node/node_modules/socket.io/lib/transports/index.js b/node/node_modules/socket.io/lib/transports/index.js
deleted file mode 100644 (file)
index b865559..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-/**
- * Export transports.
- */
-
-module.exports = {
-    websocket: require('./websocket')
-  , flashsocket: require('./flashsocket')
-  , htmlfile: require('./htmlfile')
-  , 'xhr-polling': require('./xhr-polling')
-  , 'jsonp-polling': require('./jsonp-polling')
-};
diff --git a/node/node_modules/socket.io/lib/transports/jsonp-polling.js b/node/node_modules/socket.io/lib/transports/jsonp-polling.js
deleted file mode 100644 (file)
index 86a23f0..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var HTTPPolling = require('./http-polling');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = JSONPPolling;
-
-/**
- * JSON-P polling transport.
- *
- * @api public
- */
-
-function JSONPPolling (mng, data, req) {
-  HTTPPolling.call(this, mng, data, req);
-
-  this.head = 'io.j[0](';
-  this.foot = ');';
-
-  if (data.query.i) {
-    this.head = 'io.j[' + data.query.i + '](';
-  }
-};
-
-/**
- * Inherits from Transport.
- */
-
-JSONPPolling.prototype.__proto__ = HTTPPolling.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-JSONPPolling.prototype.name = 'jsonppolling';
-
-/**
- * Make sure POST are decoded.
- */
-
-JSONPPolling.prototype.postEncoded = true;
-
-/**
- * Performs the write.
- *
- * @api private
- */
-
-JSONPPolling.prototype.doWrite = function (data) {
-  HTTPPolling.prototype.doWrite.call(this);
-
-  var data = data === undefined
-      ? '' : this.head + JSON.stringify(data) + this.foot;
-
-  this.response.writeHead(200, {
-      'Content-Type': 'text/javascript; charset=UTF-8'
-    , 'Content-Length': Buffer.byteLength(data)
-    , 'Connection': 'Keep-Alive'
-    , 'X-XSS-Protection': '0'
-  });
-
-  this.response.write(data);
-  this.log.debug(this.name + ' writing', data);
-};
diff --git a/node/node_modules/socket.io/lib/transports/websocket.js b/node/node_modules/socket.io/lib/transports/websocket.js
deleted file mode 100644 (file)
index 84db531..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var protocolVersions = require('./websocket/');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = WebSocket;
-
-/**
- * HTTP interface constructor. Interface compatible with all transports that
- * depend on request-response cycles.
- *
- * @api public
- */
-
-function WebSocket (mng, data, req) {
-  var version = req.headers['sec-websocket-version'];
-  if (typeof version !== 'undefined' && typeof protocolVersions[version] !== 'undefined') {
-    return new protocolVersions[version](mng, data, req);
-  }
-  return new protocolVersions['default'](mng, data, req);
-};
diff --git a/node/node_modules/socket.io/lib/transports/websocket/default.js b/node/node_modules/socket.io/lib/transports/websocket/default.js
deleted file mode 100644 (file)
index a05c920..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var Transport = require('../../transport')
-  , EventEmitter = process.EventEmitter
-  , crypto = require('crypto')
-  , parser = require('../../parser');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = WebSocket;
-
-/**
- * HTTP interface constructor. Interface compatible with all transports that
- * depend on request-response cycles.
- *
- * @api public
- */
-
-function WebSocket (mng, data, req) {
-  // parser
-  var self = this;
-
-  this.parser = new Parser();
-  this.parser.on('data', function (packet) {
-    self.log.debug(self.name + ' received data packet', packet);
-    self.onMessage(parser.decodePacket(packet));
-  });
-  this.parser.on('close', function () {
-    self.end();
-  });
-  this.parser.on('error', function () {
-    self.end();
-  });
-
-  Transport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-WebSocket.prototype.__proto__ = Transport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-WebSocket.prototype.name = 'websocket';
-
-/**
- * Called when the socket connects.
- *
- * @api private
- */
-
-WebSocket.prototype.onSocketConnect = function () {
-  var self = this;
-
-  this.socket.setNoDelay(true);
-
-  this.buffer = true;
-  this.buffered = [];
-
-  if (this.req.headers.upgrade !== 'WebSocket') {
-    this.log.warn(this.name + ' connection invalid');
-    this.end();
-    return;
-  }
-
-  var origin = this.req.headers.origin
-    , location = (this.socket.encrypted ? 'wss' : 'ws')
-               + '://' + this.req.headers.host + this.req.url
-    , waitingForNonce = false;
-
-  if (this.req.headers['sec-websocket-key1']) {
-    // If we don't have the nonce yet, wait for it (HAProxy compatibility).
-    if (! (this.req.head && this.req.head.length >= 8)) {
-      waitingForNonce = true;
-    }
-
-    var headers = [
-        'HTTP/1.1 101 WebSocket Protocol Handshake'
-      , 'Upgrade: WebSocket'
-      , 'Connection: Upgrade'
-      , 'Sec-WebSocket-Origin: ' + origin
-      , 'Sec-WebSocket-Location: ' + location
-    ];
-
-    if (this.req.headers['sec-websocket-protocol']){
-      headers.push('Sec-WebSocket-Protocol: '
-          + this.req.headers['sec-websocket-protocol']);
-    }
-  } else {
-    var headers = [
-        'HTTP/1.1 101 Web Socket Protocol Handshake'
-      , 'Upgrade: WebSocket'
-      , 'Connection: Upgrade'
-      , 'WebSocket-Origin: ' + origin
-      , 'WebSocket-Location: ' + location
-    ];
-  }
-
-  try {
-    this.socket.write(headers.concat('', '').join('\r\n'));
-    this.socket.setTimeout(0);
-    this.socket.setNoDelay(true);
-    this.socket.setEncoding('utf8');
-  } catch (e) {
-    this.end();
-    return;
-  }
-
-  if (waitingForNonce) {
-    this.socket.setEncoding('binary');
-  } else if (this.proveReception(headers)) {
-    self.flush();
-  }
-
-  var headBuffer = '';
-
-  this.socket.on('data', function (data) {
-    if (waitingForNonce) {
-      headBuffer += data;
-
-      if (headBuffer.length < 8) {
-        return;
-      }
-
-      // Restore the connection to utf8 encoding after receiving the nonce
-      self.socket.setEncoding('utf8');
-      waitingForNonce = false;
-
-      // Stuff the nonce into the location where it's expected to be
-      self.req.head = headBuffer.substr(0, 8);
-      headBuffer = '';
-
-      if (self.proveReception(headers)) {
-        self.flush();
-      }
-
-      return;
-    }
-
-    self.parser.add(data);
-  });
-};
-
-/**
- * Writes to the socket.
- *
- * @api private
- */
-
-WebSocket.prototype.write = function (data) {
-  if (this.open) {
-    this.drained = false;
-
-    if (this.buffer) {
-      this.buffered.push(data);
-      return this;
-    }
-
-    var length = Buffer.byteLength(data)
-      , buffer = new Buffer(2 + length);
-
-    buffer.write('\x00', 'binary');
-    buffer.write(data, 1, 'utf8');
-    buffer.write('\xff', 1 + length, 'binary');
-
-    try {
-      if (this.socket.write(buffer)) {
-        this.drained = true;
-      }
-    } catch (e) {
-      this.end();
-    }
-
-    this.log.debug(this.name + ' writing', data);
-  }
-};
-
-/**
- * Flushes the internal buffer
- *
- * @api private
- */
-
-WebSocket.prototype.flush = function () {
-  this.buffer = false;
-
-  for (var i = 0, l = this.buffered.length; i < l; i++) {
-    this.write(this.buffered.splice(0, 1)[0]);
-  }
-};
-
-/**
- * Finishes the handshake.
- *
- * @api private
- */
-
-WebSocket.prototype.proveReception = function (headers) {
-  var self = this
-    , k1 = this.req.headers['sec-websocket-key1']
-    , k2 = this.req.headers['sec-websocket-key2'];
-
-  if (k1 && k2){
-    var md5 = crypto.createHash('md5');
-
-    [k1, k2].forEach(function (k) {
-      var n = parseInt(k.replace(/[^\d]/g, ''))
-        , spaces = k.replace(/[^ ]/g, '').length;
-
-      if (spaces === 0 || n % spaces !== 0){
-        self.log.warn('Invalid ' + self.name + ' key: "' + k + '".');
-        self.end();
-        return false;
-      }
-
-      n /= spaces;
-
-      md5.update(String.fromCharCode(
-        n >> 24 & 0xFF,
-        n >> 16 & 0xFF,
-        n >> 8  & 0xFF,
-        n       & 0xFF));
-    });
-
-    md5.update(this.req.head.toString('binary'));
-
-    try {
-      this.socket.write(md5.digest('binary'), 'binary');
-    } catch (e) {
-      this.end();
-    }
-  }
-
-  return true;
-};
-
-/**
- * Writes a payload.
- *
- * @api private
- */
-
-WebSocket.prototype.payload = function (msgs) {
-  for (var i = 0, l = msgs.length; i < l; i++) {
-    this.write(msgs[i]);
-  }
-
-  return this;
-};
-
-/**
- * Closes the connection.
- *
- * @api private
- */
-
-WebSocket.prototype.doClose = function () {
-  this.socket.end();
-};
-
-/**
- * WebSocket parser
- *
- * @api public
- */
-
-function Parser () {
-  this.buffer = '';
-  this.i = 0;
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-Parser.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Adds data to the buffer.
- *
- * @api public
- */
-
-Parser.prototype.add = function (data) {
-  this.buffer += data;
-  this.parse();
-};
-
-/**
- * Parses the buffer.
- *
- * @api private
- */
-
-Parser.prototype.parse = function () {
-  for (var i = this.i, chr, l = this.buffer.length; i < l; i++){
-    chr = this.buffer[i];
-
-    if (this.buffer.length == 2 && this.buffer[1] == '\u0000') {
-      this.emit('close');
-      this.buffer = '';
-      this.i = 0;
-      return;
-    }
-
-    if (i === 0){
-      if (chr != '\u0000')
-        this.error('Bad framing. Expected null byte as first frame');
-      else
-        continue;
-    }
-
-    if (chr == '\ufffd'){
-      this.emit('data', this.buffer.substr(1, i - 1));
-      this.buffer = this.buffer.substr(i + 1);
-      this.i = 0;
-      return this.parse();
-    }
-  }
-};
-
-/**
- * Handles an error
- *
- * @api private
- */
-
-Parser.prototype.error = function (reason) {
-  this.buffer = '';
-  this.i = 0;
-  this.emit('error', reason);
-  return this;
-};
diff --git a/node/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js b/node/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js
deleted file mode 100644 (file)
index 8760a9e..0000000
+++ /dev/null
@@ -1,465 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-/**
- * Module requirements.
- */
-
-var Transport = require('../../transport')
-  , EventEmitter = process.EventEmitter
-  , crypto = require('crypto')
-  , parser = require('../../parser')
-  , util = require('../../util');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = WebSocket;
-exports.Parser = Parser;
-
-/**
- * HTTP interface constructor. Interface compatible with all transports that
- * depend on request-response cycles.
- *
- * @api public
- */
-
-function WebSocket (mng, data, req) {
-  // parser
-  var self = this;
-
-  this.parser = new Parser();
-  this.parser.on('data', function (packet) {
-    self.onMessage(parser.decodePacket(packet));
-  });
-  this.parser.on('ping', function () {
-    // version 8 ping => pong
-    self.socket.write('\u008a\u0000');
-  });
-  this.parser.on('close', function () {
-    self.end();
-  });
-  this.parser.on('error', function (reason) {
-    self.log.warn(self.name + ' parser error: ' + reason);
-    self.end();
-  });
-
-  Transport.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-WebSocket.prototype.__proto__ = Transport.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-WebSocket.prototype.name = 'websocket';
-
-/**
- * Called when the socket connects.
- *
- * @api private
- */
-
-WebSocket.prototype.onSocketConnect = function () {
-  var self = this;
-
-  if (this.req.headers.upgrade !== 'websocket') {
-    this.log.warn(this.name + ' connection invalid');
-    this.end();
-    return;
-  }
-
-  var origin = this.req.headers.origin
-    , location = (this.socket.encrypted ? 'wss' : 'ws')
-               + '://' + this.req.headers.host + this.req.url;
-
-  if (!this.req.headers['sec-websocket-key']) {
-    this.log.warn(this.name + ' connection invalid: received no key');
-    this.end();
-    return;
-  }
-    
-  // calc key
-  var key = this.req.headers['sec-websocket-key'];  
-  var shasum = crypto.createHash('sha1');  
-  shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11");  
-  key = shasum.digest('base64');
-
-  var headers = [
-      'HTTP/1.1 101 Switching Protocols'
-    , 'Upgrade: websocket'
-    , 'Connection: Upgrade'
-    , 'Sec-WebSocket-Accept: ' + key
-  ];
-
-  try {
-    this.socket.write(headers.concat('', '').join('\r\n'));
-    this.socket.setTimeout(0);
-    this.socket.setNoDelay(true);
-  } catch (e) {
-    this.end();
-    return;
-  }
-
-  this.socket.on('data', function (data) {
-    self.parser.add(data);
-  });
-};
-
-/**
- * Writes to the socket.
- *
- * @api private
- */
-
-WebSocket.prototype.write = function (data) {
-  if (this.open) {
-    var buf = this.frame(0x81, data);
-    this.socket.write(buf, 'binary');
-    this.log.debug(this.name + ' writing', data);
-  }
-};
-
-/**
- * Frame server-to-client output as a text packet.
- *
- * @api private
- */
-
-WebSocket.prototype.frame = function (opcode, str) {
-  var dataBuffer = new Buffer(str)
-    , dataLength = dataBuffer.length
-    , startOffset = 2
-    , secondByte = dataLength;
-  if (dataLength > 65536) {
-    startOffset = 10;
-    secondByte = 127;
-  }
-  else if (dataLength > 125) {
-    startOffset = 4;
-    secondByte = 126;
-  }
-  var outputBuffer = new Buffer(dataLength + startOffset);
-  outputBuffer[0] = opcode;
-  outputBuffer[1] = secondByte;
-  dataBuffer.copy(outputBuffer, startOffset);
-  switch (secondByte) {
-  case 126:
-    outputBuffer[2] = dataLength >>> 8;
-    outputBuffer[3] = dataLength % 256;
-    break;
-  case 127:
-    var l = dataLength;
-    for (var i = 1; i <= 8; ++i) {
-      outputBuffer[startOffset - i] = l & 0xff;
-      l >>>= 8;
-    }
-  }
-  return outputBuffer;
-};
-
-/**
- * Closes the connection.
- *
- * @api private
- */
-
-WebSocket.prototype.doClose = function () {
-  this.socket.end();
-};
-
-/**
- * WebSocket parser
- *
- * @api public
- */
-function Parser () {
-  this.state = {
-    activeFragmentedOperation: null,
-    lastFragment: false,
-    masked: false,
-    opcode: 0
-  };
-  this.overflow = null;
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  this.currentMessage = '';
-
-  var self = this;  
-  this.opcodeHandlers = {
-    // text
-    '1': function(data) {
-      var finish = function(mask, data) {
-        self.currentMessage += self.unmask(mask, data);
-        if (self.state.lastFragment) {
-          self.emit('data', self.currentMessage);
-          self.currentMessage = '';
-        }
-        self.endPacket();
-      }
-
-      var expectData = function(length) {
-        if (self.state.masked) {
-          self.expect('Mask', 4, function(data) {
-            var mask = data;
-            self.expect('Data', length, function(data) {
-              finish(mask, data);
-            });
-          });
-        }
-        else {
-          self.expect('Data', length, function(data) { 
-            finish(null, data);
-          });
-        } 
-      }
-
-      // decode length
-      var firstLength = data[1] & 0x7f;
-      if (firstLength < 126) {
-        expectData(firstLength);
-      }
-      else if (firstLength == 126) {
-        self.expect('Length', 2, function(data) {
-          expectData(util.unpack(data));
-        });
-      }
-      else if (firstLength == 127) {
-        self.expect('Length', 8, function(data) {
-          if (util.unpack(data.slice(0, 4)) != 0) {
-            self.error('packets with length spanning more than 32 bit is currently not supported');
-            return;
-          }
-          var lengthBytes = data.slice(4); // note: cap to 32 bit length
-          expectData(util.unpack(data));
-        });
-      }      
-    },
-    // close
-    '8': function(data) {
-      self.emit('close');
-      self.reset();
-    },
-    // ping
-    '9': function(data) {
-      if (self.state.lastFragment == false) {
-        self.error('fragmented ping is not supported');
-        return;
-      }
-      
-      var finish = function(mask, data) {
-        self.emit('ping', self.unmask(mask, data));
-        self.endPacket();
-      }
-
-      var expectData = function(length) {
-        if (self.state.masked) {
-          self.expect('Mask', 4, function(data) {
-            var mask = data;
-            self.expect('Data', length, function(data) {
-              finish(mask, data);
-            });
-          });
-        }
-        else {
-          self.expect('Data', length, function(data) { 
-            finish(null, data);
-          });
-        } 
-      }
-
-      // decode length
-      var firstLength = data[1] & 0x7f;
-      if (firstLength == 0) {
-        finish(null, null);        
-      }
-      else if (firstLength < 126) {
-        expectData(firstLength);
-      }
-      else if (firstLength == 126) {
-        self.expect('Length', 2, function(data) {
-          expectData(util.unpack(data));
-        });
-      }
-      else if (firstLength == 127) {
-        self.expect('Length', 8, function(data) {
-          expectData(util.unpack(data));
-        });
-      }      
-    }
-  }
-
-  this.expect('Opcode', 2, this.processPacket);  
-};
-
-/**
- * Inherits from EventEmitter.
- */
-
-Parser.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * Add new data to the parser.
- *
- * @api public
- */
-
-Parser.prototype.add = function(data) {
-  if (this.expectBuffer == null) {
-    this.addToOverflow(data);
-    return;
-  }
-  var toRead = Math.min(data.length, this.expectBuffer.length - this.expectOffset);
-  data.copy(this.expectBuffer, this.expectOffset, 0, toRead);
-  this.expectOffset += toRead;
-  if (toRead < data.length) {
-    // at this point the overflow buffer shouldn't at all exist
-    this.overflow = new Buffer(data.length - toRead);
-    data.copy(this.overflow, 0, toRead, toRead + this.overflow.length);
-  }
-  if (this.expectOffset == this.expectBuffer.length) {
-    var bufferForHandler = this.expectBuffer;
-    this.expectBuffer = null;
-    this.expectOffset = 0;
-    this.expectHandler.call(this, bufferForHandler);
-  }
-}
-
-/**
- * Adds a piece of data to the overflow.
- *
- * @api private
- */
-
-Parser.prototype.addToOverflow = function(data) {
-  if (this.overflow == null) this.overflow = data;
-  else {
-    var prevOverflow = this.overflow;
-    this.overflow = new Buffer(this.overflow.length + data.length);
-    prevOverflow.copy(this.overflow, 0);
-    data.copy(this.overflow, prevOverflow.length);
-  }  
-}
-
-/**
- * Waits for a certain amount of bytes to be available, then fires a callback.
- *
- * @api private
- */
-
-Parser.prototype.expect = function(what, length, handler) {
-  this.expectBuffer = new Buffer(length);
-  this.expectOffset = 0;
-  this.expectHandler = handler;
-  if (this.overflow != null) {
-    var toOverflow = this.overflow;
-    this.overflow = null;
-    this.add(toOverflow);
-  }
-}
-
-/**
- * Start processing a new packet.
- *
- * @api private
- */
-
-Parser.prototype.processPacket = function (data) {
-  if ((data[0] & 0x70) != 0) this.error('reserved fields not empty');
-  this.state.lastFragment = (data[0] & 0x80) == 0x80; 
-  this.state.masked = (data[1] & 0x80) == 0x80;
-  var opcode = data[0] & 0xf;
-  if (opcode == 0) {
-    // continuation frame
-    if (this.state.opcode != 1 || this.state.opcode != 2) {
-      this.error('continuation frame cannot follow current opcode')
-      return;
-    }
-  }
-  else this.state.opcode = opcode;
-  this.state.opcode = data[0] & 0xf;
-  var handler = this.opcodeHandlers[this.state.opcode];
-  if (typeof handler == 'undefined') this.error('no handler for opcode ' + this.state.opcode);
-  else handler(data);
-}
-
-/**
- * Endprocessing a packet.
- *
- * @api private
- */
-
-Parser.prototype.endPacket = function() {
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  if (this.state.lastFragment && this.state.opcode == this.state.activeFragmentedOperation) {
-    // end current fragmented operation
-    this.state.activeFragmentedOperation = null;
-  }
-  this.state.lastFragment = false;
-  this.state.opcode = this.state.activeFragmentedOperation != null ? this.state.activeFragmentedOperation : 0;
-  this.state.masked = false;
-  this.expect('Opcode', 2, this.processPacket);  
-}
-
-/**
- * Reset the parser state.
- *
- * @api private
- */
-
-Parser.prototype.reset = function() {
-  this.state = {
-    activeFragmentedOperation: null,
-    lastFragment: false,
-    masked: false,
-    opcode: 0
-  };
-  this.expectOffset = 0;
-  this.expectBuffer = null;
-  this.expectHandler = null;
-  this.overflow = null;
-  this.currentMessage = '';
-}
-
-/**
- * Unmask received data.
- *
- * @api private
- */
-
-Parser.prototype.unmask = function (mask, buf) {
-  if (mask != null) {
-    for (var i = 0, ll = buf.length; i < ll; i++) {
-      buf[i] ^= mask[i % 4];
-    }    
-  }
-  return buf != null ? buf.toString('utf8') : '';
-}
-
-/**
- * Handles an error
- *
- * @api private
- */
-
-Parser.prototype.error = function (reason) {
-  this.reset();
-  this.emit('error', reason);
-  return this;
-};
diff --git a/node/node_modules/socket.io/lib/transports/websocket/index.js b/node/node_modules/socket.io/lib/transports/websocket/index.js
deleted file mode 100644 (file)
index 5c615b2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-/**
- * Export websocket versions.
- */
-
-module.exports = {
-  7: require('./hybi-07-12'),
-  8: require('./hybi-07-12'),
-  default: require('./default')
-};
diff --git a/node/node_modules/socket.io/lib/transports/xhr-polling.js b/node/node_modules/socket.io/lib/transports/xhr-polling.js
deleted file mode 100644 (file)
index fee2438..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module requirements.
- */
-
-var HTTPPolling = require('./http-polling');
-
-/**
- * Export the constructor.
- */
-
-exports = module.exports = XHRPolling;
-
-/**
- * Ajax polling transport.
- *
- * @api public
- */
-
-function XHRPolling (mng, data, req) {
-  HTTPPolling.call(this, mng, data, req);
-};
-
-/**
- * Inherits from Transport.
- */
-
-XHRPolling.prototype.__proto__ = HTTPPolling.prototype;
-
-/**
- * Transport name
- *
- * @api public
- */
-
-XHRPolling.prototype.name = 'xhr-polling';
-
-/**
- * Frames data prior to write.
- *
- * @api private
- */
-
-XHRPolling.prototype.doWrite = function (data) {
-  HTTPPolling.prototype.doWrite.call(this);
-
-  var origin = this.req.headers.origin
-    , headers = {
-          'Content-Type': 'text/plain; charset=UTF-8'
-        , 'Content-Length': data === undefined ? 0 : Buffer.byteLength(data)
-        , 'Connection': 'Keep-Alive'
-      };
-
-  if (origin) {
-    // https://developer.mozilla.org/En/HTTP_Access_Control
-    headers['Access-Control-Allow-Origin'] = '*';
-
-    if (this.req.headers.cookie) {
-      headers['Access-Control-Allow-Credentials'] = 'true';
-    }
-  }
-
-  this.response.writeHead(200, headers);
-  this.response.write(data);
-  this.log.debug(this.name + ' writing', data);
-};
diff --git a/node/node_modules/socket.io/lib/util.js b/node/node_modules/socket.io/lib/util.js
deleted file mode 100644 (file)
index f7d9f2b..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-/**
- * Converts an enumerable to an array.
- *
- * @api public
- */
-
-exports.toArray = function (enu) {
-  var arr = [];
-
-  for (var i = 0, l = enu.length; i < l; i++)
-    arr.push(enu[i]);
-
-  return arr;
-};
-
-/**
- * Unpacks a buffer to a number.
- *
- * @api public
- */
-
-exports.unpack = function (buffer) {
-  var n = 0;
-  for (var i = 0; i < buffer.length; ++i) {
-    n = (i == 0) ? buffer[i] : (n * 256) + buffer[i];
-  }
-  return n;
-}
-
-/**
- * Left pads a string.
- *
- * @api public
- */
-
-exports.padl = function (s,n,c) { 
-  return new Array(1 + n - s.length).join(c) + s;
-}
-
diff --git a/node/node_modules/socket.io/package.json b/node/node_modules/socket.io/package.json
deleted file mode 100644 (file)
index 75116ee..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-    "name": "socket.io"
-  , "version": "0.8.4"
-  , "description": "Real-time apps made cross-browser & easy with a WebSocket-like API"
-  , "homepage": "http://socket.io"
-  , "keywords": ["websocket", "socket", "realtime", "socket.io", "comet", "ajax"]
-  , "author": "Guillermo Rauch <guillermo@learnboost.com>"
-  , "contributors": [
-        { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }
-      , { "name": "Arnout Kazemier", "email": "info@3rd-eden.com" }
-      , { "name": "Vladimir Dronnikov", "email": "dronnikov@gmail.com" }
-      , { "name": "Einar Otto Stangvik", "email": "einaros@gmail.com" }
-    ]
-  , "repository":{
-        "type": "git"
-      , "url": "https://github.com/LearnBoost/socket.io.git"
-    }
-  , "dependencies": {
-        "socket.io-client": "0.8.4"
-      , "policyfile": "0.0.4"
-      , "redis": "0.6.6"
-    }
-  , "devDependencies": {
-        "expresso": "0.7.7"
-      , "should": "0.0.4"
-      , "assertvanish": "0.0.3-1"
-    }
-  , "main": "index"
-  , "engines": { "node": ">= 0.4.0" }
-}
diff --git a/node/node_modules/socket.io/support/node-websocket-client/LICENSE b/node/node_modules/socket.io/support/node-websocket-client/LICENSE
deleted file mode 100644 (file)
index f3c2eae..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2010, Peter Griess <pg@std.in>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-
-    * Neither the name of node-websocket-client nor the names of its
-      contributors may be used to endorse or promote products derived from this
-      software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node/node_modules/socket.io/support/node-websocket-client/Makefile b/node/node_modules/socket.io/support/node-websocket-client/Makefile
deleted file mode 100644 (file)
index e7c849a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# This makefile exists to help run tests.
-#
-# If TEST_UNIX is a non-empty value, runs tests for UNIX sockets. This
-# functionality is not in node-websocket-server at the moment.
-
-.PHONY: test
-
-all: test test-unix
-
-test:
-       for f in `ls -1 test/test-*.js | grep -v unix` ; do \
-               echo $$f ; \
-               node $$f ; \
-       done
-
-test-unix:
-       if [[ -n "$$TEST_UNIX" ]] ; then \
-               for f in `ls -1 test/test-*.js | grep unix` ; do \
-                       echo $$f ; \
-                       node $$f ; \
-               done \
-       fi
diff --git a/node/node_modules/socket.io/support/node-websocket-client/README.md b/node/node_modules/socket.io/support/node-websocket-client/README.md
deleted file mode 100644 (file)
index 8823a5c..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-A prototype [Web Socket](http://www.whatwg.org/specs/web-socket-protocol/)
-client implementation for [node.js](http://nodejs.org).
-
-Tested with
-[miksago/node-websocket-server](http://github.com/miksago/node-websocket-server)
-v1.2.00.
-
-Requires [nodejs](http://nodejs.org) 0.1.98 or later.
-
-## Installation
-
-Install this using `npm` as follows
-
-    npm install websocket-client
-
-... or just dump `lib/websocket.js` in your `$NODE_PATH`.
-
-## Usage
-
-    var sys = require('sys');
-    var WebSocket = require('websocket').WebSocket;
-
-    var ws = new WebSocket('ws://localhost:8000/biff', 'borf');
-    ws.addListener('data', function(buf) {
-        sys.debug('Got data: ' + sys.inspect(buf));
-    });
-    ws.onmessage = function(m) {
-        sys.debug('Got message: ' + m);
-    }
-
-## API
-
-This supports the `send()` and `onmessage()` APIs. The `WebSocket` object will
-also emit `data` events that are node `Buffer` objects, in case you want to
-work with something lower-level than strings.
-
-## Transports
-
-Multiple transports are supported, indicated by the scheme provided to the
-`WebSocket` constructor. `ws://` is a standard TCP-based Web Socket;
-`ws+unix://` allows connection to a UNIX socket at the given path.
diff --git a/node/node_modules/socket.io/support/node-websocket-client/examples/client-unix.js b/node/node_modules/socket.io/support/node-websocket-client/examples/client-unix.js
deleted file mode 100644 (file)
index 3bb23ba..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-var sys = require('sys');
-var WebSocket = require('../lib/websocket').WebSocket;
-
-var ws = new WebSocket('ws+unix://' + process.argv[2], 'boffo');
-
-ws.addListener('message', function(d) {
-    sys.debug('Received message: ' + d.toString('utf8'));
-});
-
-ws.addListener('open', function() {
-    ws.send('This is a message', 1);
-});
diff --git a/node/node_modules/socket.io/support/node-websocket-client/examples/client.js b/node/node_modules/socket.io/support/node-websocket-client/examples/client.js
deleted file mode 100644 (file)
index 259bf6e..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-var sys = require('sys');
-var WebSocket = require('../lib/websocket').WebSocket;
-
-var ws = new WebSocket('ws://localhost:8000/biff', 'borf');
-ws.addListener('data', function(buf) {
-    sys.debug('Got data: ' + sys.inspect(buf));
-});
-ws.onmessage = function(m) {
-    sys.debug('Got message: ' + m);
-}
diff --git a/node/node_modules/socket.io/support/node-websocket-client/examples/server-unix.js b/node/node_modules/socket.io/support/node-websocket-client/examples/server-unix.js
deleted file mode 100644 (file)
index 912be0e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-var sys = require('sys');
-var ws = require('websocket-server/ws');
-
-var srv = ws.createServer({ debug : true});
-srv.addListener('connection', function(s) {
-    sys.debug('Got a connection!');
-
-    s._req.socket.addListener('fd', function(fd) {
-        sys.debug('Got an fd: ' + fd);
-    });
-});
-
-srv.listen(process.argv[2]);
diff --git a/node/node_modules/socket.io/support/node-websocket-client/lib/websocket.js b/node/node_modules/socket.io/support/node-websocket-client/lib/websocket.js
deleted file mode 100644 (file)
index 32dd79b..0000000
+++ /dev/null
@@ -1,599 +0,0 @@
-var assert = require('assert');
-var buffer = require('buffer');
-var crypto = require('crypto');
-var events = require('events');
-var http = require('http');
-var net = require('net');
-var urllib = require('url');
-var sys = require('sys');
-
-var FRAME_NO = 0;
-var FRAME_LO = 1;
-var FRAME_HI = 2;
-
-// Values for readyState as per the W3C spec
-var CONNECTING = 0;
-var OPEN = 1;
-var CLOSING = 2;
-var CLOSED = 3;
-
-var debugLevel = parseInt(process.env.NODE_DEBUG, 16);
-var debug = (debugLevel & 0x4) ?
-    function() { sys.error.apply(this, arguments); } :
-    function() { };
-
-// Generate a Sec-WebSocket-* value
-var createSecretKey = function() {
-    // How many spaces will we be inserting?
-    var numSpaces = 1 + Math.floor(Math.random() * 12);
-    assert.ok(1 <= numSpaces && numSpaces <= 12);
-
-    // What is the numerical value of our key?
-    var keyVal = (Math.floor(
-        Math.random() * (4294967295 / numSpaces)
-    ) * numSpaces);
-
-    // Our string starts with a string representation of our key
-    var s = keyVal.toString();
-
-    // Insert 'numChars' worth of noise in the character ranges
-    // [0x21, 0x2f] (14 characters) and [0x3a, 0x7e] (68 characters)
-    var numChars = 1 + Math.floor(Math.random() * 12);
-    assert.ok(1 <= numChars && numChars <= 12);
-    
-    for (var i = 0; i < numChars; i++) {
-        var pos = Math.floor(Math.random() * s.length + 1);
-
-        var c = Math.floor(Math.random() * (14 + 68));
-        c = (c <= 14) ?
-            String.fromCharCode(c + 0x21) :
-            String.fromCharCode((c - 14) + 0x3a);
-
-        s = s.substring(0, pos) + c + s.substring(pos, s.length);
-    }
-
-    // We shoudln't have any spaces in our value until we insert them
-    assert.equal(s.indexOf(' '), -1);
-
-    // Insert 'numSpaces' worth of spaces
-    for (var i = 0; i < numSpaces; i++) {
-        var pos = Math.floor(Math.random() * (s.length - 1)) + 1;
-        s = s.substring(0, pos) + ' ' + s.substring(pos, s.length);
-    }
-
-    assert.notEqual(s.charAt(0), ' ');
-    assert.notEqual(s.charAt(s.length), ' ');
-
-    return s;
-};
-
-// Generate a challenge sequence
-var createChallenge = function() {
-    var c = ''; 
-    for (var i = 0; i < 8; i++) {
-        c += String.fromCharCode(Math.floor(Math.random() * 255));
-    }
-
-    return c;
-};
-
-// Get the value of a secret key string
-//
-// This strips non-digit values and divides the result by the number of
-// spaces found.
-var secretKeyValue = function(sk) {
-    var ns = 0;
-    var v = 0;
-
-    for (var i = 0; i < sk.length; i++) {
-        var cc = sk.charCodeAt(i);
-        
-        if (cc == 0x20) {
-            ns++;
-        } else if (0x30 <= cc && cc <= 0x39) {
-            v = v * 10 + cc - 0x30;
-        }
-    }
-
-    return Math.floor(v / ns);
-}
-
-// Get the to-be-hashed value of a secret key string
-//
-// This takes the result of secretKeyValue() and encodes it in a big-endian
-// byte string
-var secretKeyHashValue = function(sk) {
-    var skv = secretKeyValue(sk);
-   
-    var hv = '';
-    hv += String.fromCharCode((skv >> 24) & 0xff);
-    hv += String.fromCharCode((skv >> 16) & 0xff);
-    hv += String.fromCharCode((skv >> 8) & 0xff);
-    hv += String.fromCharCode((skv >> 0) & 0xff);
-
-    return hv;
-};
-
-// Compute the secret key signature based on two secret key strings and some
-// handshaking data.
-var computeSecretKeySignature = function(s1, s2, hs) { 
-    assert.equal(hs.length, 8);
-
-    var hash = crypto.createHash('md5');
-
-    hash.update(secretKeyHashValue(s1));
-    hash.update(secretKeyHashValue(s2));
-    hash.update(hs);
-
-    return hash.digest('binary');
-};
-
-// Return a hex representation of the given binary string; used for debugging
-var str2hex = function(str) {
-    var hexChars = [
-        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
-        'a', 'b', 'c', 'd', 'e', 'f'
-    ];
-
-    var out = '';
-    for (var i = 0; i < str.length; i++) {
-        var c = str.charCodeAt(i);
-        out += hexChars[(c & 0xf0) >>> 4];
-        out += hexChars[c & 0x0f];
-        out += ' ';
-    }
-
-    return out.trim();
-};
-
-// Get the scheme for a URL, undefined if none is found
-var getUrlScheme = function(url) {
-    var i = url.indexOf(':');
-    if (i == -1) {
-        return undefined;
-    }
-
-    return url.substring(0, i);
-};
-
-// Set a constant on the given object
-var setConstant = function(obj, name, value) {
-    Object.defineProperty(obj, name, {
-        get : function() {
-            return value;
-        }
-    });
-};
-
-// WebSocket object
-//
-// This is intended to conform (mostly) to http://dev.w3.org/html5/websockets/
-//
-// N.B. Arguments are parsed in the anonymous function at the bottom of the
-//      constructor.
-var WebSocket = function(url, proto, opts) {
-    events.EventEmitter.call(this);
-
-    // Retain a reference to our object
-    var self = this;
-
-    // State of our end of the connection
-    var readyState = CONNECTING;
-
-    // Whether or not the server has sent a close handshake
-    var serverClosed = false;
-
-    // Our underlying net.Stream instance
-    var stream = undefined;
-
-    opts = opts || {
-        origin : 'http://www.example.com'
-    };
-
-    // Frame parsing functions
-    //
-    // These read data from the given buffer starting at the given offset,
-    // looking for the end of the current frame. If found, the current frame is
-    // emitted and the function returns. Only a single frame is processed at a
-    // time.
-    //
-    // The number of bytes read to complete a frame is returned, which the
-    // caller is to use to advance along its buffer. If 0 is returned, no
-    // completed frame bytes were found, and the caller should probably enqueue
-    // the buffer as a continuation of the current message. If a complete frame
-    // is read, the function is responsible for resting 'frameType'.
-
-    // Framing data
-    var frameType = FRAME_NO;
-    var bufs = [];
-    var bufsBytes = 0;
-
-    // Frame-parsing functions
-    var frameFuncs = [
-        // FRAME_NO
-        function(buf, off) {
-            if (buf[off] & 0x80) {
-                frameType = FRAME_HI;
-            } else {
-                frameType = FRAME_LO;
-            }
-
-            return 1;
-        },
-
-        // FRAME_LO
-        function(buf, off) {
-            debug('frame_lo(' + sys.inspect(buf) + ', ' + off + ')');
-
-            // Find the first instance of 0xff, our terminating byte
-            for (var i = off; i < buf.length && buf[i] != 0xff; i++)
-                ;
-
-            // We didn't find a terminating byte
-            if (i >= buf.length) {
-                return 0;
-            }
-
-            // We found a terminating byte; collect all bytes into a single buffer
-            // and emit it
-            var mb = null;
-            if (bufs.length == 0) {
-                mb = buf.slice(off, i);
-            } else {
-                mb = new buffer.Buffer(bufsBytes + i);
-
-                var mbOff = 0;
-                bufs.forEach(function(b) {
-                    b.copy(mb, mbOff, 0, b.length);
-                    mbOff += b.length;
-                });
-
-                assert.equal(mbOff, bufsBytes);
-
-                // Don't call Buffer.copy() if we're coping 0 bytes. Rather
-                // than being a no-op, this will trigger a range violation on
-                // the destination.
-                if (i > 0) {
-                    buf.copy(mb, mbOff, off, i);
-                }
-
-                // We consumed all of the buffers that we'd been saving; clear
-                // things out
-                bufs = [];
-                bufsBytes = 0;
-            }
-
-            process.nextTick(function() {
-                var b = mb;
-                return function() {
-                    var m = b.toString('utf8');
-
-                    self.emit('data', b);
-                    self.emit('message', m);        // wss compat
-
-                    if (self.onmessage) {
-                        self.onmessage({data: m});
-                    }
-                };
-            }());
-
-            frameType = FRAME_NO;
-            return i - off + 1;
-        },
-
-        // FRAME_HI
-        function(buf, off) {
-            debug('frame_hi(' + sys.inspect(buf) + ', ' + off + ')');
-
-            if (buf[off] !== 0) {
-                throw new Error('High-byte framing not supported.');
-            }
-
-            serverClosed = true;
-            return 1;
-        }
-    ];
-
-    // Handle data coming from our socket
-    var dataListener = function(buf) {
-        if (buf.length <= 0 || serverClosed) {
-            return;
-        }
-
-        debug('dataListener(' + sys.inspect(buf) + ')');
-
-        var off = 0;
-        var consumed = 0;
-
-        do {
-            if (frameType < 0 || frameFuncs.length <= frameType) {
-                throw new Error('Unexpected frame type: ' + frameType);
-            }
-
-            assert.equal(bufs.length === 0, bufsBytes === 0);
-            assert.ok(off < buf.length);
-
-            consumed = frameFuncs[frameType](buf, off);
-            off += consumed;
-        } while (!serverClosed && consumed > 0 && off < buf.length);
-
-        if (serverClosed) {
-            serverCloseHandler();
-        }
-        
-        if (consumed == 0) {
-            bufs.push(buf.slice(off, buf.length));
-            bufsBytes += buf.length - off;
-        }
-    };
-
-    // Handle incoming file descriptors
-    var fdListener = function(fd) {
-        self.emit('fd', fd);
-    };
-
-    // Handle errors from any source (HTTP client, stream, etc)
-    var errorListener = function(e) {
-        process.nextTick(function() {
-            self.emit('wserror', e);
-
-            if (self.onerror) {
-                self.onerror(e);
-            }
-        });
-    };
-
-    // Finish the closing process; destroy the socket and tell the application
-    // that we've closed.
-    var finishClose = self.finishClose = function() {
-        readyState = CLOSED;
-
-        if (stream) {
-            stream.end();
-            stream.destroy();
-            stream = undefined;
-        }
-
-        process.nextTick(function() {
-            self.emit('close');
-            if (self.onclose) {
-                self.onclose();
-            }
-        });
-    };
-
-    // Send a close frame to the server
-    var sendClose = function() {
-        assert.equal(OPEN, readyState);
-
-        readyState = CLOSING;
-        stream.write('\xff\x00', 'binary');
-    };
-
-    // Handle a close packet sent from the server
-    var serverCloseHandler = function() {
-        assert.ok(serverClosed);
-        assert.ok(readyState === OPEN || readyState === CLOSING);
-
-        bufs = [];
-        bufsBytes = 0;
-
-        // Handle state transitions asynchronously so that we don't change
-        // readyState before the application has had a chance to process data
-        // events which are already in the delivery pipeline. For example, a
-        // 'data' event could be delivered with a readyState of CLOSING if we
-        // received both frames in the same packet.
-        process.nextTick(function() {
-            if (readyState === OPEN) {
-                sendClose();
-            }
-
-            finishClose();
-        });
-    };
-
-    // External API
-    self.close = function(timeout) {
-        if (readyState === CONNECTING) {
-            // If we're still in the process of connecting, the server is not
-            // in a position to understand our close frame. Just nuke the
-            // connection and call it a day.
-            finishClose();
-        } else if (readyState === OPEN) {
-            sendClose();
-
-            if (timeout) {
-                setTimeout(finishClose, timeout * 1000);
-            }
-        }
-    };
-
-    self.send = function(str, fd) {
-        if (readyState != OPEN) {
-            return;
-        }
-
-        stream.write('\x00', 'binary');
-        stream.write(str, 'utf8', fd);
-        stream.write('\xff', 'binary');
-    };
-
-    // wss compat
-    self.write = self.send;
-
-    setConstant(self, 'url', url);
-
-    Object.defineProperty(self, 'readyState',  {
-        get : function() {
-            return readyState;
-        }
-    });
-
-    // Connect and perform handshaking with the server
-    (function() {
-        // Parse constructor arguments 
-        if (!url) {
-            throw new Error('Url and must be specified.');
-        }
-
-        // Secrets used for handshaking
-        var key1 = createSecretKey();
-        var key2 = createSecretKey();
-        var challenge = createChallenge();
-
-        debug(
-            'key1=\'' + str2hex(key1) + '\'; ' +
-            'key2=\'' + str2hex(key2) + '\'; ' +
-            'challenge=\'' + str2hex(challenge) + '\''
-        );
-
-        var httpHeaders = {
-            'Connection' : 'Upgrade',
-            'Upgrade' : 'WebSocket',
-            'Sec-WebSocket-Key1' : key1,
-            'Sec-WebSocket-Key2' : key2
-        };
-        if (opts.origin) {
-            httpHeaders['Origin'] = opts.origin;
-        }
-        if (proto) {
-            httpHeaders['Sec-WebSocket-Protocol'] = proto;
-        }
-
-        var httpPath = '/';
-
-        // Create the HTTP client that we'll use for handshaking. We'll cannabalize
-        // its socket via the 'upgrade' event and leave it to rot.
-        //
-        // N.B. The ws+unix:// scheme makes use of the implementation detail
-        //      that http.Client passes its constructor arguments through,
-        //      un-inspected to net.Stream.connect(). The latter accepts a
-        //      string as its first argument to connect to a UNIX socket.
-        var httpClient = undefined;
-        switch (getUrlScheme(url)) {
-        case 'ws':
-            var u = urllib.parse(url);
-            httpClient = http.createClient(u.port || 80, u.hostname);
-            httpPath = (u.pathname || '/') + (u.search || '');
-            httpHeaders.Host = u.hostname + (u.port ? (":" + u.port) : "");
-            break;
-
-        case 'ws+unix':
-            var sockPath = url.substring('ws+unix://'.length, url.length);
-            httpClient = http.createClient(sockPath);
-            httpHeaders.Host = 'localhost';
-            break;
-
-        default:
-            throw new Error('Invalid URL scheme \'' + urlScheme + '\' specified.');
-        }
-
-        httpClient.on('upgrade', (function() {
-            var data = undefined;
-
-            return function(req, s, head) {
-                stream = s;
-
-                stream.on('data', function(d) {
-                    if (d.length <= 0) {
-                        return;
-                    }
-
-                    if (!data) {
-                        data = d;
-                    } else {
-                        var data2 = new buffer.Buffer(data.length + d.length);
-
-                        data.copy(data2, 0, 0, data.length);
-                        d.copy(data2, data.length, 0, d.length);
-
-                        data = data2;
-                    }
-
-                    if (data.length >= 16) {
-                        var expected = computeSecretKeySignature(key1, key2, challenge);
-                        var actual = data.slice(0, 16).toString('binary');
-
-                        // Handshaking fails; we're donezo
-                        if (actual != expected) {
-                            debug(
-                                'expected=\'' + str2hex(expected) + '\'; ' +
-                                'actual=\'' + str2hex(actual) + '\''
-                            );
-
-                            process.nextTick(function() {
-                                // N.B. Emit 'wserror' here, as 'error' is a reserved word in the
-                                //      EventEmitter world, and gets thrown.
-                                self.emit(
-                                    'wserror',
-                                    new Error('Invalid handshake from server:' +
-                                        'expected \'' + str2hex(expected) + '\', ' +
-                                        'actual \'' + str2hex(actual) + '\''
-                                    )
-                                );
-
-                                if (self.onerror) {
-                                    self.onerror();
-                                }
-
-                                finishClose();
-                            });
-                        }
-
-                        // Un-register our data handler and add the one to be used
-                        // for the normal, non-handshaking case. If we have extra
-                        // data left over, manually fire off the handler on
-                        // whatever remains.
-                        //
-                        // XXX: This is lame. We should only remove the listeners
-                        //      that we added.
-                        httpClient.removeAllListeners('upgrade');
-                        stream.removeAllListeners('data');
-                        stream.on('data', dataListener);
-
-                        readyState = OPEN;
-
-                        process.nextTick(function() {
-                            self.emit('open');
-
-                            if (self.onopen) {
-                                self.onopen();
-                            }
-                        });
-
-                        // Consume any leftover data
-                        if (data.length > 16) {
-                            stream.emit('data', data.slice(16, data.length));
-                        }
-                    }
-                });
-                stream.on('fd', fdListener);
-                stream.on('error', errorListener);
-                stream.on('close', function() {
-                    errorListener(new Error('Stream closed unexpectedly.'));
-                });
-
-                stream.emit('data', head);
-            };
-        })());
-        httpClient.on('error', function(e) {
-            httpClient.end();
-            errorListener(e);
-        });
-
-        var httpReq = httpClient.request(httpPath, httpHeaders);
-
-        httpReq.write(challenge, 'binary');
-        httpReq.end();
-    })();
-};
-sys.inherits(WebSocket, events.EventEmitter);
-exports.WebSocket = WebSocket;
-
-// Add some constants to the WebSocket object
-setConstant(WebSocket.prototype, 'CONNECTING', CONNECTING);
-setConstant(WebSocket.prototype, 'OPEN', OPEN);
-setConstant(WebSocket.prototype, 'CLOSING', CLOSING);
-setConstant(WebSocket.prototype, 'CLOSED', CLOSED);
-
-// vim:ts=4 sw=4 et
diff --git a/node/node_modules/socket.io/support/node-websocket-client/package.json b/node/node_modules/socket.io/support/node-websocket-client/package.json
deleted file mode 100644 (file)
index c6e221f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-    "name" : "websocket-client",
-    "version" : "1.0.0",
-    "description" : "An HTML5 Web Sockets client",
-    "author" : "Peter Griess <pg@std.in>",
-    "engines" : {
-        "node" : ">=0.1.98"
-    },
-    "repositories" : [
-        {
-            "type" : "git",
-            "url" : "http://github.com/pgriess/node-websocket-client.git"
-        }
-    ],
-    "licenses" : [
-        {
-            "type" : "BSD",
-            "url" : "http://github.com/pgriess/node-websocket-client/blob/master/LICENSE"
-        }
-    ],
-    "main" : "./lib/websocket"
-}
diff --git a/node/node_modules/socket.io/support/node-websocket-client/test/test-basic.js b/node/node_modules/socket.io/support/node-websocket-client/test/test-basic.js
deleted file mode 100644 (file)
index f010424..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// Verify that we can connect to a WebSocket server, exchange messages, and
-// shut down cleanly.
-
-var assert = require('assert');
-var WebSocket = require('../lib/websocket').WebSocket;
-var WebSocketServer = require('websocket-server/ws/server').Server;
-
-var PORT = 1024 + Math.floor(Math.random() * 4096);
-var C_MSG = 'Client test: ' + (Math.random() * 100);
-var S_MSG = 'Server test: ' + (Math.random() * 100);
-
-var serverGotConnection = false;
-var clientGotOpen = false;
-var clientGotData = false;
-var clientGotMessage = false;
-var serverGotMessage = false;
-var serverGotClose = false;
-var clientGotClose = false;
-
-var wss = new WebSocketServer();
-wss.listen(PORT, 'localhost');
-wss.on('connection', function(c) {
-    serverGotConnection = true;
-
-    c.on('message', function(m) {
-        assert.equal(m, C_MSG);
-        serverGotMessage = true;
-
-        c.close();
-    });
-
-    c.on('close', function() {
-        serverGotClose = true;
-        wss.close();
-    });
-
-    c.write(S_MSG);
-});
-
-var ws = new WebSocket('ws://localhost:' + PORT + '/', 'biff');
-ws.on('open', function() {
-    clientGotOpen = true;
-});
-ws.on('data', function(buf) {
-    assert.equal(typeof buf, 'object');
-    assert.equal(buf.toString('utf8'), S_MSG);
-
-    clientGotData = true;
-
-    ws.send(C_MSG);
-});
-ws.onmessage = function(m) {
-    assert.deepEqual(m, {data : S_MSG});
-    clientGotMessage = true;
-};
-ws.onclose = function() {
-    clientGotClose = true;
-};
-
-process.on('exit', function() {
-    assert.ok(serverGotConnection);
-    assert.ok(clientGotOpen);
-    assert.ok(clientGotData);
-    assert.ok(clientGotMessage);
-    assert.ok(serverGotMessage);
-    assert.ok(serverGotClose);
-    assert.ok(clientGotClose);
-});
diff --git a/node/node_modules/socket.io/support/node-websocket-client/test/test-client-close.js b/node/node_modules/socket.io/support/node-websocket-client/test/test-client-close.js
deleted file mode 100644 (file)
index 76fb81f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-// Verify that a connection can be closed gracefully from the client.
-
-var assert = require('assert');
-var WebSocket = require('../lib/websocket').WebSocket;
-var WebSocketServer = require('websocket-server/ws/server').Server;
-
-var PORT = 1024 + Math.floor(Math.random() * 4096);
-var C_MSG = 'Client test: ' + (Math.random() * 100);
-
-var serverGotClientMessage = false;
-var clientGotServerClose = false;
-var serverGotClientClose = false;
-
-var wss = new WebSocketServer();
-wss.listen(PORT, 'localhost');
-wss.on('connection', function(c) {
-    c.on('message', function(m) {
-        assert.equal(m, C_MSG);
-        serverGotClientMessage = true;
-    });
-    c.on('close', function() {
-        serverGotClientClose = true;
-        wss.close();
-    });
-});
-
-var ws = new WebSocket('ws://localhost:' + PORT);
-ws.onopen = function() {
-    ws.send(C_MSG);
-
-    // XXX: Add a timeout here 
-    ws.close(5);
-};
-ws.onclose = function() {
-    assert.equal(ws.CLOSED, ws.readyState);
-    clientGotServerClose = true;
-};
-
-process.on('exit', function() {
-    assert.ok(serverGotClientMessage);
-    assert.ok(clientGotServerClose);
-    assert.ok(serverGotClientClose);
-});
diff --git a/node/node_modules/socket.io/support/node-websocket-client/test/test-readonly-attrs.js b/node/node_modules/socket.io/support/node-websocket-client/test/test-readonly-attrs.js
deleted file mode 100644 (file)
index de896b3..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-// Verify that some attributes of a WebSocket object are read-only.
-
-var assert = require('assert');
-var sys = require('sys');
-var WebSocket = require('../lib/websocket').WebSocket;
-var WebSocketServer = require('websocket-server/ws/server').Server;
-
-var PORT = 1024 + Math.floor(Math.random() * 4096);
-
-var wss = new WebSocketServer();
-wss.listen(PORT, 'localhost');
-wss.on('connection', function(c) {
-    c.close();
-    wss.close();
-});
-var ws = new WebSocket('ws://localhost:' + PORT + '/', 'biff');
-ws.on('open', function() {
-    assert.equal(ws.CONNECTING, 0);
-    try {
-        ws.CONNECTING = 13;
-        assert.equal(
-            ws.CONNECTING, 0,
-            'Should not have been able to set read-only CONNECTING attribute'
-        );
-    } catch (e) {
-        assert.equal(e.type, 'no_setter_in_callback');
-    }
-
-    assert.equal(ws.OPEN, 1);
-    assert.equal(ws.CLOSING, 2);
-    assert.equal(ws.CLOSED, 3);
-
-    assert.equal(ws.url, 'ws://localhost:' + PORT + '/');
-    try {
-        ws.url = 'foobar';
-        assert.equal(
-            ws.url, 'ws://localhost:' + PORT + '/',
-            'Should not have been able to set read-only url attribute'
-        );
-    } catch (e) {
-        assert.equal(e.type, 'no_setter_in_callback');
-    }
-});
diff --git a/node/node_modules/socket.io/support/node-websocket-client/test/test-ready-state.js b/node/node_modules/socket.io/support/node-websocket-client/test/test-ready-state.js
deleted file mode 100644 (file)
index 8fcbd4c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-// Verify that readyState transitions are implemented correctly
-
-var assert = require('assert');
-var WebSocket = require('../lib/websocket').WebSocket;
-var WebSocketServer = require('websocket-server/ws/server').Server;
-
-var PORT = 1024 + Math.floor(Math.random() * 4096);
-
-var wss = new WebSocketServer();
-wss.listen(PORT, 'localhost');
-wss.on('connection', function(c) {
-    c.close();
-});
-
-var ws = new WebSocket('ws://localhost:' + PORT);
-assert.equal(ws.readyState, ws.CONNECTING);
-ws.onopen = function() {
-    assert.equal(ws.readyState, ws.OPEN);
-
-    ws.close();
-    assert.ok(ws.readyState == ws.CLOSING);
-};
-ws.onclose = function() {
-    assert.equal(ws.readyState, ws.CLOSED);
-    wss.close();
-};
diff --git a/node/node_modules/socket.io/support/node-websocket-client/test/test-server-close.js b/node/node_modules/socket.io/support/node-websocket-client/test/test-server-close.js
deleted file mode 100644 (file)
index a286429..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-// Verify that a connection can be closed gracefully from the server.
-
-var assert = require('assert');
-var WebSocket = require('../lib/websocket').WebSocket;
-var WebSocketServer = require('websocket-server/ws/server').Server;
-
-var PORT = 1024 + Math.floor(Math.random() * 4096);
-var S_MSG = 'Server test: ' + (Math.random() * 100);
-
-var clientGotServerMessage = false;
-var clientGotServerClose = false;
-var serverGotClientClose = false;
-
-var wss = new WebSocketServer();
-wss.listen(PORT, 'localhost');
-wss.on('connection', function(c) {
-    c.on('close', function() {
-        serverGotClientClose = true;
-        wss.close();
-    });
-
-    c.write(S_MSG);
-    c.close();
-});
-
-var ws = new WebSocket('ws://localhost:' + PORT);
-ws.onmessage = function(m) {
-    assert.deepEqual(m, {data: S_MSG});
-
-    clientGotServerMessage = true;
-};
-ws.onclose = function() {
-    assert.equal(ws.CLOSED, ws.readyState);
-    clientGotServerClose = true;
-};
-
-process.on('exit', function() {
-    assert.ok(clientGotServerMessage);
-    assert.ok(clientGotServerClose);
-    assert.ok(serverGotClientClose);
-});
diff --git a/node/node_modules/socket.io/support/node-websocket-client/test/test-unix-send-fd.js b/node/node_modules/socket.io/support/node-websocket-client/test/test-unix-send-fd.js
deleted file mode 100644 (file)
index 8f1c28d..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// Verify that both sides of the WS connection can both send and receive file
-// descriptors.
-
-var assert = require('assert');
-var fs = require('fs');
-var path = require('path');
-var sys = require('sys');
-var WebSocket = require('../lib/websocket').WebSocket;
-var WebSocketServer = require('websocket-server/ws/server').Server;
-
-var PATH = path.join(__dirname, 'sock.' + process.pid);
-var C_MSG = 'Client test: ' + (Math.random() * 100);
-var S_MSG = 'Server test: ' + (Math.random() * 100);
-
-var clientReceivedData = false;
-var clientReceivedFD = false;
-var serverReceivedData = false;
-var serverReceivedFD = false;
-
-var wss = new WebSocketServer();
-wss.on('listening', function() {
-    var ws = new WebSocket('ws+unix://' + PATH);
-    ws.on('data', function(d) {
-        assert.equal(d.toString('utf8'), S_MSG);
-
-        clientReceivedData = true;
-
-        ws.send(C_MSG, 1);
-        ws.close();
-    });
-    ws.on('fd', function(fd) {
-        assert.ok(fd >= 0);
-
-        clientReceivedFD = true;
-    });
-});
-wss.on('connection', function(c) {
-    c.write(S_MSG, 0);
-    c._req.socket.on('fd', function(fd) {
-        assert.ok(fd >= 0);
-
-        serverReceivedFD = true;
-    });
-    c.on('message', function(d) {
-        assert.equal(d, C_MSG);
-
-        serverReceivedData = true;
-
-        wss.close();
-    });
-});
-wss.listen(PATH);
-
-process.on('exit', function() {
-    assert.ok(clientReceivedFD);
-    assert.ok(clientReceivedData);
-    assert.ok(serverReceivedFD);
-    assert.ok(serverReceivedData);
-
-    try {
-        fs.unlinkSync(PATH);
-    } catch (e) { }
-});
diff --git a/node/node_modules/socket.io/support/node-websocket-client/test/test-unix-sockets.js b/node/node_modules/socket.io/support/node-websocket-client/test/test-unix-sockets.js
deleted file mode 100644 (file)
index 5cbf094..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-// Verify that we can connect to a server over UNIX domain sockets.
-
-var assert = require('assert');
-var fs = require('fs');
-var path = require('path');
-var sys = require('sys');
-var WebSocket = require('../lib/websocket').WebSocket;
-var WebSocketServer = require('websocket-server/ws/server').Server;
-
-var PATH = path.join(__dirname, 'sock.' + process.pid);
-var S_MSG = 'Server test: ' + (Math.random() * 100);
-
-var serverGotConnection = false;
-var clientGotOpen = false;
-var clientGotData = false;
-
-var wss = new WebSocketServer();
-wss.on('listening', function() {
-    var ws = new WebSocket('ws+unix://' + PATH);
-    ws.on('open', function() {
-        clientGotOpen = true;
-
-        ws.close();
-    });
-    ws.on('data', function(d) {
-        assert.equal(d.toString('utf8'), S_MSG);
-        clientGotData = true;
-    });
-});
-wss.on('connection', function(c) {
-    serverGotConnection = true;
-
-    c.write(S_MSG);
-    wss.close();
-});
-wss.listen(PATH);
-
-process.on('exit', function() {
-    assert.ok(serverGotConnection);
-    assert.ok(clientGotOpen);
-    assert.ok(clientGotData);
-
-    try {
-        fs.unlinkSync(PATH);
-    } catch(e) { }
-});
diff --git a/node/node_modules/socket.io/test/common.js b/node/node_modules/socket.io/test/common.js
deleted file mode 100644 (file)
index e658f72..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var io = require('socket.io')
-  , parser = io.parser
-  , http = require('http')
-  , https = require('https')
-  , WebSocket = require('../support/node-websocket-client/lib/websocket').WebSocket;
-
-/**
- * Exports.
- */
-
-var should = module.exports = require('should');
-
-should.HTTPClient = HTTPClient;
-
-/**
- * Client utility.
- *
- * @api publiC
- */
-
-function HTTPClient (port) {
-  this.port = port;
-  this.agent = new http.Agent({
-      host: 'localhost'
-    , port: port
-  });
-};
-
-/**
- * Issue a request
- *
- * @api private
- */
-
-HTTPClient.prototype.request = function (path, opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  opts = opts || {};
-  opts.agent = this.agent;
-  opts.host = 'localhost';
-  opts.port = this.port;
-  opts.path = path.replace(/{protocol}/g, io.protocol);
-
-  opts.headers = opts.headers || {};
-  opts.headers.Host = 'localhost';
-  opts.headers.Connection = 'keep-alive';
-
-  var req = http.request(opts, function (res) {
-    if (false === opts.buffer)
-      return fn && fn(res);
-
-    var buf = '';
-
-    res.on('data', function (chunk) {
-      buf += chunk;
-    });
-
-    res.on('end', function () {
-      fn && fn(res, opts.parse ? opts.parse(buf) : buf);
-    });
-  });
-
-  req.on('error', function (err) { });
-
-  if (undefined !== opts.data)
-    req.write(opts.data);
-
-  req.end();
-
-  return req;
-};
-
-/**
- * Terminates the client and associated connections.
- *
- * @api public
- */
-
-HTTPClient.prototype.end = function () {
-  this.agent.sockets.forEach(function (socket) {
-    socket.end();
-  });
-};
-
-/**
- * Issue a GET request
- *
- * @api public
- */
-
-HTTPClient.prototype.get = function (path, opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  opts = opts || {};
-  opts.method = 'GET';
-
-  // override the parser for transport requests
-  if (/\/(xhr-polling|htmlfile|jsonp-polling)\//.test(path)) {
-    // parser that might be necessary for transport-specific framing
-    var transportParse = opts.parse;
-    opts.parse = function (data) {
-      if (data === '') return data;
-
-      data = transportParse ? transportParse(data) : data;
-      return parser.decodePayload(data);
-    };
-  } else {
-    opts.parse = undefined;
-  }
-
-  return this.request(path, opts, fn);
-};
-
-/**
- * Issue a POST request
- *
- * @api private
- */
-
-HTTPClient.prototype.post = function (path, data, opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  opts = opts || {};
-  opts.method = 'POST';
-  opts.data = data;
-
-  return this.request(path, opts, fn);
-};
-
-/**
- * Performs a handshake (GET) request
- *
- * @api private
- */
-
-HTTPClient.prototype.handshake = function (opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  return this.get('/socket.io/{protocol}', opts, function (res, data) {
-    fn && fn.apply(null, data.split(':'));
-  });
-};
-
-/**
- * Generates a new client for the given port.
- *
- * @api private
- */
-
-client = function (port) {
-  return new HTTPClient(port);
-};
-
-/**
- * Create a socket.io server.
- */
-
-create = function (cl) {
-  console.log('');
-  var manager = io.listen(cl.port);
-  manager.set('client store expiration', 0);
-  return manager;
-};
-
-/**
- * WebSocket socket.io client.
- *
- * @api private
- */
-
-function WSClient (port, sid) {
-  this.sid = sid;
-  this.port = port;
-
-  WebSocket.call(
-      this
-    , 'ws://localhost:' + port + '/socket.io/' 
-        + io.protocol + '/websocket/' + sid
-  );
-};
-
-/**
- * Inherits from WebSocket.
- */
-
-WSClient.prototype.__proto__ = WebSocket.prototype;
-
-/**
- * Overrides message event emission.
- *
- * @api private
- */
-
-WSClient.prototype.emit = function (name) {
-  var args = arguments;
-
-  if (name == 'message' || name == 'data') {
-    args[1] = parser.decodePacket(args[1].toString());
-  }
-
-  return WebSocket.prototype.emit.apply(this, arguments);
-};
-
-/**
- * Writes a packet
- */
-
-WSClient.prototype.packet = function (pack) {
-  this.write(parser.encodePacket(pack));
-  return this;
-};
-
-/**
- * Creates a websocket client.
- *
- * @api public
- */
-
-websocket = function (cl, sid) {
-  return new WSClient(cl.port, sid);
-};
diff --git a/node/node_modules/socket.io/test/fixtures/cert.crt b/node/node_modules/socket.io/test/fixtures/cert.crt
deleted file mode 100644 (file)
index 5883cd4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDXTCCAkWgAwIBAgIJAMUSOvlaeyQHMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
-aWRnaXRzIFB0eSBMdGQwHhcNMTAxMTE2MDkzMjQ5WhcNMTMxMTE1MDkzMjQ5WjBF
-MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
-ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAz+LXZOjcQCJq3+ZKUFabj71oo/ex/XsBcFqtBThjjTw9CVEVwfPQQp4X
-wtPiB204vnYXwQ1/R2NdTQqCZu47l79LssL/u2a5Y9+0NEU3nQA5qdt+1FAE0c5o
-exPimXOrR3GWfKz7PmZ2O0117IeCUUXPG5U8umhDe/4mDF4ZNJiKc404WthquTqg
-S7rLQZHhZ6D0EnGnOkzlmxJMYPNHSOY1/6ivdNUUcC87awNEA3lgfhy25IyBK3QJ
-c+aYKNTbt70Lery3bu2wWLFGtmNiGlQTS4JsxImRsECTI727ObS7/FWAQsqW+COL
-0Sa5BuMFrFIpjPrEe0ih7vRRbdmXRwIDAQABo1AwTjAdBgNVHQ4EFgQUDnV4d6mD
-tOnluLoCjkUHTX/n4agwHwYDVR0jBBgwFoAUDnV4d6mDtOnluLoCjkUHTX/n4agw
-DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAFwV4MQfTo+qMv9JMiyno
-IEiqfOz4RgtmBqRnXUffcjS2dhc7/z+FPZnM79Kej8eLHoVfxCyWRHFlzm93vEdv
-wxOCrD13EDOi08OOZfxWyIlCa6Bg8cMAKqQzd2OvQOWqlRWBTThBJIhWflU33izX
-Qn5GdmYqhfpc+9ZHHGhvXNydtRQkdxVK2dZNzLBvBlLlRmtoClU7xm3A+/5dddeP
-AQHEPtyFlUw49VYtZ3ru6KqPms7MKvcRhYLsy9rwSfuuniMlx4d0bDR7TOkw0QQS
-A0N8MGQRQpzl4mw4jLzyM5d5QtuGBh2P6hPGa0YQxtI3RPT/p6ENzzBiAKXiSfzo
-xw==
------END CERTIFICATE-----
diff --git a/node/node_modules/socket.io/test/fixtures/key.key b/node/node_modules/socket.io/test/fixtures/key.key
deleted file mode 100644 (file)
index f31ff3d..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAz+LXZOjcQCJq3+ZKUFabj71oo/ex/XsBcFqtBThjjTw9CVEV
-wfPQQp4XwtPiB204vnYXwQ1/R2NdTQqCZu47l79LssL/u2a5Y9+0NEU3nQA5qdt+
-1FAE0c5oexPimXOrR3GWfKz7PmZ2O0117IeCUUXPG5U8umhDe/4mDF4ZNJiKc404
-WthquTqgS7rLQZHhZ6D0EnGnOkzlmxJMYPNHSOY1/6ivdNUUcC87awNEA3lgfhy2
-5IyBK3QJc+aYKNTbt70Lery3bu2wWLFGtmNiGlQTS4JsxImRsECTI727ObS7/FWA
-QsqW+COL0Sa5BuMFrFIpjPrEe0ih7vRRbdmXRwIDAQABAoIBAGe4+9VqZfJN+dsq
-8Osyuz01uQ8OmC0sAWTIqUlQgENIyf9rCJsUBlYmwR5BT6Z69XP6QhHdpSK+TiAR
-XUz0EqG9HYzcxHIBaACP7j6iRoQ8R4kbbiWKo0z3WqQGIOqFjvD/mKEuQdE5mEYw
-eOUCG6BnX1WY2Yr8WKd2AA/tp0/Y4d8z04u9eodMpSTbHTzYMJb5SbBN1vo6FY7q
-8zSuO0BMzXlAxUsCwHsk1GQHFr8Oh3zIR7bQGtMBouI+6Lhh7sjFYsfxJboqMTBV
-IKaA216M6ggHG7MU1/jeKcMGDmEfqQLQoyWp29rMK6TklUgipME2L3UD7vTyAVzz
-xbVOpZkCgYEA8CXW4sZBBrSSrLR5SB+Ubu9qNTggLowOsC/kVKB2WJ4+xooc5HQo
-mFhq1v/WxPQoWIxdYsfg2odlL+JclK5Qcy6vXmRSdAQ5lK9gBDKxZSYc3NwAw2HA
-zyHCTK+I0n8PBYQ+yGcrxu0WqTGnlLW+Otk4CejO34WlgHwbH9bbY5UCgYEA3ZvT
-C4+OoMHXlmICSt29zUrYiL33IWsR3/MaONxTEDuvgkOSXXQOl/8Ebd6Nu+3WbsSN
-bjiPC/JyL1YCVmijdvFpl4gjtgvfJifs4G+QHvO6YfsYoVANk4u6g6rUuBIOwNK4
-RwYxwDc0oysp+g7tPxoSgDHReEVKJNzGBe9NGGsCgYEA4O4QP4gCEA3B9BF2J5+s
-n9uPVxmiyvZUK6Iv8zP4pThTBBMIzNIf09G9AHPQ7djikU2nioY8jXKTzC3xGTHM
-GJZ5m6fLsu7iH+nDvSreDSeNkTBfZqGAvoGYQ8uGE+L+ZuRfCcXYsxIOT5s6o4c3
-Dle2rVFpsuKzCY00urW796ECgYBn3go75+xEwrYGQSer6WR1nTgCV29GVYXKPooy
-zmmMOT1Yw80NSkEw0pFD4cTyqVYREsTrPU0mn1sPfrOXxnGfZSVFpcR/Je9QVfQ7
-eW7GYxwfom335aqHVj10SxRqteP+UoWWnHujCPz94VRKZMakBddYCIGSan+G6YdS
-7sdmwwKBgBc2qj0wvGXDF2kCLwSGfWoMf8CS1+5fIiUIdT1e/+7MfDdbmLMIFVjF
-QKS3zVViXCbrG5SY6wS9hxoc57f6E2A8vcaX6zy2xkZlGHQCpWRtEM5R01OWJQaH
-HsHMmQZGUQVoDm1oRkDhrTFK4K3ukc3rAxzeTZ96utOQN8/KJsTv
------END RSA PRIVATE KEY-----
diff --git a/node/node_modules/socket.io/test/io.test.js b/node/node_modules/socket.io/test/io.test.js
deleted file mode 100644 (file)
index adc316e..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , fs = require('fs')
-  , http = require('http')
-  , https = require('https')
-  , should = require('./common')
-  , ports = 15000;
-
-/**
- * Test.
- */
-
-module.exports = {
-
-  'test that protocol version is present': function (done) {
-    sio.protocol.should.be.a('number');
-    done();
-  },
-
-  'test that default transports are present': function (done) {
-    sio.Manager.defaultTransports.should.be.an.instanceof(Array);
-    done();
-  },
-
-  'test that version is present': function (done) {
-    sio.version.should.match(/([0-9]+)\.([0-9]+)\.([0-9]+)/);
-    done();
-  },
-
-  'test listening with a port': function (done) {
-    var cl = client(++ports)
-      , io = create(cl);
-
-    io.server.should.be.an.instanceof(http.Server);
-
-    cl.get('/', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.eql('Welcome to socket.io.');
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test listening with a server': function (done) {
-    var server = http.createServer()
-      , io = sio.listen(server)
-      , port = ++ports
-      , cl = client(port);
-
-    server.listen(port);
-
-    cl.get('/socket.io', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.eql('Welcome to socket.io.');
-
-      cl.end();
-      server.close();
-      done();
-    });
-  },
-
-  'test listening with a https server': function (done) {
-    var server = https.createServer({
-            key: fs.readFileSync(__dirname + '/fixtures/key.key')
-          , cert: fs.readFileSync(__dirname + '/fixtures/cert.crt')
-        }, function () { })
-      , io = sio.listen(server)
-      , port = ++ports;
-
-    server.listen(port);
-
-    var req = require('https').get({
-        host: 'localhost'
-      , port: port
-      , path: '/socket.io'
-    }, function (res) {
-      res.statusCode.should.eql(200);
-
-      var buf = '';
-
-      res.on('data', function (data) {
-        buf += data;
-      });
-
-      res.on('end', function () {
-        buf.should.eql('Welcome to socket.io.');
-
-        res.socket.end();
-        server.close();
-        done();
-      });
-    });
-  },
-
-  'test listening with no arguments listens on 80': function (done) {
-    try {
-      var io = sio.listen()
-        , cl = client(80);
-
-      cl.get('/socket.io', function (res) {
-        res.statusCode.should.eql(200);
-
-        cl.end();
-        io.server.close();
-        done();
-      });
-    } catch (e) {
-      e.should.match(/EACCES/);
-      done();
-    }
-  }
-
-};
diff --git a/node/node_modules/socket.io/test/leaks/socket.leaktest.js b/node/node_modules/socket.io/test/leaks/socket.leaktest.js
deleted file mode 100644 (file)
index 8613b3c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-require.paths.unshift(__dirname + '/../../lib');
-
-var assertvanish = require('assertvanish')
-  , common = require('../common')
-  , ports = 15800;
-
-function resultCallback (leaks, leakedSocket) {
-  if (leaks) {
-    console.error('Leak detected');
-    process.exit(1);
-  } else {
-    console.error('No leaks');
-    process.exit(0);
-  }
-};
-
-/**
- * Test.
- */
-
-var cl = client(++ports);
-var io = create(cl);
-
-io.sockets.on('connection', function (socket) {
-  console.log('connected');
-  
-  socket.on('disconnect', function() {
-    console.log("client gone");
-    setTimeout(gc, 1000);
-    assertvanish(socket, 2000, {silent: true, callback: resultCallback});
-  });
-});
-
-setTimeout(function() {
-  cl.handshake(function (sid) {
-    var ws = websocket(cl, sid);
-    ws.on('open', function () {
-      console.log('open!');
-      setTimeout(function() {
-        ws.close();
-      }, 500);
-    });
-  });
-}, 100);
diff --git a/node/node_modules/socket.io/test/manager.test.js b/node/node_modules/socket.io/test/manager.test.js
deleted file mode 100644 (file)
index 93922d3..0000000
+++ /dev/null
@@ -1,731 +0,0 @@
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , http = require('http')
-  , should = require('./common')
-  , ports = 15100;
-
-/**
- * Test.
- */
-
-module.exports = {
-
-  'test setting and getting a configuration flag': function (done) {
-    var port = ++ports
-      , io = sio.listen(http.createServer());
-
-    io.set('a', 'b');
-    io.get('a').should.eql('b');
-
-    var port = ++ports
-      , io = sio.listen(http.createServer());
-
-    io.configure(function () {
-      io.set('a', 'b');
-      io.enable('tobi');
-    });
-
-    io.get('a').should.eql('b');
-
-    done();
-  },
-
-  'test enabling and disabling a configuration flag': function (done) {
-    var port = ++ports
-      , io = sio.listen(http.createServer());
-
-    io.enable('flag');
-    io.enabled('flag').should.be.true;
-    io.disabled('flag').should.be.false;
-
-    io.disable('flag');
-    var port = ++ports
-      , io = sio.listen(http.createServer());
-
-    io.configure(function () {
-      io.enable('tobi');
-    });
-
-    io.enabled('tobi').should.be.true;
-
-    done();
-  },
-
-  'test configuration callbacks with envs': function (done) {
-    var port = ++ports
-      , io = sio.listen(http.createServer());
-
-    process.env.NODE_ENV = 'development';
-
-    io.configure('production', function () {
-      io.set('ferret', 'tobi');
-    });
-
-    io.configure('development', function () {
-      io.set('ferret', 'jane');
-    });
-
-    io.get('ferret').should.eql('jane');
-    done();
-  },
-
-  'test configuration callbacks conserve scope': function (done) {
-    var port = ++ports
-      , io = sio.listen(http.createServer())
-      , calls = 0;
-
-    process.env.NODE_ENV = 'development';
-
-    io.configure(function () {
-      this.should.eql(io);
-      calls++;
-    });
-
-    io.configure('development', function () {
-      this.should.eql(io);
-      calls++;
-    });
-
-    calls.should.eql(2);
-    done();
-  },
-
-  'test configuration update notifications': function (done) {
-    var port = ++ports
-      , io = sio.listen(http.createServer())
-      , calls = 0;
-
-    io.on('set:foo', function () {
-      calls++;
-    });
-
-    io.set('foo', 'bar');
-    io.set('baz', 'bar');
-
-    calls.should.eql(1);
-
-    io.enable('foo');
-    io.disable('foo');
-
-    calls.should.eql(3);
-    done();
-  },
-
-  'test that normal requests are still served': function (done) {
-    var server = http.createServer(function (req, res) {
-      res.writeHead(200);
-      res.end('woot');
-    });
-
-    var io = sio.listen(server)
-      , port = ++ports
-      , cl = client(port);
-
-    server.listen(ports);
-
-    cl.get('/socket.io', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.eql('Welcome to socket.io.');
-
-      cl.get('/woot', function (res, data) {
-        res.statusCode.should.eql(200);
-        data.should.eql('woot');
-
-        cl.end();
-        server.close();
-        done();
-      });
-    });
-  },
-
-  'test that the client is served': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    cl.get('/socket.io/socket.io.js', function (res, data) {
-      res.headers['content-type'].should.eql('application/javascript');
-      res.headers['content-length'].should.match(/([0-9]+)/);
-      should.strictEqual(res.headers.etag, undefined);
-
-      data.should.match(/XMLHttpRequest/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that the client etag is served': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.enable('browser client etag');
-    });
-
-    cl.get('/socket.io/socket.io.js', function (res, data) {
-      res.headers['content-type'].should.eql('application/javascript');
-      res.headers['content-length'].should.match(/([0-9]+)/);
-      res.headers.etag.should.match(/([0-9]+)\.([0-9]+)\.([0-9]+)/);
-
-      data.should.match(/XMLHttpRequest/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that the cached client is served': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    cl.get('/socket.io/socket.io.js', function (res, data) {
-      res.headers['content-type'].should.eql('application/javascript');
-      res.headers['content-length'].should.match(/([0-9]+)/);
-      should.strictEqual(res.headers.etag, undefined);
-
-      data.should.match(/XMLHttpRequest/);
-      var static = sio.Manager.static;
-      static.cache['/socket.io.js'].content.should.match(/XMLHttpRequest/);
-
-      cl.get('/socket.io/socket.io.js', function (res, data) {
-        res.headers['content-type'].should.eql('application/javascript');
-        res.headers['content-length'].should.match(/([0-9]+)/);
-        should.strictEqual(res.headers.etag, undefined);
-
-        data.should.match(/XMLHttpRequest/);
-
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-  },
-
-  'test that the cached client etag is served': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.enable('browser client etag');
-    });
-
-    cl.get('/socket.io/socket.io.js', function (res, data) {
-      res.headers['content-type'].should.eql('application/javascript');
-      res.headers['content-length'].should.match(/([0-9]+)/);
-      res.headers.etag.should.match(/([0-9]+)\.([0-9]+)\.([0-9]+)/);
-
-      data.should.match(/XMLHttpRequest/);
-      var static = sio.Manager.static
-        , cache = static.cache['/socket.io.js'];
-
-      cache.content.toString().should.match(/XMLHttpRequest/);
-      Buffer.isBuffer(cache.content).should.be.true;
-
-      cl.get('/socket.io/socket.io.js', function (res, data) {
-        res.headers['content-type'].should.eql('application/javascript');
-        res.headers['content-length'].should.match(/([0-9]+)/);
-        res.headers.etag.should.match(/([0-9]+)\.([0-9]+)\.([0-9]+)/);
-
-        data.should.match(/XMLHttpRequest/);
-
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-  },
-
-  'test that the cached client sends a 304 header': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-     io.configure(function () {
-      io.enable('browser client etag');
-    });
-
-    cl.get('/socket.io/socket.io.js', function (res, data) {
-      cl.get('/socket.io/socket.io.js', {headers:{'if-none-match':res.headers.etag}}, function (res, data) {
-        res.statusCode.should.eql(304);
-
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-  },
-
-  'test that client minification works': function (done) {
-    // server 1
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    // server 2
-    var port = ++ports
-      , io2 = sio.listen(port)
-      , cl2 = client(port);
-
-    io.configure(function () {
-      io.enable('browser client minification');
-    });
-
-    cl.get('/socket.io/socket.io.js', function (res, data) {
-      var length = data.length;
-
-      cl.end();
-      io.server.close();
-
-      cl2.get('/socket.io/socket.io.js', function (res, data) {
-        res.headers['content-type'].should.eql('application/javascript');
-        res.headers['content-length'].should.match(/([0-9]+)/);
-        should.strictEqual(res.headers.etag, undefined);
-
-        data.should.match(/XMLHttpRequest/);
-        data.length.should.be.greaterThan(length);
-
-        cl2.end();
-        io2.server.close();
-        done();
-      });
-    });
-  },
-
-  'test that the WebSocketMain.swf is served': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    cl.get('/socket.io/static/flashsocket/WebSocketMain.swf', function (res, data) {
-      res.headers['content-type'].should.eql('application/x-shockwave-flash');
-      res.headers['content-length'].should.match(/([0-9]+)/);
-      should.strictEqual(res.headers.etag, undefined);
-
-      var static = sio.Manager.static
-        , cache = static.cache['/static/flashsocket/WebSocketMain.swf'];
-
-      Buffer.isBuffer(cache.content).should.be.true;
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that the WebSocketMainInsecure.swf is served': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    cl.get('/socket.io/static/flashsocket/WebSocketMainInsecure.swf', function (res, data) {
-      res.headers['content-type'].should.eql('application/x-shockwave-flash');
-      res.headers['content-length'].should.match(/([0-9]+)/);
-      should.strictEqual(res.headers.etag, undefined);
-
-      var static = sio.Manager.static
-        , cache = static.cache['/static/flashsocket/WebSocketMain.swf'];
-
-      Buffer.isBuffer(cache.content).should.be.true;
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that you can serve custom clients': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('browser client handler', function (req, res) {
-        res.writeHead(200, {
-            'Content-Type': 'application/javascript'
-          , 'Content-Length': 13
-          , 'ETag': '1.0'
-        });
-        res.end('custom_client');
-      });
-    });
-
-    cl.get('/socket.io/socket.io.js', function (res, data) {
-      res.headers['content-type'].should.eql('application/javascript');
-      res.headers['content-length'].should.eql(13);
-      res.headers.etag.should.eql('1.0');
-
-      data.should.eql('custom_client');
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that you can disable clients': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.disable('browser client');
-    });
-
-    cl.get('/socket.io/socket.io.js', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.eql('Welcome to socket.io.');
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test handshake': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    cl.get('/socket.io/{protocol}/', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.match(/([^:]+):([0-9]+)?:([0-9]+)?:(.+)/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test handshake with unsupported protocol version': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    cl.get('/socket.io/-1/', function (res, data) {
-      res.statusCode.should.eql(500);
-      data.should.match(/Protocol version not supported/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test authorization failure in handshake': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      function auth (data, fn) {
-        fn(null, false);
-      };
-
-      io.set('authorization', auth);
-    });
-
-    cl.get('/socket.io/{protocol}/', function (res, data) {
-      res.statusCode.should.eql(403);
-      data.should.match(/handshake unauthorized/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test a handshake error': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      function auth (data, fn) {
-        fn(new Error);
-      };
-
-      io.set('authorization', auth);
-    });
-
-    cl.get('/socket.io/{protocol}/', function (res, data) {
-      res.statusCode.should.eql(500);
-      data.should.match(/handshake error/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that a referer is accepted for *:* origin': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('origins', '*:*');
-    });
-
-    cl.get('/socket.io/{protocol}', { headers: { referer: 'http://foo.bar.com:82/something' } }, function (res, data) {
-      res.statusCode.should.eql(200);
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that valid referer is accepted for addr:* origin': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('origins', 'foo.bar.com:*');
-    });
-
-    cl.get('/socket.io/{protocol}', { headers: { referer: 'http://foo.bar.com/something' } }, function (res, data) {
-      res.statusCode.should.eql(200);
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that erroneous referer is denied for addr:* origin': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('origins', 'foo.bar.com:*');
-    });
-
-    cl.get('/socket.io/{protocol}', { headers: { referer: 'http://baz.bar.com/something' } }, function (res, data) {
-      res.statusCode.should.eql(403);
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that valid referer port is accepted for addr:port origin': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('origins', 'foo.bar.com:81');
-    });
-
-    cl.get('/socket.io/{protocol}', { headers: { referer: 'http://foo.bar.com:81/something' } }, function (res, data) {
-      res.statusCode.should.eql(200);
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test that erroneous referer port is denied for addr:port origin': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('origins', 'foo.bar.com:81');
-    });
-
-    cl.get('/socket.io/{protocol}', { headers: { referer: 'http://foo.bar.com/something' } }, function (res, data) {
-      res.statusCode.should.eql(403);
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test limiting the supported transports for a manager': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('transports', ['tobi', 'jane']);
-    });
-
-    cl.get('/socket.io/{protocol}/', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.match(/([^:]+):([0-9]+)?:([0-9]+)?:tobi,jane/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test setting a custom close timeout': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('close timeout', 66);
-    });
-
-    cl.get('/socket.io/{protocol}/', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.match(/([^:]+):([0-9]+)?:66?:(.*)/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test setting a custom heartbeat timeout': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('heartbeat timeout', 33);
-    });
-
-    cl.get('/socket.io/{protocol}/', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.match(/([^:]+):33:([0-9]+)?:(.*)/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test disabling timeouts': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port);
-
-    io.configure(function () {
-      io.set('heartbeat timeout', null);
-      io.set('close timeout', '');
-    });
-
-    cl.get('/socket.io/{protocol}/', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.match(/([^:]+)::?:(.*)/);
-
-      cl.end();
-      io.server.close();
-      done();
-    });
-  },
-
-  'test disabling heartbeats': function (done) {
-    var port = ++ports
-      , io = sio.listen(port)
-      , cl = client(port)
-      , messages = 0
-      , beat = false
-      , ws;
-
-    io.configure(function () {
-      io.disable('heartbeats');
-      io.set('heartbeat interval', .05);
-      io.set('heartbeat timeout', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      setTimeout(function () {
-        socket.disconnect();
-      }, io.get('heartbeat timeout') * 1000 + 100);
-
-      socket.on('disconnect', function (reason) {
-        beat.should.be.false;
-
-        cl.end();
-        ws.finishClose();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.get('/socket.io/{protocol}/', function (res, data) {
-      res.statusCode.should.eql(200);
-      data.should.match(/([^:]+)::[\.0-9]+:(.*)/);
-
-      cl.handshake(function (sid) {
-        ws = websocket(cl, sid);
-        ws.on('message', function (packet) {
-          if (++messages == 1) {
-            packet.type.should.eql('connect');
-          } else if (packet.type == 'heartbeat'){
-            beat = true;
-          }
-        });
-      });
-    });
-  },
-
-  'no duplicate room members': function (done) {
-    var port = ++ports
-      , io = sio.listen(port);
-
-    Object.keys(io.rooms).length.should.equal(0);
-
-    io.onJoin(123, 'foo');
-    io.rooms.foo.length.should.equal(1);
-
-    io.onJoin(123, 'foo');
-    io.rooms.foo.length.should.equal(1);
-
-    io.onJoin(124, 'foo');
-    io.rooms.foo.length.should.equal(2);
-
-    io.onJoin(124, 'foo');
-    io.rooms.foo.length.should.equal(2);
-
-    io.onJoin(123, 'bar');
-    io.rooms.foo.length.should.equal(2);
-    io.rooms.bar.length.should.equal(1);
-
-    io.onJoin(123, 'bar');
-    io.rooms.foo.length.should.equal(2);
-    io.rooms.bar.length.should.equal(1);
-
-    io.onJoin(124, 'bar');
-    io.rooms.foo.length.should.equal(2);
-    io.rooms.bar.length.should.equal(2);
-
-    io.onJoin(124, 'bar');
-    io.rooms.foo.length.should.equal(2);
-    io.rooms.bar.length.should.equal(2);
-
-    io.server.close();
-    done();
-  },
-
-  'test passing options directly to the Manager through listen': function (done) {
-    var port = ++ports
-      , io = sio.listen(port, { resource: '/my resource', custom: 'opt' });
-
-    io.get('resource').should.equal('/my resource');
-    io.get('custom').should.equal('opt');
-    io.server.close();
-    done();
-  }
-};
diff --git a/node/node_modules/socket.io/test/namespace.test.js b/node/node_modules/socket.io/test/namespace.test.js
deleted file mode 100644 (file)
index 5acb9d4..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , should = require('./common')
-  , ports = 15700;
-
-/**
- * Test.
- */
-
-module.exports = {
-  'namespace pass no authentication': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , ws;
-
-    io.of('/a')
-      .on('connection', function (socket) {
-        cl.end();
-        ws.finishClose();
-        io.server.close()
-        done();
-      });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('open', function () {
-        ws.packet({
-            type: 'connect'
-          , endpoint: '/a'
-        });
-      })
-    });
-  },
-
-  'namespace pass authentication': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , ws;
-
-    io.of('/a')
-      .authorization(function (data, fn) {
-        fn(null, true);
-      })
-      .on('connection', function (socket) {
-        cl.end();
-        ws.finishClose();
-        io.server.close()
-        done();
-      });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('open', function () {
-        ws.packet({
-            type: 'connect'
-          , endpoint: '/a'
-        });
-      })
-    });
-  },
-
-  'namespace authentication handshake data': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , ws;
-
-    io.of('/a')
-      .authorization(function (data, fn) {
-        data.foo = 'bar';
-        fn(null, true);
-      })
-      .on('connection', function (socket) {
-        (!!socket.handshake.address.address).should.be.true;
-        (!!socket.handshake.address.port).should.be.true;
-        socket.handshake.headers.host.should.equal('localhost');
-        socket.handshake.headers.connection.should.equal('keep-alive');
-        socket.handshake.time.should.match(/GMT/);
-        socket.handshake.foo.should.equal('bar');
-
-        cl.end();
-        ws.finishClose();
-        io.server.close()
-        done();
-      });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('open', function () {
-        ws.packet({
-            type: 'connect'
-          , endpoint: '/a'
-        });
-      })
-    });
-  },
-
-  'namespace fail authentication': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , calls = 0
-      , ws;
-
-    io.of('/a')
-      .authorization(function (data, fn) {
-        fn(null, false);
-      })
-      .on('connection', function (socket) {
-        throw new Error('Should not be called');
-      });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('open', function () {
-        ws.packet({
-            type: 'connect'
-          , endpoint: '/a'
-        });
-      });
-
-      ws.on('message', function (data) {
-        if (data.endpoint == '/a') {
-          data.type.should.eql('error');
-          data.reason.should.eql('unauthorized')
-          
-          cl.end();
-          ws.finishClose();
-          io.server.close()
-          done();
-        }
-      })
-    });
-  },
-
-  'broadcasting sends and emits on a namespace': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , calls = 0
-      , connect = 0
-      , message = 0
-      , events = 0
-      , expected = 5
-      , ws1
-      , ws2;
-
-    io.of('a')
-      .on('connection', function (socket){
-        socket.broadcast.emit('b', 'test');
-        socket.broadcast.json.emit('json', {foo:'bar'});
-        socket.broadcast.send('foo');
-      });
-
-    function finish () {
-      connect.should.equal(2);
-      message.should.equal(1);
-      events.should.equal(2);
-
-      cl.end();
-      ws1.finishClose();
-      ws2.finishClose();
-      io.server.close();
-      done();
-    }
-
-    cl.handshake(function (sid) {
-     ws1 = websocket(cl, sid);
-
-      ws1.on('open', function() {
-        ws1.packet({
-            type: 'connect'
-          , endpoint: 'a'
-        });
-      });
-
-      ws1.on('message', function (data) {
-        if (data.type === 'connect') {
-          ++connect;
-          if (++calls === expected) finish();
-        }
-
-        if (data.type === 'message') {
-          ++message;
-          if (++calls === expected) finish();
-        }
-
-        if (data.type === 'event') {
-          if (data.name === 'b' || data.name === 'json') ++events;
-          if (++calls === expected) finish();
-        }
-      });
-
-      cl.handshake(function (sid) {
-        ws2 = websocket(cl, sid);
-
-        ws2.on('open', function () {
-          ws2.packet({
-              type: 'connect'
-            , endpoint: 'a'
-          });
-        });
-      })
-    })
-  },
-
-  'joining rooms inside a namespace': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , calls = 0
-      , ws;
-
-    io.of('/foo').on('connection', function (socket) {
-      socket.join('foo.bar');
-      this.in('foo.bar').emit('baz', 'pewpew');
-    });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-
-      ws.on('open', function (){
-         ws.packet({
-            type: 'connect'
-          , endpoint: '/foo'
-        });
-      });
-
-      ws.on('message', function (data) {
-        if (data.type === 'event') {
-          data.name.should.equal('baz');
-
-          cl.end();
-          ws.finishClose();
-          io.server.close();
-          done();
-        }
-      });
-    })
-  }
-};
diff --git a/node/node_modules/socket.io/test/parser.test.js b/node/node_modules/socket.io/test/parser.test.js
deleted file mode 100644 (file)
index ee51033..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-
-/**
- * Test dependencies.
- */
-
-var parser = require('socket.io').parser
-  , decode = parser.decode
-  , should = require('./common');
-
-/**
- * Test.
- */
-
-module.exports = {
-
-  'decoding error packet': function () {
-    parser.decodePacket('7:::').should.eql({
-        type: 'error'
-      , reason: ''
-      , advice: ''
-      , endpoint: ''
-    });
-  },
-
-  'decoding error packet with reason': function () {
-    parser.decodePacket('7:::0').should.eql({
-        type: 'error'
-      , reason: 'transport not supported'
-      , advice: ''
-      , endpoint: ''
-    });
-  },
-
-  'decoding error packet with reason and advice': function () {
-    parser.decodePacket('7:::2+0').should.eql({
-        type: 'error'
-      , reason: 'unauthorized'
-      , advice: 'reconnect'
-      , endpoint: ''
-    });
-  },
-
-  'decoding error packet with endpoint': function () {
-    parser.decodePacket('7::/woot').should.eql({
-        type: 'error'
-      , reason: ''
-      , advice: ''
-      , endpoint: '/woot'
-    });
-  },
-
-  'decoding ack packet': function () {
-    parser.decodePacket('6:::140').should.eql({
-        type: 'ack'
-      , ackId: '140'
-      , endpoint: ''
-      , args: []
-    });
-  },
-
-  'decoding ack packet with args': function () {
-    parser.decodePacket('6:::12+["woot","wa"]').should.eql({
-        type: 'ack'
-      , ackId: '12'
-      , endpoint: ''
-      , args: ['woot', 'wa']
-    });
-  },
-
-  'decoding ack packet with bad json': function () {
-    var thrown = false;
-
-    try {
-      parser.decodePacket('6:::1+{"++]').should.eql({
-          type: 'ack'
-        , ackId: '1'
-        , endpoint: ''
-        , args: []
-      });
-    } catch (e) {
-      thrown = true;
-    }
-
-    thrown.should.be.false;
-  },
-
-  'decoding json packet': function () {
-    parser.decodePacket('4:::"2"').should.eql({
-        type: 'json'
-      , endpoint: ''
-      , data: '2'
-    });
-  },
-
-  'decoding json packet with message id and ack data': function () {
-    parser.decodePacket('4:1+::{"a":"b"}').should.eql({
-        type: 'json'
-      , id: 1
-      , ack: 'data'
-      , endpoint: ''
-      , data: { a: 'b' }
-    });
-  },
-
-  'decoding an event packet': function () {
-    parser.decodePacket('5:::{"name":"woot"}').should.eql({
-        type: 'event'
-      , name: 'woot'
-      , endpoint: ''
-      , args: []
-    });
-  },
-
-  'decoding an event packet with message id and ack': function () {
-    parser.decodePacket('5:1+::{"name":"tobi"}').should.eql({
-        type: 'event'
-      , id: 1
-      , ack: 'data'
-      , endpoint: ''
-      , name: 'tobi'
-      , args: []
-    });
-  },
-
-  'decoding an event packet with data': function () {
-    parser.decodePacket('5:::{"name":"edwald","args":[{"a": "b"},2,"3"]}')
-    .should.eql({
-        type: 'event'
-      , name: 'edwald'
-      , endpoint: ''
-      , args: [{a: 'b'}, 2, '3']
-    });
-  },
-
-  'decoding a message packet': function () {
-    parser.decodePacket('3:::woot').should.eql({
-        type: 'message'
-      , endpoint: ''
-      , data: 'woot'
-    });
-  },
-
-  'decoding a message packet with id and endpoint': function () {
-    parser.decodePacket('3:5:/tobi').should.eql({
-        type: 'message'
-      , id: 5
-      , ack: true
-      , endpoint: '/tobi'
-      , data: ''
-    });
-  },
-
-  'decoding a heartbeat packet': function () {
-    parser.decodePacket('2:::').should.eql({
-        type: 'heartbeat'
-      , endpoint: ''
-    });
-  },
-
-  'decoding a connection packet': function () {
-    parser.decodePacket('1::/tobi').should.eql({
-        type: 'connect'
-      , endpoint: '/tobi'
-      , qs: ''
-    });
-  },
-
-  'decoding a connection packet with query string': function () {
-    parser.decodePacket('1::/test:?test=1').should.eql({
-        type: 'connect'
-      , endpoint: '/test'
-      , qs: '?test=1'
-    });
-  },
-
-  'decoding a disconnection packet': function () {
-    parser.decodePacket('0::/woot').should.eql({
-        type: 'disconnect'
-      , endpoint: '/woot'
-    });
-  },
-
-  'encoding error packet': function () {
-    parser.encodePacket({
-        type: 'error'
-      , reason: ''
-      , advice: ''
-      , endpoint: ''
-    }).should.eql('7::');
-  },
-
-  'encoding error packet with reason': function () {
-    parser.encodePacket({
-        type: 'error'
-      , reason: 'transport not supported'
-      , advice: ''
-      , endpoint: ''
-    }).should.eql('7:::0');
-  },
-
-  'encoding error packet with reason and advice': function () {
-    parser.encodePacket({
-        type: 'error'
-      , reason: 'unauthorized'
-      , advice: 'reconnect'
-      , endpoint: ''
-    }).should.eql('7:::2+0');
-  },
-
-  'encoding error packet with endpoint': function () {
-    parser.encodePacket({
-        type: 'error'
-      , reason: ''
-      , advice: ''
-      , endpoint: '/woot'
-    }).should.eql('7::/woot');
-  },
-
-  'encoding ack packet': function () {
-    parser.encodePacket({
-        type: 'ack'
-      , ackId: '140'
-      , endpoint: ''
-      , args: []
-    }).should.eql('6:::140');
-  },
-
-  'encoding ack packet with args': function () {
-    parser.encodePacket({
-        type: 'ack'
-      , ackId: '12'
-      , endpoint: ''
-      , args: ['woot', 'wa']
-    }).should.eql('6:::12+["woot","wa"]');
-  },
-
-  'encoding json packet': function () {
-    parser.encodePacket({
-        type: 'json'
-      , endpoint: ''
-      , data: '2'
-    }).should.eql('4:::"2"');
-  },
-
-  'encoding json packet with message id and ack data': function () {
-    parser.encodePacket({
-        type: 'json'
-      , id: 1
-      , ack: 'data'
-      , endpoint: ''
-      , data: { a: 'b' }
-    }).should.eql('4:1+::{"a":"b"}');
-  },
-
-  'encoding an event packet': function () {
-    parser.encodePacket({
-        type: 'event'
-      , name: 'woot'
-      , endpoint: ''
-      , args: []
-    }).should.eql('5:::{"name":"woot"}');
-  },
-
-  'encoding an event packet with message id and ack': function () {
-    parser.encodePacket({
-        type: 'event'
-      , id: 1
-      , ack: 'data'
-      , endpoint: ''
-      , name: 'tobi'
-      , args: []
-    }).should.eql('5:1+::{"name":"tobi"}');
-  },
-
-  'encoding an event packet with data': function () {
-    parser.encodePacket({
-        type: 'event'
-      , name: 'edwald'
-      , endpoint: ''
-      , args: [{a: 'b'}, 2, '3']
-    }).should.eql('5:::{"name":"edwald","args":[{"a":"b"},2,"3"]}');
-  },
-
-  'encoding a message packet': function () {
-    parser.encodePacket({
-        type: 'message'
-      , endpoint: ''
-      , data: 'woot'
-    }).should.eql('3:::woot');
-  },
-
-  'encoding a message packet with id and endpoint': function () {
-    parser.encodePacket({
-        type: 'message'
-      , id: 5
-      , ack: true
-      , endpoint: '/tobi'
-      , data: ''
-    }).should.eql('3:5:/tobi');
-  },
-
-  'encoding a heartbeat packet': function () {
-    parser.encodePacket({
-        type: 'heartbeat'
-      , endpoint: ''
-    }).should.eql('2::');
-  },
-
-  'encoding a connection packet': function () {
-    parser.encodePacket({
-        type: 'connect'
-      , endpoint: '/tobi'
-      , qs: ''
-    }).should.eql('1::/tobi');
-  },
-
-  'encoding a connection packet with query string': function () {
-    parser.encodePacket({
-        type: 'connect'
-      , endpoint: '/test'
-      , qs: '?test=1'
-    }).should.eql('1::/test:?test=1');
-  },
-
-  'encoding a disconnection packet': function () {
-    parser.encodePacket({
-        type: 'disconnect'
-      , endpoint: '/woot'
-    }).should.eql('0::/woot');
-  },
-
-  'test decoding a payload': function () {
-    parser.decodePayload('\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d'
-      + '\ufffd3\ufffd0::').should.eql([
-        { type: 'message', data: '5', endpoint: '' }
-      , { type: 'message', data: '53d', endpoint: '' }
-      , { type: 'disconnect', endpoint: '' }
-    ]);
-  },
-
-  'test encoding a payload': function () {
-    parser.encodePayload([
-        parser.encodePacket({ type: 'message', data: '5', endpoint: '' })
-      , parser.encodePacket({ type: 'message', data: '53d', endpoint: '' })
-    ]).should.eql('\ufffd5\ufffd3:::5\ufffd7\ufffd3:::53d')
-  },
-
-  'test decoding newline': function () {
-    parser.decodePacket('3:::\n').should.eql({
-        type: 'message'
-      , endpoint: ''
-      , data: '\n'
-    });
-  }
-
-};
diff --git a/node/node_modules/socket.io/test/socket.js b/node/node_modules/socket.io/test/socket.js
deleted file mode 100644 (file)
index a700cb5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , should = require('./common');
-
-/**
- * Test.
- */
-
-module.exports = {
-
-};
diff --git a/node/node_modules/socket.io/test/stores.memory.test.js b/node/node_modules/socket.io/test/stores.memory.test.js
deleted file mode 100644 (file)
index ecf9c96..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-
-/**
- * Test dependencies
- *
- * @api private
- */
-
-var sio = require('socket.io')
-  , should = require('should')
-  , MemoryStore = sio.MemoryStore;
-
-/**
- * Test.
- */
-
-module.exports = {
-
-  'test storing data for a client': function (done) {
-    var store = new MemoryStore
-      , client = store.client('test');
-
-    client.id.should.equal('test');
-
-    client.set('a', 'b', function (err) {
-      should.strictEqual(err, null);
-
-      client.get('a', function (err, val) {
-        should.strictEqual(err, null);
-        val.should.eql('b');
-
-        client.has('a', function (err, has) {
-          should.strictEqual(err, null);
-          has.should.be.true;
-
-          client.has('b', function (err, has) {
-            should.strictEqual(err, null);
-            has.should.be.false;
-
-            client.del('a', function (err) {
-              should.strictEqual(err, null);
-
-              client.has('a', function (err, has) {
-                should.strictEqual(err, null);
-                has.should.be.false;
-
-                client.set('b', 'c', function (err) {
-                  should.strictEqual(err, null);
-                  
-                  client.set('c', 'd', function (err) {
-                    should.strictEqual(err, null);
-
-                    client.get('b', function (err, val) {
-                      should.strictEqual(err, null);
-                      val.should.equal('c');
-
-                      client.get('c', function (err, val) {
-                        should.strictEqual(err, null);
-                        val.should.equal('d');
-
-                        store.destroy();
-                        done();
-                      });
-                    });
-                  });
-                });
-              });
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test cleaning up clients data': function (done) {
-    var rand1 = Math.abs(Math.random() * Date.now() | 0)
-      , rand2 = Math.abs(Math.random() * Date.now() | 0);
-
-    var store = new MemoryStore()
-      , client1 = store.client(rand1)
-      , client2 = store.client(rand2);
-
-    client1.set('a', 'b', function (err) {
-      should.strictEqual(err, null);
-
-      client2.set('c', 'd', function (err) {
-        should.strictEqual(err, null);
-
-        client1.has('a', function (err, val) {
-          should.strictEqual(err, null);
-          val.should.be.true;
-
-          client2.has('c', function (err, val) {
-            should.strictEqual(err, null);
-            val.should.be.true;
-
-            store.destroy();
-
-            var newstore = new MemoryStore()
-              , newclient1 = newstore.client(rand1)
-              , newclient2 = newstore.client(rand2);
-
-            newclient1.has('a', function (err, val) {
-              should.strictEqual(err, null);
-              val.should.be.false;
-
-              newclient2.has('c', function (err, val) {
-                should.strictEqual(err, null);
-                val.should.be.false;
-
-                newstore.destroy();
-                done();
-              });
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test cleaning up a particular client': function (done) {
-    var rand1 = Math.abs(Math.random() * Date.now() | 0)
-      , rand2 = Math.abs(Math.random() * Date.now() | 0);
-
-    var store = new MemoryStore()
-      , client1 = store.client(rand1)
-      , client2 = store.client(rand2);
-
-    client1.set('a', 'b', function (err) {
-      should.strictEqual(err, null);
-
-      client2.set('c', 'd', function (err) {
-        should.strictEqual(err, null);
-
-        client1.has('a', function (err, val) {
-          should.strictEqual(err, null);
-          val.should.be.true;
-
-          client2.has('c', function (err, val) {
-            should.strictEqual(err, null);
-            val.should.be.true;
-
-            store.clients.should.have.property(rand1);
-            store.clients.should.have.property(rand2);
-            store.destroyClient(rand1);
-
-            store.clients.should.not.have.property(rand1);
-            store.clients.should.have.property(rand2);
-
-            client1.has('a', function (err, val) {
-              should.strictEqual(err, null);
-              val.should.equal(false);
-
-              store.destroy();
-              done();
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test destroy expiration': function (done) {
-    var store = new MemoryStore()
-      , id = Math.abs(Math.random() * Date.now() | 0)
-      , client = store.client(id);
-
-    client.set('a', 'b', function (err) {
-      should.strictEqual(err, null);
-      store.destroyClient(id, 1);
-
-      setTimeout(function () {
-        client.get('a', function (err, val) {
-          should.strictEqual(err, null);
-          val.should.equal('b');
-        });
-      }, 500);
-
-      setTimeout(function () {
-        client.get('a', function (err, val) {
-          should.strictEqual(err, null);
-          should.strictEqual(val, null);
-
-          store.destroy();
-          done();
-        });
-      }, 1900);
-    });
-  }
-
-};
diff --git a/node/node_modules/socket.io/test/stores.redis.test.js b/node/node_modules/socket.io/test/stores.redis.test.js
deleted file mode 100644 (file)
index 69848f3..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-
-/**
- * Test dependencies
- *
- * @api private
- */
-
-var sio = require('socket.io')
-  , redis = require('redis')
-  , should = require('should')
-  , RedisStore = sio.RedisStore;
-
-/**
- * Test.
- */
-
-module.exports = {
-
-  'test publishing doesnt get caught by the own store subscriber': function (done) {
-    var a = new RedisStore
-      , b = new RedisStore;
-
-    a.subscribe('woot', function (arg) {
-      arg.should.equal('bb');
-      a.destroy();
-      b.destroy();
-      done();
-    }, function () {
-      a.publish('woot', 'aa');
-      b.publish('woot', 'bb');
-    });
-  },
-
-  'test publishing to multiple subscribers': function (done) {
-    var a = new RedisStore
-      , b = new RedisStore
-      , c = new RedisStore
-      , subscriptions = 3
-      , messages = 2;
-
-    a.subscribe('tobi', function () {
-      throw new Error('Shouldnt publish to itself');
-    }, publish);
-
-    function subscription (arg1, arg2, arg3) {
-      arg1.should.equal(1);
-      arg2.should.equal(2);
-      arg3.should.equal(3);
-      --messages || finish();
-    }
-
-    b.subscribe('tobi', subscription, publish);
-    c.subscribe('tobi', subscription, publish);
-
-    function publish () {
-      --subscriptions || a.publish('tobi', 1, 2, 3);
-    }
-
-    function finish () {
-      a.destroy();
-      b.destroy();
-      c.destroy();
-      done();
-    }
-  },
-
-  'test storing data for a client': function (done) {
-    var store = new RedisStore
-      , rand = 'test-' + Date.now()
-      , client = store.client(rand);
-
-    client.id.should.equal(rand);
-
-    client.set('a', 'b', function (err) {
-      should.strictEqual(err, null);
-
-      client.get('a', function (err, val) {
-        should.strictEqual(err, null);
-        val.should.equal('b');
-
-        client.has('a', function (err, has) {
-          should.strictEqual(err, null);
-          has.should.be.true;
-
-          client.has('b', function (err, has) {
-            should.strictEqual(err, null);
-            has.should.be.false;
-
-            client.del('a', function (err) {
-              should.strictEqual(err, null);
-
-              client.has('a', function (err, has) {
-                should.strictEqual(err, null);
-                has.should.be.false;
-
-                client.set('b', 'c', function (err) {
-                  should.strictEqual(err, null);
-                  
-                  client.set('c', 'd', function (err) {
-                    should.strictEqual(err, null);
-
-                    client.get('b', function (err, val) {
-                      should.strictEqual(err, null);
-                      val.should.equal('c');
-
-                      client.get('c', function (err, val) {
-                        should.strictEqual(err, null);
-                        val.should.equal('d');
-
-                        store.destroy();
-                        done();
-                      });
-                    });
-                  });
-                });
-              });
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test cleaning up clients data': function (done) {
-    var rand1 = Math.abs(Math.random() * Date.now() | 0)
-      , rand2 = Math.abs(Math.random() * Date.now() | 0);
-
-    var store = new RedisStore()
-      , client1 = store.client(rand1)
-      , client2 = store.client(rand2);
-
-    client1.set('a', 'b', function (err) {
-      should.strictEqual(err, null);
-
-      client2.set('c', 'd', function (err) {
-        should.strictEqual(err, null);
-
-        client1.has('a', function (err, val) {
-          should.strictEqual(err, null);
-          val.should.be.true;
-
-          client2.has('c', function (err, val) {
-            should.strictEqual(err, null);
-            val.should.be.true;
-
-            store.destroy();
-
-            var newstore = new RedisStore()
-              , newclient1 = newstore.client(rand1)
-              , newclient2 = newstore.client(rand2);
-
-            newclient1.has('a', function (err, val) {
-              should.strictEqual(err, null);
-              val.should.be.false;
-
-              newclient2.has('c', function (err, val) {
-                should.strictEqual(err, null);
-                val.should.be.false;
-
-                newstore.destroy();
-                done();
-              });
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test cleaning up a particular client': function (done) {
-    var rand1 = Math.abs(Math.random() * Date.now() | 0)
-      , rand2 = Math.abs(Math.random() * Date.now() | 0);
-
-    var store = new RedisStore()
-      , client1 = store.client(rand1)
-      , client2 = store.client(rand2);
-
-    client1.set('a', 'b', function (err) {
-      should.strictEqual(err, null);
-
-      client2.set('c', 'd', function (err) {
-        should.strictEqual(err, null);
-
-        client1.has('a', function (err, val) {
-          should.strictEqual(err, null);
-          val.should.be.true;
-
-          client2.has('c', function (err, val) {
-            should.strictEqual(err, null);
-            val.should.be.true;
-
-            store.clients.should.have.property(rand1);
-            store.clients.should.have.property(rand2);
-            store.destroyClient(rand1);
-
-            store.clients.should.not.have.property(rand1);
-            store.clients.should.have.property(rand2);
-
-            client1.has('a', function (err, val) {
-              should.strictEqual(err, null);
-              val.should.equal(false);
-
-              store.destroy();
-              done();
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test destroy expiration': function (done) {
-    var store = new RedisStore()
-      , id = Math.abs(Math.random() * Date.now() | 0)
-      , client = store.client(id);
-
-    client.set('a', 'b', function (err) {
-      should.strictEqual(err, null);
-      store.destroyClient(id, 1);
-
-      setTimeout(function () {
-        client.get('a', function (err, val) {
-          should.strictEqual(err, null);
-          val.should.equal('b');
-        });
-      }, 500);
-
-      setTimeout(function () {
-        client.get('a', function (err, val) {
-          should.strictEqual(err, null);
-          should.strictEqual(val, null);
-
-          store.destroy();
-          done();
-        });
-      }, 2000);
-    });
-  }
-
-};
diff --git a/node/node_modules/socket.io/test/transports.flashsocket.test.js b/node/node_modules/socket.io/test/transports.flashsocket.test.js
deleted file mode 100644 (file)
index 7ba79d3..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , net = require('net')
-  , http = require('http')
-  , should = require('./common')
-  , WebSocket = require('../support/node-websocket-client/lib/websocket').WebSocket
-  , WSClient = require('./transports.websocket.test')
-  , parser = sio.parser
-  , ports = 15600;
-
-/**
- * FlashSocket client constructor.
- *
- * @api private
- */
-
-function FlashSocket (port, sid) {
-  this.sid = sid;
-  this.port = port;
-
-  WebSocket.call(
-      this
-    , 'ws://localhost:' + port + '/socket.io/' 
-        + sio.protocol + '/flashsocket/' + sid
-  );
-};
-
-/**
- * Inherits from WSClient.
- */
-
-FlashSocket.prototype.__proto__ = WebSocket.prototype;
-
-/**
- * Creates a TCP connection to a port.
- *
- * @api public
- */
-
-function netConnection (port, callback){
-  var nclient = net.createConnection(port);
-
-  nclient.on('data', function (data) {
-    callback.call(nclient, null, data);
-  });
-
-  nclient.on('error', function (e){
-    callback.call(nclient, e);
-  });
-
-  nclient.write('<policy-file-request/>\0');
-}
-
-/**
- * Tests.
- */
-
-module.exports = {
-
-  'flashsocket disabled by default': function (done) {
-    var io = sio.listen(http.createServer());
-    io.get('transports').should.not.contain('flashsocket');
-    done();
-  },
-
-  'flash policy port': function (done) {
-    var io = sio.listen(http.createServer())
-      , port = ++ports;
-
-    io.get('flash policy port').should.eql(10843);
-    io.set('flash policy port', port);
-    io.get('flash policy port').should.eql(port);
-
-    should.strictEqual(io.flashPolicyServer, undefined);
-
-    netConnection(port, function (err, data){
-      err.should.be.an.instanceof(Error);
-      err.code.should.eql('ECONNREFUSED');
-
-      this.destroy();
-      done();
-    })
-  },
-
-  'start flash policy': function (done) {
-    var io = sio.listen(http.createServer())
-      , port = ++ports;
-
-    io.set('flash policy port', port);
-    io.set('transports', ['flashsocket']);
-
-    io.flashPolicyServer.should.be.a('object');
-
-    netConnection(port, function (err, data){
-      should.strictEqual(err, null);
-
-      data.toString().should.include.string('<cross-domain-policy>');
-
-      this.destroy();
-      io.flashPolicyServer.close();
-      done();
-    })
-
-  },
-
-  'change running flash server port': function (done) {
-    var io = sio.listen(http.createServer())
-      , port = ++ports
-      , next = ++ports;
-
-    io.set('flash policy port', port);
-    io.set('transports', ['flashsocket']);
-    io.set('flash policy port', next);
-    io.flashPolicyServer.port.should.eql(next);
-
-    netConnection(port, function (err, data){
-      err.should.be.an.instanceof(Error);
-      err.code.should.eql('ECONNREFUSED');
-
-      this.destroy();
-
-      // should work
-      netConnection(next, function (err, data){
-        should.strictEqual(err, null);
-
-        data.toString().should.include.string('<cross-domain-policy>');
-
-        this.destroy();
-        io.flashPolicyServer.close();
-        done();
-      });
-    });
-  },
-
-  'different origins': function(done) {
-    var io = sio.listen(http.createServer())
-      , port = ++ports;
-
-    io.set('flash policy port', port);
-    io.set('transports', ['flashsocket']);
-    io.set('origins', 'google.com:80');
-
-    var server = io.flashPolicyServer;
-
-    server.origins.should.contain('google.com:80');
-    server.origins.should.not.contain('*.*');
-
-    io.set('origins', ['foo.bar:80', 'socket.io:1337']);
-    server.origins.should.not.contain('google.com:80');
-    server.origins.should.contain('foo.bar:80');
-    server.origins.should.contain('socket.io:1337');
-    server.buffer.toString('utf8').should.include.string('socket.io');
-
-    io.flashPolicyServer.close();
-    done();
-  }
-
-};
diff --git a/node/node_modules/socket.io/test/transports.htmlfile.test.js b/node/node_modules/socket.io/test/transports.htmlfile.test.js
deleted file mode 100644 (file)
index a9429ab..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , should = require('./common')
-  , HTTPClient = should.HTTPClient
-  , parser = sio.parser
-  , ports = 15300;
-
-/**
- * HTTPClient for htmlfile transport.
- */
-
-function HTMLFile (port) {
-  HTTPClient.call(this, port);
-};
-
-/**
- * Inhertis from HTTPClient.
- */
-
-HTMLFile.prototype.__proto__ = HTTPClient.prototype;
-
-/**
- * Override GET request with streaming parser.
- *
- * @api public
- */
-
-var head = '<script>_('
-  , foot = ');</script>'
-  , initial = '<html><body>'
-      + '<script>var _ = function (msg) { parent.s._(msg, document); };</script>'
-      + new Array(174).join(' ')
-
-HTMLFile.prototype.data = function (path, opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  opts.buffer = false;
-
-  return this.request(path, opts, function (res) {
-    var buf = ''
-      , messages = 0
-      , state = 0;
-
-    res.on('data', function (chunk) {
-      buf += chunk;
-
-      function parse () {
-        switch (state) {
-          case 0:
-            if (buf.indexOf(initial) === 0) {
-              buf = buf.substr(initial.length);
-              state = 1;
-            } else {
-              break;
-            }
-
-          case 1:
-            if (buf.indexOf(head) === 0) {
-              buf = buf.substr(head.length);
-              state = 2;
-            } else {
-              break;
-            }
-
-          case 2:
-            if (buf.indexOf(foot) != -1) {
-              var data = buf.slice(0, buf.indexOf(foot))
-                , obj = JSON.parse(data);
-
-              fn(obj === '' ? obj : parser.decodePayload(obj), ++messages);
-
-              buf = buf.substr(data.length + foot.length);
-              state = 1;
-
-              parse();
-            }
-        };
-      };
-
-      parse();
-    });
-  });
-};
-
-/**
- * Create client for this transport.
- *
- * @api public
- */
-
-function client (port) {
-  return new HTMLFile(port);
-};
-
-/**
- * Tests.
- */
-
-module.exports = {
-
-  'test that not responding to a heartbeat drops client': function (done) {
-    var port = ++ports
-      , cl = client(port)
-      , io = create(cl)
-      , beat = false;
-
-    io.configure(function () {
-      io.set('heartbeat interval', .05);
-      io.set('heartbeat timeout', .05);
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function (reason) {
-        beat.should.be.true;
-        reason.should.eql('heartbeat timeout');
-
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.data('/socket.io/{protocol}/htmlfile/' + sid, function (msgs, i) {
-        switch (i) {
-          case 1:
-            msgs.should.have.length(1);
-            msgs[0].type.should.eql('connect');
-            msgs[0].endpoint.should.eql('');
-            break;
-
-          case 2:
-            msgs.should.have.length(1);
-            msgs[0].type.should.eql('heartbeat');
-            beat = true;
-        };
-      });
-    });
-  },
-
-  'test that responding to a heartbeat maintains session': function (done) {
-    var port = ++ports
-      , cl = client(port)
-      , io = create(cl)
-      , heartbeats = 0;
-
-    io.configure(function () {
-      io.set('heartbeat interval', .05);
-      io.set('heartbeat timeout', .05);
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function (reason) {
-        heartbeats.should.eql(2);
-        reason.should.eql('heartbeat timeout');
-
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.data('/socket.io/{protocol}/htmlfile/' + sid, function (msgs, i) {
-        switch (i) {
-          case 1:
-            msgs.should.have.length(1);
-            msgs[0].type.should.eql('connect');
-            msgs[0].endpoint.should.eql('');
-            break;
-
-          default:
-            msgs.should.have.length(1);
-            msgs[0].type.should.eql('heartbeat');
-
-            heartbeats++;
-
-            if (heartbeats == 1) {
-              cl.post('/socket.io/{protocol}/htmlfile/' + sid, parser.encodePacket({
-                type: 'heartbeat'
-              }));
-            }
-        }
-      });
-    });
-  },
-
-  'test sending undeliverable volatile messages': function (done) {
-    var port = ++ports
-      , cl = client(port)
-      , io = create(cl)
-      , messaged = false
-      , s;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.data('/socket.io/{protocol}/htmlfile/' + sid, function () { });
-
-      setTimeout(function () {
-        cl.end();
-
-        setTimeout(function () {
-          s.volatile.send('wooooot');
-          cl = client(port);
-          cl.data('/socket.io/{protocol}/htmlfile/' + sid, function (msgs) {
-            if (msgs && msgs.length)
-              messaged = true;
-          });
-
-          setTimeout(function () {
-            cl.end();
-          }, 20);
-        }, 20);
-      }, 20);
-    });
-  },
-
-  'test sending undeliverable volatile json': function (done) {
-    var port = ++ports
-      , cl = client(port)
-      , io = create(cl)
-      , messaged = false
-      , s;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.data('/socket.io/{protocol}/htmlfile/' + sid, function () { });
-
-      setTimeout(function () {
-        cl.end();
-
-        setTimeout(function () {
-          s.volatile.json.send(123);
-
-          cl = client(port);
-          cl.data('/socket.io/{protocol}/htmlfile/' + sid, function (msgs) {
-            if (msgs && msgs.length)
-              messaged = true;
-          });
-
-          setTimeout(function () {
-            cl.end();
-          }, 20);
-        }, 20);
-      }, 20);
-    });
-  },
-
-  'test sending undeliverable volatile events': function (done) {
-    var port = ++ports
-      , cl = client(port)
-      , io = create(cl)
-      , messaged = false
-      , s;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.data('/socket.io/{protocol}/htmlfile/' + sid, function () { });
-
-      setTimeout(function () {
-        cl.end();
-
-        setTimeout(function () {
-          s.volatile.emit('tobi');
-
-          cl = client(port);
-          cl.data('/socket.io/{protocol}/htmlfile/' + sid, function (msgs) {
-            if (msgs && msgs.length)
-              messaged = true;
-          });
-
-          setTimeout(function () {
-            cl.end();
-          }, 20);
-        }, 20);
-      }, 20);
-    });
-  },
-
-  'test sending deliverable volatile messages': function (done) {
-    var port = ++ports
-      , cl = client(port)
-      , io = create(cl)
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.volatile.send('woot');
-
-      socket.on('disconnect', function () {
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.data('/socket.io/{protocol}/htmlfile/' + sid, function (msgs, i) {
-        switch (i) {
-          case 1:
-            msgs.should.have.length(1);
-            msgs[0].type.should.eql('connect');
-            msgs[0].endpoint.should.eql('');
-            break;
-
-          case 2:
-            msgs.should.have.length(1);
-            msgs[0].should.eql({
-                type: 'message'
-              , data: 'woot'
-              , endpoint: ''
-            });
-            cl.end();
-        }
-      });
-    });
-  },
-
-  'test sending deliverable volatile json': function (done) {
-    var port = ++ports
-      , cl = client(port)
-      , io = create(cl)
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.volatile.json.send(['woot']);
-
-      socket.on('disconnect', function () {
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.data('/socket.io/{protocol}/htmlfile/' + sid, function (msgs, i) {
-        switch (i) {
-          case 1:
-            msgs.should.have.length(1);
-            msgs[0].type.should.eql('connect');
-            msgs[0].endpoint.should.eql('');
-            break;
-
-          case 2:
-            msgs.should.have.length(1);
-            msgs[0].should.eql({
-                type: 'json'
-              , data: ['woot']
-              , endpoint: ''
-            });
-            cl.end();
-        }
-      });
-    });
-  },
-
-  'test sending deliverable volatile events': function (done) {
-    var port = ++ports
-      , cl = client(port)
-      , io = create(cl)
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.volatile.emit('aaa');
-
-      socket.on('disconnect', function () {
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.data('/socket.io/{protocol}/htmlfile/' + sid, function (msgs, i) {
-        switch (i) {
-          case 1:
-            msgs.should.have.length(1);
-            msgs[0].type.should.eql('connect');
-            msgs[0].endpoint.should.eql('');
-            break;
-
-          case 2:
-            msgs.should.have.length(1);
-            msgs[0].should.eql({
-                type: 'event'
-              , name: 'aaa'
-              , endpoint: ''
-              , args: []
-            });
-            cl.end();
-        }
-      });
-    });
-  }
-
-};
diff --git a/node/node_modules/socket.io/test/transports.jsonp-polling.test.js b/node/node_modules/socket.io/test/transports.jsonp-polling.test.js
deleted file mode 100644 (file)
index c087d33..0000000
+++ /dev/null
@@ -1,770 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , should = require('./common')
-  , qs = require('querystring')
-  , HTTPClient = should.HTTPClient
-  , parser = sio.parser
-  , ports = 15500;
-
-/**
- * HTTPClient for jsonp-polling transport.
- */
-
-function JSONPPolling (port) {
-  HTTPClient.call(this, port);
-};
-
-/**
- * Inhertis from HTTPClient.
- */
-
-JSONPPolling.prototype.__proto__ = HTTPClient.prototype;
-
-/**
- * Performs a json-p (cross domain) handshake
- *
- * @api public
- */
-
-JSONPPolling.prototype.handshake = function (opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  var self = this;
-
-  return this.get(
-      '/socket.io/{protocol}?jsonp=0'
-    , opts
-    , function (res, data) {
-        var head = 'io.j[0]('
-          , foot = ');';
-
-        data.substr(0, head.length).should.eql(head);
-        data.substr(-foot.length).should.eql(foot);
-        data = data.slice(head.length, data.length - foot.length);
-
-        var parts = JSON.parse(data).split(':');
-
-        if (opts.ignoreConnect) {
-          return fn && fn.apply(null, parts);
-        }
-
-        // expect connect packet right after handshake
-        self.get(
-            '/socket.io/{protocol}/jsonp-polling/' + parts[0]
-          , function (res, msgs) {
-              res.statusCode.should.eql(200);
-
-              msgs.should.have.length(1);
-              msgs[0].should.eql({ type: 'connect', endpoint: '', qs: '' });
-
-              fn && fn.apply(null, parts);
-            }
-        );
-      }
-  );
-};
-
-/**
- * Override GET requests.
- *
- * @api public
- */
-
-JSONPPolling.prototype.get = function (path, opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  opts = opts || {};
-
-  opts.parse = function (data) {
-    var head = 'io.j[0]('
-      , foot = ');';
-
-    if (~path.indexOf('?i=1')) {
-      head = 'io.j[1](';
-    }
-
-    data.substr(0, head.length).should.eql(head);
-    data.substr(-foot.length).should.eql(foot);
-
-    data = data.substr(head.length, data.length - head.length - foot.length);
-
-    return JSON.parse(data);
-  };
-
-  return HTTPClient.prototype.get.call(this, path, opts, fn);
-};
-
-/**
- * Issue an encoded POST request
- *
- * @api private
- */
-
-JSONPPolling.prototype.post = function (path, data, opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  opts = opts || {};
-  opts.method = 'POST';
-  opts.data = qs.stringify({ d: data });
-
-  return this.request(path, opts, fn);
-};
-
-/**
- * Create client for this transport.
- *
- * @api public
- */
-
-function client (port) {
-  return new JSONPPolling(port);
-};
-
-/**
- * Test.
- */
-
-module.exports = {
-
-  'test jsonp handshake': function (done) {
-    var cl = client(++ports)
-      , io = create(cl);
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-      io.set('polling duration', 0);
-    });
-
-    function finish () {
-      cl.end();
-      io.server.close();
-      done();
-    };
-
-    cl.handshake(function (sid) {
-      var total = 2;
-
-      cl.get('/socket.io/{protocol}/jsonp-polling/tobi', function (res, msgs) {
-        res.statusCode.should.eql(200);
-
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'error'
-          , reason: 'client not handshaken'
-          , endpoint: ''
-          , advice: 'reconnect'
-        });
-
-        --total || finish();
-      });
-
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-        --total || finish();
-      });
-    });
-  },
-
-  'test the connection event': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , sid;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.id.should.eql(sid);
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-      });
-    });
-  },
-
-  'test the disconnection event after a close timeout': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , sid;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.id.should.eql(sid);
-
-      socket.on('disconnect', function () {
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-
-        setTimeout(function () {
-          cl.end();
-        }, 10);
-      });
-    });
-  },
-
-  'test the disconnection event when the client sends ?disconnect req':
-  function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , disconnected = false
-      , sid;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        disconnected = true;
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-
-        cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-          msgs.should.have.length(1);
-          msgs[0].should.eql({ type: 'disconnect', endpoint: '' });
-          disconnected.should.be.true;
-          cl.end();
-          io.server.close();
-          done();
-        });
-
-        cl.get('/socket.io/{protocol}/jsonp-polling/' + sid + '/?disconnect');
-      });
-    });
-  },
-
-  'test the disconnection event booting a client': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , forced = false;
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        io.server.close();
-        done();
-      });
-
-      cl.end();
-      socket.disconnect();
-      forced = true;
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'disconnect', endpoint: '' });
-
-        forced.should.be.true;
-      });
-    });
-  },
-
-  'test the disconnection event with client disconnect packet': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , sid;
-
-    io.sockets.on('connection', function (client) {
-      cl.post(
-          '/socket.io/{protocol}/jsonp-polling/' + sid
-        , parser.encodePacket({ type: 'disconnect' })
-        , function (res, data) {
-            res.statusCode.should.eql(200);
-            data.should.eql('1');
-          }
-      );
-
-      client.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-      });
-    });
-  },
-
-  'test sending back data': function (done) {
-    var cl = client(++ports)
-      , io = create(cl);
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.send('woot');
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, packs) {
-        packs.should.have.length(1);
-        packs[0].type.should.eql('message');
-        packs[0].data.should.eql('woot');
-      });
-    });
-  },
-
-  'test sending a batch of messages': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , sid;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      var messages = 0;
-
-      cl.post(
-          '/socket.io/{protocol}/jsonp-polling/' + sid
-        , parser.encodePayload([
-              parser.encodePacket({ type: 'message', data: 'a' })
-            , parser.encodePacket({ type: 'message', data: 'b' })
-            , parser.encodePacket({ type: 'disconnect' })
-          ])
-        , function (res, data) {
-            res.statusCode.should.eql(200);
-            data.should.eql('1');
-          }
-      );
-
-      socket.on('message', function (data) {
-        messages++;
-
-        if (messages == 1)
-          data.should.eql('a');
-
-        if (messages == 2)
-          data.should.eql('b');
-      });
-
-      socket.on('disconnect', function () {
-        messages.should.eql(2);
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-      });
-    });
-  },
-
-  'test message buffering between a response and a request': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messages = false
-      , tobi;
-
-    io.configure(function () {
-      io.set('polling duration', .1);
-      io.set('close timeout', .2);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      tobi = function () {
-        socket.send('a');
-        socket.send('b');
-        socket.send('c');
-      };
-
-      socket.on('disconnect', function () {
-        messages.should.be.true;
-
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        tobi();
-
-        cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-          msgs.should.have.length(3);
-          msgs[0].should.eql({ type: 'message', endpoint: '', data: 'a' });
-          msgs[1].should.eql({ type: 'message', endpoint: '', data: 'b' });
-          msgs[2].should.eql({ type: 'message', endpoint: '', data: 'c' });
-          messages = true;
-        });
-      })
-    });
-  },
-
-  'test connecting to a specific endpoint': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , connectMessage = false
-      , sid;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/woot').on('connection', function (socket) {
-      connectMessage.should.be.true;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, data) {
-        cl.get('/socket.io/{protocol}/jsonp-polling/' + sid);
-
-        connectMessage = true;
-
-        cl.post(
-            '/socket.io/{protocol}/jsonp-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/woot' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-      });
-    });
-  },
-
-  'test that connecting doesnt connect to defined endpoints': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , tobiConnected = false
-      , mainConnected = false
-      , sid;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      mainConnected = true;
-
-      socket.on('disconnect', function () {
-        tobiConnected.should.be.false;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/tobi').on('connection', function () {
-      tobiConnected = true;
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid);
-    });
-  },
-
-  'test disconnecting a specific endpoint': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , wootDisconnected = false
-      , mainDisconnected = false
-      , checked = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (data) {
-        data.should.eql('ferret');
-        mainDisconnected.should.be.false;
-        wootDisconnected.should.be.true;
-        checked = true;
-      });
-
-      socket.on('disconnect', function () {
-        mainDisconnected = true;
-        checked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/woot').on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        wootDisconnected = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function () {
-        cl.post(
-            '/socket.io/{protocol}/jsonp-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/woot' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/jsonp-polling/' + sid
-                , parser.encodePacket({ type: 'disconnect', endpoint: '/woot' })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-
-                    cl.post(
-                        '/socket.io/{protocol}/jsonp-polling/' + sid
-                      , parser.encodePacket({ type: 'message', data: 'ferret' })
-                      , function (res, data) {
-                          res.statusCode.should.eql(200);
-                          data.should.eql('1');
-                        }
-                    );
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test that disconnecting disconnects all endpoints': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , aDisconnected = false
-      , bDisconnected = false;
-
-    io.configure(function () {
-      io.set('polling duration', .2);
-      io.set('close timeout', .2);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        setTimeout(function () {
-          aDisconnected.should.be.true;
-          bDisconnected.should.be.true;
-          cl.end();
-          io.server.close();
-          done();
-        }, 50);
-      });
-    });
-
-    io.of('/a').on('connection', function (socket) {
-      socket.on('disconnect', function (msg) {
-        aDisconnected = true;
-      });
-    });
-
-    io.of('/b').on('connection', function (socket) {
-      socket.on('disconnect', function (msg) {
-        bDisconnected = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        cl.post(
-            '/socket.io/{protocol}/jsonp-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/a' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-
-        cl.post(
-            '/socket.io/{protocol}/jsonp-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/b' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-      });
-    });
-  },
-
-  'test messaging a specific endpoint': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = true
-      , aMessaged = false
-      , bMessaged = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql('');
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        messaged.should.be.true;
-        aMessaged.should.be.true;
-        bMessaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/a').on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql('a');
-        aMessaged = true;
-      });
-    });
-
-    io.of('/b').on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql('b');
-        bMessaged = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/jsonp-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/jsonp-polling/' + sid
-          , parser.encodePacket({ type: 'message', data: '' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-
-        cl.post(
-            '/socket.io/{protocol}/jsonp-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/a' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/jsonp-polling/' + sid
-                , parser.encodePacket({ type: 'message', endpoint: '/a', data: 'a' })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-                  }
-              );
-            }
-        );
-
-        cl.post(
-            '/socket.io/{protocol}/jsonp-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/b' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/jsonp-polling/' + sid
-                , parser.encodePacket({ type: 'message', endpoint: '/b', data: 'b' })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-                  }
-              );
-            }
-        );
-      });
-    });
-  }
-
-};
diff --git a/node/node_modules/socket.io/test/transports.websocket.hybi07-12.parser.test.js b/node/node_modules/socket.io/test/transports.websocket.hybi07-12.parser.test.js
deleted file mode 100644 (file)
index 94efaa6..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/**
- * Test dependencies.
- */
-
-var assert = require('assert'); 
-var Parser = require('../lib/transports/websocket/hybi-07-12.js').Parser;
-
-/**
- * Returns a Buffer from a "ff 00 ff"-type hex string.
- */
-
-function makeBufferFromHexString(byteStr) {
-  var bytes = byteStr.split(' ');
-  var buf = new Buffer(bytes.length);
-  for (var i = 0; i < bytes.length; ++i) {
-    buf[i] = parseInt(bytes[i], 16);
-  }
-  return buf;
-}
-
-/**
- * Splits a buffer in two parts.
- */
-
-function splitBuffer(buffer) {
-  var b1 = new Buffer(Math.ceil(buffer.length / 2));
-  buffer.copy(b1, 0, 0, b1.length);
-  var b2 = new Buffer(Math.floor(buffer.length / 2));
-  buffer.copy(b2, 0, b1.length, b1.length + b2.length);
-  return [b1, b2];
-}
-
-/**
- * Performs hybi07+ type masking on a hex string.
- */
-
-function mask(str, maskString) {
-  var buf = new Buffer(str);
-  var mask = makeBufferFromHexString(maskString || '34 83 a8 68');
-  for (var i = 0; i < buf.length; ++i) {
-    buf[i] ^= mask[i % 4];    
-  }
-  return buf;
-}
-
-/**
- * Unpacks a Buffer into a number.
- */
-
-function unpack(buffer) {
-  var n = 0;
-  for (var i = 0; i < buffer.length; ++i) {
-    n = (i == 0) ? buffer[i] : (n * 256) + buffer[i];
-  }
-  return n;
-}
-
-/**
- * Returns a hex string, representing a specific byte count 'length', from a number.
- */
-
-function pack(length, number) {
-  return padl(number.toString(16), length, '0').replace(/(\d\d)/g, '$1 ').trim();
-}
-
-/**
- * Left pads the string 's' to a total length of 'n' with char 'c'.
- */
-
-function padl(s, n, c) { 
-  return new Array(1 + n - s.length).join(c) + s;
-}
-
-/**
- * Returns a hex string from a Buffer.
- */
-
-function dump(data) {
-  var s = '';
-  for (var i = 0; i < data.length; ++i) {
-    s += padl(data[i].toString(16), 2, '0') + ' ';
-  }
-  return s.trim();
-}
-
-/**
- * Tests.
- */
-
-module.exports = {
-  'can parse unmasked text message': function() {
-    var p = new Parser();
-    var packet = '81 05 48 65 6c 6c 6f';
-  
-    var gotData = false;
-    p.on('data', function(data) {
-      gotData = true;
-      assert.equal('Hello', data);
-    });
-  
-    p.add(makeBufferFromHexString(packet));
-    assert.ok(gotData);
-  },
-  'can parse close message': function() {
-    var p = new Parser();
-    var packet = '88 00';
-  
-    var gotClose = false;
-    p.on('close', function(data) {
-      gotClose = true;
-    });
-  
-    p.add(makeBufferFromHexString(packet));
-    assert.ok(gotClose);
-  },
-  'can parse masked text message': function() {
-    var p = new Parser();
-    var packet = '81 93 34 83 a8 68 01 b9 92 52 4f a1 c6 09 59 e6 8a 52 16 e6 cb 00 5b a1 d5';
-  
-    var gotData = false;
-    p.on('data', function(data) {
-      gotData = true;
-      assert.equal('5:::{"name":"echo"}', data);
-    });
-  
-    p.add(makeBufferFromHexString(packet));
-    assert.ok(gotData);
-  },
-  'can parse a masked text message longer than 125 bytes': function() {
-    var p = new Parser();
-    var message = 'A';
-    for (var i = 0; i < 300; ++i) message += (i % 5).toString();
-    var packet = '81 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + dump(mask(message, '34 83 a8 68'));
-    
-    var gotData = false;
-    p.on('data', function(data) {
-      gotData = true;
-      assert.equal(message, data);
-    });
-  
-    p.add(makeBufferFromHexString(packet));
-    assert.ok(gotData);
-  },
-  'can parse a really long masked text message': function() {
-    var p = new Parser();
-    var message = 'A';
-    for (var i = 0; i < 64*1024; ++i) message += (i % 5).toString();
-    var packet = '81 FF ' + pack(16, message.length) + ' 34 83 a8 68 ' + dump(mask(message, '34 83 a8 68'));
-
-    var gotData = false;
-    p.on('data', function(data) {
-      gotData = true;
-      assert.equal(message, data);
-    });
-  
-    p.add(makeBufferFromHexString(packet));
-    assert.ok(gotData);
-  },
-  'can parse a fragmented masked text message of 300 bytes': function() {
-    var p = new Parser();
-    var message = 'A';
-    for (var i = 0; i < 300; ++i) message += (i % 5).toString();
-    var msgpiece1 = message.substr(0, 150);
-    var msgpiece2 = message.substr(150);
-    var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + dump(mask(msgpiece1, '34 83 a8 68'));
-    var packet2 = '81 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + dump(mask(msgpiece2, '34 83 a8 68'));
-  
-    var gotData = false;
-    p.on('data', function(data) {
-      gotData = true;      
-      assert.equal(message, data);
-    });
-  
-    p.add(makeBufferFromHexString(packet1));
-    p.add(makeBufferFromHexString(packet2));
-    assert.ok(gotData);
-  },
-  'can parse a ping message': function() {
-    var p = new Parser();
-    var message = 'Hello';
-    var packet = '89 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + dump(mask(message, '34 83 a8 68'));
-    
-    var gotPing = false;
-    p.on('ping', function(data) {
-      gotPing = true;
-      assert.equal(message, data);
-    });
-    
-    p.add(makeBufferFromHexString(packet));
-    assert.ok(gotPing);
-  },
-  'can parse a ping with no data': function() {
-    var p = new Parser();
-    var packet = '89 00';
-    
-    var gotPing = false;
-    p.on('ping', function(data) {
-      gotPing = true;
-    });
-    
-    p.add(makeBufferFromHexString(packet));
-    assert.ok(gotPing);
-  },
-  'can parse a fragmented masked text message of 300 bytes with a ping in the middle': function() {
-    var p = new Parser();
-    var message = 'A';
-    for (var i = 0; i < 300; ++i) message += (i % 5).toString();
-  
-    var msgpiece1 = message.substr(0, 150);
-    var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + dump(mask(msgpiece1, '34 83 a8 68'));
-  
-    var pingMessage = 'Hello';
-    var pingPacket = '89 FE ' + pack(4, pingMessage.length) + ' 34 83 a8 68 ' + dump(mask(pingMessage, '34 83 a8 68'));
-  
-    var msgpiece2 = message.substr(150);
-    var packet2 = '81 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + dump(mask(msgpiece2, '34 83 a8 68'));
-  
-    var gotData = false;
-    p.on('data', function(data) {
-      gotData = true;
-      assert.equal(message, data);
-    });
-    var gotPing = false;
-    p.on('ping', function(data) {
-      gotPing = true;
-      assert.equal(pingMessage, data);
-    });
-    
-    p.add(makeBufferFromHexString(packet1));
-    p.add(makeBufferFromHexString(pingPacket));
-    p.add(makeBufferFromHexString(packet2));
-    assert.ok(gotData);
-    assert.ok(gotPing);
-  },
-  'can parse a fragmented masked text message of 300 bytes with a ping in the middle, which is delievered over sevaral tcp packets': function() {
-    var p = new Parser();
-    var message = 'A';
-    for (var i = 0; i < 300; ++i) message += (i % 5).toString();
-  
-    var msgpiece1 = message.substr(0, 150);
-    var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + dump(mask(msgpiece1, '34 83 a8 68'));
-  
-    var pingMessage = 'Hello';
-    var pingPacket = '89 FE ' + pack(4, pingMessage.length) + ' 34 83 a8 68 ' + dump(mask(pingMessage, '34 83 a8 68'));
-  
-    var msgpiece2 = message.substr(150);
-    var packet2 = '81 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + dump(mask(msgpiece2, '34 83 a8 68'));
-  
-    var gotData = false;
-    p.on('data', function(data) {
-      gotData = true;
-      assert.equal(message, data);
-    });
-    var gotPing = false;
-    p.on('ping', function(data) {
-      gotPing = true;
-      assert.equal(pingMessage, data);
-    });
-    
-    var buffers = [];
-    buffers = buffers.concat(splitBuffer(makeBufferFromHexString(packet1)));
-    buffers = buffers.concat(splitBuffer(makeBufferFromHexString(pingPacket)));
-    buffers = buffers.concat(splitBuffer(makeBufferFromHexString(packet2)));
-    for (var i = 0; i < buffers.length; ++i) {
-      p.add(buffers[i]);
-    }
-    assert.ok(gotData);
-    assert.ok(gotPing);
-  },
-};
-
diff --git a/node/node_modules/socket.io/test/transports.websocket.test.js b/node/node_modules/socket.io/test/transports.websocket.test.js
deleted file mode 100644 (file)
index 4b9ff61..0000000
+++ /dev/null
@@ -1,1771 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , should = require('./common')
-  , parser = sio.parser
-  , ports = 15800;
-
-/**
- * Tests.
- */
-
-module.exports = {
-
-  'test that not responding to a heartbeat drops client': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messages = 0
-      , ws;
-
-    io.configure(function () {
-      io.set('heartbeat interval', .05);
-      io.set('heartbeat timeout', .05);
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function (reason) {
-        beat.should.be.true;
-        reason.should.eql('heartbeat timeout');
-
-        cl.end();
-        ws.finishClose();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('message', function (packet) {
-        if (++messages == 1) {
-          packet.type.should.eql('connect');
-        } else {
-          packet.type.should.eql('heartbeat');
-          beat = true;
-        }
-      });
-    });
-  },
-
-  'test that responding to a heartbeat maintains session': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messages = 0
-      , heartbeats = 0
-      , ws;
-
-    io.configure(function () {
-      io.set('heartbeat interval', .05);
-      io.set('heartbeat timeout', .05);
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function (reason) {
-        heartbeats.should.eql(2);
-        reason.should.eql('heartbeat timeout');
-
-        cl.end();
-        ws.finishClose();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('message', function (packet) {
-        if (++messages == 1) {
-          packet.type.should.eql('connect');
-        } else {
-          packet.type.should.eql('heartbeat');
-          heartbeats++;
-
-          if (heartbeats == 1) {
-            ws.packet({ type: 'heartbeat' });
-          }
-        }
-      });
-    });
-  },
-
-  'test sending undeliverable volatile messages': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messages = 0
-      , messaged = false
-      , s;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      var ws = websocket(cl, sid);
-      ws.on('message', function (msg) {
-        msg.type.should.eql('connect');
-        ws.finishClose();
-
-        setTimeout(function () {
-          s.volatile.send('ah wha wha');
-
-          ws = websocket(cl, sid);
-          ws.on('message', function () {
-            messaged = true;
-          });
-
-          setTimeout(function () {
-            ws.finishClose();
-          }, 10);
-        }, 10);
-      });
-    });
-  },
-
-  'test sending undeliverable volatile json': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false
-      , s;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      var ws = websocket(cl, sid);
-      ws.on('message', function () {
-        ws.finishClose();
-
-        setTimeout(function () {
-          s.volatile.json.send({ a: 'b' });
-
-          ws = websocket(cl, sid);
-          ws.on('message', function () {
-            messaged = true;
-          });
-
-          setTimeout(function () {
-            ws.finishClose();
-          }, 10);
-        }, 10);
-      });
-    });
-  },
-
-  'test sending undeliverable volatile events': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false
-      , s;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      var ws = websocket(cl, sid);
-      ws.on('message', function () {
-        ws.finishClose();
-
-        setTimeout(function () {
-          s.volatile.emit({ a: 'b' });
-
-          ws = websocket(cl, sid);
-          ws.on('message', function () {
-            messaged = true;
-          });
-
-          setTimeout(function () {
-            ws.finishClose();
-          }, 10);
-        }, 10);
-      });
-    });
-  },
-
-  'test sending deliverable volatile messages': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messages = 0
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.volatile.send('tobi');
-
-      socket.on('disconnect', function () {
-        messaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      var ws = websocket(cl, sid);
-      ws.on('message', function (msg) {
-        if (++messages == 1) {
-          msg.type.should.eql('connect');
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'tobi'
-            , endpoint: ''
-          });
-          messaged = true;
-          ws.finishClose();
-        }
-      });
-    });
-  },
-
-  'test sending deliverable volatile json': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.volatile.json.send([1, 2, 3]);
-
-      socket.on('disconnect', function () {
-        messaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      var ws = websocket(cl, sid);
-      ws.on('message', function (msg) {
-        if (!ws.connected) {
-          msg.type.should.eql('connect');
-          ws.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: [1, 2, 3]
-            , endpoint: ''
-          });
-          messaged = true;
-          ws.finishClose();
-        }
-      });
-    });
-  },
-
-  'test sending deliverable volatile events': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.volatile.emit('tobi');
-
-      socket.on('disconnect', function () {
-        messaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      var ws = websocket(cl, sid);
-      ws.on('message', function (msg) {
-        if (!ws.connected) {
-          msg.type.should.eql('connect');
-          ws.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'tobi'
-            , endpoint: ''
-            , args: []
-          });
-          messaged = true;
-          ws.finishClose();
-        }
-      });
-    });
-  },
-
-  'test sending to all clients in a namespace': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections == 2) {
-        io.sockets.send('yup');
-      }
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 2) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'yup'
-            , endpoint: ''
-          });
-
-          messages++;
-          ws1.finishClose();
-        }
-      });
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'yup'
-            , endpoint: ''
-          });
-
-          messages++;
-          ws2.finishClose();
-        }
-      });
-    });
-  },
-
-  'test sending json to all clients in a namespace': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections == 2) {
-        io.sockets.json.send({ a: 'b' });
-      }
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 2) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: { a: 'b' }
-            , endpoint: ''
-          });
-
-          messages++;
-          ws1.finishClose();
-        }
-      });
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: { a: 'b' }
-            , endpoint: ''
-          });
-
-          messages++;
-          ws2.finishClose();
-        }
-      });
-    });
-  },
-
-  'test emitting to all clients in a namespace': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections == 2) {
-        io.sockets.emit('tobi', 'rapture');
-      }
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 2) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'tobi'
-            , args: ['rapture']
-            , endpoint: ''
-          });
-
-          messages++;
-          ws1.finishClose();
-        }
-      });
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'tobi'
-            , args: ['rapture']
-            , endpoint: ''
-          });
-
-          messages++;
-          ws2.finishClose();
-        }
-      });
-    });
-  },
-
-  'test sending to all clients in a room': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , joins = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections != 3) {
-        socket.join('woot');
-        joins++;
-
-        if (joins == 2) {
-          setTimeout(function () {
-            connections.should.eql(3);
-            io.sockets.in('woot').send('hahaha');
-          }, 20);
-        }
-      }
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'hahaha'
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws1.finishClose();
-      }, 50);
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'hahaha'
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws2.finishClose();
-      }, 50);
-    });
-
-    cl3.handshake(function (sid) {
-      var ws3 = websocket(cl3, sid);
-      ws3.on('message', function (msg) {
-        if (!ws3.connected) {
-          msg.type.should.eql('connect');
-          ws3.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'hahaha'
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws3.finishClose();
-      }, 50);
-    });
-  },
-
-  'test sending json to all clients in a room': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , joins = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections != 3) {
-        socket.join('woot');
-        joins++;
-
-        if (joins == 2) {
-          setTimeout(function () {
-            connections.should.eql(3);
-            io.sockets.in('woot').json.send(123);
-          }, 20);
-        }
-      }
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: 123
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws1.finishClose();
-      }, 50);
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: 123
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws2.finishClose();
-      }, 50);
-    });
-
-    cl3.handshake(function (sid) {
-      var ws3 = websocket(cl3, sid);
-      ws3.on('message', function (msg) {
-        if (!ws3.connected) {
-          msg.type.should.eql('connect');
-          ws3.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: 123
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws3.finishClose();
-      }, 50);
-    });
-  },
-
-  'test emitting to all clients in a room': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , joins = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections != 3) {
-        socket.join('woot');
-        joins++;
-
-        if (joins == 2) {
-          setTimeout(function () {
-            connections.should.eql(3);
-            io.sockets.in('woot').emit('locki');
-          }, 20);
-        }
-      }
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'locki'
-            , args: []
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws1.finishClose();
-      }, 50);
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'locki'
-            , args: []
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws2.finishClose();
-      }, 50);
-    });
-
-    cl3.handshake(function (sid) {
-      var ws3 = websocket(cl3, sid);
-      ws3.on('message', function (msg) {
-        if (!ws3.connected) {
-          msg.type.should.eql('connect');
-          ws3.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'locki'
-            , args: []
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      setTimeout(function () {
-        ws3.finishClose();
-      }, 50);
-    });
-  },
-
-  'test leaving a room': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , io = create(cl1)
-      , joins = 0
-      , disconnects = 0;
-
-    io.set('close timeout', 0);
-
-    io.sockets.on('connection', function (socket) {
-      socket.join('foo');
-      io.sockets.clients('foo').should.have.length(++joins);
-
-      socket.on('disconnect', function () {
-        socket.leave('foo');
-        socket.leave('foo');
-        socket.leave('foo');
-
-        io.sockets.clients('foo').should.have.length(--joins);
-
-        if (++disconnects == 2) {
-          io.server.close();
-          cl1.end();
-          cl2.end();
-          done();
-        }
-      })
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-           ws1.finishClose();
-        }
-      });
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-          ws2.finishClose();
-        }
-      });
-    });
-  },
-
-  'test message with broadcast flag': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('trigger broadcast', function () {
-        socket.broadcast.send('boom');
-      });
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'boom'
-            , endpoint: ''
-          });
-
-          messages++;
-          ws1.finishClose();
-        }
-      });
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'boom'
-            , endpoint: ''
-          });
-
-          messages++;
-          ws2.finishClose();
-        }
-      });
-    });
-
-    cl3.handshake(function (sid) {
-      var ws3 = websocket(cl3, sid);
-      ws3.on('open', function () {
-        ws3.packet({
-            type: 'event'
-          , name: 'trigger broadcast'
-          , endpoint: ''
-        });
-
-        setTimeout(function () {
-          ws3.finishClose();
-        }, 50);
-      });
-
-      ws3.on('message', function (msg) {
-        if (!ws3.connected) {
-          msg.type.should.eql('connect');
-          ws3.connected = true;
-        } else {
-          throw new Error('we shouldnt get a message here');
-        }
-      });
-    });
-  },
-
-  'test json with broadcast flag': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('trigger broadcast', function () {
-        socket.broadcast.json.send([1, 2, 3]);
-      });
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: [1, 2, 3]
-            , endpoint: ''
-          });
-
-          messages++;
-          ws1.finishClose();
-        }
-      });
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: [1, 2, 3]
-            , endpoint: ''
-          });
-
-          messages++;
-          ws2.finishClose();
-        }
-      });
-    });
-
-    cl3.handshake(function (sid) {
-      var ws3 = websocket(cl3, sid);
-      ws3.on('open', function () {
-        ws3.packet({
-            type: 'event'
-          , name: 'trigger broadcast'
-          , endpoint: ''
-        });
-
-        setTimeout(function () {
-          ws3.finishClose();
-        }, 50);
-      });
-
-      ws3.on('message', function (msg) {
-        if (!ws3.connected) {
-          msg.type.should.eql('connect');
-          ws3.connected = true;
-        } else {
-          throw new Error('we shouldnt get a message here');
-        }
-      });
-    });
-  },
-
-  'test event with broadcast flag': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('trigger broadcast', function () {
-        socket.broadcast.emit('hey', 'arnold');
-      });
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(2);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'hey'
-            , args: ['arnold']
-            , endpoint: ''
-          });
-
-          messages++;
-          ws1.finishClose();
-        }
-      });
-    });
-
-    cl2.handshake(function (sid) {
-      var ws2 = websocket(cl2, sid);
-      ws2.on('message', function (msg) {
-        if (!ws2.connected) {
-          msg.type.should.eql('connect');
-          ws2.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'hey'
-            , args: ['arnold']
-            , endpoint: ''
-          });
-
-          messages++;
-          ws2.finishClose();
-        }
-      });
-    });
-
-    cl3.handshake(function (sid) {
-      var ws3 = websocket(cl3, sid);
-      ws3.on('open', function () {
-        ws3.packet({
-            type: 'event'
-          , name: 'trigger broadcast'
-          , endpoint: ''
-        });
-
-        setTimeout(function () {
-          ws3.finishClose();
-        }, 50);
-      });
-
-      ws3.on('message', function (msg) {
-        if (!ws3.connected) {
-          msg.type.should.eql('connect');
-          ws3.connected = true;
-        } else {
-          throw new Error('we shouldnt get a message here');
-        }
-      });
-    });
-  },
-
-  'test message with broadcast flag and to()': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections == 1) {
-        socket.join('losers');
-      }
-
-      socket.on('trigger broadcast', function () {
-        socket.broadcast.to('losers').send('boom');
-      });
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(1);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'message'
-            , data: 'boom'
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      ws1.on('open', function () {
-        cl2.handshake(function (sid) {
-          var ws2 = websocket(cl2, sid);
-          ws2.on('message', function (msg) {
-            if (!ws2.connected) {
-              msg.type.should.eql('connect');
-              ws2.connected = true;
-            } else {
-              throw new Error('This socket shouldnt get a message');
-            }
-          });
-
-          ws2.on('open', function () {
-            cl3.handshake(function (sid) {
-              var ws3 = websocket(cl3, sid);
-              ws3.on('open', function () {
-                ws3.packet({
-                    type: 'event'
-                  , name: 'trigger broadcast'
-                  , endpoint: ''
-                });
-
-                setTimeout(function () {
-                  ws1.finishClose();
-                  ws2.finishClose();
-                  ws3.finishClose();
-                }, 50);
-              });
-
-              ws3.on('message', function (msg) {
-                if (!ws3.connected) {
-                  msg.type.should.eql('connect');
-                  ws3.connected = true;
-                } else {
-                  throw new Error('we shouldnt get a message here');
-                }
-              });
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test json with broadcast flag and to()': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections == 1) {
-        socket.join('losers');
-      }
-
-      socket.on('trigger broadcast', function () {
-        socket.broadcast.json.to('losers').send({ hello: 'world' });
-      });
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(1);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'json'
-            , data: { hello: 'world' }
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      ws1.on('open', function () {
-        cl2.handshake(function (sid) {
-          var ws2 = websocket(cl2, sid);
-          ws2.on('message', function (msg) {
-            if (!ws2.connected) {
-              msg.type.should.eql('connect');
-              ws2.connected = true;
-            } else {
-              throw new Error('This socket shouldnt get a message');
-            }
-          });
-
-          ws2.on('open', function () {
-            cl3.handshake(function (sid) {
-              var ws3 = websocket(cl3, sid);
-              ws3.on('open', function () {
-                ws3.packet({
-                    type: 'event'
-                  , name: 'trigger broadcast'
-                  , endpoint: ''
-                });
-
-                setTimeout(function () {
-                  ws1.finishClose();
-                  ws2.finishClose();
-                  ws3.finishClose();
-                }, 50);
-              });
-
-              ws3.on('message', function (msg) {
-                if (!ws3.connected) {
-                  msg.type.should.eql('connect');
-                  ws3.connected = true;
-                } else {
-                  throw new Error('we shouldnt get a message here');
-                }
-              });
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test event with broadcast flag and to()': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , cl3 = client(port)
-      , io = create(cl1)
-      , messages = 0
-      , connections = 0
-      , disconnections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', 0);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      connections++;
-
-      if (connections == 1) {
-        socket.join('losers');
-      }
-
-      socket.on('trigger broadcast', function () {
-        socket.broadcast.to('losers').emit('victory');
-      });
-
-      socket.on('disconnect', function () {
-        disconnections++;
-
-        if (disconnections == 3) {
-          messages.should.eql(1);
-          cl1.end();
-          cl2.end();
-          cl3.end();
-          io.server.close();
-          done();
-        }
-      });
-    });
-
-    cl1.handshake(function (sid) {
-      var ws1 = websocket(cl1, sid);
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-        } else {
-          msg.should.eql({
-              type: 'event'
-            , name: 'victory'
-            , args: []
-            , endpoint: ''
-          });
-
-          messages++;
-        }
-      });
-
-      ws1.on('open', function () {
-        cl2.handshake(function (sid) {
-          var ws2 = websocket(cl2, sid);
-          ws2.on('message', function (msg) {
-            if (!ws2.connected) {
-              msg.type.should.eql('connect');
-              ws2.connected = true;
-            } else {
-              throw new Error('This socket shouldnt get a message');
-            };
-          });
-
-          ws2.on('open', function () {
-            cl3.handshake(function (sid) {
-              var ws3 = websocket(cl3, sid);
-              ws3.on('open', function () {
-                ws3.packet({
-                    type: 'event'
-                  , name: 'trigger broadcast'
-                  , endpoint: ''
-                });
-
-                setTimeout(function () {
-                  ws1.finishClose();
-                  ws2.finishClose();
-                  ws3.finishClose();
-                }, 50);
-              });
-
-              ws3.on('message', function (msg) {
-                if (!ws3.connected) {
-                  msg.type.should.eql('connect');
-                  ws3.connected = true;
-                } else {
-                  throw new Error('we shouldnt get a message here');
-                }
-              });
-            });
-          });
-        });
-      });
-    });
-  },
-
-  'test accessing handshake data from sockets': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , ws;
-
-    io.sockets.on('connection', function (socket) {
-      (!!socket.handshake.address.address).should.be.true;
-      (!!socket.handshake.address.port).should.be.true;
-      socket.handshake.headers.host.should.equal('localhost');
-      socket.handshake.headers.connection.should.equal('keep-alive');
-      socket.handshake.time.should.match(/GMT/);
-
-      socket.on('disconnect', function () {
-        setTimeout(function () {
-          ws.finishClose();
-          cl.end();
-          io.server.close();
-          done();
-        }, 10);
-      });
-
-      socket.disconnect();
-    });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('message', function (msg) {
-        if (!ws.connected) {
-          msg.type.should.eql('connect');
-          ws.connected = true;
-        }
-      });
-    });
-  },
-
-  'test accessing the array of clients': function (done) {
-    var port = ++ports
-      , cl1 = client(port)
-      , cl2 = client(port)
-      , io = create(cl1)
-      , total = 2
-      , ws1, ws2;
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('join ferrets', function () {
-        socket.join('ferrets');
-        socket.send('done');
-      });
-    });
-
-    function check() {
-      io.sockets.clients('ferrets').should.have.length(1);
-      io.sockets.clients('ferrets')[0].should.be.an.instanceof(sio.Socket);
-      io.sockets.clients('ferrets')[0].id.should.equal(ws1.sid);
-      io.sockets.clients().should.have.length(2);
-      io.sockets.clients()[0].should.be.an.instanceof(sio.Socket);
-      io.sockets.clients()[0].id.should.equal(ws1.sid);
-      io.sockets.clients()[1].should.be.an.instanceof(sio.Socket);
-      io.sockets.clients()[1].id.should.equal(ws2.sid);
-
-      ws1.finishClose();
-      ws2.finishClose();
-      cl1.end();
-      cl2.end();
-      io.server.close();
-      done();
-    };
-
-    cl1.handshake(function (sid) {
-      ws1 = websocket(cl1, sid);
-      ws1.sid = sid;
-      ws1.on('message', function (msg) {
-        if (!ws1.connected) {
-          msg.type.should.eql('connect');
-          ws1.connected = true;
-          ws1.packet({
-              type: 'event'
-            , name: 'join ferrets'
-            , endpoint: ''
-          });
-        } else {
-          cl2.handshake(function (sid) {
-            ws2 = websocket(cl2, sid);
-            ws2.sid = sid;
-            ws2.on('message', function (msg) {
-              if (!ws2.connected) {
-                msg.type.should.eql('connect');
-                ws2.connected = true;
-                check();
-              }
-            });
-          });
-        }
-      });
-    });
-  },
-
-  'test accessing handshake data from sockets on disconnect': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , ws;
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-
-      (!!socket.handshake.address.address).should.be.true;
-      (!!socket.handshake.address.port).should.be.true;
-      socket.handshake.headers.host.should.equal('localhost');
-      socket.handshake.headers.connection.should.equal('keep-alive');
-      socket.handshake.time.should.match(/GMT/);
-
-        setTimeout(function () {
-          ws.finishClose();
-          cl.end();
-          io.server.close();
-          done();
-        }, 10);
-      });
-
-      socket.disconnect();
-    });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('message', function (msg) {
-        if (!ws.connected) {
-          msg.type.should.eql('connect');
-          ws.connected = true;
-        }
-      });
-    });
-  },
-
-  'test for intentional and unintentional disconnects': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , calls = 0
-      , ws;
-
-    function close () {
-      cl.end();
-      io.server.close();
-      ws.finishClose();
-      done();
-    }
-
-    io.configure(function () {
-      io.set('heartbeat interval', .05);
-      io.set('heartbeat timeout', .05);
-      io.set('close timeout', 0);
-    });
-
-    io.of('/foo').on('connection', function (socket) {
-      socket.on('disconnect', function (reason) {
-       reason.should.equal('packet');
-
-       if (++calls == 2) close();
-      });
-    });
-
-    io.of('/bar').on('connection', function (socket) {
-      socket.on('disconnect', function (reason) {
-        reason.should.equal('socket end');
-
-        if (++calls == 2) close();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      var messages = 0;
-      ws = websocket(cl, sid);
-      ws.on('open', function () {
-        ws.packet({
-            type: 'connect'
-          , endpoint: '/foo'
-        });
-        ws.packet({
-            type: 'connect'
-          , endpoint: '/bar'
-        });
-      });
-
-      ws.on('message', function (packet) {
-        if (packet.type == 'connect') {
-          if (++messages === 3) {
-            ws.packet({ type: 'disconnect', endpoint:'/foo' });
-            ws.finishClose();
-          }
-        }
-      });
-    });
-  },
-
-  'test socket clean up': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , ws;
-
-    io.sockets.on('connection', function (socket) {
-      var self = this
-        , id = socket.id;
-
-      socket.on('disconnect', function () {
-        setTimeout(function () {
-          var available = !!self.sockets[id];
-
-          available.should.be.false;
-          ws.finishClose();
-          cl.end();
-          io.server.close();
-          done();
-        }, 10);
-      });
-
-      socket.disconnect();
-    });
-
-    cl.handshake(function (sid) {
-      ws = websocket(cl, sid);
-      ws.on('message', function (msg) {
-        if (!ws.connected) {
-          msg.type.should.eql('connect');
-          ws.connected = true;
-        }
-      });
-    });
-  },
-
-};
diff --git a/node/node_modules/socket.io/test/transports.xhr-polling.test.js b/node/node_modules/socket.io/test/transports.xhr-polling.test.js
deleted file mode 100644 (file)
index fb039ab..0000000
+++ /dev/null
@@ -1,2754 +0,0 @@
-
-/*!
- * socket.io-node
- * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
- * MIT Licensed
- */
-
-/**
- * Test dependencies.
- */
-
-var sio = require('socket.io')
-  , should = require('./common')
-  , HTTPClient = should.HTTPClient
-  , parser = sio.parser
-  , ports = 15200;
-
-/**
- * HTTPClient for xhr-polling transport.
- */
-
-function XHRPolling (port) {
-  HTTPClient.call(this, port);
-};
-
-/**
- * Inhertis from HTTPClient.
- */
-
-XHRPolling.prototype.__proto__ = HTTPClient.prototype;
-
-/**
- * Performs the handshake and expects the connect echo packet.
- *
- * @api public
- */
-
-XHRPolling.prototype.handshake = function (opts, fn) {
-  if ('function' == typeof opts) {
-    fn = opts;
-    opts = {};
-  }
-
-  var self = this;
-
-  return this.get('/socket.io/{protocol}', opts, function (res, data) {
-    var parts = data.split(':');
-
-    if (opts.ignoreConnect) {
-      return fn && fn.apply(null, parts);
-    }
-
-    // expect connect packet right after handshake
-    self.get(
-        '/socket.io/{protocol}/xhr-polling/' + parts[0]
-      , function (res, msgs) {
-          res.statusCode.should.eql(200);
-
-          msgs.should.have.length(1);
-          msgs[0].should.eql({ type: 'connect', endpoint: '', qs: '' });
-
-          fn && fn.apply(null, parts);
-        }
-    );
-  });
-};
-
-/**
- * Create client for this transport.
- *
- * @api public
- */
-
-function client (port) {
-  return new XHRPolling(port);
-};
-
-/**
- * Test.
- */
-
-module.exports = {
-
-  'test handshake': function (done) {
-    var cl = client(++ports)
-      , io = create(cl);
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-      io.set('polling duration', 0);
-    });
-
-    function finish () {
-      cl.end();
-      io.server.close();
-      done();
-    };
-
-    cl.handshake(function (sid) {
-      var total = 2;
-
-      cl.get('/socket.io/{protocol}/xhr-polling/tobi', function (res, msgs) {
-        res.statusCode.should.eql(200);
-
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'error'
-          , reason: 'client not handshaken'
-          , endpoint: ''
-          , advice: 'reconnect'
-        });
-
-        --total || finish();
-      });
-
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-        --total || finish();
-      });
-    });
-  },
-
-  'test the connection event': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , sid;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.id.should.eql(sid);
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-      });
-    });
-  },
-
-  'test the disconnection event after a close timeout': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , sid;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.id.should.eql(sid);
-
-      socket.on('disconnect', function () {
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-
-        setTimeout(function () {
-          cl.end();
-        }, 10);
-      });
-    });
-  },
-
-  'test the disconnection event when the client sends ?disconnect req':
-  function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , disconnected = false
-      , sid;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        disconnected = true;
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-          msgs.should.have.length(1);
-          msgs[0].should.eql({ type: 'disconnect', endpoint: '' });
-          disconnected.should.be.true;
-          cl.end();
-          io.server.close();
-          done();
-        });
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid + '/?disconnect');
-      });
-    });
-  },
-
-  'test the disconnection event booting a client': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , forced = false;
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        io.server.close();
-        done();
-      });
-
-      cl.end();
-      socket.disconnect();
-      forced = true;
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'disconnect', endpoint: '' });
-
-        forced.should.be.true;
-      });
-    });
-  },
-
-  'test the disconnection event with client disconnect packet': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , sid;
-
-    io.sockets.on('connection', function (client) {
-      cl.post(
-          '/socket.io/{protocol}/xhr-polling/' + sid
-        , parser.encodePacket({ type: 'disconnect' })
-        , function (res, data) {
-            res.statusCode.should.eql(200);
-            data.should.eql('1');
-          }
-      );
-
-      client.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-      });
-    });
-  },
-
-  'test sending back data': function (done) {
-    var cl = client(++ports)
-      , io = create(cl);
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.send('woot');
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, packs) {
-        packs.should.have.length(1);
-        packs[0].type.should.eql('message');
-        packs[0].data.should.eql('woot');
-      });
-    });
-  },
-
-  'test sending a batch of messages': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , sid;
-
-    io.configure(function () {
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      var messages = 0;
-
-      cl.post(
-          '/socket.io/{protocol}/xhr-polling/' + sid
-        , parser.encodePayload([
-              parser.encodePacket({ type: 'message', data: 'a' })
-            , parser.encodePacket({ type: 'message', data: 'b' })
-            , parser.encodePacket({ type: 'disconnect' })
-          ])
-        , function (res, data) {
-            res.statusCode.should.eql(200);
-            data.should.eql('1');
-          }
-      );
-
-      socket.on('message', function (data) {
-        messages++;
-
-        if (messages == 1)
-          data.should.eql('a');
-
-        if (messages == 2)
-          data.should.eql('b');
-      });
-
-      socket.on('disconnect', function () {
-        messages.should.eql(2);
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake({ ignoreConnect: true }, function (sessid) {
-      sid = sessid;
-
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].type.should.eql('connect');
-      });
-    });
-  },
-
-  'test message buffering between a response and a request': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messages = false
-      , tobi;
-
-    io.configure(function () {
-      io.set('polling duration', .1);
-      io.set('close timeout', .2);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      tobi = function () {
-        socket.send('a');
-        socket.send('b');
-        socket.send('c');
-      };
-
-      socket.on('disconnect', function () {
-        messages.should.be.true;
-
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        tobi();
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-          msgs.should.have.length(3);
-          msgs[0].should.eql({ type: 'message', endpoint: '', data: 'a' });
-          msgs[1].should.eql({ type: 'message', endpoint: '', data: 'b' });
-          msgs[2].should.eql({ type: 'message', endpoint: '', data: 'c' });
-          messages = true;
-        });
-      })
-    });
-  },
-
-  'test connecting to a specific endpoint': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , connectMessage = false
-      , sid;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/woot').on('connection', function (socket) {
-      connectMessage.should.be.true;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid);
-
-        connectMessage = true;
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/woot' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-      });
-    });
-  },
-
-  'test that connecting doesnt connect to defined endpoints': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , tobiConnected = false
-      , mainConnected = false
-      , sid;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      mainConnected = true;
-
-      socket.on('disconnect', function () {
-        tobiConnected.should.be.false;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/tobi').on('connection', function () {
-      tobiConnected = true;
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid);
-    });
-  },
-
-  'test disconnecting a specific endpoint': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , wootDisconnected = false
-      , mainDisconnected = false
-      , checked = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (data) {
-        data.should.eql('ferret');
-        mainDisconnected.should.be.false;
-        wootDisconnected.should.be.true;
-        checked = true;
-      });
-
-      socket.on('disconnect', function () {
-        mainDisconnected = true;
-        checked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/woot').on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        wootDisconnected = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function () {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/woot' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({ type: 'disconnect', endpoint: '/woot' })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-
-                    cl.post(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , parser.encodePacket({ type: 'message', data: 'ferret' })
-                      , function (res, data) {
-                          res.statusCode.should.eql(200);
-                          data.should.eql('1');
-                        }
-                    );
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test that disconnecting disconnects all endpoints': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , aDisconnected = false
-      , bDisconnected = false;
-
-    io.configure(function () {
-      io.set('polling duration', .2);
-      io.set('close timeout', .2);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        setTimeout(function () {
-          aDisconnected.should.be.true;
-          bDisconnected.should.be.true;
-          cl.end();
-          io.server.close();
-          done();
-        }, 50);
-      });
-    });
-
-    io.of('/a').on('connection', function (socket) {
-      socket.on('disconnect', function (msg) {
-        aDisconnected = true;
-      });
-    });
-
-    io.of('/b').on('connection', function (socket) {
-      socket.on('disconnect', function (msg) {
-        bDisconnected = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/a' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/b' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-      });
-    });
-  },
-
-  'test messaging a specific endpoint': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = true
-      , aMessaged = false
-      , bMessaged = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql('');
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        messaged.should.be.true;
-        aMessaged.should.be.true;
-        bMessaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/a').on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql('a');
-        aMessaged = true;
-      });
-    });
-
-    io.of('/b').on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql('b');
-        bMessaged = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'message', data: '' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/a' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({ type: 'message', endpoint: '/a', data: 'a' })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-                  }
-              );
-            }
-        );
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/b' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({ type: 'message', endpoint: '/b', data: 'b' })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test sending json from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messages = 0
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        s.json.send(['a', 'b', 'c']);
-        s.json.send({
-            a: 'b'
-          , c: 'd'
-        });
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-          res.statusCode.should.eql(200);
-
-          msgs.should.have.length(2);
-          msgs[0].should.eql({
-              type: 'json'
-            , data: ['a', 'b', 'c']
-            , endpoint: ''
-          });
-          msgs[1].should.eql({
-              type: 'json'
-            , data: {
-                  a: 'b'
-                , c: 'd'
-              }
-            , endpoint: ''
-          });
-        });
-      })
-    });
-  },
-
-  'test sending json to the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messages = 0;
-    
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .1);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        messages++;
-
-        if (messages == 1) {
-          msg.should.eql({ tobi: 'rocks' });
-        } else if (messages == 2) {
-          msg.should.eql(5000);
-        }
-      });
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({
-                type: 'json'
-              , data: { tobi: 'rocks' }
-            })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.equal('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({
-                      type: 'json'
-                    , data: 5000
-                  })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.equal('1');
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test emitting an event from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        s.emit('tobi is playing');
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-          res.statusCode.should.eql(200);
-
-          msgs.should.have.length(1);
-          msgs[0].should.eql({
-              type: 'event'
-            , name: 'tobi is playing'
-            , endpoint: ''
-            , args: []
-          });
-        });
-      });
-    });
-  },
-
-  'test emitting an event with data from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        s.emit('edwald', { woot: 'woot' }, [1, 2, 3]);
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-          res.statusCode.should.eql(200);
-
-          msgs.should.have.length(1);
-          msgs[0].should.eql({
-              type: 'event'
-            , name: 'edwald'
-            , endpoint: ''
-            , args: [{ woot: 'woot' }, [1, 2, 3]]
-          });
-        });
-      });
-    });
-  },
-
-  'test emitting an event to the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('jane', function (a, b, c) {
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        messaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({
-                type: 'event'
-              , name: 'jane'
-            })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.equal('1');
-            }
-        );
-      });
-    });
-  },
-
-  'test that emitting an error event doesnt throw': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({
-                type: 'event'
-              , name: 'error'
-            })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.equal('1');
-            }
-        );
-      });
-    });
-  },
-
-  'test emitting an event to the server with data': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('woot', function (a, b, c) {
-        a.should.eql('a');
-        b.should.eql(2);
-        c.should.eql([1, 2]);
-
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        messaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({
-                type: 'event'
-              , name: 'woot'
-              , args: ['a', 2, [1, 2]]
-            })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.equal('1');
-            }
-        );
-      });
-    });
-  },
-
-  'test sending undeliverable volatile messages': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        s.volatile.send('woooot');
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-          res.statusCode.should.equal(200);
-          msgs.should.have.length(1);
-          msgs[0].should.eql({ type: 'noop', endpoint: '' });
-        });
-      });
-    });
-  },
-
-  'test sending undeliverable volatile json': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        s.volatile.json.send('woooot');
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-          res.statusCode.should.equal(200);
-          msgs.should.have.length(1);
-          msgs[0].should.eql({ type: 'noop', endpoint: '' });
-        });
-      });
-    });
-  },
-
-  'test sending undeliverable volatile events': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        s.volatile.emit('woooot');
-
-        cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-          res.statusCode.should.equal(200);
-          msgs.should.have.length(1);
-          msgs[0].should.eql({ type: 'noop', endpoint: '' });
-        });
-      });
-    });
-  },
-
-  'test sending deliverable volatile messages': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'message'
-          , data: 'woooot'
-          , endpoint: ''
-        });
-      });
-
-      setTimeout(function () {
-        s.volatile.send('woooot');
-      }, 10);
-    });
-  },
-
-  'test sending deliverable volatile json': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'json'
-          , data: 5
-          , endpoint: ''
-        });
-      });
-
-      setTimeout(function () {
-        s.volatile.json.send(5);
-      }, 10);
-    });
-  },
-
-  'test sending deliverable volatile events': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'event'
-          , name: 'tobi'
-          , args: []
-          , endpoint: ''
-        });
-      });
-
-      setTimeout(function () {
-        s.volatile.json.emit('tobi');
-      }, 10);
-    });
-  },
-
-  'test automatic acknowledgements sent from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , received = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql('woot');
-        received = true;
-      });
-
-      socket.on('disconnect', function () {
-        received.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({
-                type: 'message'
-              , data: 'woot'
-              , id: 1
-              , endpoint: ''
-            })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.should.have.length(1);
-                    msgs[0].should.eql({
-                        type: 'ack'
-                      , ackId: 1
-                      , endpoint: ''
-                      , args: []
-                    });
-                  }
-              );
-            }
-        );
-      });
-
-    });
-  },
-
-  'test manual data acknowledgement sent from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , acknowledged = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (data, fn) {
-        data.should.eql('tobi');
-        fn('woot');
-        acknowledged = true;
-      });
-
-      socket.on('disconnect', function () {
-        acknowledged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'ack'
-          , args: ['woot']
-          , endpoint: ''
-          , ackId: '3'
-        });
-      });
-
-      cl.post(
-          '/socket.io/{protocol}/xhr-polling/' + sid
-        , parser.encodePacket({
-              type: 'message'
-            , data: 'tobi'
-            , ack: 'data'
-            , id: '3'
-          })
-        , function (res, data) {
-            res.statusCode.should.eql(200);
-            data.should.eql('1');
-          }
-      );
-    });
-  },
-
-  'test automatic acknowledgements sent from the client': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , acknowledged = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.send('aaaa', function () {
-        acknowledged = true;
-      });
-
-      socket.on('disconnect', function () {
-        acknowledged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'message'
-          , id: '1'
-          , data: 'aaaa'
-          , ack: true
-          , endpoint: ''
-        });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({
-                type: 'ack'
-              , ackId: '1'
-            })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-            }
-        );
-      });
-    });
-  },
-
-  'test automatic ack with event sent from the client': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , acked = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.emit('woot', 1, 2, '3', function () {
-        acked = true;
-      });
-
-      socket.on('disconnect', function () {
-        acked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'event'
-          , name: 'woot'
-          , args: [1, 2, '3']
-          , id: '1'
-          , ack: true
-          , endpoint: ''
-        });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({
-                type: 'ack'
-              , ackId: '1'
-              , args: []
-              , endpoint: ''
-            })
-        );
-      });
-    });
-  },
-
-  'test manual data ack with event sent from the client': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , acked = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.emit('woot', 1, 2, '3', function (a) {
-        a.should.eql('1');
-        acked = true;
-      });
-
-      socket.on('disconnect', function () {
-        acked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({
-            type: 'event'
-          , name: 'woot'
-          , args: [1, 2, '3']
-          , id: '1'
-          , ack: 'data'
-          , endpoint: ''
-        });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({
-                type: 'ack'
-              , ackId: '1'
-              , args: ['1']
-              , endpoint: ''
-            })
-        );
-      });
-    });
-  },
-
-  'test endpoint sending json from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , received = false;;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        received.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      socket.json.send([1, 2, { 3: 4 }]);
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.should.have.length(2);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-                    msgs[1].should.eql({
-                        type: 'json'
-                      , data: [1, 2, { 3: 4 }]
-                      , endpoint: '/chrislee'
-                    });
-
-                    received = true;
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint sending json to the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false
-      , subMessaged = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        subMessaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/a').on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql(['a', 'b', { c: 'd' }]);
-        subMessaged = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/a' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({
-                      type: 'json'
-                    , endpoint: '/a'
-                    , data: ['a', 'b', { c: 'd' }]
-                  })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint emitting an event from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , received = false;;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        received.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      socket.emit('tj');
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.should.have.length(2);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-                    msgs[1].should.eql({
-                        type: 'event'
-                      , name: 'tj'
-                      , args: []
-                      , endpoint: '/chrislee'
-                    });
-
-                    received = true;
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint emitting an event with data from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , received = false;;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('disconnect', function () {
-        received.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      socket.emit('tj', 1, 2, 3, 4);
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.should.have.length(2);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-                    msgs[1].should.eql({
-                        type: 'event'
-                      , name: 'tj'
-                      , args: [1, 2, 3, 4]
-                      , endpoint: '/chrislee'
-                    });
-
-                    received = true;
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint emitting an event to the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false
-      , subMessaged = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        subMessaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/a').on('connection', function (socket) {
-      socket.on('tj', function () {
-        subMessaged = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/a' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({
-                      type: 'event'
-                    , name: 'tj'
-                    , endpoint: '/a'
-                  })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint emitting an event to the server with data': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false
-      , subMessaged = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        messaged.should.be.false;
-        subMessaged.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    io.of('/a').on('connection', function (socket) {
-      socket.on('tj', function (ferret, age) {
-        ferret.should.eql('tobi');
-        age.should.eql(23);
-        subMessaged = true;
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/a' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({
-                      type: 'event'
-                    , name: 'tj'
-                    , endpoint: '/a'
-                    , args: ['tobi', 23]
-                  })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint sending undeliverable volatile messages': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , empty = false
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        empty.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              s.volatile.send('woot');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.length.should.eql(1);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-                    empty = true;
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint sending undeliverable volatile json': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , empty = false
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        empty.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              s.volatile.json.send(15);
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.length.should.eql(1);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-                    empty = true;
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint sending undeliverable volatile events': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , empty = false
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        empty.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              s.volatile.json.emit('woot');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.length.should.eql(1);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-                    empty = true;
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint sending deliverable volatile messages': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , received = false
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        received.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.should.have.length(1);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-
-                    cl.get(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , function (res, msgs) {
-                          msgs.should.have.length(1);
-                          msgs[0].should.eql({
-                              type: 'message'
-                            , data: 'edwald'
-                            , endpoint: '/chrislee'
-                          });
-
-                          received = true;
-                        }
-                    );
-
-                    setTimeout(function () {
-                      s.volatile.send('edwald');
-                    }, 20);
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint sending deliverable volatile json': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , received = false
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        received.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.should.have.length(1);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-
-                    cl.get(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , function (res, msgs) {
-                          msgs.should.have.length(1);
-                          msgs[0].should.eql({
-                              type: 'json'
-                            , data: 152
-                            , endpoint: '/chrislee'
-                          });
-
-                          received = true;
-                        }
-                    );
-
-                    setTimeout(function () {
-                      s.volatile.json.send(152);
-                    }, 20);
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint sending deliverable volatile events': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , received = false
-      , s;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/chrislee').on('connection', function (socket) {
-      s = socket;
-
-      socket.on('disconnect', function () {
-        received.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/chrislee' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.should.have.length(1);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/chrislee'
-                      , qs: ''
-                    });
-
-                    cl.get(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , function (res, msgs) {
-                          msgs.should.have.length(1);
-                          msgs[0].should.eql({
-                              type: 'event'
-                            , name: 'woooo'
-                            , args: [[1, 2]]
-                            , endpoint: '/chrislee'
-                          });
-
-                          received = true;
-                        }
-                    );
-
-                    setTimeout(function () {
-                      s.volatile.emit('woooo', [1, 2]);
-                    }, 20);
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint automatic acks sent from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false
-      , acked = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/tobi').on('connection', function (socket) {
-      socket.on('message', function (msg) {
-        msg.should.eql('woot');
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        acked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/tobi' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({
-                      type: 'message'
-                    , id: '3'
-                    , data: 'woot'
-                    , endpoint: '/tobi'
-                  })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-
-                    cl.get(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , function (res, msgs) {
-                          res.statusCode.should.eql(200);
-                          msgs.should.have.length(2);
-                          msgs[0].should.eql({
-                              type: 'connect'
-                            , endpoint: '/tobi'
-                            , qs: ''
-                          });
-                          msgs[1].should.eql({
-                              type: 'ack'
-                            , ackId: '3'
-                            , endpoint: '/tobi'
-                            , args: []
-                          });
-
-                          acked = true;
-                        }
-                    );
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint manual data ack sent from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false
-      , acked = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/tobi').on('connection', function (socket) {
-      socket.on('message', function (msg, fn) {
-        msg.should.eql('woot');
-        fn();
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        acked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/tobi' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({
-                      type: 'message'
-                    , id: '3'
-                    , data: 'woot'
-                    , ack: 'data'
-                    , endpoint: '/tobi'
-                  })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-
-                    cl.get(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , function (res, msgs) {
-                          res.statusCode.should.eql(200);
-                          msgs.should.have.length(2);
-                          msgs[0].should.eql({
-                              type: 'connect'
-                            , endpoint: '/tobi'
-                            , qs: ''
-                          });
-                          msgs[1].should.eql({
-                              type: 'ack'
-                            , ackId: '3'
-                            , args: []
-                            , endpoint: '/tobi'
-                          });
-
-                          acked = true;
-                        }
-                    );
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint manual data event ack sent from the server': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false
-      , acked = false;
-
-    io.configure(function () {
-      io.set('polling duration', 0);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/tobi').on('connection', function (socket) {
-      socket.on('woot', function (msg, fn) {
-        msg.should.eql(1);
-        fn('aaaa');
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        acked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, data) {
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/tobi' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.post(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , parser.encodePacket({
-                      type: 'event'
-                    , id: '3'
-                    , name: 'woot'
-                    , ack: 'data'
-                    , args: [1]
-                    , endpoint: '/tobi'
-                  })
-                , function (res, data) {
-                    res.statusCode.should.eql(200);
-                    data.should.eql('1');
-
-                    cl.get(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , function (res, msgs) {
-                          res.statusCode.should.eql(200);
-                          msgs.should.have.length(2);
-                          msgs[0].should.eql({
-                              type: 'connect'
-                            , endpoint: '/tobi'
-                            , qs: ''
-                          });
-                          msgs[1].should.eql({
-                              type: 'ack'
-                            , ackId: '3'
-                            , args: ['aaaa']
-                            , endpoint: '/tobi'
-                          });
-
-                          acked = true;
-                        }
-                    );
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint acknowledgements sent from the client': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , acked = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/woot').on('connection', function (socket) {
-      socket.send('aaa', function () {
-        acked = true;
-      });
-
-      socket.on('disconnect', function () {
-        acked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.eql(200);
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/woot' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    msgs.should.have.length(2);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/woot'
-                      , qs: ''
-                    });
-                    msgs[1].should.eql({
-                        type: 'message'
-                      , data: 'aaa'
-                      , endpoint: '/woot'
-                      , id: '1'
-                      , ack: true
-                    });
-
-                    cl.post(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , parser.encodePacket({
-                            type: 'ack'
-                          , ackId: '1'
-                          , endpoint: '/woot'
-                        })
-                      , function (res, data) {
-                          res.statusCode.should.eql(200);
-                          data.should.eql('1');
-                        }
-                    );
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test endpoint manual data event acks sent from the client': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , acked = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.of('/rapture').on('connection', function (socket) {
-      socket.emit('woot', 'a', function (a, b, c) {
-        a.should.eql(5);
-        b.should.eql('hello');
-        c.should.eql([1, 2, 3]);
-
-        acked = true;
-      });
-
-      socket.on('disconnect', function () {
-        acked.should.be.true;
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, msgs) {
-        res.statusCode.should.equal(200);
-        msgs.should.have.length(1);
-        msgs[0].should.eql({ type: 'noop', endpoint: '' });
-
-        cl.post(
-            '/socket.io/{protocol}/xhr-polling/' + sid
-          , parser.encodePacket({ type: 'connect', endpoint: '/rapture' })
-          , function (res, data) {
-              res.statusCode.should.eql(200);
-              data.should.eql('1');
-
-              cl.get(
-                  '/socket.io/{protocol}/xhr-polling/' + sid
-                , function (res, msgs) {
-                    res.statusCode.should.eql(200);
-                    msgs.should.have.length(2);
-                    msgs[0].should.eql({
-                        type: 'connect'
-                      , endpoint: '/rapture'
-                      , qs: ''
-                    });
-                    msgs[1].should.eql({
-                        type: 'event'
-                      , id: '1'
-                      , name: 'woot'
-                      , args: ['a']
-                      , ack: 'data'
-                      , endpoint: '/rapture'
-                    });
-
-                    cl.post(
-                        '/socket.io/{protocol}/xhr-polling/' + sid
-                      , parser.encodePacket({
-                            type: 'ack'
-                          , ackId: '1'
-                          , args: [5, 'hello', [1, 2, 3]]
-                          , endpoint: '/rapture'
-                        })
-                      , function (res, data) {
-                          res.statusCode.should.eql(200);
-                          data.should.eql('1');
-                        }
-                    );
-                  }
-              );
-            }
-        );
-      });
-    });
-  },
-
-  'test CORS': function (done) {
-    var cl = client(++ports)
-      , io = create(cl)
-      , messaged = false;
-
-    io.configure(function () {
-      io.set('polling duration', .05);
-      io.set('close timeout', .05);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.send('woot');
-
-      socket.on('message', function (msg) {
-        msg.should.equal('woot');
-        messaged = true;
-      });
-
-      socket.on('disconnect', function () {
-        cl.end();
-        io.server.close();
-        done();
-      });
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, {
-        headers: {
-          Origin: 'http://localhost:3500'
-        }
-      }, function (res, packs) {
-        var headers = res.headers;
-
-        headers['access-control-allow-origin'].should.equal('*');
-        should.strictEqual(headers['access-control-allow-credentials'], undefined);
-
-        packs.should.have.length(1);
-        packs[0].type.should.eql('message');
-        packs[0].data.should.eql('woot');
-
-        cl.post('/socket.io/{protocol}/xhr-polling/' + sid, parser.encodePacket({
-            type: 'message'
-          , data: 'woot'
-        }), {
-          headers: {
-              Origin: 'http://localhost:3500'
-            , Cookie: 'woot=woot'
-          }
-        }, function (res, data) {
-          var headers = res.headers;
-          headers['access-control-allow-origin'].should.equal('*');
-          headers['access-control-allow-credentials'].should.equal('true');
-
-          data.should.equal('1');
-        });
-      });
-    });
-  },
-
-  'test emitting to closed clients': function (done) {
-    var cl = client(++ports)
-      , cl2 = client(ports)
-      , io = create(cl)
-      , connections = 0;
-
-    io.configure(function () {
-      io.set('close timeout', .1);
-    });
-
-    io.sockets.on('connection', function (socket) {
-      socket.send('a');
-    });
-
-    cl.handshake(function (sid) {
-      cl.get('/socket.io/{protocol}/xhr-polling/' + sid, function (res, packs) {
-        res.statusCode.should.equal(200);
-        packs.should.have.length(1);
-        packs[0].should.eql({ type: 'message', endpoint: '', data: 'a' });
-
-        cl2.handshake(function (sid2) {
-          cl2.get(
-              '/socket.io/{protocol}/xhr-polling/' + sid2
-            , function (res, packs) {
-                res.statusCode.should.equal(200);
-                packs.should.have.length(1);
-                packs[0].should.eql({ type: 'message', endpoint: '', data: 'a' });
-
-                io.sockets.emit('woot', 'b');
-
-                var total = 2;
-
-                cl.get(
-                    '/socket.io/{protocol}/xhr-polling/' + sid
-                  , function (res, packs) {
-                      res.statusCode.should.equal(200);
-                      packs.should.have.length(1);
-                      packs[0].should.eql({
-                          type: 'event'
-                        , endpoint: ''
-                        , name: 'woot'
-                        , args: ['b']
-                      });
-
-                      --total || finish();
-                    }
-                );
-
-                cl2.get(
-                    '/socket.io/{protocol}/xhr-polling/' + sid2
-                  , function (res, packs) {
-                      res.statusCode.should.equal(200);
-                      packs.should.have.length(1);
-                      packs[0].should.eql({
-                          type: 'event'
-                        , endpoint: ''
-                        , name: 'woot'
-                        , args: ['b']
-                      });
-
-                      --total || finish();
-                    }
-                );
-
-                function finish () {
-                  cl.end();
-                  cl2.end();
-                  io.server.close();
-                  done();
-                };
-              }
-          );
-        });
-        
-      });
-    });
-  }
-
-};
diff --git a/node/node_modules/uglify-js/.gitignore b/node/node_modules/uglify-js/.gitignore
deleted file mode 100644 (file)
index d97eaa0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-.DS_Store
-.tmp*~
-*.local.*
-.pinf-*
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/README.html b/node/node_modules/uglify-js/README.html
deleted file mode 100644 (file)
index bd69e63..0000000
+++ /dev/null
@@ -1,888 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-lang="en" xml:lang="en">
-<head>
-<title>UglifyJS -- a JavaScript parser/compressor/beautifier</title>
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
-<meta name="generator" content="Org-mode"/>
-<meta name="generated" content="2011-08-20 10:08:28 EEST"/>
-<meta name="author" content="Mihai Bazon"/>
-<meta name="description" content="a JavaScript parser/compressor/beautifier in JavaScript"/>
-<meta name="keywords" content="javascript, js, parser, compiler, compressor, mangle, minify, minifier"/>
-<style type="text/css">
- <!--/*--><![CDATA[/*><!--*/
-  html { font-family: Times, serif; font-size: 12pt; }
-  .title  { text-align: center; }
-  .todo   { color: red; }
-  .done   { color: green; }
-  .tag    { background-color: #add8e6; font-weight:normal }
-  .target { }
-  .timestamp { color: #bebebe; }
-  .timestamp-kwd { color: #5f9ea0; }
-  p.verse { margin-left: 3% }
-  pre {
-       border: 1pt solid #AEBDCC;
-       background-color: #F3F5F7;
-       padding: 5pt;
-       font-family: courier, monospace;
-        font-size: 90%;
-        overflow:auto;
-  }
-  table { border-collapse: collapse; }
-  td, th { vertical-align: top; }
-  dt { font-weight: bold; }
-  div.figure { padding: 0.5em; }
-  div.figure p { text-align: center; }
-  textarea { overflow-x: auto; }
-  .linenr { font-size:smaller }
-  .code-highlighted {background-color:#ffff00;}
-  .org-info-js_info-navigation { border-style:none; }
-  #org-info-js_console-label { font-size:10px; font-weight:bold;
-                               white-space:nowrap; }
-  .org-info-js_search-highlight {background-color:#ffff00; color:#000000;
-                                 font-weight:bold; }
-  /*]]>*/-->
-</style>
-<link rel="stylesheet" type="text/css" href="docstyle.css" />
-<script type="text/javascript">
-<!--/*--><![CDATA[/*><!--*/
- function CodeHighlightOn(elem, id)
- {
-   var target = document.getElementById(id);
-   if(null != target) {
-     elem.cacheClassElem = elem.className;
-     elem.cacheClassTarget = target.className;
-     target.className = "code-highlighted";
-     elem.className   = "code-highlighted";
-   }
- }
- function CodeHighlightOff(elem, id)
- {
-   var target = document.getElementById(id);
-   if(elem.cacheClassElem)
-     elem.className = elem.cacheClassElem;
-   if(elem.cacheClassTarget)
-     target.className = elem.cacheClassTarget;
- }
-/*]]>*///-->
-</script>
-
-</head>
-<body>
-<div id="content">
-
-<h1 class="title">UglifyJS &ndash; a JavaScript parser/compressor/beautifier</h1>
-
-
-<div id="table-of-contents">
-<h2>Table of Contents</h2>
-<div id="text-table-of-contents">
-<ul>
-<li><a href="#sec-1">1 UglifyJS &mdash; a JavaScript parser/compressor/beautifier </a>
-<ul>
-<li><a href="#sec-1_1">1.1 Unsafe transformations </a>
-<ul>
-<li><a href="#sec-1_1_1">1.1.1 Calls involving the global Array constructor </a></li>
-<li><a href="#sec-1_1_2">1.1.2 <code>obj.toString()</code> ==&gt; <code>obj+“”</code> </a></li>
-</ul>
-</li>
-<li><a href="#sec-1_2">1.2 Install (NPM) </a></li>
-<li><a href="#sec-1_3">1.3 Install latest code from GitHub </a></li>
-<li><a href="#sec-1_4">1.4 Usage </a>
-<ul>
-<li><a href="#sec-1_4_1">1.4.1 API </a></li>
-<li><a href="#sec-1_4_2">1.4.2 Beautifier shortcoming &ndash; no more comments </a></li>
-</ul>
-</li>
-<li><a href="#sec-1_5">1.5 Compression &ndash; how good is it? </a></li>
-<li><a href="#sec-1_6">1.6 Bugs? </a></li>
-<li><a href="#sec-1_7">1.7 Links </a></li>
-<li><a href="#sec-1_8">1.8 License </a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-
-<div id="outline-container-1" class="outline-2">
-<h2 id="sec-1"><span class="section-number-2">1</span> UglifyJS &mdash; a JavaScript parser/compressor/beautifier </h2>
-<div class="outline-text-2" id="text-1">
-
-
-<p>
-This package implements a general-purpose JavaScript
-parser/compressor/beautifier toolkit.  It is developed on <a href="http://nodejs.org/">NodeJS</a>, but it
-should work on any JavaScript platform supporting the CommonJS module system
-(and if your platform of choice doesn't support CommonJS, you can easily
-implement it, or discard the <code>exports.*</code> lines from UglifyJS sources).
-</p>
-<p>
-The tokenizer/parser generates an abstract syntax tree from JS code.  You
-can then traverse the AST to learn more about the code, or do various
-manipulations on it.  This part is implemented in <a href="../lib/parse-js.js">parse-js.js</a> and it's a
-port to JavaScript of the excellent <a href="http://marijn.haverbeke.nl/parse-js/">parse-js</a> Common Lisp library from <a href="http://marijn.haverbeke.nl/">Marijn Haverbeke</a>.
-</p>
-<p>
-( See <a href="http://github.com/mishoo/cl-uglify-js">cl-uglify-js</a> if you're looking for the Common Lisp version of
-UglifyJS. )
-</p>
-<p>
-The second part of this package, implemented in <a href="../lib/process.js">process.js</a>, inspects and
-manipulates the AST generated by the parser to provide the following:
-</p>
-<ul>
-<li>
-ability to re-generate JavaScript code from the AST.  Optionally
-indented&mdash;you can use this if you want to “beautify” a program that has
-been compressed, so that you can inspect the source.  But you can also run
-our code generator to print out an AST without any whitespace, so you
-achieve compression as well.
-
-</li>
-<li>
-shorten variable names (usually to single characters).  Our mangler will
-analyze the code and generate proper variable names, depending on scope
-and usage, and is smart enough to deal with globals defined elsewhere, or
-with <code>eval()</code> calls or <code>with{}</code> statements.  In short, if <code>eval()</code> or
-<code>with{}</code> are used in some scope, then all variables in that scope and any
-variables in the parent scopes will remain unmangled, and any references
-to such variables remain unmangled as well.
-
-</li>
-<li>
-various small optimizations that may lead to faster code but certainly
-lead to smaller code.  Where possible, we do the following:
-
-<ul>
-<li>
-foo["bar"]  ==&gt;  foo.bar
-
-</li>
-<li>
-remove block brackets <code>{}</code>
-
-</li>
-<li>
-join consecutive var declarations:
-var a = 10; var b = 20; ==&gt; var a=10,b=20;
-
-</li>
-<li>
-resolve simple constant expressions: 1 +2 * 3 ==&gt; 7.  We only do the
-replacement if the result occupies less bytes; for example 1/3 would
-translate to 0.333333333333, so in this case we don't replace it.
-
-</li>
-<li>
-consecutive statements in blocks are merged into a sequence; in many
-cases, this leaves blocks with a single statement, so then we can remove
-the block brackets.
-
-</li>
-<li>
-various optimizations for IF statements:
-
-<ul>
-<li>
-if (foo) bar(); else baz(); ==&gt; foo?bar():baz();
-</li>
-<li>
-if (!foo) bar(); else baz(); ==&gt; foo?baz():bar();
-</li>
-<li>
-if (foo) bar(); ==&gt; foo&amp;&amp;bar();
-</li>
-<li>
-if (!foo) bar(); ==&gt; foo||bar();
-</li>
-<li>
-if (foo) return bar(); else return baz(); ==&gt; return foo?bar():baz();
-</li>
-<li>
-if (foo) return bar(); else something(); ==&gt; {if(foo)return bar();something()}
-
-</li>
-</ul>
-</li>
-<li>
-remove some unreachable code and warn about it (code that follows a
-<code>return</code>, <code>throw</code>, <code>break</code> or <code>continue</code> statement, except
-function/variable declarations).
-</li>
-</ul>
-</li>
-</ul>
-
-
-
-</div>
-
-<div id="outline-container-1_1" class="outline-3">
-<h3 id="sec-1_1"><span class="section-number-3">1.1</span> <span class="target">Unsafe transformations</span>  </h3>
-<div class="outline-text-3" id="text-1_1">
-
-
-<p>
-The following transformations can in theory break code, although they're
-probably safe in most practical cases.  To enable them you need to pass the
-<code>--unsafe</code> flag.
-</p>
-
-</div>
-
-<div id="outline-container-1_1_1" class="outline-4">
-<h4 id="sec-1_1_1"><span class="section-number-4">1.1.1</span> Calls involving the global Array constructor </h4>
-<div class="outline-text-4" id="text-1_1_1">
-
-
-<p>
-The following transformations occur:
-</p>
-
-
-
-<pre class="src src-js"><span style="color: #a020f0;">new</span> <span style="color: #228b22;">Array</span>(1, 2, 3, 4)  =&gt; [1,2,3,4]
-Array(a, b, c)         =&gt; [a,b,c]
-<span style="color: #a020f0;">new</span> <span style="color: #228b22;">Array</span>(5)           =&gt; Array(5)
-<span style="color: #a020f0;">new</span> <span style="color: #228b22;">Array</span>(a)           =&gt; Array(a)
-</pre>
-
-
-
-<p>
-These are all safe if the Array name isn't redefined.  JavaScript does allow
-one to globally redefine Array (and pretty much everything, in fact) but I
-personally don't see why would anyone do that.
-</p>
-<p>
-UglifyJS does handle the case where Array is redefined locally, or even
-globally but with a <code>function</code> or <code>var</code> declaration.  Therefore, in the
-following cases UglifyJS <b>doesn't touch</b> calls or instantiations of Array:
-</p>
-
-
-
-<pre class="src src-js"><span style="color: #b22222;">// </span><span style="color: #b22222;">case 1.  globally declared variable
-</span>  <span style="color: #a020f0;">var</span> <span style="color: #b8860b;">Array</span>;
-  <span style="color: #a020f0;">new</span> <span style="color: #228b22;">Array</span>(1, 2, 3);
-  Array(a, b);
-
-  <span style="color: #b22222;">// </span><span style="color: #b22222;">or (can be declared later)
-</span>  <span style="color: #a020f0;">new</span> <span style="color: #228b22;">Array</span>(1, 2, 3);
-  <span style="color: #a020f0;">var</span> <span style="color: #b8860b;">Array</span>;
-
-  <span style="color: #b22222;">// </span><span style="color: #b22222;">or (can be a function)
-</span>  <span style="color: #a020f0;">new</span> <span style="color: #228b22;">Array</span>(1, 2, 3);
-  <span style="color: #a020f0;">function</span> <span style="color: #0000ff;">Array</span>() { ... }
-
-<span style="color: #b22222;">// </span><span style="color: #b22222;">case 2.  declared in a function
-</span>  (<span style="color: #a020f0;">function</span>(){
-    a = <span style="color: #a020f0;">new</span> <span style="color: #228b22;">Array</span>(1, 2, 3);
-    b = Array(5, 6);
-    <span style="color: #a020f0;">var</span> <span style="color: #b8860b;">Array</span>;
-  })();
-
-  <span style="color: #b22222;">// </span><span style="color: #b22222;">or
-</span>  (<span style="color: #a020f0;">function</span>(<span style="color: #b8860b;">Array</span>){
-    <span style="color: #a020f0;">return</span> Array(5, 6, 7);
-  })();
-
-  <span style="color: #b22222;">// </span><span style="color: #b22222;">or
-</span>  (<span style="color: #a020f0;">function</span>(){
-    <span style="color: #a020f0;">return</span> <span style="color: #a020f0;">new</span> <span style="color: #228b22;">Array</span>(1, 2, 3, 4);
-    <span style="color: #a020f0;">function</span> <span style="color: #0000ff;">Array</span>() { ... }
-  })();
-
-  <span style="color: #b22222;">// </span><span style="color: #b22222;">etc.
-</span></pre>
-
-
-
-</div>
-
-</div>
-
-<div id="outline-container-1_1_2" class="outline-4">
-<h4 id="sec-1_1_2"><span class="section-number-4">1.1.2</span> <code>obj.toString()</code> ==&gt; <code>obj+“”</code> </h4>
-<div class="outline-text-4" id="text-1_1_2">
-
-
-</div>
-</div>
-
-</div>
-
-<div id="outline-container-1_2" class="outline-3">
-<h3 id="sec-1_2"><span class="section-number-3">1.2</span> Install (NPM) </h3>
-<div class="outline-text-3" id="text-1_2">
-
-
-<p>
-UglifyJS is now available through NPM &mdash; <code>npm install uglify-js</code> should do
-the job.
-</p>
-</div>
-
-</div>
-
-<div id="outline-container-1_3" class="outline-3">
-<h3 id="sec-1_3"><span class="section-number-3">1.3</span> Install latest code from GitHub </h3>
-<div class="outline-text-3" id="text-1_3">
-
-
-
-
-
-<pre class="src src-sh"><span style="color: #b22222;">## </span><span style="color: #b22222;">clone the repository
-</span>mkdir -p /where/you/wanna/put/it
-<span style="color: #da70d6;">cd</span> /where/you/wanna/put/it
-git clone git://github.com/mishoo/UglifyJS.git
-
-<span style="color: #b22222;">## </span><span style="color: #b22222;">make the module available to Node
-</span>mkdir -p ~/.node_libraries/
-<span style="color: #da70d6;">cd</span> ~/.node_libraries/
-ln -s /where/you/wanna/put/it/UglifyJS/uglify-js.js
-
-<span style="color: #b22222;">## </span><span style="color: #b22222;">and if you want the CLI script too:
-</span>mkdir -p ~/bin
-<span style="color: #da70d6;">cd</span> ~/bin
-ln -s /where/you/wanna/put/it/UglifyJS/bin/uglifyjs
-  <span style="color: #b22222;"># </span><span style="color: #b22222;">(then add ~/bin to your $PATH if it's not there already)
-</span></pre>
-
-
-
-</div>
-
-</div>
-
-<div id="outline-container-1_4" class="outline-3">
-<h3 id="sec-1_4"><span class="section-number-3">1.4</span> Usage </h3>
-<div class="outline-text-3" id="text-1_4">
-
-
-<p>
-There is a command-line tool that exposes the functionality of this library
-for your shell-scripting needs:
-</p>
-
-
-
-<pre class="src src-sh">uglifyjs [ options... ] [ filename ]
-</pre>
-
-
-
-<p>
-<code>filename</code> should be the last argument and should name the file from which
-to read the JavaScript code.  If you don't specify it, it will read code
-from STDIN.
-</p>
-<p>
-Supported options:
-</p>
-<ul>
-<li>
-<code>-b</code> or <code>--beautify</code> &mdash; output indented code; when passed, additional
-options control the beautifier:
-
-<ul>
-<li>
-<code>-i N</code> or <code>--indent N</code> &mdash; indentation level (number of spaces)
-
-</li>
-<li>
-<code>-q</code> or <code>--quote-keys</code> &mdash; quote keys in literal objects (by default,
-only keys that cannot be identifier names will be quotes).
-
-</li>
-</ul>
-</li>
-<li>
-<code>--ascii</code> &mdash; pass this argument to encode non-ASCII characters as
-<code>\uXXXX</code> sequences.  By default UglifyJS won't bother to do it and will
-output Unicode characters instead.  (the output is always encoded in UTF8,
-but if you pass this option you'll only get ASCII).
-
-</li>
-<li>
-<code>-nm</code> or <code>--no-mangle</code> &mdash; don't mangle variable names
-
-</li>
-<li>
-<code>-ns</code> or <code>--no-squeeze</code> &mdash; don't call <code>ast_squeeze()</code> (which does various
-optimizations that result in smaller, less readable code).
-
-</li>
-<li>
-<code>-mt</code> or <code>--mangle-toplevel</code> &mdash; mangle names in the toplevel scope too
-(by default we don't do this).
-
-</li>
-<li>
-<code>--no-seqs</code> &mdash; when <code>ast_squeeze()</code> is called (thus, unless you pass
-<code>--no-squeeze</code>) it will reduce consecutive statements in blocks into a
-sequence.  For example, "a = 10; b = 20; foo();" will be written as
-"a=10,b=20,foo();".  In various occasions, this allows us to discard the
-block brackets (since the block becomes a single statement).  This is ON
-by default because it seems safe and saves a few hundred bytes on some
-libs that I tested it on, but pass <code>--no-seqs</code> to disable it.
-
-</li>
-<li>
-<code>--no-dead-code</code> &mdash; by default, UglifyJS will remove code that is
-obviously unreachable (code that follows a <code>return</code>, <code>throw</code>, <code>break</code> or
-<code>continue</code> statement and is not a function/variable declaration).  Pass
-this option to disable this optimization.
-
-</li>
-<li>
-<code>-nc</code> or <code>--no-copyright</code> &mdash; by default, <code>uglifyjs</code> will keep the initial
-comment tokens in the generated code (assumed to be copyright information
-etc.).  If you pass this it will discard it.
-
-</li>
-<li>
-<code>-o filename</code> or <code>--output filename</code> &mdash; put the result in <code>filename</code>.  If
-this isn't given, the result goes to standard output (or see next one).
-
-</li>
-<li>
-<code>--overwrite</code> &mdash; if the code is read from a file (not from STDIN) and you
-pass <code>--overwrite</code> then the output will be written in the same file.
-
-</li>
-<li>
-<code>--ast</code> &mdash; pass this if you want to get the Abstract Syntax Tree instead
-of JavaScript as output.  Useful for debugging or learning more about the
-internals.
-
-</li>
-<li>
-<code>-v</code> or <code>--verbose</code> &mdash; output some notes on STDERR (for now just how long
-each operation takes).
-
-</li>
-<li>
-<code>--unsafe</code> &mdash; enable other additional optimizations that are known to be
-unsafe in some contrived situations, but could still be generally useful.
-For now only this:
-
-<ul>
-<li>
-foo.toString()  ==&gt;  foo+""
-
-</li>
-</ul>
-</li>
-<li>
-<code>--max-line-len</code> (default 32K characters) &mdash; add a newline after around
-32K characters.  I've seen both FF and Chrome croak when all the code was
-on a single line of around 670K.  Pass &ndash;max-line-len 0 to disable this
-safety feature.
-
-</li>
-<li>
-<code>--reserved-names</code> &mdash; some libraries rely on certain names to be used, as
-pointed out in issue #92 and #81, so this option allow you to exclude such
-names from the mangler.  For example, to keep names <code>require</code> and <code>$super</code>
-intact you'd specify &ndash;reserved-names "require,$super".
-
-</li>
-<li>
-<code>--inline-script</code> &ndash; when you want to include the output literally in an
-HTML <code>&lt;script&gt;</code> tag you can use this option to prevent <code>&lt;/script</code> from
-showing up in the output.
-
-</li>
-<li>
-<code>--lift-vars</code> &ndash; when you pass this, UglifyJS will apply the following
-transformations (see the notes in API, <code>ast_lift_variables</code>):
-
-<ul>
-<li>
-put all <code>var</code> declarations at the start of the scope
-</li>
-<li>
-make sure a variable is declared only once
-</li>
-<li>
-discard unused function arguments
-</li>
-<li>
-discard unused inner (named) functions
-</li>
-<li>
-finally, try to merge assignments into that one <code>var</code> declaration, if
-possible.
-</li>
-</ul>
-</li>
-</ul>
-
-
-
-</div>
-
-<div id="outline-container-1_4_1" class="outline-4">
-<h4 id="sec-1_4_1"><span class="section-number-4">1.4.1</span> API </h4>
-<div class="outline-text-4" id="text-1_4_1">
-
-
-<p>
-To use the library from JavaScript, you'd do the following (example for
-NodeJS):
-</p>
-
-
-
-<pre class="src src-js"><span style="color: #a020f0;">var</span> <span style="color: #b8860b;">jsp</span> = require(<span style="color: #bc8f8f;">"uglify-js"</span>).parser;
-<span style="color: #a020f0;">var</span> <span style="color: #b8860b;">pro</span> = require(<span style="color: #bc8f8f;">"uglify-js"</span>).uglify;
-
-<span style="color: #a020f0;">var</span> <span style="color: #b8860b;">orig_code</span> = <span style="color: #bc8f8f;">"... JS code here"</span>;
-<span style="color: #a020f0;">var</span> <span style="color: #b8860b;">ast</span> = jsp.parse(orig_code); <span style="color: #b22222;">// </span><span style="color: #b22222;">parse code and get the initial AST
-</span>ast = pro.ast_mangle(ast); <span style="color: #b22222;">// </span><span style="color: #b22222;">get a new AST with mangled names
-</span>ast = pro.ast_squeeze(ast); <span style="color: #b22222;">// </span><span style="color: #b22222;">get an AST with compression optimizations
-</span><span style="color: #a020f0;">var</span> <span style="color: #b8860b;">final_code</span> = pro.gen_code(ast); <span style="color: #b22222;">// </span><span style="color: #b22222;">compressed code here
-</span></pre>
-
-
-
-<p>
-The above performs the full compression that is possible right now.  As you
-can see, there are a sequence of steps which you can apply.  For example if
-you want compressed output but for some reason you don't want to mangle
-variable names, you would simply skip the line that calls
-<code>pro.ast_mangle(ast)</code>.
-</p>
-<p>
-Some of these functions take optional arguments.  Here's a description:
-</p>
-<ul>
-<li>
-<code>jsp.parse(code, strict_semicolons)</code> &ndash; parses JS code and returns an AST.
-<code>strict_semicolons</code> is optional and defaults to <code>false</code>.  If you pass
-<code>true</code> then the parser will throw an error when it expects a semicolon and
-it doesn't find it.  For most JS code you don't want that, but it's useful
-if you want to strictly sanitize your code.
-
-</li>
-<li>
-<code>pro.ast_lift_variables(ast)</code> &ndash; merge and move <code>var</code> declarations to the
-scop of the scope; discard unused function arguments or variables; discard
-unused (named) inner functions.  It also tries to merge assignments
-following the <code>var</code> declaration into it.
-
-<p>
-If your code is very hand-optimized concerning <code>var</code> declarations, this
-lifting variable declarations might actually increase size.  For me it
-helps out.  On jQuery it adds 865 bytes (243 after gzip).  YMMV.  Also
-note that (since it's not enabled by default) this operation isn't yet
-heavily tested (please report if you find issues!).
-</p>
-<p>
-Note that although it might increase the image size (on jQuery it gains
-865 bytes, 243 after gzip) it's technically more correct: in certain
-situations, dead code removal might drop variable declarations, which
-would not happen if the variables are lifted in advance.
-</p>
-<p>
-Here's an example of what it does:
-</p>
-</li>
-</ul>
-
-
-
-
-<pre class="src src-js"><span style="color: #a020f0;">function</span> <span style="color: #0000ff;">f</span>(<span style="color: #b8860b;">a</span>, <span style="color: #b8860b;">b</span>, <span style="color: #b8860b;">c</span>, <span style="color: #b8860b;">d</span>, <span style="color: #b8860b;">e</span>) {
-    <span style="color: #a020f0;">var</span> <span style="color: #b8860b;">q</span>;
-    <span style="color: #a020f0;">var</span> <span style="color: #b8860b;">w</span>;
-    w = 10;
-    q = 20;
-    <span style="color: #a020f0;">for</span> (<span style="color: #a020f0;">var</span> <span style="color: #b8860b;">i</span> = 1; i &lt; 10; ++i) {
-        <span style="color: #a020f0;">var</span> <span style="color: #b8860b;">boo</span> = foo(a);
-    }
-    <span style="color: #a020f0;">for</span> (<span style="color: #a020f0;">var</span> <span style="color: #b8860b;">i</span> = 0; i &lt; 1; ++i) {
-        <span style="color: #a020f0;">var</span> <span style="color: #b8860b;">boo</span> = bar(c);
-    }
-    <span style="color: #a020f0;">function</span> <span style="color: #0000ff;">foo</span>(){ ... }
-    <span style="color: #a020f0;">function</span> <span style="color: #0000ff;">bar</span>(){ ... }
-    <span style="color: #a020f0;">function</span> <span style="color: #0000ff;">baz</span>(){ ... }
-}
-
-<span style="color: #b22222;">// </span><span style="color: #b22222;">transforms into ==&gt;
-</span>
-<span style="color: #a020f0;">function</span> <span style="color: #0000ff;">f</span>(<span style="color: #b8860b;">a</span>, <span style="color: #b8860b;">b</span>, <span style="color: #b8860b;">c</span>) {
-    <span style="color: #a020f0;">var</span> <span style="color: #b8860b;">i</span>, <span style="color: #b8860b;">boo</span>, <span style="color: #b8860b;">w</span> = 10, <span style="color: #b8860b;">q</span> = 20;
-    <span style="color: #a020f0;">for</span> (i = 1; i &lt; 10; ++i) {
-        boo = foo(a);
-    }
-    <span style="color: #a020f0;">for</span> (i = 0; i &lt; 1; ++i) {
-        boo = bar(c);
-    }
-    <span style="color: #a020f0;">function</span> <span style="color: #0000ff;">foo</span>() { ... }
-    <span style="color: #a020f0;">function</span> <span style="color: #0000ff;">bar</span>() { ... }
-}
-</pre>
-
-
-
-<ul>
-<li>
-<code>pro.ast_mangle(ast, options)</code> &ndash; generates a new AST containing mangled
-(compressed) variable and function names.  It supports the following
-options:
-
-<ul>
-<li>
-<code>toplevel</code> &ndash; mangle toplevel names (by default we don't touch them).
-</li>
-<li>
-<code>except</code> &ndash; an array of names to exclude from compression.
-
-</li>
-</ul>
-</li>
-<li>
-<code>pro.ast_squeeze(ast, options)</code> &ndash; employs further optimizations designed
-to reduce the size of the code that <code>gen_code</code> would generate from the
-AST.  Returns a new AST.  <code>options</code> can be a hash; the supported options
-are:
-
-<ul>
-<li>
-<code>make_seqs</code> (default true) which will cause consecutive statements in a
-block to be merged using the "sequence" (comma) operator
-
-</li>
-<li>
-<code>dead_code</code> (default true) which will remove unreachable code.
-
-</li>
-</ul>
-</li>
-<li>
-<code>pro.gen_code(ast, options)</code> &ndash; generates JS code from the AST.  By
-default it's minified, but using the <code>options</code> argument you can get nicely
-formatted output.  <code>options</code> is, well, optional :-) and if you pass it it
-must be an object and supports the following properties (below you can see
-the default values):
-
-<ul>
-<li>
-<code>beautify: false</code> &ndash; pass <code>true</code> if you want indented output
-</li>
-<li>
-<code>indent_start: 0</code> (only applies when <code>beautify</code> is <code>true</code>) &ndash; initial
-indentation in spaces
-</li>
-<li>
-<code>indent_level: 4</code> (only applies when <code>beautify</code> is <code>true</code>) --
-indentation level, in spaces (pass an even number)
-</li>
-<li>
-<code>quote_keys: false</code> &ndash; if you pass <code>true</code> it will quote all keys in
-literal objects
-</li>
-<li>
-<code>space_colon: false</code> (only applies when <code>beautify</code> is <code>true</code>) &ndash; wether
-to put a space before the colon in object literals
-</li>
-<li>
-<code>ascii_only: false</code> &ndash; pass <code>true</code> if you want to encode non-ASCII
-characters as <code>\uXXXX</code>.
-</li>
-<li>
-<code>inline_script: false</code> &ndash; pass <code>true</code> to escape occurrences of
-<code>&lt;/script</code> in strings
-</li>
-</ul>
-</li>
-</ul>
-
-
-</div>
-
-</div>
-
-<div id="outline-container-1_4_2" class="outline-4">
-<h4 id="sec-1_4_2"><span class="section-number-4">1.4.2</span> Beautifier shortcoming &ndash; no more comments </h4>
-<div class="outline-text-4" id="text-1_4_2">
-
-
-<p>
-The beautifier can be used as a general purpose indentation tool.  It's
-useful when you want to make a minified file readable.  One limitation,
-though, is that it discards all comments, so you don't really want to use it
-to reformat your code, unless you don't have, or don't care about, comments.
-</p>
-<p>
-In fact it's not the beautifier who discards comments &mdash; they are dumped at
-the parsing stage, when we build the initial AST.  Comments don't really
-make sense in the AST, and while we could add nodes for them, it would be
-inconvenient because we'd have to add special rules to ignore them at all
-the processing stages.
-</p>
-</div>
-</div>
-
-</div>
-
-<div id="outline-container-1_5" class="outline-3">
-<h3 id="sec-1_5"><span class="section-number-3">1.5</span> Compression &ndash; how good is it? </h3>
-<div class="outline-text-3" id="text-1_5">
-
-
-<p>
-Here are updated statistics.  (I also updated my Google Closure and YUI
-installations).
-</p>
-<p>
-We're still a lot better than YUI in terms of compression, though slightly
-slower.  We're still a lot faster than Closure, and compression after gzip
-is comparable.
-</p>
-<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
-<caption></caption>
-<colgroup><col align="left" /><col align="left" /><col align="right" /><col align="left" /><col align="right" /><col align="left" /><col align="right" />
-</colgroup>
-<thead>
-<tr><th scope="col">File</th><th scope="col">UglifyJS</th><th scope="col">UglifyJS+gzip</th><th scope="col">Closure</th><th scope="col">Closure+gzip</th><th scope="col">YUI</th><th scope="col">YUI+gzip</th></tr>
-</thead>
-<tbody>
-<tr><td>jquery-1.6.2.js</td><td>91001 (0:01.59)</td><td>31896</td><td>90678 (0:07.40)</td><td>31979</td><td>101527 (0:01.82)</td><td>34646</td></tr>
-<tr><td>paper.js</td><td>142023 (0:01.65)</td><td>43334</td><td>134301 (0:07.42)</td><td>42495</td><td>173383 (0:01.58)</td><td>48785</td></tr>
-<tr><td>prototype.js</td><td>88544 (0:01.09)</td><td>26680</td><td>86955 (0:06.97)</td><td>26326</td><td>92130 (0:00.79)</td><td>28624</td></tr>
-<tr><td>thelib-full.js (DynarchLIB)</td><td>251939 (0:02.55)</td><td>72535</td><td>249911 (0:09.05)</td><td>72696</td><td>258869 (0:01.94)</td><td>76584</td></tr>
-</tbody>
-</table>
-
-
-</div>
-
-</div>
-
-<div id="outline-container-1_6" class="outline-3">
-<h3 id="sec-1_6"><span class="section-number-3">1.6</span> Bugs? </h3>
-<div class="outline-text-3" id="text-1_6">
-
-
-<p>
-Unfortunately, for the time being there is no automated test suite.  But I
-ran the compressor manually on non-trivial code, and then I tested that the
-generated code works as expected.  A few hundred times.
-</p>
-<p>
-DynarchLIB was started in times when there was no good JS minifier.
-Therefore I was quite religious about trying to write short code manually,
-and as such DL contains a lot of syntactic hacks<sup><a class="footref" name="fnr.1" href="#fn.1">1</a></sup> such as “foo == bar ?  a
-= 10 : b = 20”, though the more readable version would clearly be to use
-“if/else”.
-</p>
-<p>
-Since the parser/compressor runs fine on DL and jQuery, I'm quite confident
-that it's solid enough for production use.  If you can identify any bugs,
-I'd love to hear about them (<a href="http://groups.google.com/group/uglifyjs">use the Google Group</a> or email me directly).
-</p>
-</div>
-
-</div>
-
-<div id="outline-container-1_7" class="outline-3">
-<h3 id="sec-1_7"><span class="section-number-3">1.7</span> Links </h3>
-<div class="outline-text-3" id="text-1_7">
-
-
-<ul>
-<li>
-Twitter: <a href="http://twitter.com/UglifyJS">@UglifyJS</a>
-</li>
-<li>
-Project at GitHub: <a href="http://github.com/mishoo/UglifyJS">http://github.com/mishoo/UglifyJS</a>
-</li>
-<li>
-Google Group: <a href="http://groups.google.com/group/uglifyjs">http://groups.google.com/group/uglifyjs</a>
-</li>
-<li>
-Common Lisp JS parser: <a href="http://marijn.haverbeke.nl/parse-js/">http://marijn.haverbeke.nl/parse-js/</a>
-</li>
-<li>
-JS-to-Lisp compiler: <a href="http://github.com/marijnh/js">http://github.com/marijnh/js</a>
-</li>
-<li>
-Common Lisp JS uglifier: <a href="http://github.com/mishoo/cl-uglify-js">http://github.com/mishoo/cl-uglify-js</a>
-</li>
-</ul>
-
-
-</div>
-
-</div>
-
-<div id="outline-container-1_8" class="outline-3">
-<h3 id="sec-1_8"><span class="section-number-3">1.8</span> License </h3>
-<div class="outline-text-3" id="text-1_8">
-
-
-<p>
-UglifyJS is released under the BSD license:
-</p>
-
-
-
-<pre class="example">Copyright 2010 (c) Mihai Bazon &lt;mihai.bazon@gmail.com&gt;
-Based on parse-js (http://marijn.haverbeke.nl/parse-js/).
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-    * Redistributions of source code must retain the above
-      copyright notice, this list of conditions and the following
-      disclaimer.
-
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials
-      provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-</pre>
-
-
-
-
-</div>
-</div>
-</div>
-<div id="footnotes">
-<h2 class="footnotes">Footnotes: </h2>
-<div id="text-footnotes">
-<p class="footnote"><sup><a class="footnum" name="fn.1" href="#fnr.1">1</a></sup> I even reported a few bugs and suggested some fixes in the original
-<a href="http://marijn.haverbeke.nl/parse-js/">parse-js</a> library, and Marijn pushed fixes literally in minutes.
-</p>
-</div>
-</div>
-<div id="postamble">
-<p class="author"> Author: Mihai Bazon
-</p>
-<p class="date"> Date: 2011-08-20 10:08:28 EEST</p>
-<p class="creator">HTML generated by org-mode 7.01trans in emacs 23</p>
-</div>
-</div>
-</body>
-</html>
diff --git a/node/node_modules/uglify-js/README.org b/node/node_modules/uglify-js/README.org
deleted file mode 100644 (file)
index 93b1195..0000000
+++ /dev/null
@@ -1,463 +0,0 @@
-#+TITLE: UglifyJS -- a JavaScript parser/compressor/beautifier
-#+KEYWORDS: javascript, js, parser, compiler, compressor, mangle, minify, minifier
-#+DESCRIPTION: a JavaScript parser/compressor/beautifier in JavaScript
-#+STYLE: <link rel="stylesheet" type="text/css" href="docstyle.css" />
-#+AUTHOR: Mihai Bazon
-#+EMAIL: mihai.bazon@gmail.com
-
-* UglifyJS --- a JavaScript parser/compressor/beautifier
-
-This package implements a general-purpose JavaScript
-parser/compressor/beautifier toolkit.  It is developed on [[http://nodejs.org/][NodeJS]], but it
-should work on any JavaScript platform supporting the CommonJS module system
-(and if your platform of choice doesn't support CommonJS, you can easily
-implement it, or discard the =exports.*= lines from UglifyJS sources).
-
-The tokenizer/parser generates an abstract syntax tree from JS code.  You
-can then traverse the AST to learn more about the code, or do various
-manipulations on it.  This part is implemented in [[../lib/parse-js.js][parse-js.js]] and it's a
-port to JavaScript of the excellent [[http://marijn.haverbeke.nl/parse-js/][parse-js]] Common Lisp library from [[http://marijn.haverbeke.nl/][Marijn
-Haverbeke]].
-
-( See [[http://github.com/mishoo/cl-uglify-js][cl-uglify-js]] if you're looking for the Common Lisp version of
-UglifyJS. )
-
-The second part of this package, implemented in [[../lib/process.js][process.js]], inspects and
-manipulates the AST generated by the parser to provide the following:
-
-- ability to re-generate JavaScript code from the AST.  Optionally
-  indented---you can use this if you want to “beautify” a program that has
-  been compressed, so that you can inspect the source.  But you can also run
-  our code generator to print out an AST without any whitespace, so you
-  achieve compression as well.
-
-- shorten variable names (usually to single characters).  Our mangler will
-  analyze the code and generate proper variable names, depending on scope
-  and usage, and is smart enough to deal with globals defined elsewhere, or
-  with =eval()= calls or =with{}= statements.  In short, if =eval()= or
-  =with{}= are used in some scope, then all variables in that scope and any
-  variables in the parent scopes will remain unmangled, and any references
-  to such variables remain unmangled as well.
-
-- various small optimizations that may lead to faster code but certainly
-  lead to smaller code.  Where possible, we do the following:
-
-  - foo["bar"]  ==>  foo.bar
-
-  - remove block brackets ={}=
-
-  - join consecutive var declarations:
-    var a = 10; var b = 20; ==> var a=10,b=20;
-
-  - resolve simple constant expressions: 1 +2 * 3 ==> 7.  We only do the
-    replacement if the result occupies less bytes; for example 1/3 would
-    translate to 0.333333333333, so in this case we don't replace it.
-
-  - consecutive statements in blocks are merged into a sequence; in many
-    cases, this leaves blocks with a single statement, so then we can remove
-    the block brackets.
-
-  - various optimizations for IF statements:
-
-    - if (foo) bar(); else baz(); ==> foo?bar():baz();
-    - if (!foo) bar(); else baz(); ==> foo?baz():bar();
-    - if (foo) bar(); ==> foo&&bar();
-    - if (!foo) bar(); ==> foo||bar();
-    - if (foo) return bar(); else return baz(); ==> return foo?bar():baz();
-    - if (foo) return bar(); else something(); ==> {if(foo)return bar();something()}
-
-  - remove some unreachable code and warn about it (code that follows a
-    =return=, =throw=, =break= or =continue= statement, except
-    function/variable declarations).
-
-** <<Unsafe transformations>>
-
-The following transformations can in theory break code, although they're
-probably safe in most practical cases.  To enable them you need to pass the
-=--unsafe= flag.
-
-*** Calls involving the global Array constructor
-
-The following transformations occur:
-
-#+BEGIN_SRC js
-new Array(1, 2, 3, 4)  => [1,2,3,4]
-Array(a, b, c)         => [a,b,c]
-new Array(5)           => Array(5)
-new Array(a)           => Array(a)
-#+END_SRC
-
-These are all safe if the Array name isn't redefined.  JavaScript does allow
-one to globally redefine Array (and pretty much everything, in fact) but I
-personally don't see why would anyone do that.
-
-UglifyJS does handle the case where Array is redefined locally, or even
-globally but with a =function= or =var= declaration.  Therefore, in the
-following cases UglifyJS *doesn't touch* calls or instantiations of Array:
-
-#+BEGIN_SRC js
-// case 1.  globally declared variable
-  var Array;
-  new Array(1, 2, 3);
-  Array(a, b);
-
-  // or (can be declared later)
-  new Array(1, 2, 3);
-  var Array;
-
-  // or (can be a function)
-  new Array(1, 2, 3);
-  function Array() { ... }
-
-// case 2.  declared in a function
-  (function(){
-    a = new Array(1, 2, 3);
-    b = Array(5, 6);
-    var Array;
-  })();
-
-  // or
-  (function(Array){
-    return Array(5, 6, 7);
-  })();
-
-  // or
-  (function(){
-    return new Array(1, 2, 3, 4);
-    function Array() { ... }
-  })();
-
-  // etc.
-#+END_SRC
-
-*** =obj.toString()= ==> =obj+“”=
-
-** Install (NPM)
-
-UglifyJS is now available through NPM --- =npm install uglify-js= should do
-the job.
-
-** Install latest code from GitHub
-
-#+BEGIN_SRC sh
-## clone the repository
-mkdir -p /where/you/wanna/put/it
-cd /where/you/wanna/put/it
-git clone git://github.com/mishoo/UglifyJS.git
-
-## make the module available to Node
-mkdir -p ~/.node_libraries/
-cd ~/.node_libraries/
-ln -s /where/you/wanna/put/it/UglifyJS/uglify-js.js
-
-## and if you want the CLI script too:
-mkdir -p ~/bin
-cd ~/bin
-ln -s /where/you/wanna/put/it/UglifyJS/bin/uglifyjs
-  # (then add ~/bin to your $PATH if it's not there already)
-#+END_SRC
-
-** Usage
-
-There is a command-line tool that exposes the functionality of this library
-for your shell-scripting needs:
-
-#+BEGIN_SRC sh
-uglifyjs [ options... ] [ filename ]
-#+END_SRC
-
-=filename= should be the last argument and should name the file from which
-to read the JavaScript code.  If you don't specify it, it will read code
-from STDIN.
-
-Supported options:
-
-- =-b= or =--beautify= --- output indented code; when passed, additional
-  options control the beautifier:
-
-  - =-i N= or =--indent N= --- indentation level (number of spaces)
-
-  - =-q= or =--quote-keys= --- quote keys in literal objects (by default,
-    only keys that cannot be identifier names will be quotes).
-
-- =--ascii= --- pass this argument to encode non-ASCII characters as
-  =\uXXXX= sequences.  By default UglifyJS won't bother to do it and will
-  output Unicode characters instead.  (the output is always encoded in UTF8,
-  but if you pass this option you'll only get ASCII).
-
-- =-nm= or =--no-mangle= --- don't mangle variable names
-
-- =-ns= or =--no-squeeze= --- don't call =ast_squeeze()= (which does various
-  optimizations that result in smaller, less readable code).
-
-- =-mt= or =--mangle-toplevel= --- mangle names in the toplevel scope too
-  (by default we don't do this).
-
-- =--no-seqs= --- when =ast_squeeze()= is called (thus, unless you pass
-  =--no-squeeze=) it will reduce consecutive statements in blocks into a
-  sequence.  For example, "a = 10; b = 20; foo();" will be written as
-  "a=10,b=20,foo();".  In various occasions, this allows us to discard the
-  block brackets (since the block becomes a single statement).  This is ON
-  by default because it seems safe and saves a few hundred bytes on some
-  libs that I tested it on, but pass =--no-seqs= to disable it.
-
-- =--no-dead-code= --- by default, UglifyJS will remove code that is
-  obviously unreachable (code that follows a =return=, =throw=, =break= or
-  =continue= statement and is not a function/variable declaration).  Pass
-  this option to disable this optimization.
-
-- =-nc= or =--no-copyright= --- by default, =uglifyjs= will keep the initial
-  comment tokens in the generated code (assumed to be copyright information
-  etc.).  If you pass this it will discard it.
-
-- =-o filename= or =--output filename= --- put the result in =filename=.  If
-  this isn't given, the result goes to standard output (or see next one).
-
-- =--overwrite= --- if the code is read from a file (not from STDIN) and you
-  pass =--overwrite= then the output will be written in the same file.
-
-- =--ast= --- pass this if you want to get the Abstract Syntax Tree instead
-  of JavaScript as output.  Useful for debugging or learning more about the
-  internals.
-
-- =-v= or =--verbose= --- output some notes on STDERR (for now just how long
-  each operation takes).
-
-- =--unsafe= --- enable other additional optimizations that are known to be
-  unsafe in some contrived situations, but could still be generally useful.
-  For now only this:
-
-  - foo.toString()  ==>  foo+""
-
-- =--max-line-len= (default 32K characters) --- add a newline after around
-  32K characters.  I've seen both FF and Chrome croak when all the code was
-  on a single line of around 670K.  Pass --max-line-len 0 to disable this
-  safety feature.
-
-- =--reserved-names= --- some libraries rely on certain names to be used, as
-  pointed out in issue #92 and #81, so this option allow you to exclude such
-  names from the mangler.  For example, to keep names =require= and =$super=
-  intact you'd specify --reserved-names "require,$super".
-
-- =--inline-script= -- when you want to include the output literally in an
-  HTML =<script>= tag you can use this option to prevent =</script= from
-  showing up in the output.
-
-- =--lift-vars= -- when you pass this, UglifyJS will apply the following
-  transformations (see the notes in API, =ast_lift_variables=):
-
-  - put all =var= declarations at the start of the scope
-  - make sure a variable is declared only once
-  - discard unused function arguments
-  - discard unused inner (named) functions
-  - finally, try to merge assignments into that one =var= declaration, if
-    possible.
-
-*** API
-
-To use the library from JavaScript, you'd do the following (example for
-NodeJS):
-
-#+BEGIN_SRC js
-var jsp = require("uglify-js").parser;
-var pro = require("uglify-js").uglify;
-
-var orig_code = "... JS code here";
-var ast = jsp.parse(orig_code); // parse code and get the initial AST
-ast = pro.ast_mangle(ast); // get a new AST with mangled names
-ast = pro.ast_squeeze(ast); // get an AST with compression optimizations
-var final_code = pro.gen_code(ast); // compressed code here
-#+END_SRC
-
-The above performs the full compression that is possible right now.  As you
-can see, there are a sequence of steps which you can apply.  For example if
-you want compressed output but for some reason you don't want to mangle
-variable names, you would simply skip the line that calls
-=pro.ast_mangle(ast)=.
-
-Some of these functions take optional arguments.  Here's a description:
-
-- =jsp.parse(code, strict_semicolons)= -- parses JS code and returns an AST.
-  =strict_semicolons= is optional and defaults to =false=.  If you pass
-  =true= then the parser will throw an error when it expects a semicolon and
-  it doesn't find it.  For most JS code you don't want that, but it's useful
-  if you want to strictly sanitize your code.
-
-- =pro.ast_lift_variables(ast)= -- merge and move =var= declarations to the
-  scop of the scope; discard unused function arguments or variables; discard
-  unused (named) inner functions.  It also tries to merge assignments
-  following the =var= declaration into it.
-
-  If your code is very hand-optimized concerning =var= declarations, this
-  lifting variable declarations might actually increase size.  For me it
-  helps out.  On jQuery it adds 865 bytes (243 after gzip).  YMMV.  Also
-  note that (since it's not enabled by default) this operation isn't yet
-  heavily tested (please report if you find issues!).
-
-  Note that although it might increase the image size (on jQuery it gains
-  865 bytes, 243 after gzip) it's technically more correct: in certain
-  situations, dead code removal might drop variable declarations, which
-  would not happen if the variables are lifted in advance.
-
-  Here's an example of what it does:
-
-#+BEGIN_SRC js
-function f(a, b, c, d, e) {
-    var q;
-    var w;
-    w = 10;
-    q = 20;
-    for (var i = 1; i < 10; ++i) {
-        var boo = foo(a);
-    }
-    for (var i = 0; i < 1; ++i) {
-        var boo = bar(c);
-    }
-    function foo(){ ... }
-    function bar(){ ... }
-    function baz(){ ... }
-}
-
-// transforms into ==>
-
-function f(a, b, c) {
-    var i, boo, w = 10, q = 20;
-    for (i = 1; i < 10; ++i) {
-        boo = foo(a);
-    }
-    for (i = 0; i < 1; ++i) {
-        boo = bar(c);
-    }
-    function foo() { ... }
-    function bar() { ... }
-}
-#+END_SRC
-
-- =pro.ast_mangle(ast, options)= -- generates a new AST containing mangled
-  (compressed) variable and function names.  It supports the following
-  options:
-
-  - =toplevel= -- mangle toplevel names (by default we don't touch them).
-  - =except= -- an array of names to exclude from compression.
-
-- =pro.ast_squeeze(ast, options)= -- employs further optimizations designed
-  to reduce the size of the code that =gen_code= would generate from the
-  AST.  Returns a new AST.  =options= can be a hash; the supported options
-  are:
-
-  - =make_seqs= (default true) which will cause consecutive statements in a
-    block to be merged using the "sequence" (comma) operator
-
-  - =dead_code= (default true) which will remove unreachable code.
-
-- =pro.gen_code(ast, options)= -- generates JS code from the AST.  By
-  default it's minified, but using the =options= argument you can get nicely
-  formatted output.  =options= is, well, optional :-) and if you pass it it
-  must be an object and supports the following properties (below you can see
-  the default values):
-
-  - =beautify: false= -- pass =true= if you want indented output
-  - =indent_start: 0= (only applies when =beautify= is =true=) -- initial
-    indentation in spaces
-  - =indent_level: 4= (only applies when =beautify= is =true=) --
-    indentation level, in spaces (pass an even number)
-  - =quote_keys: false= -- if you pass =true= it will quote all keys in
-    literal objects
-  - =space_colon: false= (only applies when =beautify= is =true=) -- wether
-    to put a space before the colon in object literals
-  - =ascii_only: false= -- pass =true= if you want to encode non-ASCII
-    characters as =\uXXXX=.
-  - =inline_script: false= -- pass =true= to escape occurrences of
-    =</script= in strings
-
-*** Beautifier shortcoming -- no more comments
-
-The beautifier can be used as a general purpose indentation tool.  It's
-useful when you want to make a minified file readable.  One limitation,
-though, is that it discards all comments, so you don't really want to use it
-to reformat your code, unless you don't have, or don't care about, comments.
-
-In fact it's not the beautifier who discards comments --- they are dumped at
-the parsing stage, when we build the initial AST.  Comments don't really
-make sense in the AST, and while we could add nodes for them, it would be
-inconvenient because we'd have to add special rules to ignore them at all
-the processing stages.
-
-** Compression -- how good is it?
-
-Here are updated statistics.  (I also updated my Google Closure and YUI
-installations).
-
-We're still a lot better than YUI in terms of compression, though slightly
-slower.  We're still a lot faster than Closure, and compression after gzip
-is comparable.
-
-| File                        | UglifyJS         | UglifyJS+gzip | Closure          | Closure+gzip | YUI              | YUI+gzip |
-|-----------------------------+------------------+---------------+------------------+--------------+------------------+----------|
-| jquery-1.6.2.js             | 91001 (0:01.59)  |         31896 | 90678 (0:07.40)  |        31979 | 101527 (0:01.82) |    34646 |
-| paper.js                    | 142023 (0:01.65) |         43334 | 134301 (0:07.42) |        42495 | 173383 (0:01.58) |    48785 |
-| prototype.js                | 88544 (0:01.09)  |         26680 | 86955 (0:06.97)  |        26326 | 92130 (0:00.79)  |    28624 |
-| thelib-full.js (DynarchLIB) | 251939 (0:02.55) |         72535 | 249911 (0:09.05) |        72696 | 258869 (0:01.94) |    76584 |
-
-** Bugs?
-
-Unfortunately, for the time being there is no automated test suite.  But I
-ran the compressor manually on non-trivial code, and then I tested that the
-generated code works as expected.  A few hundred times.
-
-DynarchLIB was started in times when there was no good JS minifier.
-Therefore I was quite religious about trying to write short code manually,
-and as such DL contains a lot of syntactic hacks[1] such as “foo == bar ?  a
-= 10 : b = 20”, though the more readable version would clearly be to use
-“if/else”.
-
-Since the parser/compressor runs fine on DL and jQuery, I'm quite confident
-that it's solid enough for production use.  If you can identify any bugs,
-I'd love to hear about them ([[http://groups.google.com/group/uglifyjs][use the Google Group]] or email me directly).
-
-[1] I even reported a few bugs and suggested some fixes in the original
-    [[http://marijn.haverbeke.nl/parse-js/][parse-js]] library, and Marijn pushed fixes literally in minutes.
-
-** Links
-
-- Twitter: [[http://twitter.com/UglifyJS][@UglifyJS]]
-- Project at GitHub: [[http://github.com/mishoo/UglifyJS][http://github.com/mishoo/UglifyJS]]
-- Google Group: [[http://groups.google.com/group/uglifyjs][http://groups.google.com/group/uglifyjs]]
-- Common Lisp JS parser: [[http://marijn.haverbeke.nl/parse-js/][http://marijn.haverbeke.nl/parse-js/]]
-- JS-to-Lisp compiler: [[http://github.com/marijnh/js][http://github.com/marijnh/js]]
-- Common Lisp JS uglifier: [[http://github.com/mishoo/cl-uglify-js][http://github.com/mishoo/cl-uglify-js]]
-
-** License
-
-UglifyJS is released under the BSD license:
-
-#+BEGIN_EXAMPLE
-Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
-Based on parse-js (http://marijn.haverbeke.nl/parse-js/).
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-    * Redistributions of source code must retain the above
-      copyright notice, this list of conditions and the following
-      disclaimer.
-
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials
-      provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-#+END_EXAMPLE
diff --git a/node/node_modules/uglify-js/bin/uglifyjs b/node/node_modules/uglify-js/bin/uglifyjs
deleted file mode 100755 (executable)
index 9779e16..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
-#! /usr/bin/env node
-// -*- js -*-
-
-global.sys = require(/^v0\.[012]/.test(process.version) ? "sys" : "util");
-var fs = require("fs");
-var uglify = require("uglify-js"), // symlink ~/.node_libraries/uglify-js.js to ../uglify-js.js
-    jsp = uglify.parser,
-    pro = uglify.uglify;
-
-var options = {
-        ast: false,
-        mangle: true,
-        mangle_toplevel: false,
-        squeeze: true,
-        make_seqs: true,
-        dead_code: true,
-        verbose: false,
-        show_copyright: true,
-        out_same_file: false,
-        max_line_length: 32 * 1024,
-        unsafe: false,
-        reserved_names: null,
-        defines: { },
-        lift_vars: false,
-        codegen_options: {
-                ascii_only: false,
-                beautify: false,
-                indent_level: 4,
-                indent_start: 0,
-                quote_keys: false,
-                space_colon: false,
-                inline_script: false
-        },
-        make: false,
-        output: true            // stdout
-};
-
-var args = jsp.slice(process.argv, 2);
-var filename;
-
-out: while (args.length > 0) {
-        var v = args.shift();
-        switch (v) {
-            case "-b":
-            case "--beautify":
-                options.codegen_options.beautify = true;
-                break;
-            case "-i":
-            case "--indent":
-                options.codegen_options.indent_level = args.shift();
-                break;
-            case "-q":
-            case "--quote-keys":
-                options.codegen_options.quote_keys = true;
-                break;
-            case "-mt":
-            case "--mangle-toplevel":
-                options.mangle_toplevel = true;
-                break;
-            case "--no-mangle":
-            case "-nm":
-                options.mangle = false;
-                break;
-            case "--no-squeeze":
-            case "-ns":
-                options.squeeze = false;
-                break;
-            case "--no-seqs":
-                options.make_seqs = false;
-                break;
-            case "--no-dead-code":
-                options.dead_code = false;
-                break;
-            case "--no-copyright":
-            case "-nc":
-                options.show_copyright = false;
-                break;
-            case "-o":
-            case "--output":
-                options.output = args.shift();
-                break;
-            case "--overwrite":
-                options.out_same_file = true;
-                break;
-            case "-v":
-            case "--verbose":
-                options.verbose = true;
-                break;
-            case "--ast":
-                options.ast = true;
-                break;
-            case "--unsafe":
-                options.unsafe = true;
-                break;
-            case "--max-line-len":
-                options.max_line_length = parseInt(args.shift(), 10);
-                break;
-            case "--reserved-names":
-                options.reserved_names = args.shift().split(",");
-                break;
-            case "--lift-vars":
-                options.lift_vars = true;
-                break;
-            case "-d":
-            case "--define":
-                 var defarg = args.shift();
-                 try {
-                     var defsym = function(sym) {
-                             // KEYWORDS_ATOM doesn't include NaN or Infinity - should we check
-                             // for them too ?? We don't check reserved words and the like as the
-                             // define values are only substituted AFTER parsing
-                             if (jsp.KEYWORDS_ATOM.hasOwnProperty(sym)) {
-                                 throw "Don't define values for inbuilt constant '"+sym+"'";
-                             }
-                             return sym;
-                         },
-                         defval = function(v) {
-                             if (v.match(/^"(.*)"$/) || v.match(/^'(.*)'$/)) {
-                                 return [ "string", RegExp.$1 ];
-                             }
-                             else if (!isNaN(parseFloat(v))) {
-                                 return [ "num", parseFloat(v) ];
-                             }
-                             else if (v.match(/^[a-z\$_][a-z\$_0-9]*$/i)) {
-                                 return [ "name", v ];
-                             }
-                             else if (!v.match(/"/)) {
-                                 return [ "string", v ];
-                             }
-                             else if (!v.match(/'/)) {
-                                 return [ "string", v ];
-                             }
-                             throw "Can't understand the specified value: "+v;
-                         };
-                     if (defarg.match(/^([a-z_\$][a-z_\$0-9]*)(=(.*))?$/i)) {
-                         var sym = defsym(RegExp.$1),
-                             val = RegExp.$2 ? defval(RegExp.$2.substr(1)) : [ 'name', 'true' ];
-                         options.defines[sym] = val;
-                     }
-                     else {
-                         throw "The --define option expects SYMBOL[=value]";
-                     }
-                 } catch(ex) {
-                     sys.print("ERROR: In option --define "+defarg+"\n"+ex+"\n");
-                     process.exit(1);
-                 }
-                 break;
-            case "--define-from-module":
-                var defmodarg = args.shift(),
-                    defmodule = require(defmodarg),
-                    sym,
-                    val;
-                for (sym in defmodule) {
-                    if (defmodule.hasOwnProperty(sym)) {
-                        options.defines[sym] = function(val) {
-                            if (typeof val == "string")
-                                return [ "string", val ];
-                            if (typeof val == "number")
-                                return [ "num", val ];
-                            if (val === true)
-                                return [ 'name', 'true' ];
-                            if (val === false)
-                                return [ 'name', 'false' ];
-                            if (val === null)
-                                return [ 'name', 'null' ];
-                            if (val === undefined)
-                                return [ 'name', 'undefined' ];
-                            sys.print("ERROR: In option --define-from-module "+defmodarg+"\n");
-                            sys.print("ERROR: Unknown object type for: "+sym+"="+val+"\n");
-                            process.exit(1);
-                            return null;
-                        }(defmodule[sym]);
-                    }
-                }
-                break;
-            case "--ascii":
-                options.codegen_options.ascii_only = true;
-                break;
-            case "--make":
-                options.make = true;
-                break;
-            case "--inline-script":
-                options.codegen_options.inline_script = true;
-                break;
-            default:
-                filename = v;
-                break out;
-        }
-}
-
-if (options.verbose) {
-        pro.set_logger(function(msg){
-                sys.debug(msg);
-        });
-}
-
-jsp.set_logger(function(msg){
-        sys.debug(msg);
-});
-
-if (options.make) {
-        options.out_same_file = false; // doesn't make sense in this case
-        var makefile = JSON.parse(fs.readFileSync(filename || "Makefile.uglify.js").toString());
-        output(makefile.files.map(function(file){
-                var code = fs.readFileSync(file.name);
-                if (file.module) {
-                        code = "!function(exports, global){global = this;\n" + code + "\n;this." + file.module + " = exports;}({})";
-                }
-                else if (file.hide) {
-                        code = "(function(){" + code + "}());";
-                }
-                return squeeze_it(code);
-        }).join("\n"));
-}
-else if (filename) {
-        fs.readFile(filename, "utf8", function(err, text){
-                if (err) throw err;
-                output(squeeze_it(text));
-        });
-}
-else {
-        var stdin = process.openStdin();
-        stdin.setEncoding("utf8");
-        var text = "";
-        stdin.on("data", function(chunk){
-                text += chunk;
-        });
-        stdin.on("end", function() {
-                output(squeeze_it(text));
-        });
-}
-
-function output(text) {
-        var out;
-        if (options.out_same_file && filename)
-                options.output = filename;
-        if (options.output === true) {
-                out = process.stdout;
-        } else {
-                out = fs.createWriteStream(options.output, {
-                        flags: "w",
-                        encoding: "utf8",
-                        mode: 0644
-                });
-        }
-        out.write(text);
-        if (options.output !== true) {
-                out.end();
-        }
-};
-
-// --------- main ends here.
-
-function show_copyright(comments) {
-        var ret = "";
-        for (var i = 0; i < comments.length; ++i) {
-                var c = comments[i];
-                if (c.type == "comment1") {
-                        ret += "//" + c.value + "\n";
-                } else {
-                        ret += "/*" + c.value + "*/";
-                }
-        }
-        return ret;
-};
-
-function squeeze_it(code) {
-        var result = "";
-        if (options.show_copyright) {
-                var tok = jsp.tokenizer(code), c;
-                c = tok();
-                result += show_copyright(c.comments_before);
-        }
-        try {
-                var ast = time_it("parse", function(){ return jsp.parse(code); });
-                if (options.lift_vars) {
-                        ast = time_it("lift", function(){ return pro.ast_lift_variables(ast); });
-                }
-                if (options.mangle) ast = time_it("mangle", function(){
-                        return pro.ast_mangle(ast, {
-                                toplevel: options.mangle_toplevel,
-                                defines: options.defines,
-                                except: options.reserved_names
-                        });
-                });
-                if (options.squeeze) ast = time_it("squeeze", function(){
-                        ast = pro.ast_squeeze(ast, {
-                                make_seqs  : options.make_seqs,
-                                dead_code  : options.dead_code,
-                                keep_comps : !options.unsafe
-                        });
-                        if (options.unsafe)
-                                ast = pro.ast_squeeze_more(ast);
-                        return ast;
-                });
-                if (options.ast)
-                        return sys.inspect(ast, null, null);
-                result += time_it("generate", function(){ return pro.gen_code(ast, options.codegen_options) });
-                if (!options.codegen_options.beautify && options.max_line_length) {
-                        result = time_it("split", function(){ return pro.split_lines(result, options.max_line_length) });
-                }
-                return result;
-        } catch(ex) {
-                sys.debug(ex.stack);
-                sys.debug(sys.inspect(ex));
-                sys.debug(JSON.stringify(ex));
-                process.exit(1);
-        }
-};
-
-function time_it(name, cont) {
-        if (!options.verbose)
-                return cont();
-        var t1 = new Date().getTime();
-        try { return cont(); }
-        finally { sys.debug("// " + name + ": " + ((new Date().getTime() - t1) / 1000).toFixed(3) + " sec."); }
-};
diff --git a/node/node_modules/uglify-js/docstyle.css b/node/node_modules/uglify-js/docstyle.css
deleted file mode 100644 (file)
index 412481f..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-html { font-family: "Lucida Grande","Trebuchet MS",sans-serif; font-size: 12pt; }
-body { max-width: 60em; }
-.title  { text-align: center; }
-.todo   { color: red; }
-.done   { color: green; }
-.tag    { background-color:lightblue; font-weight:normal }
-.target { }
-.timestamp { color: grey }
-.timestamp-kwd { color: CadetBlue }
-p.verse { margin-left: 3% }
-pre {
-  border: 1pt solid #AEBDCC;
-  background-color: #F3F5F7;
-  padding: 5pt;
-  font-family: monospace;
-  font-size: 90%;
-  overflow:auto;
-}
-pre.src {
-  background-color: #eee; color: #112; border: 1px solid #000;
-}
-table { border-collapse: collapse; }
-td, th { vertical-align: top; }
-dt { font-weight: bold; }
-div.figure { padding: 0.5em; }
-div.figure p { text-align: center; }
-.linenr { font-size:smaller }
-.code-highlighted {background-color:#ffff00;}
-.org-info-js_info-navigation { border-style:none; }
-#org-info-js_console-label { font-size:10px; font-weight:bold;
-  white-space:nowrap; }
-.org-info-js_search-highlight {background-color:#ffff00; color:#000000;
-  font-weight:bold; }
-
-sup {
-  vertical-align: baseline;
-  position: relative;
-  top: -0.5em;
-  font-size: 80%;
-}
-
-sup a:link, sup a:visited {
-  text-decoration: none;
-  color: #c00;
-}
-
-sup a:before { content: "["; color: #999; }
-sup a:after { content: "]"; color: #999; }
-
-h1.title { border-bottom: 4px solid #000; padding-bottom: 5px; margin-bottom: 2em; }
-
-#postamble {
-  color: #777;
-  font-size: 90%;
-  padding-top: 1em; padding-bottom: 1em; border-top: 1px solid #999;
-  margin-top: 2em;
-  padding-left: 2em;
-  padding-right: 2em;
-  text-align: right;
-}
-
-#postamble p { margin: 0; }
-
-#footnotes { border-top: 1px solid #000; }
-
-h1 { font-size: 200% }
-h2 { font-size: 175% }
-h3 { font-size: 150% }
-h4 { font-size: 125% }
-
-h1, h2, h3, h4 { font-family: "Bookman",Georgia,"Times New Roman",serif; font-weight: normal; }
-
-@media print {
-  html { font-size: 11pt; }
-}
diff --git a/node/node_modules/uglify-js/lib/object-ast.js b/node/node_modules/uglify-js/lib/object-ast.js
deleted file mode 100644 (file)
index afdb69f..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-var jsp = require("./parse-js"),
-    pro = require("./process");
-
-var BY_TYPE = {};
-
-function HOP(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-};
-
-function AST_Node(parent) {
-        this.parent = parent;
-};
-
-AST_Node.prototype.init = function(){};
-
-function DEFINE_NODE_CLASS(type, props, methods) {
-        var base = methods && methods.BASE || AST_Node;
-        if (!base) base = AST_Node;
-        function D(parent, data) {
-                base.apply(this, arguments);
-                if (props) props.forEach(function(name, i){
-                        this["_" + name] = data[i];
-                });
-                this.init();
-        };
-        var P = D.prototype = new AST_Node;
-        P.node_type = function(){ return type };
-        if (props) props.forEach(function(name){
-                var propname = "_" + name;
-                P["set_" + name] = function(val) {
-                        this[propname] = val;
-                        return this;
-                };
-                P["get_" + name] = function() {
-                        return this[propname];
-                };
-        });
-        if (type != null) BY_TYPE[type] = D;
-        if (methods) for (var i in methods) if (HOP(methods, i)) {
-                P[i] = methods[i];
-        }
-        return D;
-};
-
-var AST_String_Node = DEFINE_NODE_CLASS("string", ["value"]);
-var AST_Number_Node = DEFINE_NODE_CLASS("num", ["value"]);
-var AST_Name_Node = DEFINE_NODE_CLASS("name", ["value"]);
-
-var AST_Statlist_Node = DEFINE_NODE_CLASS(null, ["body"]);
-var AST_Root_Node = DEFINE_NODE_CLASS("toplevel", null, { BASE: AST_Statlist_Node });
-var AST_Block_Node = DEFINE_NODE_CLASS("block", null, { BASE: AST_Statlist_Node });
-var AST_Splice_Node = DEFINE_NODE_CLASS("splice", null, { BASE: AST_Statlist_Node });
-
-var AST_Var_Node = DEFINE_NODE_CLASS("var", ["definitions"]);
-var AST_Const_Node = DEFINE_NODE_CLASS("const", ["definitions"]);
-
-var AST_Try_Node = DEFINE_NODE_CLASS("try", ["body", "catch", "finally"]);
-var AST_Throw_Node = DEFINE_NODE_CLASS("throw", ["exception"]);
-
-var AST_New_Node = DEFINE_NODE_CLASS("new", ["constructor", "arguments"]);
-
-var AST_Switch_Node = DEFINE_NODE_CLASS("switch", ["expression", "branches"]);
-var AST_Switch_Branch_Node = DEFINE_NODE_CLASS(null, ["expression", "body"]);
-
-var AST_Break_Node = DEFINE_NODE_CLASS("break", ["label"]);
-var AST_Continue_Node = DEFINE_NODE_CLASS("continue", ["label"]);
-var AST_Assign_Node = DEFINE_NODE_CLASS("assign", ["operator", "lvalue", "rvalue"]);
-var AST_Dot_Node = DEFINE_NODE_CLASS("dot", ["expression", "name"]);
-var AST_Call_Node = DEFINE_NODE_CLASS("call", ["function", "arguments"]);
-
-var AST_Lambda_Node = DEFINE_NODE_CLASS(null, ["name", "arguments", "body"])
-var AST_Function_Node = DEFINE_NODE_CLASS("function", null, AST_Lambda_Node);
-var AST_Defun_Node = DEFINE_NODE_CLASS("defun", null, AST_Lambda_Node);
-
-var AST_If_Node = DEFINE_NODE_CLASS("if", ["condition", "then", "else"]);
diff --git a/node/node_modules/uglify-js/lib/parse-js.js b/node/node_modules/uglify-js/lib/parse-js.js
deleted file mode 100644 (file)
index 69abf6c..0000000
+++ /dev/null
@@ -1,1341 +0,0 @@
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-
-  This version is suitable for Node.js.  With minimal changes (the
-  exports stuff) it should work on any JS platform.
-
-  This file contains the tokenizer/parser.  It is a port to JavaScript
-  of parse-js [1], a JavaScript parser library written in Common Lisp
-  by Marijn Haverbeke.  Thank you Marijn!
-
-  [1] http://marijn.haverbeke.nl/parse-js/
-
-  Exported functions:
-
-    - tokenizer(code) -- returns a function.  Call the returned
-      function to fetch the next token.
-
-    - parse(code) -- returns an AST of the given JavaScript code.
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
-    Based on parse-js (http://marijn.haverbeke.nl/parse-js/).
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-/* -----[ Tokenizer (constants) ]----- */
-
-var KEYWORDS = array_to_hash([
-        "break",
-        "case",
-        "catch",
-        "const",
-        "continue",
-        "default",
-        "delete",
-        "do",
-        "else",
-        "finally",
-        "for",
-        "function",
-        "if",
-        "in",
-        "instanceof",
-        "new",
-        "return",
-        "switch",
-        "throw",
-        "try",
-        "typeof",
-        "var",
-        "void",
-        "while",
-        "with"
-]);
-
-var RESERVED_WORDS = array_to_hash([
-        "abstract",
-        "boolean",
-        "byte",
-        "char",
-        "class",
-        "debugger",
-        "double",
-        "enum",
-        "export",
-        "extends",
-        "final",
-        "float",
-        "goto",
-        "implements",
-        "import",
-        "int",
-        "interface",
-        "long",
-        "native",
-        "package",
-        "private",
-        "protected",
-        "public",
-        "short",
-        "static",
-        "super",
-        "synchronized",
-        "throws",
-        "transient",
-        "volatile"
-]);
-
-var KEYWORDS_BEFORE_EXPRESSION = array_to_hash([
-        "return",
-        "new",
-        "delete",
-        "throw",
-        "else",
-        "case"
-]);
-
-var KEYWORDS_ATOM = array_to_hash([
-        "false",
-        "null",
-        "true",
-        "undefined"
-]);
-
-var OPERATOR_CHARS = array_to_hash(characters("+-*&%=<>!?|~^"));
-
-var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;
-var RE_OCT_NUMBER = /^0[0-7]+$/;
-var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i;
-
-var OPERATORS = array_to_hash([
-        "in",
-        "instanceof",
-        "typeof",
-        "new",
-        "void",
-        "delete",
-        "++",
-        "--",
-        "+",
-        "-",
-        "!",
-        "~",
-        "&",
-        "|",
-        "^",
-        "*",
-        "/",
-        "%",
-        ">>",
-        "<<",
-        ">>>",
-        "<",
-        ">",
-        "<=",
-        ">=",
-        "==",
-        "===",
-        "!=",
-        "!==",
-        "?",
-        "=",
-        "+=",
-        "-=",
-        "/=",
-        "*=",
-        "%=",
-        ">>=",
-        "<<=",
-        ">>>=",
-        "|=",
-        "^=",
-        "&=",
-        "&&",
-        "||"
-]);
-
-var WHITESPACE_CHARS = array_to_hash(characters(" \u00a0\n\r\t\f\u000b\u200b"));
-
-var PUNC_BEFORE_EXPRESSION = array_to_hash(characters("[{}(,.;:"));
-
-var PUNC_CHARS = array_to_hash(characters("[]{}(),;:"));
-
-var REGEXP_MODIFIERS = array_to_hash(characters("gmsiy"));
-
-/* -----[ Tokenizer ]----- */
-
-// regexps adapted from http://xregexp.com/plugins/#unicode
-var UNICODE = {
-        letter: new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),
-        non_spacing_mark: new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),
-        space_combining_mark: new RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),
-        connector_punctuation: new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")
-};
-
-function is_letter(ch) {
-        return UNICODE.letter.test(ch);
-};
-
-function is_digit(ch) {
-        ch = ch.charCodeAt(0);
-        return ch >= 48 && ch <= 57; //XXX: find out if "UnicodeDigit" means something else than 0..9
-};
-
-function is_alphanumeric_char(ch) {
-        return is_digit(ch) || is_letter(ch);
-};
-
-function is_unicode_combining_mark(ch) {
-        return UNICODE.non_spacing_mark.test(ch) || UNICODE.space_combining_mark.test(ch);
-};
-
-function is_unicode_connector_punctuation(ch) {
-        return UNICODE.connector_punctuation.test(ch);
-};
-
-function is_identifier_start(ch) {
-        return ch == "$" || ch == "_" || is_letter(ch);
-};
-
-function is_identifier_char(ch) {
-        return is_identifier_start(ch)
-                || is_unicode_combining_mark(ch)
-                || is_digit(ch)
-                || is_unicode_connector_punctuation(ch)
-                || ch == "\u200c" // zero-width non-joiner <ZWNJ>
-                || ch == "\u200d" // zero-width joiner <ZWJ> (in my ECMA-262 PDF, this is also 200c)
-        ;
-};
-
-function parse_js_number(num) {
-        if (RE_HEX_NUMBER.test(num)) {
-                return parseInt(num.substr(2), 16);
-        } else if (RE_OCT_NUMBER.test(num)) {
-                return parseInt(num.substr(1), 8);
-        } else if (RE_DEC_NUMBER.test(num)) {
-                return parseFloat(num);
-        }
-};
-
-function JS_Parse_Error(message, line, col, pos) {
-        this.message = message;
-        this.line = line;
-        this.col = col;
-        this.pos = pos;
-        try {
-                ({})();
-        } catch(ex) {
-                this.stack = ex.stack;
-        };
-};
-
-JS_Parse_Error.prototype.toString = function() {
-        return this.message + " (line: " + this.line + ", col: " + this.col + ", pos: " + this.pos + ")" + "\n\n" + this.stack;
-};
-
-function js_error(message, line, col, pos) {
-        throw new JS_Parse_Error(message, line, col, pos);
-};
-
-function is_token(token, type, val) {
-        return token.type == type && (val == null || token.value == val);
-};
-
-var EX_EOF = {};
-
-function tokenizer($TEXT) {
-
-        var S = {
-                text            : $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ''),
-                pos             : 0,
-                tokpos          : 0,
-                line            : 0,
-                tokline         : 0,
-                col             : 0,
-                tokcol          : 0,
-                newline_before  : false,
-                regex_allowed   : false,
-                comments_before : []
-        };
-
-        function peek() { return S.text.charAt(S.pos); };
-
-        function next(signal_eof) {
-                var ch = S.text.charAt(S.pos++);
-                if (signal_eof && !ch)
-                        throw EX_EOF;
-                if (ch == "\n") {
-                        S.newline_before = true;
-                        ++S.line;
-                        S.col = 0;
-                } else {
-                        ++S.col;
-                }
-                return ch;
-        };
-
-        function eof() {
-                return !S.peek();
-        };
-
-        function find(what, signal_eof) {
-                var pos = S.text.indexOf(what, S.pos);
-                if (signal_eof && pos == -1) throw EX_EOF;
-                return pos;
-        };
-
-        function start_token() {
-                S.tokline = S.line;
-                S.tokcol = S.col;
-                S.tokpos = S.pos;
-        };
-
-        function token(type, value, is_comment) {
-                S.regex_allowed = ((type == "operator" && !HOP(UNARY_POSTFIX, value)) ||
-                                   (type == "keyword" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) ||
-                                   (type == "punc" && HOP(PUNC_BEFORE_EXPRESSION, value)));
-                var ret = {
-                        type  : type,
-                        value : value,
-                        line  : S.tokline,
-                        col   : S.tokcol,
-                        pos   : S.tokpos,
-                        nlb   : S.newline_before
-                };
-                if (!is_comment) {
-                        ret.comments_before = S.comments_before;
-                        S.comments_before = [];
-                }
-                S.newline_before = false;
-                return ret;
-        };
-
-        function skip_whitespace() {
-                while (HOP(WHITESPACE_CHARS, peek()))
-                        next();
-        };
-
-        function read_while(pred) {
-                var ret = "", ch = peek(), i = 0;
-                while (ch && pred(ch, i++)) {
-                        ret += next();
-                        ch = peek();
-                }
-                return ret;
-        };
-
-        function parse_error(err) {
-                js_error(err, S.tokline, S.tokcol, S.tokpos);
-        };
-
-        function read_num(prefix) {
-                var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".";
-                var num = read_while(function(ch, i){
-                        if (ch == "x" || ch == "X") {
-                                if (has_x) return false;
-                                return has_x = true;
-                        }
-                        if (!has_x && (ch == "E" || ch == "e")) {
-                                if (has_e) return false;
-                                return has_e = after_e = true;
-                        }
-                        if (ch == "-") {
-                                if (after_e || (i == 0 && !prefix)) return true;
-                                return false;
-                        }
-                        if (ch == "+") return after_e;
-                        after_e = false;
-                        if (ch == ".") {
-                                if (!has_dot && !has_x)
-                                        return has_dot = true;
-                                return false;
-                        }
-                        return is_alphanumeric_char(ch);
-                });
-                if (prefix)
-                        num = prefix + num;
-                var valid = parse_js_number(num);
-                if (!isNaN(valid)) {
-                        return token("num", valid);
-                } else {
-                        parse_error("Invalid syntax: " + num);
-                }
-        };
-
-        function read_escaped_char() {
-                var ch = next(true);
-                switch (ch) {
-                    case "n" : return "\n";
-                    case "r" : return "\r";
-                    case "t" : return "\t";
-                    case "b" : return "\b";
-                    case "v" : return "\u000b";
-                    case "f" : return "\f";
-                    case "0" : return "\0";
-                    case "x" : return String.fromCharCode(hex_bytes(2));
-                    case "u" : return String.fromCharCode(hex_bytes(4));
-                    case "\n": return "";
-                    default  : return ch;
-                }
-        };
-
-        function hex_bytes(n) {
-                var num = 0;
-                for (; n > 0; --n) {
-                        var digit = parseInt(next(true), 16);
-                        if (isNaN(digit))
-                                parse_error("Invalid hex-character pattern in string");
-                        num = (num << 4) | digit;
-                }
-                return num;
-        };
-
-        function read_string() {
-                return with_eof_error("Unterminated string constant", function(){
-                        var quote = next(), ret = "";
-                        for (;;) {
-                                var ch = next(true);
-                                if (ch == "\\") {
-                                        // read OctalEscapeSequence (XXX: deprecated if "strict mode")
-                                        // https://github.com/mishoo/UglifyJS/issues/178
-                                        var octal_len = 0, first = null;
-                                        ch = read_while(function(ch){
-                                                if (ch >= "0" && ch <= "7") {
-                                                        if (!first) {
-                                                                first = ch;
-                                                                return ++octal_len;
-                                                        }
-                                                        else if (first <= "3" && octal_len <= 2) return ++octal_len;
-                                                        else if (first >= "4" && octal_len <= 1) return ++octal_len;
-                                                }
-                                                return false;
-                                        });
-                                        if (octal_len > 0) ch = String.fromCharCode(parseInt(ch, 8));
-                                        else ch = read_escaped_char();
-                                }
-                                else if (ch == quote) break;
-                                ret += ch;
-                        }
-                        return token("string", ret);
-                });
-        };
-
-        function read_line_comment() {
-                next();
-                var i = find("\n"), ret;
-                if (i == -1) {
-                        ret = S.text.substr(S.pos);
-                        S.pos = S.text.length;
-                } else {
-                        ret = S.text.substring(S.pos, i);
-                        S.pos = i;
-                }
-                return token("comment1", ret, true);
-        };
-
-        function read_multiline_comment() {
-                next();
-                return with_eof_error("Unterminated multiline comment", function(){
-                        var i = find("*/", true),
-                            text = S.text.substring(S.pos, i),
-                            tok = token("comment2", text, true);
-                        S.pos = i + 2;
-                        S.line += text.split("\n").length - 1;
-                        S.newline_before = text.indexOf("\n") >= 0;
-
-                        // https://github.com/mishoo/UglifyJS/issues/#issue/100
-                        if (/^@cc_on/i.test(text)) {
-                                warn("WARNING: at line " + S.line);
-                                warn("*** Found \"conditional comment\": " + text);
-                                warn("*** UglifyJS DISCARDS ALL COMMENTS.  This means your code might no longer work properly in Internet Explorer.");
-                        }
-
-                        return tok;
-                });
-        };
-
-        function read_name() {
-                var backslash = false, name = "", ch;
-                while ((ch = peek()) != null) {
-                        if (!backslash) {
-                                if (ch == "\\") backslash = true, next();
-                                else if (is_identifier_char(ch)) name += next();
-                                else break;
-                        }
-                        else {
-                                if (ch != "u") parse_error("Expecting UnicodeEscapeSequence -- uXXXX");
-                                ch = read_escaped_char();
-                                if (!is_identifier_char(ch)) parse_error("Unicode char: " + ch.charCodeAt(0) + " is not valid in identifier");
-                                name += ch;
-                                backslash = false;
-                        }
-                }
-                return name;
-        };
-
-        function read_regexp() {
-                return with_eof_error("Unterminated regular expression", function(){
-                        var prev_backslash = false, regexp = "", ch, in_class = false;
-                        while ((ch = next(true))) if (prev_backslash) {
-                                regexp += "\\" + ch;
-                                prev_backslash = false;
-                        } else if (ch == "[") {
-                                in_class = true;
-                                regexp += ch;
-                        } else if (ch == "]" && in_class) {
-                                in_class = false;
-                                regexp += ch;
-                        } else if (ch == "/" && !in_class) {
-                                break;
-                        } else if (ch == "\\") {
-                                prev_backslash = true;
-                        } else {
-                                regexp += ch;
-                        }
-                        var mods = read_name();
-                        return token("regexp", [ regexp, mods ]);
-                });
-        };
-
-        function read_operator(prefix) {
-                function grow(op) {
-                        if (!peek()) return op;
-                        var bigger = op + peek();
-                        if (HOP(OPERATORS, bigger)) {
-                                next();
-                                return grow(bigger);
-                        } else {
-                                return op;
-                        }
-                };
-                return token("operator", grow(prefix || next()));
-        };
-
-        function handle_slash() {
-                next();
-                var regex_allowed = S.regex_allowed;
-                switch (peek()) {
-                    case "/":
-                        S.comments_before.push(read_line_comment());
-                        S.regex_allowed = regex_allowed;
-                        return next_token();
-                    case "*":
-                        S.comments_before.push(read_multiline_comment());
-                        S.regex_allowed = regex_allowed;
-                        return next_token();
-                }
-                return S.regex_allowed ? read_regexp() : read_operator("/");
-        };
-
-        function handle_dot() {
-                next();
-                return is_digit(peek())
-                        ? read_num(".")
-                        : token("punc", ".");
-        };
-
-        function read_word() {
-                var word = read_name();
-                return !HOP(KEYWORDS, word)
-                        ? token("name", word)
-                        : HOP(OPERATORS, word)
-                        ? token("operator", word)
-                        : HOP(KEYWORDS_ATOM, word)
-                        ? token("atom", word)
-                        : token("keyword", word);
-        };
-
-        function with_eof_error(eof_error, cont) {
-                try {
-                        return cont();
-                } catch(ex) {
-                        if (ex === EX_EOF) parse_error(eof_error);
-                        else throw ex;
-                }
-        };
-
-        function next_token(force_regexp) {
-                if (force_regexp)
-                        return read_regexp();
-                skip_whitespace();
-                start_token();
-                var ch = peek();
-                if (!ch) return token("eof");
-                if (is_digit(ch)) return read_num();
-                if (ch == '"' || ch == "'") return read_string();
-                if (HOP(PUNC_CHARS, ch)) return token("punc", next());
-                if (ch == ".") return handle_dot();
-                if (ch == "/") return handle_slash();
-                if (HOP(OPERATOR_CHARS, ch)) return read_operator();
-                if (ch == "\\" || is_identifier_start(ch)) return read_word();
-                parse_error("Unexpected character '" + ch + "'");
-        };
-
-        next_token.context = function(nc) {
-                if (nc) S = nc;
-                return S;
-        };
-
-        return next_token;
-
-};
-
-/* -----[ Parser (constants) ]----- */
-
-var UNARY_PREFIX = array_to_hash([
-        "typeof",
-        "void",
-        "delete",
-        "--",
-        "++",
-        "!",
-        "~",
-        "-",
-        "+"
-]);
-
-var UNARY_POSTFIX = array_to_hash([ "--", "++" ]);
-
-var ASSIGNMENT = (function(a, ret, i){
-        while (i < a.length) {
-                ret[a[i]] = a[i].substr(0, a[i].length - 1);
-                i++;
-        }
-        return ret;
-})(
-        ["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="],
-        { "=": true },
-        0
-);
-
-var PRECEDENCE = (function(a, ret){
-        for (var i = 0, n = 1; i < a.length; ++i, ++n) {
-                var b = a[i];
-                for (var j = 0; j < b.length; ++j) {
-                        ret[b[j]] = n;
-                }
-        }
-        return ret;
-})(
-        [
-                ["||"],
-                ["&&"],
-                ["|"],
-                ["^"],
-                ["&"],
-                ["==", "===", "!=", "!=="],
-                ["<", ">", "<=", ">=", "in", "instanceof"],
-                [">>", "<<", ">>>"],
-                ["+", "-"],
-                ["*", "/", "%"]
-        ],
-        {}
-);
-
-var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]);
-
-var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]);
-
-/* -----[ Parser ]----- */
-
-function NodeWithToken(str, start, end) {
-        this.name = str;
-        this.start = start;
-        this.end = end;
-};
-
-NodeWithToken.prototype.toString = function() { return this.name; };
-
-function parse($TEXT, exigent_mode, embed_tokens) {
-
-        var S = {
-                input       : typeof $TEXT == "string" ? tokenizer($TEXT, true) : $TEXT,
-                token       : null,
-                prev        : null,
-                peeked      : null,
-                in_function : 0,
-                in_loop     : 0,
-                labels      : []
-        };
-
-        S.token = next();
-
-        function is(type, value) {
-                return is_token(S.token, type, value);
-        };
-
-        function peek() { return S.peeked || (S.peeked = S.input()); };
-
-        function next() {
-                S.prev = S.token;
-                if (S.peeked) {
-                        S.token = S.peeked;
-                        S.peeked = null;
-                } else {
-                        S.token = S.input();
-                }
-                return S.token;
-        };
-
-        function prev() {
-                return S.prev;
-        };
-
-        function croak(msg, line, col, pos) {
-                var ctx = S.input.context();
-                js_error(msg,
-                         line != null ? line : ctx.tokline,
-                         col != null ? col : ctx.tokcol,
-                         pos != null ? pos : ctx.tokpos);
-        };
-
-        function token_error(token, msg) {
-                croak(msg, token.line, token.col);
-        };
-
-        function unexpected(token) {
-                if (token == null)
-                        token = S.token;
-                token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")");
-        };
-
-        function expect_token(type, val) {
-                if (is(type, val)) {
-                        return next();
-                }
-                token_error(S.token, "Unexpected token " + S.token.type + ", expected " + type);
-        };
-
-        function expect(punc) { return expect_token("punc", punc); };
-
-        function can_insert_semicolon() {
-                return !exigent_mode && (
-                        S.token.nlb || is("eof") || is("punc", "}")
-                );
-        };
-
-        function semicolon() {
-                if (is("punc", ";")) next();
-                else if (!can_insert_semicolon()) unexpected();
-        };
-
-        function as() {
-                return slice(arguments);
-        };
-
-        function parenthesised() {
-                expect("(");
-                var ex = expression();
-                expect(")");
-                return ex;
-        };
-
-        function add_tokens(str, start, end) {
-                return str instanceof NodeWithToken ? str : new NodeWithToken(str, start, end);
-        };
-
-        function maybe_embed_tokens(parser) {
-                if (embed_tokens) return function() {
-                        var start = S.token;
-                        var ast = parser.apply(this, arguments);
-                        ast[0] = add_tokens(ast[0], start, prev());
-                        return ast;
-                };
-                else return parser;
-        };
-
-        var statement = maybe_embed_tokens(function() {
-                if (is("operator", "/")) {
-                        S.peeked = null;
-                        S.token = S.input(true); // force regexp
-                }
-                switch (S.token.type) {
-                    case "num":
-                    case "string":
-                    case "regexp":
-                    case "operator":
-                    case "atom":
-                        return simple_statement();
-
-                    case "name":
-                        return is_token(peek(), "punc", ":")
-                                ? labeled_statement(prog1(S.token.value, next, next))
-                                : simple_statement();
-
-                    case "punc":
-                        switch (S.token.value) {
-                            case "{":
-                                return as("block", block_());
-                            case "[":
-                            case "(":
-                                return simple_statement();
-                            case ";":
-                                next();
-                                return as("block");
-                            default:
-                                unexpected();
-                        }
-
-                    case "keyword":
-                        switch (prog1(S.token.value, next)) {
-                            case "break":
-                                return break_cont("break");
-
-                            case "continue":
-                                return break_cont("continue");
-
-                            case "debugger":
-                                semicolon();
-                                return as("debugger");
-
-                            case "do":
-                                return (function(body){
-                                        expect_token("keyword", "while");
-                                        return as("do", prog1(parenthesised, semicolon), body);
-                                })(in_loop(statement));
-
-                            case "for":
-                                return for_();
-
-                            case "function":
-                                return function_(true);
-
-                            case "if":
-                                return if_();
-
-                            case "return":
-                                if (S.in_function == 0)
-                                        croak("'return' outside of function");
-                                return as("return",
-                                          is("punc", ";")
-                                          ? (next(), null)
-                                          : can_insert_semicolon()
-                                          ? null
-                                          : prog1(expression, semicolon));
-
-                            case "switch":
-                                return as("switch", parenthesised(), switch_block_());
-
-                            case "throw":
-                                return as("throw", prog1(expression, semicolon));
-
-                            case "try":
-                                return try_();
-
-                            case "var":
-                                return prog1(var_, semicolon);
-
-                            case "const":
-                                return prog1(const_, semicolon);
-
-                            case "while":
-                                return as("while", parenthesised(), in_loop(statement));
-
-                            case "with":
-                                return as("with", parenthesised(), statement());
-
-                            default:
-                                unexpected();
-                        }
-                }
-        });
-
-        function labeled_statement(label) {
-                S.labels.push(label);
-                var start = S.token, stat = statement();
-                if (exigent_mode && !HOP(STATEMENTS_WITH_LABELS, stat[0]))
-                        unexpected(start);
-                S.labels.pop();
-                return as("label", label, stat);
-        };
-
-        function simple_statement() {
-                return as("stat", prog1(expression, semicolon));
-        };
-
-        function break_cont(type) {
-                var name;
-                if (!can_insert_semicolon()) {
-                        name = is("name") ? S.token.value : null;
-                }
-                if (name != null) {
-                        next();
-                        if (!member(name, S.labels))
-                                croak("Label " + name + " without matching loop or statement");
-                }
-                else if (S.in_loop == 0)
-                        croak(type + " not inside a loop or switch");
-                semicolon();
-                return as(type, name);
-        };
-
-        function for_() {
-                expect("(");
-                var init = null;
-                if (!is("punc", ";")) {
-                        init = is("keyword", "var")
-                                ? (next(), var_(true))
-                                : expression(true, true);
-                        if (is("operator", "in"))
-                                return for_in(init);
-                }
-                return regular_for(init);
-        };
-
-        function regular_for(init) {
-                expect(";");
-                var test = is("punc", ";") ? null : expression();
-                expect(";");
-                var step = is("punc", ")") ? null : expression();
-                expect(")");
-                return as("for", init, test, step, in_loop(statement));
-        };
-
-        function for_in(init) {
-                var lhs = init[0] == "var" ? as("name", init[1][0]) : init;
-                next();
-                var obj = expression();
-                expect(")");
-                return as("for-in", init, lhs, obj, in_loop(statement));
-        };
-
-        var function_ = maybe_embed_tokens(function(in_statement) {
-                var name = is("name") ? prog1(S.token.value, next) : null;
-                if (in_statement && !name)
-                        unexpected();
-                expect("(");
-                return as(in_statement ? "defun" : "function",
-                          name,
-                          // arguments
-                          (function(first, a){
-                                  while (!is("punc", ")")) {
-                                          if (first) first = false; else expect(",");
-                                          if (!is("name")) unexpected();
-                                          a.push(S.token.value);
-                                          next();
-                                  }
-                                  next();
-                                  return a;
-                          })(true, []),
-                          // body
-                          (function(){
-                                  ++S.in_function;
-                                  var loop = S.in_loop;
-                                  S.in_loop = 0;
-                                  var a = block_();
-                                  --S.in_function;
-                                  S.in_loop = loop;
-                                  return a;
-                          })());
-        });
-
-        function if_() {
-                var cond = parenthesised(), body = statement(), belse;
-                if (is("keyword", "else")) {
-                        next();
-                        belse = statement();
-                }
-                return as("if", cond, body, belse);
-        };
-
-        function block_() {
-                expect("{");
-                var a = [];
-                while (!is("punc", "}")) {
-                        if (is("eof")) unexpected();
-                        a.push(statement());
-                }
-                next();
-                return a;
-        };
-
-        var switch_block_ = curry(in_loop, function(){
-                expect("{");
-                var a = [], cur = null;
-                while (!is("punc", "}")) {
-                        if (is("eof")) unexpected();
-                        if (is("keyword", "case")) {
-                                next();
-                                cur = [];
-                                a.push([ expression(), cur ]);
-                                expect(":");
-                        }
-                        else if (is("keyword", "default")) {
-                                next();
-                                expect(":");
-                                cur = [];
-                                a.push([ null, cur ]);
-                        }
-                        else {
-                                if (!cur) unexpected();
-                                cur.push(statement());
-                        }
-                }
-                next();
-                return a;
-        });
-
-        function try_() {
-                var body = block_(), bcatch, bfinally;
-                if (is("keyword", "catch")) {
-                        next();
-                        expect("(");
-                        if (!is("name"))
-                                croak("Name expected");
-                        var name = S.token.value;
-                        next();
-                        expect(")");
-                        bcatch = [ name, block_() ];
-                }
-                if (is("keyword", "finally")) {
-                        next();
-                        bfinally = block_();
-                }
-                if (!bcatch && !bfinally)
-                        croak("Missing catch/finally blocks");
-                return as("try", body, bcatch, bfinally);
-        };
-
-        function vardefs(no_in) {
-                var a = [];
-                for (;;) {
-                        if (!is("name"))
-                                unexpected();
-                        var name = S.token.value;
-                        next();
-                        if (is("operator", "=")) {
-                                next();
-                                a.push([ name, expression(false, no_in) ]);
-                        } else {
-                                a.push([ name ]);
-                        }
-                        if (!is("punc", ","))
-                                break;
-                        next();
-                }
-                return a;
-        };
-
-        function var_(no_in) {
-                return as("var", vardefs(no_in));
-        };
-
-        function const_() {
-                return as("const", vardefs());
-        };
-
-        function new_() {
-                var newexp = expr_atom(false), args;
-                if (is("punc", "(")) {
-                        next();
-                        args = expr_list(")");
-                } else {
-                        args = [];
-                }
-                return subscripts(as("new", newexp, args), true);
-        };
-
-        var expr_atom = maybe_embed_tokens(function(allow_calls) {
-                if (is("operator", "new")) {
-                        next();
-                        return new_();
-                }
-                if (is("punc")) {
-                        switch (S.token.value) {
-                            case "(":
-                                next();
-                                return subscripts(prog1(expression, curry(expect, ")")), allow_calls);
-                            case "[":
-                                next();
-                                return subscripts(array_(), allow_calls);
-                            case "{":
-                                next();
-                                return subscripts(object_(), allow_calls);
-                        }
-                        unexpected();
-                }
-                if (is("keyword", "function")) {
-                        next();
-                        return subscripts(function_(false), allow_calls);
-                }
-                if (HOP(ATOMIC_START_TOKEN, S.token.type)) {
-                        var atom = S.token.type == "regexp"
-                                ? as("regexp", S.token.value[0], S.token.value[1])
-                                : as(S.token.type, S.token.value);
-                        return subscripts(prog1(atom, next), allow_calls);
-                }
-                unexpected();
-        });
-
-        function expr_list(closing, allow_trailing_comma, allow_empty) {
-                var first = true, a = [];
-                while (!is("punc", closing)) {
-                        if (first) first = false; else expect(",");
-                        if (allow_trailing_comma && is("punc", closing)) break;
-                        if (is("punc", ",") && allow_empty) {
-                                a.push([ "atom", "undefined" ]);
-                        } else {
-                                a.push(expression(false));
-                        }
-                }
-                next();
-                return a;
-        };
-
-        function array_() {
-                return as("array", expr_list("]", !exigent_mode, true));
-        };
-
-        function object_() {
-                var first = true, a = [];
-                while (!is("punc", "}")) {
-                        if (first) first = false; else expect(",");
-                        if (!exigent_mode && is("punc", "}"))
-                                // allow trailing comma
-                                break;
-                        var type = S.token.type;
-                        var name = as_property_name();
-                        if (type == "name" && (name == "get" || name == "set") && !is("punc", ":")) {
-                                a.push([ as_name(), function_(false), name ]);
-                        } else {
-                                expect(":");
-                                a.push([ name, expression(false) ]);
-                        }
-                }
-                next();
-                return as("object", a);
-        };
-
-        function as_property_name() {
-                switch (S.token.type) {
-                    case "num":
-                    case "string":
-                        return prog1(S.token.value, next);
-                }
-                return as_name();
-        };
-
-        function as_name() {
-                switch (S.token.type) {
-                    case "name":
-                    case "operator":
-                    case "keyword":
-                    case "atom":
-                        return prog1(S.token.value, next);
-                    default:
-                        unexpected();
-                }
-        };
-
-        function subscripts(expr, allow_calls) {
-                if (is("punc", ".")) {
-                        next();
-                        return subscripts(as("dot", expr, as_name()), allow_calls);
-                }
-                if (is("punc", "[")) {
-                        next();
-                        return subscripts(as("sub", expr, prog1(expression, curry(expect, "]"))), allow_calls);
-                }
-                if (allow_calls && is("punc", "(")) {
-                        next();
-                        return subscripts(as("call", expr, expr_list(")")), true);
-                }
-                return expr;
-        };
-
-        function maybe_unary(allow_calls) {
-                if (is("operator") && HOP(UNARY_PREFIX, S.token.value)) {
-                        return make_unary("unary-prefix",
-                                          prog1(S.token.value, next),
-                                          maybe_unary(allow_calls));
-                }
-                var val = expr_atom(allow_calls);
-                while (is("operator") && HOP(UNARY_POSTFIX, S.token.value) && !S.token.nlb) {
-                        val = make_unary("unary-postfix", S.token.value, val);
-                        next();
-                }
-                return val;
-        };
-
-        function make_unary(tag, op, expr) {
-                if ((op == "++" || op == "--") && !is_assignable(expr))
-                        croak("Invalid use of " + op + " operator");
-                return as(tag, op, expr);
-        };
-
-        function expr_op(left, min_prec, no_in) {
-                var op = is("operator") ? S.token.value : null;
-                if (op && op == "in" && no_in) op = null;
-                var prec = op != null ? PRECEDENCE[op] : null;
-                if (prec != null && prec > min_prec) {
-                        next();
-                        var right = expr_op(maybe_unary(true), prec, no_in);
-                        return expr_op(as("binary", op, left, right), min_prec, no_in);
-                }
-                return left;
-        };
-
-        function expr_ops(no_in) {
-                return expr_op(maybe_unary(true), 0, no_in);
-        };
-
-        function maybe_conditional(no_in) {
-                var expr = expr_ops(no_in);
-                if (is("operator", "?")) {
-                        next();
-                        var yes = expression(false);
-                        expect(":");
-                        return as("conditional", expr, yes, expression(false, no_in));
-                }
-                return expr;
-        };
-
-        function is_assignable(expr) {
-                if (!exigent_mode) return true;
-                switch (expr[0]) {
-                    case "dot":
-                    case "sub":
-                    case "new":
-                    case "call":
-                        return true;
-                    case "name":
-                        return expr[1] != "this";
-                }
-        };
-
-        function maybe_assign(no_in) {
-                var left = maybe_conditional(no_in), val = S.token.value;
-                if (is("operator") && HOP(ASSIGNMENT, val)) {
-                        if (is_assignable(left)) {
-                                next();
-                                return as("assign", ASSIGNMENT[val], left, maybe_assign(no_in));
-                        }
-                        croak("Invalid assignment");
-                }
-                return left;
-        };
-
-        var expression = maybe_embed_tokens(function(commas, no_in) {
-                if (arguments.length == 0)
-                        commas = true;
-                var expr = maybe_assign(no_in);
-                if (commas && is("punc", ",")) {
-                        next();
-                        return as("seq", expr, expression(true, no_in));
-                }
-                return expr;
-        });
-
-        function in_loop(cont) {
-                try {
-                        ++S.in_loop;
-                        return cont();
-                } finally {
-                        --S.in_loop;
-                }
-        };
-
-        return as("toplevel", (function(a){
-                while (!is("eof"))
-                        a.push(statement());
-                return a;
-        })([]));
-
-};
-
-/* -----[ Utilities ]----- */
-
-function curry(f) {
-        var args = slice(arguments, 1);
-        return function() { return f.apply(this, args.concat(slice(arguments))); };
-};
-
-function prog1(ret) {
-        if (ret instanceof Function)
-                ret = ret();
-        for (var i = 1, n = arguments.length; --n > 0; ++i)
-                arguments[i]();
-        return ret;
-};
-
-function array_to_hash(a) {
-        var ret = {};
-        for (var i = 0; i < a.length; ++i)
-                ret[a[i]] = true;
-        return ret;
-};
-
-function slice(a, start) {
-        return Array.prototype.slice.call(a, start || 0);
-};
-
-function characters(str) {
-        return str.split("");
-};
-
-function member(name, array) {
-        for (var i = array.length; --i >= 0;)
-                if (array[i] === name)
-                        return true;
-        return false;
-};
-
-function HOP(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-};
-
-var warn = function() {};
-
-/* -----[ Exports ]----- */
-
-exports.tokenizer = tokenizer;
-exports.parse = parse;
-exports.slice = slice;
-exports.curry = curry;
-exports.member = member;
-exports.array_to_hash = array_to_hash;
-exports.PRECEDENCE = PRECEDENCE;
-exports.KEYWORDS_ATOM = KEYWORDS_ATOM;
-exports.RESERVED_WORDS = RESERVED_WORDS;
-exports.KEYWORDS = KEYWORDS;
-exports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN;
-exports.OPERATORS = OPERATORS;
-exports.is_alphanumeric_char = is_alphanumeric_char;
-exports.set_logger = function(logger) {
-        warn = logger;
-};
diff --git a/node/node_modules/uglify-js/lib/process.js b/node/node_modules/uglify-js/lib/process.js
deleted file mode 100644 (file)
index d34e239..0000000
+++ /dev/null
@@ -1,1949 +0,0 @@
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-
-  This version is suitable for Node.js.  With minimal changes (the
-  exports stuff) it should work on any JS platform.
-
-  This file implements some AST processors.  They work on data built
-  by parse-js.
-
-  Exported functions:
-
-    - ast_mangle(ast, options) -- mangles the variable/function names
-      in the AST.  Returns an AST.
-
-    - ast_squeeze(ast) -- employs various optimizations to make the
-      final generated code even smaller.  Returns an AST.
-
-    - gen_code(ast, options) -- generates JS code from the AST.  Pass
-      true (or an object, see the code for some options) as second
-      argument to get "pretty" (indented) code.
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-var jsp = require("./parse-js"),
-    slice = jsp.slice,
-    member = jsp.member,
-    PRECEDENCE = jsp.PRECEDENCE,
-    OPERATORS = jsp.OPERATORS;
-
-/* -----[ helper for AST traversal ]----- */
-
-function ast_walker() {
-        function _vardefs(defs) {
-                return [ this[0], MAP(defs, function(def){
-                        var a = [ def[0] ];
-                        if (def.length > 1)
-                                a[1] = walk(def[1]);
-                        return a;
-                }) ];
-        };
-        function _block(statements) {
-                var out = [ this[0] ];
-                if (statements != null)
-                        out.push(MAP(statements, walk));
-                return out;
-        };
-        var walkers = {
-                "string": function(str) {
-                        return [ this[0], str ];
-                },
-                "num": function(num) {
-                        return [ this[0], num ];
-                },
-                "name": function(name) {
-                        return [ this[0], name ];
-                },
-                "toplevel": function(statements) {
-                        return [ this[0], MAP(statements, walk) ];
-                },
-                "block": _block,
-                "splice": _block,
-                "var": _vardefs,
-                "const": _vardefs,
-                "try": function(t, c, f) {
-                        return [
-                                this[0],
-                                MAP(t, walk),
-                                c != null ? [ c[0], MAP(c[1], walk) ] : null,
-                                f != null ? MAP(f, walk) : null
-                        ];
-                },
-                "throw": function(expr) {
-                        return [ this[0], walk(expr) ];
-                },
-                "new": function(ctor, args) {
-                        return [ this[0], walk(ctor), MAP(args, walk) ];
-                },
-                "switch": function(expr, body) {
-                        return [ this[0], walk(expr), MAP(body, function(branch){
-                                return [ branch[0] ? walk(branch[0]) : null,
-                                         MAP(branch[1], walk) ];
-                        }) ];
-                },
-                "break": function(label) {
-                        return [ this[0], label ];
-                },
-                "continue": function(label) {
-                        return [ this[0], label ];
-                },
-                "conditional": function(cond, t, e) {
-                        return [ this[0], walk(cond), walk(t), walk(e) ];
-                },
-                "assign": function(op, lvalue, rvalue) {
-                        return [ this[0], op, walk(lvalue), walk(rvalue) ];
-                },
-                "dot": function(expr) {
-                        return [ this[0], walk(expr) ].concat(slice(arguments, 1));
-                },
-                "call": function(expr, args) {
-                        return [ this[0], walk(expr), MAP(args, walk) ];
-                },
-                "function": function(name, args, body) {
-                        return [ this[0], name, args.slice(), MAP(body, walk) ];
-                },
-                "defun": function(name, args, body) {
-                        return [ this[0], name, args.slice(), MAP(body, walk) ];
-                },
-                "if": function(conditional, t, e) {
-                        return [ this[0], walk(conditional), walk(t), walk(e) ];
-                },
-                "for": function(init, cond, step, block) {
-                        return [ this[0], walk(init), walk(cond), walk(step), walk(block) ];
-                },
-                "for-in": function(vvar, key, hash, block) {
-                        return [ this[0], walk(vvar), walk(key), walk(hash), walk(block) ];
-                },
-                "while": function(cond, block) {
-                        return [ this[0], walk(cond), walk(block) ];
-                },
-                "do": function(cond, block) {
-                        return [ this[0], walk(cond), walk(block) ];
-                },
-                "return": function(expr) {
-                        return [ this[0], walk(expr) ];
-                },
-                "binary": function(op, left, right) {
-                        return [ this[0], op, walk(left), walk(right) ];
-                },
-                "unary-prefix": function(op, expr) {
-                        return [ this[0], op, walk(expr) ];
-                },
-                "unary-postfix": function(op, expr) {
-                        return [ this[0], op, walk(expr) ];
-                },
-                "sub": function(expr, subscript) {
-                        return [ this[0], walk(expr), walk(subscript) ];
-                },
-                "object": function(props) {
-                        return [ this[0], MAP(props, function(p){
-                                return p.length == 2
-                                        ? [ p[0], walk(p[1]) ]
-                                        : [ p[0], walk(p[1]), p[2] ]; // get/set-ter
-                        }) ];
-                },
-                "regexp": function(rx, mods) {
-                        return [ this[0], rx, mods ];
-                },
-                "array": function(elements) {
-                        return [ this[0], MAP(elements, walk) ];
-                },
-                "stat": function(stat) {
-                        return [ this[0], walk(stat) ];
-                },
-                "seq": function() {
-                        return [ this[0] ].concat(MAP(slice(arguments), walk));
-                },
-                "label": function(name, block) {
-                        return [ this[0], name, walk(block) ];
-                },
-                "with": function(expr, block) {
-                        return [ this[0], walk(expr), walk(block) ];
-                },
-                "atom": function(name) {
-                        return [ this[0], name ];
-                }
-        };
-
-        var user = {};
-        var stack = [];
-        function walk(ast) {
-                if (ast == null)
-                        return null;
-                try {
-                        stack.push(ast);
-                        var type = ast[0];
-                        var gen = user[type];
-                        if (gen) {
-                                var ret = gen.apply(ast, ast.slice(1));
-                                if (ret != null)
-                                        return ret;
-                        }
-                        gen = walkers[type];
-                        return gen.apply(ast, ast.slice(1));
-                } finally {
-                        stack.pop();
-                }
-        };
-
-        function with_walkers(walkers, cont){
-                var save = {}, i;
-                for (i in walkers) if (HOP(walkers, i)) {
-                        save[i] = user[i];
-                        user[i] = walkers[i];
-                }
-                var ret = cont();
-                for (i in save) if (HOP(save, i)) {
-                        if (!save[i]) delete user[i];
-                        else user[i] = save[i];
-                }
-                return ret;
-        };
-
-        return {
-                walk: walk,
-                with_walkers: with_walkers,
-                parent: function() {
-                        return stack[stack.length - 2]; // last one is current node
-                },
-                stack: function() {
-                        return stack;
-                }
-        };
-};
-
-/* -----[ Scope and mangling ]----- */
-
-function Scope(parent) {
-        this.names = {};        // names defined in this scope
-        this.mangled = {};      // mangled names (orig.name => mangled)
-        this.rev_mangled = {};  // reverse lookup (mangled => orig.name)
-        this.cname = -1;        // current mangled name
-        this.refs = {};         // names referenced from this scope
-        this.uses_with = false; // will become TRUE if with() is detected in this or any subscopes
-        this.uses_eval = false; // will become TRUE if eval() is detected in this or any subscopes
-        this.parent = parent;   // parent scope
-        this.children = [];     // sub-scopes
-        if (parent) {
-                this.level = parent.level + 1;
-                parent.children.push(this);
-        } else {
-                this.level = 0;
-        }
-};
-
-var base54 = (function(){
-        var DIGITS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_";
-        return function(num) {
-                var ret = "";
-                do {
-                        ret = DIGITS.charAt(num % 54) + ret;
-                        num = Math.floor(num / 54);
-                } while (num > 0);
-                return ret;
-        };
-})();
-
-Scope.prototype = {
-        has: function(name) {
-                for (var s = this; s; s = s.parent)
-                        if (HOP(s.names, name))
-                                return s;
-        },
-        has_mangled: function(mname) {
-                for (var s = this; s; s = s.parent)
-                        if (HOP(s.rev_mangled, mname))
-                                return s;
-        },
-        toJSON: function() {
-                return {
-                        names: this.names,
-                        uses_eval: this.uses_eval,
-                        uses_with: this.uses_with
-                };
-        },
-
-        next_mangled: function() {
-                // we must be careful that the new mangled name:
-                //
-                // 1. doesn't shadow a mangled name from a parent
-                //    scope, unless we don't reference the original
-                //    name from this scope OR from any sub-scopes!
-                //    This will get slow.
-                //
-                // 2. doesn't shadow an original name from a parent
-                //    scope, in the event that the name is not mangled
-                //    in the parent scope and we reference that name
-                //    here OR IN ANY SUBSCOPES!
-                //
-                // 3. doesn't shadow a name that is referenced but not
-                //    defined (possibly global defined elsewhere).
-                for (;;) {
-                        var m = base54(++this.cname), prior;
-
-                        // case 1.
-                        prior = this.has_mangled(m);
-                        if (prior && this.refs[prior.rev_mangled[m]] === prior)
-                                continue;
-
-                        // case 2.
-                        prior = this.has(m);
-                        if (prior && prior !== this && this.refs[m] === prior && !prior.has_mangled(m))
-                                continue;
-
-                        // case 3.
-                        if (HOP(this.refs, m) && this.refs[m] == null)
-                                continue;
-
-                        // I got "do" once. :-/
-                        if (!is_identifier(m))
-                                continue;
-
-                        return m;
-                }
-        },
-        set_mangle: function(name, m) {
-                this.rev_mangled[m] = name;
-                return this.mangled[name] = m;
-        },
-        get_mangled: function(name, newMangle) {
-                if (this.uses_eval || this.uses_with) return name; // no mangle if eval or with is in use
-                var s = this.has(name);
-                if (!s) return name; // not in visible scope, no mangle
-                if (HOP(s.mangled, name)) return s.mangled[name]; // already mangled in this scope
-                if (!newMangle) return name;                      // not found and no mangling requested
-                return s.set_mangle(name, s.next_mangled());
-        },
-        references: function(name) {
-                return name && !this.parent || this.uses_with || this.uses_eval || this.refs[name];
-        },
-        define: function(name, type) {
-                if (name != null) {
-                        if (type == "var" || !HOP(this.names, name))
-                                this.names[name] = type || "var";
-                        return name;
-                }
-        }
-};
-
-function ast_add_scope(ast) {
-
-        var current_scope = null;
-        var w = ast_walker(), walk = w.walk;
-        var having_eval = [];
-
-        function with_new_scope(cont) {
-                current_scope = new Scope(current_scope);
-                var ret = current_scope.body = cont();
-                ret.scope = current_scope;
-                current_scope = current_scope.parent;
-                return ret;
-        };
-
-        function define(name, type) {
-                return current_scope.define(name, type);
-        };
-
-        function reference(name) {
-                current_scope.refs[name] = true;
-        };
-
-        function _lambda(name, args, body) {
-                var is_defun = this[0] == "defun";
-                return [ this[0], is_defun ? define(name, "defun") : name, args, with_new_scope(function(){
-                        if (!is_defun) define(name, "lambda");
-                        MAP(args, function(name){ define(name, "arg") });
-                        return MAP(body, walk);
-                })];
-        };
-
-        function _vardefs(type) {
-                return function(defs) {
-                        MAP(defs, function(d){
-                                define(d[0], type);
-                                if (d[1]) reference(d[0]);
-                        });
-                };
-        };
-
-        return with_new_scope(function(){
-                // process AST
-                var ret = w.with_walkers({
-                        "function": _lambda,
-                        "defun": _lambda,
-                        "label": function(name, stat) { define(name, "label") },
-                        "break": function(label) { if (label) reference(label) },
-                        "continue": function(label) { if (label) reference(label) },
-                        "with": function(expr, block) {
-                                for (var s = current_scope; s; s = s.parent)
-                                        s.uses_with = true;
-                        },
-                        "var": _vardefs("var"),
-                        "const": _vardefs("const"),
-                        "try": function(t, c, f) {
-                                if (c != null) return [
-                                        this[0],
-                                        MAP(t, walk),
-                                        [ define(c[0], "catch"), MAP(c[1], walk) ],
-                                        f != null ? MAP(f, walk) : null
-                                ];
-                        },
-                        "name": function(name) {
-                                if (name == "eval")
-                                        having_eval.push(current_scope);
-                                reference(name);
-                        }
-                }, function(){
-                        return walk(ast);
-                });
-
-                // the reason why we need an additional pass here is
-                // that names can be used prior to their definition.
-
-                // scopes where eval was detected and their parents
-                // are marked with uses_eval, unless they define the
-                // "eval" name.
-                MAP(having_eval, function(scope){
-                        if (!scope.has("eval")) while (scope) {
-                                scope.uses_eval = true;
-                                scope = scope.parent;
-                        }
-                });
-
-                // for referenced names it might be useful to know
-                // their origin scope.  current_scope here is the
-                // toplevel one.
-                function fixrefs(scope, i) {
-                        // do children first; order shouldn't matter
-                        for (i = scope.children.length; --i >= 0;)
-                                fixrefs(scope.children[i]);
-                        for (i in scope.refs) if (HOP(scope.refs, i)) {
-                                // find origin scope and propagate the reference to origin
-                                for (var origin = scope.has(i), s = scope; s; s = s.parent) {
-                                        s.refs[i] = origin;
-                                        if (s === origin) break;
-                                }
-                        }
-                };
-                fixrefs(current_scope);
-
-                return ret;
-        });
-
-};
-
-/* -----[ mangle names ]----- */
-
-function ast_mangle(ast, options) {
-        var w = ast_walker(), walk = w.walk, scope;
-        options = options || {};
-
-        function get_mangled(name, newMangle) {
-                if (!options.toplevel && !scope.parent) return name; // don't mangle toplevel
-                if (options.except && member(name, options.except))
-                        return name;
-                return scope.get_mangled(name, newMangle);
-        };
-
-        function get_define(name) {
-                if (options.defines) {
-                        // we always lookup a defined symbol for the current scope FIRST, so declared
-                        // vars trump a DEFINE symbol, but if no such var is found, then match a DEFINE value
-                        if (!scope.has(name)) {
-                                if (HOP(options.defines, name)) {
-                                        return options.defines[name];
-                                }
-                        }
-                        return null;
-                }
-        };
-
-        function _lambda(name, args, body) {
-                var is_defun = this[0] == "defun", extra;
-                if (name) {
-                        if (is_defun) name = get_mangled(name);
-                        else {
-                                extra = {};
-                                if (!(scope.uses_eval || scope.uses_with))
-                                        name = extra[name] = scope.next_mangled();
-                                else
-                                        extra[name] = name;
-                        }
-                }
-                body = with_scope(body.scope, function(){
-                        args = MAP(args, function(name){ return get_mangled(name) });
-                        return MAP(body, walk);
-                }, extra);
-                return [ this[0], name, args, body ];
-        };
-
-        function with_scope(s, cont, extra) {
-                var _scope = scope;
-                scope = s;
-                if (extra) for (var i in extra) if (HOP(extra, i)) {
-                        s.set_mangle(i, extra[i]);
-                }
-                for (var i in s.names) if (HOP(s.names, i)) {
-                        get_mangled(i, true);
-                }
-                var ret = cont();
-                ret.scope = s;
-                scope = _scope;
-                return ret;
-        };
-
-        function _vardefs(defs) {
-                return [ this[0], MAP(defs, function(d){
-                        return [ get_mangled(d[0]), walk(d[1]) ];
-                }) ];
-        };
-
-        return w.with_walkers({
-                "function": _lambda,
-                "defun": function() {
-                        // move function declarations to the top when
-                        // they are not in some block.
-                        var ast = _lambda.apply(this, arguments);
-                        switch (w.parent()[0]) {
-                            case "toplevel":
-                            case "function":
-                            case "defun":
-                                return MAP.at_top(ast);
-                        }
-                        return ast;
-                },
-                "label": function(label, stat) { return [ this[0], get_mangled(label), walk(stat) ] },
-                "break": function(label) { if (label) return [ this[0], get_mangled(label) ] },
-                "continue": function(label) { if (label) return [ this[0], get_mangled(label) ] },
-                "var": _vardefs,
-                "const": _vardefs,
-                "name": function(name) {
-                        return get_define(name) || [ this[0], get_mangled(name) ];
-                },
-                "try": function(t, c, f) {
-                        return [ this[0],
-                                 MAP(t, walk),
-                                 c != null ? [ get_mangled(c[0]), MAP(c[1], walk) ] : null,
-                                 f != null ? MAP(f, walk) : null ];
-                },
-                "toplevel": function(body) {
-                        var self = this;
-                        return with_scope(self.scope, function(){
-                                return [ self[0], MAP(body, walk) ];
-                        });
-                }
-        }, function() {
-                return walk(ast_add_scope(ast));
-        });
-};
-
-/* -----[
-   - compress foo["bar"] into foo.bar,
-   - remove block brackets {} where possible
-   - join consecutive var declarations
-   - various optimizations for IFs:
-     - if (cond) foo(); else bar();  ==>  cond?foo():bar();
-     - if (cond) foo();  ==>  cond&&foo();
-     - if (foo) return bar(); else return baz();  ==> return foo?bar():baz(); // also for throw
-     - if (foo) return bar(); else something();  ==> {if(foo)return bar();something()}
-   ]----- */
-
-var warn = function(){};
-
-function best_of(ast1, ast2) {
-        return gen_code(ast1).length > gen_code(ast2[0] == "stat" ? ast2[1] : ast2).length ? ast2 : ast1;
-};
-
-function last_stat(b) {
-        if (b[0] == "block" && b[1] && b[1].length > 0)
-                return b[1][b[1].length - 1];
-        return b;
-}
-
-function aborts(t) {
-        if (t) switch (last_stat(t)[0]) {
-            case "return":
-            case "break":
-            case "continue":
-            case "throw":
-                return true;
-        }
-};
-
-function boolean_expr(expr) {
-        return ( (expr[0] == "unary-prefix"
-                  && member(expr[1], [ "!", "delete" ])) ||
-
-                 (expr[0] == "binary"
-                  && member(expr[1], [ "in", "instanceof", "==", "!=", "===", "!==", "<", "<=", ">=", ">" ])) ||
-
-                 (expr[0] == "binary"
-                  && member(expr[1], [ "&&", "||" ])
-                  && boolean_expr(expr[2])
-                  && boolean_expr(expr[3])) ||
-
-                 (expr[0] == "conditional"
-                  && boolean_expr(expr[2])
-                  && boolean_expr(expr[3])) ||
-
-                 (expr[0] == "assign"
-                  && expr[1] === true
-                  && boolean_expr(expr[3])) ||
-
-                 (expr[0] == "seq"
-                  && boolean_expr(expr[expr.length - 1]))
-               );
-};
-
-function make_conditional(c, t, e) {
-    var make_real_conditional = function() {
-        if (c[0] == "unary-prefix" && c[1] == "!") {
-            return e ? [ "conditional", c[2], e, t ] : [ "binary", "||", c[2], t ];
-        } else {
-            return e ? [ "conditional", c, t, e ] : [ "binary", "&&", c, t ];
-        }
-    };
-    // shortcut the conditional if the expression has a constant value
-    return when_constant(c, function(ast, val){
-        warn_unreachable(val ? e : t);
-        return          (val ? t : e);
-    }, make_real_conditional);
-};
-
-function empty(b) {
-        return !b || (b[0] == "block" && (!b[1] || b[1].length == 0));
-};
-
-function is_string(node) {
-        return (node[0] == "string" ||
-                node[0] == "unary-prefix" && node[1] == "typeof" ||
-                node[0] == "binary" && node[1] == "+" &&
-                (is_string(node[2]) || is_string(node[3])));
-};
-
-var when_constant = (function(){
-
-        var $NOT_CONSTANT = {};
-
-        // this can only evaluate constant expressions.  If it finds anything
-        // not constant, it throws $NOT_CONSTANT.
-        function evaluate(expr) {
-                switch (expr[0]) {
-                    case "string":
-                    case "num":
-                        return expr[1];
-                    case "name":
-                    case "atom":
-                        switch (expr[1]) {
-                            case "true": return true;
-                            case "false": return false;
-                        }
-                        break;
-                    case "unary-prefix":
-                        switch (expr[1]) {
-                            case "!": return !evaluate(expr[2]);
-                            case "typeof": return typeof evaluate(expr[2]);
-                            case "~": return ~evaluate(expr[2]);
-                            case "-": return -evaluate(expr[2]);
-                            case "+": return +evaluate(expr[2]);
-                        }
-                        break;
-                    case "binary":
-                        var left = expr[2], right = expr[3];
-                        switch (expr[1]) {
-                            case "&&"         : return evaluate(left) &&         evaluate(right);
-                            case "||"         : return evaluate(left) ||         evaluate(right);
-                            case "|"          : return evaluate(left) |          evaluate(right);
-                            case "&"          : return evaluate(left) &          evaluate(right);
-                            case "^"          : return evaluate(left) ^          evaluate(right);
-                            case "+"          : return evaluate(left) +          evaluate(right);
-                            case "*"          : return evaluate(left) *          evaluate(right);
-                            case "/"          : return evaluate(left) /          evaluate(right);
-                            case "-"          : return evaluate(left) -          evaluate(right);
-                            case "<<"         : return evaluate(left) <<         evaluate(right);
-                            case ">>"         : return evaluate(left) >>         evaluate(right);
-                            case ">>>"        : return evaluate(left) >>>        evaluate(right);
-                            case "=="         : return evaluate(left) ==         evaluate(right);
-                            case "==="        : return evaluate(left) ===        evaluate(right);
-                            case "!="         : return evaluate(left) !=         evaluate(right);
-                            case "!=="        : return evaluate(left) !==        evaluate(right);
-                            case "<"          : return evaluate(left) <          evaluate(right);
-                            case "<="         : return evaluate(left) <=         evaluate(right);
-                            case ">"          : return evaluate(left) >          evaluate(right);
-                            case ">="         : return evaluate(left) >=         evaluate(right);
-                            case "in"         : return evaluate(left) in         evaluate(right);
-                            case "instanceof" : return evaluate(left) instanceof evaluate(right);
-                        }
-                }
-                throw $NOT_CONSTANT;
-        };
-
-        return function(expr, yes, no) {
-                try {
-                        var val = evaluate(expr), ast;
-                        switch (typeof val) {
-                            case "string": ast =  [ "string", val ]; break;
-                            case "number": ast =  [ "num", val ]; break;
-                            case "boolean": ast =  [ "name", String(val) ]; break;
-                            default: throw new Error("Can't handle constant of type: " + (typeof val));
-                        }
-                        return yes.call(expr, ast, val);
-                } catch(ex) {
-                        if (ex === $NOT_CONSTANT) {
-                                if (expr[0] == "binary"
-                                    && (expr[1] == "===" || expr[1] == "!==")
-                                    && ((is_string(expr[2]) && is_string(expr[3]))
-                                        || (boolean_expr(expr[2]) && boolean_expr(expr[3])))) {
-                                        expr[1] = expr[1].substr(0, 2);
-                                }
-                                else if (no && expr[0] == "binary"
-                                         && (expr[1] == "||" || expr[1] == "&&")) {
-                                    // the whole expression is not constant but the lval may be...
-                                    try {
-                                        var lval = evaluate(expr[2]);
-                                        expr = ((expr[1] == "&&" && (lval ? expr[3] : lval))    ||
-                                                (expr[1] == "||" && (lval ? lval    : expr[3])) ||
-                                                expr);
-                                    } catch(ex2) {
-                                        // IGNORE... lval is not constant
-                                    }
-                                }
-                                return no ? no.call(expr, expr) : null;
-                        }
-                        else throw ex;
-                }
-        };
-
-})();
-
-function warn_unreachable(ast) {
-        if (!empty(ast))
-                warn("Dropping unreachable code: " + gen_code(ast, true));
-};
-
-function prepare_ifs(ast) {
-        var w = ast_walker(), walk = w.walk;
-        // In this first pass, we rewrite ifs which abort with no else with an
-        // if-else.  For example:
-        //
-        // if (x) {
-        //     blah();
-        //     return y;
-        // }
-        // foobar();
-        //
-        // is rewritten into:
-        //
-        // if (x) {
-        //     blah();
-        //     return y;
-        // } else {
-        //     foobar();
-        // }
-        function redo_if(statements) {
-                statements = MAP(statements, walk);
-
-                for (var i = 0; i < statements.length; ++i) {
-                        var fi = statements[i];
-                        if (fi[0] != "if") continue;
-
-                        if (fi[3] && walk(fi[3])) continue;
-
-                        var t = walk(fi[2]);
-                        if (!aborts(t)) continue;
-
-                        var conditional = walk(fi[1]);
-
-                        var e_body = statements.slice(i + 1);
-                        var e = e_body.length == 1 ? e_body[0] : [ "block", e_body ];
-
-                        var ret = statements.slice(0, i).concat([ [
-                                fi[0],          // "if"
-                                conditional,    // conditional
-                                t,              // then
-                                e               // else
-                        ] ]);
-
-                        return redo_if(ret);
-                }
-
-                return statements;
-        };
-
-        function redo_if_lambda(name, args, body) {
-                body = redo_if(body);
-                return [ this[0], name, args, body ];
-        };
-
-        function redo_if_block(statements) {
-                return [ this[0], statements != null ? redo_if(statements) : null ];
-        };
-
-        return w.with_walkers({
-                "defun": redo_if_lambda,
-                "function": redo_if_lambda,
-                "block": redo_if_block,
-                "splice": redo_if_block,
-                "toplevel": function(statements) {
-                        return [ this[0], redo_if(statements) ];
-                },
-                "try": function(t, c, f) {
-                        return [
-                                this[0],
-                                redo_if(t),
-                                c != null ? [ c[0], redo_if(c[1]) ] : null,
-                                f != null ? redo_if(f) : null
-                        ];
-                }
-        }, function() {
-                return walk(ast);
-        });
-};
-
-function for_side_effects(ast, handler) {
-        var w = ast_walker(), walk = w.walk;
-        var $stop = {}, $restart = {};
-        function stop() { throw $stop };
-        function restart() { throw $restart };
-        function found(){ return handler.call(this, this, w, stop, restart) };
-        function unary(op) {
-                if (op == "++" || op == "--")
-                        return found.apply(this, arguments);
-        };
-        return w.with_walkers({
-                "try": found,
-                "throw": found,
-                "return": found,
-                "new": found,
-                "switch": found,
-                "break": found,
-                "continue": found,
-                "assign": found,
-                "call": found,
-                "if": found,
-                "for": found,
-                "for-in": found,
-                "while": found,
-                "do": found,
-                "return": found,
-                "unary-prefix": unary,
-                "unary-postfix": unary,
-                "defun": found
-        }, function(){
-                while (true) try {
-                        walk(ast);
-                        break;
-                } catch(ex) {
-                        if (ex === $stop) break;
-                        if (ex === $restart) continue;
-                        throw ex;
-                }
-        });
-};
-
-function ast_lift_variables(ast) {
-        var w = ast_walker(), walk = w.walk, scope;
-        function do_body(body, env) {
-                var _scope = scope;
-                scope = env;
-                body = MAP(body, walk);
-                var hash = {}, names = MAP(env.names, function(type, name){
-                        if (type != "var") return MAP.skip;
-                        if (!env.references(name)) return MAP.skip;
-                        hash[name] = true;
-                        return [ name ];
-                });
-                if (names.length > 0) {
-                        // looking for assignments to any of these variables.
-                        // we can save considerable space by moving the definitions
-                        // in the var declaration.
-                        for_side_effects([ "block", body ], function(ast, walker, stop, restart) {
-                                if (ast[0] == "assign"
-                                    && ast[1] === true
-                                    && ast[2][0] == "name"
-                                    && HOP(hash, ast[2][1])) {
-                                        // insert the definition into the var declaration
-                                        for (var i = names.length; --i >= 0;) {
-                                                if (names[i][0] == ast[2][1]) {
-                                                        if (names[i][1]) // this name already defined, we must stop
-                                                                stop();
-                                                        names[i][1] = ast[3]; // definition
-                                                        names.push(names.splice(i, 1)[0]);
-                                                        break;
-                                                }
-                                        }
-                                        // remove this assignment from the AST.
-                                        var p = walker.parent();
-                                        if (p[0] == "seq") {
-                                                var a = p[2];
-                                                a.unshift(0, p.length);
-                                                p.splice.apply(p, a);
-                                        }
-                                        else if (p[0] == "stat") {
-                                                p.splice(0, p.length, "block"); // empty statement
-                                        }
-                                        else {
-                                                stop();
-                                        }
-                                        restart();
-                                }
-                                stop();
-                        });
-                        body.unshift([ "var", names ]);
-                }
-                scope = _scope;
-                return body;
-        };
-        function _vardefs(defs) {
-                var ret = null;
-                for (var i = defs.length; --i >= 0;) {
-                        var d = defs[i];
-                        if (!d[1]) continue;
-                        d = [ "assign", true, [ "name", d[0] ], d[1] ];
-                        if (ret == null) ret = d;
-                        else ret = [ "seq", d, ret ];
-                }
-                if (ret == null) {
-                        if (w.parent()[0] == "for-in")
-                                return [ "name", defs[0][0] ];
-                        return MAP.skip;
-                }
-                return [ "stat", ret ];
-        };
-        function _toplevel(body) {
-                return [ this[0], do_body(body, this.scope) ];
-        };
-        return w.with_walkers({
-                "function": function(name, args, body){
-                        for (var i = args.length; --i >= 0 && !body.scope.references(args[i]);)
-                                args.pop();
-                        if (!body.scope.references(name)) name = null;
-                        return [ this[0], name, args, do_body(body, body.scope) ];
-                },
-                "defun": function(name, args, body){
-                        if (!scope.references(name)) return MAP.skip;
-                        for (var i = args.length; --i >= 0 && !body.scope.references(args[i]);)
-                                args.pop();
-                        return [ this[0], name, args, do_body(body, body.scope) ];
-                },
-                "var": _vardefs,
-                "toplevel": _toplevel
-        }, function(){
-                return walk(ast_add_scope(ast));
-        });
-};
-
-function ast_squeeze(ast, options) {
-        options = defaults(options, {
-                make_seqs   : true,
-                dead_code   : true,
-                keep_comps  : true,
-                no_warnings : false
-        });
-
-        var w = ast_walker(), walk = w.walk, scope;
-
-        function negate(c) {
-                var not_c = [ "unary-prefix", "!", c ];
-                switch (c[0]) {
-                    case "unary-prefix":
-                        return c[1] == "!" && boolean_expr(c[2]) ? c[2] : not_c;
-                    case "seq":
-                        c = slice(c);
-                        c[c.length - 1] = negate(c[c.length - 1]);
-                        return c;
-                    case "conditional":
-                        return best_of(not_c, [ "conditional", c[1], negate(c[2]), negate(c[3]) ]);
-                    case "binary":
-                        var op = c[1], left = c[2], right = c[3];
-                        if (!options.keep_comps) switch (op) {
-                            case "<="  : return [ "binary", ">", left, right ];
-                            case "<"   : return [ "binary", ">=", left, right ];
-                            case ">="  : return [ "binary", "<", left, right ];
-                            case ">"   : return [ "binary", "<=", left, right ];
-                        }
-                        switch (op) {
-                            case "=="  : return [ "binary", "!=", left, right ];
-                            case "!="  : return [ "binary", "==", left, right ];
-                            case "===" : return [ "binary", "!==", left, right ];
-                            case "!==" : return [ "binary", "===", left, right ];
-                            case "&&"  : return best_of(not_c, [ "binary", "||", negate(left), negate(right) ]);
-                            case "||"  : return best_of(not_c, [ "binary", "&&", negate(left), negate(right) ]);
-                        }
-                        break;
-                }
-                return not_c;
-        };
-
-        function with_scope(s, cont) {
-                var _scope = scope;
-                scope = s;
-                var ret = cont();
-                ret.scope = s;
-                scope = _scope;
-                return ret;
-        };
-
-        function rmblock(block) {
-                if (block != null && block[0] == "block" && block[1]) {
-                        if (block[1].length == 1)
-                                block = block[1][0];
-                        else if (block[1].length == 0)
-                                block = [ "block" ];
-                }
-                return block;
-        };
-
-        function _lambda(name, args, body) {
-                var is_defun = this[0] == "defun";
-                body = with_scope(body.scope, function(){
-                        var ret = tighten(body, "lambda");
-                        if (!is_defun && name && !scope.references(name))
-                                name = null;
-                        return ret;
-                });
-                return [ this[0], name, args, body ];
-        };
-
-        // this function does a few things:
-        // 1. discard useless blocks
-        // 2. join consecutive var declarations
-        // 3. remove obviously dead code
-        // 4. transform consecutive statements using the comma operator
-        // 5. if block_type == "lambda" and it detects constructs like if(foo) return ... - rewrite like if (!foo) { ... }
-        function tighten(statements, block_type) {
-                statements = MAP(statements, walk);
-
-                statements = statements.reduce(function(a, stat){
-                        if (stat[0] == "block") {
-                                if (stat[1]) {
-                                        a.push.apply(a, stat[1]);
-                                }
-                        } else {
-                                a.push(stat);
-                        }
-                        return a;
-                }, []);
-
-                statements = (function(a, prev){
-                        statements.forEach(function(cur){
-                                if (prev && ((cur[0] == "var" && prev[0] == "var") ||
-                                             (cur[0] == "const" && prev[0] == "const"))) {
-                                        prev[1] = prev[1].concat(cur[1]);
-                                } else {
-                                        a.push(cur);
-                                        prev = cur;
-                                }
-                        });
-                        return a;
-                })([]);
-
-                if (options.dead_code) statements = (function(a, has_quit){
-                        statements.forEach(function(st){
-                                if (has_quit) {
-                                        if (st[0] == "function" || st[0] == "defun") {
-                                                a.push(st);
-                                        }
-                                        else if (st[0] == "var" || st[0] == "const") {
-                                                if (!options.no_warnings)
-                                                        warn("Variables declared in unreachable code");
-                                                st[1] = MAP(st[1], function(def){
-                                                        if (def[1] && !options.no_warnings)
-                                                                warn_unreachable([ "assign", true, [ "name", def[0] ], def[1] ]);
-                                                        return [ def[0] ];
-                                                });
-                                                a.push(st);
-                                        }
-                                        else if (!options.no_warnings)
-                                                warn_unreachable(st);
-                                }
-                                else {
-                                        a.push(st);
-                                        if (member(st[0], [ "return", "throw", "break", "continue" ]))
-                                                has_quit = true;
-                                }
-                        });
-                        return a;
-                })([]);
-
-                if (options.make_seqs) statements = (function(a, prev) {
-                        statements.forEach(function(cur){
-                                if (prev && prev[0] == "stat" && cur[0] == "stat") {
-                                        prev[1] = [ "seq", prev[1], cur[1] ];
-                                } else {
-                                        a.push(cur);
-                                        prev = cur;
-                                }
-                        });
-                        if (a.length >= 2
-                            && a[a.length-2][0] == "stat"
-                            && (a[a.length-1][0] == "return" || a[a.length-1][0] == "throw")
-                            && a[a.length-1][1])
-                        {
-                                a.splice(a.length - 2, 2,
-                                         [ a[a.length-1][0],
-                                           [ "seq", a[a.length-2][1], a[a.length-1][1] ]]);
-                        }
-                        return a;
-                })([]);
-
-                // this increases jQuery by 1K.  Probably not such a good idea after all..
-                // part of this is done in prepare_ifs anyway.
-                // if (block_type == "lambda") statements = (function(i, a, stat){
-                //         while (i < statements.length) {
-                //                 stat = statements[i++];
-                //                 if (stat[0] == "if" && !stat[3]) {
-                //                         if (stat[2][0] == "return" && stat[2][1] == null) {
-                //                                 a.push(make_if(negate(stat[1]), [ "block", statements.slice(i) ]));
-                //                                 break;
-                //                         }
-                //                         var last = last_stat(stat[2]);
-                //                         if (last[0] == "return" && last[1] == null) {
-                //                                 a.push(make_if(stat[1], [ "block", stat[2][1].slice(0, -1) ], [ "block", statements.slice(i) ]));
-                //                                 break;
-                //                         }
-                //                 }
-                //                 a.push(stat);
-                //         }
-                //         return a;
-                // })(0, []);
-
-                return statements;
-        };
-
-        function make_if(c, t, e) {
-                return when_constant(c, function(ast, val){
-                        if (val) {
-                                warn_unreachable(e);
-                                return t;
-                        } else {
-                                warn_unreachable(t);
-                                return e;
-                        }
-                }, function() {
-                        return make_real_if(c, t, e);
-                });
-        };
-
-        function make_real_if(c, t, e) {
-                c = walk(c);
-                t = walk(t);
-                e = walk(e);
-
-                if (empty(t)) {
-                        c = negate(c);
-                        t = e;
-                        e = null;
-                } else if (empty(e)) {
-                        e = null;
-                } else {
-                        // if we have both else and then, maybe it makes sense to switch them?
-                        (function(){
-                                var a = gen_code(c);
-                                var n = negate(c);
-                                var b = gen_code(n);
-                                if (b.length < a.length) {
-                                        var tmp = t;
-                                        t = e;
-                                        e = tmp;
-                                        c = n;
-                                }
-                        })();
-                }
-                if (empty(e) && empty(t))
-                        return [ "stat", c ];
-                var ret = [ "if", c, t, e ];
-                if (t[0] == "if" && empty(t[3]) && empty(e)) {
-                        ret = best_of(ret, walk([ "if", [ "binary", "&&", c, t[1] ], t[2] ]));
-                }
-                else if (t[0] == "stat") {
-                        if (e) {
-                                if (e[0] == "stat") {
-                                        ret = best_of(ret, [ "stat", make_conditional(c, t[1], e[1]) ]);
-                                }
-                        }
-                        else {
-                                ret = best_of(ret, [ "stat", make_conditional(c, t[1]) ]);
-                        }
-                }
-                else if (e && t[0] == e[0] && (t[0] == "return" || t[0] == "throw") && t[1] && e[1]) {
-                        ret = best_of(ret, [ t[0], make_conditional(c, t[1], e[1] ) ]);
-                }
-                else if (e && aborts(t)) {
-                        ret = [ [ "if", c, t ] ];
-                        if (e[0] == "block") {
-                                if (e[1]) ret = ret.concat(e[1]);
-                        }
-                        else {
-                                ret.push(e);
-                        }
-                        ret = walk([ "block", ret ]);
-                }
-                else if (t && aborts(e)) {
-                        ret = [ [ "if", negate(c), e ] ];
-                        if (t[0] == "block") {
-                                if (t[1]) ret = ret.concat(t[1]);
-                        } else {
-                                ret.push(t);
-                        }
-                        ret = walk([ "block", ret ]);
-                }
-                return ret;
-        };
-
-        function _do_while(cond, body) {
-                return when_constant(cond, function(cond, val){
-                        if (!val) {
-                                warn_unreachable(body);
-                                return [ "block" ];
-                        } else {
-                                return [ "for", null, null, null, walk(body) ];
-                        }
-                });
-        };
-
-        return w.with_walkers({
-                "sub": function(expr, subscript) {
-                        if (subscript[0] == "string") {
-                                var name = subscript[1];
-                                if (is_identifier(name))
-                                        return [ "dot", walk(expr), name ];
-                                else if (/^[1-9][0-9]*$/.test(name) || name === "0")
-                                        return [ "sub", walk(expr), [ "num", parseInt(name, 10) ] ];
-                        }
-                },
-                "if": make_if,
-                "toplevel": function(body) {
-                        return [ "toplevel", with_scope(this.scope, function(){
-                                return tighten(body);
-                        }) ];
-                },
-                "switch": function(expr, body) {
-                        var last = body.length - 1;
-                        return [ "switch", walk(expr), MAP(body, function(branch, i){
-                                var block = tighten(branch[1]);
-                                if (i == last && block.length > 0) {
-                                        var node = block[block.length - 1];
-                                        if (node[0] == "break" && !node[1])
-                                                block.pop();
-                                }
-                                return [ branch[0] ? walk(branch[0]) : null, block ];
-                        }) ];
-                },
-                "function": _lambda,
-                "defun": _lambda,
-                "block": function(body) {
-                        if (body) return rmblock([ "block", tighten(body) ]);
-                },
-                "binary": function(op, left, right) {
-                        return when_constant([ "binary", op, walk(left), walk(right) ], function yes(c){
-                                return best_of(walk(c), this);
-                        }, function no() {
-                                return this;
-                        });
-                },
-                "conditional": function(c, t, e) {
-                        return make_conditional(walk(c), walk(t), walk(e));
-                },
-                "try": function(t, c, f) {
-                        return [
-                                "try",
-                                tighten(t),
-                                c != null ? [ c[0], tighten(c[1]) ] : null,
-                                f != null ? tighten(f) : null
-                        ];
-                },
-                "unary-prefix": function(op, expr) {
-                        expr = walk(expr);
-                        var ret = [ "unary-prefix", op, expr ];
-                        if (op == "!")
-                                ret = best_of(ret, negate(expr));
-                        return when_constant(ret, function(ast, val){
-                                return walk(ast); // it's either true or false, so minifies to !0 or !1
-                        }, function() { return ret });
-                },
-                "name": function(name) {
-                        switch (name) {
-                            case "true": return [ "unary-prefix", "!", [ "num", 0 ]];
-                            case "false": return [ "unary-prefix", "!", [ "num", 1 ]];
-                        }
-                },
-                "while": _do_while
-        }, function() {
-                for (var i = 0; i < 2; ++i) {
-                        ast = prepare_ifs(ast);
-                        ast = ast_add_scope(ast);
-                        ast = walk(ast);
-                }
-                return ast;
-        });
-};
-
-/* -----[ re-generate code from the AST ]----- */
-
-var DOT_CALL_NO_PARENS = jsp.array_to_hash([
-        "name",
-        "array",
-        "object",
-        "string",
-        "dot",
-        "sub",
-        "call",
-        "regexp"
-]);
-
-function make_string(str, ascii_only) {
-        var dq = 0, sq = 0;
-        str = str.replace(/[\\\b\f\n\r\t\x22\x27\u2028\u2029]/g, function(s){
-                switch (s) {
-                    case "\\": return "\\\\";
-                    case "\b": return "\\b";
-                    case "\f": return "\\f";
-                    case "\n": return "\\n";
-                    case "\r": return "\\r";
-                    case "\t": return "\\t";
-                    case "\u2028": return "\\u2028";
-                    case "\u2029": return "\\u2029";
-                    case '"': ++dq; return '"';
-                    case "'": ++sq; return "'";
-                }
-                return s;
-        });
-        if (ascii_only) str = to_ascii(str);
-        if (dq > sq) return "'" + str.replace(/\x27/g, "\\'") + "'";
-        else return '"' + str.replace(/\x22/g, '\\"') + '"';
-};
-
-function to_ascii(str) {
-        return str.replace(/[\u0080-\uffff]/g, function(ch) {
-                var code = ch.charCodeAt(0).toString(16);
-                while (code.length < 4) code = "0" + code;
-                return "\\u" + code;
-        });
-};
-
-var SPLICE_NEEDS_BRACKETS = jsp.array_to_hash([ "if", "while", "do", "for", "for-in", "with" ]);
-
-function gen_code(ast, options) {
-        options = defaults(options, {
-                indent_start : 0,
-                indent_level : 4,
-                quote_keys   : false,
-                space_colon  : false,
-                beautify     : false,
-                ascii_only   : false,
-                inline_script: false
-        });
-        var beautify = !!options.beautify;
-        var indentation = 0,
-            newline = beautify ? "\n" : "",
-            space = beautify ? " " : "";
-
-        function encode_string(str) {
-                var ret = make_string(str, options.ascii_only);
-                if (options.inline_script)
-                        ret = ret.replace(/<\x2fscript([>/\t\n\f\r ])/gi, "<\\/script$1");
-                return ret;
-        };
-
-        function make_name(name) {
-                name = name.toString();
-                if (options.ascii_only)
-                        name = to_ascii(name);
-                return name;
-        };
-
-        function indent(line) {
-                if (line == null)
-                        line = "";
-                if (beautify)
-                        line = repeat_string(" ", options.indent_start + indentation * options.indent_level) + line;
-                return line;
-        };
-
-        function with_indent(cont, incr) {
-                if (incr == null) incr = 1;
-                indentation += incr;
-                try { return cont.apply(null, slice(arguments, 1)); }
-                finally { indentation -= incr; }
-        };
-
-        function add_spaces(a) {
-                if (beautify)
-                        return a.join(" ");
-                var b = [];
-                for (var i = 0; i < a.length; ++i) {
-                        var next = a[i + 1];
-                        b.push(a[i]);
-                        if (next &&
-                            ((/[a-z0-9_\x24]$/i.test(a[i].toString()) && /^[a-z0-9_\x24]/i.test(next.toString())) ||
-                             (/[\+\-]$/.test(a[i].toString()) && /^[\+\-]/.test(next.toString())))) {
-                                b.push(" ");
-                        }
-                }
-                return b.join("");
-        };
-
-        function add_commas(a) {
-                return a.join("," + space);
-        };
-
-        function parenthesize(expr) {
-                var gen = make(expr);
-                for (var i = 1; i < arguments.length; ++i) {
-                        var el = arguments[i];
-                        if ((el instanceof Function && el(expr)) || expr[0] == el)
-                                return "(" + gen + ")";
-                }
-                return gen;
-        };
-
-        function best_of(a) {
-                if (a.length == 1) {
-                        return a[0];
-                }
-                if (a.length == 2) {
-                        var b = a[1];
-                        a = a[0];
-                        return a.length <= b.length ? a : b;
-                }
-                return best_of([ a[0], best_of(a.slice(1)) ]);
-        };
-
-        function needs_parens(expr) {
-                if (expr[0] == "function" || expr[0] == "object") {
-                        // dot/call on a literal function requires the
-                        // function literal itself to be parenthesized
-                        // only if it's the first "thing" in a
-                        // statement.  This means that the parent is
-                        // "stat", but it could also be a "seq" and
-                        // we're the first in this "seq" and the
-                        // parent is "stat", and so on.  Messy stuff,
-                        // but it worths the trouble.
-                        var a = slice(w.stack()), self = a.pop(), p = a.pop();
-                        while (p) {
-                                if (p[0] == "stat") return true;
-                                if (((p[0] == "seq" || p[0] == "call" || p[0] == "dot" || p[0] == "sub" || p[0] == "conditional") && p[1] === self) ||
-                                    ((p[0] == "binary" || p[0] == "assign" || p[0] == "unary-postfix") && p[2] === self)) {
-                                        self = p;
-                                        p = a.pop();
-                                } else {
-                                        return false;
-                                }
-                        }
-                }
-                return !HOP(DOT_CALL_NO_PARENS, expr[0]);
-        };
-
-        function make_num(num) {
-                var str = num.toString(10), a = [ str.replace(/^0\./, ".") ], m;
-                if (Math.floor(num) === num) {
-                        a.push("0x" + num.toString(16).toLowerCase(), // probably pointless
-                               "0" + num.toString(8)); // same.
-                        if ((m = /^(.*?)(0+)$/.exec(num))) {
-                                a.push(m[1] + "e" + m[2].length);
-                        }
-                } else if ((m = /^0?\.(0+)(.*)$/.exec(num))) {
-                        a.push(m[2] + "e-" + (m[1].length + m[2].length),
-                               str.substr(str.indexOf(".")));
-                }
-                return best_of(a);
-        };
-
-        var w = ast_walker();
-        var make = w.walk;
-        return w.with_walkers({
-                "string": encode_string,
-                "num": make_num,
-                "name": make_name,
-                "toplevel": function(statements) {
-                        return make_block_statements(statements)
-                                .join(newline + newline);
-                },
-                "splice": function(statements) {
-                        var parent = w.parent();
-                        if (HOP(SPLICE_NEEDS_BRACKETS, parent)) {
-                                // we need block brackets in this case
-                                return make_block.apply(this, arguments);
-                        } else {
-                                return MAP(make_block_statements(statements, true),
-                                           function(line, i) {
-                                                   // the first line is already indented
-                                                   return i > 0 ? indent(line) : line;
-                                           }).join(newline);
-                        }
-                },
-                "block": make_block,
-                "var": function(defs) {
-                        return "var " + add_commas(MAP(defs, make_1vardef)) + ";";
-                },
-                "const": function(defs) {
-                        return "const " + add_commas(MAP(defs, make_1vardef)) + ";";
-                },
-                "try": function(tr, ca, fi) {
-                        var out = [ "try", make_block(tr) ];
-                        if (ca) out.push("catch", "(" + ca[0] + ")", make_block(ca[1]));
-                        if (fi) out.push("finally", make_block(fi));
-                        return add_spaces(out);
-                },
-                "throw": function(expr) {
-                        return add_spaces([ "throw", make(expr) ]) + ";";
-                },
-                "new": function(ctor, args) {
-                        args = args.length > 0 ? "(" + add_commas(MAP(args, make)) + ")" : "";
-                        return add_spaces([ "new", parenthesize(ctor, "seq", "binary", "conditional", "assign", function(expr){
-                                var w = ast_walker(), has_call = {};
-                                try {
-                                        w.with_walkers({
-                                                "call": function() { throw has_call },
-                                                "function": function() { return this }
-                                        }, function(){
-                                                w.walk(expr);
-                                        });
-                                } catch(ex) {
-                                        if (ex === has_call)
-                                                return true;
-                                        throw ex;
-                                }
-                        }) + args ]);
-                },
-                "switch": function(expr, body) {
-                        return add_spaces([ "switch", "(" + make(expr) + ")", make_switch_block(body) ]);
-                },
-                "break": function(label) {
-                        var out = "break";
-                        if (label != null)
-                                out += " " + make_name(label);
-                        return out + ";";
-                },
-                "continue": function(label) {
-                        var out = "continue";
-                        if (label != null)
-                                out += " " + make_name(label);
-                        return out + ";";
-                },
-                "conditional": function(co, th, el) {
-                        return add_spaces([ parenthesize(co, "assign", "seq", "conditional"), "?",
-                                            parenthesize(th, "seq"), ":",
-                                            parenthesize(el, "seq") ]);
-                },
-                "assign": function(op, lvalue, rvalue) {
-                        if (op && op !== true) op += "=";
-                        else op = "=";
-                        return add_spaces([ make(lvalue), op, parenthesize(rvalue, "seq") ]);
-                },
-                "dot": function(expr) {
-                        var out = make(expr), i = 1;
-                        if (expr[0] == "num") {
-                                if (!/\./.test(expr[1]))
-                                        out += ".";
-                        } else if (needs_parens(expr))
-                                out = "(" + out + ")";
-                        while (i < arguments.length)
-                                out += "." + make_name(arguments[i++]);
-                        return out;
-                },
-                "call": function(func, args) {
-                        var f = make(func);
-                        if (needs_parens(func))
-                                f = "(" + f + ")";
-                        return f + "(" + add_commas(MAP(args, function(expr){
-                                return parenthesize(expr, "seq");
-                        })) + ")";
-                },
-                "function": make_function,
-                "defun": make_function,
-                "if": function(co, th, el) {
-                        var out = [ "if", "(" + make(co) + ")", el ? make_then(th) : make(th) ];
-                        if (el) {
-                                out.push("else", make(el));
-                        }
-                        return add_spaces(out);
-                },
-                "for": function(init, cond, step, block) {
-                        var out = [ "for" ];
-                        init = (init != null ? make(init) : "").replace(/;*\s*$/, ";" + space);
-                        cond = (cond != null ? make(cond) : "").replace(/;*\s*$/, ";" + space);
-                        step = (step != null ? make(step) : "").replace(/;*\s*$/, "");
-                        var args = init + cond + step;
-                        if (args == "; ; ") args = ";;";
-                        out.push("(" + args + ")", make(block));
-                        return add_spaces(out);
-                },
-                "for-in": function(vvar, key, hash, block) {
-                        return add_spaces([ "for", "(" +
-                                            (vvar ? make(vvar).replace(/;+$/, "") : make(key)),
-                                            "in",
-                                            make(hash) + ")", make(block) ]);
-                },
-                "while": function(condition, block) {
-                        return add_spaces([ "while", "(" + make(condition) + ")", make(block) ]);
-                },
-                "do": function(condition, block) {
-                        return add_spaces([ "do", make(block), "while", "(" + make(condition) + ")" ]) + ";";
-                },
-                "return": function(expr) {
-                        var out = [ "return" ];
-                        if (expr != null) out.push(make(expr));
-                        return add_spaces(out) + ";";
-                },
-                "binary": function(operator, lvalue, rvalue) {
-                        var left = make(lvalue), right = make(rvalue);
-                        // XXX: I'm pretty sure other cases will bite here.
-                        //      we need to be smarter.
-                        //      adding parens all the time is the safest bet.
-                        if (member(lvalue[0], [ "assign", "conditional", "seq" ]) ||
-                            lvalue[0] == "binary" && PRECEDENCE[operator] > PRECEDENCE[lvalue[1]]) {
-                                left = "(" + left + ")";
-                        }
-                        if (member(rvalue[0], [ "assign", "conditional", "seq" ]) ||
-                            rvalue[0] == "binary" && PRECEDENCE[operator] >= PRECEDENCE[rvalue[1]] &&
-                            !(rvalue[1] == operator && member(operator, [ "&&", "||", "*" ]))) {
-                                right = "(" + right + ")";
-                        }
-                        else if (!beautify && options.inline_script && (operator == "<" || operator == "<<")
-                                 && rvalue[0] == "regexp" && /^script/i.test(rvalue[1])) {
-                                right = " " + right;
-                        }
-                        return add_spaces([ left, operator, right ]);
-                },
-                "unary-prefix": function(operator, expr) {
-                        var val = make(expr);
-                        if (!(expr[0] == "num" || (expr[0] == "unary-prefix" && !HOP(OPERATORS, operator + expr[1])) || !needs_parens(expr)))
-                                val = "(" + val + ")";
-                        return operator + (jsp.is_alphanumeric_char(operator.charAt(0)) ? " " : "") + val;
-                },
-                "unary-postfix": function(operator, expr) {
-                        var val = make(expr);
-                        if (!(expr[0] == "num" || (expr[0] == "unary-postfix" && !HOP(OPERATORS, operator + expr[1])) || !needs_parens(expr)))
-                                val = "(" + val + ")";
-                        return val + operator;
-                },
-                "sub": function(expr, subscript) {
-                        var hash = make(expr);
-                        if (needs_parens(expr))
-                                hash = "(" + hash + ")";
-                        return hash + "[" + make(subscript) + "]";
-                },
-                "object": function(props) {
-                        if (props.length == 0)
-                                return "{}";
-                        return "{" + newline + with_indent(function(){
-                                return MAP(props, function(p){
-                                        if (p.length == 3) {
-                                                // getter/setter.  The name is in p[0], the arg.list in p[1][2], the
-                                                // body in p[1][3] and type ("get" / "set") in p[2].
-                                                return indent(make_function(p[0], p[1][2], p[1][3], p[2]));
-                                        }
-                                        var key = p[0], val = parenthesize(p[1], "seq");
-                                        if (options.quote_keys) {
-                                                key = encode_string(key);
-                                        } else if ((typeof key == "number" || !beautify && +key + "" == key)
-                                                   && parseFloat(key) >= 0) {
-                                                key = make_num(+key);
-                                        } else if (!is_identifier(key)) {
-                                                key = encode_string(key);
-                                        }
-                                        return indent(add_spaces(beautify && options.space_colon
-                                                                 ? [ key, ":", val ]
-                                                                 : [ key + ":", val ]));
-                                }).join("," + newline);
-                        }) + newline + indent("}");
-                },
-                "regexp": function(rx, mods) {
-                        return "/" + rx + "/" + mods;
-                },
-                "array": function(elements) {
-                        if (elements.length == 0) return "[]";
-                        return add_spaces([ "[", add_commas(MAP(elements, function(el){
-                                if (!beautify && el[0] == "atom" && el[1] == "undefined") return "";
-                                return parenthesize(el, "seq");
-                        })), "]" ]);
-                },
-                "stat": function(stmt) {
-                        return make(stmt).replace(/;*\s*$/, ";");
-                },
-                "seq": function() {
-                        return add_commas(MAP(slice(arguments), make));
-                },
-                "label": function(name, block) {
-                        return add_spaces([ make_name(name), ":", make(block) ]);
-                },
-                "with": function(expr, block) {
-                        return add_spaces([ "with", "(" + make(expr) + ")", make(block) ]);
-                },
-                "atom": function(name) {
-                        return make_name(name);
-                }
-        }, function(){ return make(ast) });
-
-        // The squeezer replaces "block"-s that contain only a single
-        // statement with the statement itself; technically, the AST
-        // is correct, but this can create problems when we output an
-        // IF having an ELSE clause where the THEN clause ends in an
-        // IF *without* an ELSE block (then the outer ELSE would refer
-        // to the inner IF).  This function checks for this case and
-        // adds the block brackets if needed.
-        function make_then(th) {
-                if (th[0] == "do") {
-                        // https://github.com/mishoo/UglifyJS/issues/#issue/57
-                        // IE croaks with "syntax error" on code like this:
-                        //     if (foo) do ... while(cond); else ...
-                        // we need block brackets around do/while
-                        return make_block([ th ]);
-                }
-                var b = th;
-                while (true) {
-                        var type = b[0];
-                        if (type == "if") {
-                                if (!b[3])
-                                        // no else, we must add the block
-                                        return make([ "block", [ th ]]);
-                                b = b[3];
-                        }
-                        else if (type == "while" || type == "do") b = b[2];
-                        else if (type == "for" || type == "for-in") b = b[4];
-                        else break;
-                }
-                return make(th);
-        };
-
-        function make_function(name, args, body, keyword) {
-                var out = keyword || "function";
-                if (name) {
-                        out += " " + make_name(name);
-                }
-                out += "(" + add_commas(MAP(args, make_name)) + ")";
-                return add_spaces([ out, make_block(body) ]);
-        };
-
-        function must_has_semicolon(node) {
-                switch (node[0]) {
-                    case "with":
-                    case "while":
-                        return empty(node[2]); // `with' or `while' with empty body?
-                    case "for":
-                    case "for-in":
-                        return empty(node[4]); // `for' with empty body?
-                    case "if":
-                        if (empty(node[2]) && !node[3]) return true; // `if' with empty `then' and no `else'
-                        if (node[3]) {
-                                if (empty(node[3])) return true; // `else' present but empty
-                                return must_has_semicolon(node[3]); // dive into the `else' branch
-                        }
-                        return must_has_semicolon(node[2]); // dive into the `then' branch
-                }
-        };
-
-        function make_block_statements(statements, noindent) {
-                for (var a = [], last = statements.length - 1, i = 0; i <= last; ++i) {
-                        var stat = statements[i];
-                        var code = make(stat);
-                        if (code != ";") {
-                                if (!beautify && i == last && !must_has_semicolon(stat)) {
-                                        code = code.replace(/;+\s*$/, "");
-                                }
-                                a.push(code);
-                        }
-                }
-                return noindent ? a : MAP(a, indent);
-        };
-
-        function make_switch_block(body) {
-                var n = body.length;
-                if (n == 0) return "{}";
-                return "{" + newline + MAP(body, function(branch, i){
-                        var has_body = branch[1].length > 0, code = with_indent(function(){
-                                return indent(branch[0]
-                                              ? add_spaces([ "case", make(branch[0]) + ":" ])
-                                              : "default:");
-                        }, 0.5) + (has_body ? newline + with_indent(function(){
-                                return make_block_statements(branch[1]).join(newline);
-                        }) : "");
-                        if (!beautify && has_body && i < n - 1)
-                                code += ";";
-                        return code;
-                }).join(newline) + newline + indent("}");
-        };
-
-        function make_block(statements) {
-                if (!statements) return ";";
-                if (statements.length == 0) return "{}";
-                return "{" + newline + with_indent(function(){
-                        return make_block_statements(statements).join(newline);
-                }) + newline + indent("}");
-        };
-
-        function make_1vardef(def) {
-                var name = def[0], val = def[1];
-                if (val != null)
-                        name = add_spaces([ make_name(name), "=", parenthesize(val, "seq") ]);
-                return name;
-        };
-
-};
-
-function split_lines(code, max_line_length) {
-        var splits = [ 0 ];
-        jsp.parse(function(){
-                var next_token = jsp.tokenizer(code);
-                var last_split = 0;
-                var prev_token;
-                function current_length(tok) {
-                        return tok.pos - last_split;
-                };
-                function split_here(tok) {
-                        last_split = tok.pos;
-                        splits.push(last_split);
-                };
-                function custom(){
-                        var tok = next_token.apply(this, arguments);
-                        out: {
-                                if (prev_token) {
-                                        if (prev_token.type == "keyword") break out;
-                                }
-                                if (current_length(tok) > max_line_length) {
-                                        switch (tok.type) {
-                                            case "keyword":
-                                            case "atom":
-                                            case "name":
-                                            case "punc":
-                                                split_here(tok);
-                                                break out;
-                                        }
-                                }
-                        }
-                        prev_token = tok;
-                        return tok;
-                };
-                custom.context = function() {
-                        return next_token.context.apply(this, arguments);
-                };
-                return custom;
-        }());
-        return splits.map(function(pos, i){
-                return code.substring(pos, splits[i + 1] || code.length);
-        }).join("\n");
-};
-
-/* -----[ Utilities ]----- */
-
-function repeat_string(str, i) {
-        if (i <= 0) return "";
-        if (i == 1) return str;
-        var d = repeat_string(str, i >> 1);
-        d += d;
-        if (i & 1) d += str;
-        return d;
-};
-
-function defaults(args, defs) {
-        var ret = {};
-        if (args === true)
-                args = {};
-        for (var i in defs) if (HOP(defs, i)) {
-                ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];
-        }
-        return ret;
-};
-
-function is_identifier(name) {
-        return /^[a-z_$][a-z0-9_$]*$/i.test(name)
-                && name != "this"
-                && !HOP(jsp.KEYWORDS_ATOM, name)
-                && !HOP(jsp.RESERVED_WORDS, name)
-                && !HOP(jsp.KEYWORDS, name);
-};
-
-function HOP(obj, prop) {
-        return Object.prototype.hasOwnProperty.call(obj, prop);
-};
-
-// some utilities
-
-var MAP;
-
-(function(){
-        MAP = function(a, f, o) {
-                var ret = [], top = [], i;
-                function doit() {
-                        var val = f.call(o, a[i], i);
-                        if (val instanceof AtTop) {
-                                val = val.v;
-                                if (val instanceof Splice) {
-                                        top.push.apply(top, val.v);
-                                } else {
-                                        top.push(val);
-                                }
-                        }
-                        else if (val != skip) {
-                                if (val instanceof Splice) {
-                                        ret.push.apply(ret, val.v);
-                                } else {
-                                        ret.push(val);
-                                }
-                        }
-                };
-                if (a instanceof Array) for (i = 0; i < a.length; ++i) doit();
-                else for (i in a) if (HOP(a, i)) doit();
-                return top.concat(ret);
-        };
-        MAP.at_top = function(val) { return new AtTop(val) };
-        MAP.splice = function(val) { return new Splice(val) };
-        var skip = MAP.skip = {};
-        function AtTop(val) { this.v = val };
-        function Splice(val) { this.v = val };
-})();
-
-/* -----[ Exports ]----- */
-
-exports.ast_walker = ast_walker;
-exports.ast_mangle = ast_mangle;
-exports.ast_squeeze = ast_squeeze;
-exports.ast_lift_variables = ast_lift_variables;
-exports.gen_code = gen_code;
-exports.ast_add_scope = ast_add_scope;
-exports.set_logger = function(logger) { warn = logger };
-exports.make_string = make_string;
-exports.split_lines = split_lines;
-exports.MAP = MAP;
-
-// keep this last!
-exports.ast_squeeze_more = require("./squeeze-more").ast_squeeze_more;
diff --git a/node/node_modules/uglify-js/lib/squeeze-more.js b/node/node_modules/uglify-js/lib/squeeze-more.js
deleted file mode 100644 (file)
index 0bf14ed..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-var jsp = require("./parse-js"),
-    pro = require("./process"),
-    slice = jsp.slice,
-    member = jsp.member,
-    curry = jsp.curry,
-    MAP = pro.MAP,
-    PRECEDENCE = jsp.PRECEDENCE,
-    OPERATORS = jsp.OPERATORS;
-
-function ast_squeeze_more(ast) {
-        var w = pro.ast_walker(), walk = w.walk, scope;
-        function with_scope(s, cont) {
-                var save = scope, ret;
-                scope = s;
-                ret = cont();
-                scope = save;
-                return ret;
-        };
-        function _lambda(name, args, body) {
-                return [ this[0], name, args, with_scope(body.scope, curry(MAP, body, walk)) ];
-        };
-        return w.with_walkers({
-                "toplevel": function(body) {
-                        return [ this[0], with_scope(this.scope, curry(MAP, body, walk)) ];
-                },
-                "function": _lambda,
-                "defun": _lambda,
-                "new": function(ctor, args) {
-                        if (ctor[0] == "name" && ctor[1] == "Array" && !scope.has("Array")) {
-                                if (args.length != 1) {
-                                        return [ "array", args ];
-                                } else {
-                                        return walk([ "call", [ "name", "Array" ], args ]);
-                                }
-                        }
-                },
-                "call": function(expr, args) {
-                        if (expr[0] == "dot" && expr[2] == "toString" && args.length == 0) {
-                                // foo.toString()  ==>  foo+""
-                                return [ "binary", "+", expr[1], [ "string", "" ]];
-                        }
-                        if (expr[0] == "name" && expr[1] == "Array" && args.length != 1 && !scope.has("Array")) {
-                                return [ "array", args ];
-                        }
-                }
-        }, function() {
-                return walk(pro.ast_add_scope(ast));
-        });
-};
-
-exports.ast_squeeze_more = ast_squeeze_more;
diff --git a/node/node_modules/uglify-js/package.json b/node/node_modules/uglify-js/package.json
deleted file mode 100644 (file)
index ab37fdb..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-        "name"    : "uglify-js",
-
-        "author"  : {
-                "name"  : "Mihai Bazon",
-                "email" : "mihai.bazon@gmail.com",
-                "url"   : "http://mihai.bazon.net/blog"
-        },
-
-        "version" : "1.0.7",
-
-        "main"    : "./uglify-js.js",
-
-        "bin"     : {
-                "uglifyjs" : "./bin/uglifyjs"
-        },
-
-        "repository": {
-                "type": "git",
-                "url": "git@github.com:mishoo/UglifyJS.git"
-        }
-}
diff --git a/node/node_modules/uglify-js/test/beautify.js b/node/node_modules/uglify-js/test/beautify.js
deleted file mode 100755 (executable)
index f19369e..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#! /usr/bin/env node
-
-global.sys = require("sys");
-var fs = require("fs");
-
-var jsp = require("../lib/parse-js");
-var pro = require("../lib/process");
-
-var filename = process.argv[2];
-fs.readFile(filename, "utf8", function(err, text){
-        try {
-                var ast = time_it("parse", function(){ return jsp.parse(text); });
-                ast = time_it("mangle", function(){ return pro.ast_mangle(ast); });
-                ast = time_it("squeeze", function(){ return pro.ast_squeeze(ast); });
-                var gen = time_it("generate", function(){ return pro.gen_code(ast, false); });
-                sys.puts(gen);
-        } catch(ex) {
-                sys.debug(ex.stack);
-                sys.debug(sys.inspect(ex));
-                sys.debug(JSON.stringify(ex));
-        }
-});
-
-function time_it(name, cont) {
-        var t1 = new Date().getTime();
-        try { return cont(); }
-        finally { sys.debug("// " + name + ": " + ((new Date().getTime() - t1) / 1000).toFixed(3) + " sec."); }
-};
diff --git a/node/node_modules/uglify-js/test/testparser.js b/node/node_modules/uglify-js/test/testparser.js
deleted file mode 100755 (executable)
index c16d9a3..0000000
+++ /dev/null
@@ -1,402 +0,0 @@
-#! /usr/bin/env node
-
-var parseJS = require("../lib/parse-js");
-var sys = require("sys");
-
-// write debug in a very straightforward manner
-var debug = function(){
-        sys.log(Array.prototype.slice.call(arguments).join(', '));
-};
-
-ParserTestSuite(function(i, input, desc){
-       try {
-               parseJS.parse(input);
-               debug("ok " + i + ": " + desc);
-       } catch(e){
-               debug("FAIL " + i + " " + desc + " (" + e + ")");
-       }
-});
-
-function ParserTestSuite(callback){
-       var inps = [
-               ["var abc;", "Regular variable statement w/o assignment"],
-               ["var abc = 5;", "Regular variable statement with assignment"],
-               ["/* */;", "Multiline comment"],
-               ['/** **/;', 'Double star multiline comment'],
-               ["var f = function(){;};", "Function expression in var assignment"],
-               ['hi; // moo\n;', 'single line comment'],
-               ['var varwithfunction;', 'Dont match keywords as substrings'], // difference between `var withsomevar` and `"str"` (local search and lits)
-               ['a + b;', 'addition'],
-               ["'a';", 'single string literal'],
-               ["'a\\n';", 'single string literal with escaped return'],
-               ['"a";', 'double string literal'],
-               ['"a\\n";', 'double string literal with escaped return'],
-               ['"var";', 'string is a keyword'],
-               ['"variable";', 'string starts with a keyword'],
-               ['"somevariable";', 'string contains a keyword'],
-               ['"somevar";', 'string ends with a keyword'],
-               ['500;', 'int literal'],
-               ['500.;', 'float literal w/o decimals'],
-               ['500.432;', 'float literal with decimals'],
-               ['.432432;', 'float literal w/o int'],
-               ['(a,b,c);', 'parens and comma'],
-               ['[1,2,abc];', 'array literal'],
-               ['var o = {a:1};', 'object literal unquoted key'],
-               ['var o = {"b":2};', 'object literal quoted key'], // opening curly may not be at the start of a statement...
-               ['var o = {c:c};', 'object literal keyname is identifier'],
-               ['var o = {a:1,"b":2,c:c};', 'object literal combinations'],
-               ['var x;\nvar y;', 'two lines'],
-               ['var x;\nfunction n(){; }', 'function def'],
-               ['var x;\nfunction n(abc){; }', 'function def with arg'],
-               ['var x;\nfunction n(abc, def){ ;}', 'function def with args'],
-               ['function n(){ "hello"; }', 'function def with body'],
-               ['/a/;', 'regex literal'],
-               ['/a/b;', 'regex literal with flag'],
-               ['/a/ / /b/;', 'regex div regex'],
-               ['a/b/c;', 'triple division looks like regex'],
-               ['+function(){/regex/;};', 'regex at start of function body'],
-               // http://code.google.com/p/es-lab/source/browse/trunk/tests/parser/parsertests.js?r=86
-               // http://code.google.com/p/es-lab/source/browse/trunk/tests/parser/parsertests.js?r=430
-
-               // first tests for the lexer, should also parse as program (when you append a semi)
-
-               // comments
-               ['//foo!@#^&$1234\nbar;', 'single line comment'],
-               ['/* abcd!@#@$* { } && null*/;', 'single line multi line comment'],
-               ['/*foo\nbar*/;','multi line comment'],
-               ['/*x*x*/;','multi line comment with *'],
-               ['/**/;','empty comment'],
-               // identifiers
-               ["x;",'1 identifier'],
-               ["_x;",'2 identifier'],
-               ["xyz;",'3 identifier'],
-               ["$x;",'4 identifier'],
-               ["x$;",'5 identifier'],
-               ["_;",'6 identifier'],
-               ["x5;",'7 identifier'],
-               ["x_y;",'8 identifier'],
-               ["x+5;",'9 identifier'],
-               ["xyz123;",'10 identifier'],
-               ["x1y1z1;",'11 identifier'],
-               ["foo\\u00D8bar;",'12 identifier unicode escape'],
-               //["foo�bar;",'13 identifier unicode embedded (might fail)'],
-               // numbers
-               ["5;", '1 number'],
-               ["5.5;", '2 number'],
-               ["0;", '3 number'],
-               ["0.0;", '4 number'],
-               ["0.001;", '5 number'],
-               ["1.e2;", '6 number'],
-               ["1.e-2;", '7 number'],
-               ["1.E2;", '8 number'],
-               ["1.E-2;", '9 number'],
-               [".5;", '10 number'],
-               [".5e3;", '11 number'],
-               [".5e-3;", '12 number'],
-               ["0.5e3;", '13 number'],
-               ["55;", '14 number'],
-               ["123;", '15 number'],
-               ["55.55;", '16 number'],
-               ["55.55e10;", '17 number'],
-               ["123.456;", '18 number'],
-               ["1+e;", '20 number'],
-               ["0x01;", '22 number'],
-               ["0XCAFE;", '23 number'],
-               ["0x12345678;", '24 number'],
-               ["0x1234ABCD;", '25 number'],
-               ["0x0001;", '26 number'],
-               // strings
-               ["\"foo\";", '1 string'],
-               ["\'foo\';", '2 string'],
-               ["\"x\";", '3 string'],
-               ["\'\';", '4 string'],
-               ["\"foo\\tbar\";", '5 string'],
-               ["\"!@#$%^&*()_+{}[]\";", '6 string'],
-               ["\"/*test*/\";", '7 string'],
-               ["\"//test\";", '8 string'],
-               ["\"\\\\\";", '9 string'],
-               ["\"\\u0001\";", '10 string'],
-               ["\"\\uFEFF\";", '11 string'],
-               ["\"\\u10002\";", '12 string'],
-               ["\"\\x55\";", '13 string'],
-               ["\"\\x55a\";", '14 string'],
-               ["\"a\\\\nb\";", '15 string'],
-               ['";"', '16 string: semi in a string'],
-               ['"a\\\nb";', '17 string: line terminator escape'],
-               // literals
-               ["null;", "null"],
-               ["true;", "true"],
-               ["false;", "false"],
-               // regex
-               ["/a/;", "1 regex"],
-               ["/abc/;", "2 regex"],
-               ["/abc[a-z]*def/g;", "3 regex"],
-               ["/\\b/;", "4 regex"],
-               ["/[a-zA-Z]/;", "5 regex"],
-
-               // program tests (for as far as they havent been covered above)
-
-               // regexp
-               ["/foo(.*)/g;", "another regexp"],
-               // arrays
-               ["[];", "1 array"],
-               ["[   ];", "2 array"],
-               ["[1];", "3 array"],
-               ["[1,2];", "4 array"],
-               ["[1,2,,];", "5 array"],
-               ["[1,2,3];", "6 array"],
-               ["[1,2,3,,,];", "7 array"],
-               // objects
-               ["{};", "1 object"],
-               ["({x:5});", "2 object"],
-               ["({x:5,y:6});", "3 object"],
-               ["({x:5,});", "4 object"],
-               ["({if:5});", "5 object"],
-               ["({ get x() {42;} });", "6 object"],
-               ["({ set y(a) {1;} });", "7 object"],
-               // member expression
-               ["o.m;", "1 member expression"],
-               ["o['m'];", "2 member expression"],
-               ["o['n']['m'];", "3 member expression"],
-               ["o.n.m;", "4 member expression"],
-               ["o.if;", "5 member expression"],
-               // call and invoke expressions
-               ["f();", "1 call/invoke expression"],
-               ["f(x);", "2 call/invoke expression"],
-               ["f(x,y);", "3 call/invoke expression"],
-               ["o.m();", "4 call/invoke expression"],
-               ["o['m'];", "5 call/invoke expression"],
-               ["o.m(x);", "6 call/invoke expression"],
-               ["o['m'](x);", "7 call/invoke expression"],
-               ["o.m(x,y);", "8 call/invoke expression"],
-               ["o['m'](x,y);", "9 call/invoke expression"],
-               ["f(x)(y);", "10 call/invoke expression"],
-               ["f().x;", "11 call/invoke expression"],
-
-               // eval
-               ["eval('x');", "1 eval"],
-               ["(eval)('x');", "2 eval"],
-               ["(1,eval)('x');", "3 eval"],
-               ["eval(x,y);", "4 eval"],
-               // new expression
-               ["new f();", "1 new expression"],
-               ["new o;", "2 new expression"],
-               ["new o.m;", "3 new expression"],
-               ["new o.m(x);", "4 new expression"],
-               ["new o.m(x,y);", "5 new expression"],
-               // prefix/postfix
-               ["++x;", "1 pre/postfix"],
-               ["x++;", "2 pre/postfix"],
-               ["--x;", "3 pre/postfix"],
-               ["x--;", "4 pre/postfix"],
-               ["x ++;", "5 pre/postfix"],
-               ["x /* comment */ ++;", "6 pre/postfix"],
-               ["++ /* comment */ x;", "7 pre/postfix"],
-               // unary operators
-               ["delete x;", "1 unary operator"],
-               ["void x;", "2 unary operator"],
-               ["+ x;", "3 unary operator"],
-               ["-x;", "4 unary operator"],
-               ["~x;", "5 unary operator"],
-               ["!x;", "6 unary operator"],
-               // meh
-               ["new Date++;", "new date ++"],
-               ["+x++;", " + x ++"],
-               // expression expressions
-               ["1 * 2;", "1 expression expressions"],
-               ["1 / 2;", "2 expression expressions"],
-               ["1 % 2;", "3 expression expressions"],
-               ["1 + 2;", "4 expression expressions"],
-               ["1 - 2;", "5 expression expressions"],
-               ["1 << 2;", "6 expression expressions"],
-               ["1 >>> 2;", "7 expression expressions"],
-               ["1 >> 2;", "8 expression expressions"],
-               ["1 * 2 + 3;", "9 expression expressions"],
-               ["(1+2)*3;", "10 expression expressions"],
-               ["1*(2+3);", "11 expression expressions"],
-               ["x<y;", "12 expression expressions"],
-               ["x>y;", "13 expression expressions"],
-               ["x<=y;", "14 expression expressions"],
-               ["x>=y;", "15 expression expressions"],
-               ["x instanceof y;", "16 expression expressions"],
-               ["x in y;", "17 expression expressions"],
-               ["x&y;", "18 expression expressions"],
-               ["x^y;", "19 expression expressions"],
-               ["x|y;", "20 expression expressions"],
-               ["x+y<z;", "21 expression expressions"],
-               ["x<y+z;", "22 expression expressions"],
-               ["x+y+z;", "23 expression expressions"],
-               ["x+y<z;", "24 expression expressions"],
-               ["x<y+z;", "25 expression expressions"],
-               ["x&y|z;", "26 expression expressions"],
-               ["x&&y;", "27 expression expressions"],
-               ["x||y;", "28 expression expressions"],
-               ["x&&y||z;", "29 expression expressions"],
-               ["x||y&&z;", "30 expression expressions"],
-               ["x<y?z:w;", "31 expression expressions"],
-               // assignment
-               ["x >>>= y;", "1 assignment"],
-               ["x <<= y;", "2 assignment"],
-               ["x = y;", "3 assignment"],
-               ["x += y;", "4 assignment"],
-               ["x /= y;", "5 assignment"],
-               // comma
-               ["x, y;", "comma"],
-               // block
-               ["{};", "1 block"],
-               ["{x;};", "2 block"],
-               ["{x;y;};", "3 block"],
-               // vars
-               ["var x;", "1 var"],
-               ["var x,y;", "2 var"],
-               ["var x=1,y=2;", "3 var"],
-               ["var x,y=2;", "4 var"],
-               // empty
-               [";", "1 empty"],
-               ["\n;", "2 empty"],
-               // expression statement
-               ["x;", "1 expression statement"],
-               ["5;", "2 expression statement"],
-               ["1+2;", "3 expression statement"],
-               // if
-               ["if (c) x; else y;", "1 if statement"],
-               ["if (c) x;", "2 if statement"],
-               ["if (c) {} else {};", "3 if statement"],
-               ["if (c1) if (c2) s1; else s2;", "4 if statement"],
-               // while
-               ["do s; while (e);", "1 while statement"],
-               ["do { s; } while (e);", "2 while statement"],
-               ["while (e) s;", "3 while statement"],
-               ["while (e) { s; };", "4 while statement"],
-               // for
-               ["for (;;) ;", "1 for statement"],
-               ["for (;c;x++) x;", "2 for statement"],
-               ["for (i;i<len;++i){};", "3 for statement"],
-               ["for (var i=0;i<len;++i) {};", "4 for statement"],
-               ["for (var i=0,j=0;;){};", "5 for statement"],
-               //["for (x in b; c; u) {};", "6 for statement"],
-               ["for ((x in b); c; u) {};", "7 for statement"],
-               ["for (x in a);", "8 for statement"],
-               ["for (var x in a){};", "9 for statement"],
-               ["for (var x=5 in a) {};", "10 for statement"],
-               ["for (var x = a in b in c) {};", "11 for statement"],
-               ["for (var x=function(){a+b;}; a<b; ++i) some;", "11 for statement, testing for parsingForHeader reset with the function"],
-               ["for (var x=function(){for (x=0; x<15; ++x) alert(foo); }; a<b; ++i) some;", "11 for statement, testing for parsingForHeader reset with the function"],
-               // flow statements
-               ["while(1){ continue; }", "1 flow statement"],
-               ["label: while(1){ continue label; }", "2 flow statement"],
-               ["while(1){ break; }", "3 flow statement"],
-               ["somewhere: while(1){ break somewhere; }", "4 flow statement"],
-               ["while(1){ continue /* comment */ ; }", "5 flow statement"],
-               ["while(1){ continue \n; }", "6 flow statement"],
-               ["(function(){ return; })()", "7 flow statement"],
-               ["(function(){ return 0; })()", "8 flow statement"],
-               ["(function(){ return 0 + \n 1; })()", "9 flow statement"],
-               // with
-               ["with (e) s;", "with statement"],
-               // switch
-               ["switch (e) { case x: s; };", "1 switch statement"],
-               ["switch (e) { case x: s1;s2; default: s3; case y: s4; };", "2 switch statement"],
-               ["switch (e) { default: s1; case x: s2; case y: s3; };", "3 switch statement"],
-               ["switch (e) { default: s; };", "4 switch statement"],
-               ["switch (e) { case x: s1; case y: s2; };", "5 switch statement"],
-               // labels
-               ["foo : x;", " flow statement"],
-               // throw
-               ["throw x;", "1 throw statement"],
-               ["throw x\n;", "2 throw statement"],
-               // try catch finally
-               ["try { s1; } catch (e) { s2; };", "1 trycatchfinally statement"],
-               ["try { s1; } finally { s2; };", "2 trycatchfinally statement"],
-               ["try { s1; } catch (e) { s2; } finally { s3; };", "3 trycatchfinally statement"],
-               // debugger
-               ["debugger;", "debuger statement"],
-               // function decl
-               ["function f(x) { e; return x; };", "1 function declaration"],
-               ["function f() { x; y; };", "2 function declaration"],
-               ["function f(x,y) { var z; return x; };", "3 function declaration"],
-               // function exp
-               ["(function f(x) { return x; });", "1 function expression"],
-               ["(function empty() {;});", "2 function expression"],
-               ["(function empty() {;});", "3 function expression"],
-               ["(function (x) {; });", "4 function expression"],
-               // program
-               ["var x; function f(){;}; null;", "1 program"],
-               [";;", "2 program"],
-               ["{ x; y; z; }", "3 program"],
-               ["function f(){ function g(){;}};", "4 program"],
-               ["x;\n/*foo*/\n ;", "5 program"],
-
-               // asi
-               ["foo: while(1){ continue \n foo; }", "1 asi"],
-               ["foo: while(1){ break \n foo; }", "2 asi"],
-               ["(function(){ return\nfoo; })()", "3 asi"],
-               ["var x; { 1 \n 2 } 3", "4 asi"],
-               ["ab     /* hi */\ncd", "5 asi"],
-               ["ab/*\n*/cd", "6 asi (multi line multilinecomment counts as eol)"],
-               ["foo: while(1){ continue /* wtf \n busta */ foo; }", "7 asi illegal with multi line comment"],
-               ["function f() { s }", "8 asi"],
-               ["function f() { return }", "9 asi"],
-
-               // use strict
-                // XXX: some of these should actually fail?
-                //      no support for "use strict" yet...
-               ['"use strict"; \'bla\'\n; foo;', "1 directive"],
-               ['(function() { "use strict"; \'bla\';\n foo; });', "2 directive"],
-               ['"use\\n strict";', "3 directive"],
-               ['foo; "use strict";', "4 directive"],
-
-               // tests from http://es5conform.codeplex.com/
-
-               ['"use strict"; var o = { eval: 42};', "8.7.2-3-1-s: the use of eval as property name is allowed"],
-               ['({foo:0,foo:1});', 'Duplicate property name allowed in not strict mode'],
-               ['function foo(a,a){}', 'Duplicate parameter name allowed in not strict mode'],
-               ['(function foo(eval){})', 'Eval allowed as parameter name in non strict mode'],
-               ['(function foo(arguments){})', 'Arguments allowed as parameter name in non strict mode'],
-
-               // empty programs
-
-               ['', '1 Empty program'],
-               ['// test', '2 Empty program'],
-               ['//test\n', '3 Empty program'],
-               ['\n// test', '4 Empty program'],
-               ['\n// test\n', '5 Empty program'],
-               ['/* */', '6 Empty program'],
-               ['/*\ns,fd\n*/', '7 Empty program'],
-               ['/*\ns,fd\n*/\n', '8 Empty program'],
-               ['      ', '9 Empty program'],
-               ['  /*\nsmeh*/  \n   ', '10 Empty program'],
-
-               // trailing whitespace
-
-               ['a  ', '1 Trailing whitespace'],
-               ['a /* something */', '2 Trailing whitespace'],
-               ['a\n   // hah', '3 Trailing whitespace'],
-               ['/abc/de//f', '4 Trailing whitespace'],
-               ['/abc/de/*f*/\n        ', '5 Trailing whitespace'],
-
-               // things the parser tripped over at one point or the other (prevents regression bugs)
-               ['for (x;function(){ a\nb };z) x;', 'for header with function body forcing ASI'],
-               ['c=function(){return;return};', 'resetting noAsi after literal'],
-               ['d\nd()', 'asi exception causing token overflow'],
-               ['for(;;){x=function(){}}', 'function expression in a for header'],
-               ['for(var k;;){}', 'parser failing due to ASI accepting the incorrect "for" rule'],
-               ['({get foo(){ }})', 'getter with empty function body'],
-               ['\nreturnr', 'eol causes return statement to ignore local search requirement'],
-               [' / /', '1 whitespace before regex causes regex to fail?'],
-               ['/ // / /', '2 whitespace before regex causes regex to fail?'],
-               ['/ / / / /', '3 whitespace before regex causes regex to fail?'],
-
-               ['\n\t// Used for trimming whitespace\n\ttrimLeft = /^\\s+/;\n\ttrimRight = /\\s+$/;\t\n','turned out this didnt crash (the test below did), but whatever.'],
-               ['/[\\/]/;', 'escaped forward slash inside class group (would choke on fwd slash)'],
-               ['/[/]/;', 'also broke but is valid in es5 (not es3)'],
-               ['({get:5});','get property name thats not a getter'],
-               ['({set:5});','set property name thats not a setter'],
-               ['l !== "px" && (d.style(h, c, (k || 1) + l), j = (k || 1) / f.cur() * j, d.style(h, c, j + l)), i[1] && (k = (i[1] === "-=" ? -1 : 1) * k + j), f.custom(j, k, l)', 'this choked regex/div at some point'],
-               ['(/\'/g, \'\\\\\\\'\') + "\'";', 'the sequence of escaped characters confused the tokenizer']
-       ];
-
-       for (var i=0; i<inps.length; ++i) {
-               callback(i, inps[i][0], inps[i][1]);
-       };
-};
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/array1.js b/node/node_modules/uglify-js/test/unit/compress/expected/array1.js
deleted file mode 100644 (file)
index 7b09176..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[],Array(1),[1,2,3]
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/array2.js b/node/node_modules/uglify-js/test/unit/compress/expected/array2.js
deleted file mode 100644 (file)
index 05eba19..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=function(){};return new a(1,2,3,4)})()
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/array3.js b/node/node_modules/uglify-js/test/unit/compress/expected/array3.js
deleted file mode 100644 (file)
index 82f4f4d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){function a(){}return new a(1,2,3,4)})()
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/array4.js b/node/node_modules/uglify-js/test/unit/compress/expected/array4.js
deleted file mode 100644 (file)
index 4b7b0f1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){function a(){}(function(){return new a(1,2,3)})()})()
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/assignment.js b/node/node_modules/uglify-js/test/unit/compress/expected/assignment.js
deleted file mode 100644 (file)
index ab626d3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-a=1,b=a,c=1,d=b,e=d,longname=2;if(longname+1){x=3;if(x)var z=7}z=1,y=1,x=1,g+=1,h=g,++i,j=i,i++,j=i+17
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/concatstring.js b/node/node_modules/uglify-js/test/unit/compress/expected/concatstring.js
deleted file mode 100644 (file)
index 3a4ee10..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=a+"a"+"b"+1+c,b=a+"c"+"ds"+123+c,c=a+"c"+123+d+"ds"+c
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/const.js b/node/node_modules/uglify-js/test/unit/compress/expected/const.js
deleted file mode 100644 (file)
index cef74d7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=13,b=1/3
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js b/node/node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js
deleted file mode 100644 (file)
index c5836bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function bar(){return--x}function foo(){while(bar());}function mak(){for(;;);}var x=5
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/forstatement.js b/node/node_modules/uglify-js/test/unit/compress/expected/forstatement.js
deleted file mode 100644 (file)
index fc47411..0000000
+++ /dev/null
@@ -1 +0,0 @@
-a=func(),b=z;for(a++;i<10;i++)alert(i);var z=1;g=2;for(;i<10;i++)alert(i);var a=2;for(var i=1;i<10;i++)alert(i)
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/if.js b/node/node_modules/uglify-js/test/unit/compress/expected/if.js
deleted file mode 100644 (file)
index 236993c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=1;a==1?a=2:a=17
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js b/node/node_modules/uglify-js/test/unit/compress/expected/ifreturn.js
deleted file mode 100644 (file)
index c5c32dd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function a(a){return a==1?2:17}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js b/node/node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js
deleted file mode 100644 (file)
index d6ea940..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function x(a){return typeof a=="object"?a:a===42?0:a*2}function y(a){return typeof a=="object"?a:null}
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue10.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue10.js
deleted file mode 100644 (file)
index 1de52af..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function f(){var a;return(a="a")?a:a}f()
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue11.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue11.js
deleted file mode 100644 (file)
index 876bd0a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-new(A,B),new(A||B),new(X?A:B)
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue13.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue13.js
deleted file mode 100644 (file)
index 295ee69..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=/^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#])(?::(\d))?)?(..?$|(?:[^?#\/]\/))([^?#]*)(?:\?([^#]))?(?:#(.))?/
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue14.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue14.js
deleted file mode 100644 (file)
index 1ca8eef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"}
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue16.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue16.js
deleted file mode 100644 (file)
index 2094828..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=3250441966
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue17.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue17.js
deleted file mode 100644 (file)
index 339bce4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=function(b){b(),a()}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue20.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue20.js
deleted file mode 100644 (file)
index a21935c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-a:1
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue21.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue21.js
deleted file mode 100644 (file)
index fa83bdc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=0;switch(a){case 0:a++}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue25.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue25.js
deleted file mode 100644 (file)
index 3ee9533..0000000
+++ /dev/null
@@ -1 +0,0 @@
-label1:{label2:break label2;console.log(1)}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue27.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue27.js
deleted file mode 100644 (file)
index b1154d1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(a?b:c)?d:e
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue28.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue28.js
deleted file mode 100644 (file)
index 5c0c914..0000000
+++ /dev/null
@@ -1 +0,0 @@
-o={".5":.5},o={.5:.5},o={.5:.5}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue29.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue29.js
deleted file mode 100644 (file)
index eaaa1cb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-result=function(){return 1}()
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue30.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue30.js
deleted file mode 100644 (file)
index 27610b5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=8,b=4,c=4
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue34.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue34.js
deleted file mode 100644 (file)
index a9dd7d4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a={};a["this"]=1,a.that=2
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue4.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue4.js
deleted file mode 100644 (file)
index 1fee33d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=2e3,b=.002,c=2e-5
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue48.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue48.js
deleted file mode 100644 (file)
index 5e8abcd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var s,i;s="",i=0
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue50.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue50.js
deleted file mode 100644 (file)
index 1974186..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function bar(a){try{foo()}catch(b){alert("Exception caught (foo not defined)")}alert(a)}bar(10)
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue53.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue53.js
deleted file mode 100644 (file)
index cd42c05..0000000
+++ /dev/null
@@ -1 +0,0 @@
-x=(y,z)
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue54.1.js
deleted file mode 100644 (file)
index ef06794..0000000
+++ /dev/null
@@ -1 +0,0 @@
-foo+"",a.toString(16),b.toString.call(c)
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue68.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue68.js
deleted file mode 100644 (file)
index 4ec46c8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function f(){function b(){}if(a)return;b()}
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue69.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue69.js
deleted file mode 100644 (file)
index d25ecd6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[(a,b)]
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/issue9.js b/node/node_modules/uglify-js/test/unit/compress/expected/issue9.js
deleted file mode 100644 (file)
index db8d48c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a={a:1,b:2}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/mangle.js b/node/node_modules/uglify-js/test/unit/compress/expected/mangle.js
deleted file mode 100644 (file)
index 6226e8a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var a=function b(a,b,c){return b}})()
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js b/node/node_modules/uglify-js/test/unit/compress/expected/strict-equals.js
deleted file mode 100644 (file)
index 0b7375b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-typeof a=="string",b+""!=c+"",d<e==f<g
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/var.js b/node/node_modules/uglify-js/test/unit/compress/expected/var.js
deleted file mode 100644 (file)
index 01091cf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a=1,b=2
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/expected/with.js b/node/node_modules/uglify-js/test/unit/compress/expected/with.js
deleted file mode 100644 (file)
index c5b0b16..0000000
+++ /dev/null
@@ -1 +0,0 @@
-with({});
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/array1.js b/node/node_modules/uglify-js/test/unit/compress/test/array1.js
deleted file mode 100644 (file)
index ae0851d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-new Array();
-new Array(1);
-new Array(1, 2, 3);
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/array2.js b/node/node_modules/uglify-js/test/unit/compress/test/array2.js
deleted file mode 100644 (file)
index 74226df..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-(function(){
-        var Array = function(){};
-        return new Array(1, 2, 3, 4);
-})();
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/array3.js b/node/node_modules/uglify-js/test/unit/compress/test/array3.js
deleted file mode 100644 (file)
index 6cc9742..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-(function(){
-        return new Array(1, 2, 3, 4);
-        function Array() {};
-})();
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/array4.js b/node/node_modules/uglify-js/test/unit/compress/test/array4.js
deleted file mode 100644 (file)
index 7392861..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-(function(){
-        (function(){
-                return new Array(1, 2, 3);
-        })();
-        function Array(){};
-})();
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/assignment.js b/node/node_modules/uglify-js/test/unit/compress/test/assignment.js
deleted file mode 100644 (file)
index 4e00389..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-a=1;
-b=a;
-c=1;
-d=b;
-e=d;
-longname=2;
-if (longname+1) {
-    x=3;
-    if (x) var z = 7;
-}
-z=1,y=1,x=1
-
-g+=1;
-h=g;
-
-++i;
-j=i;
-
-i++;
-j=i+17;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/concatstring.js b/node/node_modules/uglify-js/test/unit/compress/test/concatstring.js
deleted file mode 100644 (file)
index a4a0037..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var a = a + "a" + "b" + 1 + c;
-var b = a + "c" + "ds" + 123 + c;
-var c = a + "c" + 123 + d + "ds" + c;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/const.js b/node/node_modules/uglify-js/test/unit/compress/test/const.js
deleted file mode 100644 (file)
index f2c62e9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// test that the calculation is fold to 13\r
-var a = 1 + 2 * 6;\r
-\r
-// test that it isn't replaced with 0.3333 because that is more characters\r
-var b = 1/3;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js b/node/node_modules/uglify-js/test/unit/compress/test/empty-blocks.js
deleted file mode 100644 (file)
index 2d679c1..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-var x = 5;
-function bar() { return --x; }
-function foo() { while (bar()); }
-function mak() { for(;;); }
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/forstatement.js b/node/node_modules/uglify-js/test/unit/compress/test/forstatement.js
deleted file mode 100644 (file)
index d2a14f9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-a=func();
-b=z;
-for (a++; i < 10; i++) { alert(i); }
-
-var z=1;
-g=2;
-for (; i < 10; i++) { alert(i); }
-
-var a = 2;
-for (var i = 1; i < 10; i++) { alert(i); }
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/if.js b/node/node_modules/uglify-js/test/unit/compress/test/if.js
deleted file mode 100644 (file)
index a54e762..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-var a = 1;\r
-if (a == 1) {\r
-       a = 2;\r
-} else {\r
-       a = 17;\r
-}\r
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/ifreturn.js b/node/node_modules/uglify-js/test/unit/compress/test/ifreturn.js
deleted file mode 100644 (file)
index 1332c93..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-function a(b) {\r
-       if (b == 1) {\r
-               return 2;\r
-       } else {\r
-               return 17;\r
-       }\r
-\r
-       return 3;\r
-}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js b/node/node_modules/uglify-js/test/unit/compress/test/ifreturn2.js
deleted file mode 100644 (file)
index 5d763ea..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-function x(a) {
-    if (typeof a === 'object')
-        return a;
-
-    if (a === 42)
-        return 0;
-
-    return a * 2;
-}
-
-function y(a) {
-    if (typeof a === 'object')
-        return a;
-
-    return null;
-};
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue10.js b/node/node_modules/uglify-js/test/unit/compress/test/issue10.js
deleted file mode 100644 (file)
index 20adcaa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function f() { var a; if (a = 'a') { return a; } else { return a; } }; f();
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue11.js b/node/node_modules/uglify-js/test/unit/compress/test/issue11.js
deleted file mode 100644 (file)
index f4dbf1f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-new (A, B)
-new (A || B)
-new (X ? A : B)
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue13.js b/node/node_modules/uglify-js/test/unit/compress/test/issue13.js
deleted file mode 100644 (file)
index 4328a20..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a = /^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#])(?::(\d))?)?(..?$|(?:[^?#\/]\/))([^?#]*)(?:\?([^#]))?(?:#(.))?/;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue14.js b/node/node_modules/uglify-js/test/unit/compress/test/issue14.js
deleted file mode 100644 (file)
index 70c26af..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'};
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue16.js b/node/node_modules/uglify-js/test/unit/compress/test/issue16.js
deleted file mode 100644 (file)
index 53b857b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var a = 0xC1BDCEEE;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue17.js b/node/node_modules/uglify-js/test/unit/compress/test/issue17.js
deleted file mode 100644 (file)
index 2dfab55..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-var a = function(b) {
-    b();
-    a()
-}
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue20.js b/node/node_modules/uglify-js/test/unit/compress/test/issue20.js
deleted file mode 100644 (file)
index 5a9dde5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{a: 1}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue21.js b/node/node_modules/uglify-js/test/unit/compress/test/issue21.js
deleted file mode 100644 (file)
index 30d1e1d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-var a = 0;
-switch(a) {
-    case 0:
-        a++;
-        break;
-}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue25.js b/node/node_modules/uglify-js/test/unit/compress/test/issue25.js
deleted file mode 100644 (file)
index 9ca921d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-label1 : {
-    label2 : {
-        break label2;
-        console.log(2);
-    }
-    console.log(1);
-}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue27.js b/node/node_modules/uglify-js/test/unit/compress/test/issue27.js
deleted file mode 100644 (file)
index 89394db..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(a ? b : c) ? d : e
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue28.js b/node/node_modules/uglify-js/test/unit/compress/test/issue28.js
deleted file mode 100644 (file)
index 7188e27..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-o = {'.5':.5}
-o = {'0.5':.5}
-o = {0.5:.5}
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue29.js b/node/node_modules/uglify-js/test/unit/compress/test/issue29.js
deleted file mode 100644 (file)
index f07cf4d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-result=(function(){ return 1;})()
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue30.js b/node/node_modules/uglify-js/test/unit/compress/test/issue30.js
deleted file mode 100644 (file)
index 4e634e2..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var a = 1 << 3;
-var b = 8 >> 1;
-var c = 8 >>> 1;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue34.js b/node/node_modules/uglify-js/test/unit/compress/test/issue34.js
deleted file mode 100644 (file)
index 022f7a3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var a = {};
-a["this"] = 1;
-a["that"] = 2;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue4.js b/node/node_modules/uglify-js/test/unit/compress/test/issue4.js
deleted file mode 100644 (file)
index 0b76103..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var a = 2e3;
-var b = 2e-3;
-var c = 2e-5;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue48.js b/node/node_modules/uglify-js/test/unit/compress/test/issue48.js
deleted file mode 100644 (file)
index 031e85b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-var s, i; s = ''; i = 0;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue50.js b/node/node_modules/uglify-js/test/unit/compress/test/issue50.js
deleted file mode 100644 (file)
index 060f9df..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-function bar(a) {
-        try {
-                foo();
-        } catch(e) {
-                alert("Exception caught (foo not defined)");
-        }
-        alert(a);               // 10 in FF, "[object Error]" in IE
-}
-bar(10);
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue53.js b/node/node_modules/uglify-js/test/unit/compress/test/issue53.js
deleted file mode 100644 (file)
index 4f8b32f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-x = (y, z)
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue54.1.js b/node/node_modules/uglify-js/test/unit/compress/test/issue54.1.js
deleted file mode 100644 (file)
index 967052e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-foo.toString();
-a.toString(16);
-b.toString.call(c);
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue68.js b/node/node_modules/uglify-js/test/unit/compress/test/issue68.js
deleted file mode 100644 (file)
index 14054d0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-function f() {
-        if (a) return;
-        g();
-        function g(){}
-};
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue69.js b/node/node_modules/uglify-js/test/unit/compress/test/issue69.js
deleted file mode 100644 (file)
index d25ecd6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[(a,b)]
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/issue9.js b/node/node_modules/uglify-js/test/unit/compress/test/issue9.js
deleted file mode 100644 (file)
index 6158861..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-var a = {
-    a: 1,
-    b: 2, // <-- trailing comma
-};
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/mangle.js b/node/node_modules/uglify-js/test/unit/compress/test/mangle.js
deleted file mode 100644 (file)
index c271a26..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-(function() {
-    var x = function fun(a, fun, b) {
-        return fun;
-    };
-}());
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/strict-equals.js b/node/node_modules/uglify-js/test/unit/compress/test/strict-equals.js
deleted file mode 100644 (file)
index b631f4c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-typeof a === 'string'
-b + "" !== c + ""
-d < e === f < g
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/var.js b/node/node_modules/uglify-js/test/unit/compress/test/var.js
deleted file mode 100644 (file)
index 609a35d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-// var declarations after each other should be combined\r
-var a = 1;\r
-var b = 2;
\ No newline at end of file
diff --git a/node/node_modules/uglify-js/test/unit/compress/test/with.js b/node/node_modules/uglify-js/test/unit/compress/test/with.js
deleted file mode 100644 (file)
index de266ed..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-with({}) {
-};
diff --git a/node/node_modules/uglify-js/test/unit/scripts.js b/node/node_modules/uglify-js/test/unit/scripts.js
deleted file mode 100644 (file)
index 9fdd96c..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-var fs = require('fs'),
-       uglify = require('uglify-js'),
-       jsp = uglify.parser,
-       nodeunit = require('nodeunit'),
-       path = require('path'),
-       pro = uglify.uglify;
-
-var Script = process.binding('evals').Script;
-
-var scriptsPath = __dirname;
-
-function compress(code) {
-       var ast = jsp.parse(code);
-       ast = pro.ast_mangle(ast);
-       ast = pro.ast_squeeze(ast, { no_warnings: true });
-        ast = pro.ast_squeeze_more(ast);
-       return pro.gen_code(ast);
-};
-
-var testDir = path.join(scriptsPath, "compress", "test");
-var expectedDir = path.join(scriptsPath, "compress", "expected");
-
-function getTester(script) {
-       return function(test) {
-               var testPath = path.join(testDir, script);
-               var expectedPath = path.join(expectedDir, script);
-               var content = fs.readFileSync(testPath, 'utf-8');
-               var outputCompress = compress(content);
-
-               // Check if the noncompressdata is larger or same size as the compressed data
-               test.ok(content.length >= outputCompress.length);
-
-               // Check that a recompress gives the same result
-               var outputReCompress = compress(content);
-               test.equal(outputCompress, outputReCompress);
-
-               // Check if the compressed output is what is expected
-               var expected = fs.readFileSync(expectedPath, 'utf-8');
-               test.equal(outputCompress, expected.replace(/(\r?\n)+$/, ""));
-
-               test.done();
-       };
-};
-
-var tests = {};
-
-var scripts = fs.readdirSync(testDir);
-for (var i in scripts) {
-       var script = scripts[i];
-       if (/\.js$/.test(script)) {
-               tests[script] = getTester(script);
-       }
-}
-
-module.exports = nodeunit.testCase(tests);
diff --git a/node/node_modules/uglify-js/tmp/hoist.js b/node/node_modules/uglify-js/tmp/hoist.js
deleted file mode 100644 (file)
index 4bf2b94..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-function foo(arg1, arg2, arg3, arg4, arg5, arg6) {
-        var a = 5;
-        {
-                var d = 10, mak = 20, buz = 30;
-                var q = buz * 2;
-        }
-        if (moo) {
-                var a, b, c;
-        }
-        for (var arg1 = 0, d = 20; arg1 < 10; ++arg1)
-                console.log(arg3);
-        for (var i in mak) {}
-        for (j in d) {}
-        var d;
-
-        function test() {
-                
-        };
-
-        //test();
-
-        (function moo(first, second){
-                console.log(first);
-        })(1);
-
-        (function moo(first, second){
-                console.log(moo());
-        })(1);
-}
-
-
-var foo;
-var bar;
diff --git a/node/node_modules/uglify-js/tmp/instrument.js b/node/node_modules/uglify-js/tmp/instrument.js
deleted file mode 100644 (file)
index c6a9d79..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-// sample on how to use the parser and walker API to instrument some code
-
-var jsp = require("uglify-js").parser;
-var pro = require("uglify-js").uglify;
-
-function instrument(code) {
-        var ast = jsp.parse(code, false, true); // true for the third arg specifies that we want
-                                                // to have start/end tokens embedded in the
-                                                // statements
-        var w = pro.ast_walker();
-
-        // we're gonna need this to push elements that we're currently looking at, to avoid
-        // endless recursion.
-        var analyzing = [];
-        function do_stat() {
-                var ret;
-                if (this[0].start && analyzing.indexOf(this) < 0) {
-                        // without the `analyzing' hack, w.walk(this) would re-enter here leading
-                        // to infinite recursion
-                        analyzing.push(this);
-                        ret = [ "splice", // XXX: "block" is safer
-                                [ [ "stat",
-                                    [ "call", [ "name", "trace" ],
-                                      [ [ "string", this[0].toString() ],
-                                        [ "num", this[0].start.line ],
-                                        [ "num", this[0].start.col ],
-                                        [ "num", this[0].end.line ],
-                                        [ "num", this[0].end.col ]]]],
-                                  w.walk(this) ]];
-                        analyzing.pop(this);
-                }
-                return ret;
-        };
-        var new_ast = w.with_walkers({
-                "stat"     : do_stat,
-                "label"    : do_stat,
-                "break"    : do_stat,
-                "continue" : do_stat,
-                "debugger" : do_stat,
-                "var"      : do_stat,
-                "const"    : do_stat,
-                "return"   : do_stat,
-                "throw"    : do_stat,
-                "try"      : do_stat,
-                "defun"    : do_stat,
-                "if"       : do_stat,
-                "while"    : do_stat,
-                "do"       : do_stat,
-                "for"      : do_stat,
-                "for-in"   : do_stat,
-                "switch"   : do_stat,
-                "with"     : do_stat
-        }, function(){
-                return w.walk(ast);
-        });
-        return pro.gen_code(new_ast, { beautify: true });
-}
-
-
-
-
-////// test code follows.
-
-var code = instrument(test.toString());
-console.log(code);
-
-function test() {
-        // simple stats
-        a = 5;
-        c += a + b;
-        "foo";
-
-        // var
-        var foo = 5;
-        const bar = 6, baz = 7;
-
-        // switch block.  note we can't track case lines the same way.
-        switch ("foo") {
-            case "foo":
-                return 1;
-            case "bar":
-                return 2;
-        }
-
-        // for/for in
-        for (var i = 0; i < 5; ++i) {
-                console.log("Hello " + i);
-        }
-        for (var i in [ 1, 2, 3]) {
-                console.log(i);
-        }
-
-        // note however that the following is broken.  I guess we
-        // should add the block brackets in this case...
-        for (var i = 0; i < 5; ++i)
-                console.log("foo");
-}
diff --git a/node/node_modules/uglify-js/tmp/instrument2.js b/node/node_modules/uglify-js/tmp/instrument2.js
deleted file mode 100644 (file)
index 6aee5f3..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-// sample on how to use the parser and walker API to instrument some code
-
-var jsp = require("uglify-js").parser;
-var pro = require("uglify-js").uglify;
-
-function instrument(code) {
-        var ast = jsp.parse(code, false, true); // true for the third arg specifies that we want
-                                                // to have start/end tokens embedded in the
-                                                // statements
-        var w = pro.ast_walker();
-
-        function trace (line, comment) {
-                var code = pro.gen_code(line, { beautify: true });
-                var data = line[0]
-
-                var args = []
-                if (!comment) comment = ""
-                if (typeof data === "object") {
-                        code = code.split(/\n/).shift()
-                        args = [ [ "string", data.toString() ],
-                                 [ "string", code ],
-                                 [ "num", data.start.line ],
-                                 [ "num", data.start.col ],
-                                 [ "num", data.end.line ],
-                                 [ "num", data.end.col ]]
-                } else {
-                        args = [ [ "string", data ],
-                                 [ "string", code ]]
-
-                }
-                return [ "call", [ "name", "trace" ], args ];
-        }
-
-        // we're gonna need this to push elements that we're currently looking at, to avoid
-        // endless recursion.
-        var analyzing = [];
-        function do_stat() {
-                var ret;
-                if (this[0].start && analyzing.indexOf(this) < 0) {
-                        // without the `analyzing' hack, w.walk(this) would re-enter here leading
-                        // to infinite recursion
-                        analyzing.push(this);
-                        ret = [ "splice",
-                                [ [ "stat", trace(this) ],
-                                  w.walk(this) ]];
-                        analyzing.pop(this);
-                }
-                return ret;
-        }
-
-        function do_cond(c, t, f) {
-                return [ this[0], w.walk(c),
-                         ["seq", trace(t), w.walk(t) ],
-                         ["seq", trace(f), w.walk(f) ]];
-        }
-
-        function do_binary(c, l, r) {
-                if (c !== "&&" && c !== "||") {
-                        return [this[0], c, w.walk(l), w.walk(r)];
-                }
-                return [ this[0], c,
-                         ["seq", trace(l), w.walk(l) ],
-                         ["seq", trace(r), w.walk(r) ]];
-        }
-
-        var new_ast = w.with_walkers({
-                "stat"        : do_stat,
-                "label"       : do_stat,
-                "break"       : do_stat,
-                "continue"    : do_stat,
-                "debugger"    : do_stat,
-                "var"         : do_stat,
-                "const"       : do_stat,
-                "return"      : do_stat,
-                "throw"       : do_stat,
-                "try"         : do_stat,
-                "defun"       : do_stat,
-                "if"          : do_stat,
-                "while"       : do_stat,
-                "do"          : do_stat,
-                "for"         : do_stat,
-                "for-in"      : do_stat,
-                "switch"      : do_stat,
-                "with"        : do_stat,
-                "conditional" : do_cond,
-                "binary"      : do_binary
-        }, function(){
-                return w.walk(ast);
-        });
-        return pro.gen_code(new_ast, { beautify: true });
-}
-
-
-////// test code follows.
-
-var code = instrument(test.toString());
-console.log(code);
-
-function test() {
-        // simple stats
-        a = 5;
-        c += a + b;
-        "foo";
-
-        // var
-        var foo = 5;
-        const bar = 6, baz = 7;
-
-        // switch block.  note we can't track case lines the same way.
-        switch ("foo") {
-            case "foo":
-                return 1;
-            case "bar":
-                return 2;
-        }
-
-        // for/for in
-        for (var i = 0; i < 5; ++i) {
-                console.log("Hello " + i);
-        }
-        for (var i in [ 1, 2, 3]) {
-                console.log(i);
-        }
-
-        for (var i = 0; i < 5; ++i)
-                console.log("foo");
-
-        for (var i = 0; i < 5; ++i) {
-                console.log("foo");
-        }
-
-        var k = plurp() ? 1 : 0;
-        var x = a ? doX(y) && goZoo("zoo")
-              : b ? blerg({ x: y })
-              : null;
-
-        var x = X || Y;
-}
diff --git a/node/node_modules/uglify-js/tmp/test.js b/node/node_modules/uglify-js/tmp/test.js
deleted file mode 100755 (executable)
index 46842f6..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /usr/bin/env node
-
-global.sys = require(/^v0\.[012]/.test(process.version) ? "sys" : "util");
-var fs = require("fs");
-var uglify = require("uglify-js"), // symlink ~/.node_libraries/uglify-js.js to ../uglify-js.js
-    jsp = uglify.parser,
-    pro = uglify.uglify;
-
-var code = fs.readFileSync("hoist.js", "utf8");
-var ast = jsp.parse(code);
-
-ast = pro.ast_lift_variables(ast);
-
-console.log(pro.gen_code(ast, {
-        beautify: true
-}));
diff --git a/node/node_modules/uglify-js/uglify-js.js b/node/node_modules/uglify-js/uglify-js.js
deleted file mode 100644 (file)
index 4305e23..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-//convienence function(src, [options]);
-function uglify(orig_code, options){
-  options || (options = {});
-  var jsp = uglify.parser;
-  var pro = uglify.uglify;
-
-  var ast = jsp.parse(orig_code, options.strict_semicolons); // parse code and get the initial AST
-  ast = pro.ast_mangle(ast, options.mangle_options); // get a new AST with mangled names
-  ast = pro.ast_squeeze(ast, options.squeeze_options); // get an AST with compression optimizations
-  var final_code = pro.gen_code(ast, options.gen_options); // compressed code here
-  return final_code;
-};
-
-uglify.parser = require("./lib/parse-js");
-uglify.uglify = require("./lib/process");
-
-module.exports = uglify
\ No newline at end of file