summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2009-08-24 16:20:32 +0200
committerFlorian Frank <flori@ping.de>2009-08-24 16:20:32 +0200
commit10f03df1f6a54edaae86e87e1fd7d9a6a6a319f1 (patch)
treed7133d6f5ba8bc2f195ee6e070b34331bd4f5d04
downloadjson-10f03df1f6a54edaae86e87e1fd7d9a6a6a319f1.tar.gz
initial commit
-rw-r--r--.gitignore3
-rw-r--r--CHANGES127
-rw-r--r--COPYING58
-rw-r--r--GPL340
-rw-r--r--README78
-rw-r--r--Rakefile266
-rw-r--r--TODO1
-rw-r--r--VERSION1
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/.keep0
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log52
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat900
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat901
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log261
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log262
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log82
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log34
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat900
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat901
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log81
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log82
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log82
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat1000
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat1001
-rw-r--r--benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log82
-rw-r--r--benchmarks/data/.keep0
-rwxr-xr-xbenchmarks/generator_benchmark.rb165
-rwxr-xr-xbenchmarks/parser_benchmark.rb197
-rwxr-xr-xbin/edit_json.rb9
-rwxr-xr-xbin/prettify_json.rb75
-rw-r--r--data/example.json1
-rw-r--r--data/index.html38
-rw-r--r--data/prototype.js4184
-rw-r--r--diagrams/.keep0
-rw-r--r--doc-templates/main.txt283
-rw-r--r--ext/json/ext/generator/extconf.rb11
-rw-r--r--ext/json/ext/generator/generator.c919
-rw-r--r--ext/json/ext/generator/unicode.c180
-rw-r--r--ext/json/ext/generator/unicode.h53
-rw-r--r--ext/json/ext/parser/extconf.rb11
-rw-r--r--ext/json/ext/parser/parser.c1829
-rw-r--r--ext/json/ext/parser/parser.rl686
-rw-r--r--ext/json/ext/parser/unicode.c154
-rw-r--r--ext/json/ext/parser/unicode.h58
-rwxr-xr-xinstall.rb26
-rw-r--r--lib/json.rb10
-rw-r--r--lib/json/Array.xpm21
-rw-r--r--lib/json/FalseClass.xpm21
-rw-r--r--lib/json/Hash.xpm21
-rw-r--r--lib/json/Key.xpm73
-rw-r--r--lib/json/NilClass.xpm21
-rw-r--r--lib/json/Numeric.xpm28
-rw-r--r--lib/json/String.xpm96
-rw-r--r--lib/json/TrueClass.xpm21
-rw-r--r--lib/json/add/core.rb135
-rw-r--r--lib/json/add/rails.rb58
-rw-r--r--lib/json/common.rb356
-rw-r--r--lib/json/editor.rb1371
-rw-r--r--lib/json/ext.rb15
-rw-r--r--lib/json/ext/.keep0
-rw-r--r--lib/json/json.xpm1499
-rw-r--r--lib/json/pure.rb77
-rw-r--r--lib/json/pure/generator.rb429
-rw-r--r--lib/json/pure/parser.rb269
-rw-r--r--lib/json/version.rb8
-rw-r--r--tests/fixtures/fail1.json1
-rw-r--r--tests/fixtures/fail10.json1
-rw-r--r--tests/fixtures/fail11.json1
-rw-r--r--tests/fixtures/fail12.json1
-rw-r--r--tests/fixtures/fail13.json1
-rw-r--r--tests/fixtures/fail14.json1
-rw-r--r--tests/fixtures/fail18.json1
-rw-r--r--tests/fixtures/fail19.json1
-rw-r--r--tests/fixtures/fail2.json1
-rw-r--r--tests/fixtures/fail20.json1
-rw-r--r--tests/fixtures/fail21.json1
-rw-r--r--tests/fixtures/fail22.json1
-rw-r--r--tests/fixtures/fail23.json1
-rw-r--r--tests/fixtures/fail24.json1
-rw-r--r--tests/fixtures/fail25.json1
-rw-r--r--tests/fixtures/fail27.json2
-rw-r--r--tests/fixtures/fail28.json2
-rw-r--r--tests/fixtures/fail3.json1
-rw-r--r--tests/fixtures/fail4.json1
-rw-r--r--tests/fixtures/fail5.json1
-rw-r--r--tests/fixtures/fail6.json1
-rw-r--r--tests/fixtures/fail7.json1
-rw-r--r--tests/fixtures/fail8.json1
-rw-r--r--tests/fixtures/fail9.json1
-rw-r--r--tests/fixtures/pass1.json56
-rw-r--r--tests/fixtures/pass15.json1
-rw-r--r--tests/fixtures/pass16.json1
-rw-r--r--tests/fixtures/pass17.json1
-rw-r--r--tests/fixtures/pass2.json1
-rw-r--r--tests/fixtures/pass26.json1
-rw-r--r--tests/fixtures/pass3.json6
-rwxr-xr-xtests/test_json.rb312
-rwxr-xr-xtests/test_json_addition.rb164
-rwxr-xr-xtests/test_json_fixtures.rb34
-rwxr-xr-xtests/test_json_generate.rb106
-rwxr-xr-xtests/test_json_rails.rb146
-rwxr-xr-xtests/test_json_unicode.rb62
-rwxr-xr-xtools/fuzz.rb139
-rwxr-xr-xtools/server.rb61
119 files changed, 38028 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..343a4f0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.*.sw[pon]
+coverage
+pkg
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..7e0a7db
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,127 @@
+2009-08-23 (1.1.8)
+ * Applied a patch by OZAWA Sakuro <sakuro@2238club.org> to make json/pure
+ work in environments that don't provide iconv.
+ * Applied patch by okkez_ in order to fix Ruby Bug #1768:
+ http://redmine.ruby-lang.org/issues/show/1768.
+ * Finally got around to avoid the rather paranoid escaping of ?/ characters
+ in the generator's output. The parsers aren't affected by this change.
+ Thanks to Rich Apodaca <rapodaca@metamolecular.com> for the suggestion.
+2009-06-29 (1.1.7)
+ * Security Fix for JSON::Pure::Parser. A specially designed string could
+ cause catastrophic backtracking in one of the parser's regular expressions
+ in earlier 1.1.x versions. JSON::Ext::Parser isn't affected by this issue.
+ Thanks to Bartosz Blimke <bartosz@new-bamboo.co.uk> for reporting this
+ problem.
+ * This release also uses a less strict ruby version requirement for the
+ creation of the mswin32 native gem.
+2009-05-10 (1.1.6)
+ * No changes. І tested native linux gems in the last release and they don't
+ play well with different ruby versions other than the one the gem was built
+ with. This release is just to bump the version number in order to skip the
+ native gem on rubyforge.
+2009-05-10 (1.1.5)
+ * Started to build gems with rake-compiler gem.
+ * Applied patch object/array class patch from Brian Candler
+ <B.Candler@pobox.com> and fixes.
+2009-04-01 (1.1.4)
+ * Fixed a bug in the creation of serialized generic rails objects reported by
+ Friedrich Graeter <graeter@hydrixos.org>.
+ * Deleted tests/runner.rb, we're using testrb instead.
+ * Editor supports Infinity in numbers now.
+ * Made some changes in order to get the library to compile/run under Ruby
+ 1.9.
+ * Improved speed of the code path for the fast_generate method in the pure
+ variant.
+2008-07-10 (1.1.3)
+ * Wesley Beary <monki@geemus.com> reported a bug in json/add/core's DateTime
+ handling: If the nominator and denominator of the offset were divisible by
+ each other Ruby's Rational#to_s returns them as an integer not a fraction
+ with '/'. This caused a ZeroDivisionError during parsing.
+ * Use Date#start and DateTime#start instead of sg method, while
+ remaining backwards compatible.
+ * Supports ragel >= 6.0 now.
+ * Corrected some tests.
+ * Some minor changes.
+2007-11-27 (1.1.2)
+ * Remember default dir (last used directory) in editor.
+ * JSON::Editor.edit method added, the editor can now receive json texts from
+ the clipboard via C-v.
+ * Load json texts from an URL pasted via middle button press.
+ * Added :create_additions option to Parser. This makes it possible to disable
+ the creation of additions by force, in order to treat json texts as data
+ while having additions loaded.
+ * Jacob Maine <jmaine@blurb.com> reported, that JSON(:foo) outputs a JSON
+ object if the rails addition is enabled, which is wrong. It now outputs a
+ JSON string "foo" instead, like suggested by Jacob Maine.
+ * Discovered a bug in the Ruby Bugs Tracker on rubyforge, that was reported
+ by John Evans lgastako@gmail.com. He could produce a crash in the JSON
+ generator by returning something other than a String instance from a
+ to_json method. I now guard against this by doing a rather crude type
+ check, which raises an exception instead of crashing.
+2007-07-06 (1.1.1)
+ * Yui NARUSE <naruse@airemix.com> sent some patches to fix tests for Ruby
+ 1.9. I applied them and adapted some of them a bit to run both on 1.8 and
+ 1.9.
+ * Introduced a JSON.parse! method without depth checking for people who like
+ danger.
+ * Made generate and pretty_generate methods configurable by an options hash.
+ * Added :allow_nan option to parser and generator in order to handle NaN,
+ Infinity, and -Infinity correctly - if requested. Floats, which aren't numbers,
+ aren't valid JSON according to RFC4627, so by default an exception will be
+ raised if any of these symbols are encountered. Thanks to Andrea Censi
+ <andrea.censi@dis.uniroma1.it> for his hint about this.
+ * Fixed some more tests for Ruby 1.9.
+ * Implemented dump/load interface of Marshal as suggested in ruby-core:11405
+ by murphy <murphy@rubychan.de>.
+ * Implemented the max_nesting feature for generate methods, too.
+ * Added some implementations for ruby core's custom objects for
+ serialisation/deserialisation purposes.
+2007-05-21 (1.1.0)
+ * Implemented max_nesting feature for parser to avoid stack overflows for
+ data from untrusted sources. If you trust the source, you can disable it
+ with the option max_nesting => false.
+ * Piers Cawley <pdcawley@bofh.org.uk> reported a bug, that not every
+ character can be escaped by ?\ as required by RFC4627. There's a
+ contradiction between David Crockford's JSON checker test vectors (in
+ tests/fixtures) and RFC4627, though. I decided to stick to the RFC, because
+ the JSON checker seems to be a bit older than the RFC.
+ * Extended license to Ruby License, which includes the GPL.
+ * Added keyboard shortcuts, and 'Open location' menu item to edit_json.rb.
+2007-05-09 (1.0.4)
+ * Applied a patch from Yui NARUSE <naruse@airemix.com> to make JSON compile
+ under Ruby 1.9. Thank you very much for mailing it to me!
+ * Made binary variants of JSON fail early, instead of falling back to the
+ pure version. This should avoid overshadowing of eventual problems while
+ loading of the binary.
+2007-03-24 (1.0.3)
+ * Improved performance of pure variant a bit.
+ * The ext variant of this release supports the mswin32 platform. Ugh!
+2007-03-24 (1.0.2)
+ * Ext Parser didn't parse 0e0 correctly into 0.0: Fixed!
+2007-03-24 (1.0.1)
+ * Forgot some object files in the build dir. I really like that - not!
+2007-03-24 (1.0.0)
+ * Added C implementations for the JSON generator and a ragel based JSON
+ parser in C.
+ * Much more tests, especially fixtures from json.org.
+ * Further improved conformance to RFC4627.
+2007-02-09 (0.4.3)
+ * Conform more to RFC4627 for JSON: This means JSON strings
+ now always must contain exactly one object "{ ... }" or array "[ ... ]" in
+ order to be parsed without raising an exception. The definition of what
+ constitutes a whitespace is narrower in JSON than in Ruby ([ \t\r\n]), and
+ there are differences in floats and integers (no octals or hexadecimals) as
+ well.
+ * Added aliases generate and pretty_generate of unparse and pretty_unparse.
+ * Fixed a test case.
+ * Catch an Iconv::InvalidEncoding exception, that seems to occur on some Sun
+ boxes with SunOS 5.8, if iconv doesn't support utf16 conversions. This was
+ reported by Andrew R Jackson <andrewj@bcm.tmc.edu>, thanks a bunch!
+2006-08-25 (0.4.2)
+ * Fixed a bug in handling solidi (/-characters), that was reported by
+ Kevin Gilpin <kevin.gilpin@alum.mit.edu>.
+2006-02-06 (0.4.1)
+ * Fixed a bug related to escaping with backslashes. Thanks for the report go
+ to Florian Munz <surf@theflow.de>.
+2005-09-23 (0.4.0)
+ * Initial Rubyforge Version
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..c3a2126
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,58 @@
+Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.co.jp>.
+You can redistribute it and/or modify it under either the terms of the GPL
+(see GPL file), or the conditions below:
+
+ 1. You may make and give away verbatim copies of the source form of the
+ software without restriction, provided that you duplicate all of the
+ original copyright notices and associated disclaimers.
+
+ 2. You may modify your copy of the software in any way, provided that
+ you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise
+ make them Freely Available, such as by posting said
+ modifications to Usenet or an equivalent medium, or by allowing
+ the author to include your modifications in the software.
+
+ b) use the modified software only within your corporation or
+ organization.
+
+ c) rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided.
+
+ d) make other distribution arrangements with the author.
+
+ 3. You may distribute the software in object code or executable
+ form, provided that you do at least ONE of the following:
+
+ a) distribute the executables and library files of the software,
+ together with instructions (in the manual page or equivalent)
+ on where to get the original distribution.
+
+ b) accompany the distribution with the machine-readable source of
+ the software.
+
+ c) give non-standard executables non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 4. You may modify and include the part of the software into any other
+ software (possibly commercial). But some files in the distribution
+ are not written by the author, so that they are not under this terms.
+
+ They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
+ files under the ./missing directory. See each file for the copying
+ condition.
+
+ 5. The scripts and library files supplied as input to or produced as
+ output from the software do not automatically fall under the
+ copyright of the software, but belong to whomever generated them,
+ and may be sold commercially, and may be aggregated with this
+ software.
+
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
+
diff --git a/GPL b/GPL
new file mode 100644
index 0000000..db2fc45
--- /dev/null
+++ b/GPL
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/README b/README
new file mode 100644
index 0000000..14ef17f
--- /dev/null
+++ b/README
@@ -0,0 +1,78 @@
+Dependencies for Building
+=========================
+
+- You need rake to build the extensions and install them.
+
+ You can get it from rubyforge:
+ http://rubyforge.org/projects/rake
+
+ or just type
+
+ # gem install rake
+
+ for the installation via rubygems.
+
+- If you want to rebuild the parser.c file or draw nice graphviz images of the
+ state machines, you need ragel from:
+ http://www.cs.queensu.ca/~thurston/ragel
+
+Installation
+============
+
+It's recommended to use the extension variant of JSON, because it's quite a bit
+faster than the pure ruby variant. If you cannot build it on your system, you
+can settle for the latter.
+
+Just type into the command line as root:
+
+# rake install
+
+The above command will build the extensions and install them on your system.
+
+# rake install_pure
+
+or
+
+# ruby install.rb
+
+will just install the pure ruby implementation of JSON.
+
+If you use Rubygems you can type
+
+# gem install json
+
+instead, to install the newest JSON version.
+
+There is also a pure ruby json only variant of the gem, that can be installed
+with:
+
+# gem install json_pure
+
+Testing and Examples
+====================
+
+To run the tests type:
+
+$ rake test_ext
+
+This will build the extensions first and then test them.
+
+$ rake test_pure
+
+This will test the pure ruby extensions.
+
+There is also a small example in tools/server.rb if you want to see, how
+receiving a JSON object from a webrick server in your browser with the
+javasript prototype library (http://www.prototypejs.org) works.
+
+Author
+======
+
+Florian Frank <flori@ping.de>
+
+License
+=======
+
+Ruby License, see the COPYING file included in the source distribution. The
+Ruby License includes the GNU General Public License (GPL), Version 2, so see
+the file GPL as well.
diff --git a/Rakefile b/Rakefile
new file mode 100644
index 0000000..b3ed3fa
--- /dev/null
+++ b/Rakefile
@@ -0,0 +1,266 @@
+begin
+ require 'rake/gempackagetask'
+ require 'rake/extensiontask'
+rescue LoadError
+end
+require 'rake/clean'
+CLOBBER.include Dir['benchmarks/data/*.{dat,log}']
+
+require 'rbconfig'
+include Config
+
+MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
+PKG_NAME = 'json'
+PKG_VERSION = File.read('VERSION').chomp
+PKG_FILES = FileList["**/*"].exclude(/CVS|pkg|tmp|coverage|Makefile/).exclude(/\.(so|bundle|o|#{CONFIG['DLEXT']})$/)
+EXT_ROOT_DIR = 'ext/json/ext'
+EXT_PARSER_DIR = "#{EXT_ROOT_DIR}/parser"
+EXT_PARSER_DL = "#{EXT_ROOT_DIR}/parser.#{CONFIG['DLEXT']}"
+EXT_PARSER_SRC = "#{EXT_PARSER_DIR}/parser.c"
+PKG_FILES << EXT_PARSER_SRC
+EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
+EXT_GENERATOR_DL = "#{EXT_ROOT_DIR}/generator.#{CONFIG['DLEXT']}"
+EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
+RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find { |c| system(c, '-v') }
+RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
+RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
+CLEAN.include FileList['diagrams/*.*'], 'doc', 'coverage', 'tmp',
+ FileList["ext/**/{Makefile,mkmf.log}"],
+ FileList["{ext,lib}/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def}"]
+
+desc "Installing library (pure)"
+task :install_pure => :version do
+ ruby 'install.rb'
+end
+
+task :install_ext_really do
+ sitearchdir = CONFIG["sitearchdir"]
+ cd 'ext' do
+ for file in Dir["json/ext/*.#{CONFIG['DLEXT']}"]
+ d = File.join(sitearchdir, file)
+ mkdir_p File.dirname(d)
+ install(file, d)
+ end
+ end
+end
+
+desc "Installing library (extension)"
+task :install_ext => [ :compile_ext, :install_pure, :install_ext_really ]
+
+desc "Installing library (extension)"
+task :install => :install_ext
+
+desc "Compiling extension"
+task :compile_ext => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
+
+file EXT_PARSER_DL => EXT_PARSER_SRC do
+ cd EXT_PARSER_DIR do
+ ruby 'extconf.rb'
+ system MAKE
+ end
+ cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
+end
+
+file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
+ cd EXT_GENERATOR_DIR do
+ ruby 'extconf.rb'
+ system MAKE
+ end
+ cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
+end
+
+desc "Generate parser with ragel"
+task :ragel => EXT_PARSER_SRC
+
+task :ragel_clean do
+ rm_rf EXT_PARSER_SRC
+end
+
+file EXT_PARSER_SRC => RAGEL_PATH do
+ cd EXT_PARSER_DIR do
+ if RAGEL_CODEGEN == 'ragel'
+ system "ragel parser.rl -G2 -o parser.c"
+ else
+ system "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
+ end
+ end
+end
+
+desc "Generate diagrams of ragel parser (ps)"
+task :ragel_dot_ps do
+ root = 'diagrams'
+ specs = []
+ File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
+ for s in specs
+ if RAGEL_DOTGEN == 'ragel'
+ system "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tps -o#{root}/#{s}.ps"
+ else
+ system "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
+ end
+ end
+end
+
+desc "Generate diagrams of ragel parser (png)"
+task :ragel_dot_png do
+ root = 'diagrams'
+ specs = []
+ File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
+ for s in specs
+ if RAGEL_DOTGEN == 'ragel'
+ system "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tpng -o#{root}/#{s}.png"
+ else
+ system "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
+ end
+ end
+end
+
+desc "Generate diagrams of ragel parser"
+task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
+
+desc "Testing library (pure ruby)"
+task :test_pure => :clean do
+ ENV['JSON'] = 'pure'
+ ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
+ system "testrb #{Dir['tests/*.rb'] * ' '}"
+end
+
+desc "Testing library (extension)"
+task :test_ext => :compile_ext do
+ ENV['JSON'] = 'ext'
+ ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
+ system "testrb #{Dir['tests/*.rb'] * ' '}"
+end
+
+desc "Testing library (pure ruby and extension)"
+task :test => [ :test_pure, :test_ext ]
+
+desc "Benchmarking parser"
+task :benchmark_parser do
+ ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
+ ruby 'benchmarks/parser_benchmark.rb'
+end
+
+desc "Benchmarking generator"
+task :benchmark_generator do
+ ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
+ ruby 'benchmarks/generator_benchmark.rb'
+end
+
+desc "Benchmarking library"
+task :benchmark => [ :benchmark_parser, :benchmark_generator ]
+
+desc "Create RDOC documentation"
+task :doc => [ :version, EXT_PARSER_SRC ] do
+ system "rdoc -S -o doc -m main.txt doc-templates/main.txt lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
+end
+
+if defined?(Gem) and defined?(Rake::GemPackageTask) and defined?(Rake::ExtensionTask)
+ spec_pure = Gem::Specification.new do |s|
+ s.name = 'json_pure'
+ s.version = PKG_VERSION
+ s.summary = "A JSON implementation in Ruby"
+ s.description = "This is a JSON implementation in pure Ruby."
+
+ s.files = PKG_FILES
+
+ s.require_path = 'lib'
+
+ s.bindir = "bin"
+ s.executables = [ "edit_json.rb", "prettify_json.rb" ]
+ s.default_executable = "edit_json.rb"
+
+ s.has_rdoc = true
+ s.rdoc_options <<
+ '--title' << 'JSON -- A JSON implemention' <<
+ '--main' << 'JSON' << '--line-numbers'
+ s.test_files.concat Dir['tests/*.rb']
+
+ s.author = "Florian Frank"
+ s.email = "flori@ping.de"
+ s.homepage = "http://json.rubyforge.org"
+ s.rubyforge_project = "json"
+ end
+
+ Rake::GemPackageTask.new(spec_pure) do |pkg|
+ pkg.need_tar = true
+ pkg.package_files += PKG_FILES
+ end
+
+ spec_ext = Gem::Specification.new do |s|
+ s.name = 'json'
+ s.version = PKG_VERSION
+ s.summary = "A JSON implementation as a Ruby extension"
+ s.description = "This is a JSON implementation as a Ruby extension in C."
+
+ s.files = PKG_FILES
+
+ s.extensions = FileList['ext/**/extconf.rb']
+
+ s.require_path = EXT_ROOT_DIR
+ s.require_paths << 'ext'
+ s.require_paths << 'lib'
+
+ s.bindir = "bin"
+ s.executables = [ "edit_json.rb", "prettify_json.rb" ]
+ s.default_executable = "edit_json.rb"
+
+ s.has_rdoc = true
+ s.rdoc_options <<
+ '--title' << 'JSON -- A JSON implemention' <<
+ '--main' << 'JSON' << '--line-numbers'
+ s.test_files.concat Dir['tests/*.rb']
+
+ s.author = "Florian Frank"
+ s.email = "flori@ping.de"
+ s.homepage = "http://json.rubyforge.org"
+ s.rubyforge_project = "json"
+ end
+
+ Rake::GemPackageTask.new(spec_ext) do |pkg|
+ pkg.need_tar = true
+ pkg.package_files = PKG_FILES
+ end
+
+ Rake::ExtensionTask.new do |ext|
+ ext.name = 'parser'
+ ext.gem_spec = spec_ext
+ ext.cross_compile = true
+ ext.cross_platform = 'i386-mswin32'
+ ext.ext_dir = 'ext/json/ext/parser'
+ ext.lib_dir = 'lib/json/ext'
+ end
+
+ Rake::ExtensionTask.new do |ext|
+ ext.name = 'generator'
+ ext.gem_spec = spec_ext
+ ext.cross_compile = true
+ ext.cross_platform = 'i386-mswin32'
+ ext.ext_dir = 'ext/json/ext/generator'
+ ext.lib_dir = 'lib/json/ext'
+ end
+end
+
+desc m = "Writing version information for #{PKG_VERSION}"
+task :version do
+ puts m
+ File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
+ v.puts <<EOT
+module JSON
+ # JSON version
+ VERSION = '#{PKG_VERSION}'
+ VERSION_ARRAY = VERSION.split(/\\./).map { |x| x.to_i } # :nodoc:
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
+end
+EOT
+ end
+end
+
+desc "Build all gems and archives for a new release."
+task :release => [ :clean, :version, :cross, :native, :gem ] do
+ system "#$0 clean native gem"
+ system "#$0 clean package"
+end
+
+task :default => [ :version, :compile_ext ]
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/TODO
@@ -0,0 +1 @@
+
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..18efdb9
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+1.1.8
diff --git a/benchmarks/data-p4-3GHz-ruby18/.keep b/benchmarks/data-p4-3GHz-ruby18/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/.keep
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log
new file mode 100644
index 0000000..f63d7ff
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log
@@ -0,0 +1,52 @@
+========================== 2009-04-01T16:54:14 CEST ===========================
+
+Comparing times (call_time_mean):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 547.354332608 ( real) -> 15.090x
+ 0.001826970
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 443.968212317 ( real) -> 12.240x
+ 0.002252414
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 375.104545883 ( real) -> 10.341x
+ 0.002665923
+ 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 49.978706968 ( real) -> 1.378x
+ 0.020008521
+ 5 GeneratorBenchmarkRails#generator 1000 repeats:
+ 38.531868759 ( real) -> 1.062x
+ 0.025952543
+ 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 36.927649925 ( real) -> 1.018x 7 (>=3859)
+ 0.027079979
+ 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 36.272134441 ( real) -> 1.000x 6 (>=3859)
+ 0.027569373
+ calls/sec ( time) -> speed covers
+ secs/call
+
+Comparing times (call_time_median):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 708.258020939 ( real) -> 16.547x
+ 0.001411915
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 569.105020353 ( real) -> 13.296x
+ 0.001757145
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 482.825371244 ( real) -> 11.280x
+ 0.002071142
+ 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 62.717626652 ( real) -> 1.465x
+ 0.015944481
+ 5 GeneratorBenchmarkRails#generator 1000 repeats:
+ 43.965681162 ( real) -> 1.027x
+ 0.022745013
+ 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 43.929073409 ( real) -> 1.026x 7 (>=3859)
+ 0.022763968
+ 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 42.802514491 ( real) -> 1.000x 6 (>=3859)
+ 0.023363113
+ calls/sec ( time) -> speed covers
+ secs/call
+===============================================================================
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat
new file mode 100644
index 0000000..4b1253c
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.00598106516199361
+3 -0.0112807270419403
+4 -0.0123696625707977
+5 -0.0156474123184087
+6 -0.0167058727326317
+7 -0.0174226257732614
+8 -0.0189193377912716
+9 -0.0214634645195233
+10 -0.0210243967687236
+11 -0.0184155266311585
+12 -0.0181108782382041
+13 -0.0176431070033873
+14 -0.0156578972028912
+15 -0.0177374502087085
+16 -0.0141455286987274
+17 -0.00795945141612284
+18 -0.0113514826844811
+19 -0.00973302086315654
+20 -0.00752544154967475
+21 -0.00910755332739381
+22 -0.0135251862007292
+23 -0.018973749693597
+24 -0.0204970425654037
+25 -0.0215794434931503
+26 -0.0208820323198205
+27 -0.0215343932179269
+28 -0.0197971427401652
+29 -0.0184170283596744
+30 -0.0175671796001255
+31 -0.0182236843115851
+32 -0.0197281221230859
+33 -0.0150052309130744
+34 -0.0149918485410557
+35 -0.0148118613887254
+36 -0.0167181900944588
+37 -0.0206983251289769
+38 -0.0210801801789031
+39 -0.0208844740744579
+40 -0.019184207940328
+41 -0.017212049362023
+42 -0.0120240041713764
+43 -0.0100234143586629
+44 -0.00665522354326635
+45 -0.0100620537646498
+46 -0.00769258313093049
+47 -0.0101574928855612
+48 -0.0159677916154784
+49 -0.0165646691066312
+50 -0.0130718375795871
+51 -0.0164703973814153
+52 -0.0175737709174274
+53 -0.0196185539680136
+54 -0.0206376650276647
+55 -0.0205816624943907
+56 -0.0182046841305021
+57 -0.0170847346598826
+58 -0.0173697791657325
+59 -0.0137208345061376
+60 -0.015172781992446
+61 -0.0115255106202091
+62 0.417092484407713
+63 0.504693995877898
+64 -0.00952721402961746
+65 -0.0131282852877526
+66 -0.0119948030163429
+67 -0.016073832621251
+68 -0.0161014355592232
+69 -0.0171579854383285
+70 -0.01991680519785
+71 -0.0201834782243293
+72 -0.0193410584396016
+73 -0.0171039752714963
+74 -0.0161429988491727
+75 -0.0132132704199617
+76 -0.0168078802690772
+77 -0.0158003286920553
+78 -0.00835714207351243
+79 -0.00762120905134282
+80 -0.0123153809247642
+81 -0.00899280191875777
+82 -0.0119224362468367
+83 -0.0119149552172981
+84 -0.0153878383194161
+85 -0.0180946307259483
+86 -0.0183903902356951
+87 -0.0192363155579457
+88 -0.0187515314979391
+89 -0.017863448747676
+90 -0.0164433211511183
+91 -0.0165939525554464
+92 -0.0165402045616707
+93 -0.0185978157278274
+94 -0.0142998133920208
+95 -0.0132850828003168
+96 -0.0138653751741504
+97 -0.015439338933265
+98 -0.020103623875719
+99 -0.0195401109212907
+100 -0.0201426108270252
+101 -0.0189159648139772
+102 -0.017741354411347
+103 -0.0123542006315354
+104 -0.00844298039184578
+105 -0.00684884437276309
+106 -0.00886668438174435
+107 -0.0112356781545771
+108 -0.00988387556228173
+109 -0.0132456696681112
+110 -0.0163390481544352
+111 -0.0139327158127501
+112 -0.0163794215654705
+113 -0.016828431108095
+114 -0.0170664831346389
+115 -0.0194839016196901
+116 -0.0196691116442597
+117 -0.0171523870407326
+118 -0.0162329780166863
+119 -0.015465269120626
+120 -0.0149628404982249
+121 -0.0131035423300313
+122 -0.0131195334166545
+123 -0.00981529237544382
+124 0.80187886471569
+125 0.0584684544905557
+126 -0.0102423491415993
+127 -0.0120909818906237
+128 -0.0108758895949621
+129 -0.014289679096502
+130 -0.0143039174642426
+131 -0.0156868282211593
+132 -0.0179722786147755
+133 -0.018466068371964
+134 -0.017079048029739
+135 -0.015065426013034
+136 -0.0138193891158787
+137 -0.0108007611003438
+138 -0.0135404983439662
+139 -0.0106058448707185
+140 -0.00496922876002826
+141 -0.00606791982549938
+142 -0.00898435609237426
+143 -0.00744828430883844
+144 -0.00954635887187427
+145 -0.0117471427501629
+146 -0.0167882985759187
+147 -0.0165458334875186
+148 -0.0185963339262843
+149 -0.0180476363378826
+150 -0.0184792287658906
+151 -0.0168571398090795
+152 -0.0156376237363163
+153 -0.0147405503105207
+154 -0.0155752570759927
+155 -0.0168091690226222
+156 -0.0121055609701471
+157 -0.0119152241705694
+158 -0.0119692018483073
+159 -0.0139405471343238
+160 -0.0182047564679262
+161 -0.0184815245671085
+162 -0.0183316150688267
+163 -0.016818527387266
+164 -0.0172998927309072
+165 -0.0124657171517376
+166 -0.0142205952112049
+167 -0.0114632791024164
+168 -0.011221691825434
+169 -0.00957685728179515
+170 -0.0118576208768814
+171 -0.0153568395493832
+172 -0.0151309123215381
+173 -0.0112872846794788
+174 -0.0147612619416181
+175 -0.0154278253183317
+176 -0.017303559049782
+177 -0.0182913411620323
+178 -0.0177712913609271
+179 -0.0155461026200739
+180 -0.0145007758787646
+181 -0.0144152256728993
+182 -0.0107727311780094
+183 -0.0119747664680712
+184 -0.00882273326524172
+185 0.298288232093739
+186 0.504424933837681
+187 -0.00805741122482888
+188 -0.00961890557289795
+189 -0.00944688808242372
+190 -0.0119139223572203
+191 -0.0124508210479303
+192 -0.0127383878728495
+193 -0.0140193628792942
+194 -0.0170021455698375
+195 -0.0164885587823976
+196 -0.0148914800888949
+197 -0.0140274704089252
+198 -0.0131444255262164
+199 -0.0142902568930679
+200 -0.0126395509953569
+201 -0.00514616330632373
+202 -0.00425889059218646
+203 -0.00870210148720889
+204 -0.00484025498847868
+205 -0.00794583465279226
+206 -0.0116098809300245
+207 -0.0102840248799257
+208 -0.0140847096783508
+209 -0.0161819274468977
+210 -0.0172520609046289
+211 -0.0165784733425168
+212 -0.0171152877835852
+213 -0.0173274798435417
+214 -0.0172101117258917
+215 -0.0170745436946526
+216 -0.0166392767496565
+217 -0.0113694394099134
+218 -0.0105561014609266
+219 -0.0105629655709691
+220 -0.0125843349808509
+221 -0.0169833235509721
+222 -0.0165970567333725
+223 -0.0169456130691041
+224 -0.0161440375799497
+225 -0.0149208783509213
+226 -0.0127041663317928
+227 -0.0111128965166982
+228 -0.0107029810231524
+229 -0.0101086923411873
+230 -0.0118221345845309
+231 -0.0102332052283776
+232 -0.0142577541114976
+233 -0.0140498538213083
+234 -0.010942704916447
+235 -0.0136212685457223
+236 -0.0138034339481212
+237 -0.0142845001756096
+238 -0.0165754738828122
+239 -0.0171898507581589
+240 -0.0146271352439982
+241 -0.0137790375298089
+242 -0.0133917511680577
+243 -0.0131288925890812
+244 -0.0109685827301647
+245 -0.0109244911317575
+246 -0.0080777880722406
+247 0.629508042863424
+248 0.116751190107802
+249 -0.00891172050628469
+250 -0.0107100331770611
+251 -0.00937995296389259
+252 -0.0124380337244143
+253 -0.0121281792844181
+254 -0.0135654919014245
+255 -0.0157362779934119
+256 -0.0164366578243166
+257 -0.0158700429675927
+258 -0.0136292281849102
+259 -0.0127546292697666
+260 -0.0122591657651713
+261 -0.0127690216839386
+262 -0.00988530296069743
+263 -0.00345655852423828
+264 -0.00433593866795492
+265 -0.00706082950577672
+266 -0.00451315885069749
+267 -0.00668518865876445
+268 -0.00988046989504585
+269 -0.0142752753866166
+270 -0.0139256221754419
+271 -0.0154989360192202
+272 -0.0151674600751258
+273 -0.0149460719819308
+274 -0.0149332807768296
+275 -0.0156711823892888
+276 -0.0155655062141426
+277 -0.0160655120365346
+278 -0.0148872833405304
+279 -0.00979872106668723
+280 -0.00908095518721164
+281 -0.00991496017614028
+282 -0.0116461289373857
+283 -0.0161876753215528
+284 -0.0160928457909713
+285 -0.0161826534411892
+286 -0.0144074994368989
+287 -0.0150828945998731
+288 -0.0112888375805587
+289 -0.01017522369822
+290 -0.00930009208093838
+291 -0.00867898201478243
+292 -0.00724704290881507
+293 -0.00975976377430877
+294 -0.0136277415192816
+295 -0.013064486102752
+296 -0.00951242385528366
+297 -0.0127976272170567
+298 -0.0136452137191805
+299 -0.0153115325990551
+300 -0.0163644585755829
+301 -0.0159743500315232
+302 -0.0137072967343182
+303 -0.0124465021916348
+304 -0.0124687214149045
+305 -0.00923829560254089
+306 -0.0116586507911887
+307 -0.0118002509969036
+308 0.176862227601212
+309 0.507428903450577
+310 -0.00730757087579498
+311 -0.00846216129742899
+312 -0.0086945045504047
+313 -0.011091656573089
+314 -0.0114036881984761
+315 -0.0114574795677765
+316 -0.0125072909586858
+317 -0.0147923369011883
+318 -0.0139629326786614
+319 -0.0118661842320723
+320 -0.0108640634604502
+321 -0.010582567791708
+322 -0.0114105551744683
+323 -0.0105534816285999
+324 -0.00543143567377151
+325 -0.00207879610778993
+326 -0.00616628496249775
+327 -0.00538988970591758
+328 -0.0031888414219768
+329 -0.00479592155107035
+330 -0.00797063379731725
+331 -0.011431205793035
+332 -0.0133294486936305
+333 -0.0147073192182352
+334 -0.014038242930232
+335 -0.0143451636631283
+336 -0.0140952574704935
+337 -0.0141886904764963
+338 -0.0136754388417917
+339 -0.0130591984480721
+340 -0.00725308466960931
+341 -0.00666308425269444
+342 -0.00687998553665841
+343 -0.00973374474504822
+344 -0.0145448202812331
+345 -0.0144458922456604
+346 -0.0146115187586966
+347 -0.0137964028516015
+348 -0.0124149959973093
+349 -0.0103171021174392
+350 -0.00982139573529766
+351 -0.0112899814813755
+352 -0.0106130941986117
+353 -0.0130952590767051
+354 -0.0147157103352019
+355 -0.0148442531106679
+356 -0.0143141102828524
+357 -0.0117602635999597
+358 -0.013769448570632
+359 -0.0143111324151261
+360 -0.0143034333755129
+361 -0.0145038145090546
+362 -0.0142515435786701
+363 -0.0119387033366702
+364 -0.0110049806968185
+365 -0.0105761121274039
+366 -0.0104785382739133
+367 -0.00944568136776289
+368 -0.0114291935775792
+369 -0.00879625572792011
+370 0.438761037882253
+371 0.179388282669024
+372 -0.00564395369291442
+373 -0.00796462420259203
+374 -0.00642615015965443
+375 -0.00989354521629732
+376 -0.00988574813192154
+377 -0.010723082658232
+378 -0.0127986854912136
+379 -0.0136055571418597
+380 -0.0128927066034855
+381 -0.0107658464618742
+382 -0.00995213975574464
+383 -0.00950294253792146
+384 -0.00955020479384878
+385 -0.00635693744222024
+386 -0.000110105629481581
+387 -0.00115234232053054
+388 -0.00429086433256201
+389 -0.00179503584405276
+390 -0.00481498545647159
+391 -0.00622514956456138
+392 -0.0109222820132791
+393 -0.0108955712556429
+394 -0.0123614076397208
+395 -0.0126411139244774
+396 -0.0124467915001655
+397 -0.0130137305814043
+398 -0.0128228771923896
+399 -0.0133955237199494
+400 -0.0133849955851085
+401 -0.0122588534660976
+402 -0.00605726179970702
+403 -0.00502476043379232
+404 -0.00560189961426453
+405 -0.0075065597345586
+406 -0.0127782782962923
+407 -0.0123644950908042
+408 -0.0124232734011331
+409 -0.0109783824772762
+410 -0.0115303718379531
+411 -0.00784267469552262
+412 -0.00849462201372912
+413 -0.00971386505469192
+414 -0.00917632724668119
+415 -0.0115816105603832
+416 -0.0132376761929919
+417 -0.0135661416672985
+418 -0.0131585974552153
+419 -0.009660405912689
+420 -0.013055251783936
+421 -0.0133821772767449
+422 -0.0130499023401334
+423 -0.0135178049026562
+424 -0.0131069725662085
+425 -0.0108380392131661
+426 -0.00969469507043081
+427 -0.00954426797454458
+428 -0.00662684836615926
+429 -0.00886476227407113
+430 -0.00950496793349554
+431 0.0516441983020747
+432 0.49322914953269
+433 -0.00439284173686481
+434 -0.00627870269436533
+435 -0.00627332941383523
+436 -0.0081288435528136
+437 -0.0083780008033963
+438 -0.00862522210775739
+439 -0.00957558038511007
+440 -0.0117456231732853
+441 -0.0115534470740916
+442 -0.00933816760400665
+443 -0.00879390501434828
+444 -0.00845807802179637
+445 -0.00898392178831317
+446 -0.00828222615510185
+447 -0.00430409141657551
+448 0.00156457708563651
+449 -0.00326984307949075
+450 -0.00317159959830949
+451 -0.000555487307447615
+452 -0.00364382690619819
+453 -0.0048566860611129
+454 -0.00894018408715954
+455 -0.0107486040996964
+456 -0.0116685949740421
+457 -0.0110016491468837
+458 -0.0115059582687225
+459 -0.0113472600167867
+460 -0.0116171812940172
+461 -0.0117282268858408
+462 -0.0117299783690078
+463 -0.010643752908432
+464 -0.00459501012645056
+465 -0.00453644637628407
+466 -0.0046306868795152
+467 -0.00635091362132938
+468 -0.0110723370950498
+469 -0.0112408403912337
+470 -0.0111324401483636
+471 -0.00982286064921767
+472 -0.00975128137366522
+473 -0.00628951348673262
+474 -0.00786220555305698
+475 -0.00721222723625666
+476 -0.0090992927480125
+477 -0.0111183444128793
+478 -0.0113067097038558
+479 -0.011160514456695
+480 -0.0112090771926765
+481 -0.00787638634175043
+482 -0.0112615847473125
+483 -0.011628136525895
+484 -0.011622337861315
+485 -0.0117577801145762
+486 -0.0116192296501852
+487 -0.0116776081404665
+488 -0.0111121010572735
+489 -0.0114339606683442
+490 -0.00850048144220754
+491 -0.00902076717194715
+492 -0.00658807969775991
+493 0.308280122150922
+494 0.179904382021428
+495 -0.00620246818692402
+496 -0.00732155340431931
+497 -0.00633028997310617
+498 -0.00733583870036483
+499 -0.00727032081926197
+500 -0.008010509906149
+501 -0.0104317034705988
+502 -0.0108056052586449
+503 -0.0101990692728759
+504 -0.00818461307326559
+505 -0.00749890086004878
+506 -0.00705010773652864
+507 -0.00756096305230179
+508 -0.00672526873673494
+509 0.00243080947177157
+510 0.00196312027219733
+511 -0.00235862710511876
+512 0.000701377712459682
+513 -0.00162314281016339
+514 -0.00353069628359856
+515 -0.00535592160011964
+516 -0.009629255720372
+517 -0.00984838119518035
+518 -0.0101309734254507
+519 -0.00965058701149376
+520 -0.00979426033632281
+521 -0.00938720368934997
+522 -0.00970041415352301
+523 -0.00945810455304286
+524 -0.00835333695491461
+525 -0.00280808168888623
+526 -0.0018804910475821
+527 -0.00249542031082639
+528 -0.00423360594570751
+529 -0.00881996119495001
+530 -0.00884482660493057
+531 -0.00893861689042032
+532 -0.00886923400254016
+533 -0.00998854214305494
+534 -0.00781482686410285
+535 -0.0048629430667884
+536 -0.00625148660128163
+537 -0.00591714866358709
+538 -0.00819957670878541
+539 -0.0104317069032842
+540 -0.0106270020619331
+541 -0.0104145097418402
+542 -0.00717985135988735
+543 -0.0101615859824435
+544 -0.0104518334037382
+545 -0.0100972729943529
+546 -0.0104524105955466
+547 -0.0103545229187737
+548 -0.0101624037567498
+549 -0.0100186657519469
+550 -0.0099303685542785
+551 -0.00989811608443676
+552 -0.00956029844279647
+553 -0.00987970559123677
+554 -0.00776430984790597
+555 0.433831953345655
+556 -0.00507447586044935
+557 -0.00562849792786146
+558 -0.00769600508140686
+559 -0.00901860581255264
+560 -0.00910092607595847
+561 -0.00887368633065391
+562 -0.00919143351659684
+563 -0.00919246832815283
+564 -0.008693156564635
+565 -0.00662529921447376
+566 -0.00607353164847735
+567 -0.00581991561933677
+568 -0.00632678279589719
+569 -0.00589706554542697
+570 -0.00209808022849792
+571 0.00411078303934323
+572 -0.000550094449704642
+573 -0.000635669377549439
+574 0.00207348794440178
+575 -0.000652521824982924
+576 -0.00515463244200143
+577 -0.00805160292500236
+578 -0.00758462894007334
+579 -0.00865860296291249
+580 -0.00829675359569146
+581 -0.0086341327011501
+582 -0.0083284907763213
+583 -0.00874191010292116
+584 -0.00870026046977296
+585 -0.00874342968783533
+586 -0.00782090704127864
+587 -0.00226753389792357
+588 -0.00233729750931911
+589 -0.00253165604475073
+590 -0.00420974711192665
+591 -0.00876258732479398
+592 -0.00860694373819948
+593 -0.00860741436892977
+594 -0.0083641380851702
+595 -0.00895178779353354
+596 -0.00556499426763376
+597 -0.00484682362918658
+598 -0.00431757566397834
+599 -0.00499416642389915
+600 -0.0069669589511167
+601 -0.00890645540721195
+602 -0.00886958918530451
+603 -0.00887658861258958
+604 -0.00581930809163898
+605 -0.00874979775103718
+606 -0.00880186470377256
+607 -0.0082818394785986
+608 -0.00853275083442652
+609 -0.00830191068093658
+610 -0.00821443778904117
+611 -0.00784238482387328
+612 -0.0079414174200303
+613 -0.00783383912859581
+614 -0.00787555505012593
+615 -0.00665499786835605
+616 0.176487627240953
+617 0.182522618275643
+618 -0.00369616845832028
+619 -0.00629001903058491
+620 -0.0075473564025736
+621 -0.00792057625851698
+622 -0.00782303511234032
+623 -0.00755843668657251
+624 -0.00792883379421707
+625 -0.00821060913555977
+626 -0.00741039814688092
+627 -0.00537210505585104
+628 -0.00495675282893683
+629 -0.00433218280972181
+630 -0.00535942261482297
+631 -0.00418008644241062
+632 0.00339696969399508
+633 0.00414508932380595
+634 -0.000193158774272635
+635 0.00259164894888744
+636 0.000223760303507433
+637 -0.00430196126108769
+638 -0.00456371747951704
+639 -0.00736903921601653
+640 -0.00712023652975677
+641 -0.0075278214202441
+642 -0.00720130207341965
+643 -0.00737872965783862
+644 -0.00699531188368127
+645 -0.00746073468584514
+646 -0.00732625819637498
+647 -0.00635877618822083
+648 -0.000793999038955055
+649 -8.0164531740219e-05
+650 -0.000446668232184141
+651 -0.00235908247044392
+652 -0.00713214115663551
+653 -0.00713237034121296
+654 -0.00694174474662415
+655 -0.00660829668781119
+656 -0.00716164439750203
+657 -0.00538381268641803
+658 -0.00345728430157964
+659 -0.0033493822325227
+660 -0.00308002139612534
+661 -0.00485508307526379
+662 -0.00689806029174172
+663 -0.00725543105565978
+664 -0.00698203515046677
+665 -0.0036867796009008
+666 -0.00651046025528584
+667 -0.0064253977689179
+668 -0.00603538702792052
+669 -0.00663542008142919
+670 -0.00686564183730989
+671 -0.007061940627829
+672 -0.00723724969313594
+673 -0.00690352936553413
+674 -0.00708800826417091
+675 -0.0068488351807369
+676 -0.00697588236069582
+677 -0.00489382754866038
+678 0.293679681878456
+679 -0.00217575247097526
+680 -0.00251980831108943
+681 -0.00469346437639234
+682 -0.00602274026620383
+683 -0.00613736008179977
+684 -0.00587828046880654
+685 -0.00631371498944638
+686 -0.00631120094430527
+687 -0.00664034373839927
+688 -0.0065666129986998
+689 -0.0067007590666881
+690 -0.00636748542215835
+691 -0.00656138473046679
+692 -0.00601000081275883
+693 -0.0026357408923799
+694 -0.000456498707602518
+695 -0.0016897260544663
+696 -0.00129952239659223
+697 0.00153196218519829
+698 0.000970496676276022
+699 -0.00251269063690647
+700 -0.00524088068527027
+701 -0.00518392957419252
+702 -0.00545009901887635
+703 -0.00523471171454499
+704 -0.00546688754012952
+705 -0.00514683356691874
+706 -0.00558347319397717
+707 -0.00550031695581813
+708 -0.00556266938963792
+709 -0.00450101319069993
+710 0.000877138356826208
+711 0.00114849594155746
+712 0.00116701578333245
+713 -0.000552903676364493
+714 -0.0051532107788052
+715 -0.00508271809802478
+716 -0.00497444873496618
+717 -0.00492017832252063
+718 -0.00541639497149525
+719 -0.00390291948630837
+720 -0.00239018748643075
+721 -0.00232508546653691
+722 -0.00238990898592966
+723 -0.00406012905361738
+724 -0.00582934957876193
+725 -0.00577054545061284
+726 -0.00588044486012239
+727 -0.00321173514726905
+728 -0.00576676030640332
+729 -0.00581363201901516
+730 -0.0056403530033928
+731 -0.00588225715878274
+732 -0.00580726160331349
+733 -0.00584418671281739
+734 -0.00551263103237493
+735 -0.00574673916997464
+736 -0.00550923727010732
+737 -0.00564351841421052
+738 -0.00461818807132501
+739 0.114369039955867
+740 0.113874088642992
+741 -0.00428093342498865
+742 -0.00466682336739501
+743 -0.00457646329947025
+744 -0.00489743453576601
+745 -0.00478667563624186
+746 -0.00478604895368296
+747 -0.00490784598204448
+748 -0.00514403999502352
+749 -0.00513630650904552
+750 -0.00518918499122095
+751 -0.00520548675089309
+752 -0.00507998628564919
+753 -0.00523911370578295
+754 -0.00411076499229555
+755 -0.000110526273692137
+756 -6.97046088930254e-05
+757 -0.000654613465091875
+758 0.00250880368745154
+759 0.00224241061455796
+760 -0.00127852637176592
+761 -0.00157811331971793
+762 -0.00436060574090802
+763 -0.00420211405494215
+764 -0.00448393259372739
+765 -0.00432404767220953
+766 -0.00453637743990225
+767 -0.0044808869432662
+768 -0.00464814288481283
+769 -0.00453419455157583
+770 -0.00369714822055501
+771 0.00151504237188244
+772 0.00179518632309489
+773 0.001877255156902
+774 -5.89581979368288e-06
+775 -0.00470919317381923
+776 -0.00458472486731563
+777 -0.00444898240381536
+778 -0.00416698542857512
+779 -0.00466136770411855
+780 -0.00300892846748779
+781 -0.00124674831643176
+782 -0.00133718137527554
+783 -0.00138860486323427
+784 -0.00288124092405525
+785 -0.00481691924321098
+786 -0.00486161642251353
+787 -0.00471484323647818
+788 -0.00221399725838215
+789 -0.00461120524247493
+790 -0.00490984409593776
+791 -0.00458164873735298
+792 -0.00500568265157337
+793 -0.00490456309124687
+794 -0.00492264602032272
+795 -0.00479512401393326
+796 -0.00461122828156398
+797 -0.00469058713813641
+798 -0.00454741240404029
+799 -0.00452098615172967
+800 -0.00315464001423668
+801 0.176647243851048
+802 -0.00310821457329599
+803 -0.00336871130300844
+804 -0.00334712545163953
+805 -0.00333048116128302
+806 -0.00340010988805163
+807 -0.00329002162318321
+808 -0.00389183721144577
+809 -0.003901676075626
+810 -0.00414870722240944
+811 -0.0042711605574371
+812 -0.00421188870174774
+813 -0.00414929847217633
+814 -0.00411313613833283
+815 -0.00371760367608498
+816 -0.000349935639289262
+817 0.00180273856524285
+818 0.000409396862338841
+819 0.000734497343308131
+820 0.00357982919909658
+821 0.00303969865706741
+822 -0.000471276008475531
+823 -0.00316577242759788
+824 -0.00325311026089004
+825 -0.00334640971609744
+826 -0.00347090142695205
+827 -0.00347282859499611
+828 -0.00359181895609804
+829 -0.00354380245119079
+830 -0.0035817065706009
+831 -0.00354789086207514
+832 -0.0033749175776577
+833 -0.000494214343391087
+834 -0.000251455009457498
+835 -1.57658927165261e-05
+836 -0.000109367762943036
+837 -0.00314845093040657
+838 -0.00309137992026045
+839 -0.00318781326315422
+840 -0.00286403779926594
+841 -0.00342399488914169
+842 -0.00153873408849432
+843 0.000122565876620567
+844 -1.39442056199256e-05
+845 -8.34506223344456e-06
+846 -0.00166426373161533
+847 -0.0033554053632988
+848 -0.00333776480910794
+849 -0.00310606886442986
+850 -0.00260312208985637
+851 -0.00283750216949298
+852 -0.00285757048464359
+853 -0.00279461193366553
+854 -0.00292497054991065
+855 -0.00301956311195488
+856 -0.00315103554002891
+857 -0.00317407494144514
+858 -0.00344006955591978
+859 -0.00328324564157648
+860 -0.00336672245209469
+861 -0.00320070783993313
+862 0.0571143000302908
+863 0.0581421535264736
+864 -0.0023646349129562
+865 -0.00248000937790515
+866 -0.00253895254011341
+867 -0.00263523871798653
+868 -0.00263848242276221
+869 -0.00242543818411627
+870 -0.00273912401905961
+871 -0.00279476040899776
+872 -0.00276176065666512
+873 -0.00287486997075063
+874 -0.00286611281167776
+875 -0.00273356872691796
+876 -0.00288780319152133
+877 -0.002745393856585
+878 -0.00110006883426424
+879 -0.00137915534327329
+880 -0.00167310911091998
+881 -0.00155747103077571
+882 -0.00146093482278994
+883 -0.00154136929877317
+884 -0.00153121465319545
+885 -0.00155953620814648
+886 -0.00144267681269488
+887 -0.00161412167459229
+888 -0.00163145566649099
+889 -0.00167029505161209
+890 -0.0016373144133233
+891 -0.00175124070416498
+892 -0.00167165052115149
+893 -0.00171108984754183
+894 0.00117838884322948
+895 0.00144758999216869
+896 0.00151805445737221
+897 0.00143935117483618
+898 -0.00186099280431895
+899 -0.00179654067064747
+900 -0.00179116042661383
+901 -0.00142755861186833
+902 -0.00186611279612203
+903 -0.000162622805446086
+904 0.00152056201372212
+905 0.0013706788122524
+906 0.00143726069429263
+907 -0.000252329857205533
+908 -0.00193352667375601
+909 -0.00209884306201327
+910 -0.00202064054439592
+911 -0.00173618259943807
+912 -0.00205445430329035
+913 -0.00214780602120254
+914 -0.00196595166631794
+915 -0.00219157283133128
+916 -0.00212894079242623
+917 -0.00207889032650752
+918 -0.00219841623335388
+919 -0.00205620493282394
+920 -0.00208349802201294
+921 -0.001893539445651
+922 -0.00194526313087232
+923 -0.00168643075330111
+924 0.0586998178531413
+925 -0.000911884922536993
+926 -0.00117572577102972
+927 -0.00129923545036716
+928 -0.00118465790078785
+929 -0.00132314491365947
+930 -0.00127160006680386
+931 -0.00138439529549555
+932 -0.00129787510221711
+933 -0.00144993779770551
+934 -0.001425792453437
+935 -0.0014496057960256
+936 -0.00119586479826629
+937 -0.000922564261699133
+938 -0.000922740892289067
+939 -0.000848528386538916
+940 0.00175174402948496
+941 0.000128892409261148
+942 -0.000419829894278227
+943 -0.000466898563936845
+944 -0.00047122376341752
+945 -0.000471416288654379
+946 -0.000513935965825421
+947 -0.000572116986488244
+948 -0.000449041074008682
+949 -0.000574563662818422
+950 -0.000610788790280961
+951 -0.000662270176313313
+952 -0.000642471283187866
+953 -0.000686357192098764
+954 -0.000680811112666425
+955 -0.000667897583364248
+956 0.00217250089025851
+957 0.00241500705227074
+958 0.00258713826301258
+959 0.0024109350186895
+960 -0.000776314155991479
+961 -0.00084983870235422
+962 -0.000772678557610008
+963 -0.000413064616358682
+964 -0.000839502130396645
+965 -0.000791381040363275
+966 -0.00077040262869677
+967 -0.000754568976269093
+968 -0.000450602414219829
+969 -0.000688212102427542
+970 -0.0007167932903372
+971 -0.000785852386158499
+972 -0.000722306234880277
+973 -0.000324661092143018
+974 -0.000653202791545457
+975 -0.000633458113878451
+976 -0.000607853671870952
+977 -0.000679470747639321
+978 -0.000681703637956587
+979 -0.000664738980547628
+980 -0.000722422330407423
+981 -0.000669373102929127
+982 -0.000718387488703849
+983 -0.000712032436105745
+984 -0.000590219813904669
+985 -0.000416669360601081
+986 0.000288888405178535
+987 0.000270024550156701
+988 0.000249840739788964
+989 0.000235694503184828
+990 0.000215798850441515
+991 0.00019492814388371
+992 0.000175357251222976
+993 0.000153462442160884
+994 0.000132677328666247
+995 0.000111945810591477
+996 9.04814593951449e-05
+997 7.02106833140884e-05
+998 5.0145189268859e-05
+999 3.05214189890438e-05
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat
new file mode 100644
index 0000000..7df4c82
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.00156402587890625 0.0 0.0 0.0 1
+2 0.00149393081665039 0.0 0.0 0.0 2
+3 0.00144386291503906 0.0 0.0 0.0 3
+4 0.0014338493347168 0.00999999999999979 0.00999999999999979 0.0 4
+5 0.00144386291503906 0.0 0.0 0.0 5
+6 0.00141716003417969 0.0 0.0 0.0 6
+7 0.00143003463745117 0.0 0.0 0.0 7
+8 0.0014190673828125 0.0 0.0 0.0 8
+9 0.00141215324401855 0.0 0.0 0.0 9
+10 0.00143003463745117 0.0 0.0 0.0 10
+11 0.00141310691833496 0.0100000000000007 0.0100000000000002 0.0 11
+12 0.0014190673828125 0.0 0.0 0.0 12
+13 0.00155305862426758 0.0 0.0 0.0 13
+14 0.00142192840576172 0.0 0.0 0.0 14
+15 0.00141000747680664 0.0 0.0 0.0 15
+16 0.00142812728881836 0.0 0.0 0.0 16
+17 0.00143098831176758 0.0 0.0 0.0 17
+18 0.00151705741882324 0.00999999999999979 0.00999999999999979 0.0 18
+19 0.00141406059265137 0.0 0.0 0.0 19
+20 0.0014197826385498 0.0 0.0 0.0 20
+21 0.00142383575439453 0.0 0.0 0.0 21
+22 0.00141191482543945 0.0 0.0 0.0 22
+23 0.00156402587890625 0.0 0.0 0.0 23
+24 0.00142812728881836 0.00999999999999979 0.00999999999999979 0.0 24
+25 0.00139307975769043 0.0 0.0 0.0 25
+26 0.00141000747680664 0.0 0.0 0.0 26
+27 0.00255894660949707 0.0 0.0 0.0 27
+28 0.00261497497558594 0.0 0.0 0.0 28
+29 0.00254607200622559 0.00999999999999979 0.00999999999999979 0.0 29
+30 0.00245094299316406 0.0 0.0 0.0 30
+31 0.00142312049865723 0.0 0.0 0.0 31
+32 0.00141000747680664 0.0 0.0 0.0 32
+33 0.00139904022216797 0.0 0.0 0.0 33
+34 0.00141096115112305 0.0 0.0 0.0 34
+35 0.00139689445495605 0.0100000000000007 0.0100000000000007 0.0 35
+36 0.00140500068664551 0.0 0.0 0.0 36
+37 0.00140786170959473 0.0 0.0 0.0 37
+38 0.00144600868225098 0.0 0.0 0.0 38
+39 0.00139689445495605 0.0 0.0 0.0 39
+40 0.00140810012817383 0.0 0.0 0.0 40
+41 0.00141406059265137 0.0 0.0 0.0 41
+42 0.00140595436096191 0.00999999999999979 0.00999999999999979 0.0 42
+43 0.00140094757080078 0.0 0.0 0.0 43
+44 0.00138092041015625 0.0 0.0 0.0 44
+45 0.00151491165161133 0.0 0.0 0.0 45
+46 0.00203394889831543 0.0 0.0 0.0 46
+47 0.00142693519592285 0.0 0.0 0.0 47
+48 0.00138998031616211 0.00999999999999979 0.00999999999999979 0.0 48
+49 0.00144696235656738 0.0 0.0 0.0 49
+50 0.00140500068664551 0.0 0.0 0.0 50
+51 0.00138998031616211 0.0 0.0 0.0 51
+52 0.00141000747680664 0.0 0.0 0.0 52
+53 0.00139188766479492 0.0 0.0 0.0 53
+54 0.00142598152160645 0.0 0.0 0.0 54
+55 0.00141406059265137 0.00999999999999979 0.00999999999999979 0.0 55
+56 0.00139594078063965 0.0 0.0 0.0 56
+57 0.00139284133911133 0.0 0.0 0.0 57
+58 0.00141692161560059 0.0 0.0 0.0 58
+59 0.00140810012817383 0.0 0.0 0.0 59
+60 0.00141215324401855 0.0 0.0 0.0 60
+61 0.00145602226257324 0.0 0.0 0.0 61
+62 0.0231201648712158 0.0300000000000002 0.0300000000000002 0.0 62
+63 0.0014808177947998 0.0 0.0 0.0 63
+64 0.00142788887023926 0.0 0.0 0.0 64
+65 0.00147199630737305 0.0 0.0 0.0 65
+66 0.00143098831176758 0.0 0.0 0.0 66
+67 0.00142908096313477 0.0 0.0 0.0 67
+68 0.00142097473144531 0.00999999999999979 0.00999999999999979 0.0 68
+69 0.00142598152160645 0.0 0.0 0.0 69
+70 0.00142812728881836 0.0 0.0 0.0 70
+71 0.00140595436096191 0.0 0.0 0.0 71
+72 0.00142288208007812 0.0 0.0 0.0 72
+73 0.00140810012817383 0.0 0.0 0.0 73
+74 0.00141692161560059 0.0 0.0 0.0 74
+75 0.00140786170959473 0.0100000000000007 0.0100000000000007 0.0 75
+76 0.00142312049865723 0.0 0.0 0.0 76
+77 0.00140213966369629 0.0 0.0 0.0 77
+78 0.00140500068664551 0.0 0.0 0.0 78
+79 0.00141096115112305 0.0 0.0 0.0 79
+80 0.00141406059265137 0.0 0.0 0.0 80
+81 0.00141310691833496 0.0 0.0 0.0 81
+82 0.00140905380249023 0.00999999999999979 0.00999999999999979 0.0 82
+83 0.00140190124511719 0.0 0.0 0.0 83
+84 0.00140881538391113 0.0 0.0 0.0 84
+85 0.00141191482543945 0.0 0.0 0.0 85
+86 0.00141406059265137 0.0 0.0 0.0 86
+87 0.00142097473144531 0.0 0.0 0.0 87
+88 0.0013890266418457 0.0 0.0 0.0 88
+89 0.00141406059265137 0.00999999999999979 0.00999999999999979 0.0 89
+90 0.00139498710632324 0.0 0.0 0.0 90
+91 0.00141286849975586 0.0 0.0 0.0 91
+92 0.00141096115112305 0.0 0.0 0.0 92
+93 0.00140190124511719 0.0 0.0 0.0 93
+94 0.00141501426696777 0.0 0.0 0.0 94
+95 0.0013880729675293 0.0 0.0 0.0 95
+96 0.00140595436096191 0.00999999999999979 0.00999999999999979 0.0 96
+97 0.00140213966369629 0.0 0.0 0.0 97
+98 0.0014040470123291 0.0 0.0 0.0 98
+99 0.00140500068664551 0.0 0.0 0.0 99
+100 0.00141501426696777 0.0 0.0 0.0 100
+101 0.00141119956970215 0.0 0.0 0.0 101
+102 0.00139808654785156 0.0 0.0 0.0 102
+103 0.00141000747680664 0.0 0.0 0.0 103
+104 0.00137805938720703 0.0 0.0 0.0 104
+105 0.00139307975769043 0.0 0.0 0.0 105
+106 0.00139594078063965 0.0 0.0 0.0 106
+107 0.00138688087463379 0.0 0.0 0.0 107
+108 0.00140810012817383 0.0 0.0 0.0 108
+109 0.00140094757080078 0.00999999999999979 0.00999999999999979 0.0 109
+110 0.00139999389648438 0.0 0.0 0.0 110
+111 0.00139808654785156 0.0 0.0 0.0 111
+112 0.00141096115112305 0.0 0.0 0.0 112
+113 0.00139212608337402 0.0 0.0 0.0 113
+114 0.00142288208007812 0.0 0.0 0.0 114
+115 0.00139188766479492 0.0 0.0 0.0 115
+116 0.00140810012817383 0.00999999999999979 0.00999999999999979 0.0 116
+117 0.00147700309753418 0.0 0.0 0.0 117
+118 0.00140810012817383 0.0 0.0 0.0 118
+119 0.0014030933380127 0.0 0.0 0.0 119
+120 0.00142097473144531 0.0 0.0 0.0 120
+121 0.00140213966369629 0.0 0.0 0.0 121
+122 0.00139689445495605 0.0 0.0 0.0 122
+123 0.0233688354492188 0.0300000000000002 0.0300000000000002 0.0 123
+124 0.0014951229095459 0.0 0.0 0.0 124
+125 0.00143909454345703 0.0 0.0 0.0 125
+126 0.00145697593688965 0.0 0.0 0.0 126
+127 0.00147509574890137 0.0 0.0 0.0 127
+128 0.00142598152160645 0.0 0.0 0.0 128
+129 0.00143003463745117 0.00999999999999979 0.00999999999999979 0.0 129
+130 0.00141477584838867 0.0 0.0 0.0 130
+131 0.00142502784729004 0.0 0.0 0.0 131
+132 0.00140786170959473 0.0 0.0 0.0 132
+133 0.00141310691833496 0.0 0.0 0.0 133
+134 0.00141000747680664 0.0 0.0 0.0 134
+135 0.00141501426696777 0.00999999999999979 0.00999999999999979 0.0 135
+136 0.00141501426696777 0.0 0.0 0.0 136
+137 0.0014190673828125 0.0 0.0 0.0 137
+138 0.00140500068664551 0.0 0.0 0.0 138
+139 0.00140595436096191 0.0 0.0 0.0 139
+140 0.00143909454345703 0.0 0.0 0.0 140
+141 0.00140094757080078 0.0 0.0 0.0 141
+142 0.00142407417297363 0.0100000000000007 0.0100000000000007 0.0 142
+143 0.00141406059265137 0.0 0.0 0.0 143
+144 0.00142002105712891 0.0 0.0 0.0 144
+145 0.00140094757080078 0.0 0.0 0.0 145
+146 0.00140690803527832 0.0 0.0 0.0 146
+147 0.0014188289642334 0.0 0.0 0.0 147
+148 0.00142002105712891 0.0 0.0 0.0 148
+149 0.00139808654785156 0.00999999999999979 0.00999999999999979 0.0 149
+150 0.00139594078063965 0.0 0.0 0.0 150
+151 0.00140285491943359 0.0 0.0 0.0 151
+152 0.0013880729675293 0.0 0.0 0.0 152
+153 0.00139498710632324 0.0 0.0 0.0 153
+154 0.0014040470123291 0.0 0.0 0.0 154
+155 0.0014040470123291 0.0 0.0 0.0 155
+156 0.00140094757080078 0.00999999999999979 0.00999999999999979 0.0 156
+157 0.0014030933380127 0.0 0.0 0.0 157
+158 0.00138711929321289 0.0 0.0 0.0 158
+159 0.00139999389648438 0.0 0.0 0.0 159
+160 0.00140595436096191 0.0 0.0 0.0 160
+161 0.00139689445495605 0.0 0.0 0.0 161
+162 0.00141000747680664 0.0 0.0 0.0 162
+163 0.00140094757080078 0.00999999999999979 0.00999999999999979 0.0 163
+164 0.00140905380249023 0.0 0.0 0.0 164
+165 0.00251889228820801 0.0 0.0 0.0 165
+166 0.00264787673950195 0.0 0.0 0.0 166
+167 0.00169110298156738 0.0 0.0 0.0 167
+168 0.00159692764282227 0.00999999999999979 0.00999999999999979 0.0 168
+169 0.00142788887023926 0.0 0.0 0.0 169
+170 0.00155997276306152 0.0 0.0 0.0 170
+171 0.00141811370849609 0.0 0.0 0.0 171
+172 0.00139784812927246 0.0 0.0 0.0 172
+173 0.00142884254455566 0.0 0.0 0.0 173
+174 0.00139999389648438 0.0 0.0 0.0 174
+175 0.00139784812927246 0.0100000000000007 0.0100000000000007 0.0 175
+176 0.00139999389648438 0.0 0.0 0.0 176
+177 0.00145101547241211 0.0 0.0 0.0 177
+178 0.00141716003417969 0.0 0.0 0.0 178
+179 0.00143289566040039 0.0 0.0 0.0 179
+180 0.00141310691833496 0.0 0.0 0.0 180
+181 0.00141406059265137 0.0 0.0 0.0 181
+182 0.00141406059265137 0.0 0.0 0.0 182
+183 0.00141310691833496 0.0 0.0 0.0 183
+184 0.00140595436096191 0.0 0.0 0.0 184
+185 0.0231029987335205 0.0199999999999996 0.0199999999999996 0.0 185
+186 0.00171899795532227 0.0 0.0 0.0 186
+187 0.00143694877624512 0.0100000000000007 0.0100000000000007 0.0 187
+188 0.00144410133361816 0.0 0.0 0.0 188
+189 0.00142693519592285 0.0 0.0 0.0 189
+190 0.00143599510192871 0.0 0.0 0.0 190
+191 0.00142097473144531 0.0 0.0 0.0 191
+192 0.00142979621887207 0.0 0.0 0.0 192
+193 0.00142502784729004 0.0 0.0 0.0 193
+194 0.00142002105712891 0.00999999999999979 0.00999999999999979 0.0 194
+195 0.00142908096313477 0.0 0.0 0.0 195
+196 0.00141191482543945 0.0 0.0 0.0 196
+197 0.00141382217407227 0.0 0.0 0.0 197
+198 0.00141191482543945 0.0 0.0 0.0 198
+199 0.00143718719482422 0.0 0.0 0.0 199
+200 0.00141096115112305 0.0 0.0 0.0 200
+201 0.00142407417297363 0.00999999999999979 0.00999999999999979 0.0 201
+202 0.00146198272705078 0.0 0.0 0.0 202
+203 0.00143194198608398 0.0 0.0 0.0 203
+204 0.00138998031616211 0.0 0.0 0.0 204
+205 0.00140595436096191 0.0 0.0 0.0 205
+206 0.00142097473144531 0.0 0.0 0.0 206
+207 0.00141787528991699 0.00999999999999979 0.00999999999999979 0.0 207
+208 0.00145101547241211 0.0 0.0 0.0 208
+209 0.00143909454345703 0.0 0.0 0.0 209
+210 0.00141215324401855 0.0 0.0 0.0 210
+211 0.00140094757080078 0.0 0.0 0.0 211
+212 0.0014030933380127 0.0 0.0 0.0 212
+213 0.00140595436096191 0.0 0.0 0.0 213
+214 0.00143194198608398 0.0100000000000007 0.0100000000000007 0.0 214
+215 0.00139999389648438 0.0 0.0 0.0 215
+216 0.00140786170959473 0.0 0.0 0.0 216
+217 0.00141501426696777 0.0 0.0 0.0 217
+218 0.00139904022216797 0.0 0.0 0.0 218
+219 0.00141310691833496 0.0 0.0 0.0 219
+220 0.00140786170959473 0.0 0.0 0.0 220
+221 0.00146889686584473 0.00999999999999979 0.00999999999999979 0.0 221
+222 0.00139880180358887 0.0 0.0 0.0 222
+223 0.00141501426696777 0.0 0.0 0.0 223
+224 0.00139808654785156 0.0 0.0 0.0 224
+225 0.00140690803527832 0.0 0.0 0.0 225
+226 0.00140500068664551 0.0 0.0 0.0 226
+227 0.00139713287353516 0.0 0.0 0.0 227
+228 0.00139498710632324 0.00999999999999979 0.00999999999999979 0.0 228
+229 0.00141000747680664 0.0 0.0 0.0 229
+230 0.00139284133911133 0.0 0.0 0.0 230
+231 0.00140690803527832 0.0 0.0 0.0 231
+232 0.0014040470123291 0.0 0.0 0.0 232
+233 0.00137710571289062 0.0 0.0 0.0 233
+234 0.00140595436096191 0.0 0.0 0.0 234
+235 0.00137901306152344 0.0 0.0 0.0 235
+236 0.00143909454345703 0.00999999999999979 0.00999999999999979 0.0 236
+237 0.00138688087463379 0.0 0.0 0.0 237
+238 0.00141811370849609 0.0 0.0 0.0 238
+239 0.00141406059265137 0.0 0.0 0.0 239
+240 0.00139284133911133 0.0 0.0 0.0 240
+241 0.0014188289642334 0.0 0.0 0.0 241
+242 0.0013878345489502 0.0 0.0 0.0 242
+243 0.00142407417297363 0.0100000000000007 0.0100000000000007 0.0 243
+244 0.00141000747680664 0.0 0.0 0.0 244
+245 0.00146222114562988 0.0 0.0 0.0 245
+246 0.0225439071655273 0.0199999999999996 0.0199999999999996 0.0 246
+247 0.00150012969970703 0.0 0.0 0.0 247
+248 0.00144600868225098 0.0 0.0 0.0 248
+249 0.00144791603088379 0.0 0.0 0.0 249
+250 0.00143003463745117 0.0 0.0 0.0 250
+251 0.00143313407897949 0.0 0.0 0.0 251
+252 0.00141406059265137 0.0 0.0 0.0 252
+253 0.00143194198608398 0.0 0.0 0.0 253
+254 0.00141596794128418 0.0 0.0 0.0 254
+255 0.00141811370849609 0.0 0.0 0.0 255
+256 0.00142002105712891 0.0100000000000007 0.0100000000000007 0.0 256
+257 0.0014190673828125 0.0 0.0 0.0 257
+258 0.00141000747680664 0.0 0.0 0.0 258
+259 0.00142097473144531 0.0 0.0 0.0 259
+260 0.00142192840576172 0.0 0.0 0.0 260
+261 0.00141096115112305 0.0 0.0 0.0 261
+262 0.00141215324401855 0.0 0.0 0.0 262
+263 0.00141501426696777 0.00999999999999979 0.00999999999999979 0.0 263
+264 0.00141096115112305 0.0 0.0 0.0 264
+265 0.00140213966369629 0.0 0.0 0.0 265
+266 0.00142192840576172 0.0 0.0 0.0 266
+267 0.0014030933380127 0.0 0.0 0.0 267
+268 0.00141596794128418 0.0 0.0 0.0 268
+269 0.00141000747680664 0.0 0.0 0.0 269
+270 0.00141406059265137 0.00999999999999979 0.00999999999999979 0.0 270
+271 0.00140810012817383 0.0 0.0 0.0 271
+272 0.00141215324401855 0.0 0.0 0.0 272
+273 0.00139999389648438 0.0 0.0 0.0 273
+274 0.00139093399047852 0.0 0.0 0.0 274
+275 0.00149083137512207 0.0 0.0 0.0 275
+276 0.00139594078063965 0.0 0.0 0.0 276
+277 0.00141191482543945 0.00999999999999979 0.00999999999999979 0.0 277
+278 0.0013887882232666 0.0 0.0 0.0 278
+279 0.00141382217407227 0.0 0.0 0.0 279
+280 0.0014030933380127 0.0 0.0 0.0 280
+281 0.00141787528991699 0.0 0.0 0.0 281
+282 0.0014030933380127 0.0 0.0 0.0 282
+283 0.00140714645385742 0.0100000000000007 0.0100000000000007 0.0 283
+284 0.00139999389648438 0.0 0.0 0.0 284
+285 0.00139904022216797 0.0 0.0 0.0 285
+286 0.00141000747680664 0.0 0.0 0.0 286
+287 0.00139498710632324 0.0 0.0 0.0 287
+288 0.00140500068664551 0.0 0.0 0.0 288
+289 0.00140810012817383 0.0 0.0 0.0 289
+290 0.00141096115112305 0.00999999999999979 0.00999999999999979 0.0 290
+291 0.0014030933380127 0.0 0.0 0.0 291
+292 0.00141692161560059 0.0 0.0 0.0 292
+293 0.00140786170959473 0.0 0.0 0.0 293
+294 0.00140810012817383 0.0 0.0 0.0 294
+295 0.00141000747680664 0.0 0.0 0.0 295
+296 0.00139212608337402 0.0 0.0 0.0 296
+297 0.00141406059265137 0.0 0.0 0.0 297
+298 0.0013890266418457 0.00999999999999979 0.00999999999999979 0.0 298
+299 0.00141096115112305 0.0 0.0 0.0 299
+300 0.00139379501342773 0.0 0.0 0.0 300
+301 0.00141501426696777 0.0 0.0 0.0 301
+302 0.00139498710632324 0.0 0.0 0.0 302
+303 0.00139594078063965 0.0 0.0 0.0 303
+304 0.00140690803527832 0.0 0.0 0.0 304
+305 0.00188708305358887 0.00999999999999979 0.00999999999999979 0.0 305
+306 0.00266003608703613 0.0 0.0 0.0 306
+307 0.00257205963134766 0.0 0.0 0.0 307
+308 0.0239479541778564 0.0300000000000002 0.0300000000000002 0.0 308
+309 0.0016789436340332 0.0 0.0 0.0 309
+310 0.00142788887023926 0.0 0.0 0.0 310
+311 0.00144720077514648 0.0 0.0 0.0 311
+312 0.00142407417297363 0.0 0.0 0.0 312
+313 0.00144100189208984 0.0 0.0 0.0 313
+314 0.00140810012817383 0.0 0.0 0.0 314
+315 0.00142502784729004 0.00999999999999979 0.00999999999999979 0.0 315
+316 0.00141501426696777 0.0 0.0 0.0 316
+317 0.00142884254455566 0.0 0.0 0.0 317
+318 0.00140810012817383 0.0 0.0 0.0 318
+319 0.00141692161560059 0.0 0.0 0.0 319
+320 0.00141096115112305 0.0 0.0 0.0 320
+321 0.00143098831176758 0.0 0.0 0.0 321
+322 0.00141501426696777 0.00999999999999979 0.00999999999999979 0.0 322
+323 0.00141501426696777 0.0 0.0 0.0 323
+324 0.00140595436096191 0.0 0.0 0.0 324
+325 0.00141692161560059 0.0 0.0 0.0 325
+326 0.00150609016418457 0.0 0.0 0.0 326
+327 0.00142478942871094 0.0 0.0 0.0 327
+328 0.00141191482543945 0.0 0.0 0.0 328
+329 0.00140190124511719 0.0100000000000007 0.0100000000000007 0.0 329
+330 0.00142121315002441 0.0 0.0 0.0 330
+331 0.00140500068664551 0.0 0.0 0.0 331
+332 0.00142288208007812 0.0 0.0 0.0 332
+333 0.00139188766479492 0.0 0.0 0.0 333
+334 0.00141811370849609 0.0 0.0 0.0 334
+335 0.00139999389648438 0.0 0.0 0.0 335
+336 0.00138592720031738 0.00999999999999979 0.00999999999999979 0.0 336
+337 0.00139522552490234 0.0 0.0 0.0 337
+338 0.00139093399047852 0.0 0.0 0.0 338
+339 0.00140500068664551 0.0 0.0 0.0 339
+340 0.00138497352600098 0.0 0.0 0.0 340
+341 0.00139999389648438 0.0 0.0 0.0 341
+342 0.00139594078063965 0.0 0.0 0.0 342
+343 0.00139617919921875 0.00999999999999979 0.00999999999999979 0.0 343
+344 0.00139784812927246 0.0 0.0 0.0 344
+345 0.00139784812927246 0.0 0.0 0.0 345
+346 0.00141716003417969 0.0 0.0 0.0 346
+347 0.00139307975769043 0.0 0.0 0.0 347
+348 0.00141191482543945 0.0 0.0 0.0 348
+349 0.00139999389648438 0.0 0.0 0.0 349
+350 0.00140380859375 0.00999999999999979 0.00999999999999979 0.0 350
+351 0.00140500068664551 0.0 0.0 0.0 351
+352 0.00149989128112793 0.0 0.0 0.0 352
+353 0.00278902053833008 0.0 0.0 0.0 353
+354 0.00261592864990234 0.0 0.0 0.0 354
+355 0.00245213508605957 0.0100000000000007 0.0100000000000007 0.0 355
+356 0.00246095657348633 0.0 0.0 0.0 356
+357 0.00265288352966309 0.0 0.0 0.0 357
+358 0.00261092185974121 0.00999999999999979 0.00999999999999979 0.0 358
+359 0.00242495536804199 0.0 0.0 0.0 359
+360 0.00170683860778809 0.0 0.0 0.0 360
+361 0.00139093399047852 0.0 0.0 0.0 361
+362 0.00142908096313477 0.0 0.0 0.0 362
+363 0.00140976905822754 0.0 0.0 0.0 363
+364 0.00142288208007812 0.00999999999999979 0.00999999999999979 0.0 364
+365 0.00140380859375 0.0 0.0 0.0 365
+366 0.00140714645385742 0.0 0.0 0.0 366
+367 0.00139594078063965 0.0 0.0 0.0 367
+368 0.00140118598937988 0.0 0.0 0.0 368
+369 0.0262439250946045 0.0300000000000002 0.0200000000000005 0.01 369
+370 0.00150489807128906 0.00999999999999979 0.00999999999999979 0.0 370
+371 0.00143313407897949 0.0 0.0 0.0 371
+372 0.00153613090515137 0.0 0.0 0.0 372
+373 0.00143313407897949 0.0 0.0 0.0 373
+374 0.00144290924072266 0.0 0.0 0.0 374
+375 0.00142097473144531 0.0 0.0 0.0 375
+376 0.00142097473144531 0.0 0.0 0.0 376
+377 0.00140810012817383 0.00999999999999979 0.00999999999999979 0.0 377
+378 0.00140690803527832 0.0 0.0 0.0 378
+379 0.0014338493347168 0.0 0.0 0.0 379
+380 0.00142192840576172 0.0 0.0 0.0 380
+381 0.00142502784729004 0.0 0.0 0.0 381
+382 0.00140595436096191 0.0 0.0 0.0 382
+383 0.00141811370849609 0.0 0.0 0.0 383
+384 0.00143003463745117 0.00999999999999979 0.00999999999999979 0.0 384
+385 0.00141596794128418 0.0 0.0 0.0 385
+386 0.00140619277954102 0.0 0.0 0.0 386
+387 0.00142288208007812 0.0 0.0 0.0 387
+388 0.00142002105712891 0.0 0.0 0.0 388
+389 0.00141596794128418 0.0 0.0 0.0 389
+390 0.00142407417297363 0.0 0.0 0.0 390
+391 0.00138282775878906 0.0100000000000007 0.0100000000000007 0.0 391
+392 0.00141501426696777 0.0 0.0 0.0 392
+393 0.00139188766479492 0.0 0.0 0.0 393
+394 0.00141382217407227 0.0 0.0 0.0 394
+395 0.00140714645385742 0.0 0.0 0.0 395
+396 0.00141000747680664 0.0 0.0 0.0 396
+397 0.00139307975769043 0.0 0.0 0.0 397
+398 0.00139307975769043 0.00999999999999979 0.00999999999999979 0.0 398
+399 0.00141000747680664 0.0 0.0 0.0 399
+400 0.00138998031616211 0.0 0.0 0.0 400
+401 0.00140213966369629 0.0 0.0 0.0 401
+402 0.00139904022216797 0.0 0.0 0.0 402
+403 0.00141191482543945 0.0 0.0 0.0 403
+404 0.00139999389648438 0.0 0.0 0.0 404
+405 0.00139188766479492 0.00999999999999979 0.00999999999999979 0.0 405
+406 0.00142502784729004 0.0 0.0 0.0 406
+407 0.00139904022216797 0.0 0.0 0.0 407
+408 0.00157594680786133 0.0 0.0 0.0 408
+409 0.00140500068664551 0.0 0.0 0.0 409
+410 0.00139784812927246 0.0 0.0 0.0 410
+411 0.00139188766479492 0.0 0.0 0.0 411
+412 0.00141215324401855 0.00999999999999979 0.00999999999999979 0.0 412
+413 0.00137901306152344 0.0 0.0 0.0 413
+414 0.0014040470123291 0.0 0.0 0.0 414
+415 0.00138497352600098 0.0 0.0 0.0 415
+416 0.00140285491943359 0.0 0.0 0.0 416
+417 0.00147199630737305 0.0 0.0 0.0 417
+418 0.00141096115112305 0.0100000000000007 0.0100000000000007 0.0 418
+419 0.0013890266418457 0.0 0.0 0.0 419
+420 0.00139093399047852 0.0 0.0 0.0 420
+421 0.00139999389648438 0.0 0.0 0.0 421
+422 0.00141406059265137 0.0 0.0 0.0 422
+423 0.00142383575439453 0.0 0.0 0.0 423
+424 0.00139904022216797 0.0 0.0 0.0 424
+425 0.00141310691833496 0.00999999999999979 0.00999999999999979 0.0 425
+426 0.0013880729675293 0.0 0.0 0.0 426
+427 0.00140094757080078 0.0 0.0 0.0 427
+428 0.00140786170959473 0.0 0.0 0.0 428
+429 0.00139880180358887 0.0 0.0 0.0 429
+430 0.00140118598937988 0.0 0.0 0.0 430
+431 0.0276179313659668 0.0299999999999994 0.0299999999999994 0.0 431
+432 0.00144100189208984 0.0 0.0 0.0 432
+433 0.00150609016418457 0.0 0.0 0.0 433
+434 0.0014500617980957 0.0 0.0 0.0 434
+435 0.00144720077514648 0.0100000000000007 0.0100000000000007 0.0 435
+436 0.00142598152160645 0.0 0.0 0.0 436
+437 0.00144004821777344 0.0 0.0 0.0 437
+438 0.00141215324401855 0.0 0.0 0.0 438
+439 0.00140690803527832 0.0 0.0 0.0 439
+440 0.00140905380249023 0.0 0.0 0.0 440
+441 0.00141191482543945 0.0 0.0 0.0 441
+442 0.00141382217407227 0.00999999999999979 0.00999999999999979 0.0 442
+443 0.00141382217407227 0.0 0.0 0.0 443
+444 0.00142979621887207 0.0 0.0 0.0 444
+445 0.00140786170959473 0.0 0.0 0.0 445
+446 0.00141787528991699 0.0 0.0 0.0 446
+447 0.00142502784729004 0.0 0.0 0.0 447
+448 0.00141716003417969 0.00999999999999979 0.00999999999999979 0.0 448
+449 0.00141692161560059 0.0 0.0 0.0 449
+450 0.00142502784729004 0.0 0.0 0.0 450
+451 0.00140690803527832 0.0 0.0 0.0 451
+452 0.00139808654785156 0.0 0.0 0.0 452
+453 0.00140094757080078 0.0 0.0 0.0 453
+454 0.00141501426696777 0.0 0.0 0.0 454
+455 0.00142598152160645 0.00999999999999979 0.00999999999999979 0.0 455
+456 0.00140595436096191 0.0 0.0 0.0 456
+457 0.00141096115112305 0.0 0.0 0.0 457
+458 0.00138306617736816 0.0 0.0 0.0 458
+459 0.00140500068664551 0.0 0.0 0.0 459
+460 0.00141096115112305 0.0 0.0 0.0 460
+461 0.0013880729675293 0.0 0.0 0.0 461
+462 0.00140094757080078 0.0100000000000007 0.0100000000000007 0.0 462
+463 0.00139594078063965 0.0 0.0 0.0 463
+464 0.00141310691833496 0.0 0.0 0.0 464
+465 0.00138282775878906 0.0 0.0 0.0 465
+466 0.00141596794128418 0.0 0.0 0.0 466
+467 0.00141692161560059 0.0 0.0 0.0 467
+468 0.00142002105712891 0.0 0.0 0.0 468
+469 0.00139999389648438 0.00999999999999979 0.00999999999999979 0.0 469
+470 0.00137901306152344 0.0 0.0 0.0 470
+471 0.00140595436096191 0.0 0.0 0.0 471
+472 0.0013880729675293 0.0 0.0 0.0 472
+473 0.00141310691833496 0.0 0.0 0.0 473
+474 0.0014040470123291 0.0 0.0 0.0 474
+475 0.00141406059265137 0.0 0.0 0.0 475
+476 0.00139713287353516 0.00999999999999979 0.00999999999999979 0.0 476
+477 0.00139307975769043 0.0 0.0 0.0 477
+478 0.00140786170959473 0.0 0.0 0.0 478
+479 0.00139784812927246 0.0 0.0 0.0 479
+480 0.00139784812927246 0.0 0.0 0.0 480
+481 0.00139999389648438 0.0 0.0 0.0 481
+482 0.00140190124511719 0.0 0.0 0.0 482
+483 0.00139594078063965 0.00999999999999979 0.00999999999999979 0.0 483
+484 0.0014188289642334 0.0 0.0 0.0 484
+485 0.00140810012817383 0.0 0.0 0.0 485
+486 0.00141596794128418 0.0 0.0 0.0 486
+487 0.0014030933380127 0.0 0.0 0.0 487
+488 0.00141596794128418 0.0 0.0 0.0 488
+489 0.00141811370849609 0.0 0.0 0.0 489
+490 0.00140094757080078 0.0100000000000007 0.0100000000000007 0.0 490
+491 0.00142717361450195 0.0 0.0 0.0 491
+492 0.00140190124511719 0.0 0.0 0.0 492
+493 0.0237669944763184 0.0199999999999996 0.0199999999999996 0.0 493
+494 0.00249719619750977 0.0 0.0 0.0 494
+495 0.00208711624145508 0.0 0.0 0.0 495
+496 0.00229597091674805 0.00999999999999979 0.00999999999999979 0.0 496
+497 0.00143194198608398 0.0 0.0 0.0 497
+498 0.00144100189208984 0.0 0.0 0.0 498
+499 0.00142002105712891 0.0 0.0 0.0 499
+500 0.00144791603088379 0.0 0.0 0.0 500
+501 0.00140190124511719 0.0 0.0 0.0 501
+502 0.00142192840576172 0.0 0.0 0.0 502
+503 0.00142502784729004 0.0100000000000007 0.0100000000000007 0.0 503
+504 0.0014350414276123 0.0 0.0 0.0 504
+505 0.00141811370849609 0.0 0.0 0.0 505
+506 0.00141811370849609 0.0 0.0 0.0 506
+507 0.00141596794128418 0.0 0.0 0.0 507
+508 0.00141501426696777 0.0 0.0 0.0 508
+509 0.00140094757080078 0.0 0.0 0.0 509
+510 0.00142502784729004 0.00999999999999979 0.00999999999999979 0.0 510
+511 0.0014350414276123 0.0 0.0 0.0 511
+512 0.00139403343200684 0.0 0.0 0.0 512
+513 0.00142598152160645 0.0 0.0 0.0 513
+514 0.00142598152160645 0.0 0.0 0.0 514
+515 0.00181007385253906 0.0 0.0 0.0 515
+516 0.00142097473144531 0.0 0.0 0.0 516
+517 0.0014030933380127 0.00999999999999979 0.00999999999999979 0.0 517
+518 0.00141310691833496 0.0 0.0 0.0 518
+519 0.00140595436096191 0.0 0.0 0.0 519
+520 0.00139999389648438 0.0 0.0 0.0 520
+521 0.00140881538391113 0.0 0.0 0.0 521
+522 0.00139498710632324 0.0 0.0 0.0 522
+523 0.00141406059265137 0.0 0.0 0.0 523
+524 0.00139307975769043 0.00999999999999979 0.00999999999999979 0.0 524
+525 0.0014040470123291 0.0 0.0 0.0 525
+526 0.00141501426696777 0.0 0.0 0.0 526
+527 0.00141716003417969 0.0 0.0 0.0 527
+528 0.00141501426696777 0.0 0.0 0.0 528
+529 0.00147104263305664 0.0 0.0 0.0 529
+530 0.00141096115112305 0.0 0.0 0.0 530
+531 0.00140213966369629 0.0100000000000007 0.0100000000000007 0.0 531
+532 0.00141406059265137 0.0 0.0 0.0 532
+533 0.00139904022216797 0.0 0.0 0.0 533
+534 0.00139403343200684 0.0 0.0 0.0 534
+535 0.00139713287353516 0.0 0.0 0.0 535
+536 0.00140786170959473 0.0 0.0 0.0 536
+537 0.00139403343200684 0.0 0.0 0.0 537
+538 0.00140714645385742 0.00999999999999979 0.00999999999999979 0.0 538
+539 0.00139093399047852 0.0 0.0 0.0 539
+540 0.00140094757080078 0.0 0.0 0.0 540
+541 0.00138711929321289 0.0 0.0 0.0 541
+542 0.00140500068664551 0.0 0.0 0.0 542
+543 0.00141406059265137 0.0 0.0 0.0 543
+544 0.0014030933380127 0.0 0.0 0.0 544
+545 0.00138497352600098 0.00999999999999979 0.00999999999999979 0.0 545
+546 0.00148582458496094 0.0 0.0 0.0 546
+547 0.00141191482543945 0.0 0.0 0.0 547
+548 0.00141119956970215 0.0 0.0 0.0 548
+549 0.00140690803527832 0.0 0.0 0.0 549
+550 0.00140881538391113 0.0 0.0 0.0 550
+551 0.00141286849975586 0.00999999999999979 0.00999999999999979 0.0 551
+552 0.00141286849975586 0.0 0.0 0.0 552
+553 0.00139021873474121 0.0 0.0 0.0 553
+554 0.0234880447387695 0.0200000000000005 0.0200000000000005 0.0 554
+555 0.00147581100463867 0.0 0.0 0.0 555
+556 0.00144290924072266 0.0 0.0 0.0 556
+557 0.00200700759887695 0.00999999999999979 0.00999999999999979 0.0 557
+558 0.00271010398864746 0.0 0.0 0.0 558
+559 0.00263786315917969 0.0 0.0 0.0 559
+560 0.00255584716796875 0.0 0.0 0.0 560
+561 0.0022728443145752 0.00999999999999979 0.00999999999999979 0.0 561
+562 0.0014340877532959 0.0 0.0 0.0 562
+563 0.00143599510192871 0.0 0.0 0.0 563
+564 0.00140905380249023 0.0 0.0 0.0 564
+565 0.00140786170959473 0.0 0.0 0.0 565
+566 0.00142693519592285 0.0 0.0 0.0 566
+567 0.00141596794128418 0.00999999999999979 0.00999999999999979 0.0 567
+568 0.00147199630737305 0.0 0.0 0.0 568
+569 0.00142502784729004 0.0 0.0 0.0 569
+570 0.00143003463745117 0.0 0.0 0.0 570
+571 0.00140595436096191 0.0 0.0 0.0 571
+572 0.00144600868225098 0.0 0.0 0.0 572
+573 0.00141096115112305 0.0 0.0 0.0 573
+574 0.00142717361450195 0.0100000000000007 0.0100000000000007 0.0 574
+575 0.0025019645690918 0.0 0.0 0.0 575
+576 0.00191497802734375 0.0 0.0 0.0 576
+577 0.00141119956970215 0.0 0.0 0.0 577
+578 0.00140690803527832 0.0 0.0 0.0 578
+579 0.00141501426696777 0.00999999999999979 0.00999999999999979 0.0 579
+580 0.00141692161560059 0.0 0.0 0.0 580
+581 0.00139212608337402 0.0 0.0 0.0 581
+582 0.00140810012817383 0.0 0.0 0.0 582
+583 0.00139307975769043 0.0 0.0 0.0 583
+584 0.00139498710632324 0.0 0.0 0.0 584
+585 0.0014030933380127 0.0 0.0 0.0 585
+586 0.0014030933380127 0.00999999999999979 0.00999999999999979 0.0 586
+587 0.00141096115112305 0.0 0.0 0.0 587
+588 0.00140500068664551 0.0 0.0 0.0 588
+589 0.00144505500793457 0.0 0.0 0.0 589
+590 0.00141191482543945 0.0 0.0 0.0 590
+591 0.00140213966369629 0.0 0.0 0.0 591
+592 0.00139594078063965 0.0 0.0 0.0 592
+593 0.00141096115112305 0.00999999999999979 0.00999999999999979 0.0 593
+594 0.00139093399047852 0.0 0.0 0.0 594
+595 0.00148797035217285 0.0 0.0 0.0 595
+596 0.00139999389648438 0.0 0.0 0.0 596
+597 0.00139689445495605 0.0 0.0 0.0 597
+598 0.00140094757080078 0.0 0.0 0.0 598
+599 0.00140786170959473 0.0 0.0 0.0 599
+600 0.00140810012817383 0.0100000000000007 0.0100000000000007 0.0 600
+601 0.00140810012817383 0.0 0.0 0.0 601
+602 0.00140500068664551 0.0 0.0 0.0 602
+603 0.00139093399047852 0.0 0.0 0.0 603
+604 0.00142192840576172 0.0 0.0 0.0 604
+605 0.00138998031616211 0.0 0.0 0.0 605
+606 0.00140213966369629 0.0 0.0 0.0 606
+607 0.00140285491943359 0.00999999999999979 0.00999999999999979 0.0 607
+608 0.00141000747680664 0.0 0.0 0.0 608
+609 0.00140190124511719 0.0 0.0 0.0 609
+610 0.00142097473144531 0.0 0.0 0.0 610
+611 0.00139689445495605 0.0 0.0 0.0 611
+612 0.00147509574890137 0.0 0.0 0.0 612
+613 0.00141000747680664 0.0 0.0 0.0 613
+614 0.00140285491943359 0.00999999999999979 0.00999999999999979 0.0 614
+615 0.00142002105712891 0.0 0.0 0.0 615
+616 0.0232539176940918 0.0200000000000005 0.0200000000000005 0.0 616
+617 0.00145983695983887 0.0 0.0 0.0 617
+618 0.00142908096313477 0.0 0.0 0.0 618
+619 0.00143790245056152 0.00999999999999979 0.00999999999999979 0.0 619
+620 0.00141000747680664 0.0 0.0 0.0 620
+621 0.00141692161560059 0.0 0.0 0.0 621
+622 0.00142216682434082 0.0 0.0 0.0 622
+623 0.00140905380249023 0.0 0.0 0.0 623
+624 0.00142598152160645 0.0 0.0 0.0 624
+625 0.00141096115112305 0.0 0.0 0.0 625
+626 0.00142097473144531 0.00999999999999979 0.00999999999999979 0.0 626
+627 0.00149297714233398 0.0 0.0 0.0 627
+628 0.0014348030090332 0.0 0.0 0.0 628
+629 0.00148200988769531 0.0 0.0 0.0 629
+630 0.0014040470123291 0.0 0.0 0.0 630
+631 0.00141596794128418 0.0 0.0 0.0 631
+632 0.00142216682434082 0.0 0.0 0.0 632
+633 0.00139999389648438 0.00999999999999979 0.00999999999999979 0.0 633
+634 0.00142693519592285 0.0 0.0 0.0 634
+635 0.00141692161560059 0.0 0.0 0.0 635
+636 0.00141501426696777 0.0 0.0 0.0 636
+637 0.00140976905822754 0.0 0.0 0.0 637
+638 0.00140500068664551 0.0 0.0 0.0 638
+639 0.00141787528991699 0.0 0.0 0.0 639
+640 0.0013880729675293 0.0100000000000007 0.0100000000000007 0.0 640
+641 0.00142812728881836 0.0 0.0 0.0 641
+642 0.0014040470123291 0.0 0.0 0.0 642
+643 0.0013880729675293 0.0 0.0 0.0 643
+644 0.00140810012817383 0.0 0.0 0.0 644
+645 0.00142192840576172 0.0 0.0 0.0 645
+646 0.00140810012817383 0.0 0.0 0.0 646
+647 0.00140190124511719 0.00999999999999979 0.00999999999999979 0.0 647
+648 0.00148701667785645 0.0 0.0 0.0 648
+649 0.0014040470123291 0.0 0.0 0.0 649
+650 0.00140094757080078 0.0 0.0 0.0 650
+651 0.00139904022216797 0.0 0.0 0.0 651
+652 0.00141811370849609 0.0 0.0 0.0 652
+653 0.00139403343200684 0.0 0.0 0.0 653
+654 0.00141191482543945 0.00999999999999979 0.00999999999999979 0.0 654
+655 0.00140500068664551 0.0 0.0 0.0 655
+656 0.00141096115112305 0.0 0.0 0.0 656
+657 0.00185894966125488 0.0 0.0 0.0 657
+658 0.00141286849975586 0.0 0.0 0.0 658
+659 0.00149917602539062 0.0 0.0 0.0 659
+660 0.00140190124511719 0.0 0.0 0.0 660
+661 0.00139188766479492 0.00999999999999979 0.00999999999999979 0.0 661
+662 0.00138711929321289 0.0 0.0 0.0 662
+663 0.00139904022216797 0.0 0.0 0.0 663
+664 0.00141596794128418 0.0 0.0 0.0 664
+665 0.00139212608337402 0.0 0.0 0.0 665
+666 0.00141191482543945 0.0 0.0 0.0 666
+667 0.00139403343200684 0.0 0.0 0.0 667
+668 0.00140905380249023 0.0100000000000007 0.0100000000000007 0.0 668
+669 0.00139307975769043 0.0 0.0 0.0 669
+670 0.00139999389648438 0.0 0.0 0.0 670
+671 0.00142002105712891 0.0 0.0 0.0 671
+672 0.00139904022216797 0.0 0.0 0.0 672
+673 0.00142097473144531 0.0 0.0 0.0 673
+674 0.00140500068664551 0.0 0.0 0.0 674
+675 0.00139594078063965 0.00999999999999979 0.00999999999999979 0.0 675
+676 0.00139284133911133 0.0 0.0 0.0 676
+677 0.0242998600006104 0.0199999999999996 0.0199999999999996 0.0 677
+678 0.00148987770080566 0.0 0.0 0.0 678
+679 0.00144290924072266 0.0 0.0 0.0 679
+680 0.00143098831176758 0.0100000000000007 0.0100000000000007 0.0 680
+681 0.00144410133361816 0.0 0.0 0.0 681
+682 0.00142598152160645 0.0 0.0 0.0 682
+683 0.00140094757080078 0.0 0.0 0.0 683
+684 0.00146293640136719 0.0 0.0 0.0 684
+685 0.00141811370849609 0.0 0.0 0.0 685
+686 0.00143098831176758 0.0 0.0 0.0 686
+687 0.00144100189208984 0.00999999999999979 0.00999999999999979 0.0 687
+688 0.00143003463745117 0.0 0.0 0.0 688
+689 0.00141406059265137 0.0 0.0 0.0 689
+690 0.00143194198608398 0.0 0.0 0.0 690
+691 0.0014040470123291 0.0 0.0 0.0 691
+692 0.00141191482543945 0.0 0.0 0.0 692
+693 0.00259590148925781 0.00999999999999979 0.00999999999999979 0.0 693
+694 0.00263714790344238 0.0 0.0 0.0 694
+695 0.00258207321166992 0.0 0.0 0.0 695
+696 0.00255298614501953 0.0 0.0 0.0 696
+697 0.00179100036621094 0.00999999999999979 0.00999999999999979 0.0 697
+698 0.00142312049865723 0.0 0.0 0.0 698
+699 0.00141215324401855 0.0 0.0 0.0 699
+700 0.00140094757080078 0.0 0.0 0.0 700
+701 0.00138998031616211 0.0 0.0 0.0 701
+702 0.00139999389648438 0.0 0.0 0.0 702
+703 0.00142312049865723 0.0 0.0 0.0 703
+704 0.00142812728881836 0.00999999999999979 0.00999999999999979 0.0 704
+705 0.00140690803527832 0.0 0.0 0.0 705
+706 0.00139999389648438 0.0 0.0 0.0 706
+707 0.00140500068664551 0.0 0.0 0.0 707
+708 0.00139498710632324 0.0 0.0 0.0 708
+709 0.00139498710632324 0.0 0.0 0.0 709
+710 0.0014030933380127 0.0 0.0 0.0 710
+711 0.00138497352600098 0.0100000000000007 0.0100000000000007 0.0 711
+712 0.00139498710632324 0.0 0.0 0.0 712
+713 0.00139904022216797 0.0 0.0 0.0 713
+714 0.00141000747680664 0.0 0.0 0.0 714
+715 0.00140118598937988 0.0 0.0 0.0 715
+716 0.00141406059265137 0.0 0.0 0.0 716
+717 0.00140094757080078 0.0 0.0 0.0 717
+718 0.00141787528991699 0.00999999999999979 0.00999999999999979 0.0 718
+719 0.00140714645385742 0.0 0.0 0.0 719
+720 0.00142097473144531 0.0 0.0 0.0 720
+721 0.0013880729675293 0.0 0.0 0.0 721
+722 0.00140094757080078 0.0 0.0 0.0 722
+723 0.0014190673828125 0.0 0.0 0.0 723
+724 0.00139117240905762 0.0 0.0 0.0 724
+725 0.00139784812927246 0.00999999999999979 0.00999999999999979 0.0 725
+726 0.00163793563842773 0.0 0.0 0.0 726
+727 0.00141406059265137 0.0 0.0 0.0 727
+728 0.00140500068664551 0.0 0.0 0.0 728
+729 0.00141692161560059 0.0 0.0 0.0 729
+730 0.00141000747680664 0.0 0.0 0.0 730
+731 0.00139594078063965 0.00999999999999979 0.00999999999999979 0.0 731
+732 0.00140595436096191 0.0 0.0 0.0 732
+733 0.00140881538391113 0.0 0.0 0.0 733
+734 0.00140500068664551 0.0 0.0 0.0 734
+735 0.00139904022216797 0.0 0.0 0.0 735
+736 0.00141787528991699 0.0 0.0 0.0 736
+737 0.00141406059265137 0.0 0.0 0.0 737
+738 0.00141000747680664 0.0100000000000007 0.0100000000000007 0.0 738
+739 0.0232431888580322 0.0199999999999996 0.0199999999999996 0.0 739
+740 0.00145602226257324 0.0 0.0 0.0 740
+741 0.00145196914672852 0.0 0.0 0.0 741
+742 0.00142693519592285 0.0 0.0 0.0 742
+743 0.00143599510192871 0.0 0.0 0.0 743
+744 0.00144100189208984 0.00999999999999979 0.00999999999999979 0.0 744
+745 0.00146389007568359 0.0 0.0 0.0 745
+746 0.00143003463745117 0.0 0.0 0.0 746
+747 0.00141501426696777 0.0 0.0 0.0 747
+748 0.00139808654785156 0.0 0.0 0.0 748
+749 0.00142097473144531 0.0 0.0 0.0 749
+750 0.00140905380249023 0.0 0.0 0.0 750
+751 0.00150108337402344 0.0100000000000007 0.0100000000000007 0.0 751
+752 0.00140714645385742 0.0 0.0 0.0 752
+753 0.00142908096313477 0.0 0.0 0.0 753
+754 0.0014040470123291 0.0 0.0 0.0 754
+755 0.00141501426696777 0.0 0.0 0.0 755
+756 0.00140094757080078 0.0 0.0 0.0 756
+757 0.00141215324401855 0.00999999999999979 0.00999999999999979 0.0 757
+758 0.00141000747680664 0.0 0.0 0.0 758
+759 0.00140714645385742 0.0 0.0 0.0 759
+760 0.00141096115112305 0.0 0.0 0.0 760
+761 0.00140213966369629 0.0 0.0 0.0 761
+762 0.0014188289642334 0.0 0.0 0.0 762
+763 0.00138497352600098 0.0 0.0 0.0 763
+764 0.00142192840576172 0.00999999999999979 0.00999999999999979 0.0 764
+765 0.00140380859375 0.0 0.0 0.0 765
+766 0.00153803825378418 0.0 0.0 0.0 766
+767 0.0013880729675293 0.0 0.0 0.0 767
+768 0.00141191482543945 0.0 0.0 0.0 768
+769 0.00139689445495605 0.0 0.0 0.0 769
+770 0.00144219398498535 0.0 0.0 0.0 770
+771 0.00145888328552246 0.00999999999999979 0.00999999999999979 0.0 771
+772 0.00142621994018555 0.0 0.0 0.0 772
+773 0.00138998031616211 0.0 0.0 0.0 773
+774 0.00141286849975586 0.0 0.0 0.0 774
+775 0.00140190124511719 0.0 0.0 0.0 775
+776 0.00139498710632324 0.0 0.0 0.0 776
+777 0.00141191482543945 0.0 0.0 0.0 777
+778 0.00138211250305176 0.0100000000000007 0.0100000000000007 0.0 778
+779 0.00141000747680664 0.0 0.0 0.0 779
+780 0.00139093399047852 0.0 0.0 0.0 780
+781 0.00139188766479492 0.0 0.0 0.0 781
+782 0.00139904022216797 0.0 0.0 0.0 782
+783 0.0013880729675293 0.0 0.0 0.0 783
+784 0.00139880180358887 0.0 0.0 0.0 784
+785 0.00137805938720703 0.00999999999999979 0.00999999999999979 0.0 785
+786 0.00141191482543945 0.0 0.0 0.0 786
+787 0.00139498710632324 0.0 0.0 0.0 787
+788 0.00141286849975586 0.0 0.0 0.0 788
+789 0.00140285491943359 0.0 0.0 0.0 789
+790 0.00140213966369629 0.0 0.0 0.0 790
+791 0.00139808654785156 0.0 0.0 0.0 791
+792 0.00141000747680664 0.00999999999999979 0.00999999999999979 0.0 792
+793 0.00142383575439453 0.0 0.0 0.0 793
+794 0.0014040470123291 0.0 0.0 0.0 794
+795 0.00141215324401855 0.0 0.0 0.0 795
+796 0.00140690803527832 0.0 0.0 0.0 796
+797 0.00139689445495605 0.0 0.0 0.0 797
+798 0.00139403343200684 0.0 0.0 0.0 798
+799 0.00141096115112305 0.00999999999999979 0.00999999999999979 0.0 799
+800 0.0231518745422363 0.0200000000000005 0.0200000000000005 0.0 800
+801 0.00148391723632812 0.0 0.0 0.0 801
+802 0.00144004821777344 0.0 0.0 0.0 802
+803 0.00144600868225098 0.0 0.0 0.0 803
+804 0.00148105621337891 0.00999999999999979 0.00999999999999979 0.0 804
+805 0.0014500617980957 0.0 0.0 0.0 805
+806 0.00141406059265137 0.0 0.0 0.0 806
+807 0.00140595436096191 0.0 0.0 0.0 807
+808 0.00142502784729004 0.0 0.0 0.0 808
+809 0.00140285491943359 0.0 0.0 0.0 809
+810 0.00142288208007812 0.0 0.0 0.0 810
+811 0.0014030933380127 0.00999999999999979 0.00999999999999979 0.0 811
+812 0.00139999389648438 0.0 0.0 0.0 812
+813 0.00141000747680664 0.0 0.0 0.0 813
+814 0.00140881538391113 0.0 0.0 0.0 814
+815 0.00143098831176758 0.0 0.0 0.0 815
+816 0.00140094757080078 0.0 0.0 0.0 816
+817 0.00143003463745117 0.0 0.0 0.0 817
+818 0.00140500068664551 0.0100000000000007 0.0100000000000007 0.0 818
+819 0.00142002105712891 0.0 0.0 0.0 819
+820 0.00141096115112305 0.0 0.0 0.0 820
+821 0.00142502784729004 0.0 0.0 0.0 821
+822 0.00141096115112305 0.0 0.0 0.0 822
+823 0.00140619277954102 0.0 0.0 0.0 823
+824 0.00139093399047852 0.0 0.0 0.0 824
+825 0.00139999389648438 0.00999999999999979 0.00999999999999979 0.0 825
+826 0.00139999389648438 0.0 0.0 0.0 826
+827 0.00140190124511719 0.0 0.0 0.0 827
+828 0.0014030933380127 0.0 0.0 0.0 828
+829 0.00139808654785156 0.0 0.0 0.0 829
+830 0.00140786170959473 0.0 0.0 0.0 830
+831 0.00171494483947754 0.0 0.0 0.0 831
+832 0.00259613990783691 0.0 0.0 0.0 832
+833 0.00256896018981934 0.0 0.0 0.0 833
+834 0.00258994102478027 0.0 0.0 0.0 834
+835 0.00195598602294922 0.00999999999999979 0.00999999999999979 0.0 835
+836 0.00141477584838867 0.0 0.0 0.0 836
+837 0.0014030933380127 0.0 0.0 0.0 837
+838 0.00140500068664551 0.0 0.0 0.0 838
+839 0.00138711929321289 0.0 0.0 0.0 839
+840 0.00139904022216797 0.0 0.0 0.0 840
+841 0.00139403343200684 0.0 0.0 0.0 841
+842 0.00141215324401855 0.00999999999999979 0.00999999999999979 0.0 842
+843 0.0014498233795166 0.0 0.0 0.0 843
+844 0.00139594078063965 0.0 0.0 0.0 844
+845 0.00139307975769043 0.0 0.0 0.0 845
+846 0.0013890266418457 0.0 0.0 0.0 846
+847 0.00141000747680664 0.0 0.0 0.0 847
+848 0.00138711929321289 0.0 0.0 0.0 848
+849 0.00221610069274902 0.0100000000000007 0.0100000000000007 0.0 849
+850 0.00145506858825684 0.0 0.0 0.0 850
+851 0.00141501426696777 0.0 0.0 0.0 851
+852 0.00145888328552246 0.0 0.0 0.0 852
+853 0.00140500068664551 0.0 0.0 0.0 853
+854 0.00139904022216797 0.0 0.0 0.0 854
+855 0.00137901306152344 0.0 0.0 0.0 855
+856 0.00144314765930176 0.00999999999999979 0.00999999999999979 0.0 856
+857 0.00139904022216797 0.0 0.0 0.0 857
+858 0.00142312049865723 0.0 0.0 0.0 858
+859 0.00139689445495605 0.0 0.0 0.0 859
+860 0.00140786170959473 0.0 0.0 0.0 860
+861 0.00139713287353516 0.0 0.0 0.0 861
+862 0.0231709480285645 0.0300000000000002 0.0300000000000002 0.0 862
+863 0.00148701667785645 0.0 0.0 0.0 863
+864 0.00143599510192871 0.0 0.0 0.0 864
+865 0.00144219398498535 0.0 0.0 0.0 865
+866 0.00142002105712891 0.0 0.0 0.0 866
+867 0.0014500617980957 0.0 0.0 0.0 867
+868 0.00142502784729004 0.00999999999999979 0.00999999999999979 0.0 868
+869 0.00141692161560059 0.0 0.0 0.0 869
+870 0.00142192840576172 0.0 0.0 0.0 870
+871 0.00142192840576172 0.0 0.0 0.0 871
+872 0.00141191482543945 0.0 0.0 0.0 872
+873 0.00143194198608398 0.0 0.0 0.0 873
+874 0.00142288208007812 0.0 0.0 0.0 874
+875 0.00142884254455566 0.00999999999999979 0.00999999999999979 0.0 875
+876 0.00160384178161621 0.0 0.0 0.0 876
+877 0.00264906883239746 0.0 0.0 0.0 877
+878 0.00261187553405762 0.0 0.0 0.0 878
+879 0.00243496894836426 0.00999999999999979 0.00999999999999979 0.0 879
+880 0.00259900093078613 0.0 0.0 0.0 880
+881 0.0026240348815918 0.0 0.0 0.0 881
+882 0.00248599052429199 0.0 0.0 0.0 882
+883 0.0024101734161377 0.0100000000000007 0.0100000000000007 0.0 883
+884 0.00142192840576172 0.0 0.0 0.0 884
+885 0.0014488697052002 0.0 0.0 0.0 885
+886 0.00140285491943359 0.0 0.0 0.0 886
+887 0.00140213966369629 0.0 0.0 0.0 887
+888 0.00141406059265137 0.0 0.0 0.0 888
+889 0.00139999389648438 0.0 0.0 0.0 889
+890 0.00140690803527832 0.00999999999999979 0.00999999999999979 0.0 890
+891 0.00139093399047852 0.0 0.0 0.0 891
+892 0.00140500068664551 0.0 0.0 0.0 892
+893 0.00140690803527832 0.0 0.0 0.0 893
+894 0.00141000747680664 0.0 0.0 0.0 894
+895 0.00140810012817383 0.0 0.0 0.0 895
+896 0.00139403343200684 0.0 0.0 0.0 896
+897 0.00140810012817383 0.00999999999999979 0.00999999999999979 0.0 897
+898 0.00140810012817383 0.0 0.0 0.0 898
+899 0.00143003463745117 0.0 0.0 0.0 899
+900 0.00141811370849609 0.0 0.0 0.0 900
+901 0.00142002105712891 0.0 0.0 0.0 901
+902 0.00138211250305176 0.0 0.0 0.0 902
+903 0.00141096115112305 0.00999999999999979 0.00999999999999979 0.0 903
+904 0.00140595436096191 0.0 0.0 0.0 904
+905 0.00140690803527832 0.0 0.0 0.0 905
+906 0.00141501426696777 0.0 0.0 0.0 906
+907 0.00139594078063965 0.0 0.0 0.0 907
+908 0.00142002105712891 0.0 0.0 0.0 908
+909 0.00139808654785156 0.0 0.0 0.0 909
+910 0.00140905380249023 0.0100000000000007 0.0100000000000007 0.0 910
+911 0.0014040470123291 0.0 0.0 0.0 911
+912 0.00139808654785156 0.0 0.0 0.0 912
+913 0.00141000747680664 0.0 0.0 0.0 913
+914 0.00140619277954102 0.0 0.0 0.0 914
+915 0.0014040470123291 0.0 0.0 0.0 915
+916 0.0014040470123291 0.0 0.0 0.0 916
+917 0.00141310691833496 0.00999999999999979 0.00999999999999979 0.0 917
+918 0.00147795677185059 0.0 0.0 0.0 918
+919 0.00141000747680664 0.0 0.0 0.0 919
+920 0.00140786170959473 0.0 0.0 0.0 920
+921 0.00141000747680664 0.0 0.0 0.0 921
+922 0.00140786170959473 0.0 0.0 0.0 922
+923 0.0234408378601074 0.0300000000000002 0.0300000000000002 0.0 923
+924 0.00142312049865723 0.0 0.0 0.0 924
+925 0.00144505500793457 0.0 0.0 0.0 925
+926 0.00144791603088379 0.0 0.0 0.0 926
+927 0.00144004821777344 0.0 0.0 0.0 927
+928 0.00142192840576172 0.0 0.0 0.0 928
+929 0.00143814086914062 0.00999999999999979 0.00999999999999979 0.0 929
+930 0.00141406059265137 0.0 0.0 0.0 930
+931 0.00141501426696777 0.0 0.0 0.0 931
+932 0.00142312049865723 0.0 0.0 0.0 932
+933 0.00141215324401855 0.0 0.0 0.0 933
+934 0.00143003463745117 0.0 0.0 0.0 934
+935 0.0014188289642334 0.0 0.0 0.0 935
+936 0.00142192840576172 0.00999999999999979 0.00999999999999979 0.0 936
+937 0.00142598152160645 0.0 0.0 0.0 937
+938 0.00143218040466309 0.0 0.0 0.0 938
+939 0.00140094757080078 0.0 0.0 0.0 939
+940 0.00141811370849609 0.0 0.0 0.0 940
+941 0.00142598152160645 0.0 0.0 0.0 941
+942 0.00143694877624512 0.0 0.0 0.0 942
+943 0.00146985054016113 0.00999999999999979 0.00999999999999979 0.0 943
+944 0.00139403343200684 0.0 0.0 0.0 944
+945 0.00141096115112305 0.0 0.0 0.0 945
+946 0.00140595436096191 0.0 0.0 0.0 946
+947 0.00140213966369629 0.0 0.0 0.0 947
+948 0.00139594078063965 0.0 0.0 0.0 948
+949 0.00140190124511719 0.0 0.0 0.0 949
+950 0.00140213966369629 0.0100000000000007 0.0100000000000007 0.0 950
+951 0.0014040470123291 0.0 0.0 0.0 951
+952 0.00139999389648438 0.0 0.0 0.0 952
+953 0.00139904022216797 0.0 0.0 0.0 953
+954 0.00139617919921875 0.0 0.0 0.0 954
+955 0.00141000747680664 0.0 0.0 0.0 955
+956 0.00141716003417969 0.0 0.0 0.0 956
+957 0.00139594078063965 0.00999999999999979 0.00999999999999979 0.0 957
+958 0.00141096115112305 0.0 0.0 0.0 958
+959 0.00139999389648438 0.0 0.0 0.0 959
+960 0.00141787528991699 0.0 0.0 0.0 960
+961 0.00139808654785156 0.0 0.0 0.0 961
+962 0.0014030933380127 0.0 0.0 0.0 962
+963 0.00140810012817383 0.0 0.0 0.0 963
+964 0.00203394889831543 0.00999999999999979 0.00999999999999979 0.0 964
+965 0.00265693664550781 0.0 0.0 0.0 965
+966 0.00261211395263672 0.0 0.0 0.0 966
+967 0.00254082679748535 0.0 0.0 0.0 967
+968 0.00202393531799316 0.00999999999999979 0.00999999999999979 0.0 968
+969 0.00142693519592285 0.0 0.0 0.0 969
+970 0.00139784812927246 0.0 0.0 0.0 970
+971 0.00140213966369629 0.0 0.0 0.0 971
+972 0.00139594078063965 0.0 0.0 0.0 972
+973 0.00141501426696777 0.0 0.0 0.0 973
+974 0.0014030933380127 0.00999999999999979 0.00999999999999979 0.0 974
+975 0.00144290924072266 0.0 0.0 0.0 975
+976 0.00140500068664551 0.0 0.0 0.0 976
+977 0.00140690803527832 0.0 0.0 0.0 977
+978 0.00142502784729004 0.0 0.0 0.0 978
+979 0.00141000747680664 0.0 0.0 0.0 979
+980 0.00141501426696777 0.0 0.0 0.0 980
+981 0.00140118598937988 0.0100000000000007 0.0100000000000007 0.0 981
+982 0.00142693519592285 0.0 0.0 0.0 982
+983 0.00141310691833496 0.0 0.0 0.0 983
+984 0.00140690803527832 0.0 0.0 0.0 984
+985 0.0233311653137207 0.0199999999999996 0.0199999999999996 0.0 985
+986 0.00148701667785645 0.00999999999999979 0.00999999999999979 0.0 986
+987 0.00144100189208984 0.0 0.0 0.0 987
+988 0.00140595436096191 0.0 0.0 0.0 988
+989 0.00144505500793457 0.0 0.0 0.0 989
+990 0.00142598152160645 0.0 0.0 0.0 990
+991 0.0014491081237793 0.0 0.0 0.0 991
+992 0.00139904022216797 0.0 0.0 0.0 992
+993 0.00142788887023926 0.0100000000000007 0.0100000000000007 0.0 993
+994 0.00141382217407227 0.0 0.0 0.0 994
+995 0.00141119956970215 0.0 0.0 0.0 995
+996 0.00139999389648438 0.0 0.0 0.0 996
+997 0.00142192840576172 0.0 0.0 0.0 997
+998 0.0014197826385498 0.0 0.0 0.0 998
+999 0.00142288208007812 0.0 0.0 0.0 999
+1000 0.00141811370849609 0.00999999999999979 0.00999999999999979 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat
new file mode 100644
index 0000000..238a8f3
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat
@@ -0,0 +1,900 @@
+#lag autocorrelation
+101 1.0
+102 0.00222153397099066
+103 -0.0143375943792822
+104 -0.0230145315894251
+105 -0.0272569948085685
+106 -0.0289478311233791
+107 -0.0239202547218024
+108 -0.0254569116577405
+109 -0.0204533758607008
+110 -0.0264699250769266
+111 -0.0247691307865804
+112 -0.0281656685433677
+113 -0.0282797510426555
+114 -0.0264980555156702
+115 -0.0264456484724888
+116 -0.027624326287035
+117 -0.0204913232518958
+118 -0.0136418899889287
+119 -0.0164287250050804
+120 -0.0160068899951543
+121 -0.0213508645203322
+122 -0.0261094503544549
+123 -0.0283361918761636
+124 -0.0221634425280319
+125 -0.0200377132134378
+126 -0.0158156288853482
+127 -0.0184937620769426
+128 -0.0167418191590156
+129 -0.0267897605444739
+130 -0.0277175604156327
+131 -0.0255031340290104
+132 -0.0259704766205717
+133 -0.026687135609607
+134 -0.0259098393314182
+135 -0.0257383295981194
+136 -0.0223218665246626
+137 -0.0237310896666623
+138 -0.0241241330086241
+139 -0.0289642979203642
+140 -0.0268317636147499
+141 -0.0245114013773254
+142 -0.0203659369554139
+143 0.0378050317430218
+144 0.426940829336361
+145 0.38796107377986
+146 0.0415547540823161
+147 -0.0195440376652659
+148 -0.0255053999646579
+149 -0.0275465915036962
+150 -0.0268562381835056
+151 -0.0234577846735018
+152 -0.0209532827400553
+153 -0.0189455488110332
+154 -0.02305883351641
+155 -0.0263771953757563
+156 -0.0280604279698784
+157 -0.0270717426772097
+158 -0.0246648903144108
+159 -0.0247175651482116
+160 -0.021051073568524
+161 -0.0163198388224076
+162 -0.0144235534240568
+163 -0.0136936717999382
+164 -0.01698846339106
+165 -0.0172619597265475
+166 -0.022224434827852
+167 -0.0219642323974638
+168 -0.0213243463149422
+169 -0.0192387869040187
+170 -0.0197178180625259
+171 -0.0247915784961403
+172 -0.0218270561892234
+173 -0.0262672996245232
+174 -0.024849965587679
+175 -0.0250252615288926
+176 -0.0251007165159392
+177 -0.0238806074688618
+178 -0.0238757651256144
+179 -0.0240426101294269
+180 -0.0234219466443065
+181 -0.0212602833600402
+182 -0.0229991714197526
+183 -0.0261227540349392
+184 -0.0221623986521011
+185 -0.0198657473347064
+186 0.036858247139314
+187 0.29256789370978
+188 0.217268577909927
+189 0.196770495691689
+190 0.094220865706204
+191 -0.0203791531848586
+192 -0.0242142425710697
+193 -0.0227327141359121
+194 -0.0219087131272295
+195 -0.0139180641371944
+196 -0.0165931483689415
+197 -0.0139691174427045
+198 -0.0250038332172815
+199 -0.0262538643545197
+200 -0.025280145240993
+201 -0.022716588551902
+202 -0.0229491126971064
+203 -0.020163745252957
+204 -0.0180649219211942
+205 -0.0174961232004392
+206 -0.0153752959032635
+207 -0.0151070882074296
+208 -0.0162636711403948
+209 -0.0213539658247787
+210 -0.0241878645706104
+211 -0.0233292145480391
+212 -0.0222792602366159
+213 -0.0200857928095336
+214 -0.0224102357962423
+215 -0.0200431331454358
+216 -0.0251386240282493
+217 -0.0217360075267156
+218 -0.0231247916814153
+219 -0.0236289558661022
+220 -0.022798275340034
+221 -0.022394916702971
+222 -0.0240641627722647
+223 -0.02767136777592
+224 -0.0188563255687053
+225 -0.0201523683449021
+226 -0.0196358949998781
+227 -0.0201572059848371
+228 -0.0180306969850485
+229 0.0330883208878215
+230 0.187053030884649
+231 0.180166992312632
+232 0.175193540635547
+233 0.0852511978178321
+234 0.0836036324945735
+235 -0.0180475894095978
+236 -0.0203965677916504
+237 -0.0234729155755235
+238 -0.0203967773857997
+239 -0.0168134546888542
+240 -0.0145823454491767
+241 -0.0182208080214287
+242 -0.0222702719218944
+243 -0.0245502962962475
+244 -0.0230701140380481
+245 -0.0205544743992634
+246 -0.0152766305199052
+247 -0.015660060910655
+248 -0.0182272831792615
+249 -0.0161416465628721
+250 -0.0138775731037607
+251 -0.0146059144127008
+252 -0.014851378459684
+253 -0.0174697076620558
+254 -0.020394504090619
+255 -0.020923051703186
+256 -0.0188690748415421
+257 -0.020691771573437
+258 -0.0180158099925264
+259 -0.025009300618942
+260 -0.0241656012183153
+261 -0.0201701986649696
+262 -0.0213418341591563
+263 -0.0212876158412719
+264 -0.0196613481631524
+265 -0.0224579972849258
+266 -0.0222709347842853
+267 -0.021839178151421
+268 -0.0181242059899927
+269 -0.0196595880691145
+270 -0.0176712734167537
+271 -0.0174037647691641
+272 0.0361609936559733
+273 0.136273065680629
+274 0.137142321378537
+275 0.119170985165791
+276 0.135128869617739
+277 0.0365729744317657
+278 0.0813532152332901
+279 -0.0164218823860774
+280 -0.0150012133117104
+281 -0.0180652264456629
+282 -0.0180223031364979
+283 -0.0146583895021702
+284 -0.0178385632762936
+285 -0.0183688063955637
+286 -0.0199104201945895
+287 -0.0209162045756424
+288 -0.0182424612671294
+289 -0.0102871995641823
+290 -0.0097194264103497
+291 -0.0166796622739482
+292 -0.0193090133043633
+293 -0.0109789304127889
+294 -0.0145511817849648
+295 -0.0159177263733151
+296 -0.0162297085566881
+297 -0.0160458825546633
+298 -0.0185277530735613
+299 -0.0201185134004853
+300 -0.0225767827149403
+301 -0.020600528590444
+302 -0.0178266254999198
+303 -0.0228272615104135
+304 -0.0188650304163709
+305 -0.0192512492130587
+306 -0.0198882781449453
+307 -0.018944580372254
+308 -0.0191976364453834
+309 -0.020380651922197
+310 -0.020008249388093
+311 -0.0199582696579672
+312 -0.016107489794778
+313 -0.0168857973840798
+314 -0.0159072805310197
+315 0.0337796643954297
+316 0.091400279956598
+317 0.128355772863555
+318 0.0811615095759163
+319 0.0770716694548368
+320 0.145070077843674
+321 -0.0188619341727165
+322 0.0799864438805513
+323 -0.0199478816959614
+324 -0.0210772723197886
+325 -0.0210646569907724
+326 -0.0200788443102393
+327 -0.0211662403279555
+328 -0.0167589827973132
+329 -0.0177459345163699
+330 -0.0176456584861234
+331 -0.0220878387663237
+332 -0.0138294678922046
+333 -0.00950860063270121
+334 -0.0127373100109087
+335 -0.0165386832541542
+336 -0.0182671925631197
+337 -0.0109720091878599
+338 -0.0142702474119185
+339 -0.0110379801788155
+340 -0.0154139924731546
+341 -0.0128889876019394
+342 -0.0173631353598641
+343 -0.0222795571128729
+344 -0.0201510823246637
+345 -0.014168231775332
+346 -0.0172988244822199
+347 -0.0166164172889096
+348 -0.0174591997875334
+349 -0.0178598488132696
+350 -0.0174148484681578
+351 -0.0181701494308226
+352 -0.0170602479756066
+353 -0.022860700637634
+354 -0.0186677124344551
+355 -0.0163631644839097
+356 -0.0150447805883455
+357 -0.0155934972805149
+358 0.0412705831487356
+359 0.0432271691160312
+360 0.134082054092421
+361 0.030429559359917
+362 0.128011199059957
+363 0.0290649669583617
+364 0.0977105919898357
+365 0.0268435678280154
+366 0.0353018054840323
+367 -0.0198055818066033
+368 -0.018378272291099
+369 -0.019916785016334
+370 -0.0205847247605069
+371 -0.0201224650176015
+372 -0.01627691948957
+373 -0.0153629187371632
+374 -0.0125002930105743
+375 -0.0160149273157025
+376 -0.0130459873232066
+377 -0.0117001449083753
+378 -0.0128253666323881
+379 -0.0149389076420028
+380 -0.0147672676170861
+381 -0.00941821935965455
+382 -0.00473688018446407
+383 -0.00808553215461901
+384 -0.0105108934303795
+385 -0.0155256488187373
+386 -0.0210836438529971
+387 -0.0194168403848756
+388 -0.0138959279148097
+389 -0.0167510111816621
+390 -0.0170725457918982
+391 -0.016150326422395
+392 -0.0187592561556726
+393 -0.0201368328637298
+394 -0.0171077907044443
+395 -0.0171103523390093
+396 -0.0182097163513887
+397 -0.0172423936894017
+398 -0.0146907180546899
+399 -0.0148205318166592
+400 -0.0144952560105946
+401 0.0391317015604062
+402 -0.00325045294442625
+403 0.135229844753472
+404 0.0339587870366385
+405 0.0833862815909146
+406 0.0775145154752597
+407 0.0288174710076017
+408 0.0542563755615635
+409 0.0810954683226646
+410 -0.017752492355491
+411 -0.0180579468812209
+412 -0.0189407872188061
+413 -0.0189713023163003
+414 -0.0189831714463216
+415 -0.0186956047569828
+416 -0.0188493030013216
+417 -0.0190954931073824
+418 -0.0189538951395989
+419 -0.0168159225101202
+420 -0.0149622277586486
+421 -0.0134585088118323
+422 -0.0107702264004257
+423 -0.0116881974906342
+424 -0.0135084097379996
+425 -0.0115600330212086
+426 -0.00385827806043179
+427 -0.00648046756427941
+428 -0.010678969741849
+429 -0.0174377994416611
+430 -0.0197415520446045
+431 -0.01387746808618
+432 -0.0142870555311067
+433 -0.0126167043533278
+434 -0.0145341368337345
+435 -0.0172588314742905
+436 -0.0192532464901077
+437 -0.0178888029842574
+438 -0.0149435002438141
+439 -0.0143499589296186
+440 -0.0113284320025856
+441 -0.0146907285452937
+442 -0.0118090676160861
+443 -0.0129550696231186
+444 -0.00943679479582223
+445 0.0410693940588715
+446 0.0981340063555525
+447 0.0301059977373294
+448 0.0798620238351765
+449 0.0399504241633469
+450 0.0799710609081107
+451 0.0375183260101038
+452 -0.0128846089593424
+453 0.093737068719454
+454 -0.0166488241943883
+455 -0.0171620322539306
+456 -0.0176681103949864
+457 -0.0177135709591161
+458 -0.0174025569142706
+459 -0.0176679666536122
+460 -0.0181412705139815
+461 -0.0178162340211567
+462 -0.0148661374954626
+463 -0.012878454938704
+464 -0.0136407519521233
+465 -0.0103957847636471
+466 -0.00908338367847883
+467 -0.0110136706236845
+468 -0.0121798225855914
+469 -0.00417292561751909
+470 -0.00307290764550916
+471 -0.00798497461616614
+472 -0.0111435895667381
+473 -0.0153727357774596
+474 -0.0130271532875312
+475 -0.0124190182516596
+476 -0.0084547082575317
+477 -0.00918576031696132
+478 -0.0162409259378339
+479 -0.018065492839516
+480 -0.0168355167430056
+481 -0.0140509731408616
+482 -0.0149035783683084
+483 -0.00931711982847588
+484 -0.014271656696945
+485 -0.0121711176661241
+486 -0.016804905268994
+487 -0.0104196286531009
+488 0.0383870537436679
+489 0.0552773935471216
+490 0.0345937652331171
+491 0.0813542198669446
+492 0.0363428500481453
+493 0.0402459628537269
+494 0.0880185317795738
+495 -0.0129023101613787
+496 0.0302552183198115
+497 0.0536535190947818
+498 -0.0156069516901892
+499 -0.0162156062091284
+500 -0.0162183722980474
+501 -0.0157747057135625
+502 -0.0166040466989765
+503 -0.0161608566990615
+504 -0.0167537182627031
+505 -0.0164722018431066
+506 -0.0143593770446019
+507 -0.012530817471516
+508 -0.0130107038316214
+509 -0.0127117424488491
+510 -0.0123582491090572
+511 -0.0143988077890034
+512 -0.0132043617399602
+513 -0.0121255066830081
+514 -0.00947286185269373
+515 -0.00465100530248661
+516 -0.0117788080303492
+517 -0.0130751296092514
+518 -0.0155036171011815
+519 -0.010643006695032
+520 -0.00739844298156769
+521 -0.0112412204699085
+522 -0.0161872155724303
+523 -0.0168989403333427
+524 -0.0153730958327368
+525 -0.0125043590711503
+526 -0.00940141758011818
+527 -0.00767975179438695
+528 -0.0109057442427293
+529 -0.0152170670171314
+530 -0.0148168636021302
+531 0.0536268084567977
+532 0.00159158256076242
+533 0.0395691988094227
+534 0.0851832556342331
+535 0.0404885336981451
+536 0.0359152408805565
+537 0.0400801815807958
+538 0.0426897422408288
+539 0.032487435819703
+540 0.0379746640301957
+541 -0.0114145850527779
+542 -0.0143266971158537
+543 -0.0144808626295274
+544 -0.0142835316361234
+545 -0.0144672980991767
+546 -0.0149347701157941
+547 -0.0147221461325212
+548 -0.0149340818843796
+549 -0.0149339646879691
+550 -0.0125515123976881
+551 -0.0106843909304337
+552 -0.0120477982033282
+553 -0.0107426813396423
+554 -0.0103781179386869
+555 -0.00980456885361171
+556 -0.0108064202489364
+557 -0.0121145826899896
+558 -0.00556810926546485
+559 -0.00930006259964903
+560 -0.00516953265688487
+561 -0.0103764487413688
+562 -0.0101531608339304
+563 -0.00918822426319678
+564 -0.0101644666934554
+565 -0.0112481176383032
+566 -0.0145127017542735
+567 -0.0147134045513878
+568 -0.0123144344086325
+569 -0.00570964879226978
+570 -0.0063187706922707
+571 -0.00374866158046794
+572 -0.013607724159013
+573 -0.0137804453374875
+574 -0.00939070104936453
+575 0.0423495547767671
+576 0.000209272987046017
+577 0.0880471222849516
+578 0.0385858128624645
+579 0.0396811891208319
+580 0.0353924058064461
+581 0.0495909051898724
+582 -0.0113155170664094
+583 0.0871168673380537
+584 -0.0115980451842322
+585 -0.0125526032386238
+586 -0.012561736194457
+587 -0.0122507426071209
+588 -0.0123064811043512
+589 -0.0121521641917975
+590 -0.0125333975284308
+591 -0.0130863343506295
+592 -0.0134314408515597
+593 -0.0107991754906669
+594 -0.00884398203252155
+595 -0.0100733336463772
+596 -0.00922955762602743
+597 -0.00949676131734901
+598 -0.0110224903229849
+599 -0.00991288650680148
+600 -0.00936825932623963
+601 -0.00980726528701717
+602 -0.00476664596953343
+603 -0.011430503413995
+604 -0.0113213354943102
+605 -0.0134064415109797
+606 -0.0126055847537459
+607 -0.0135083477615435
+608 -0.0113488370833923
+609 -0.0093156617098165
+610 -0.00976577466545605
+611 -0.0133363567698321
+612 -0.00759897085944556
+613 -0.00510037875494374
+614 -0.00408004384283288
+615 -0.00918160520147706
+616 -0.0108113236545845
+617 -0.0106231816617747
+618 -0.00758999243430865
+619 0.0435531551195662
+620 0.0520037268502813
+621 0.0439044539134388
+622 0.0386654726142954
+623 0.0394118644732992
+624 0.0449248987301056
+625 -0.00863719437291388
+626 0.0412392562292136
+627 0.0440129688249318
+628 -0.0101620925718705
+629 -0.0109600840877224
+630 -0.0112705053011257
+631 -0.0116301438053661
+632 -0.0113736455019991
+633 -0.0117661118641892
+634 -0.0113961495319145
+635 -0.0117740021837853
+636 -0.0117094958602983
+637 -0.00939366161371644
+638 -0.00755907350023703
+639 -0.00838658396126048
+640 -0.0074832135472603
+641 -0.00801205358318107
+642 -0.00624145194619799
+643 -0.0070240024426915
+644 -0.00834613473332137
+645 -0.00670243676363534
+646 -0.0106128186631781
+647 -0.0123852232161095
+648 -0.0124265826160123
+649 -0.0112567385689026
+650 -0.0126065730661914
+651 -0.0123854746644478
+652 -0.00987776546588025
+653 -0.00722003160503851
+654 -0.00380201074432189
+655 -0.00665072917336648
+656 -0.00528196776714817
+657 -0.00510807558151163
+658 -0.00811089821457131
+659 -0.00755766045240185
+660 -0.00919072675598614
+661 -0.00917820835177611
+662 0.0449751982709438
+663 0.00545567790804502
+664 0.047402752921981
+665 0.0446605853927159
+666 0.0383269966597984
+667 0.0485706532828867
+668 -0.00861899683875584
+669 0.036175649351787
+670 0.0495063574698606
+671 -0.00922596004976487
+672 -0.0101114415486753
+673 -0.00993735125464903
+674 -0.0100323503804273
+675 -0.0105460378506107
+676 -0.0101900492452311
+677 -0.0104909689537006
+678 -0.0106006916930028
+679 -0.0104312931865838
+680 -0.0103517278463301
+681 -0.00740828023970121
+682 -0.00544494861028685
+683 -0.00608611560648061
+684 -0.00534756025333046
+685 -0.0031542340646546
+686 -0.00508349746510613
+687 -0.00739762226897734
+688 -0.0053663959286737
+689 -0.00916557860646553
+690 -0.0110500156300869
+691 -0.00988205922376505
+692 -0.0109866472880073
+693 -0.0111866547046902
+694 -0.0111122786835176
+695 -0.0108203039490724
+696 -0.0102592902413053
+697 -0.0107873762797399
+698 -0.010503275107589
+699 -0.0107835661252666
+700 -0.00885386551992296
+701 -0.00913096053370505
+702 -0.006655207615153
+703 -0.00593455487034946
+704 -0.00427919054888438
+705 -0.007897096903017
+706 0.0490946252850488
+707 0.00815207966824887
+708 0.0473241399151052
+709 0.0451019841097689
+710 0.0479372536790981
+711 -0.00656127986315397
+712 0.0402549343925511
+713 0.0449105363109089
+714 -0.00775184190900309
+715 -0.00768054605133951
+716 -0.00839927750787529
+717 -0.00843853230017117
+718 -0.00790960738283612
+719 -0.0080103177775415
+720 -0.00742775541399996
+721 -0.00765629252098078
+722 -0.00799975093255115
+723 -0.00852792228057431
+724 -0.00869178550957608
+725 -0.00626674339877887
+726 -0.00412677151228354
+727 -0.0048446048963408
+728 -0.000902395625628718
+729 -0.000758143099110528
+730 -0.00408369870009201
+731 -0.00365498969615341
+732 -0.00766259847340275
+733 -0.00952428752243833
+734 -0.00944480113586648
+735 -0.00948862662694449
+736 -0.00966174451824508
+737 -0.00945600129424617
+738 -0.00943741727131444
+739 -0.00927951393185398
+740 -0.00928797610609347
+741 -0.0093286159789273
+742 -0.00765123775530771
+743 -0.00891136789083873
+744 -0.00940772724441718
+745 -0.00786456325355482
+746 -0.0047977712696699
+747 -0.00308223523552548
+748 0.000335699172084439
+749 -0.00143686229797692
+750 0.0513266950133769
+751 0.00563569816195414
+752 0.0477166719391144
+753 0.0538442014782216
+754 -0.0056982279416085
+755 0.0394329868140949
+756 0.0485711646307275
+757 -0.00685930745583302
+758 -0.0069941514632557
+759 -0.0066395137630499
+760 -0.00736962474522024
+761 -0.00752916655217279
+762 -0.00739785479449587
+763 -0.00756967688350672
+764 -0.00753735518588655
+765 -0.00780124181595982
+766 -0.0077216624864741
+767 -0.00784018338356136
+768 -0.00785468874319521
+769 -0.00421699574952483
+770 -0.00190288158223283
+771 -0.000206480072774308
+772 0.00141964253926074
+773 -4.28774976178744e-05
+774 -0.000986275524641414
+775 -0.00657709364993877
+776 -0.00833283088512488
+777 -0.00818951629006444
+778 -0.00836751926023713
+779 -0.00846989619881298
+780 -0.00820214471451413
+781 -0.00821893302874576
+782 -0.00796875201723603
+783 -0.00797370090373924
+784 -0.00777868495761638
+785 -0.00789699981214183
+786 -0.00815610674254451
+787 -0.00778049198735858
+788 -0.00818383133025141
+789 -0.00781336379026083
+790 -0.00682906252309473
+791 -0.00521347355977257
+792 -0.00500213245575373
+793 -0.00506883410260168
+794 0.0474518412366765
+795 0.00530982771618318
+796 0.0565700977023552
+797 -0.000392750407902867
+798 0.0453538486416986
+799 0.0476616389325516
+800 -0.00485863626421196
+801 -0.00525412195734806
+802 -0.00565503507026226
+803 -0.00551485423027977
+804 -0.00524396672704169
+805 -0.00590408701477556
+806 -0.00575508257342466
+807 -0.0058689006002845
+808 -0.00561694855307918
+809 -0.00612555234095552
+810 -0.00608574219510099
+811 -0.00564904015986621
+812 -0.00490660016533395
+813 -0.0046171197705464
+814 0.00177390652695689
+815 0.0035896881022546
+816 0.00161554733058578
+817 0.00437187124600963
+818 -0.000991588850557123
+819 -0.00478099352848916
+820 -0.00637007664471483
+821 -0.00627509734235782
+822 -0.00655857327658989
+823 -0.00656425755979379
+824 -0.00650927617188294
+825 -0.00650262457960547
+826 -0.00662413230967772
+827 -0.00657738252698944
+828 -0.00645476393708
+829 -0.00659463926044406
+830 -0.00649001643087145
+831 -0.00610360245952262
+832 -0.00578387897293013
+833 -0.00402985580826015
+834 -0.00406634314030596
+835 -0.00261501841642483
+836 -0.00301755910132054
+837 -0.00326543386600453
+838 0.0572941624786258
+839 0.00764310260634384
+840 0.00124989263445848
+841 0.0485617649608875
+842 0.0534245959427794
+843 -0.00365723487459394
+844 -0.00424930954244624
+845 -0.00447294923783986
+846 -0.0044749818394267
+847 -0.00464870339809727
+848 -0.00404145529364563
+849 -0.0047634223597755
+850 -0.00467301475043984
+851 -0.00482869667199491
+852 -0.00492239000387982
+853 -0.00463765006041817
+854 -0.0046895918656674
+855 -0.00469126659620766
+856 -0.00430815035273188
+857 -0.00128800088385523
+858 0.00267781615699824
+859 0.00356342242419808
+860 0.00436645666734667
+861 0.00184035931246651
+862 -0.000943211896465123
+863 -0.00341308542653818
+864 -0.00529528124001912
+865 -0.00542898683100493
+866 -0.00553749798487258
+867 -0.00551487806193758
+868 -0.00531561848433044
+869 -0.0053876668196608
+870 -0.00553192702900933
+871 -0.00563989142175504
+872 -0.00521799189299869
+873 -0.00553828490350608
+874 -0.00542860483166627
+875 -0.00537895256953826
+876 -0.00402015584547178
+877 -0.00377599406291178
+878 -0.00402869364355377
+879 -0.00251857216946617
+880 -0.00240522631583728
+881 -0.00231339313710883
+882 -0.00221867026914885
+883 0.0485842407165457
+884 0.00444090950886226
+885 0.052462247531025
+886 -0.00245866728272721
+887 -0.00219100298033388
+888 -0.00258850605081842
+889 -0.0027963562987193
+890 -0.00291992258910256
+891 -0.00299261604099267
+892 -0.00287127254000797
+893 -0.00289608069594768
+894 -0.00280812344627608
+895 -0.00270762901550325
+896 -0.00266975879125481
+897 -0.00220006592251856
+898 -0.00202466427043569
+899 0.0013412649013256
+900 0.00249450051103929
+901 0.00162230152238072
+902 0.00338232047570188
+903 -6.05925325718229e-05
+904 -0.00259194486873829
+905 -0.00291640344192111
+906 -0.00250008679719597
+907 -0.0028490159247303
+908 -0.00308392356343406
+909 -0.00315698199289235
+910 -0.00298811214364333
+911 -0.00314332876724667
+912 -0.0031949080511993
+913 -0.00322269110310181
+914 -0.00327914040255845
+915 -0.00328848900129892
+916 -0.00333752382027206
+917 -0.00309757512659634
+918 -0.00328479456404456
+919 -0.00212177476264958
+920 -0.00213301941637447
+921 -0.00216845672650316
+922 -0.00207541491244113
+923 -0.00207359226664921
+924 -0.000795789430015217
+925 -0.000779514662456165
+926 -0.000756465833443346
+927 0.0577265267706453
+928 0.00687785865649293
+929 -0.00083343873726207
+930 -0.00107719646114928
+931 -0.00108475651120658
+932 -0.00117127681410593
+933 -0.00122811644473185
+934 -0.00127607908277042
+935 -0.00131021310298656
+936 -0.0013179072335
+937 -0.00147237322207706
+938 -0.00138343425729852
+939 -0.00136475351227092
+940 -0.00143219923016344
+941 -0.00132045547517709
+942 -0.00124130927220743
+943 -0.00118457113968125
+944 -0.0011509753919375
+945 -0.000999222689811352
+946 -0.00117359451012239
+947 -0.00105429594479484
+948 -0.00122085082695325
+949 -0.00129578013904683
+950 -0.00102761415169174
+951 -0.00140096472953254
+952 -0.00139860939031699
+953 -0.00151498094704311
+954 -0.0014719650713445
+955 -0.00156023800835947
+956 -0.00160881766904741
+957 -0.00156225880303738
+958 -0.00163459726309757
+959 -0.00163126714870796
+960 -0.00165394472715442
+961 -5.20102850007659e-05
+962 -0.000181333021969587
+963 -0.000229410914437179
+964 -0.000271936329999531
+965 -0.000289225646672715
+966 -0.000264626695269327
+967 -0.000343743683778553
+968 0.00109579617257524
+969 0.00106253650901319
+970 0.00103053375796608
+971 0.000994475133650943
+972 0.00096219604797213
+973 0.000930291083643673
+974 0.00089629434032705
+975 0.000862706715224073
+976 0.000829567281721935
+977 0.000796368072697504
+978 0.000761767798271763
+979 0.000730769092014861
+980 0.000695768030599533
+981 0.000665093515571032
+982 0.000631804759496164
+983 0.000597688431802904
+984 0.000571043223397954
+985 0.00053621559120878
+986 0.0005056031461063
+987 0.000470414024698076
+988 0.000436113652307852
+989 0.000401280866025421
+990 0.000366892747802913
+991 0.000332558486017457
+992 0.00029776201514551
+993 0.000264088081422397
+994 0.000229570195953799
+995 0.000203049247782519
+996 0.000169032219339048
+997 0.000134474421245207
+998 0.000100377453607142
+999 6.59658062483004e-05
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat
new file mode 100644
index 0000000..619ef98
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat
@@ -0,0 +1,901 @@
+#scatter real total user system repeat
+101 0.00208497047424316 0.0 0.0 0.0 101
+102 0.00208020210266113 0.0 0.0 0.0 102
+103 0.00206804275512695 0.0 0.0 0.0 103
+104 0.00207710266113281 0.0 0.0 0.0 104
+105 0.00206398963928223 0.00999999999999979 0.00999999999999979 0.0 105
+106 0.00206398963928223 0.0 0.0 0.0 106
+107 0.00208497047424316 0.0 0.0 0.0 107
+108 0.00206398963928223 0.0 0.0 0.0 108
+109 0.00207400321960449 0.0 0.0 0.0 109
+110 0.00206398963928223 0.0 0.0 0.0 110
+111 0.00205802917480469 0.0 0.0 0.0 111
+112 0.00207996368408203 0.0 0.0 0.0 112
+113 0.00207304954528809 0.0 0.0 0.0 113
+114 0.00206899642944336 0.00999999999999979 0.00999999999999979 0.0 114
+115 0.00207114219665527 0.0 0.0 0.0 115
+116 0.00212287902832031 0.0 0.0 0.0 116
+117 0.00205707550048828 0.0 0.0 0.0 117
+118 0.0020599365234375 0.0 0.0 0.0 118
+119 0.00206613540649414 0.0100000000000016 0.0100000000000016 0.0 119
+120 0.00205683708190918 0.0 0.0 0.0 120
+121 0.00205206871032715 0.0 0.0 0.0 121
+122 0.00204992294311523 0.0 0.0 0.0 122
+123 0.00208115577697754 0.0 0.0 0.0 123
+124 0.00205588340759277 0.00999999999999979 0.00999999999999979 0.0 124
+125 0.00207877159118652 0.0 0.0 0.0 125
+126 0.00207400321960449 0.0 0.0 0.0 126
+127 0.00206089019775391 0.0 0.0 0.0 127
+128 0.00205779075622559 0.00999999999999979 0.00999999999999979 0.0 128
+129 0.00205898284912109 0.0 0.0 0.0 129
+130 0.00206899642944336 0.0 0.0 0.0 130
+131 0.00204896926879883 0.0 0.0 0.0 131
+132 0.00209593772888184 0.0 0.0 0.0 132
+133 0.00208401679992676 0.00999999999999979 0.00999999999999979 0.0 133
+134 0.0276279449462891 0.0199999999999996 0.0199999999999996 0.0 134
+135 0.0021820068359375 0.00999999999999979 0.00999999999999979 0.0 135
+136 0.00213503837585449 0.0 0.0 0.0 136
+137 0.00211405754089355 0.0 0.0 0.0 137
+138 0.00212502479553223 0.0 0.0 0.0 138
+139 0.0020899772644043 0.0 0.0 0.0 139
+140 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 140
+141 0.00206589698791504 0.0 0.0 0.0 141
+142 0.00207710266113281 0.0 0.0 0.0 142
+143 0.00205492973327637 0.0 0.0 0.0 143
+144 0.00208020210266113 0.0 0.0 0.0 144
+145 0.00206184387207031 0.00999999999999979 0.00999999999999979 0.0 145
+146 0.00208377838134766 0.0 0.0 0.0 146
+147 0.00206995010375977 0.0 0.0 0.0 147
+148 0.00206708908081055 0.0 0.0 0.0 148
+149 0.00207114219665527 0.0100000000000016 0.0100000000000016 0.0 149
+150 0.0020759105682373 0.0 0.0 0.0 150
+151 0.0021510124206543 0.0 0.0 0.0 151
+152 0.00207805633544922 0.0 0.0 0.0 152
+153 0.00206089019775391 0.0 0.0 0.0 153
+154 0.00206089019775391 0.00999999999999979 0.00999999999999979 0.0 154
+155 0.00207614898681641 0.0 0.0 0.0 155
+156 0.00205588340759277 0.0 0.0 0.0 156
+157 0.00206494331359863 0.0 0.0 0.0 157
+158 0.00280499458312988 0.00999999999999979 0.00999999999999979 0.0 158
+159 0.00453996658325195 0.0 0.0 0.0 159
+160 0.00369596481323242 0.0 0.0 0.0 160
+161 0.00410914421081543 0.00999999999999979 0.00999999999999979 0.0 161
+162 0.00381112098693848 0.0 0.0 0.0 162
+163 0.00235795974731445 0.0 0.0 0.0 163
+164 0.00209784507751465 0.0 0.0 0.0 164
+165 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 165
+166 0.00204110145568848 0.0 0.0 0.0 166
+167 0.00205802917480469 0.0 0.0 0.0 167
+168 0.00205707550048828 0.0 0.0 0.0 168
+169 0.00208711624145508 0.0 0.0 0.0 169
+170 0.00208187103271484 0.00999999999999979 0.00999999999999979 0.0 170
+171 0.00205421447753906 0.0 0.0 0.0 171
+172 0.0020749568939209 0.0 0.0 0.0 172
+173 0.00210809707641602 0.0 0.0 0.0 173
+174 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 174
+175 0.00205206871032715 0.0 0.0 0.0 175
+176 0.00207614898681641 0.0 0.0 0.0 176
+177 0.0020759105682373 0.0 0.0 0.0 177
+178 0.0242831707000732 0.0300000000000011 0.0300000000000011 0.0 178
+179 0.00222992897033691 0.0 0.0 0.0 179
+180 0.00214791297912598 0.0 0.0 0.0 180
+181 0.00211286544799805 0.0 0.0 0.0 181
+182 0.00209379196166992 0.0 0.0 0.0 182
+183 0.00209307670593262 0.0 0.0 0.0 183
+184 0.00218510627746582 0.0 0.0 0.0 184
+185 0.00206613540649414 0.0 0.0 0.0 185
+186 0.00207090377807617 0.0 0.0 0.0 186
+187 0.00206613540649414 0.00999999999999979 0.00999999999999979 0.0 187
+188 0.00206112861633301 0.0 0.0 0.0 188
+189 0.00206303596496582 0.0 0.0 0.0 189
+190 0.00205802917480469 0.0 0.0 0.0 190
+191 0.00206398963928223 0.0 0.0 0.0 191
+192 0.00210189819335938 0.00999999999999979 0.00999999999999979 0.0 192
+193 0.00206804275512695 0.0 0.0 0.0 193
+194 0.00206708908081055 0.0 0.0 0.0 194
+195 0.00206208229064941 0.0 0.0 0.0 195
+196 0.0020899772644043 0.0 0.0 0.0 196
+197 0.00205612182617188 0.00999999999999979 0.00999999999999979 0.0 197
+198 0.00205898284912109 0.0 0.0 0.0 198
+199 0.00208115577697754 0.0 0.0 0.0 199
+200 0.0020759105682373 0.0 0.0 0.0 200
+201 0.00205302238464355 0.00999999999999979 0.00999999999999979 0.0 201
+202 0.00206995010375977 0.0 0.0 0.0 202
+203 0.00206089019775391 0.0 0.0 0.0 203
+204 0.0020439624786377 0.0 0.0 0.0 204
+205 0.00207185745239258 0.0 0.0 0.0 205
+206 0.0020449161529541 0.00999999999999979 0.00999999999999979 0.0 206
+207 0.00223898887634277 0.0 0.0 0.0 207
+208 0.00205707550048828 0.0 0.0 0.0 208
+209 0.00206303596496582 0.0 0.0 0.0 209
+210 0.00205707550048828 0.0 0.0 0.0 210
+211 0.00204896926879883 0.0100000000000016 0.0100000000000016 0.0 211
+212 0.00204205513000488 0.0 0.0 0.0 212
+213 0.00211596488952637 0.0 0.0 0.0 213
+214 0.00206494331359863 0.0 0.0 0.0 214
+215 0.0020749568939209 0.0 0.0 0.0 215
+216 0.00206279754638672 0.00999999999999979 0.00999999999999979 0.0 216
+217 0.00206589698791504 0.0 0.0 0.0 217
+218 0.00207114219665527 0.0 0.0 0.0 218
+219 0.00208210945129395 0.0 0.0 0.0 219
+220 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 220
+221 0.00207304954528809 0.0 0.0 0.0 221
+222 0.00209498405456543 0.0 0.0 0.0 222
+223 0.0286588668823242 0.0299999999999994 0.0299999999999994 0.0 223
+224 0.00219297409057617 0.0 0.0 0.0 224
+225 0.00214004516601562 0.0 0.0 0.0 225
+226 0.00212192535400391 0.00999999999999979 0.00999999999999979 0.0 226
+227 0.00208878517150879 0.0 0.0 0.0 227
+228 0.00208306312561035 0.0 0.0 0.0 228
+229 0.00206398963928223 0.0 0.0 0.0 229
+230 0.00207996368408203 0.0 0.0 0.0 230
+231 0.00206494331359863 0.00999999999999979 0.00999999999999979 0.0 231
+232 0.00206494331359863 0.0 0.0 0.0 232
+233 0.0020751953125 0.0 0.0 0.0 233
+234 0.00207805633544922 0.0 0.0 0.0 234
+235 0.00206494331359863 0.0 0.0 0.0 235
+236 0.00206398963928223 0.00999999999999979 0.00999999999999979 0.0 236
+237 0.0020749568939209 0.0 0.0 0.0 237
+238 0.00206494331359863 0.0 0.0 0.0 238
+239 0.00206494331359863 0.0 0.0 0.0 239
+240 0.00205492973327637 0.0 0.0 0.0 240
+241 0.00206518173217773 0.0100000000000016 0.0100000000000016 0.0 241
+242 0.00207686424255371 0.0 0.0 0.0 242
+243 0.00204920768737793 0.0 0.0 0.0 243
+244 0.00206398963928223 0.0 0.0 0.0 244
+245 0.00206184387207031 0.00999999999999979 0.00999999999999979 0.0 245
+246 0.00205397605895996 0.0 0.0 0.0 246
+247 0.00206804275512695 0.0 0.0 0.0 247
+248 0.00204014778137207 0.0 0.0 0.0 248
+249 0.00206995010375977 0.0 0.0 0.0 249
+250 0.00205802917480469 0.00999999999999979 0.00999999999999979 0.0 250
+251 0.00205612182617188 0.0 0.0 0.0 251
+252 0.0020439624786377 0.0 0.0 0.0 252
+253 0.00204610824584961 0.0 0.0 0.0 253
+254 0.00206518173217773 0.0 0.0 0.0 254
+255 0.00204300880432129 0.00999999999999979 0.00999999999999979 0.0 255
+256 0.00205802917480469 0.0 0.0 0.0 256
+257 0.0020759105682373 0.0 0.0 0.0 257
+258 0.00206303596496582 0.0 0.0 0.0 258
+259 0.00207281112670898 0.0 0.0 0.0 259
+260 0.00205898284912109 0.00999999999999979 0.00999999999999979 0.0 260
+261 0.00205898284912109 0.0 0.0 0.0 261
+262 0.00205683708190918 0.0 0.0 0.0 262
+263 0.00207901000976562 0.0 0.0 0.0 263
+264 0.00206780433654785 0.00999999999999979 0.00999999999999979 0.0 264
+265 0.00208497047424316 0.0 0.0 0.0 265
+266 0.00219416618347168 0.0 0.0 0.0 266
+267 0.024918794631958 0.0199999999999996 0.0199999999999996 0.0 267
+268 0.00214409828186035 0.0100000000000016 0.0100000000000016 0.0 268
+269 0.0021209716796875 0.0 0.0 0.0 269
+270 0.00211095809936523 0.0 0.0 0.0 270
+271 0.00207209587097168 0.0 0.0 0.0 271
+272 0.0020902156829834 0.00999999999999979 0.00999999999999979 0.0 272
+273 0.00208091735839844 0.0 0.0 0.0 273
+274 0.00206494331359863 0.0 0.0 0.0 274
+275 0.00207281112670898 0.0 0.0 0.0 275
+276 0.00205397605895996 0.0 0.0 0.0 276
+277 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 277
+278 0.00206208229064941 0.0 0.0 0.0 278
+279 0.00205898284912109 0.0 0.0 0.0 279
+280 0.00207304954528809 0.0 0.0 0.0 280
+281 0.0020909309387207 0.0 0.0 0.0 281
+282 0.00206708908081055 0.00999999999999979 0.00999999999999979 0.0 282
+283 0.00206303596496582 0.0 0.0 0.0 283
+284 0.0020449161529541 0.0 0.0 0.0 284
+285 0.00206398963928223 0.0 0.0 0.0 285
+286 0.00204992294311523 0.0 0.0 0.0 286
+287 0.00205111503601074 0.00999999999999979 0.00999999999999979 0.0 287
+288 0.00205397605895996 0.0 0.0 0.0 288
+289 0.00206589698791504 0.0 0.0 0.0 289
+290 0.00206184387207031 0.0 0.0 0.0 290
+291 0.00207281112670898 0.00999999999999979 0.00999999999999979 0.0 291
+292 0.00205683708190918 0.0 0.0 0.0 292
+293 0.00205802917480469 0.0 0.0 0.0 293
+294 0.00206208229064941 0.0 0.0 0.0 294
+295 0.00205206871032715 0.0 0.0 0.0 295
+296 0.00206208229064941 0.00999999999999979 0.00999999999999979 0.0 296
+297 0.00205707550048828 0.0 0.0 0.0 297
+298 0.00207400321960449 0.0 0.0 0.0 298
+299 0.00205802917480469 0.0 0.0 0.0 299
+300 0.00205802917480469 0.0 0.0 0.0 300
+301 0.00207018852233887 0.00999999999999979 0.00999999999999979 0.0 301
+302 0.00206995010375977 0.0 0.0 0.0 302
+303 0.0021510124206543 0.0 0.0 0.0 303
+304 0.0020599365234375 0.0 0.0 0.0 304
+305 0.00206208229064941 0.0 0.0 0.0 305
+306 0.00221395492553711 0.0100000000000016 0.0100000000000016 0.0 306
+307 0.00210285186767578 0.0 0.0 0.0 307
+308 0.00223803520202637 0.0 0.0 0.0 308
+309 0.0020909309387207 0.0 0.0 0.0 309
+310 0.00207996368408203 0.00999999999999979 0.00999999999999979 0.0 310
+311 0.0255651473999023 0.0199999999999996 0.0199999999999996 0.0 311
+312 0.00424313545227051 0.00999999999999979 0.00999999999999979 0.0 312
+313 0.00345015525817871 0.0 0.0 0.0 313
+314 0.00213217735290527 0.0 0.0 0.0 314
+315 0.00210309028625488 0.0 0.0 0.0 315
+316 0.00207686424255371 0.00999999999999979 0.00999999999999979 0.0 316
+317 0.00207209587097168 0.0 0.0 0.0 317
+318 0.00213503837585449 0.0 0.0 0.0 318
+319 0.00294709205627441 0.0 0.0 0.0 319
+320 0.00207018852233887 0.00999999999999979 0.00999999999999979 0.0 320
+321 0.00208091735839844 0.0 0.0 0.0 321
+322 0.00208783149719238 0.0 0.0 0.0 322
+323 0.00208806991577148 0.0 0.0 0.0 323
+324 0.00208210945129395 0.0 0.0 0.0 324
+325 0.0020601749420166 0.00999999999999979 0.00999999999999979 0.0 325
+326 0.00206303596496582 0.0 0.0 0.0 326
+327 0.00205588340759277 0.0 0.0 0.0 327
+328 0.00206208229064941 0.0 0.0 0.0 328
+329 0.00205492973327637 0.0 0.0 0.0 329
+330 0.00205683708190918 0.00999999999999979 0.00999999999999979 0.0 330
+331 0.00205397605895996 0.0 0.0 0.0 331
+332 0.00206303596496582 0.0 0.0 0.0 332
+333 0.00205397605895996 0.0 0.0 0.0 333
+334 0.00205802917480469 0.0 0.0 0.0 334
+335 0.00204992294311523 0.0100000000000016 0.0100000000000016 0.0 335
+336 0.0020599365234375 0.0 0.0 0.0 336
+337 0.00216293334960938 0.0 0.0 0.0 337
+338 0.00204205513000488 0.0 0.0 0.0 338
+339 0.00208377838134766 0.00999999999999979 0.00999999999999979 0.0 339
+340 0.00212287902832031 0.0 0.0 0.0 340
+341 0.00205206871032715 0.0 0.0 0.0 341
+342 0.00207185745239258 0.0 0.0 0.0 342
+343 0.00206279754638672 0.0 0.0 0.0 343
+344 0.00204896926879883 0.00999999999999979 0.00999999999999979 0.0 344
+345 0.00205779075622559 0.0 0.0 0.0 345
+346 0.00207614898681641 0.0 0.0 0.0 346
+347 0.00204992294311523 0.0 0.0 0.0 347
+348 0.00206398963928223 0.0 0.0 0.0 348
+349 0.00206184387207031 0.00999999999999979 0.00999999999999979 0.0 349
+350 0.00206518173217773 0.0 0.0 0.0 350
+351 0.00207805633544922 0.0 0.0 0.0 351
+352 0.0020749568939209 0.0 0.0 0.0 352
+353 0.00208401679992676 0.0 0.0 0.0 353
+354 0.00214099884033203 0.00999999999999979 0.00999999999999979 0.0 354
+355 0.0242671966552734 0.0199999999999996 0.0199999999999996 0.0 355
+356 0.00216913223266602 0.0 0.0 0.0 356
+357 0.00213503837585449 0.00999999999999979 0.00999999999999979 0.0 357
+358 0.00212192535400391 0.0 0.0 0.0 358
+359 0.00210094451904297 0.0 0.0 0.0 359
+360 0.0020909309387207 0.0 0.0 0.0 360
+361 0.00209498405456543 0.0 0.0 0.0 361
+362 0.00208592414855957 0.0100000000000016 0.0100000000000016 0.0 362
+363 0.00206685066223145 0.0 0.0 0.0 363
+364 0.00205492973327637 0.0 0.0 0.0 364
+365 0.00207710266113281 0.0 0.0 0.0 365
+366 0.00207304954528809 0.0 0.0 0.0 366
+367 0.00205421447753906 0.0 0.0 0.0 367
+368 0.00206685066223145 0.0 0.0 0.0 368
+369 0.00206613540649414 0.0 0.0 0.0 369
+370 0.00255608558654785 0.0 0.0 0.0 370
+371 0.00206899642944336 0.00999999999999979 0.00999999999999979 0.0 371
+372 0.00216817855834961 0.0 0.0 0.0 372
+373 0.00214409828186035 0.0 0.0 0.0 373
+374 0.00205111503601074 0.0 0.0 0.0 374
+375 0.0020749568939209 0.0 0.0 0.0 375
+376 0.0020759105682373 0.00999999999999979 0.00999999999999979 0.0 376
+377 0.0020599365234375 0.0 0.0 0.0 377
+378 0.00207805633544922 0.0 0.0 0.0 378
+379 0.00205898284912109 0.0 0.0 0.0 379
+380 0.00205492973327637 0.0 0.0 0.0 380
+381 0.00205397605895996 0.00999999999999979 0.00999999999999979 0.0 381
+382 0.00205588340759277 0.0 0.0 0.0 382
+383 0.00204014778137207 0.0 0.0 0.0 383
+384 0.00204610824584961 0.0 0.0 0.0 384
+385 0.00206184387207031 0.0 0.0 0.0 385
+386 0.00203680992126465 0.00999999999999979 0.00999999999999979 0.0 386
+387 0.00206804275512695 0.0 0.0 0.0 387
+388 0.00205707550048828 0.0 0.0 0.0 388
+389 0.00206804275512695 0.0 0.0 0.0 389
+390 0.00206589698791504 0.00999999999999979 0.00999999999999979 0.0 390
+391 0.00206780433654785 0.0 0.0 0.0 391
+392 0.00206494331359863 0.0 0.0 0.0 392
+393 0.00206303596496582 0.0 0.0 0.0 393
+394 0.00204896926879883 0.0 0.0 0.0 394
+395 0.00207185745239258 0.00999999999999979 0.00999999999999979 0.0 395
+396 0.00207304954528809 0.0 0.0 0.0 396
+397 0.00208806991577148 0.0 0.0 0.0 397
+398 0.00208806991577148 0.0 0.0 0.0 398
+399 0.024277925491333 0.0300000000000011 0.0300000000000011 0.0 399
+400 0.00216102600097656 0.0 0.0 0.0 400
+401 0.00212621688842773 0.0 0.0 0.0 401
+402 0.00209689140319824 0.0 0.0 0.0 402
+403 0.00210285186767578 0.00999999999999979 0.00999999999999979 0.0 403
+404 0.00208210945129395 0.0 0.0 0.0 404
+405 0.00401806831359863 0.0 0.0 0.0 405
+406 0.00404691696166992 0.00999999999999979 0.00999999999999979 0.0 406
+407 0.00400710105895996 0.0 0.0 0.0 407
+408 0.00207805633544922 0.0 0.0 0.0 408
+409 0.00208497047424316 0.0 0.0 0.0 409
+410 0.0020751953125 0.00999999999999979 0.00999999999999979 0.0 410
+411 0.00208187103271484 0.0 0.0 0.0 411
+412 0.00213217735290527 0.0 0.0 0.0 412
+413 0.00207400321960449 0.0 0.0 0.0 413
+414 0.00206208229064941 0.0 0.0 0.0 414
+415 0.00206613540649414 0.00999999999999979 0.00999999999999979 0.0 415
+416 0.00204205513000488 0.0 0.0 0.0 416
+417 0.00208091735839844 0.0 0.0 0.0 417
+418 0.00227904319763184 0.0 0.0 0.0 418
+419 0.00206899642944336 0.00999999999999979 0.00999999999999979 0.0 419
+420 0.00207114219665527 0.0 0.0 0.0 420
+421 0.00207090377807617 0.0 0.0 0.0 421
+422 0.00204086303710938 0.0 0.0 0.0 422
+423 0.00205683708190918 0.0 0.0 0.0 423
+424 0.00205421447753906 0.00999999999999979 0.00999999999999979 0.0 424
+425 0.00205588340759277 0.0 0.0 0.0 425
+426 0.0020439624786377 0.0 0.0 0.0 426
+427 0.00203394889831543 0.0 0.0 0.0 427
+428 0.0020599365234375 0.0 0.0 0.0 428
+429 0.00205612182617188 0.0100000000000016 0.0100000000000016 0.0 429
+430 0.00206303596496582 0.0 0.0 0.0 430
+431 0.00206899642944336 0.0 0.0 0.0 431
+432 0.00206804275512695 0.0 0.0 0.0 432
+433 0.00212502479553223 0.0 0.0 0.0 433
+434 0.00207805633544922 0.00999999999999979 0.00999999999999979 0.0 434
+435 0.00205397605895996 0.0 0.0 0.0 435
+436 0.00214004516601562 0.0 0.0 0.0 436
+437 0.0020451545715332 0.0 0.0 0.0 437
+438 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 438
+439 0.00207805633544922 0.0 0.0 0.0 439
+440 0.00207304954528809 0.0 0.0 0.0 440
+441 0.00207090377807617 0.0 0.0 0.0 441
+442 0.0238261222839355 0.0299999999999994 0.0299999999999994 0.0 442
+443 0.00229191780090332 0.0 0.0 0.0 443
+444 0.00225210189819336 0.0 0.0 0.0 444
+445 0.00214314460754395 0.0 0.0 0.0 445
+446 0.00211405754089355 0.0 0.0 0.0 446
+447 0.0021059513092041 0.00999999999999979 0.00999999999999979 0.0 447
+448 0.00212502479553223 0.0 0.0 0.0 448
+449 0.00215005874633789 0.0 0.0 0.0 449
+450 0.00206708908081055 0.0 0.0 0.0 450
+451 0.00206208229064941 0.00999999999999979 0.00999999999999979 0.0 451
+452 0.00206995010375977 0.0 0.0 0.0 452
+453 0.00207304954528809 0.0 0.0 0.0 453
+454 0.00208711624145508 0.0 0.0 0.0 454
+455 0.00207400321960449 0.0 0.0 0.0 455
+456 0.00205802917480469 0.0100000000000016 0.0100000000000016 0.0 456
+457 0.00207400321960449 0.0 0.0 0.0 457
+458 0.00209999084472656 0.0 0.0 0.0 458
+459 0.00374412536621094 0.0 0.0 0.0 459
+460 0.00207614898681641 0.0 0.0 0.0 460
+461 0.00207996368408203 0.00999999999999979 0.00999999999999979 0.0 461
+462 0.00205206871032715 0.0 0.0 0.0 462
+463 0.00207209587097168 0.0 0.0 0.0 463
+464 0.00206708908081055 0.0 0.0 0.0 464
+465 0.00206398963928223 0.0 0.0 0.0 465
+466 0.00205302238464355 0.00999999999999979 0.00999999999999979 0.0 466
+467 0.00206995010375977 0.0 0.0 0.0 467
+468 0.00209617614746094 0.0 0.0 0.0 468
+469 0.00206899642944336 0.0 0.0 0.0 469
+470 0.0020451545715332 0.0 0.0 0.0 470
+471 0.00206589698791504 0.00999999999999979 0.00999999999999979 0.0 471
+472 0.0020442008972168 0.0 0.0 0.0 472
+473 0.00206089019775391 0.0 0.0 0.0 473
+474 0.00205492973327637 0.0 0.0 0.0 474
+475 0.00206708908081055 0.0 0.0 0.0 475
+476 0.00205087661743164 0.00999999999999979 0.00999999999999979 0.0 476
+477 0.00206589698791504 0.0 0.0 0.0 477
+478 0.00207209587097168 0.0 0.0 0.0 478
+479 0.00204992294311523 0.0 0.0 0.0 479
+480 0.00207209587097168 0.00999999999999979 0.00999999999999979 0.0 480
+481 0.0020599365234375 0.0 0.0 0.0 481
+482 0.00206613540649414 0.0 0.0 0.0 482
+483 0.00205898284912109 0.0 0.0 0.0 483
+484 0.00209403038024902 0.0 0.0 0.0 484
+485 0.00207710266113281 0.00999999999999979 0.00999999999999979 0.0 485
+486 0.0239040851593018 0.0200000000000014 0.0200000000000014 0.0 486
+487 0.00222492218017578 0.0 0.0 0.0 487
+488 0.00213289260864258 0.0 0.0 0.0 488
+489 0.0021212100982666 0.00999999999999979 0.00999999999999979 0.0 489
+490 0.0021059513092041 0.0 0.0 0.0 490
+491 0.00208616256713867 0.0 0.0 0.0 491
+492 0.00208687782287598 0.0 0.0 0.0 492
+493 0.00207901000976562 0.0 0.0 0.0 493
+494 0.00206494331359863 0.00999999999999979 0.00999999999999979 0.0 494
+495 0.00204300880432129 0.0 0.0 0.0 495
+496 0.00206112861633301 0.0 0.0 0.0 496
+497 0.00206708908081055 0.0 0.0 0.0 497
+498 0.0030369758605957 0.00999999999999979 0.00999999999999979 0.0 498
+499 0.00405597686767578 0.0 0.0 0.0 499
+500 0.00401997566223145 0.0 0.0 0.0 500
+501 0.0026099681854248 0.00999999999999979 0.00999999999999979 0.0 501
+502 0.00206303596496582 0.0 0.0 0.0 502
+503 0.00206589698791504 0.0 0.0 0.0 503
+504 0.00206708908081055 0.0 0.0 0.0 504
+505 0.00212311744689941 0.00999999999999979 0.00999999999999979 0.0 505
+506 0.00225090980529785 0.0 0.0 0.0 506
+507 0.00206089019775391 0.0 0.0 0.0 507
+508 0.00205683708190918 0.0 0.0 0.0 508
+509 0.00205397605895996 0.0 0.0 0.0 509
+510 0.00206184387207031 0.00999999999999979 0.00999999999999979 0.0 510
+511 0.00205707550048828 0.0 0.0 0.0 511
+512 0.00204896926879883 0.0 0.0 0.0 512
+513 0.00204920768737793 0.0 0.0 0.0 513
+514 0.00206398963928223 0.0 0.0 0.0 514
+515 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 515
+516 0.00204110145568848 0.0 0.0 0.0 516
+517 0.00205183029174805 0.0 0.0 0.0 517
+518 0.00206089019775391 0.0 0.0 0.0 518
+519 0.00207400321960449 0.00999999999999979 0.00999999999999979 0.0 519
+520 0.00206184387207031 0.0 0.0 0.0 520
+521 0.00205802917480469 0.0 0.0 0.0 521
+522 0.00205802917480469 0.0 0.0 0.0 522
+523 0.00206112861633301 0.0 0.0 0.0 523
+524 0.00215315818786621 0.0100000000000016 0.0100000000000016 0.0 524
+525 0.0020451545715332 0.0 0.0 0.0 525
+526 0.00207614898681641 0.0 0.0 0.0 526
+527 0.00208091735839844 0.0 0.0 0.0 527
+528 0.00208616256713867 0.0 0.0 0.0 528
+529 0.00211095809936523 0.00999999999999979 0.00999999999999979 0.0 529
+530 0.0298140048980713 0.0299999999999994 0.0299999999999994 0.0 530
+531 0.00220298767089844 0.0 0.0 0.0 531
+532 0.00216102600097656 0.0 0.0 0.0 532
+533 0.00211501121520996 0.0 0.0 0.0 533
+534 0.00208687782287598 0.00999999999999979 0.00999999999999979 0.0 534
+535 0.0021059513092041 0.0 0.0 0.0 535
+536 0.00210785865783691 0.0 0.0 0.0 536
+537 0.0020749568939209 0.0 0.0 0.0 537
+538 0.00207400321960449 0.0 0.0 0.0 538
+539 0.00206589698791504 0.00999999999999979 0.00999999999999979 0.0 539
+540 0.00211691856384277 0.0 0.0 0.0 540
+541 0.00208401679992676 0.0 0.0 0.0 541
+542 0.00206995010375977 0.0 0.0 0.0 542
+543 0.00206995010375977 0.0 0.0 0.0 543
+544 0.00207996368408203 0.00999999999999979 0.00999999999999979 0.0 544
+545 0.00206589698791504 0.0 0.0 0.0 545
+546 0.00207996368408203 0.0 0.0 0.0 546
+547 0.00207018852233887 0.0 0.0 0.0 547
+548 0.00206899642944336 0.0 0.0 0.0 548
+549 0.00207304954528809 0.0100000000000016 0.0100000000000016 0.0 549
+550 0.00206708908081055 0.0 0.0 0.0 550
+551 0.00209689140319824 0.0 0.0 0.0 551
+552 0.0020749568939209 0.0 0.0 0.0 552
+553 0.00207400321960449 0.00999999999999979 0.00999999999999979 0.0 553
+554 0.00207400321960449 0.0 0.0 0.0 554
+555 0.0020449161529541 0.0 0.0 0.0 555
+556 0.00207209587097168 0.0 0.0 0.0 556
+557 0.00205898284912109 0.0 0.0 0.0 557
+558 0.00214600563049316 0.00999999999999979 0.00999999999999979 0.0 558
+559 0.00205612182617188 0.0 0.0 0.0 559
+560 0.00207901000976562 0.0 0.0 0.0 560
+561 0.00205612182617188 0.0 0.0 0.0 561
+562 0.00205707550048828 0.0 0.0 0.0 562
+563 0.00205397605895996 0.00999999999999979 0.00999999999999979 0.0 563
+564 0.00207209587097168 0.0 0.0 0.0 564
+565 0.0020599365234375 0.0 0.0 0.0 565
+566 0.00208687782287598 0.0 0.0 0.0 566
+567 0.00206708908081055 0.00999999999999979 0.00999999999999979 0.0 567
+568 0.00205397605895996 0.0 0.0 0.0 568
+569 0.00206995010375977 0.0 0.0 0.0 569
+570 0.00204896926879883 0.0 0.0 0.0 570
+571 0.00208187103271484 0.0 0.0 0.0 571
+572 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 572
+573 0.0231339931488037 0.0199999999999996 0.0199999999999996 0.0 573
+574 0.00312709808349609 0.0 0.0 0.0 574
+575 0.00215601921081543 0.0 0.0 0.0 575
+576 0.00213813781738281 0.0100000000000016 0.0100000000000016 0.0 576
+577 0.00209593772888184 0.0 0.0 0.0 577
+578 0.00209403038024902 0.0 0.0 0.0 578
+579 0.00207901000976562 0.0 0.0 0.0 579
+580 0.00208401679992676 0.0 0.0 0.0 580
+581 0.00207114219665527 0.0 0.0 0.0 581
+582 0.00207710266113281 0.0 0.0 0.0 582
+583 0.00206685066223145 0.0 0.0 0.0 583
+584 0.00206184387207031 0.0 0.0 0.0 584
+585 0.00205588340759277 0.00999999999999979 0.00999999999999979 0.0 585
+586 0.0020751953125 0.0 0.0 0.0 586
+587 0.00206303596496582 0.0 0.0 0.0 587
+588 0.00206303596496582 0.0 0.0 0.0 588
+589 0.00205612182617188 0.0 0.0 0.0 589
+590 0.00207281112670898 0.00999999999999979 0.00999999999999979 0.0 590
+591 0.00385499000549316 0.0 0.0 0.0 591
+592 0.00404191017150879 0.0 0.0 0.0 592
+593 0.00359702110290527 0.00999999999999979 0.00999999999999979 0.0 593
+594 0.0020909309387207 0.0 0.0 0.0 594
+595 0.00204992294311523 0.0 0.0 0.0 595
+596 0.0020909309387207 0.0 0.0 0.0 596
+597 0.0020749568939209 0.00999999999999979 0.00999999999999979 0.0 597
+598 0.00209784507751465 0.0 0.0 0.0 598
+599 0.00205683708190918 0.0 0.0 0.0 599
+600 0.00203394889831543 0.0 0.0 0.0 600
+601 0.00205302238464355 0.0 0.0 0.0 601
+602 0.00205016136169434 0.00999999999999979 0.00999999999999979 0.0 602
+603 0.0020599365234375 0.0 0.0 0.0 603
+604 0.00205111503601074 0.0 0.0 0.0 604
+605 0.00206780433654785 0.0 0.0 0.0 605
+606 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 606
+607 0.00206804275512695 0.0 0.0 0.0 607
+608 0.0020439624786377 0.0 0.0 0.0 608
+609 0.00205683708190918 0.0 0.0 0.0 609
+610 0.00210785865783691 0.0 0.0 0.0 610
+611 0.00206685066223145 0.00999999999999979 0.00999999999999979 0.0 611
+612 0.00205206871032715 0.0 0.0 0.0 612
+613 0.00204706192016602 0.0 0.0 0.0 613
+614 0.00208616256713867 0.0 0.0 0.0 614
+615 0.00210213661193848 0.0 0.0 0.0 615
+616 0.0239150524139404 0.0300000000000011 0.0300000000000011 0.0 616
+617 0.00241804122924805 0.0 0.0 0.0 617
+618 0.00215888023376465 0.0 0.0 0.0 618
+619 0.00210809707641602 0.00999999999999979 0.00999999999999979 0.0 619
+620 0.00209403038024902 0.0 0.0 0.0 620
+621 0.00210905075073242 0.0 0.0 0.0 621
+622 0.00210404396057129 0.0 0.0 0.0 622
+623 0.00208401679992676 0.0 0.0 0.0 623
+624 0.00205111503601074 0.00999999999999979 0.00999999999999979 0.0 624
+625 0.00206303596496582 0.0 0.0 0.0 625
+626 0.0020599365234375 0.0 0.0 0.0 626
+627 0.00207400321960449 0.0 0.0 0.0 627
+628 0.0020759105682373 0.0 0.0 0.0 628
+629 0.00206995010375977 0.00999999999999979 0.00999999999999979 0.0 629
+630 0.0021660327911377 0.0 0.0 0.0 630
+631 0.00207710266113281 0.0 0.0 0.0 631
+632 0.00208401679992676 0.0 0.0 0.0 632
+633 0.00205492973327637 0.0 0.0 0.0 633
+634 0.00207018852233887 0.00999999999999979 0.00999999999999979 0.0 634
+635 0.00204586982727051 0.0 0.0 0.0 635
+636 0.00205898284912109 0.0 0.0 0.0 636
+637 0.0029301643371582 0.0 0.0 0.0 637
+638 0.00209999084472656 0.00999999999999979 0.00999999999999979 0.0 638
+639 0.00206685066223145 0.0 0.0 0.0 639
+640 0.00207400321960449 0.0 0.0 0.0 640
+641 0.00206184387207031 0.0 0.0 0.0 641
+642 0.00205183029174805 0.0 0.0 0.0 642
+643 0.0020592212677002 0.0100000000000016 0.0100000000000016 0.0 643
+644 0.00204300880432129 0.0 0.0 0.0 644
+645 0.00207090377807617 0.0 0.0 0.0 645
+646 0.00207710266113281 0.0 0.0 0.0 646
+647 0.00206089019775391 0.00999999999999979 0.00999999999999979 0.0 647
+648 0.00205516815185547 0.0 0.0 0.0 648
+649 0.0020599365234375 0.0 0.0 0.0 649
+650 0.00206398963928223 0.0 0.0 0.0 650
+651 0.00206279754638672 0.0 0.0 0.0 651
+652 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 652
+653 0.00206804275512695 0.0 0.0 0.0 653
+654 0.00207209587097168 0.0 0.0 0.0 654
+655 0.00206518173217773 0.0 0.0 0.0 655
+656 0.00206589698791504 0.0 0.0 0.0 656
+657 0.00209808349609375 0.00999999999999979 0.00999999999999979 0.0 657
+658 0.00213718414306641 0.0 0.0 0.0 658
+659 0.00212907791137695 0.0 0.0 0.0 659
+660 0.0242199897766113 0.0199999999999996 0.0199999999999996 0.0 660
+661 0.00217413902282715 0.0 0.0 0.0 661
+662 0.00212502479553223 0.0 0.0 0.0 662
+663 0.0021059513092041 0.0 0.0 0.0 663
+664 0.0020909309387207 0.0 0.0 0.0 664
+665 0.00208711624145508 0.00999999999999979 0.00999999999999979 0.0 665
+666 0.00214982032775879 0.0 0.0 0.0 666
+667 0.00213503837585449 0.0 0.0 0.0 667
+668 0.00210404396057129 0.0 0.0 0.0 668
+669 0.00216293334960938 0.0 0.0 0.0 669
+670 0.00207996368408203 0.0100000000000016 0.0100000000000016 0.0 670
+671 0.00222396850585938 0.0 0.0 0.0 671
+672 0.00205898284912109 0.0 0.0 0.0 672
+673 0.00205397605895996 0.0 0.0 0.0 673
+674 0.00206708908081055 0.00999999999999979 0.00999999999999979 0.0 674
+675 0.00205898284912109 0.0 0.0 0.0 675
+676 0.00207400321960449 0.0 0.0 0.0 676
+677 0.0020599365234375 0.0 0.0 0.0 677
+678 0.00206208229064941 0.0 0.0 0.0 678
+679 0.00206589698791504 0.00999999999999979 0.00999999999999979 0.0 679
+680 0.00203895568847656 0.0 0.0 0.0 680
+681 0.00205302238464355 0.0 0.0 0.0 681
+682 0.00205397605895996 0.0 0.0 0.0 682
+683 0.0020599365234375 0.0 0.0 0.0 683
+684 0.00207614898681641 0.00999999999999979 0.00999999999999979 0.0 684
+685 0.00306200981140137 0.0 0.0 0.0 685
+686 0.00403904914855957 0.0 0.0 0.0 686
+687 0.00366306304931641 0.00999999999999979 0.00999999999999979 0.0 687
+688 0.00224184989929199 0.0 0.0 0.0 688
+689 0.00207114219665527 0.0 0.0 0.0 689
+690 0.00205707550048828 0.0 0.0 0.0 690
+691 0.00207996368408203 0.00999999999999979 0.00999999999999979 0.0 691
+692 0.00224709510803223 0.0 0.0 0.0 692
+693 0.00273489952087402 0.0 0.0 0.0 693
+694 0.00208401679992676 0.0 0.0 0.0 694
+695 0.00205206871032715 0.00999999999999979 0.00999999999999979 0.0 695
+696 0.00206899642944336 0.0 0.0 0.0 696
+697 0.00205492973327637 0.0 0.0 0.0 697
+698 0.00207281112670898 0.0 0.0 0.0 698
+699 0.00207114219665527 0.0 0.0 0.0 699
+700 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 700
+701 0.00208711624145508 0.0 0.0 0.0 701
+702 0.0020899772644043 0.0 0.0 0.0 702
+703 0.0264170169830322 0.0300000000000011 0.0300000000000011 0.0 703
+704 0.00216817855834961 0.0 0.0 0.0 704
+705 0.00217700004577637 0.0 0.0 0.0 705
+706 0.00212311744689941 0.0 0.0 0.0 706
+707 0.0021059513092041 0.0 0.0 0.0 707
+708 0.00207686424255371 0.00999999999999979 0.00999999999999979 0.0 708
+709 0.00207686424255371 0.0 0.0 0.0 709
+710 0.00207209587097168 0.0 0.0 0.0 710
+711 0.00206804275512695 0.0 0.0 0.0 711
+712 0.00208497047424316 0.0 0.0 0.0 712
+713 0.00206303596496582 0.00999999999999979 0.00999999999999979 0.0 713
+714 0.00206899642944336 0.0 0.0 0.0 714
+715 0.00206398963928223 0.0 0.0 0.0 715
+716 0.00207996368408203 0.0 0.0 0.0 716
+717 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 717
+718 0.00205397605895996 0.0 0.0 0.0 718
+719 0.00206899642944336 0.0 0.0 0.0 719
+720 0.00207686424255371 0.0 0.0 0.0 720
+721 0.00207400321960449 0.0 0.0 0.0 721
+722 0.00207614898681641 0.00999999999999979 0.00999999999999979 0.0 722
+723 0.00206184387207031 0.0 0.0 0.0 723
+724 0.00207996368408203 0.0 0.0 0.0 724
+725 0.00208902359008789 0.0 0.0 0.0 725
+726 0.00206303596496582 0.0 0.0 0.0 726
+727 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 727
+728 0.00205898284912109 0.0 0.0 0.0 728
+729 0.00204992294311523 0.0 0.0 0.0 729
+730 0.00204205513000488 0.0 0.0 0.0 730
+731 0.00205898284912109 0.0 0.0 0.0 731
+732 0.00206422805786133 0.00999999999999979 0.00999999999999979 0.0 732
+733 0.00205898284912109 0.0 0.0 0.0 733
+734 0.00205111503601074 0.0 0.0 0.0 734
+735 0.00208902359008789 0.0 0.0 0.0 735
+736 0.00207805633544922 0.0100000000000016 0.0100000000000016 0.0 736
+737 0.00207400321960449 0.0 0.0 0.0 737
+738 0.00205492973327637 0.0 0.0 0.0 738
+739 0.0020751953125 0.0 0.0 0.0 739
+740 0.00207400321960449 0.0 0.0 0.0 740
+741 0.00206089019775391 0.00999999999999979 0.00999999999999979 0.0 741
+742 0.00254416465759277 0.0 0.0 0.0 742
+743 0.00206899642944336 0.0 0.0 0.0 743
+744 0.00208902359008789 0.0 0.0 0.0 744
+745 0.00208783149719238 0.0 0.0 0.0 745
+746 0.0239109992980957 0.0299999999999994 0.0299999999999994 0.0 746
+747 0.00231599807739258 0.0 0.0 0.0 747
+748 0.00217008590698242 0.0 0.0 0.0 748
+749 0.00211906433105469 0.0 0.0 0.0 749
+750 0.00209808349609375 0.00999999999999979 0.00999999999999979 0.0 750
+751 0.00207805633544922 0.0 0.0 0.0 751
+752 0.00208497047424316 0.0 0.0 0.0 752
+753 0.00206589698791504 0.0 0.0 0.0 753
+754 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 754
+755 0.00206089019775391 0.0 0.0 0.0 755
+756 0.00207114219665527 0.0 0.0 0.0 756
+757 0.0020759105682373 0.0 0.0 0.0 757
+758 0.00206613540649414 0.0 0.0 0.0 758
+759 0.00204706192016602 0.00999999999999979 0.00999999999999979 0.0 759
+760 0.00205898284912109 0.0 0.0 0.0 760
+761 0.0020749568939209 0.0 0.0 0.0 761
+762 0.00206208229064941 0.0 0.0 0.0 762
+763 0.00206804275512695 0.0 0.0 0.0 763
+764 0.00213193893432617 0.0100000000000016 0.0100000000000016 0.0 764
+765 0.00206494331359863 0.0 0.0 0.0 765
+766 0.00205707550048828 0.0 0.0 0.0 766
+767 0.00206589698791504 0.0 0.0 0.0 767
+768 0.00207901000976562 0.00999999999999979 0.00999999999999979 0.0 768
+769 0.00204682350158691 0.0 0.0 0.0 769
+770 0.00206899642944336 0.0 0.0 0.0 770
+771 0.00208497047424316 0.0 0.0 0.0 771
+772 0.00206398963928223 0.0 0.0 0.0 772
+773 0.00205683708190918 0.00999999999999979 0.00999999999999979 0.0 773
+774 0.00205397605895996 0.0 0.0 0.0 774
+775 0.00206184387207031 0.0 0.0 0.0 775
+776 0.00205206871032715 0.0 0.0 0.0 776
+777 0.00205802917480469 0.0 0.0 0.0 777
+778 0.00281596183776855 0.00999999999999979 0.00999999999999979 0.0 778
+779 0.00403189659118652 0.0 0.0 0.0 779
+780 0.00367498397827148 0.0 0.0 0.0 780
+781 0.00383210182189941 0.00999999999999979 0.00999999999999979 0.0 781
+782 0.00206995010375977 0.0 0.0 0.0 782
+783 0.00206804275512695 0.0 0.0 0.0 783
+784 0.00208091735839844 0.00999999999999979 0.00999999999999979 0.0 784
+785 0.00210189819335938 0.0 0.0 0.0 785
+786 0.00206494331359863 0.0 0.0 0.0 786
+787 0.00209212303161621 0.0 0.0 0.0 787
+788 0.00208687782287598 0.0 0.0 0.0 788
+789 0.0249569416046143 0.0299999999999994 0.0299999999999994 0.0 789
+790 0.00217914581298828 0.0 0.0 0.0 790
+791 0.00213813781738281 0.0 0.0 0.0 791
+792 0.00213003158569336 0.0100000000000016 0.0100000000000016 0.0 792
+793 0.00212001800537109 0.0 0.0 0.0 793
+794 0.00209903717041016 0.0 0.0 0.0 794
+795 0.0021519660949707 0.0 0.0 0.0 795
+796 0.0020749568939209 0.0 0.0 0.0 796
+797 0.00205802917480469 0.00999999999999979 0.00999999999999979 0.0 797
+798 0.00208711624145508 0.0 0.0 0.0 798
+799 0.00205707550048828 0.0 0.0 0.0 799
+800 0.00207114219665527 0.0 0.0 0.0 800
+801 0.00207710266113281 0.0 0.0 0.0 801
+802 0.00207400321960449 0.00999999999999979 0.00999999999999979 0.0 802
+803 0.00207686424255371 0.0 0.0 0.0 803
+804 0.00207185745239258 0.0 0.0 0.0 804
+805 0.00206398963928223 0.0 0.0 0.0 805
+806 0.00205898284912109 0.0 0.0 0.0 806
+807 0.00205302238464355 0.00999999999999979 0.00999999999999979 0.0 807
+808 0.00205397605895996 0.0 0.0 0.0 808
+809 0.00205206871032715 0.0 0.0 0.0 809
+810 0.00205111503601074 0.0 0.0 0.0 810
+811 0.0020749568939209 0.00999999999999979 0.00999999999999979 0.0 811
+812 0.00206279754638672 0.0 0.0 0.0 812
+813 0.00205302238464355 0.0 0.0 0.0 813
+814 0.00204801559448242 0.0 0.0 0.0 814
+815 0.00205302238464355 0.0 0.0 0.0 815
+816 0.00206995010375977 0.00999999999999979 0.00999999999999979 0.0 816
+817 0.00208091735839844 0.0 0.0 0.0 817
+818 0.00214910507202148 0.0 0.0 0.0 818
+819 0.00205802917480469 0.0 0.0 0.0 819
+820 0.00217890739440918 0.0 0.0 0.0 820
+821 0.00206398963928223 0.00999999999999979 0.00999999999999979 0.0 821
+822 0.00204706192016602 0.0 0.0 0.0 822
+823 0.00205111503601074 0.0 0.0 0.0 823
+824 0.00206804275512695 0.0 0.0 0.0 824
+825 0.00206089019775391 0.00999999999999979 0.00999999999999979 0.0 825
+826 0.00207018852233887 0.0 0.0 0.0 826
+827 0.00208306312561035 0.0 0.0 0.0 827
+828 0.00205206871032715 0.0 0.0 0.0 828
+829 0.00206398963928223 0.0 0.0 0.0 829
+830 0.00209403038024902 0.0100000000000016 0.0100000000000016 0.0 830
+831 0.00208497047424316 0.0 0.0 0.0 831
+832 0.023939847946167 0.0199999999999996 0.0199999999999996 0.0 832
+833 0.00230288505554199 0.0 0.0 0.0 833
+834 0.0021669864654541 0.00999999999999979 0.00999999999999979 0.0 834
+835 0.00211286544799805 0.0 0.0 0.0 835
+836 0.0021059513092041 0.0 0.0 0.0 836
+837 0.00207304954528809 0.0 0.0 0.0 837
+838 0.0020749568939209 0.0 0.0 0.0 838
+839 0.00204682350158691 0.00999999999999979 0.00999999999999979 0.0 839
+840 0.00207400321960449 0.0 0.0 0.0 840
+841 0.0020592212677002 0.0 0.0 0.0 841
+842 0.00206589698791504 0.0 0.0 0.0 842
+843 0.00207114219665527 0.00999999999999979 0.00999999999999979 0.0 843
+844 0.00207304954528809 0.0 0.0 0.0 844
+845 0.00208091735839844 0.0 0.0 0.0 845
+846 0.00206303596496582 0.0 0.0 0.0 846
+847 0.00208115577697754 0.0 0.0 0.0 847
+848 0.00204992294311523 0.00999999999999979 0.00999999999999979 0.0 848
+849 0.00209403038024902 0.0 0.0 0.0 849
+850 0.00208497047424316 0.0 0.0 0.0 850
+851 0.00206804275512695 0.0 0.0 0.0 851
+852 0.00207209587097168 0.0 0.0 0.0 852
+853 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 853
+854 0.0021519660949707 0.0 0.0 0.0 854
+855 0.00205707550048828 0.0 0.0 0.0 855
+856 0.00204801559448242 0.0 0.0 0.0 856
+857 0.00205111503601074 0.0100000000000016 0.0100000000000016 0.0 857
+858 0.00204992294311523 0.0 0.0 0.0 858
+859 0.00207304954528809 0.0 0.0 0.0 859
+860 0.00205898284912109 0.0 0.0 0.0 860
+861 0.00205802917480469 0.0 0.0 0.0 861
+862 0.00205397605895996 0.00999999999999979 0.00999999999999979 0.0 862
+863 0.00206089019775391 0.0 0.0 0.0 863
+864 0.00206780433654785 0.0 0.0 0.0 864
+865 0.00206708908081055 0.0 0.0 0.0 865
+866 0.00214815139770508 0.0 0.0 0.0 866
+867 0.00205397605895996 0.00999999999999979 0.00999999999999979 0.0 867
+868 0.00206112861633301 0.0 0.0 0.0 868
+869 0.00206589698791504 0.0 0.0 0.0 869
+870 0.00207686424255371 0.0 0.0 0.0 870
+871 0.00206613540649414 0.0 0.0 0.0 871
+872 0.00345492362976074 0.00999999999999979 0.00999999999999979 0.0 872
+873 0.00410318374633789 0.0 0.0 0.0 873
+874 0.00406002998352051 0.00999999999999979 0.00999999999999979 0.0 874
+875 0.0259261131286621 0.0199999999999996 0.0199999999999996 0.0 875
+876 0.00219607353210449 0.0 0.0 0.0 876
+877 0.00211405754089355 0.00999999999999979 0.00999999999999979 0.0 877
+878 0.00212407112121582 0.0 0.0 0.0 878
+879 0.00208306312561035 0.0 0.0 0.0 879
+880 0.00209808349609375 0.0 0.0 0.0 880
+881 0.00233793258666992 0.0 0.0 0.0 881
+882 0.00206804275512695 0.00999999999999979 0.00999999999999979 0.0 882
+883 0.0020759105682373 0.0 0.0 0.0 883
+884 0.00209188461303711 0.0 0.0 0.0 884
+885 0.00206899642944336 0.0 0.0 0.0 885
+886 0.00205397605895996 0.0100000000000016 0.0100000000000016 0.0 886
+887 0.00205588340759277 0.0 0.0 0.0 887
+888 0.00216484069824219 0.0 0.0 0.0 888
+889 0.00208091735839844 0.0 0.0 0.0 889
+890 0.0020751953125 0.0 0.0 0.0 890
+891 0.00336885452270508 0.00999999999999979 0.00999999999999979 0.0 891
+892 0.00415396690368652 0.0 0.0 0.0 892
+893 0.0037381649017334 0.00999999999999979 0.00999999999999979 0.0 893
+894 0.00412487983703613 0.0 0.0 0.0 894
+895 0.00375986099243164 0.0 0.0 0.0 895
+896 0.00278496742248535 0.00999999999999979 0.00999999999999979 0.0 896
+897 0.00209403038024902 0.0 0.0 0.0 897
+898 0.00205516815185547 0.0 0.0 0.0 898
+899 0.00205516815185547 0.0 0.0 0.0 899
+900 0.00203704833984375 0.0 0.0 0.0 900
+901 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 901
+902 0.00205421447753906 0.0 0.0 0.0 902
+903 0.0020599365234375 0.0 0.0 0.0 903
+904 0.00206089019775391 0.0 0.0 0.0 904
+905 0.00207686424255371 0.00999999999999979 0.00999999999999979 0.0 905
+906 0.00207209587097168 0.0 0.0 0.0 906
+907 0.00205898284912109 0.0 0.0 0.0 907
+908 0.00206112861633301 0.0 0.0 0.0 908
+909 0.00209903717041016 0.0 0.0 0.0 909
+910 0.00206708908081055 0.00999999999999979 0.00999999999999979 0.0 910
+911 0.00206804275512695 0.0 0.0 0.0 911
+912 0.00206804275512695 0.0 0.0 0.0 912
+913 0.00207805633544922 0.0 0.0 0.0 913
+914 0.00206613540649414 0.0 0.0 0.0 914
+915 0.00205707550048828 0.00999999999999979 0.00999999999999979 0.0 915
+916 0.00208497047424316 0.0 0.0 0.0 916
+917 0.00207996368408203 0.0 0.0 0.0 917
+918 0.0248808860778809 0.0300000000000011 0.0300000000000011 0.0 918
+919 0.00217318534851074 0.0 0.0 0.0 919
+920 0.00228309631347656 0.0 0.0 0.0 920
+921 0.00214815139770508 0.0 0.0 0.0 921
+922 0.00209498405456543 0.0 0.0 0.0 922
+923 0.00209903717041016 0.00999999999999979 0.00999999999999979 0.0 923
+924 0.00206685066223145 0.0 0.0 0.0 924
+925 0.00208783149719238 0.0 0.0 0.0 925
+926 0.0020751953125 0.0 0.0 0.0 926
+927 0.0020599365234375 0.00999999999999979 0.00999999999999979 0.0 927
+928 0.00206398963928223 0.0 0.0 0.0 928
+929 0.00207400321960449 0.0 0.0 0.0 929
+930 0.00224184989929199 0.0 0.0 0.0 930
+931 0.00207209587097168 0.0 0.0 0.0 931
+932 0.00207114219665527 0.00999999999999979 0.00999999999999979 0.0 932
+933 0.00206995010375977 0.0 0.0 0.0 933
+934 0.00206613540649414 0.0 0.0 0.0 934
+935 0.00207114219665527 0.0 0.0 0.0 935
+936 0.00207901000976562 0.0 0.0 0.0 936
+937 0.00206494331359863 0.00999999999999979 0.00999999999999979 0.0 937
+938 0.0020751953125 0.0 0.0 0.0 938
+939 0.00211882591247559 0.0 0.0 0.0 939
+940 0.00212502479553223 0.0 0.0 0.0 940
+941 0.00206303596496582 0.0 0.0 0.0 941
+942 0.00205111503601074 0.00999999999999979 0.00999999999999979 0.0 942
+943 0.00204205513000488 0.0 0.0 0.0 943
+944 0.00206303596496582 0.0 0.0 0.0 944
+945 0.00205516815185547 0.0 0.0 0.0 945
+946 0.00206208229064941 0.0100000000000016 0.0100000000000016 0.0 946
+947 0.00205683708190918 0.0 0.0 0.0 947
+948 0.00204181671142578 0.0 0.0 0.0 948
+949 0.00206589698791504 0.0 0.0 0.0 949
+950 0.0020451545715332 0.0 0.0 0.0 950
+951 0.00209593772888184 0.00999999999999979 0.00999999999999979 0.0 951
+952 0.00205802917480469 0.0 0.0 0.0 952
+953 0.0020751953125 0.0 0.0 0.0 953
+954 0.00205492973327637 0.0 0.0 0.0 954
+955 0.00206303596496582 0.0 0.0 0.0 955
+956 0.00206112861633301 0.00999999999999979 0.00999999999999979 0.0 956
+957 0.00208592414855957 0.0 0.0 0.0 957
+958 0.00208497047424316 0.0 0.0 0.0 958
+959 0.00207114219665527 0.0 0.0 0.0 959
+960 0.0264370441436768 0.0299999999999994 0.0299999999999994 0.0 960
+961 0.00537300109863281 0.0 0.0 0.0 961
+962 0.00217485427856445 0.0 0.0 0.0 962
+963 0.00213003158569336 0.0 0.0 0.0 963
+964 0.00212383270263672 0.0 0.0 0.0 964
+965 0.0021059513092041 0.0 0.0 0.0 965
+966 0.0020909309387207 0.0 0.0 0.0 966
+967 0.00208091735839844 0.00999999999999979 0.00999999999999979 0.0 967
+968 0.00207018852233887 0.0 0.0 0.0 968
+969 0.00207185745239258 0.0 0.0 0.0 969
+970 0.00205111503601074 0.0 0.0 0.0 970
+971 0.00208306312561035 0.0 0.0 0.0 971
+972 0.00212502479553223 0.00999999999999979 0.00999999999999979 0.0 972
+973 0.00206995010375977 0.0 0.0 0.0 973
+974 0.0020749568939209 0.0 0.0 0.0 974
+975 0.0020749568939209 0.0 0.0 0.0 975
+976 0.00205898284912109 0.0 0.0 0.0 976
+977 0.00207304954528809 0.0100000000000016 0.0100000000000016 0.0 977
+978 0.00208806991577148 0.0 0.0 0.0 978
+979 0.00207090377807617 0.0 0.0 0.0 979
+980 0.00214314460754395 0.0 0.0 0.0 980
+981 0.00208497047424316 0.00999999999999979 0.00999999999999979 0.0 981
+982 0.00206112861633301 0.0 0.0 0.0 982
+983 0.00220704078674316 0.0 0.0 0.0 983
+984 0.00206184387207031 0.0 0.0 0.0 984
+985 0.00206589698791504 0.0 0.0 0.0 985
+986 0.00204014778137207 0.00999999999999979 0.00999999999999979 0.0 986
+987 0.00205302238464355 0.0 0.0 0.0 987
+988 0.00204801559448242 0.0 0.0 0.0 988
+989 0.0020439624786377 0.0 0.0 0.0 989
+990 0.00206494331359863 0.0 0.0 0.0 990
+991 0.00205516815185547 0.00999999999999979 0.00999999999999979 0.0 991
+992 0.0020599365234375 0.0 0.0 0.0 992
+993 0.00205802917480469 0.0 0.0 0.0 993
+994 0.0021820068359375 0.0 0.0 0.0 994
+995 0.00206708908081055 0.0 0.0 0.0 995
+996 0.00205802917480469 0.00999999999999979 0.00999999999999979 0.0 996
+997 0.00205183029174805 0.0 0.0 0.0 997
+998 0.00205588340759277 0.0 0.0 0.0 998
+999 0.00207781791687012 0.0 0.0 0.0 999
+1000 0.00205588340759277 0.0 0.0 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat
new file mode 100644
index 0000000..d7d9487
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.00528996763305527
+3 -0.0138044594871689
+4 -0.0208681851283985
+5 -0.0229957953064787
+6 -0.0234292596261009
+7 -0.0233334130282492
+8 -0.0241516165777752
+9 -0.0241644202341525
+10 -0.0231287425073633
+11 -0.0221175625393535
+12 -0.0186101437936229
+13 -0.0156353533961561
+14 -0.0188403159027361
+15 -0.0180504812480117
+16 -0.0217450273227108
+17 -0.0247063596763229
+18 -0.022001265884962
+19 -0.0178556473266542
+20 -0.0204164647356919
+21 -0.0182966079953989
+22 -0.0211862321337847
+23 -0.0194789850013599
+24 -0.0177742253841285
+25 -0.0092503749482194
+26 -0.00746819898929803
+27 -0.00487803332820888
+28 -0.00735913264216409
+29 -0.0094394794377043
+30 -0.0102366066065294
+31 -0.0111156180663134
+32 -0.0157818671782769
+33 -0.0168016431622766
+34 -0.0163332307175096
+35 -0.0175436530212509
+36 -0.0223712161905215
+37 -0.0219314894935517
+38 -0.0227830748204048
+39 -0.0193824105679253
+40 -0.0204213811978047
+41 -0.0174876805960081
+42 -0.0192426282967821
+43 -0.0191023286022659
+44 -0.024469189862908
+45 -0.0248594429598138
+46 -0.024075293188514
+47 -0.0231590035654209
+48 -0.0226253872291486
+49 -0.0224682138682447
+50 -0.0218129103220923
+51 -0.0192654328544414
+52 -0.0147320037081153
+53 0.272452233337269
+54 0.435015820040845
+55 0.200430320069216
+56 -0.017516322722285
+57 -0.0206134354119561
+58 -0.0216729701700104
+59 -0.0218336495632955
+60 -0.0220087456364863
+61 -0.0221961766164921
+62 -0.0220196148858699
+63 -0.0196199273707057
+64 -0.0175555144594074
+65 -0.0157115875281919
+66 -0.0178703168441715
+67 -0.020014167059419
+68 -0.0226085951821202
+69 -0.0214388900491651
+70 -0.0226874815779736
+71 -0.0209263363718717
+72 -0.0186668218529576
+73 -0.0190861172260196
+74 -0.0165844428487903
+75 -0.0183297192997319
+76 -0.0196886608427949
+77 -0.0172252505382256
+78 -0.0127282633379294
+79 -0.0118674197279215
+80 -0.00761080829361313
+81 -0.00745049886576533
+82 -0.00437801934505245
+83 -0.00530855529011354
+84 -0.00941286938636584
+85 -0.0107154791645881
+86 -0.015323870013456
+87 -0.012519266967711
+88 -0.0149736969801129
+89 -0.021651681277203
+90 -0.0230618749379273
+91 -0.0168683483705937
+92 -0.0192914563246245
+93 -0.0149596795587543
+94 -0.0156422337243361
+95 -0.0212673261015622
+96 -0.021939557403789
+97 -0.0201423837801739
+98 -0.0236606423193213
+99 -0.0214696557426392
+100 -0.0224265353446497
+101 -0.0214300874958868
+102 -0.0215321124434072
+103 -0.0196750526265947
+104 -0.0164815420539262
+105 0.153451795677057
+106 0.152304917983925
+107 0.269683604711283
+108 0.163866062031231
+109 0.0917700861184397
+110 -0.0154344686250538
+111 -0.0160009187714221
+112 -0.0181194294640359
+113 -0.0198996862071363
+114 -0.0210940088036923
+115 -0.0202294695724758
+116 -0.0201134577323488
+117 -0.0176142238854856
+118 -0.0179934480509661
+119 -0.0184941333999111
+120 -0.0209217833739569
+121 -0.0193706489699845
+122 -0.0212596356685163
+123 -0.0193402304952815
+124 -0.0168126115507807
+125 -0.0168285157052044
+126 -0.0178485073702407
+127 -0.0153236968353027
+128 -0.0172450763888923
+129 -0.0181958874426915
+130 -0.019599041433368
+131 -0.012097521583517
+132 -0.0144122698713183
+133 -0.0132513281935601
+134 -0.00875555666212923
+135 -0.00361627820509766
+136 -0.000259967785037514
+137 -0.00805847419201842
+138 -0.012649535174109
+139 -0.0145979054471083
+140 -0.0107561179136776
+141 -0.0136228025301689
+142 -0.0159619507661417
+143 -0.0191425909401178
+144 -0.0163101158814417
+145 -0.012129043859938
+146 -0.0151299875018323
+147 -0.0203386298647967
+148 -0.0209988316244983
+149 -0.0219068901698134
+150 -0.0224671072591489
+151 -0.0170418184704867
+152 -0.0201957214089058
+153 -0.0205846116271679
+154 -0.0199413534929481
+155 -0.0179691672443825
+156 -0.0150768539756268
+157 0.0995215742652554
+158 0.0981837663624077
+159 0.0931229461077249
+160 0.21175246910869
+161 0.105079528542058
+162 0.0913032756563397
+163 0.0339528356592639
+164 -0.0182805568898494
+165 -0.0193574268532822
+166 -0.019701338364763
+167 -0.0189643836934548
+168 -0.0188745629207454
+169 -0.0165737067851004
+170 -0.0158076140033874
+171 -0.0161004869746426
+172 -0.0195930716982896
+173 -0.0182623379689477
+174 -0.0200811074454518
+175 -0.0187342710910368
+176 -0.0166229225659487
+177 -0.0167237872378271
+178 -0.0201685104197428
+179 -0.0165324418353769
+180 -0.0129150606429465
+181 -0.0169169105724671
+182 -0.017078473759628
+183 -0.018127591763309
+184 -0.0112307423687399
+185 -0.0134591703948938
+186 -0.0122816446332828
+187 -0.0167129471183761
+188 -0.00633335732749837
+189 -0.00217094534395089
+190 -0.003176289001772
+191 -0.0057871656139901
+192 -0.0115873213117581
+193 -0.00896702930637471
+194 -0.0120418100687928
+195 -0.0123921707383441
+196 -0.0172084711453154
+197 -0.0152400714377606
+198 -0.0111285496578555
+199 -0.0142340919577057
+200 -0.0192937621671048
+201 -0.0197880163686053
+202 -0.020849567081396
+203 -0.0198406262700084
+204 -0.0194104738114594
+205 -0.0148131274163057
+206 -0.0192079248734278
+207 -0.0187094339560537
+208 -0.0190732730711229
+209 0.0361934269621865
+210 0.0870917883041551
+211 0.0444891209616575
+212 0.0955027397552937
+213 0.154654506121038
+214 0.102102013193298
+215 0.0494447139937405
+216 0.0904567636647291
+217 -0.0152749334062708
+218 -0.0146608967815647
+219 -0.0147668855748172
+220 -0.0156264119143688
+221 -0.0169494608304957
+222 -0.0174532100041555
+223 -0.0180837899501967
+224 -0.0182277488931129
+225 -0.0161001752368341
+226 -0.0184991832755056
+227 -0.016936119098065
+228 -0.0148320934940219
+229 -0.015273255697935
+230 -0.0182123818891898
+231 -0.0138871665097331
+232 -0.0127350570541541
+233 -0.011100664599431
+234 -0.0138609863092704
+235 -0.0175586417976635
+236 -0.0148120796895902
+237 -0.01123198970569
+238 -0.00918469713802285
+239 -0.0144957683440811
+240 -0.0150294602056943
+241 -0.00892087391044469
+242 -0.0074976007380235
+243 -0.00500305299854478
+244 -0.0041320746296184
+245 -0.00691667857012371
+246 -0.00750372968060234
+247 -0.0107390437617496
+248 -0.0107754591390794
+249 -0.0174172611999561
+250 -0.0074172610106474
+251 -0.0112726180927846
+252 -0.0128024469916435
+253 -0.0177232020585621
+254 -0.0182539224409683
+255 -0.0178084592664765
+256 -0.0179231847033095
+257 -0.0176658037985606
+258 -0.0130046634117232
+259 -0.0176477704146573
+260 -0.0172408298470646
+261 -0.0173835849314203
+262 0.0885923665459635
+263 0.0358142986092356
+264 0.0500197172082544
+265 0.0969438699174651
+266 0.0998188153355495
+267 0.100534469863311
+268 0.0434275152967989
+269 0.0463586746755651
+270 0.0357679483900484
+271 -0.0163390926804664
+272 -0.0166539709796274
+273 -0.0166872870497804
+274 -0.017774068427573
+275 -0.01744643501098
+276 -0.0170706050536218
+277 -0.0147966340538359
+278 -0.0178408200541161
+279 -0.0149580558209695
+280 -0.0131592631424661
+281 -0.0131550961874815
+282 -0.0170541425549732
+283 -0.0136965468472329
+284 -0.0127321644242889
+285 -0.013612710529614
+286 -0.0110213426857256
+287 -0.0173230618274653
+288 -0.0169456472401162
+289 -0.0137220306520902
+290 -0.00961119036236773
+291 -0.00803307600491271
+292 -0.0130753503992976
+293 -0.010061738788462
+294 -0.0128263508570457
+295 -0.00871944477256595
+296 -0.0110828266355735
+297 -0.00145913051022751
+298 -0.00503831545783849
+299 -0.00613255184823567
+300 -0.00317532255742617
+301 -0.0110344422659596
+302 -0.0133994629637518
+303 -0.00711499446473252
+304 -0.00989738058293298
+305 -0.011298222554831
+306 -0.0163568500491007
+307 -0.0172224634424476
+308 -0.016917507184404
+309 -0.0169070421736616
+310 -0.0163226499986189
+311 -0.016000223795697
+312 -0.0128559262318566
+313 -0.0163027746090817
+314 0.0367233579233198
+315 0.0342463768168967
+316 0.0392659770656562
+317 0.0503244855684373
+318 0.106836752186508
+319 0.0428611079691666
+320 0.0947673606581728
+321 0.0404266507177676
+322 0.0422539004134698
+323 0.046712070413077
+324 -0.01386005988438
+325 -0.0129602628678002
+326 -0.0128410216627282
+327 -0.013938492679744
+328 -0.0142137469756705
+329 -0.0135606375602427
+330 -0.0147616165618841
+331 -0.0152730174282578
+332 -0.0157757882742451
+333 -0.0159444484008054
+334 -0.0159291528868275
+335 -0.0125715321584254
+336 -0.0113945717528155
+337 -0.0126919884793404
+338 -0.0120634295155063
+339 -0.0132222456876789
+340 -0.0149011205134109
+341 -0.0112134307887339
+342 -0.00765611064427073
+343 -0.00812543527107914
+344 -0.0116729541542833
+345 -0.00968419876956315
+346 -0.0121532305148415
+347 -0.0128180241822045
+348 -0.0111731767567057
+349 -0.0110495088050017
+350 -0.00474012274853909
+351 -0.0037753856041303
+352 -0.00712557226243535
+353 -0.00254605671801213
+354 -0.00896555258188561
+355 -0.0111612047310962
+356 -0.00590533525415532
+357 -0.00840289962801529
+358 -0.0101831986911947
+359 -0.0147234273517197
+360 -0.0144572278847782
+361 -0.0153686584343928
+362 -0.0152089345642079
+363 -0.0151495230806089
+364 -0.0137849851202231
+365 -0.0104713526164238
+366 -0.0148077561021853
+367 0.0376152434167216
+368 0.0388904481596711
+369 0.0403627453868288
+370 0.0513758553433587
+371 0.107917898362666
+372 -0.00798200125691471
+373 0.093360263223118
+374 0.0414198673418266
+375 0.0393249984524126
+376 0.0385926575483875
+377 -0.0144476804559933
+378 -0.0139841878291661
+379 -0.0139656533470585
+380 -0.0141040067753594
+381 -0.014560155301369
+382 -0.0135420823152173
+383 -0.0145222675144676
+384 -0.014460155395546
+385 -0.0139959464489686
+386 -0.0138565068907983
+387 -0.0107326956886409
+388 -0.0110916304860035
+389 -0.0103687114713454
+390 -0.0109128112118145
+391 -0.0116952906973984
+392 -0.0135898535414944
+393 -0.0111540378855234
+394 -0.0103451114918221
+395 -0.00764288243223634
+396 -0.0111929653049535
+397 -0.00834039400762986
+398 -0.0122045257479647
+399 -0.00873973826972888
+400 -0.0110201500772717
+401 -0.00961579587076197
+402 -0.0131269667654366
+403 -0.00727683817981296
+404 -0.00189532678702501
+405 -0.0069679001311242
+406 -0.001107723493968
+407 -0.0032276027306313
+408 -0.00832965485216551
+409 -0.00619183401785534
+410 -0.00411170215472319
+411 -0.00737621873809235
+412 -0.0127249132834817
+413 -0.012360725256073
+414 -0.0139619534335789
+415 -0.0141106553759734
+416 -0.0133572727396227
+417 -0.0136325555164283
+418 -0.00934211074118071
+419 -0.0138978954665086
+420 0.0419144448041395
+421 0.0398516060966593
+422 0.0412341286880762
+423 0.0638570301312163
+424 0.0510869302001157
+425 0.0457777338184318
+426 0.0404413480661733
+427 0.03921924550858
+428 0.0407807393162245
+429 0.0390318225210268
+430 -0.0131869917758382
+431 -0.0131264891895899
+432 -0.0122572780353557
+433 -0.0113077056806523
+434 -0.00997101803890706
+435 -0.00912977714210345
+436 -0.0107250321456603
+437 -0.0114964596837888
+438 -0.0124446657069589
+439 -0.0132452844526251
+440 -0.0134871442198044
+441 -0.0134721722474661
+442 -0.0129760608103375
+443 -0.0135083529746117
+444 -0.00963739106708388
+445 -0.00960193173592791
+446 -0.00868490827989549
+447 -0.00562468586891634
+448 -0.00853085467733999
+449 -0.00565929471677666
+450 -0.011223863255388
+451 -0.00966138501976315
+452 -0.0090354154607024
+453 -0.00713189903764993
+454 -0.011915762088822
+455 -0.0119958054757221
+456 -0.00993992005512065
+457 -0.00969020982773293
+458 -0.00823692240018265
+459 -0.000762137019254547
+460 -0.0020574939054943
+461 -0.00301533448841631
+462 -0.0048914231194836
+463 -0.00351910868759082
+464 -0.00684827660431788
+465 -0.0116186865393049
+466 -0.011300766713872
+467 -0.0125877507082846
+468 -0.0122940688703853
+469 -0.0117006004743094
+470 -0.0120808872890787
+471 -0.0079558659705616
+472 -0.0121146783942612
+473 0.0430539568135278
+474 0.0413747171665245
+475 0.0523499660199948
+476 0.0583608476822571
+477 -0.00619124151362362
+478 0.100261603489863
+479 -0.0115737946916181
+480 0.0410488267232732
+481 0.0394584957178085
+482 0.0409791183648626
+483 -0.0114608582351028
+484 -0.0105762029046014
+485 -0.0107944072761537
+486 -0.0112852025771194
+487 -0.0117263968065824
+488 -0.0110523616082281
+489 -0.0119497692898177
+490 -0.0116197924803783
+491 -0.0118402671059512
+492 -0.011897810344265
+493 -0.0118894488668558
+494 -0.0119264743252911
+495 -0.0114690161171001
+496 -0.00731323308517564
+497 -0.00809920804780606
+498 -0.00742970488647833
+499 -0.00511857473147858
+500 -0.00847898987161735
+501 -0.00820255817878669
+502 -0.0114261236985163
+503 -0.0115203134210467
+504 -0.00860290050483073
+505 -0.00826598998994287
+506 -0.00724980855887389
+507 -0.0115572629089065
+508 -0.0102803597313671
+509 -0.00869596301166451
+510 -0.00845394207419729
+511 -0.0117046810178094
+512 -0.00179199508390725
+513 -0.00107544976391358
+514 3.80706993328397e-05
+515 -0.000596554636898724
+516 -0.00357817525748314
+517 -0.00275478226050938
+518 -0.00770597808246832
+519 -0.00966201636724091
+520 -0.0101235465897374
+521 -0.0101536171271843
+522 -0.011155833269644
+523 -0.0110476185961753
+524 -0.00669564292913809
+525 -0.0110511552401975
+526 0.0440369068608864
+527 0.0512502905452455
+528 0.0486364491522985
+529 -0.00947573738593063
+530 0.0556902385103537
+531 0.048793011831808
+532 0.0459173634094269
+533 -0.0106409633397968
+534 0.0407992456018877
+535 0.039174303444095
+536 -0.0108360842113073
+537 -0.0100788835149665
+538 -0.010254912645359
+539 -0.0100259263673741
+540 -0.00990611735032563
+541 -0.0094032789969041
+542 -0.00950843747839274
+543 -0.00845625372492551
+544 -0.00866941515320219
+545 -0.00846124322850009
+546 -0.00914497373023597
+547 -0.00993847480108134
+548 -0.0075404949330402
+549 -0.0105738813921492
+550 -0.00995220250924118
+551 -0.00737345302781976
+552 -0.00705109912188471
+553 -0.00701139365327054
+554 -0.0100844014809053
+555 -0.00967040948412226
+556 -0.00555743993134012
+557 -0.00567368083508669
+558 -0.00579497136824869
+559 -0.00863244150774459
+560 -0.00886461549077306
+561 -0.0071079244280313
+562 -0.00724638263714693
+563 -0.0106271670963377
+564 -0.011037491565844
+565 -0.00536963936657175
+566 -0.00611090090733861
+567 -0.0028887251775724
+568 -0.00191043898745117
+569 -0.00127008538342651
+570 -0.00355834410328823
+571 -0.00455486576193576
+572 -0.00787475936794373
+573 -0.00788070911313194
+574 -0.0095868651265576
+575 -0.00951475112345576
+576 -0.0093743009207885
+577 -0.00547534007201022
+578 -0.00937228540429001
+579 0.0550319460420979
+580 0.0480645516151382
+581 -0.00734599404058905
+582 0.0460830024666069
+583 0.0576848767980736
+584 -0.00479751472149516
+585 0.0476440575581396
+586 0.0440509543394544
+587 -0.0092326530313669
+588 0.0416175571960497
+589 -0.0085697744475703
+590 -0.00849597671001137
+591 -0.00868661526356155
+592 -0.00914985829952541
+593 -0.00899659236078795
+594 -0.00852948984142705
+595 -0.00914967236793954
+596 -0.00874291045968585
+597 -0.00901928709184545
+598 -0.00893752387862559
+599 -0.00891224538068911
+600 -0.00651845952670981
+601 -0.00883751161943683
+602 -0.0089038138028028
+603 -0.00557038586902196
+604 -0.00528015885880997
+605 -0.00549258943084052
+606 -0.00885043870546068
+607 -0.00888233763605627
+608 -0.00534145902438052
+609 -0.00549755365130086
+610 -0.00543696053556694
+611 -0.00822523019438649
+612 -0.00872078038906415
+613 -0.00768752566683437
+614 -0.00581778171379135
+615 -0.00582391899839174
+616 -0.00928453417405443
+617 -0.00967264668427969
+618 -0.00459002993915674
+619 -0.005950987566855
+620 -0.00566913223974097
+621 -0.00449639995945585
+622 0.000563029103117738
+623 -0.000478567451764753
+624 -0.00478545037303475
+625 -0.00138436078321331
+626 -0.00658049012770183
+627 -0.00727390808805458
+628 -0.00826948198171915
+629 -0.00802863304649895
+630 -0.00440359258641195
+631 -0.00781572985833776
+632 0.0467875647495199
+633 -0.0075634487605479
+634 0.0452825901031108
+635 0.047802503065829
+636 -0.00771441065516206
+637 0.0579827980967365
+638 -0.00344424350631554
+639 0.0474617155307238
+640 0.0443214745845027
+641 -0.00763674418359978
+642 -0.00783330048033026
+643 -0.00741506274953657
+644 -0.00766182032871294
+645 -0.00746333175586923
+646 -0.00774981281309243
+647 -0.00721405105565235
+648 -0.00748309956829258
+649 -0.00693846930808117
+650 -0.00687260605509018
+651 -0.00680305016519336
+652 -0.00392232393463165
+653 -0.00596409981793424
+654 -0.00637091532208361
+655 -0.0070021295658497
+656 -0.00745369558153276
+657 -0.00748127195784389
+658 -0.00764575146706985
+659 -0.00720638844475823
+660 -0.00404423858223977
+661 -0.00405994477085238
+662 -0.00403357383109679
+663 -0.00648614706767544
+664 -0.00685104080751668
+665 -0.0055280793955573
+666 -0.00315266716147567
+667 -0.00289308426512229
+668 -0.0072907609350431
+669 -0.00778772320057429
+670 -0.00488230712792173
+671 -0.00428235797819206
+672 -0.00192624881716949
+673 -0.00690255454554318
+674 -0.00713932385460058
+675 -0.00190412691550018
+676 -0.00393717929429579
+677 -0.00322818496016548
+678 -0.00243123536539799
+679 -0.00325588623994424
+680 -0.00538550295619236
+681 -0.00569794784977527
+682 -0.00289248819958694
+683 -0.00674738254274132
+684 -0.00654327601801023
+685 -0.00642602661328291
+686 0.0487750013526658
+687 0.047351094119514
+688 -0.00634438713740084
+689 0.0483969866326635
+690 -0.00631126189370909
+691 0.0575822184504765
+692 -0.00221791722280226
+693 0.0478438468160886
+694 -0.00601391341772256
+695 -0.0056575420242112
+696 -0.00594331685758806
+697 -0.00602482896673149
+698 -0.00605358459658212
+699 -0.00573917550488335
+700 -0.00612440997777024
+701 -0.00585399571222659
+702 -0.00621035443994097
+703 -0.00577194218906833
+704 -0.00613669297980652
+705 -0.00603898494035611
+706 -0.00619657263267714
+707 -0.00631266537086359
+708 -0.00624176954936451
+709 -0.006493542110829
+710 -0.00641811359085571
+711 -0.00580520415695734
+712 -0.00254464054715768
+713 -0.00229049693565925
+714 -0.00260111893418342
+715 -0.00527998866629625
+716 -0.00580492472038456
+717 -0.00465763013855649
+718 -0.00291794763769027
+719 -0.0026170818255646
+720 -0.00635539773199271
+721 -0.00671950951784405
+722 -0.00681695170475915
+723 -0.00342054050102763
+724 -0.00275560859414933
+725 -0.000438510861243582
+726 -0.00560480727876819
+727 -0.0041561152883926
+728 -0.00600365300527431
+729 -0.00265123271948093
+730 -0.00264290423293351
+731 -0.00282174940291308
+732 -0.00138157106781404
+733 -0.00215366901979637
+734 -0.00419250836135037
+735 -0.000767184920404968
+736 -0.00550222672199026
+737 -0.00539179599992564
+738 -0.00519932278664982
+739 0.0503886317719632
+740 -0.00520071436244274
+741 0.0475171927490064
+742 -0.0054330140398667
+743 0.047917953696494
+744 -0.00493698211328358
+745 0.0578078065249347
+746 -0.00102406638326662
+747 -0.00351464407443385
+748 -0.00471808955799036
+749 -0.00466085562121167
+750 -0.00504216853601972
+751 -0.00491478851728083
+752 -0.00511582115647942
+753 -0.00510690407002076
+754 -0.00467115492125063
+755 -0.00507292488280625
+756 -0.00469600377226158
+757 -0.00479060778969928
+758 -0.00466814567292629
+759 -0.00459391587926426
+760 -0.00459367283047094
+761 -0.00456390630082813
+762 -0.00455517712581946
+763 -0.00444580816383878
+764 -0.00414375346682848
+765 -0.00462598085672905
+766 -0.00499924843048424
+767 -0.00393636209693802
+768 -0.00456718162991524
+769 -0.00323237519329591
+770 -0.00148778939855011
+771 -0.00156596659778741
+772 -0.00512915993874979
+773 -0.00492227748379505
+774 -0.00510090567121982
+775 -0.00134085402411959
+776 -0.000327698557656855
+777 -8.39604799222434e-05
+778 -0.00353180377704261
+779 -0.000884661451432567
+780 -0.00538269466798041
+781 -0.00550165919535478
+782 -0.00474894345489591
+783 -0.00166595007800424
+784 -0.00164486517145988
+785 -0.0035315332501745
+786 -0.00381711953376717
+787 0.000511414240780713
+788 -0.00386876867596389
+789 -0.00388546637330086
+790 -0.00381782963314221
+791 -0.00381978862023741
+792 -0.00375421982535356
+793 0.0509990813856318
+794 -0.00381674314240938
+795 0.0477092429318382
+796 -0.00346493764501739
+797 0.0486187069130531
+798 -0.00339231221033292
+799 -0.00372220200580609
+800 -0.00287181937082116
+801 -0.00282120299186121
+802 -0.00303246455350132
+803 -0.00274260094361711
+804 -0.00310003295922211
+805 -0.00318965584106337
+806 -0.0031124174327327
+807 -0.00296156129101724
+808 -0.00261410724164222
+809 -0.00304904712449122
+810 -0.00281829350522029
+811 -0.00334413423907794
+812 -0.00324558699946082
+813 -0.00321794842161168
+814 -0.00321688033495476
+815 -0.00315375940221917
+816 -0.00336252254507409
+817 -0.00338748787969201
+818 -0.0034301958497396
+819 -0.00328180304356289
+820 -0.00258348401263859
+821 -0.00151860018638174
+822 0.000385489721472849
+823 0.000485212390458467
+824 -0.00320045213749609
+825 -0.00360387425612046
+826 -0.00368875452847038
+827 -0.000252971173092802
+828 0.000274558167106639
+829 0.000415225492461183
+830 -0.00244928117799424
+831 -0.00157932593327874
+832 -0.00367396988363851
+833 -0.00159554367802162
+834 -0.00368044170833197
+835 -0.00381051495784578
+836 -0.00324391585440044
+837 8.26736255865406e-05
+838 0.000153133563221676
+839 0.00199072719691019
+840 -0.00225648039461718
+841 -0.00274833553045294
+842 -0.0025524575347716
+843 -0.00266988934954553
+844 -0.00255016712114302
+845 -0.00249982952647676
+846 -0.00252451553899371
+847 0.0509521741597566
+848 -0.00203584084600686
+849 0.0482575025076935
+850 -0.00222502592695146
+851 -0.00243295457553993
+852 -0.00170644617880928
+853 -0.00187578228348824
+854 -0.00189936420623392
+855 -0.00181014970183154
+856 -0.0019587407113103
+857 -0.00203035618973669
+858 -0.00200647352201275
+859 -0.00193357132846691
+860 -0.00203929593752837
+861 -0.00206047244950508
+862 -0.00172974796194137
+863 -0.00222152628496213
+864 -0.00176469161067378
+865 -0.00214628615471073
+866 -0.00223274820098944
+867 -0.00192609654692526
+868 -0.00160052707734799
+869 -0.00117491475685682
+870 -0.00172104022111683
+871 -0.00197669922228011
+872 -0.00200394021725799
+873 -0.00221174196880852
+874 -0.00214414888155639
+875 -0.0022418657462635
+876 -0.00224815601970618
+877 -0.00217548907899938
+878 -0.00219023215478833
+879 0.00103657148517733
+880 0.00170021752346762
+881 0.00176856581251282
+882 -0.00119486637524174
+883 -0.000182189717262493
+884 -0.00231669994116794
+885 -0.00235562044940596
+886 -0.00240760288834928
+887 -0.000369271736430893
+888 -0.00246106212268728
+889 -0.00248445436295954
+890 -0.00240055220436233
+891 0.00124694319822849
+892 -0.00238841299541467
+893 -0.00120964260603448
+894 -0.00108173638550143
+895 -0.00126617766611188
+896 -0.00126735332683995
+897 -0.00132493094338301
+898 -0.00127297814761722
+899 -0.00107541591903143
+900 -0.00078859473755685
+901 0.0515056301543915
+902 -0.000768818460590909
+903 -0.00107659176705549
+904 -0.000363324073519261
+905 -0.000435897358878675
+906 -0.000440171834594805
+907 -0.000337150215603847
+908 -0.000521457828934685
+909 -0.000601509879478592
+910 -0.000562536656253432
+911 -0.000540431206158033
+912 -0.000585521045810499
+913 -0.000647443311740879
+914 -0.000652572655245648
+915 -0.000754504564741441
+916 -0.00026111034852018
+917 -0.000614503803880769
+918 -0.00028306248528981
+919 -0.00062103454712342
+920 -0.00080789702501966
+921 -0.000857347553194396
+922 -0.000973273096392423
+923 -0.00071891921707499
+924 -0.000852123727546584
+925 -0.000908061110978231
+926 -0.000897846447493529
+927 -0.00107192184892616
+928 -0.00103558075120389
+929 -0.000858383868863735
+930 -0.00100410240556484
+931 0.00217861450591949
+932 0.00284094109416015
+933 0.00290236058075264
+934 -4.67766974110993e-06
+935 -0.00115598145065964
+936 -0.00115889264986191
+937 -0.00120477520403814
+938 -0.0011160907820447
+939 -0.00122108572337335
+940 -0.00129438459340121
+941 -0.0012642472236683
+942 -0.00112755293175713
+943 0.00267094176933998
+944 -0.00127265229053917
+945 -0.00128120069665366
+946 -0.00125730796622217
+947 -0.000161188927728071
+948 -0.00018709473550969
+949 -0.000202988378879946
+950 -0.000298277929635308
+951 -0.000228270818099919
+952 -0.000234161898233589
+953 -0.00026231090883195
+954 -0.000188222581526064
+955 -3.12448503073219e-05
+956 0.000717016504105383
+957 0.000690863879115161
+958 0.000699560885968165
+959 0.000642085039518387
+960 0.000647697652791968
+961 0.000599074112689629
+962 0.000575154175297893
+963 0.000549298287923788
+964 0.000516895100767751
+965 0.000505782209635087
+966 0.000468256937777253
+967 0.000443201508212851
+968 0.000422857688527172
+969 0.000396172202507289
+970 0.000378968023322664
+971 0.000356781808907751
+972 0.000335281879557104
+973 0.000318039116828582
+974 0.00029453308441855
+975 0.000267951475057331
+976 0.000246035263474985
+977 0.000289581453389937
+978 0.000348007228990331
+979 0.00040460593179165
+980 0.000411143906352345
+981 0.000381827800477813
+982 0.000355749114743507
+983 0.000330472553418517
+984 0.000310675137741401
+985 0.000285966709056265
+986 0.000261731425090165
+987 0.000237012405074174
+988 0.000215826766435867
+989 0.000273446389041168
+990 0.000248883730962565
+991 0.000224615155659346
+992 0.000200129222402582
+993 0.000177275060030199
+994 0.00015277663830548
+995 0.000128527059295642
+996 0.000102904910816061
+997 8.05504321850845e-05
+998 5.85820006378074e-05
+999 3.63637004327478e-05
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat
new file mode 100644
index 0000000..8844c14
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.00191903114318848 0.0 0.0 0.0 1
+2 0.00184082984924316 0.0 0.0 0.0 2
+3 0.00179791450500488 0.0 0.0 0.0 3
+4 0.00180506706237793 0.0100000000000016 0.0100000000000016 0.0 4
+5 0.00179386138916016 0.0 0.0 0.0 5
+6 0.00174307823181152 0.0 0.0 0.0 6
+7 0.00177001953125 0.0 0.0 0.0 7
+8 0.00175905227661133 0.0 0.0 0.0 8
+9 0.00177288055419922 0.00999999999999801 0.00999999999999801 0.0 9
+10 0.00176692008972168 0.0 0.0 0.0 10
+11 0.00176906585693359 0.0 0.0 0.0 11
+12 0.0017549991607666 0.0 0.0 0.0 12
+13 0.00345110893249512 0.0 0.0 0.0 13
+14 0.0018010139465332 0.0100000000000016 0.0100000000000016 0.0 14
+15 0.0017697811126709 0.0 0.0 0.0 15
+16 0.00174093246459961 0.0 0.0 0.0 16
+17 0.00175905227661133 0.0 0.0 0.0 17
+18 0.00176501274108887 0.0 0.0 0.0 18
+19 0.00176501274108887 0.0 0.0 0.0 19
+20 0.00175905227661133 0.00999999999999801 0.00999999999999801 0.0 20
+21 0.00173807144165039 0.0 0.0 0.0 21
+22 0.00222587585449219 0.0 0.0 0.0 22
+23 0.00347685813903809 0.0 0.0 0.0 23
+24 0.00342988967895508 0.0100000000000016 0.0100000000000016 0.0 24
+25 0.00312495231628418 0.0 0.0 0.0 25
+26 0.00174784660339355 0.0 0.0 0.0 26
+27 0.00174403190612793 0.0 0.0 0.0 27
+28 0.00174093246459961 0.0100000000000016 0.0100000000000016 0.0 28
+29 0.00173211097717285 0.0 0.0 0.0 29
+30 0.00176692008972168 0.0 0.0 0.0 30
+31 0.00176620483398438 0.0 0.0 0.0 31
+32 0.00179195404052734 0.0 0.0 0.0 32
+33 0.0017549991607666 0.0 0.0 0.0 33
+34 0.00172591209411621 0.0 0.0 0.0 34
+35 0.00174117088317871 0.0 0.0 0.0 35
+36 0.00173783302307129 0.0 0.0 0.0 36
+37 0.00174689292907715 0.0 0.0 0.0 37
+38 0.00173211097717285 0.0 0.0 0.0 38
+39 0.00174999237060547 0.0100000000000016 0.0100000000000016 0.0 39
+40 0.00176692008972168 0.0 0.0 0.0 40
+41 0.00172901153564453 0.0 0.0 0.0 41
+42 0.00174593925476074 0.0 0.0 0.0 42
+43 0.00175309181213379 0.0 0.0 0.0 43
+44 0.00175905227661133 0.0 0.0 0.0 44
+45 0.00176715850830078 0.00999999999999801 0.00999999999999801 0.0 45
+46 0.00174784660339355 0.0 0.0 0.0 46
+47 0.0017399787902832 0.0 0.0 0.0 47
+48 0.00174307823181152 0.0 0.0 0.0 48
+49 0.00180912017822266 0.0 0.0 0.0 49
+50 0.00175309181213379 0.0100000000000016 0.0100000000000016 0.0 50
+51 0.0017399787902832 0.0 0.0 0.0 51
+52 0.00176811218261719 0.0 0.0 0.0 52
+53 0.00176596641540527 0.0 0.0 0.0 53
+54 0.00189590454101562 0.0 0.0 0.0 54
+55 0.024507999420166 0.0299999999999976 0.0299999999999976 0.0 55
+56 0.00197005271911621 0.0 0.0 0.0 56
+57 0.00185298919677734 0.0 0.0 0.0 57
+58 0.00178289413452148 0.0 0.0 0.0 58
+59 0.00177383422851562 0.0 0.0 0.0 59
+60 0.00178122520446777 0.0100000000000016 0.0100000000000016 0.0 60
+61 0.00177597999572754 0.0 0.0 0.0 61
+62 0.00182914733886719 0.0 0.0 0.0 62
+63 0.00176692008972168 0.0 0.0 0.0 63
+64 0.00177502632141113 0.0 0.0 0.0 64
+65 0.00175118446350098 0.0100000000000016 0.0100000000000016 0.0 65
+66 0.00176286697387695 0.0 0.0 0.0 66
+67 0.00175809860229492 0.0 0.0 0.0 67
+68 0.00176095962524414 0.0 0.0 0.0 68
+69 0.0017540454864502 0.0 0.0 0.0 69
+70 0.00175094604492188 0.0 0.0 0.0 70
+71 0.00176000595092773 0.00999999999999801 0.00999999999999801 0.0 71
+72 0.00174784660339355 0.0 0.0 0.0 72
+73 0.00272703170776367 0.0 0.0 0.0 73
+74 0.00178098678588867 0.0 0.0 0.0 74
+75 0.0017540454864502 0.0 0.0 0.0 75
+76 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 76
+77 0.00174784660339355 0.0 0.0 0.0 77
+78 0.00176095962524414 0.0 0.0 0.0 78
+79 0.00175094604492188 0.0 0.0 0.0 79
+80 0.00174617767333984 0.0 0.0 0.0 80
+81 0.00176286697387695 0.00999999999999801 0.00999999999999801 0.0 81
+82 0.00174784660339355 0.0 0.0 0.0 82
+83 0.0017402172088623 0.0 0.0 0.0 83
+84 0.00174093246459961 0.0 0.0 0.0 84
+85 0.00174880027770996 0.0 0.0 0.0 85
+86 0.00174283981323242 0.0 0.0 0.0 86
+87 0.0017549991607666 0.0100000000000016 0.0100000000000016 0.0 87
+88 0.00175690650939941 0.0 0.0 0.0 88
+89 0.0017390251159668 0.0 0.0 0.0 89
+90 0.0017399787902832 0.0 0.0 0.0 90
+91 0.00176286697387695 0.0 0.0 0.0 91
+92 0.00174093246459961 0.00999999999999801 0.00999999999999801 0.0 92
+93 0.00173306465148926 0.0 0.0 0.0 93
+94 0.00173091888427734 0.0 0.0 0.0 94
+95 0.00175118446350098 0.0 0.0 0.0 95
+96 0.00173187255859375 0.0 0.0 0.0 96
+97 0.00177407264709473 0.0 0.0 0.0 97
+98 0.00174498558044434 0.0100000000000016 0.0100000000000016 0.0 98
+99 0.00173783302307129 0.0 0.0 0.0 99
+100 0.00174283981323242 0.0 0.0 0.0 100
+101 0.0017549991607666 0.0 0.0 0.0 101
+102 0.00173020362854004 0.0 0.0 0.0 102
+103 0.00172805786132812 0.0 0.0 0.0 103
+104 0.00174784660339355 0.0 0.0 0.0 104
+105 0.00175786018371582 0.0 0.0 0.0 105
+106 0.00176501274108887 0.0 0.0 0.0 106
+107 0.00174784660339355 0.0 0.0 0.0 107
+108 0.00176095962524414 0.0 0.0 0.0 108
+109 0.0247871875762939 0.0299999999999976 0.0299999999999976 0.0 109
+110 0.0018157958984375 0.0 0.0 0.0 110
+111 0.00183296203613281 0.0 0.0 0.0 111
+112 0.00179004669189453 0.0 0.0 0.0 112
+113 0.00177502632141113 0.0100000000000016 0.0100000000000016 0.0 113
+114 0.00177502632141113 0.0 0.0 0.0 114
+115 0.00174498558044434 0.0 0.0 0.0 115
+116 0.00174808502197266 0.0 0.0 0.0 116
+117 0.00175595283508301 0.0 0.0 0.0 117
+118 0.00174808502197266 0.00999999999999801 0.00999999999999801 0.0 118
+119 0.00177216529846191 0.0 0.0 0.0 119
+120 0.0017540454864502 0.0 0.0 0.0 120
+121 0.00176286697387695 0.0 0.0 0.0 121
+122 0.00176787376403809 0.0 0.0 0.0 122
+123 0.00175905227661133 0.0 0.0 0.0 123
+124 0.0017549991607666 0.0100000000000016 0.0100000000000016 0.0 124
+125 0.00174403190612793 0.0 0.0 0.0 125
+126 0.00174903869628906 0.0 0.0 0.0 126
+127 0.00180387496948242 0.0 0.0 0.0 127
+128 0.00177502632141113 0.0 0.0 0.0 128
+129 0.00175595283508301 0.00999999999999801 0.00999999999999801 0.0 129
+130 0.00174903869628906 0.0 0.0 0.0 130
+131 0.00176501274108887 0.0 0.0 0.0 131
+132 0.00191903114318848 0.0 0.0 0.0 132
+133 0.0034480094909668 0.0 0.0 0.0 133
+134 0.00341916084289551 0.0100000000000016 0.0100000000000016 0.0 134
+135 0.00260114669799805 0.0 0.0 0.0 135
+136 0.00203084945678711 0.0 0.0 0.0 136
+137 0.00176596641540527 0.0 0.0 0.0 137
+138 0.00175189971923828 0.0100000000000016 0.0100000000000016 0.0 138
+139 0.00176119804382324 0.0 0.0 0.0 139
+140 0.00174784660339355 0.0 0.0 0.0 140
+141 0.00173783302307129 0.0 0.0 0.0 141
+142 0.00179481506347656 0.0 0.0 0.0 142
+143 0.00173401832580566 0.00999999999999801 0.00999999999999801 0.0 143
+144 0.00175189971923828 0.0 0.0 0.0 144
+145 0.00174188613891602 0.0 0.0 0.0 145
+146 0.0017549991607666 0.0 0.0 0.0 146
+147 0.00174808502197266 0.0 0.0 0.0 147
+148 0.00174498558044434 0.0 0.0 0.0 148
+149 0.00174307823181152 0.0100000000000016 0.0100000000000016 0.0 149
+150 0.00175595283508301 0.0 0.0 0.0 150
+151 0.0017549991607666 0.0 0.0 0.0 151
+152 0.00174403190612793 0.0 0.0 0.0 152
+153 0.00174808502197266 0.0 0.0 0.0 153
+154 0.00174403190612793 0.0 0.0 0.0 154
+155 0.00183796882629395 0.00999999999999801 0.00999999999999801 0.0 155
+156 0.00176095962524414 0.0 0.0 0.0 156
+157 0.0017399787902832 0.0 0.0 0.0 157
+158 0.00181007385253906 0.0 0.0 0.0 158
+159 0.00175905227661133 0.0 0.0 0.0 159
+160 0.00177717208862305 0.0100000000000016 0.0100000000000016 0.0 160
+161 0.00175380706787109 0.0 0.0 0.0 161
+162 0.00177097320556641 0.0 0.0 0.0 162
+163 0.0254480838775635 0.0199999999999996 0.0199999999999996 0.0 163
+164 0.00185108184814453 0.00999999999999801 0.00999999999999801 0.0 164
+165 0.00188708305358887 0.0 0.0 0.0 165
+166 0.00177788734436035 0.0 0.0 0.0 166
+167 0.00183510780334473 0.0 0.0 0.0 167
+168 0.00177812576293945 0.0 0.0 0.0 168
+169 0.00177502632141113 0.0100000000000016 0.0100000000000016 0.0 169
+170 0.00174593925476074 0.0 0.0 0.0 170
+171 0.00176692008972168 0.0 0.0 0.0 171
+172 0.00175786018371582 0.0 0.0 0.0 172
+173 0.00176501274108887 0.0 0.0 0.0 173
+174 0.0018000602722168 0.0100000000000016 0.0100000000000016 0.0 174
+175 0.00176095962524414 0.0 0.0 0.0 175
+176 0.00175714492797852 0.0 0.0 0.0 176
+177 0.00174999237060547 0.0 0.0 0.0 177
+178 0.00176191329956055 0.0 0.0 0.0 178
+179 0.00175786018371582 0.0 0.0 0.0 179
+180 0.00174117088317871 0.00999999999999801 0.00999999999999801 0.0 180
+181 0.00177001953125 0.0 0.0 0.0 181
+182 0.00176095962524414 0.0 0.0 0.0 182
+183 0.00174903869628906 0.0 0.0 0.0 183
+184 0.00174093246459961 0.0 0.0 0.0 184
+185 0.00174307823181152 0.0 0.0 0.0 185
+186 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 186
+187 0.00175189971923828 0.0 0.0 0.0 187
+188 0.00173711776733398 0.0 0.0 0.0 188
+189 0.00221514701843262 0.0 0.0 0.0 189
+190 0.00177502632141113 0.0 0.0 0.0 190
+191 0.00176811218261719 0.00999999999999801 0.00999999999999801 0.0 191
+192 0.00185799598693848 0.0 0.0 0.0 192
+193 0.00174903869628906 0.0 0.0 0.0 193
+194 0.00174379348754883 0.0 0.0 0.0 194
+195 0.0017399787902832 0.0 0.0 0.0 195
+196 0.00173401832580566 0.0100000000000016 0.0100000000000016 0.0 196
+197 0.00172996520996094 0.0 0.0 0.0 197
+198 0.00173401832580566 0.0 0.0 0.0 198
+199 0.00182390213012695 0.0 0.0 0.0 199
+200 0.00174784660339355 0.0 0.0 0.0 200
+201 0.0017549991607666 0.0 0.0 0.0 201
+202 0.00174307823181152 0.00999999999999801 0.00999999999999801 0.0 202
+203 0.00172710418701172 0.0 0.0 0.0 203
+204 0.00174283981323242 0.0 0.0 0.0 204
+205 0.00174999237060547 0.0 0.0 0.0 205
+206 0.00174093246459961 0.0 0.0 0.0 206
+207 0.00173616409301758 0.0 0.0 0.0 207
+208 0.00174903869628906 0.0100000000000016 0.0100000000000016 0.0 208
+209 0.00177407264709473 0.0 0.0 0.0 209
+210 0.00176286697387695 0.0 0.0 0.0 210
+211 0.00174903869628906 0.0 0.0 0.0 211
+212 0.00173807144165039 0.0 0.0 0.0 212
+213 0.00173020362854004 0.0100000000000016 0.0100000000000016 0.0 213
+214 0.00177502632141113 0.0 0.0 0.0 214
+215 0.00175309181213379 0.0 0.0 0.0 215
+216 0.00175595283508301 0.0 0.0 0.0 216
+217 0.0257258415222168 0.0299999999999976 0.0299999999999976 0.0 217
+218 0.00183296203613281 0.0 0.0 0.0 218
+219 0.00183606147766113 0.0 0.0 0.0 219
+220 0.0017850399017334 0.0 0.0 0.0 220
+221 0.00177097320556641 0.0 0.0 0.0 221
+222 0.00177097320556641 0.0100000000000016 0.0100000000000016 0.0 222
+223 0.00174808502197266 0.0 0.0 0.0 223
+224 0.00177216529846191 0.0 0.0 0.0 224
+225 0.0017549991607666 0.0 0.0 0.0 225
+226 0.00176095962524414 0.0 0.0 0.0 226
+227 0.00178098678588867 0.00999999999999801 0.00999999999999801 0.0 227
+228 0.00174188613891602 0.0 0.0 0.0 228
+229 0.0017540454864502 0.0 0.0 0.0 229
+230 0.00176477432250977 0.0 0.0 0.0 230
+231 0.00176191329956055 0.0 0.0 0.0 231
+232 0.00174713134765625 0.0 0.0 0.0 232
+233 0.00176095962524414 0.0100000000000016 0.0100000000000016 0.0 233
+234 0.00174903869628906 0.0 0.0 0.0 234
+235 0.0017549991607666 0.0 0.0 0.0 235
+236 0.00177001953125 0.0 0.0 0.0 236
+237 0.00174093246459961 0.0 0.0 0.0 237
+238 0.00174379348754883 0.0 0.0 0.0 238
+239 0.0017390251159668 0.00999999999999801 0.00999999999999801 0.0 239
+240 0.00175213813781738 0.0 0.0 0.0 240
+241 0.00174117088317871 0.0 0.0 0.0 241
+242 0.00341701507568359 0.0 0.0 0.0 242
+243 0.00347495079040527 0.0100000000000016 0.0100000000000016 0.0 243
+244 0.00339508056640625 0.0 0.0 0.0 244
+245 0.00204801559448242 0.0 0.0 0.0 245
+246 0.00174903869628906 0.0 0.0 0.0 246
+247 0.00174903869628906 0.0100000000000016 0.0100000000000016 0.0 247
+248 0.00174283981323242 0.0 0.0 0.0 248
+249 0.00176382064819336 0.0 0.0 0.0 249
+250 0.00179600715637207 0.0 0.0 0.0 250
+251 0.00175380706787109 0.0 0.0 0.0 251
+252 0.00175976753234863 0.00999999999999801 0.00999999999999801 0.0 252
+253 0.00174188613891602 0.0 0.0 0.0 253
+254 0.00174808502197266 0.0 0.0 0.0 254
+255 0.00175690650939941 0.0 0.0 0.0 255
+256 0.00173091888427734 0.0 0.0 0.0 256
+257 0.00175213813781738 0.0 0.0 0.0 257
+258 0.00174498558044434 0.0100000000000016 0.0100000000000016 0.0 258
+259 0.00174999237060547 0.0 0.0 0.0 259
+260 0.00175094604492188 0.0 0.0 0.0 260
+261 0.00177097320556641 0.0 0.0 0.0 261
+262 0.00174283981323242 0.0 0.0 0.0 262
+263 0.00174999237060547 0.00999999999999801 0.00999999999999801 0.0 263
+264 0.00174713134765625 0.0 0.0 0.0 264
+265 0.00174212455749512 0.0 0.0 0.0 265
+266 0.00174498558044434 0.0 0.0 0.0 266
+267 0.00180602073669434 0.0 0.0 0.0 267
+268 0.00176906585693359 0.0 0.0 0.0 268
+269 0.00176382064819336 0.0100000000000016 0.0100000000000016 0.0 269
+270 0.0255179405212402 0.0199999999999996 0.0199999999999996 0.0 270
+271 0.00179314613342285 0.0 0.0 0.0 271
+272 0.00182604789733887 0.00999999999999801 0.00999999999999801 0.0 272
+273 0.00179910659790039 0.0 0.0 0.0 273
+274 0.00179505348205566 0.0 0.0 0.0 274
+275 0.00176811218261719 0.0 0.0 0.0 275
+276 0.00177192687988281 0.0 0.0 0.0 276
+277 0.00177478790283203 0.0 0.0 0.0 277
+278 0.00176596641540527 0.0100000000000016 0.0100000000000016 0.0 278
+279 0.0020899772644043 0.0 0.0 0.0 279
+280 0.00182890892028809 0.0 0.0 0.0 280
+281 0.00177597999572754 0.0 0.0 0.0 281
+282 0.0018761157989502 0.0 0.0 0.0 282
+283 0.00176405906677246 0.0100000000000016 0.0100000000000016 0.0 283
+284 0.00177693367004395 0.0 0.0 0.0 284
+285 0.00175094604492188 0.0 0.0 0.0 285
+286 0.00176000595092773 0.0 0.0 0.0 286
+287 0.00176095962524414 0.0 0.0 0.0 287
+288 0.00176715850830078 0.0 0.0 0.0 288
+289 0.0017549991607666 0.00999999999999801 0.00999999999999801 0.0 289
+290 0.00177216529846191 0.0 0.0 0.0 290
+291 0.00175881385803223 0.0 0.0 0.0 291
+292 0.00177502632141113 0.0 0.0 0.0 292
+293 0.00174999237060547 0.0 0.0 0.0 293
+294 0.00176000595092773 0.0100000000000016 0.0100000000000016 0.0 294
+295 0.00173807144165039 0.0 0.0 0.0 295
+296 0.00174999237060547 0.0 0.0 0.0 296
+297 0.00174212455749512 0.0 0.0 0.0 297
+298 0.0017549991607666 0.0 0.0 0.0 298
+299 0.00174713134765625 0.0 0.0 0.0 299
+300 0.00174784660339355 0.00999999999999801 0.00999999999999801 0.0 300
+301 0.00174403190612793 0.0 0.0 0.0 301
+302 0.00175905227661133 0.0 0.0 0.0 302
+303 0.00174713134765625 0.0 0.0 0.0 303
+304 0.00293898582458496 0.0 0.0 0.0 304
+305 0.00175619125366211 0.0100000000000016 0.0100000000000016 0.0 305
+306 0.00176787376403809 0.0 0.0 0.0 306
+307 0.00173401832580566 0.0 0.0 0.0 307
+308 0.00176095962524414 0.0 0.0 0.0 308
+309 0.00177383422851562 0.0 0.0 0.0 309
+310 0.00175189971923828 0.0 0.0 0.0 310
+311 0.00173211097717285 0.00999999999999801 0.00999999999999801 0.0 311
+312 0.00173211097717285 0.0 0.0 0.0 312
+313 0.00175786018371582 0.0 0.0 0.0 313
+314 0.0017549991607666 0.0 0.0 0.0 314
+315 0.00180292129516602 0.0 0.0 0.0 315
+316 0.00176787376403809 0.0100000000000016 0.0100000000000016 0.0 316
+317 0.00175714492797852 0.0 0.0 0.0 317
+318 0.00177097320556641 0.0 0.0 0.0 318
+319 0.00173711776733398 0.0 0.0 0.0 319
+320 0.00174307823181152 0.0 0.0 0.0 320
+321 0.00177502632141113 0.0 0.0 0.0 321
+322 0.00176501274108887 0.0100000000000016 0.0100000000000016 0.0 322
+323 0.00177407264709473 0.0 0.0 0.0 323
+324 0.0253810882568359 0.0199999999999996 0.0199999999999996 0.0 324
+325 0.00182509422302246 0.00999999999999801 0.00999999999999801 0.0 325
+326 0.00184917449951172 0.0 0.0 0.0 326
+327 0.0018160343170166 0.0 0.0 0.0 327
+328 0.00176692008972168 0.0 0.0 0.0 328
+329 0.00176501274108887 0.0 0.0 0.0 329
+330 0.00177097320556641 0.0 0.0 0.0 330
+331 0.00176906585693359 0.0100000000000016 0.0100000000000016 0.0 331
+332 0.00175690650939941 0.0 0.0 0.0 332
+333 0.00176906585693359 0.0 0.0 0.0 333
+334 0.00173497200012207 0.0 0.0 0.0 334
+335 0.00176095962524414 0.0 0.0 0.0 335
+336 0.00176286697387695 0.00999999999999801 0.00999999999999801 0.0 336
+337 0.00176382064819336 0.0 0.0 0.0 337
+338 0.00174379348754883 0.0 0.0 0.0 338
+339 0.00174808502197266 0.0 0.0 0.0 339
+340 0.00175595283508301 0.0 0.0 0.0 340
+341 0.0017540454864502 0.0 0.0 0.0 341
+342 0.00174903869628906 0.0100000000000016 0.0100000000000016 0.0 342
+343 0.00172686576843262 0.0 0.0 0.0 343
+344 0.00175786018371582 0.0 0.0 0.0 344
+345 0.00181317329406738 0.0 0.0 0.0 345
+346 0.00176692008972168 0.0 0.0 0.0 346
+347 0.00175213813781738 0.00999999999999801 0.00999999999999801 0.0 347
+348 0.00172591209411621 0.0 0.0 0.0 348
+349 0.00174093246459961 0.0 0.0 0.0 349
+350 0.00202202796936035 0.0 0.0 0.0 350
+351 0.00346088409423828 0.0 0.0 0.0 351
+352 0.00342106819152832 0.0100000000000016 0.0100000000000016 0.0 352
+353 0.0033118724822998 0.0 0.0 0.0 353
+354 0.00195193290710449 0.0 0.0 0.0 354
+355 0.00175690650939941 0.0100000000000016 0.0100000000000016 0.0 355
+356 0.00174379348754883 0.0 0.0 0.0 356
+357 0.00174283981323242 0.0 0.0 0.0 357
+358 0.00174880027770996 0.0 0.0 0.0 358
+359 0.00177788734436035 0.0 0.0 0.0 359
+360 0.00173401832580566 0.0 0.0 0.0 360
+361 0.00173687934875488 0.00999999999999801 0.00999999999999801 0.0 361
+362 0.00174403190612793 0.0 0.0 0.0 362
+363 0.00174999237060547 0.0 0.0 0.0 363
+364 0.00173592567443848 0.0 0.0 0.0 364
+365 0.00175094604492188 0.0 0.0 0.0 365
+366 0.00174188613891602 0.0 0.0 0.0 366
+367 0.00175118446350098 0.0100000000000016 0.0100000000000016 0.0 367
+368 0.00175595283508301 0.0 0.0 0.0 368
+369 0.00174403190612793 0.0 0.0 0.0 369
+370 0.0017387866973877 0.0 0.0 0.0 370
+371 0.00177192687988281 0.0 0.0 0.0 371
+372 0.00177907943725586 0.00999999999999801 0.00999999999999801 0.0 372
+373 0.00174903869628906 0.0 0.0 0.0 373
+374 0.00176215171813965 0.0 0.0 0.0 374
+375 0.0023951530456543 0.0 0.0 0.0 375
+376 0.00357913970947266 0.0100000000000016 0.0100000000000016 0.0 376
+377 0.0294489860534668 0.0199999999999996 0.0199999999999996 0.0 377
+378 0.00180578231811523 0.00999999999999801 0.00999999999999801 0.0 378
+379 0.00181698799133301 0.0 0.0 0.0 379
+380 0.00183391571044922 0.0 0.0 0.0 380
+381 0.00181293487548828 0.0 0.0 0.0 381
+382 0.00175809860229492 0.0 0.0 0.0 382
+383 0.00176405906677246 0.0100000000000016 0.0100000000000016 0.0 383
+384 0.00176000595092773 0.0 0.0 0.0 384
+385 0.00175809860229492 0.0 0.0 0.0 385
+386 0.00177288055419922 0.0 0.0 0.0 386
+387 0.00175285339355469 0.0 0.0 0.0 387
+388 0.00175595283508301 0.0 0.0 0.0 388
+389 0.00177502632141113 0.0100000000000016 0.0100000000000016 0.0 389
+390 0.00174903869628906 0.0 0.0 0.0 390
+391 0.00176215171813965 0.0 0.0 0.0 391
+392 0.00174903869628906 0.0 0.0 0.0 392
+393 0.00174307823181152 0.0 0.0 0.0 393
+394 0.00177812576293945 0.00999999999999801 0.00999999999999801 0.0 394
+395 0.00176596641540527 0.0 0.0 0.0 395
+396 0.00178003311157227 0.0 0.0 0.0 396
+397 0.0017390251159668 0.0 0.0 0.0 397
+398 0.00174999237060547 0.0 0.0 0.0 398
+399 0.00174307823181152 0.0 0.0 0.0 399
+400 0.00176191329956055 0.0100000000000016 0.0100000000000016 0.0 400
+401 0.0017549991607666 0.0 0.0 0.0 401
+402 0.00173592567443848 0.0 0.0 0.0 402
+403 0.00173401832580566 0.0 0.0 0.0 403
+404 0.00176095962524414 0.0 0.0 0.0 404
+405 0.00174689292907715 0.00999999999999801 0.00999999999999801 0.0 405
+406 0.00176000595092773 0.0 0.0 0.0 406
+407 0.00172615051269531 0.0 0.0 0.0 407
+408 0.00174188613891602 0.0 0.0 0.0 408
+409 0.00174283981323242 0.0 0.0 0.0 409
+410 0.0017540454864502 0.0 0.0 0.0 410
+411 0.00174403190612793 0.0100000000000016 0.0100000000000016 0.0 411
+412 0.00172901153564453 0.0 0.0 0.0 412
+413 0.00173282623291016 0.0 0.0 0.0 413
+414 0.00174880027770996 0.0 0.0 0.0 414
+415 0.0017549991607666 0.0 0.0 0.0 415
+416 0.00173091888427734 0.00999999999999801 0.00999999999999801 0.0 416
+417 0.00174999237060547 0.0 0.0 0.0 417
+418 0.00184798240661621 0.0 0.0 0.0 418
+419 0.00175118446350098 0.0 0.0 0.0 419
+420 0.00173497200012207 0.0 0.0 0.0 420
+421 0.00173807144165039 0.0 0.0 0.0 421
+422 0.00174903869628906 0.0100000000000016 0.0100000000000016 0.0 422
+423 0.00174093246459961 0.0 0.0 0.0 423
+424 0.00177288055419922 0.0 0.0 0.0 424
+425 0.00176000595092773 0.0 0.0 0.0 425
+426 0.00174880027770996 0.0 0.0 0.0 426
+427 0.00173187255859375 0.0 0.0 0.0 427
+428 0.00179195404052734 0.0100000000000016 0.0100000000000016 0.0 428
+429 0.00175309181213379 0.0 0.0 0.0 429
+430 0.0253579616546631 0.0199999999999996 0.0199999999999996 0.0 430
+431 0.0018010139465332 0.00999999999999801 0.00999999999999801 0.0 431
+432 0.00183796882629395 0.0 0.0 0.0 432
+433 0.00179314613342285 0.0 0.0 0.0 433
+434 0.00180387496948242 0.0 0.0 0.0 434
+435 0.00178289413452148 0.0 0.0 0.0 435
+436 0.00178003311157227 0.0100000000000016 0.0100000000000016 0.0 436
+437 0.00177001953125 0.0 0.0 0.0 437
+438 0.00175285339355469 0.0 0.0 0.0 438
+439 0.00176405906677246 0.0 0.0 0.0 439
+440 0.00176501274108887 0.0 0.0 0.0 440
+441 0.00173497200012207 0.0 0.0 0.0 441
+442 0.00176215171813965 0.00999999999999801 0.00999999999999801 0.0 442
+443 0.00176000595092773 0.0 0.0 0.0 443
+444 0.0017390251159668 0.0 0.0 0.0 444
+445 0.00175714492797852 0.0 0.0 0.0 445
+446 0.00178098678588867 0.0 0.0 0.0 446
+447 0.00176286697387695 0.0 0.0 0.0 447
+448 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 448
+449 0.00177097320556641 0.0 0.0 0.0 449
+450 0.00175905227661133 0.0 0.0 0.0 450
+451 0.00175595283508301 0.0 0.0 0.0 451
+452 0.00177693367004395 0.0 0.0 0.0 452
+453 0.00174999237060547 0.00999999999999801 0.00999999999999801 0.0 453
+454 0.00175595283508301 0.0 0.0 0.0 454
+455 0.00176191329956055 0.0 0.0 0.0 455
+456 0.00175094604492188 0.0 0.0 0.0 456
+457 0.00329685211181641 0.0 0.0 0.0 457
+458 0.00347805023193359 0.0100000000000016 0.0100000000000016 0.0 458
+459 0.00338196754455566 0.0 0.0 0.0 459
+460 0.00222587585449219 0.0 0.0 0.0 460
+461 0.00174784660339355 0.0100000000000016 0.0100000000000016 0.0 461
+462 0.00176715850830078 0.0 0.0 0.0 462
+463 0.00176501274108887 0.0 0.0 0.0 463
+464 0.00172901153564453 0.0 0.0 0.0 464
+465 0.00177407264709473 0.0 0.0 0.0 465
+466 0.00175309181213379 0.0 0.0 0.0 466
+467 0.00176095962524414 0.00999999999999801 0.00999999999999801 0.0 467
+468 0.00174403190612793 0.0 0.0 0.0 468
+469 0.00172996520996094 0.0 0.0 0.0 469
+470 0.00175285339355469 0.0 0.0 0.0 470
+471 0.00176000595092773 0.0 0.0 0.0 471
+472 0.00176119804382324 0.0100000000000016 0.0100000000000016 0.0 472
+473 0.00173187255859375 0.0 0.0 0.0 473
+474 0.00172281265258789 0.0 0.0 0.0 474
+475 0.00175905227661133 0.0 0.0 0.0 475
+476 0.00175714492797852 0.0 0.0 0.0 476
+477 0.00174093246459961 0.0 0.0 0.0 477
+478 0.00176501274108887 0.00999999999999801 0.00999999999999801 0.0 478
+479 0.00173497200012207 0.0 0.0 0.0 479
+480 0.00174593925476074 0.0 0.0 0.0 480
+481 0.00177001953125 0.0 0.0 0.0 481
+482 0.00177097320556641 0.0 0.0 0.0 482
+483 0.0255038738250732 0.0300000000000011 0.0300000000000011 0.0 483
+484 0.00180983543395996 0.0 0.0 0.0 484
+485 0.00182580947875977 0.0 0.0 0.0 485
+486 0.00181293487548828 0.0 0.0 0.0 486
+487 0.00178980827331543 0.00999999999999801 0.00999999999999801 0.0 487
+488 0.00177001953125 0.0 0.0 0.0 488
+489 0.00174784660339355 0.0 0.0 0.0 489
+490 0.00177311897277832 0.0 0.0 0.0 490
+491 0.00178694725036621 0.0 0.0 0.0 491
+492 0.00176596641540527 0.0100000000000016 0.0100000000000016 0.0 492
+493 0.00175786018371582 0.0 0.0 0.0 493
+494 0.00176286697387695 0.0 0.0 0.0 494
+495 0.00174117088317871 0.0 0.0 0.0 495
+496 0.0017540454864502 0.0 0.0 0.0 496
+497 0.00176811218261719 0.0 0.0 0.0 497
+498 0.00176405906677246 0.0100000000000016 0.0100000000000016 0.0 498
+499 0.00175595283508301 0.0 0.0 0.0 499
+500 0.00183701515197754 0.0 0.0 0.0 500
+501 0.00176692008972168 0.0 0.0 0.0 501
+502 0.00178289413452148 0.0 0.0 0.0 502
+503 0.00176692008972168 0.00999999999999801 0.00999999999999801 0.0 503
+504 0.00175595283508301 0.0 0.0 0.0 504
+505 0.00173616409301758 0.0 0.0 0.0 505
+506 0.00208091735839844 0.0 0.0 0.0 506
+507 0.00292181968688965 0.0 0.0 0.0 507
+508 0.00174379348754883 0.0 0.0 0.0 508
+509 0.00174093246459961 0.0100000000000016 0.0100000000000016 0.0 509
+510 0.00175595283508301 0.0 0.0 0.0 510
+511 0.00174808502197266 0.0 0.0 0.0 511
+512 0.00172805786132812 0.0 0.0 0.0 512
+513 0.00174903869628906 0.0 0.0 0.0 513
+514 0.00177097320556641 0.00999999999999801 0.00999999999999801 0.0 514
+515 0.0017540454864502 0.0 0.0 0.0 515
+516 0.00173282623291016 0.0 0.0 0.0 516
+517 0.00174498558044434 0.0 0.0 0.0 517
+518 0.00174188613891602 0.0 0.0 0.0 518
+519 0.00176811218261719 0.0 0.0 0.0 519
+520 0.00173711776733398 0.0100000000000016 0.0100000000000016 0.0 520
+521 0.00175690650939941 0.0 0.0 0.0 521
+522 0.00173592567443848 0.0 0.0 0.0 522
+523 0.0017390251159668 0.0 0.0 0.0 523
+524 0.00174903869628906 0.0 0.0 0.0 524
+525 0.00175881385803223 0.00999999999999801 0.00999999999999801 0.0 525
+526 0.00173497200012207 0.0 0.0 0.0 526
+527 0.00173616409301758 0.0 0.0 0.0 527
+528 0.00175189971923828 0.0 0.0 0.0 528
+529 0.00174403190612793 0.0 0.0 0.0 529
+530 0.00174903869628906 0.0 0.0 0.0 530
+531 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 531
+532 0.00174307823181152 0.0 0.0 0.0 532
+533 0.00174999237060547 0.0 0.0 0.0 533
+534 0.00178980827331543 0.0 0.0 0.0 534
+535 0.00175809860229492 0.0 0.0 0.0 535
+536 0.025597095489502 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.00178790092468262 0.0 0.0 0.0 537
+538 0.00197505950927734 0.0 0.0 0.0 538
+539 0.00181388854980469 0.0 0.0 0.0 539
+540 0.00177693367004395 0.00999999999999801 0.00999999999999801 0.0 540
+541 0.00177311897277832 0.0 0.0 0.0 541
+542 0.00185203552246094 0.0 0.0 0.0 542
+543 0.00176501274108887 0.0 0.0 0.0 543
+544 0.00176501274108887 0.0 0.0 0.0 544
+545 0.00176405906677246 0.0100000000000016 0.0100000000000016 0.0 545
+546 0.00176405906677246 0.0 0.0 0.0 546
+547 0.00174093246459961 0.0 0.0 0.0 547
+548 0.00175905227661133 0.0 0.0 0.0 548
+549 0.00177407264709473 0.0 0.0 0.0 549
+550 0.00176215171813965 0.0 0.0 0.0 550
+551 0.00174903869628906 0.00999999999999801 0.00999999999999801 0.0 551
+552 0.00175595283508301 0.0 0.0 0.0 552
+553 0.00174593925476074 0.0 0.0 0.0 553
+554 0.00176787376403809 0.0 0.0 0.0 554
+555 0.00176000595092773 0.0 0.0 0.0 555
+556 0.00175380706787109 0.0100000000000016 0.0100000000000016 0.0 556
+557 0.00174593925476074 0.0 0.0 0.0 557
+558 0.00173807144165039 0.0 0.0 0.0 558
+559 0.00180602073669434 0.0 0.0 0.0 559
+560 0.00174808502197266 0.0 0.0 0.0 560
+561 0.00174093246459961 0.0 0.0 0.0 561
+562 0.00177311897277832 0.00999999999999801 0.00999999999999801 0.0 562
+563 0.00174212455749512 0.0 0.0 0.0 563
+564 0.00174498558044434 0.0 0.0 0.0 564
+565 0.00191402435302734 0.0 0.0 0.0 565
+566 0.00347208976745605 0.0100000000000016 0.0100000000000016 0.0 566
+567 0.00344085693359375 0.0 0.0 0.0 567
+568 0.00338578224182129 0.0 0.0 0.0 568
+569 0.00339102745056152 0.0100000000000016 0.0100000000000016 0.0 569
+570 0.00190401077270508 0.0 0.0 0.0 570
+571 0.00175905227661133 0.0 0.0 0.0 571
+572 0.00177097320556641 0.0 0.0 0.0 572
+573 0.00176215171813965 0.0 0.0 0.0 573
+574 0.0017249584197998 0.0 0.0 0.0 574
+575 0.00174903869628906 0.00999999999999801 0.00999999999999801 0.0 575
+576 0.00174593925476074 0.0 0.0 0.0 576
+577 0.0017399787902832 0.0 0.0 0.0 577
+578 0.00174498558044434 0.0 0.0 0.0 578
+579 0.00174689292907715 0.0 0.0 0.0 579
+580 0.00175118446350098 0.0100000000000016 0.0100000000000016 0.0 580
+581 0.00174307823181152 0.0 0.0 0.0 581
+582 0.00175380706787109 0.0 0.0 0.0 582
+583 0.00175690650939941 0.0 0.0 0.0 583
+584 0.00174403190612793 0.0 0.0 0.0 584
+585 0.00174903869628906 0.0 0.0 0.0 585
+586 0.00176000595092773 0.00999999999999801 0.00999999999999801 0.0 586
+587 0.00176596641540527 0.0 0.0 0.0 587
+588 0.00175595283508301 0.0 0.0 0.0 588
+589 0.0243070125579834 0.0199999999999996 0.0199999999999996 0.0 589
+590 0.00179505348205566 0.0100000000000016 0.0100000000000016 0.0 590
+591 0.00179696083068848 0.0 0.0 0.0 591
+592 0.0018000602722168 0.0 0.0 0.0 592
+593 0.00178909301757812 0.0 0.0 0.0 593
+594 0.00181698799133301 0.0 0.0 0.0 594
+595 0.00178003311157227 0.00999999999999801 0.00999999999999801 0.0 595
+596 0.00175619125366211 0.0 0.0 0.0 596
+597 0.0017540454864502 0.0 0.0 0.0 597
+598 0.00177407264709473 0.0 0.0 0.0 598
+599 0.00177502632141113 0.0 0.0 0.0 599
+600 0.00176692008972168 0.0 0.0 0.0 600
+601 0.00175690650939941 0.0100000000000016 0.0100000000000016 0.0 601
+602 0.00173401832580566 0.0 0.0 0.0 602
+603 0.00175213813781738 0.0 0.0 0.0 603
+604 0.00176692008972168 0.0 0.0 0.0 604
+605 0.00175189971923828 0.0 0.0 0.0 605
+606 0.00176692008972168 0.0100000000000016 0.0100000000000016 0.0 606
+607 0.00175595283508301 0.0 0.0 0.0 607
+608 0.00176811218261719 0.0 0.0 0.0 608
+609 0.00176787376403809 0.0 0.0 0.0 609
+610 0.00177121162414551 0.0 0.0 0.0 610
+611 0.00175094604492188 0.0 0.0 0.0 611
+612 0.00174713134765625 0.00999999999999801 0.00999999999999801 0.0 612
+613 0.00174403190612793 0.0 0.0 0.0 613
+614 0.00173211097717285 0.0 0.0 0.0 614
+615 0.0017859935760498 0.0 0.0 0.0 615
+616 0.00175309181213379 0.0 0.0 0.0 616
+617 0.00174784660339355 0.0 0.0 0.0 617
+618 0.00174903869628906 0.0 0.0 0.0 618
+619 0.00175714492797852 0.0 0.0 0.0 619
+620 0.0022280216217041 0.0 0.0 0.0 620
+621 0.00176501274108887 0.0 0.0 0.0 621
+622 0.00176191329956055 0.0 0.0 0.0 622
+623 0.00185799598693848 0.00999999999999801 0.00999999999999801 0.0 623
+624 0.00174689292907715 0.0 0.0 0.0 624
+625 0.00174689292907715 0.0 0.0 0.0 625
+626 0.0017249584197998 0.0 0.0 0.0 626
+627 0.00173401832580566 0.0 0.0 0.0 627
+628 0.00175118446350098 0.0100000000000016 0.0100000000000016 0.0 628
+629 0.00173401832580566 0.0 0.0 0.0 629
+630 0.00174593925476074 0.0 0.0 0.0 630
+631 0.00174593925476074 0.0 0.0 0.0 631
+632 0.00174689292907715 0.0 0.0 0.0 632
+633 0.00175905227661133 0.0 0.0 0.0 633
+634 0.00177001953125 0.00999999999999801 0.00999999999999801 0.0 634
+635 0.00174403190612793 0.0 0.0 0.0 635
+636 0.00185108184814453 0.0 0.0 0.0 636
+637 0.00174403190612793 0.0 0.0 0.0 637
+638 0.00175023078918457 0.0 0.0 0.0 638
+639 0.00177407264709473 0.0100000000000016 0.0100000000000016 0.0 639
+640 0.00174403190612793 0.0 0.0 0.0 640
+641 0.00175714492797852 0.0 0.0 0.0 641
+642 0.0244560241699219 0.0199999999999996 0.0199999999999996 0.0 642
+643 0.00182914733886719 0.0100000000000016 0.0100000000000016 0.0 643
+644 0.00178813934326172 0.0 0.0 0.0 644
+645 0.00177693367004395 0.0 0.0 0.0 645
+646 0.00177192687988281 0.0 0.0 0.0 646
+647 0.00177478790283203 0.0 0.0 0.0 647
+648 0.00176906585693359 0.0 0.0 0.0 648
+649 0.00176787376403809 0.00999999999999801 0.00999999999999801 0.0 649
+650 0.00174212455749512 0.0 0.0 0.0 650
+651 0.00175595283508301 0.0 0.0 0.0 651
+652 0.00176286697387695 0.0 0.0 0.0 652
+653 0.00176095962524414 0.0 0.0 0.0 653
+654 0.00177597999572754 0.0100000000000016 0.0100000000000016 0.0 654
+655 0.00177288055419922 0.0 0.0 0.0 655
+656 0.00175118446350098 0.0 0.0 0.0 656
+657 0.00175309181213379 0.0 0.0 0.0 657
+658 0.0017540454864502 0.0 0.0 0.0 658
+659 0.0017549991607666 0.0 0.0 0.0 659
+660 0.00176215171813965 0.00999999999999801 0.00999999999999801 0.0 660
+661 0.00176692008972168 0.0 0.0 0.0 661
+662 0.00175619125366211 0.0 0.0 0.0 662
+663 0.00177288055419922 0.0 0.0 0.0 663
+664 0.00176310539245605 0.0 0.0 0.0 664
+665 0.00175189971923828 0.0 0.0 0.0 665
+666 0.00175094604492188 0.0100000000000016 0.0100000000000016 0.0 666
+667 0.00175189971923828 0.0 0.0 0.0 667
+668 0.00175905227661133 0.0 0.0 0.0 668
+669 0.00175690650939941 0.0 0.0 0.0 669
+670 0.00174903869628906 0.0 0.0 0.0 670
+671 0.00176382064819336 0.00999999999999801 0.00999999999999801 0.0 671
+672 0.00174307823181152 0.0 0.0 0.0 672
+673 0.00174117088317871 0.0 0.0 0.0 673
+674 0.00176906585693359 0.0 0.0 0.0 674
+675 0.00325989723205566 0.0 0.0 0.0 675
+676 0.00345802307128906 0.0100000000000016 0.0100000000000016 0.0 676
+677 0.0026400089263916 0.0 0.0 0.0 677
+678 0.00176692008972168 0.0 0.0 0.0 678
+679 0.00268101692199707 0.0100000000000016 0.0100000000000016 0.0 679
+680 0.00180482864379883 0.0 0.0 0.0 680
+681 0.00174808502197266 0.0 0.0 0.0 681
+682 0.00174283981323242 0.0 0.0 0.0 682
+683 0.00176095962524414 0.0 0.0 0.0 683
+684 0.00176095962524414 0.0 0.0 0.0 684
+685 0.00175595283508301 0.00999999999999801 0.00999999999999801 0.0 685
+686 0.00175094604492188 0.0 0.0 0.0 686
+687 0.00176477432250977 0.0 0.0 0.0 687
+688 0.00176000595092773 0.0 0.0 0.0 688
+689 0.00176906585693359 0.0 0.0 0.0 689
+690 0.00177502632141113 0.0100000000000016 0.0100000000000016 0.0 690
+691 0.00174808502197266 0.0 0.0 0.0 691
+692 0.00178909301757812 0.0 0.0 0.0 692
+693 0.00177693367004395 0.0 0.0 0.0 693
+694 0.0252690315246582 0.0299999999999976 0.0299999999999976 0.0 694
+695 0.00181198120117188 0.0 0.0 0.0 695
+696 0.00185799598693848 0.0 0.0 0.0 696
+697 0.00180315971374512 0.0 0.0 0.0 697
+698 0.00178194046020508 0.0 0.0 0.0 698
+699 0.00178718566894531 0.0100000000000016 0.0100000000000016 0.0 699
+700 0.00174593925476074 0.0 0.0 0.0 700
+701 0.00177192687988281 0.0 0.0 0.0 701
+702 0.00177216529846191 0.0 0.0 0.0 702
+703 0.00174808502197266 0.0 0.0 0.0 703
+704 0.00176882743835449 0.0 0.0 0.0 704
+705 0.0017540454864502 0.00999999999999801 0.00999999999999801 0.0 705
+706 0.00174403190612793 0.0 0.0 0.0 706
+707 0.00177288055419922 0.0 0.0 0.0 707
+708 0.00177001953125 0.0 0.0 0.0 708
+709 0.00176310539245605 0.0 0.0 0.0 709
+710 0.00175690650939941 0.0 0.0 0.0 710
+711 0.00179791450500488 0.0100000000000016 0.0100000000000016 0.0 711
+712 0.00183296203613281 0.0 0.0 0.0 712
+713 0.00177001953125 0.0 0.0 0.0 713
+714 0.00175595283508301 0.0 0.0 0.0 714
+715 0.00175189971923828 0.0 0.0 0.0 715
+716 0.00174713134765625 0.0 0.0 0.0 716
+717 0.00175809860229492 0.0100000000000016 0.0100000000000016 0.0 717
+718 0.00182104110717773 0.0 0.0 0.0 718
+719 0.0017399787902832 0.0 0.0 0.0 719
+720 0.00173497200012207 0.0 0.0 0.0 720
+721 0.00173783302307129 0.0 0.0 0.0 721
+722 0.0017399787902832 0.00999999999999801 0.00999999999999801 0.0 722
+723 0.00175285339355469 0.0 0.0 0.0 723
+724 0.00173282623291016 0.0 0.0 0.0 724
+725 0.00175213813781738 0.0 0.0 0.0 725
+726 0.00174498558044434 0.0 0.0 0.0 726
+727 0.00174093246459961 0.0 0.0 0.0 727
+728 0.00177121162414551 0.0100000000000016 0.0100000000000016 0.0 728
+729 0.00174903869628906 0.0 0.0 0.0 729
+730 0.00175690650939941 0.0 0.0 0.0 730
+731 0.00173711776733398 0.0 0.0 0.0 731
+732 0.0017399787902832 0.0 0.0 0.0 732
+733 0.00176596641540527 0.00999999999999801 0.00999999999999801 0.0 733
+734 0.00175619125366211 0.0 0.0 0.0 734
+735 0.00173687934875488 0.0 0.0 0.0 735
+736 0.00176000595092773 0.0 0.0 0.0 736
+737 0.00175714492797852 0.0 0.0 0.0 737
+738 0.00174689292907715 0.0 0.0 0.0 738
+739 0.00174689292907715 0.0100000000000016 0.0100000000000016 0.0 739
+740 0.00175309181213379 0.0 0.0 0.0 740
+741 0.00175189971923828 0.0 0.0 0.0 741
+742 0.00175881385803223 0.0 0.0 0.0 742
+743 0.00175189971923828 0.0 0.0 0.0 743
+744 0.00178813934326172 0.00999999999999801 0.00999999999999801 0.0 744
+745 0.00172710418701172 0.0 0.0 0.0 745
+746 0.00175690650939941 0.0 0.0 0.0 746
+747 0.0253231525421143 0.0200000000000031 0.0200000000000031 0.0 747
+748 0.00182986259460449 0.00999999999999801 0.00999999999999801 0.0 748
+749 0.00179004669189453 0.0 0.0 0.0 749
+750 0.00179314613342285 0.0 0.0 0.0 750
+751 0.00178098678588867 0.0 0.0 0.0 751
+752 0.00178003311157227 0.0 0.0 0.0 752
+753 0.00176811218261719 0.0100000000000016 0.0100000000000016 0.0 753
+754 0.00174283981323242 0.0 0.0 0.0 754
+755 0.00176811218261719 0.0 0.0 0.0 755
+756 0.00175881385803223 0.0 0.0 0.0 756
+757 0.00174784660339355 0.0 0.0 0.0 757
+758 0.00175905227661133 0.0 0.0 0.0 758
+759 0.00177812576293945 0.00999999999999801 0.00999999999999801 0.0 759
+760 0.00174689292907715 0.0 0.0 0.0 760
+761 0.00183987617492676 0.0 0.0 0.0 761
+762 0.0017549991607666 0.0 0.0 0.0 762
+763 0.00175786018371582 0.0 0.0 0.0 763
+764 0.00175380706787109 0.0100000000000016 0.0100000000000016 0.0 764
+765 0.00176501274108887 0.0 0.0 0.0 765
+766 0.00175690650939941 0.0 0.0 0.0 766
+767 0.00174498558044434 0.0 0.0 0.0 767
+768 0.0017549991607666 0.0 0.0 0.0 768
+769 0.00175714492797852 0.0 0.0 0.0 769
+770 0.00176405906677246 0.00999999999999801 0.00999999999999801 0.0 770
+771 0.00174999237060547 0.0 0.0 0.0 771
+772 0.00174689292907715 0.0 0.0 0.0 772
+773 0.00174999237060547 0.0 0.0 0.0 773
+774 0.0017387866973877 0.0 0.0 0.0 774
+775 0.00175309181213379 0.0 0.0 0.0 775
+776 0.0017399787902832 0.0100000000000016 0.0100000000000016 0.0 776
+777 0.00179791450500488 0.0 0.0 0.0 777
+778 0.00174188613891602 0.0 0.0 0.0 778
+779 0.00172996520996094 0.0 0.0 0.0 779
+780 0.00173211097717285 0.0 0.0 0.0 780
+781 0.00176191329956055 0.00999999999999801 0.00999999999999801 0.0 781
+782 0.00174999237060547 0.0 0.0 0.0 782
+783 0.00173711776733398 0.0 0.0 0.0 783
+784 0.00174212455749512 0.0 0.0 0.0 784
+785 0.00317001342773438 0.0 0.0 0.0 785
+786 0.00347280502319336 0.0100000000000016 0.0100000000000016 0.0 786
+787 0.00329899787902832 0.0 0.0 0.0 787
+788 0.00238609313964844 0.0 0.0 0.0 788
+789 0.00221085548400879 0.0100000000000016 0.0100000000000016 0.0 789
+790 0.00175285339355469 0.0 0.0 0.0 790
+791 0.00175309181213379 0.0 0.0 0.0 791
+792 0.00172901153564453 0.0 0.0 0.0 792
+793 0.00179696083068848 0.0 0.0 0.0 793
+794 0.00175285339355469 0.0 0.0 0.0 794
+795 0.00173783302307129 0.00999999999999801 0.00999999999999801 0.0 795
+796 0.00177001953125 0.0 0.0 0.0 796
+797 0.00176811218261719 0.0 0.0 0.0 797
+798 0.00175595283508301 0.0 0.0 0.0 798
+799 0.0301520824432373 0.0300000000000011 0.0300000000000011 0.0 799
+800 0.00359296798706055 0.00999999999999801 0.00999999999999801 0.0 800
+801 0.00265407562255859 0.0 0.0 0.0 801
+802 0.00182509422302246 0.0 0.0 0.0 802
+803 0.00179409980773926 0.0 0.0 0.0 803
+804 0.00177407264709473 0.0 0.0 0.0 804
+805 0.00176787376403809 0.0100000000000016 0.0100000000000016 0.0 805
+806 0.00177907943725586 0.0 0.0 0.0 806
+807 0.00176310539245605 0.0 0.0 0.0 807
+808 0.00176811218261719 0.0 0.0 0.0 808
+809 0.00174808502197266 0.0 0.0 0.0 809
+810 0.00175714492797852 0.00999999999999801 0.00999999999999801 0.0 810
+811 0.00174784660339355 0.0 0.0 0.0 811
+812 0.00178885459899902 0.0 0.0 0.0 812
+813 0.00174999237060547 0.0 0.0 0.0 813
+814 0.00176811218261719 0.0 0.0 0.0 814
+815 0.00174999237060547 0.0 0.0 0.0 815
+816 0.00175595283508301 0.0100000000000016 0.0100000000000016 0.0 816
+817 0.00176000595092773 0.0 0.0 0.0 817
+818 0.00177288055419922 0.0 0.0 0.0 818
+819 0.00176095962524414 0.0 0.0 0.0 819
+820 0.0017390251159668 0.0 0.0 0.0 820
+821 0.00179696083068848 0.0 0.0 0.0 821
+822 0.00174283981323242 0.0100000000000016 0.0100000000000016 0.0 822
+823 0.00174713134765625 0.0 0.0 0.0 823
+824 0.00175189971923828 0.0 0.0 0.0 824
+825 0.00175094604492188 0.0 0.0 0.0 825
+826 0.00173616409301758 0.0 0.0 0.0 826
+827 0.00174093246459961 0.00999999999999801 0.00999999999999801 0.0 827
+828 0.00174617767333984 0.0 0.0 0.0 828
+829 0.00174188613891602 0.0 0.0 0.0 829
+830 0.00173592567443848 0.0 0.0 0.0 830
+831 0.0017240047454834 0.0 0.0 0.0 831
+832 0.00176095962524414 0.0 0.0 0.0 832
+833 0.00174713134765625 0.0100000000000016 0.0100000000000016 0.0 833
+834 0.00175094604492188 0.0 0.0 0.0 834
+835 0.00173807144165039 0.0 0.0 0.0 835
+836 0.00176715850830078 0.0 0.0 0.0 836
+837 0.00174093246459961 0.0 0.0 0.0 837
+838 0.00176000595092773 0.00999999999999801 0.00999999999999801 0.0 838
+839 0.00174498558044434 0.0 0.0 0.0 839
+840 0.00174689292907715 0.0 0.0 0.0 840
+841 0.00177502632141113 0.0 0.0 0.0 841
+842 0.00175309181213379 0.0 0.0 0.0 842
+843 0.00175213813781738 0.0 0.0 0.0 843
+844 0.00175905227661133 0.0100000000000016 0.0100000000000016 0.0 844
+845 0.0017249584197998 0.0 0.0 0.0 845
+846 0.00174999237060547 0.0 0.0 0.0 846
+847 0.00175309181213379 0.0 0.0 0.0 847
+848 0.00177311897277832 0.0 0.0 0.0 848
+849 0.00175309181213379 0.00999999999999801 0.00999999999999801 0.0 849
+850 0.00175595283508301 0.0 0.0 0.0 850
+851 0.0253610610961914 0.0200000000000031 0.0200000000000031 0.0 851
+852 0.0018308162689209 0.0 0.0 0.0 852
+853 0.00182509422302246 0.00999999999999801 0.00999999999999801 0.0 853
+854 0.00179100036621094 0.0 0.0 0.0 854
+855 0.0018000602722168 0.0 0.0 0.0 855
+856 0.00175809860229492 0.0 0.0 0.0 856
+857 0.00182390213012695 0.0 0.0 0.0 857
+858 0.00175285339355469 0.0100000000000016 0.0100000000000016 0.0 858
+859 0.00172996520996094 0.0 0.0 0.0 859
+860 0.00173521041870117 0.0 0.0 0.0 860
+861 0.00176787376403809 0.0 0.0 0.0 861
+862 0.00175380706787109 0.0 0.0 0.0 862
+863 0.00174999237060547 0.0 0.0 0.0 863
+864 0.00177502632141113 0.00999999999999801 0.00999999999999801 0.0 864
+865 0.0017549991607666 0.0 0.0 0.0 865
+866 0.00175905227661133 0.0 0.0 0.0 866
+867 0.00177693367004395 0.0 0.0 0.0 867
+868 0.00178217887878418 0.0 0.0 0.0 868
+869 0.00177478790283203 0.0100000000000016 0.0100000000000016 0.0 869
+870 0.00176405906677246 0.0 0.0 0.0 870
+871 0.00176191329956055 0.0 0.0 0.0 871
+872 0.00175213813781738 0.0 0.0 0.0 872
+873 0.00175690650939941 0.0 0.0 0.0 873
+874 0.00174093246459961 0.0 0.0 0.0 874
+875 0.0017399787902832 0.00999999999999801 0.00999999999999801 0.0 875
+876 0.00173616409301758 0.0 0.0 0.0 876
+877 0.00174808502197266 0.0 0.0 0.0 877
+878 0.0017390251159668 0.0 0.0 0.0 878
+879 0.00174403190612793 0.0 0.0 0.0 879
+880 0.00173091888427734 0.0 0.0 0.0 880
+881 0.00175786018371582 0.0100000000000016 0.0100000000000016 0.0 881
+882 0.00173306465148926 0.0 0.0 0.0 882
+883 0.0017399787902832 0.0 0.0 0.0 883
+884 0.00173783302307129 0.0 0.0 0.0 884
+885 0.00172281265258789 0.0 0.0 0.0 885
+886 0.00175690650939941 0.0 0.0 0.0 886
+887 0.00173497200012207 0.00999999999999801 0.00999999999999801 0.0 887
+888 0.00175094604492188 0.0 0.0 0.0 888
+889 0.00172090530395508 0.0 0.0 0.0 889
+890 0.00198698043823242 0.0 0.0 0.0 890
+891 0.00344991683959961 0.0100000000000016 0.0100000000000016 0.0 891
+892 0.00345301628112793 0.0 0.0 0.0 892
+893 0.00206422805786133 0.0 0.0 0.0 893
+894 0.00191783905029297 0.0 0.0 0.0 894
+895 0.00174188613891602 0.0 0.0 0.0 895
+896 0.00173401832580566 0.0100000000000016 0.0100000000000016 0.0 896
+897 0.00175094604492188 0.0 0.0 0.0 897
+898 0.00176310539245605 0.0 0.0 0.0 898
+899 0.00176095962524414 0.0 0.0 0.0 899
+900 0.00181198120117188 0.0 0.0 0.0 900
+901 0.00175094604492188 0.00999999999999801 0.00999999999999801 0.0 901
+902 0.00177597999572754 0.0 0.0 0.0 902
+903 0.0245981216430664 0.0199999999999996 0.0199999999999996 0.0 903
+904 0.00182318687438965 0.0 0.0 0.0 904
+905 0.00179600715637207 0.0100000000000016 0.0100000000000016 0.0 905
+906 0.00179409980773926 0.0 0.0 0.0 906
+907 0.00178408622741699 0.0 0.0 0.0 907
+908 0.00177407264709473 0.0 0.0 0.0 908
+909 0.00176501274108887 0.0 0.0 0.0 909
+910 0.00176596641540527 0.0 0.0 0.0 910
+911 0.00175595283508301 0.00999999999999801 0.00999999999999801 0.0 911
+912 0.00176596641540527 0.0 0.0 0.0 912
+913 0.00176501274108887 0.0 0.0 0.0 913
+914 0.00175809860229492 0.0 0.0 0.0 914
+915 0.00176405906677246 0.0 0.0 0.0 915
+916 0.00176191329956055 0.0100000000000016 0.0100000000000016 0.0 916
+917 0.00175619125366211 0.0 0.0 0.0 917
+918 0.00175690650939941 0.0 0.0 0.0 918
+919 0.00175189971923828 0.0 0.0 0.0 919
+920 0.0017540454864502 0.0 0.0 0.0 920
+921 0.0017540454864502 0.0 0.0 0.0 921
+922 0.00176119804382324 0.00999999999999801 0.00999999999999801 0.0 922
+923 0.00176095962524414 0.0 0.0 0.0 923
+924 0.00176215171813965 0.0 0.0 0.0 924
+925 0.00173592567443848 0.0 0.0 0.0 925
+926 0.00174307823181152 0.0 0.0 0.0 926
+927 0.00173401832580566 0.0100000000000016 0.0100000000000016 0.0 927
+928 0.00174999237060547 0.0 0.0 0.0 928
+929 0.0017399787902832 0.0 0.0 0.0 929
+930 0.0017399787902832 0.0 0.0 0.0 930
+931 0.00177502632141113 0.0 0.0 0.0 931
+932 0.00175309181213379 0.0 0.0 0.0 932
+933 0.00174713134765625 0.0100000000000016 0.0100000000000016 0.0 933
+934 0.00172519683837891 0.0 0.0 0.0 934
+935 0.00182008743286133 0.0 0.0 0.0 935
+936 0.00175094604492188 0.0 0.0 0.0 936
+937 0.00175213813781738 0.0 0.0 0.0 937
+938 0.0017549991607666 0.00999999999999801 0.00999999999999801 0.0 938
+939 0.00175881385803223 0.0 0.0 0.0 939
+940 0.00176215171813965 0.0 0.0 0.0 940
+941 0.00270485877990723 0.0 0.0 0.0 941
+942 0.00175213813781738 0.0 0.0 0.0 942
+943 0.0017399787902832 0.0100000000000016 0.0100000000000016 0.0 943
+944 0.00174307823181152 0.0 0.0 0.0 944
+945 0.00173497200012207 0.0 0.0 0.0 945
+946 0.00174999237060547 0.0 0.0 0.0 946
+947 0.00175690650939941 0.0 0.0 0.0 947
+948 0.00176095962524414 0.0 0.0 0.0 948
+949 0.00173807144165039 0.00999999999999801 0.00999999999999801 0.0 949
+950 0.00175690650939941 0.0 0.0 0.0 950
+951 0.0017390251159668 0.0 0.0 0.0 951
+952 0.00178313255310059 0.0 0.0 0.0 952
+953 0.00176692008972168 0.0 0.0 0.0 953
+954 0.00176501274108887 0.0 0.0 0.0 954
+955 0.0254151821136475 0.0199999999999996 0.0199999999999996 0.0 955
+956 0.0018460750579834 0.0 0.0 0.0 956
+957 0.00177717208862305 0.0 0.0 0.0 957
+958 0.00177192687988281 0.0100000000000016 0.0100000000000016 0.0 958
+959 0.00177407264709473 0.0 0.0 0.0 959
+960 0.00177311897277832 0.0 0.0 0.0 960
+961 0.00176906585693359 0.0 0.0 0.0 961
+962 0.00176501274108887 0.0 0.0 0.0 962
+963 0.00174212455749512 0.00999999999999801 0.00999999999999801 0.0 963
+964 0.00176310539245605 0.0 0.0 0.0 964
+965 0.00176095962524414 0.0 0.0 0.0 965
+966 0.00175905227661133 0.0 0.0 0.0 966
+967 0.00174999237060547 0.0 0.0 0.0 967
+968 0.00176811218261719 0.0 0.0 0.0 968
+969 0.00175189971923828 0.0100000000000016 0.0100000000000016 0.0 969
+970 0.00194287300109863 0.0 0.0 0.0 970
+971 0.0017540454864502 0.0 0.0 0.0 971
+972 0.0019228458404541 0.0 0.0 0.0 972
+973 0.00176405906677246 0.0 0.0 0.0 973
+974 0.0017549991607666 0.00999999999999801 0.00999999999999801 0.0 974
+975 0.00176310539245605 0.0 0.0 0.0 975
+976 0.00173807144165039 0.0 0.0 0.0 976
+977 0.00182604789733887 0.0 0.0 0.0 977
+978 0.0017399787902832 0.0 0.0 0.0 978
+979 0.0017540454864502 0.0 0.0 0.0 979
+980 0.0017697811126709 0.0100000000000016 0.0100000000000016 0.0 980
+981 0.0017390251159668 0.0 0.0 0.0 981
+982 0.00175285339355469 0.0 0.0 0.0 982
+983 0.00174880027770996 0.0 0.0 0.0 983
+984 0.00176095962524414 0.0 0.0 0.0 984
+985 0.00176501274108887 0.00999999999999801 0.00999999999999801 0.0 985
+986 0.00175094604492188 0.0 0.0 0.0 986
+987 0.0017390251159668 0.0 0.0 0.0 987
+988 0.00174808502197266 0.0 0.0 0.0 988
+989 0.0017540454864502 0.0 0.0 0.0 989
+990 0.00174307823181152 0.0 0.0 0.0 990
+991 0.00172710418701172 0.0100000000000016 0.0100000000000016 0.0 991
+992 0.00177597999572754 0.0 0.0 0.0 992
+993 0.00174903869628906 0.0 0.0 0.0 993
+994 0.0017402172088623 0.0 0.0 0.0 994
+995 0.00173187255859375 0.0 0.0 0.0 995
+996 0.00175690650939941 0.0 0.0 0.0 996
+997 0.00175213813781738 0.00999999999999801 0.00999999999999801 0.0 997
+998 0.0017549991607666 0.0 0.0 0.0 998
+999 0.00175094604492188 0.0 0.0 0.0 999
+1000 0.00175905227661133 0.0 0.0 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log
new file mode 100644
index 0000000..47b0c7f
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log
@@ -0,0 +1,261 @@
+========================== 2009-04-01T16:53:42 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'GeneratorBenchmarkExt' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+GeneratorBenchmarkExt#generator_fast:
+ real total user system
+sum 1.818191528 1.840000000 1.830000000 0.010000000
+min 0.001368999 0.000000000 0.000000000 0.000000000
+std- -0.000870656 -0.002702580 -0.002705600 -0.000306228
+mean 0.001818192 0.001840000 0.001830000 0.000010000
+std+ 0.004507039 0.006382580 0.006365600 0.000326228
+max 0.026389122 0.030000000 0.030000000 0.010000000
+std 0.002688848 0.004542580 0.004535600 0.000316228
+std% 147.885830391 246.879359662 247.847020509 3162.277660168
+harm 0.001475231 nan nan nan
+geo 0.001529059 0.000000000 0.000000000 0.000000000
+q1 0.001397133 0.000000000 0.000000000 0.000000000
+med 0.001406908 0.000000000 0.000000000 0.000000000
+q3 0.001425028 0.000000000 0.000000000 0.000000000
+ 1000 549.99706 0.001818192
+ calls calls/sec secs/call
+
+ 0.02514 -|
+ 0.02264 -|*
+ 0.02013 -|
+ 0.01763 -|
+ 0.01513 -|
+ 0.01263 -|
+ 0.01013 -|
+ 0.00762 -|
+ 0.00512 -|
+ 0.00262 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00141, iqr=0.00003, factor=3.00):
+high=63 very_high=132
+
+Ljung-Box statistics: q=15.00353 (alpha=0.05, df=50).
+0.00000 < 0.95000 => No autocorrelation was detected.
+
+GeneratorBenchmarkExt#generator_fast:
+ real total user system
+sum 1.826970100 1.830000000 1.820000000 0.010000000
+min 0.001377106 0.000000000 0.000000000 0.000000000
+std- -0.000992693 -0.002749527 -0.002708588 -0.000306228
+mean 0.001826970 0.001830000 0.001820000 0.000010000
+std+ 0.004646633 0.006409527 0.006348588 0.000326228
+max 0.027617931 0.030000000 0.030000000 0.010000000
+std 0.002819663 0.004579527 0.004528588 0.000316228
+std% 154.335471491 250.247404066 248.823509412 3162.277660168
+harm 0.001469225 nan nan nan
+geo 0.001522946 0.000000000 0.000000000 0.000000000
+q1 0.001402140 0.000000000 0.000000000 0.000000000
+med 0.001411915 0.000000000 0.000000000 0.000000000
+q3 0.001425982 0.000000000 0.000000000 0.000000000
+ 1000 547.35433 0.001826970
+ calls calls/sec secs/call
+
+ 0.02631 -|
+ 0.02368 -|*
+ 0.02106 -|
+ 0.01843 -|
+ 0.01581 -|
+ 0.01319 -|
+ 0.01056 -|
+ 0.00794 -|
+ 0.00531 -|
+ 0.00269 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00141, iqr=0.00002, factor=3.00):
+high=84 very_high=91
+
+Ljung-Box statistics: q=13.47105 (alpha=0.05, df=50).
+0.00000 < 0.95000 => No autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+-------------------------------------------------------------------------------
+
+This first run is only for warmup.
+GeneratorBenchmarkExt#generator_pretty:
+ real total user system
+sum 2.625656843 2.590000000 2.580000000 0.010000000
+min 0.002025127 0.000000000 0.000000000 0.000000000
+std- -0.000656844 -0.002684440 -0.002689855 -0.000306228
+mean 0.002625657 0.002590000 0.002580000 0.000010000
+std+ 0.005908158 0.007864440 0.007849855 0.000326228
+max 0.028638124 0.030000000 0.030000000 0.010000000
+std 0.003282501 0.005274440 0.005269855 0.000316228
+std% 125.016381076 203.646340853 204.257944451 3162.277660168
+harm 0.002154247 nan nan nan
+geo 0.002239052 0.000000000 0.000000000 0.000000000
+q1 0.002051830 0.000000000 0.000000000 0.000000000
+med 0.002062082 0.000000000 0.000000000 0.000000000
+q3 0.002082050 0.000000000 0.000000000 0.000000000
+ 1000 380.85708 0.002625657
+ calls calls/sec secs/call
+
+ 0.02731 -|
+ 0.02465 -|*
+ 0.02198 -|
+ 0.01932 -|
+ 0.01666 -|
+ 0.01400 -|
+ 0.01134 -|
+ 0.00868 -|
+ 0.00602 -|
+ 0.00336 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00206, iqr=0.00003, factor=3.00):
+high=98 very_high=107
+
+Ljung-Box statistics: q=349.53704 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkExt#generator_pretty:
+ real total user system
+sum 2.399331093 2.360000000 2.360000000 0.000000000
+min 0.002033949 0.000000000 0.000000000 0.000000000
+std- -0.000767217 -0.002736080 -0.002736080 0.000000000
+mean 0.002665923 0.002622222 0.002622222 0.000000000
+std+ 0.006099064 0.007980525 0.007980525 0.000000000
+max 0.029814005 0.030000000 0.030000000 0.000000000
+std 0.003433140 0.005358303 0.005358303 0.000000000
+std% 128.778658745 204.342051806 204.342051806 nan
+harm 0.002164550 nan nan nan
+geo 0.002253865 0.000000000 0.000000000 0.000000000
+q1 0.002059937 0.000000000 0.000000000 0.000000000
+med 0.002071142 0.000000000 0.000000000 0.000000000
+q3 0.002090931 0.000000000 0.000000000 0.000000000
+ 900 375.10455 0.002665923
+ calls calls/sec secs/call
+
+ 0.02843 -|
+ 0.02565 -|*
+ 0.02287 -|
+ 0.02009 -|
+ 0.01731 -|
+ 0.01453 -|
+ 0.01176 -|
+ 0.00898 -|
+ 0.00620 -|
+ 0.00342 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00207, iqr=0.00003, factor=3.00):
+high=89 very_high=86
+
+Ljung-Box statistics: q=342.52637 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+Truncated initial 100 measurements: 1000 -> 900 (-10.00%).
+-------------------------------------------------------------------------------
+
+This first run is only for warmup.
+GeneratorBenchmarkExt#generator_safe:
+ real total user system
+sum 2.218419790 2.210000000 2.210000000 0.000000000
+min 0.001708984 0.000000000 0.000000000 0.000000000
+std- -0.000607850 -0.002484458 -0.002484458 0.000000000
+mean 0.002218420 0.002210000 0.002210000 0.000000000
+std+ 0.005044690 0.006904458 0.006904458 0.000000000
+max 0.026993036 0.030000000 0.030000000 0.000000000
+std 0.002826270 0.004694458 0.004694458 0.000000000
+std% 127.400134370 212.418923782 212.418923782 nan
+harm 0.001839661 nan nan nan
+geo 0.001909029 0.000000000 0.000000000 0.000000000
+q1 0.001738071 0.000000000 0.000000000 0.000000000
+med 0.001749992 0.000000000 0.000000000 0.000000000
+q3 0.001769066 0.000000000 0.000000000 0.000000000
+ 1000 450.77131 0.002218420
+ calls calls/sec secs/call
+
+ 0.02573 -|
+ 0.02320 -|
+ 0.02067 -|
+ 0.01814 -|
+ 0.01562 -|
+ 0.01309 -|
+ 0.01056 -|
+ 0.00803 -|
+ 0.00550 -|
+ 0.00297 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00175, iqr=0.00003, factor=3.00):
+high=58 very_high=129
+
+Ljung-Box statistics: q=24.03262 (alpha=0.05, df=50).
+0.00070 < 0.95000 => No autocorrelation was detected.
+
+GeneratorBenchmarkExt#generator_safe:
+ real total user system
+sum 2.252413511 2.250000000 2.250000000 0.000000000
+min 0.001720905 0.000000000 0.000000000 0.000000000
+std- -0.000940042 -0.002634809 -0.002634809 0.000000000
+mean 0.002252414 0.002250000 0.002250000 0.000000000
+std+ 0.005444869 0.007134809 0.007134809 0.000000000
+max 0.030152082 0.030000000 0.030000000 0.000000000
+std 0.003192455 0.004884809 0.004884809 0.000000000
+std% 141.734856492 217.102633117 217.102633117 nan
+harm 0.001827244 nan nan nan
+geo 0.001895755 0.000000000 0.000000000 0.000000000
+q1 0.001747131 0.000000000 0.000000000 0.000000000
+med 0.001757145 0.000000000 0.000000000 0.000000000
+q3 0.001773119 0.000000000 0.000000000 0.000000000
+ 1000 443.96821 0.002252414
+ calls calls/sec secs/call
+
+ 0.02873 -|
+ 0.02589 -|*
+ 0.02304 -|
+ 0.02020 -|
+ 0.01736 -|
+ 0.01451 -|
+ 0.01167 -|
+ 0.00883 -|
+ 0.00599 -|
+ 0.00314 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00176, iqr=0.00003, factor=3.00):
+high=92 very_high=86
+
+Ljung-Box statistics: q=19.23732 (alpha=0.05, df=50).
+0.00003 < 0.95000 => No autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:54:07 CEST ===========================
+
+Comparing times (call_time_mean):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 547.354332608 ( real) -> 1.459x
+ 0.001826970
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 443.968212317 ( real) -> 1.184x
+ 0.002252414
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 375.104545883 ( real) -> 1.000x
+ 0.002665923
+ calls/sec ( time) -> speed covers
+ secs/call
+
+Comparing times (call_time_median):
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+ 708.258020939 ( real) -> 1.467x
+ 0.001411915
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+ 569.105020353 ( real) -> 1.179x
+ 0.001757145
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+ 482.825371244 ( real) -> 1.000x
+ 0.002071142
+ calls/sec ( time) -> speed covers
+ secs/call
+===============================================================================
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_fast.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat'.
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_pretty.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat'.
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_safe.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat'.
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat
new file mode 100644
index 0000000..39516bc
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.170725652741942
+3 -0.173770301666704
+4 -0.172897166156851
+5 -0.168221269286136
+6 -0.177979259169647
+7 0.175910550703494
+8 0.631061265876843
+9 -0.174719948437131
+10 -0.177293593621048
+11 -0.162698942321747
+12 -0.171029777522503
+13 -0.170296229667321
+14 0.528563135577363
+15 0.275831998572987
+16 -0.174813658667011
+17 -0.172093562954041
+18 -0.168544068156987
+19 -0.166590813818547
+20 -0.0638221070309873
+21 0.650522478992019
+22 0.0331509662336747
+23 -0.168760953941647
+24 -0.16341752594627
+25 -0.170818893187341
+26 -0.164732529292879
+27 0.162214061245849
+28 0.522886471249678
+29 -0.0702164490631389
+30 -0.170342702198113
+31 -0.161403416617991
+32 -0.166099481459981
+33 -0.11599356123736
+34 0.35515929301799
+35 0.320772083044373
+36 -0.117685112181583
+37 -0.169070189028916
+38 -0.159958239256153
+39 -0.159435335479438
+40 0.0319527022003592
+41 0.371475859420178
+42 0.175271663512744
+43 -0.138959890894007
+44 -0.163896984335847
+45 -0.169727435298396
+46 -0.13197665874304
+47 0.187359182943715
+48 0.291819477747683
+49 0.0816643898170594
+50 -0.150240775423654
+51 -0.150195661024305
+52 -0.165928012119222
+53 -0.0320978556096035
+54 0.221655302405546
+55 0.235675757438344
+56 0.0104091592019151
+57 -0.167146434535141
+58 -0.155117513175394
+59 -0.149297587622335
+60 0.0872938227826692
+61 0.203748825546551
+62 0.168550083168428
+63 -0.0396707902562578
+64 -0.158563031820387
+65 -0.159836689037633
+66 -0.0768666234623447
+67 0.148975157851596
+68 0.145123374753783
+69 0.133851392533958
+70 -0.0813691125651875
+71 -0.161000844437348
+72 -0.154719980109192
+73 0.0319631482416382
+74 0.130803526405489
+75 0.134803263091346
+76 0.0725284180216342
+77 -0.105199055037918
+78 -0.156074876537289
+79 -0.107946871185683
+80 0.0836764513383004
+81 0.114802110172454
+82 0.120184125868115
+83 0.0219557508902663
+84 -0.126340081403489
+85 -0.161799956489859
+86 -0.0125672540754974
+87 0.0971048482927368
+88 0.0787545812186751
+89 0.0948238873807684
+90 0.000719292583179628
+91 -0.14238726433046
+92 -0.123547942883664
+93 0.045691368088177
+94 0.0816329437452033
+95 0.0514248553628602
+96 0.079680652824934
+97 -0.0425865734879474
+98 -0.149657706603128
+99 -0.0482568721456359
+100 0.0598246932377812
+101 0.0730073630022969
+102 0.0493194581087269
+103 0.0614638905886062
+104 -0.0747784996077696
+105 -0.134762851026629
+106 0.0150375208487961
+107 0.0471753592749379
+108 0.0292261702954045
+109 0.0584126489508255
+110 0.0274065618881429
+111 -0.0923629805791867
+112 -0.0808051188610178
+113 0.0376068323578018
+114 0.0442243395389739
+115 0.0126091810820727
+116 0.0555017080552345
+117 -0.00777360178104387
+118 -0.0945093162279043
+119 -0.022038518955775
+120 0.0281685224822615
+121 0.0360696788220002
+122 0.00713767841566683
+123 0.0421452289712879
+124 -0.0237791430411877
+125 -0.0742603410791366
+126 0.00647409977150723
+127 0.023633020622411
+128 0.0112812718354579
+129 0.0206308476010651
+130 0.0255893471032846
+131 -0.0412520741546623
+132 -0.0335271150442982
+133 0.0103042519486441
+134 0.0216752613460992
+135 -0.0178133510217017
+136 0.0272498700028734
+137 0.016136487618036
+138 -0.0397127191558659
+139 0.000486023489007977
+140 0.00602879598312952
+141 0.0137117482424303
+142 -0.0239000113030396
+143 0.0256815555012877
+144 -0.00060378060179975
+145 -0.00976477458386044
+146 -0.00471952290156136
+147 0.00287226670988194
+148 -0.00739404113874663
+149 -0.00811924231656889
+150 0.0201609109752059
+151 0.00972768702895235
+152 0.000848772862832347
+153 -0.00315419376588145
+154 0.00325411212387319
+155 -0.0317897669469223
+156 0.00942578451848677
+157 -0.00114487370622857
+158 0.0316193613529631
+159 -0.0029035071383654
+160 -0.00961310004099253
+161 -0.00376402041194372
+162 -0.0304203576913082
+163 0.0040586071587507
+164 0.0181183011617105
+165 0.0289277830257262
+166 -0.00204748582187099
+167 -0.00833532939960483
+168 -0.0179545373314343
+169 -0.0281067596140224
+170 0.00621739022305282
+171 0.020061720611003
+172 0.0441951153685219
+173 -0.016767863675634
+174 -0.00891142478547904
+175 -0.034295757242845
+176 -0.016919846890981
+177 0.00444867679830856
+178 0.057088732705068
+179 0.01772144393744
+180 -0.0115305384915719
+181 -0.0214068916539082
+182 -0.0361142387382199
+183 -0.013268832313842
+184 0.010553526981677
+185 0.0641530212355029
+186 0.00531141736458679
+187 -0.0129434128279975
+188 -0.0288767748585849
+189 -0.0325395473006688
+190 -0.013236712565576
+191 0.0408115115996002
+192 0.0564202212852658
+193 -0.00419580869937261
+194 -0.0240043584548271
+195 -0.0410661026884763
+196 -0.0308430649531645
+197 -0.00193671234656414
+198 0.0574028584211738
+199 0.0464705207875104
+200 0.00131591241415564
+201 -0.0376248928893234
+202 -0.03907610654102
+203 -0.0270477565328025
+204 0.0208038841462715
+205 0.0713903559954449
+206 0.0172971300646441
+207 -0.0158722320069745
+208 -0.0368888763339713
+209 -0.0453718730430625
+210 -0.0217822862730174
+211 0.0539702430257461
+212 0.0523602401531812
+213 0.0209143114178913
+214 -0.0355801431609542
+215 -0.0377942204568278
+216 -0.0425711559012913
+217 -0.00707645512821953
+218 0.0728667936636181
+219 0.0361207184120543
+220 0.0128571335027956
+221 -0.0500603421741668
+222 -0.0391402365626237
+223 -0.0338696993621202
+224 0.0225822360602949
+225 0.0582954334884232
+226 0.0343772287798159
+227 0.000189606884889642
+228 -0.0526391089870516
+229 -0.0433107479511685
+230 -0.0222872074614468
+231 0.0506022312295133
+232 0.0475294709603697
+233 0.033409950599465
+234 -0.0396552908405006
+235 -0.0416731652109144
+236 -0.0376644416284466
+237 -0.0120295884760736
+238 0.0667676774080548
+239 0.0397241548411963
+240 0.0242686882994478
+241 -0.0511926472771689
+242 -0.0406717091383664
+243 -0.0294526606762824
+244 0.0122100601151817
+245 0.0582087173478016
+246 0.0279608706883549
+247 0.00958023333135808
+248 -0.0607734282446654
+249 -0.0326785608605117
+250 -0.0170207233666544
+251 0.0461938078567918
+252 0.0336445218462931
+253 0.0452208779230127
+254 -0.0303944318761255
+255 -0.0494219498376225
+256 -0.0318543144076625
+257 -0.00927701052965794
+258 0.0537742147750351
+259 0.0349392754231259
+260 0.0230828975637977
+261 -0.0377907249695523
+262 -0.0429055961196646
+263 -0.017728080300272
+264 0.000424042692478759
+265 0.0472551057914617
+266 0.0405778077745205
+267 -0.00156836352007451
+268 -0.0419460412931724
+269 -0.0345431630170736
+270 -0.0143420878981143
+271 0.0187023906658354
+272 0.0418900285241672
+273 0.0405074017275708
+274 -0.0190108947516174
+275 -0.0546041853190452
+276 -0.0171268537791246
+277 -0.0128446606789693
+278 0.0395381045567008
+279 0.0310776255240069
+280 0.0407363391562478
+281 -0.033091514570131
+282 -0.0503175108683564
+283 -0.022772349202314
+284 0.00530849685544454
+285 0.0324464330192744
+286 0.0465351961365909
+287 -0.00328476076139341
+288 -0.0300758395541426
+289 -0.0371777756744481
+290 -0.00431509980873169
+291 0.00608435003025785
+292 0.037638330575397
+293 0.0407716145244858
+294 -0.0176308532927816
+295 -0.0455722533058368
+296 -0.0254868606225217
+297 -0.00176448336443634
+298 0.015401834338667
+299 0.0470736363973921
+300 0.0286385461989055
+301 -0.02407787658874
+302 -0.0462179062100874
+303 -0.00954285257082467
+304 0.00223496307580496
+305 0.019441609399508
+306 0.0376394897901893
+307 0.0152437430866642
+308 -0.0312285316173427
+309 -0.0450095093247238
+310 0.00405494429487151
+311 -0.000906366188112425
+312 0.0342390932524035
+313 0.0351096044622525
+314 -0.0067200598875223
+315 -0.0344931951944617
+316 -0.0250051604191116
+317 -0.0079099140627721
+318 0.0136877534761663
+319 0.0470111495216969
+320 0.004066298860697
+321 -0.0106091011767897
+322 -0.035535335618417
+323 -0.00900628798721377
+324 -0.00437923810369414
+325 0.0183021198298254
+326 0.031707051659253
+327 0.0156128127338416
+328 -0.0272783407707802
+329 -0.036001647799748
+330 0.00528671926612521
+331 -0.000290217242915226
+332 0.0353019065669182
+333 0.00464723527656522
+334 0.00460168685380347
+335 -0.0215595994261557
+336 -0.0299493415452654
+337 -0.0034698093249361
+338 0.0165266322772037
+339 0.0315139059204056
+340 0.00362648192318334
+341 -0.00491801854061831
+342 -0.0231228284017189
+343 -0.0113129015126025
+344 -0.00300665710172655
+345 0.0130130997144332
+346 0.0223950145161189
+347 0.00202583064367953
+348 -0.0102668124711821
+349 -0.0253546874115718
+350 0.00644442693633731
+351 0.000780453480952724
+352 0.0284887918984724
+353 -0.00595281685205509
+354 0.0120132555793013
+355 -0.0181922031950026
+356 -0.0248881070928514
+357 -0.00242385809089605
+358 0.0194092079332272
+359 0.0144215071404531
+360 0.00612726395169545
+361 -0.00573485213524349
+362 -0.0117678537517965
+363 -0.0132866019915077
+364 -0.00168434348341747
+365 0.0210258042234829
+366 0.00299710982573773
+367 7.02933284912932e-05
+368 -0.00141527364094497
+369 -0.0174837658027455
+370 -0.00530972905386562
+371 0.00289284688712308
+372 0.0269088067868297
+373 -0.00857711045394559
+374 0.000634286012527533
+375 -0.00732827217084004
+376 -0.0129999392900683
+377 -0.00620543176764517
+378 0.0219005305671357
+379 0.00951579849769713
+380 -0.00156577259219444
+381 0.00334210346592974
+382 -0.0168913201522477
+383 -0.0140750807027531
+384 0.0026387459171992
+385 0.0167243976144324
+386 0.000401824368635554
+387 0.00494540377378665
+388 -0.0079650110757071
+389 -0.000153543070488744
+390 -0.0157596554184165
+391 0.00960203655959764
+392 0.0194333180320067
+393 -0.00698081626697105
+394 -0.00616259455878436
+395 -0.00885431917148208
+396 -0.000823472402578178
+397 -0.014306329807885
+398 0.0323044170275812
+399 -0.00116363767533424
+400 -0.00613094977576676
+401 0.00681272285172057
+402 -0.0120741370386856
+403 -0.00393525989936848
+404 0.00143625779594446
+405 0.0112941876899105
+406 0.00621416024416119
+407 -0.00715834709108978
+408 0.00349330341606058
+409 -0.0134328785266322
+410 -0.00983212957457947
+411 0.0170214269071715
+412 0.00768534801684557
+413 -0.00433253762066253
+414 0.00328760101068126
+415 -0.011902725027492
+416 0.0037433377806999
+417 -0.016429583975757
+418 0.0253614932452271
+419 0.00105507602999118
+420 -0.00501259523808327
+421 -0.0068805657075317
+422 -0.00611319813056072
+423 0.00133925647011242
+424 0.000593265112355031
+425 0.00636014210120566
+426 0.0100866038838847
+427 -0.0104562933845484
+428 -0.000506041760930212
+429 -0.003202190801565
+430 -0.00228403340255738
+431 0.00854908376124406
+432 0.00387003653786829
+433 -0.00478285696403202
+434 -0.00768626474153872
+435 0.00703888513154693
+436 -0.00944179389034701
+437 -0.001876043961929
+438 0.0164444486588937
+439 0.00420632904477211
+440 -0.0113129379390227
+441 -0.00359559614450257
+442 -0.00109952765661056
+443 0.0151360003108556
+444 -0.0154475593718288
+445 0.00602211025479499
+446 -0.000307234590538632
+447 0.0046588142745641
+448 -0.0126455787204799
+449 0.0111520432278555
+450 0.00974700164306953
+451 -0.0123611400743472
+452 0.0108946760123822
+453 -0.00120669950156729
+454 -0.0150988572259806
+455 0.00502353890121031
+456 0.00408149023215052
+457 0.00586521360666165
+458 -0.0102923932626118
+459 0.00382025608487933
+460 0.00255550573549941
+461 -0.00783828310549662
+462 0.00508824500063238
+463 0.0084446428666135
+464 -0.00872612495616409
+465 -0.0010875359595666
+466 0.00346175022973811
+467 -0.00495327642022978
+468 0.00325169084183052
+469 -0.00463312556182376
+470 0.0118854909647327
+471 -0.0171003407134582
+472 0.0123260637207544
+473 -0.00447510748083252
+474 -0.00707845418496072
+475 0.00755386113965643
+476 -0.00100076346057804
+477 0.00860719536195919
+478 -0.0136737162109966
+479 0.00711613796353955
+480 0.00622875998269613
+481 -0.0117802696216559
+482 0.00817288034030646
+483 -0.00010669129241017
+484 -0.00352870547469094
+485 -0.0041443261121201
+486 -0.000910571304832122
+487 0.00615718849758809
+488 0.00143910833275321
+489 -0.00107559220444337
+490 0.00356082962826646
+491 -0.00897791292059391
+492 0.00527546492556289
+493 0.00302276031439837
+494 -0.0139577905696164
+495 0.0153490659756607
+496 -0.00912850078466119
+497 0.000879808460620783
+498 0.000984936175184538
+499 0.0024123778693579
+500 0.00264304134465302
+501 -0.0020232636751576
+502 0.00551353717784557
+503 -0.00415080354514971
+504 -0.00545916667181435
+505 -0.00274028317951399
+506 0.00692379605051298
+507 0.00616679327772537
+508 -0.0103279571217553
+509 0.00599342336739776
+510 -0.00152316676140798
+511 -0.00167286162288039
+512 -0.00131993101685522
+513 0.0025282491153862
+514 -0.0017542373384818
+515 0.0105600742581342
+516 -0.0132267654750864
+517 0.00283731663919629
+518 -0.00266741199361332
+519 0.00157444027950648
+520 0.00420858755299597
+521 -0.00658258017129261
+522 0.00508600113202915
+523 -0.00598002733029911
+524 -0.000368464512649264
+525 0.00317302663744126
+526 0.00115765014094958
+527 0.00267985546857361
+528 -5.46265185716715e-05
+529 -0.0020009411803283
+530 0.00486700543717424
+531 -0.00895876165620023
+532 -0.00299164146372051
+533 0.00312859041046786
+534 0.00209406747343818
+535 0.00673942768658441
+536 -0.0080409196789959
+537 0.00240456617470404
+538 -0.00873512083231826
+539 0.0131577627923678
+540 -0.00665539290143677
+541 0.00346454545303284
+542 0.0035973446316873
+543 -0.00868085967804022
+544 -0.00333236624454644
+545 -0.000196442609818114
+546 0.00024806978901623
+547 0.00902390850008458
+548 0.00455805912058593
+549 -0.0021927440377309
+550 -0.00266277815142354
+551 -0.00688313353751191
+552 0.00853131376210095
+553 -0.00393842096864295
+554 -0.00523274211550968
+555 0.0169329221829408
+556 -0.0127945093367028
+557 -0.00072480763790979
+558 -0.00747843149724429
+559 0.0098746166146274
+560 -0.00240342067223121
+561 0.00696610332249864
+562 -0.00223635183687814
+563 -0.00541969587447053
+564 0.000337137313027405
+565 -0.00633065126280832
+566 0.00910870585819199
+567 -0.00455095051161683
+568 0.0151312578540391
+569 -0.0138690307629985
+570 0.00185264574846404
+571 -0.00664259858046173
+572 -0.00312306915210339
+573 0.0115985176835154
+574 -0.00759201236341693
+575 0.0123033300962974
+576 -0.0116628565174072
+577 0.00192424927530433
+578 -0.00508184861795511
+579 0.00510239186439487
+580 0.0086553620645795
+581 -0.00172738282515301
+582 -0.0021965366527628
+583 -0.00611685505872929
+584 -0.00193581230608064
+585 -0.00107517411193112
+586 0.00446964598329358
+587 -0.000130069247618965
+588 0.0106723190798826
+589 -0.00893242845988889
+590 -0.00281814645132135
+591 -0.00320913741145263
+592 0.00122039092287541
+593 0.0131068648072679
+594 -0.0156363425833423
+595 0.0163402377490577
+596 -0.0178296060018707
+597 0.00292057772226031
+598 0.0026057160047535
+599 -0.0056620372273394
+600 0.0221246161887441
+601 -0.0124193991673087
+602 0.0116954284234103
+603 -0.0182733365810819
+604 0.00268681939875375
+605 0.000740456981363333
+606 0.00452604181556726
+607 0.00480547630796285
+608 -0.00481203219844089
+609 -0.00358228345456814
+610 0.00284875874479068
+611 -0.00700099168490112
+612 0.00572849008389633
+613 0.0009937821532389
+614 0.00731073451366145
+615 0.00170654591193711
+616 -0.0139804622453969
+617 -0.00443468421233479
+618 0.00531823173567082
+619 -0.00198161915266415
+620 0.0150254959665873
+621 -0.00831801965928389
+622 0.00172646514060601
+623 -0.00862060723221882
+624 -0.00433533060780036
+625 0.00756501714009114
+626 -0.00135836313194754
+627 0.00932877978173298
+628 0.00124802151466854
+629 -0.00395113636252646
+630 -0.00485990513214748
+631 -0.00663176926963557
+632 -0.0010820412567438
+633 0.0133592195871343
+634 -0.00141240259407419
+635 0.00139234037081884
+636 -0.00360777343366459
+637 -0.0045878817789227
+638 -0.00220204565644013
+639 0.00147686629423844
+640 0.00543470252168979
+641 0.0105896351713388
+642 -0.00973902671101576
+643 -0.00668023801257986
+644 -0.00936843265363968
+645 0.0089634651091583
+646 3.84562452729655e-05
+647 0.00384580055961138
+648 0.0229816090537144
+649 -0.0184332961015907
+650 -0.00529759065480934
+651 -0.0066870495503683
+652 0.00225769689469144
+653 0.0102460370689819
+654 0.00338482338024052
+655 0.00379747442016746
+656 -0.00712302572663179
+657 -0.0114322113895202
+658 -0.00273386445516078
+659 0.00553489607050495
+660 0.00837690540674999
+661 0.00940739102513669
+662 -0.0053486413343748
+663 -0.00315193594161813
+664 -0.0105647918156018
+665 -0.00691297631409873
+666 0.0142090509210798
+667 -0.000975698964492755
+668 0.0132255885174397
+669 -0.00325960303321359
+670 -0.006651275593499
+671 -0.0192763045572716
+672 0.00410496738893783
+673 0.00865425824492816
+674 0.0074519049626705
+675 0.00640440261542484
+676 -0.00248884860489984
+677 -0.0175933146891799
+678 -0.00288003343042402
+679 0.00834623453163345
+680 -0.00449041088509132
+681 0.0232105507895105
+682 -0.00534719486763679
+683 -0.00392566304421506
+684 -0.0192148623617993
+685 -0.00286039387718507
+686 0.0169363828012178
+687 -0.00383913263684977
+688 0.0147166901415108
+689 -0.00527685630258491
+690 -0.00534763716897078
+691 -0.013028036623984
+692 0.00109856360189917
+693 0.00429859241906058
+694 0.0110770507839361
+695 0.00389958466319795
+696 -0.00500164744078786
+697 -0.00580430434909617
+698 -0.0175348619428549
+699 0.018367710926664
+700 -0.00285520470226993
+701 0.0191604505372293
+702 -0.00572139870349262
+703 -0.00245556604337348
+704 -0.0107607119705179
+705 -0.00773541821274989
+706 0.00425886688313039
+707 0.00803784819561882
+708 0.0116278126911605
+709 -0.00361748710592387
+710 -0.0039055675458961
+711 -0.0187689003370071
+712 0.00721078757871366
+713 -0.00118844249034332
+714 0.0125434153334007
+715 0.0101599061260829
+716 -0.00351197692479239
+717 -0.0123155660331183
+718 -0.0108643040658882
+719 0.00554949017948381
+720 0.00257600141246878
+721 0.00621936965849692
+722 0.0147249169696155
+723 -0.0117208865566673
+724 -0.0123019859554356
+725 -0.00803010597732602
+726 0.00658862562929511
+727 0.00614064100015319
+728 0.008551217239909
+729 0.0136644617518446
+730 -0.015679112924688
+731 -0.0164762866576538
+732 -0.00450956642363176
+733 0.00672813330266014
+734 0.0163514096475234
+735 0.00144257368405246
+736 0.00632093496019618
+737 -0.0144540308342644
+738 -0.0116512949908104
+739 -0.00303930205795109
+740 0.00684139171029531
+741 0.0157237606456902
+742 0.00173826522952491
+743 0.00162052201072558
+744 -0.0225327170375728
+745 -0.00244349662721446
+746 -0.00369988442043602
+747 0.020606075524278
+748 0.00234950019819143
+749 0.00933962911886964
+750 -0.00497392363419004
+751 -0.0191622234756475
+752 0.00152935854260608
+753 -0.00746413948201927
+754 0.0210618579576008
+755 0.00337450745565617
+756 0.0116901903545899
+757 -0.0211051168455275
+758 -0.0116996994412557
+759 -0.00384503529844727
+760 0.0106920319592258
+761 0.00606434563857974
+762 0.0109288893744588
+763 0.0065913741548423
+764 -0.024843059360248
+765 -0.00145794491644285
+766 -0.015899201893062
+767 0.0293737522747255
+768 0.000429876419139015
+769 0.0117737352022464
+770 -0.011804032635419
+771 -0.0160558691300165
+772 -0.00680765187518244
+773 0.00115856328840688
+774 0.016936256215249
+775 0.00599154100809263
+776 0.00618605288716798
+777 -0.0133717924580297
+778 -0.00856753018227533
+779 -0.0122498868461665
+780 0.0184368989458328
+781 0.00826995605347898
+782 -0.00370110797731906
+783 0.00766740753297887
+784 -0.0106558949199266
+785 -0.0145918234070912
+786 0.00262754124009611
+787 0.00732095805793885
+788 0.0141175867672096
+789 0.000917093953717164
+790 -0.00610693085809193
+791 -0.00263724165375204
+792 -0.0223403739509282
+793 0.0155086188394132
+794 -0.000414907985012158
+795 0.00818366497095633
+796 0.00390922245137539
+797 0.000518897249907908
+798 -0.0114231682864646
+799 -0.0131434185021701
+800 0.0106325516600345
+801 0.00726206049320438
+802 0.011973193565835
+803 -0.0117164916752715
+804 0.00837431504618953
+805 -0.0176484202352301
+806 -0.00242926974706211
+807 0.00617275793654123
+808 0.00157428575173083
+809 0.0140869636480763
+810 -0.00799595335938592
+811 -0.00145797624072917
+812 -0.0163218480242698
+813 0.0102032846601359
+814 0.00334029936869413
+815 0.00596774673469088
+816 -0.00191679139866682
+817 0.00111982507739117
+818 -0.00466131055412295
+819 -0.009977558947507
+820 0.0070518233255565
+821 -0.00235106334091928
+822 0.0135818413020524
+823 -0.0124536640788948
+824 0.00961249011142124
+825 -0.012067111031695
+826 0.000746163532116685
+827 -0.000618612461237987
+828 0.00932264378392892
+829 -0.00138865174580641
+830 -0.0026558878506514
+831 0.0039382752792092
+832 -0.00629021025673958
+833 -0.00703454327061739
+834 0.000852556936383089
+835 0.0170439482297759
+836 -0.0100201779805253
+837 0.00412500179406067
+838 -0.00228249593639731
+839 0.00340179323986006
+840 -0.0152704223182198
+841 0.0106042546349877
+842 0.00124240796525085
+843 0.000187170197715872
+844 -0.00396092509138278
+845 0.00476886425336974
+846 -0.00278502915166355
+847 -0.0105600821274784
+848 0.0187548308543433
+849 -0.0101103834519274
+850 0.00609860589988799
+851 -0.00970023587707483
+852 0.0175534712886796
+853 -0.0150157009573689
+854 0.000240696590543887
+855 0.00334623999363693
+856 0.000756223924502869
+857 -0.0019111813337376
+858 -0.000465320516901212
+859 0.0102121697808577
+860 -0.0119235594699214
+861 -0.000513039517075994
+862 7.13470533304221e-05
+863 0.00602093194270405
+864 -0.00562228912014448
+865 0.00897532104113402
+866 0.00135722877208738
+867 -0.0107137791823794
+868 0.000349804975704247
+869 0.00196275441326171
+870 -0.00207881051818241
+871 -0.00504133443326138
+872 0.01798662824207
+873 -0.00512468690960391
+874 -0.00936398567940176
+875 -0.00350357584735409
+876 0.00844402907196902
+877 -0.00535212289603013
+878 0.00359477004645202
+879 0.0100259050577573
+880 -0.00448613112164086
+881 -0.00772718523343422
+882 -0.00407471844508272
+883 0.00258842651253074
+884 -0.00497542569393132
+885 0.0140374940981116
+886 0.00485938827108293
+887 -0.00522635448674892
+888 -0.00995747147865195
+889 0.00286884969081893
+890 -0.00263726932721365
+891 0.00281869362544293
+892 0.00413911124089107
+893 0.00641299274583358
+894 -0.00461483322781905
+895 -0.00973466510643417
+896 -0.00244121423716433
+897 -0.00187439261201581
+898 0.0167254251905489
+899 -0.00323557017026858
+900 0.0070698910566062
+901 -0.00984192453152891
+902 -0.00745285112891651
+903 -0.00156488511331396
+904 0.00648910969501878
+905 0.00778960101933796
+906 -0.00110773006555918
+907 0.00797123926504478
+908 -0.0172915924405978
+909 -0.00567453921434972
+910 -0.00093198227439079
+911 0.017699519362806
+912 -0.000318037037700945
+913 -0.000901743764017103
+914 0.00248888283323065
+915 -0.0142481225576747
+916 -0.00627435836721236
+917 0.00855187280647071
+918 0.0105572049962355
+919 0.000583931991033486
+920 -4.30556267490633e-05
+921 -0.0045108941062306
+922 -0.0133739157611831
+923 -0.00313115415898723
+924 0.0189188436677887
+925 0.00153514138422627
+926 0.00103320993409772
+927 0.00112288481924235
+928 -0.00928188326624581
+929 -0.0129274841698096
+930 0.00498882941992066
+931 0.0128685052672079
+932 0.00095422558746866
+933 0.00287762148255505
+934 -0.00475028532754077
+935 -0.00822865912701703
+936 -0.00757218985298937
+937 0.0125664162380766
+938 0.00270238634995215
+939 0.00302457671529668
+940 0.00428294440890637
+941 -0.00899111620928394
+942 -0.0110893993806093
+943 0.00141333596146868
+944 0.00563271971888788
+945 0.00411002278120649
+946 0.00615934836425166
+947 -0.00174830591696001
+948 -0.00690959640532146
+949 -0.00762102396102174
+950 0.00236971536529725
+951 0.00460497853674718
+952 0.00598101123225428
+953 0.00706347780702416
+954 -0.0072207235025214
+955 -0.00731160125486541
+956 -0.00624993042258776
+957 0.00302766462338833
+958 0.00586320595091301
+959 0.00757297545746186
+960 0.000503174678108187
+961 -0.00664203641468952
+962 -0.00405954777539984
+963 -0.00594873760338403
+964 0.00307617052361439
+965 0.00775330844648307
+966 0.00843784117689838
+967 -0.00583155486504129
+968 -0.00522157454280821
+969 -0.00285538010476946
+970 -0.00558783047918071
+971 0.00390712343424286
+972 0.00929413763014091
+973 0.00249794635456826
+974 -0.00403614631431915
+975 -0.00252223207691292
+976 -0.00372319999128239
+977 -0.00468425218841592
+978 0.00588461196845991
+979 0.0101947594770192
+980 -0.00382374940790093
+981 -0.00256280880770612
+982 -0.00238724745188651
+983 -0.00254031623097892
+984 -0.00349304284255843
+985 0.00656620792235621
+986 0.0047392335299334
+987 -0.00245644332451687
+988 -0.000949186258308068
+989 -0.00204517319399663
+990 -0.00117348041470723
+991 -0.00165335740901138
+992 0.00532507797594932
+993 -0.00112887412444135
+994 -0.00102507341491478
+995 -0.000239825549954329
+996 -0.000229034611702856
+997 -0.00048382116878178
+998 -0.000558954253318938
+999 0.000343539178586105
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat
new file mode 100644
index 0000000..9c717bb
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0163400173187256 0.00999999999999091 0.00999999999999091 0.0 1
+2 0.0159189701080322 0.00999999999999091 0.00999999999999091 0.0 2
+3 0.0164740085601807 0.0200000000000102 0.0200000000000102 0.0 3
+4 0.0157279968261719 0.00999999999999091 0.00999999999999091 0.0 4
+5 0.0157220363616943 0.0200000000000102 0.0200000000000102 0.0 5
+6 0.0156500339508057 0.00999999999999091 0.00999999999999091 0.0 6
+7 0.0407540798187256 0.0499999999999829 0.0499999999999829 0.0 7
+8 0.0177309513092041 0.0100000000000193 0.0100000000000193 0.0 8
+9 0.0160109996795654 0.0199999999999818 0.0199999999999818 0.0 9
+10 0.0159001350402832 0.0100000000000193 0.0100000000000193 0.0 10
+11 0.0192539691925049 0.0199999999999818 0.0199999999999818 0.0 11
+12 0.0170741081237793 0.0200000000000102 0.0200000000000102 0.0 12
+13 0.0155148506164551 0.0200000000000102 0.0200000000000102 0.0 13
+14 0.0416128635406494 0.039999999999992 0.039999999999992 0.0 14
+15 0.0161120891571045 0.00999999999999091 0.00999999999999091 0.0 15
+16 0.0159459114074707 0.0200000000000102 0.0200000000000102 0.0 16
+17 0.0158929824829102 0.0200000000000102 0.0200000000000102 0.0 17
+18 0.0158240795135498 0.00999999999999091 0.00999999999999091 0.0 18
+19 0.0156450271606445 0.0199999999999818 0.0199999999999818 0.0 19
+20 0.0159389972686768 0.0100000000000193 0.0100000000000193 0.0 20
+21 0.0409190654754639 0.039999999999992 0.039999999999992 0.0 21
+22 0.0160489082336426 0.0200000000000102 0.0200000000000102 0.0 22
+23 0.0169320106506348 0.0199999999999818 0.0199999999999818 0.0 23
+24 0.0198559761047363 0.0200000000000102 0.0200000000000102 0.0 24
+25 0.0158309936523438 0.00999999999999091 0.00999999999999091 0.0 25
+26 0.0156970024108887 0.0200000000000102 0.0200000000000102 0.0 26
+27 0.0156750679016113 0.0200000000000102 0.0200000000000102 0.0 27
+28 0.0406918525695801 0.039999999999992 0.039999999999992 0.0 28
+29 0.0161190032958984 0.00999999999999091 0.00999999999999091 0.0 29
+30 0.0162358283996582 0.0200000000000102 0.0200000000000102 0.0 30
+31 0.0158340930938721 0.00999999999999091 0.00999999999999091 0.0 31
+32 0.0157299041748047 0.0200000000000102 0.0200000000000102 0.0 32
+33 0.0156428813934326 0.0199999999999818 0.0199999999999818 0.0 33
+34 0.0156571865081787 0.0100000000000193 0.0100000000000193 0.0 34
+35 0.0409109592437744 0.039999999999992 0.039999999999992 0.0 35
+36 0.0192060470581055 0.0200000000000102 0.0200000000000102 0.0 36
+37 0.0160908699035645 0.0199999999999818 0.0199999999999818 0.0 37
+38 0.0158319473266602 0.0100000000000193 0.0100000000000193 0.0 38
+39 0.0157558917999268 0.0199999999999818 0.0199999999999818 0.0 39
+40 0.0158040523529053 0.0200000000000102 0.0200000000000102 0.0 40
+41 0.0156400203704834 0.00999999999999091 0.00999999999999091 0.0 41
+42 0.0408070087432861 0.0400000000000205 0.0400000000000205 0.0 42
+43 0.0159420967102051 0.0199999999999818 0.0199999999999818 0.0 43
+44 0.0159668922424316 0.00999999999999091 0.00999999999999091 0.0 44
+45 0.0213000774383545 0.0300000000000011 0.0300000000000011 0.0 45
+46 0.0170960426330566 0.0100000000000193 0.0100000000000193 0.0 46
+47 0.0160157680511475 0.0199999999999818 0.0199999999999818 0.0 47
+48 0.0156497955322266 0.0100000000000193 0.0100000000000193 0.0 48
+49 0.0446329116821289 0.0499999999999829 0.0499999999999829 0.0 49
+50 0.016150951385498 0.0200000000000102 0.0200000000000102 0.0 50
+51 0.0159158706665039 0.00999999999999091 0.00999999999999091 0.0 51
+52 0.0157129764556885 0.0200000000000102 0.0200000000000102 0.0 52
+53 0.0165328979492188 0.00999999999999091 0.00999999999999091 0.0 53
+54 0.0156497955322266 0.0200000000000102 0.0200000000000102 0.0 54
+55 0.0156981945037842 0.0200000000000102 0.0200000000000102 0.0 55
+56 0.0412800312042236 0.039999999999992 0.039999999999992 0.0 56
+57 0.0159571170806885 0.00999999999999091 0.00999999999999091 0.0 57
+58 0.015887975692749 0.0200000000000102 0.0200000000000102 0.0 58
+59 0.0158159732818604 0.00999999999999091 0.00999999999999091 0.0 59
+60 0.0156238079071045 0.0200000000000102 0.0200000000000102 0.0 60
+61 0.0156691074371338 0.0199999999999818 0.0199999999999818 0.0 61
+62 0.0447931289672852 0.0400000000000205 0.0400000000000205 0.0 62
+63 0.0160729885101318 0.0199999999999818 0.0199999999999818 0.0 63
+64 0.016963005065918 0.0100000000000193 0.0100000000000193 0.0 64
+65 0.015869140625 0.0199999999999818 0.0199999999999818 0.0 65
+66 0.0158119201660156 0.0200000000000102 0.0200000000000102 0.0 66
+67 0.0156521797180176 0.00999999999999091 0.00999999999999091 0.0 67
+68 0.0156309604644775 0.0200000000000102 0.0200000000000102 0.0 68
+69 0.0406920909881592 0.039999999999992 0.039999999999992 0.0 69
+70 0.0161399841308594 0.00999999999999091 0.00999999999999091 0.0 70
+71 0.0160379409790039 0.0200000000000102 0.0200000000000102 0.0 71
+72 0.0158870220184326 0.0200000000000102 0.0200000000000102 0.0 72
+73 0.0157949924468994 0.00999999999999091 0.00999999999999091 0.0 73
+74 0.019942045211792 0.0200000000000102 0.0200000000000102 0.0 74
+75 0.0156691074371338 0.0199999999999818 0.0199999999999818 0.0 75
+76 0.0406370162963867 0.0400000000000205 0.0400000000000205 0.0 76
+77 0.0160510540008545 0.00999999999999091 0.00999999999999091 0.0 77
+78 0.0159440040588379 0.0200000000000102 0.0200000000000102 0.0 78
+79 0.0159609317779541 0.0199999999999818 0.0199999999999818 0.0 79
+80 0.0160808563232422 0.0100000000000193 0.0100000000000193 0.0 80
+81 0.0156311988830566 0.0199999999999818 0.0199999999999818 0.0 81
+82 0.0157270431518555 0.00999999999999091 0.00999999999999091 0.0 82
+83 0.041240930557251 0.0500000000000114 0.0500000000000114 0.0 83
+84 0.0165321826934814 0.00999999999999091 0.00999999999999091 0.0 84
+85 0.0159039497375488 0.0200000000000102 0.0200000000000102 0.0 85
+86 0.0183000564575195 0.0200000000000102 0.0200000000000102 0.0 86
+87 0.0168759822845459 0.00999999999999091 0.00999999999999091 0.0 87
+88 0.0156400203704834 0.0200000000000102 0.0200000000000102 0.0 88
+89 0.0156240463256836 0.00999999999999091 0.00999999999999091 0.0 89
+90 0.0415260791778564 0.0500000000000114 0.0500000000000114 0.0 90
+91 0.0159800052642822 0.00999999999999091 0.00999999999999091 0.0 91
+92 0.0159440040588379 0.0200000000000102 0.0200000000000102 0.0 92
+93 0.0158178806304932 0.00999999999999091 0.00999999999999091 0.0 93
+94 0.0157041549682617 0.0199999999999818 0.0199999999999818 0.0 94
+95 0.0200591087341309 0.0200000000000102 0.0200000000000102 0.0 95
+96 0.018794059753418 0.0200000000000102 0.0200000000000102 0.0 96
+97 0.0408840179443359 0.039999999999992 0.039999999999992 0.0 97
+98 0.0196928977966309 0.0200000000000102 0.0200000000000102 0.0 98
+99 0.016610860824585 0.0199999999999818 0.0199999999999818 0.0 99
+100 0.0157420635223389 0.0100000000000193 0.0100000000000193 0.0 100
+101 0.015739917755127 0.0199999999999818 0.0199999999999818 0.0 101
+102 0.015592098236084 0.0100000000000193 0.0100000000000193 0.0 102
+103 0.0156228542327881 0.0199999999999818 0.0199999999999818 0.0 103
+104 0.0417301654815674 0.0400000000000205 0.0400000000000205 0.0 104
+105 0.015916109085083 0.0199999999999818 0.0199999999999818 0.0 105
+106 0.0158488750457764 0.00999999999999091 0.00999999999999091 0.0 106
+107 0.015733003616333 0.0200000000000102 0.0200000000000102 0.0 107
+108 0.0156040191650391 0.00999999999999091 0.00999999999999091 0.0 108
+109 0.0155818462371826 0.0200000000000102 0.0200000000000102 0.0 109
+110 0.041733980178833 0.039999999999992 0.039999999999992 0.0 110
+111 0.0190949440002441 0.0200000000000102 0.0200000000000102 0.0 111
+112 0.0159502029418945 0.0200000000000102 0.0200000000000102 0.0 112
+113 0.015855073928833 0.00999999999999091 0.00999999999999091 0.0 113
+114 0.0161051750183105 0.0200000000000102 0.0200000000000102 0.0 114
+115 0.0168948173522949 0.0199999999999818 0.0199999999999818 0.0 115
+116 0.0157649517059326 0.0100000000000193 0.0100000000000193 0.0 116
+117 0.0404441356658936 0.039999999999992 0.039999999999992 0.0 117
+118 0.0158331394195557 0.0199999999999818 0.0199999999999818 0.0 118
+119 0.0158309936523438 0.0100000000000193 0.0100000000000193 0.0 119
+120 0.0155770778656006 0.0199999999999818 0.0199999999999818 0.0 120
+121 0.0154340267181396 0.0100000000000193 0.0100000000000193 0.0 121
+122 0.0155458450317383 0.0199999999999818 0.0199999999999818 0.0 122
+123 0.0156569480895996 0.0200000000000102 0.0200000000000102 0.0 123
+124 0.0447821617126465 0.0499999999999829 0.039999999999992 0.01 124
+125 0.0162930488586426 0.0200000000000102 0.0200000000000102 0.0 125
+126 0.0159821510314941 0.00999999999999091 0.00999999999999091 0.0 126
+127 0.0158350467681885 0.0200000000000102 0.0200000000000102 0.0 127
+128 0.0157771110534668 0.00999999999999091 0.00999999999999091 0.0 128
+129 0.0155949592590332 0.0200000000000102 0.0200000000000102 0.0 129
+130 0.015751838684082 0.0200000000000102 0.0200000000000102 0.0 130
+131 0.0409200191497803 0.039999999999992 0.039999999999992 0.0 131
+132 0.0159509181976318 0.00999999999999091 0.00999999999999091 0.0 132
+133 0.0159890651702881 0.0200000000000102 0.0200000000000102 0.0 133
+134 0.015902042388916 0.00999999999999091 0.00999999999999091 0.0 134
+135 0.0158298015594482 0.0200000000000102 0.0200000000000102 0.0 135
+136 0.0156691074371338 0.0199999999999818 0.0199999999999818 0.0 136
+137 0.0194599628448486 0.0200000000000102 0.0200000000000102 0.0 137
+138 0.0408408641815186 0.039999999999992 0.039999999999992 0.0 138
+139 0.0161910057067871 0.0100000000000193 0.0100000000000193 0.0 139
+140 0.0158939361572266 0.0199999999999818 0.0199999999999818 0.0 140
+141 0.0157690048217773 0.0100000000000193 0.0100000000000193 0.0 141
+142 0.0156970024108887 0.0199999999999818 0.0199999999999818 0.0 142
+143 0.015625 0.0200000000000102 0.0200000000000102 0.0 143
+144 0.0156629085540771 0.00999999999999091 0.00999999999999091 0.0 144
+145 0.0474429130554199 0.0500000000000114 0.0500000000000114 0.0 145
+146 0.0159988403320312 0.0199999999999818 0.0199999999999818 0.0 146
+147 0.0159039497375488 0.0100000000000193 0.0100000000000193 0.0 147
+148 0.0157449245452881 0.0199999999999818 0.0199999999999818 0.0 148
+149 0.0188858509063721 0.0200000000000102 0.0200000000000102 0.0 149
+150 0.0156919956207275 0.00999999999999091 0.00999999999999091 0.0 150
+151 0.0404269695281982 0.0400000000000205 0.0400000000000205 0.0 151
+152 0.0160980224609375 0.0199999999999818 0.0199999999999818 0.0 152
+153 0.0167350769042969 0.0200000000000102 0.0200000000000102 0.0 153
+154 0.0159759521484375 0.00999999999999091 0.00999999999999091 0.0 154
+155 0.0158588886260986 0.0200000000000102 0.0200000000000102 0.0 155
+156 0.01568603515625 0.00999999999999091 0.00999999999999091 0.0 156
+157 0.0156669616699219 0.0200000000000102 0.0200000000000102 0.0 157
+158 0.0405089855194092 0.039999999999992 0.039999999999992 0.0 158
+159 0.0160729885101318 0.0200000000000102 0.0200000000000102 0.0 159
+160 0.0159640312194824 0.00999999999999091 0.00999999999999091 0.0 160
+161 0.0188910961151123 0.0200000000000102 0.0200000000000102 0.0 161
+162 0.0166840553283691 0.0199999999999818 0.0199999999999818 0.0 162
+163 0.0156660079956055 0.0100000000000193 0.0100000000000193 0.0 163
+164 0.0156950950622559 0.0199999999999818 0.0199999999999818 0.0 164
+165 0.0416688919067383 0.0400000000000205 0.0400000000000205 0.0 165
+166 0.0159718990325928 0.0199999999999818 0.0199999999999818 0.0 166
+167 0.0159449577331543 0.0100000000000193 0.0100000000000193 0.0 167
+168 0.0157949924468994 0.0199999999999818 0.0199999999999818 0.0 168
+169 0.0157520771026611 0.00999999999999091 0.00999999999999091 0.0 169
+170 0.0157308578491211 0.0200000000000102 0.0200000000000102 0.0 170
+171 0.0156319141387939 0.0200000000000102 0.0200000000000102 0.0 171
+172 0.0406780242919922 0.039999999999992 0.039999999999992 0.0 172
+173 0.0182578563690186 0.00999999999999091 0.00999999999999091 0.0 173
+174 0.0166499614715576 0.0200000000000102 0.0200000000000102 0.0 174
+175 0.0157749652862549 0.0200000000000102 0.0200000000000102 0.0 175
+176 0.0156049728393555 0.00999999999999091 0.00999999999999091 0.0 176
+177 0.0155508518218994 0.0200000000000102 0.0200000000000102 0.0 177
+178 0.0155460834503174 0.00999999999999091 0.00999999999999091 0.0 178
+179 0.0410678386688232 0.0500000000000114 0.0500000000000114 0.0 179
+180 0.0161750316619873 0.00999999999999091 0.00999999999999091 0.0 180
+181 0.0159769058227539 0.0199999999999818 0.0199999999999818 0.0 181
+182 0.0157239437103271 0.0100000000000193 0.0100000000000193 0.0 182
+183 0.0155858993530273 0.0199999999999818 0.0199999999999818 0.0 183
+184 0.0157029628753662 0.0100000000000193 0.0100000000000193 0.0 184
+185 0.0406639575958252 0.0499999999999829 0.0499999999999829 0.0 185
+186 0.020313024520874 0.0200000000000102 0.0200000000000102 0.0 186
+187 0.0159680843353271 0.00999999999999091 0.00999999999999091 0.0 187
+188 0.0159218311309814 0.0200000000000102 0.0200000000000102 0.0 188
+189 0.0158710479736328 0.00999999999999091 0.00999999999999091 0.0 189
+190 0.0158529281616211 0.0200000000000102 0.0200000000000102 0.0 190
+191 0.0155730247497559 0.0200000000000102 0.0200000000000102 0.0 191
+192 0.0405440330505371 0.039999999999992 0.039999999999992 0.0 192
+193 0.0161638259887695 0.00999999999999091 0.00999999999999091 0.0 193
+194 0.0165688991546631 0.0200000000000102 0.0200000000000102 0.0 194
+195 0.0231571197509766 0.0199999999999818 0.0199999999999818 0.0 195
+196 0.0159261226654053 0.0200000000000102 0.0200000000000102 0.0 196
+197 0.015887975692749 0.00999999999999091 0.00999999999999091 0.0 197
+198 0.0156550407409668 0.0200000000000102 0.0200000000000102 0.0 198
+199 0.0435981750488281 0.039999999999992 0.039999999999992 0.0 199
+200 0.0159139633178711 0.0200000000000102 0.0200000000000102 0.0 200
+201 0.0158441066741943 0.00999999999999091 0.00999999999999091 0.0 201
+202 0.0157480239868164 0.0200000000000102 0.0200000000000102 0.0 202
+203 0.0163719654083252 0.0200000000000102 0.0200000000000102 0.0 203
+204 0.0156970024108887 0.00999999999999091 0.00999999999999091 0.0 204
+205 0.01556396484375 0.0200000000000102 0.0200000000000102 0.0 205
+206 0.0408110618591309 0.039999999999992 0.039999999999992 0.0 206
+207 0.0159599781036377 0.0199999999999818 0.0199999999999818 0.0 207
+208 0.0159690380096436 0.0100000000000193 0.0100000000000193 0.0 208
+209 0.0159268379211426 0.0199999999999818 0.0199999999999818 0.0 209
+210 0.0157289505004883 0.0100000000000193 0.0100000000000193 0.0 210
+211 0.0156691074371338 0.0199999999999818 0.0199999999999818 0.0 211
+212 0.0189340114593506 0.0200000000000102 0.0200000000000102 0.0 212
+213 0.0407509803771973 0.039999999999992 0.039999999999992 0.0 213
+214 0.0168440341949463 0.0200000000000102 0.0200000000000102 0.0 214
+215 0.0158839225769043 0.00999999999999091 0.00999999999999091 0.0 215
+216 0.0157129764556885 0.0200000000000102 0.0200000000000102 0.0 216
+217 0.0155618190765381 0.00999999999999091 0.00999999999999091 0.0 217
+218 0.0155580043792725 0.0200000000000102 0.0200000000000102 0.0 218
+219 0.0405669212341309 0.039999999999992 0.039999999999992 0.0 219
+220 0.0161259174346924 0.0200000000000102 0.0200000000000102 0.0 220
+221 0.0161309242248535 0.00999999999999091 0.00999999999999091 0.0 221
+222 0.0159680843353271 0.0200000000000102 0.0200000000000102 0.0 222
+223 0.0159029960632324 0.00999999999999091 0.00999999999999091 0.0 223
+224 0.0187640190124512 0.0200000000000102 0.0200000000000102 0.0 224
+225 0.0158958435058594 0.0199999999999818 0.0199999999999818 0.0 225
+226 0.0405712127685547 0.0400000000000205 0.0400000000000205 0.0 226
+227 0.0160939693450928 0.0199999999999818 0.0199999999999818 0.0 227
+228 0.0159199237823486 0.0100000000000193 0.0100000000000193 0.0 228
+229 0.0160150527954102 0.0199999999999818 0.0199999999999818 0.0 229
+230 0.0161042213439941 0.0100000000000193 0.0100000000000193 0.0 230
+231 0.0156550407409668 0.0199999999999818 0.0199999999999818 0.0 231
+232 0.0155539512634277 0.00999999999999091 0.00999999999999091 0.0 232
+233 0.0406229496002197 0.0500000000000114 0.0500000000000114 0.0 233
+234 0.0177409648895264 0.00999999999999091 0.00999999999999091 0.0 234
+235 0.0160009860992432 0.0200000000000102 0.0200000000000102 0.0 235
+236 0.0169141292572021 0.00999999999999091 0.00999999999999091 0.0 236
+237 0.0185301303863525 0.0200000000000102 0.0200000000000102 0.0 237
+238 0.0156500339508057 0.0200000000000102 0.0200000000000102 0.0 238
+239 0.0157279968261719 0.00999999999999091 0.00999999999999091 0.0 239
+240 0.041100025177002 0.0500000000000114 0.0500000000000114 0.0 240
+241 0.0159239768981934 0.00999999999999091 0.00999999999999091 0.0 241
+242 0.0158870220184326 0.0200000000000102 0.0200000000000102 0.0 242
+243 0.0157818794250488 0.00999999999999091 0.00999999999999091 0.0 243
+244 0.0156459808349609 0.0199999999999818 0.0199999999999818 0.0 244
+245 0.0205349922180176 0.0200000000000102 0.0200000000000102 0.0 245
+246 0.0176489353179932 0.0200000000000102 0.0200000000000102 0.0 246
+247 0.0406951904296875 0.039999999999992 0.039999999999992 0.0 247
+248 0.0161759853363037 0.00999999999999091 0.00999999999999091 0.0 248
+249 0.0186100006103516 0.0200000000000102 0.0200000000000102 0.0 249
+250 0.0158610343933105 0.0200000000000102 0.0200000000000102 0.0 250
+251 0.0157759189605713 0.00999999999999091 0.00999999999999091 0.0 251
+252 0.0157499313354492 0.0200000000000102 0.0200000000000102 0.0 252
+253 0.0412969589233398 0.039999999999992 0.039999999999992 0.0 253
+254 0.0160319805145264 0.0200000000000102 0.0200000000000102 0.0 254
+255 0.0159080028533936 0.00999999999999091 0.00999999999999091 0.0 255
+256 0.01580810546875 0.0199999999999818 0.0199999999999818 0.0 256
+257 0.0157821178436279 0.0200000000000102 0.0200000000000102 0.0 257
+258 0.015578031539917 0.00999999999999091 0.00999999999999091 0.0 258
+259 0.0155758857727051 0.0200000000000102 0.0200000000000102 0.0 259
+260 0.0406520366668701 0.039999999999992 0.039999999999992 0.0 260
+261 0.0193078517913818 0.0200000000000102 0.0200000000000102 0.0 261
+262 0.0160150527954102 0.00999999999999091 0.00999999999999091 0.0 262
+263 0.015920877456665 0.0200000000000102 0.0200000000000102 0.0 263
+264 0.0161728858947754 0.0200000000000102 0.0200000000000102 0.0 264
+265 0.0163869857788086 0.00999999999999091 0.00999999999999091 0.0 265
+266 0.0156819820404053 0.0200000000000102 0.0200000000000102 0.0 266
+267 0.0407660007476807 0.039999999999992 0.039999999999992 0.0 267
+268 0.015861988067627 0.00999999999999091 0.00999999999999091 0.0 268
+269 0.015887975692749 0.0200000000000102 0.0200000000000102 0.0 269
+270 0.0157639980316162 0.0199999999999818 0.0199999999999818 0.0 270
+271 0.0156021118164062 0.0100000000000193 0.0100000000000193 0.0 271
+272 0.0162060260772705 0.0199999999999818 0.0199999999999818 0.0 272
+273 0.0156650543212891 0.0100000000000193 0.0100000000000193 0.0 273
+274 0.0440959930419922 0.0499999999999829 0.0499999999999829 0.0 274
+275 0.0158300399780273 0.0100000000000193 0.0100000000000193 0.0 275
+276 0.0157949924468994 0.0199999999999818 0.0199999999999818 0.0 276
+277 0.0157911777496338 0.0200000000000102 0.0200000000000102 0.0 277
+278 0.0155570507049561 0.00999999999999091 0.00999999999999091 0.0 278
+279 0.0156610012054443 0.0200000000000102 0.0200000000000102 0.0 279
+280 0.015800952911377 0.00999999999999091 0.00999999999999091 0.0 280
+281 0.041050910949707 0.039999999999992 0.039999999999992 0.0 281
+282 0.0158300399780273 0.0200000000000102 0.0200000000000102 0.0 282
+283 0.0173659324645996 0.0200000000000102 0.0200000000000102 0.0 283
+284 0.0157661437988281 0.00999999999999091 0.00999999999999091 0.0 284
+285 0.0156910419464111 0.0200000000000102 0.0200000000000102 0.0 285
+286 0.0156378746032715 0.00999999999999091 0.00999999999999091 0.0 286
+287 0.0446128845214844 0.0500000000000114 0.0500000000000114 0.0 287
+288 0.0160419940948486 0.00999999999999091 0.00999999999999091 0.0 288
+289 0.0161609649658203 0.0200000000000102 0.0200000000000102 0.0 289
+290 0.0157930850982666 0.00999999999999091 0.00999999999999091 0.0 290
+291 0.0157232284545898 0.0200000000000102 0.0200000000000102 0.0 291
+292 0.0155608654022217 0.0199999999999818 0.0199999999999818 0.0 292
+293 0.0156910419464111 0.0100000000000193 0.0100000000000193 0.0 293
+294 0.0463647842407227 0.0499999999999829 0.0499999999999829 0.0 294
+295 0.0179910659790039 0.0200000000000102 0.0200000000000102 0.0 295
+296 0.0158979892730713 0.00999999999999091 0.00999999999999091 0.0 296
+297 0.0157630443572998 0.0200000000000102 0.0200000000000102 0.0 297
+298 0.0156371593475342 0.00999999999999091 0.00999999999999091 0.0 298
+299 0.0191469192504883 0.0200000000000102 0.0200000000000102 0.0 299
+300 0.0167911052703857 0.0199999999999818 0.0199999999999818 0.0 300
+301 0.0407388210296631 0.0400000000000205 0.0400000000000205 0.0 301
+302 0.0159130096435547 0.0199999999999818 0.0199999999999818 0.0 302
+303 0.0166409015655518 0.0100000000000193 0.0100000000000193 0.0 303
+304 0.0158700942993164 0.0199999999999818 0.0199999999999818 0.0 304
+305 0.0156099796295166 0.0200000000000102 0.0200000000000102 0.0 305
+306 0.0155818462371826 0.00999999999999091 0.00999999999999091 0.0 306
+307 0.0156898498535156 0.0200000000000102 0.0200000000000102 0.0 307
+308 0.0406138896942139 0.039999999999992 0.039999999999992 0.0 308
+309 0.0159690380096436 0.00999999999999091 0.00999999999999091 0.0 309
+310 0.0157949924468994 0.0200000000000102 0.0200000000000102 0.0 310
+311 0.0166599750518799 0.00999999999999091 0.00999999999999091 0.0 311
+312 0.0184519290924072 0.0200000000000102 0.0200000000000102 0.0 312
+313 0.0156970024108887 0.0200000000000102 0.0200000000000102 0.0 313
+314 0.0414550304412842 0.039999999999992 0.039999999999992 0.0 314
+315 0.0159659385681152 0.0200000000000102 0.0200000000000102 0.0 315
+316 0.015855073928833 0.00999999999999091 0.00999999999999091 0.0 316
+317 0.0157890319824219 0.0200000000000102 0.0200000000000102 0.0 317
+318 0.0157499313354492 0.00999999999999091 0.00999999999999091 0.0 318
+319 0.0157718658447266 0.0199999999999818 0.0199999999999818 0.0 319
+320 0.0155758857727051 0.0200000000000102 0.0200000000000102 0.0 320
+321 0.0406579971313477 0.039999999999992 0.039999999999992 0.0 321
+322 0.0160129070281982 0.0100000000000193 0.0100000000000193 0.0 322
+323 0.0166339874267578 0.0199999999999818 0.0199999999999818 0.0 323
+324 0.020615816116333 0.0200000000000102 0.0200000000000102 0.0 324
+325 0.016042947769165 0.0200000000000102 0.0200000000000102 0.0 325
+326 0.0157880783081055 0.00999999999999091 0.00999999999999091 0.0 326
+327 0.0156471729278564 0.0200000000000102 0.0200000000000102 0.0 327
+328 0.0406618118286133 0.039999999999992 0.039999999999992 0.0 328
+329 0.0161919593811035 0.00999999999999091 0.00999999999999091 0.0 329
+330 0.0158429145812988 0.0200000000000102 0.0200000000000102 0.0 330
+331 0.0157439708709717 0.0199999999999818 0.0199999999999818 0.0 331
+332 0.0156080722808838 0.0100000000000193 0.0100000000000193 0.0 332
+333 0.0156378746032715 0.0199999999999818 0.0199999999999818 0.0 333
+334 0.015779972076416 0.0100000000000193 0.0100000000000193 0.0 334
+335 0.0407891273498535 0.039999999999992 0.039999999999992 0.0 335
+336 0.0195779800415039 0.0200000000000102 0.0200000000000102 0.0 336
+337 0.0160758495330811 0.0199999999999818 0.0199999999999818 0.0 337
+338 0.0156791210174561 0.0200000000000102 0.0200000000000102 0.0 338
+339 0.015733003616333 0.00999999999999091 0.00999999999999091 0.0 339
+340 0.0158100128173828 0.0200000000000102 0.0200000000000102 0.0 340
+341 0.0405211448669434 0.039999999999992 0.039999999999992 0.0 341
+342 0.0158991813659668 0.0100000000000193 0.0100000000000193 0.0 342
+343 0.0157461166381836 0.0199999999999818 0.0199999999999818 0.0 343
+344 0.0166110992431641 0.0200000000000102 0.0200000000000102 0.0 344
+345 0.0219199657440186 0.0199999999999818 0.0199999999999818 0.0 345
+346 0.0155389308929443 0.0100000000000193 0.0100000000000193 0.0 346
+347 0.0156941413879395 0.0199999999999818 0.0199999999999818 0.0 347
+348 0.0439140796661377 0.0400000000000205 0.0400000000000205 0.0 348
+349 0.016746997833252 0.0199999999999818 0.0199999999999818 0.0 349
+350 0.0159060955047607 0.0200000000000102 0.0200000000000102 0.0 350
+351 0.0158212184906006 0.00999999999999091 0.00999999999999091 0.0 351
+352 0.0157208442687988 0.0200000000000102 0.0200000000000102 0.0 352
+353 0.0156140327453613 0.00999999999999091 0.00999999999999091 0.0 353
+354 0.0168178081512451 0.0200000000000102 0.0200000000000102 0.0 354
+355 0.0407528877258301 0.039999999999992 0.039999999999992 0.0 355
+356 0.0157878398895264 0.0200000000000102 0.0200000000000102 0.0 356
+357 0.0157828330993652 0.00999999999999091 0.00999999999999091 0.0 357
+358 0.0156841278076172 0.0200000000000102 0.0200000000000102 0.0 358
+359 0.0156099796295166 0.00999999999999091 0.00999999999999091 0.0 359
+360 0.015535831451416 0.0200000000000102 0.0200000000000102 0.0 360
+361 0.0171799659729004 0.0199999999999818 0.0199999999999818 0.0 361
+362 0.044562816619873 0.0400000000000205 0.0400000000000205 0.0 362
+363 0.0159769058227539 0.0199999999999818 0.0199999999999818 0.0 363
+364 0.0167310237884521 0.0100000000000193 0.0100000000000193 0.0 364
+365 0.0156519412994385 0.0199999999999818 0.0199999999999818 0.0 365
+366 0.015625 0.0200000000000102 0.0200000000000102 0.0 366
+367 0.0161309242248535 0.00999999999999091 0.00999999999999091 0.0 367
+368 0.0406661033630371 0.039999999999992 0.039999999999992 0.0 368
+369 0.016185998916626 0.0200000000000102 0.0200000000000102 0.0 369
+370 0.0159850120544434 0.00999999999999091 0.00999999999999091 0.0 370
+371 0.0159509181976318 0.0200000000000102 0.0200000000000102 0.0 371
+372 0.015861988067627 0.0200000000000102 0.0200000000000102 0.0 372
+373 0.0157780647277832 0.00999999999999091 0.00999999999999091 0.0 373
+374 0.019244909286499 0.0200000000000102 0.0200000000000102 0.0 374
+375 0.0423779487609863 0.039999999999992 0.039999999999992 0.0 375
+376 0.0160589218139648 0.0200000000000102 0.0200000000000102 0.0 376
+377 0.0159640312194824 0.0199999999999818 0.0199999999999818 0.0 377
+378 0.0158970355987549 0.0100000000000193 0.0100000000000193 0.0 378
+379 0.0158810615539551 0.0199999999999818 0.0199999999999818 0.0 379
+380 0.0159378051757812 0.0100000000000193 0.0100000000000193 0.0 380
+381 0.0156619548797607 0.0199999999999818 0.0199999999999818 0.0 381
+382 0.0407819747924805 0.039999999999992 0.039999999999992 0.0 382
+383 0.0159389972686768 0.0200000000000102 0.0200000000000102 0.0 383
+384 0.0160889625549316 0.00999999999999091 0.00999999999999091 0.0 384
+385 0.0158150196075439 0.0200000000000102 0.0200000000000102 0.0 385
+386 0.0164110660552979 0.0200000000000102 0.0200000000000102 0.0 386
+387 0.0180950164794922 0.00999999999999091 0.00999999999999091 0.0 387
+388 0.0157089233398438 0.0200000000000102 0.0200000000000102 0.0 388
+389 0.0411288738250732 0.039999999999992 0.039999999999992 0.0 389
+390 0.0159080028533936 0.0200000000000102 0.0200000000000102 0.0 390
+391 0.0158810615539551 0.00999999999999091 0.00999999999999091 0.0 391
+392 0.0157151222229004 0.0200000000000102 0.0200000000000102 0.0 392
+393 0.0156629085540771 0.00999999999999091 0.00999999999999091 0.0 393
+394 0.0157067775726318 0.0199999999999818 0.0199999999999818 0.0 394
+395 0.0479769706726074 0.0500000000000114 0.0500000000000114 0.0 395
+396 0.01609206199646 0.00999999999999091 0.00999999999999091 0.0 396
+397 0.0158951282501221 0.0200000000000102 0.0200000000000102 0.0 397
+398 0.0161418914794922 0.00999999999999091 0.00999999999999091 0.0 398
+399 0.0201709270477295 0.0200000000000102 0.0200000000000102 0.0 399
+400 0.0157439708709717 0.0100000000000193 0.0100000000000193 0.0 400
+401 0.0157320499420166 0.0199999999999818 0.0199999999999818 0.0 401
+402 0.0412960052490234 0.0400000000000205 0.0400000000000205 0.0 402
+403 0.0162639617919922 0.00999999999999091 0.00999999999999091 0.0 403
+404 0.0161092281341553 0.0200000000000102 0.0200000000000102 0.0 404
+405 0.0159099102020264 0.0199999999999818 0.0199999999999818 0.0 405
+406 0.0157670974731445 0.00999999999999091 0.00999999999999091 0.0 406
+407 0.0156850814819336 0.0200000000000102 0.0200000000000102 0.0 407
+408 0.0156769752502441 0.00999999999999091 0.00999999999999091 0.0 408
+409 0.0408320426940918 0.0400000000000205 0.0400000000000205 0.0 409
+410 0.0158789157867432 0.0199999999999818 0.0199999999999818 0.0 410
+411 0.0202319622039795 0.0200000000000102 0.0200000000000102 0.0 411
+412 0.0158510208129883 0.0200000000000102 0.0200000000000102 0.0 412
+413 0.0156679153442383 0.00999999999999091 0.00999999999999091 0.0 413
+414 0.0159661769866943 0.0200000000000102 0.0200000000000102 0.0 414
+415 0.0161230564117432 0.00999999999999091 0.00999999999999091 0.0 415
+416 0.0410380363464355 0.0500000000000114 0.0500000000000114 0.0 416
+417 0.0158960819244385 0.00999999999999091 0.00999999999999091 0.0 417
+418 0.0158650875091553 0.0199999999999818 0.0199999999999818 0.0 418
+419 0.0157840251922607 0.0100000000000193 0.0100000000000193 0.0 419
+420 0.0155539512634277 0.0199999999999818 0.0199999999999818 0.0 420
+421 0.0157678127288818 0.0100000000000193 0.0100000000000193 0.0 421
+422 0.0412240028381348 0.0499999999999829 0.0499999999999829 0.0 422
+423 0.0191640853881836 0.0100000000000193 0.0100000000000193 0.0 423
+424 0.0165059566497803 0.0199999999999818 0.0199999999999818 0.0 424
+425 0.0159070491790771 0.0200000000000102 0.0200000000000102 0.0 425
+426 0.0158569812774658 0.00999999999999091 0.00999999999999091 0.0 426
+427 0.0156240463256836 0.0200000000000102 0.0200000000000102 0.0 427
+428 0.0156888961791992 0.00999999999999091 0.00999999999999091 0.0 428
+429 0.0410318374633789 0.0500000000000114 0.0500000000000114 0.0 429
+430 0.0159420967102051 0.00999999999999091 0.00999999999999091 0.0 430
+431 0.0159289836883545 0.0200000000000102 0.0200000000000102 0.0 431
+432 0.0157718658447266 0.00999999999999091 0.00999999999999091 0.0 432
+433 0.0156440734863281 0.0200000000000102 0.0200000000000102 0.0 433
+434 0.0156459808349609 0.00999999999999091 0.00999999999999091 0.0 434
+435 0.0156629085540771 0.0200000000000102 0.0200000000000102 0.0 435
+436 0.043510913848877 0.039999999999992 0.039999999999992 0.0 436
+437 0.0160140991210938 0.0200000000000102 0.0200000000000102 0.0 437
+438 0.015984058380127 0.0199999999999818 0.0199999999999818 0.0 438
+439 0.0160889625549316 0.0100000000000193 0.0100000000000193 0.0 439
+440 0.0160849094390869 0.0199999999999818 0.0199999999999818 0.0 440
+441 0.015700101852417 0.0100000000000193 0.0100000000000193 0.0 441
+442 0.0157110691070557 0.0199999999999818 0.0199999999999818 0.0 442
+443 0.0212619304656982 0.0199999999999818 0.0199999999999818 0.0 443
+444 0.0226690769195557 0.0200000000000102 0.0200000000000102 0.0 444
+445 0.0157680511474609 0.0200000000000102 0.0200000000000102 0.0 445
+446 0.015690803527832 0.00999999999999091 0.00999999999999091 0.0 446
+447 0.015653133392334 0.0200000000000102 0.0200000000000102 0.0 447
+448 0.0156688690185547 0.0199999999999818 0.0199999999999818 0.0 448
+449 0.0439548492431641 0.0400000000000205 0.0400000000000205 0.0 449
+450 0.0160410404205322 0.0199999999999818 0.0199999999999818 0.0 450
+451 0.0159320831298828 0.0100000000000193 0.0100000000000193 0.0 451
+452 0.0157608985900879 0.0199999999999818 0.0199999999999818 0.0 452
+453 0.0166118144989014 0.0100000000000193 0.0100000000000193 0.0 453
+454 0.0155959129333496 0.0199999999999818 0.0199999999999818 0.0 454
+455 0.0157961845397949 0.0200000000000102 0.0200000000000102 0.0 455
+456 0.0407929420471191 0.039999999999992 0.039999999999992 0.0 456
+457 0.0160069465637207 0.00999999999999091 0.00999999999999091 0.0 457
+458 0.015955924987793 0.0200000000000102 0.0200000000000102 0.0 458
+459 0.015923023223877 0.0200000000000102 0.0200000000000102 0.0 459
+460 0.0157721042633057 0.00999999999999091 0.00999999999999091 0.0 460
+461 0.0170860290527344 0.0200000000000102 0.0200000000000102 0.0 461
+462 0.0182251930236816 0.0199999999999818 0.0199999999999818 0.0 462
+463 0.0413410663604736 0.0400000000000205 0.0400000000000205 0.0 463
+464 0.0165669918060303 0.00999999999999091 0.00999999999999091 0.0 464
+465 0.0159049034118652 0.0200000000000102 0.0200000000000102 0.0 465
+466 0.0158209800720215 0.0199999999999818 0.0199999999999818 0.0 466
+467 0.0156691074371338 0.0100000000000193 0.0100000000000193 0.0 467
+468 0.0155670642852783 0.0199999999999818 0.0199999999999818 0.0 468
+469 0.0407600402832031 0.039999999999992 0.039999999999992 0.0 469
+470 0.0160460472106934 0.0100000000000193 0.0100000000000193 0.0 470
+471 0.0159029960632324 0.0199999999999818 0.0199999999999818 0.0 471
+472 0.0159380435943604 0.0200000000000102 0.0200000000000102 0.0 472
+473 0.0165109634399414 0.00999999999999091 0.00999999999999091 0.0 473
+474 0.0189468860626221 0.0200000000000102 0.0200000000000102 0.0 474
+475 0.0156781673431396 0.0200000000000102 0.0200000000000102 0.0 475
+476 0.0406448841094971 0.039999999999992 0.039999999999992 0.0 476
+477 0.0160341262817383 0.00999999999999091 0.00999999999999091 0.0 477
+478 0.0160388946533203 0.0200000000000102 0.0200000000000102 0.0 478
+479 0.0163199901580811 0.0200000000000102 0.0200000000000102 0.0 479
+480 0.0158259868621826 0.00999999999999091 0.00999999999999091 0.0 480
+481 0.0156810283660889 0.0199999999999818 0.0199999999999818 0.0 481
+482 0.0157148838043213 0.0100000000000193 0.0100000000000193 0.0 482
+483 0.0412290096282959 0.039999999999992 0.039999999999992 0.0 483
+484 0.0160889625549316 0.0200000000000102 0.0200000000000102 0.0 484
+485 0.0160059928894043 0.0199999999999818 0.0199999999999818 0.0 485
+486 0.0181820392608643 0.0200000000000102 0.0200000000000102 0.0 486
+487 0.0166311264038086 0.00999999999999091 0.00999999999999091 0.0 487
+488 0.0156669616699219 0.0200000000000102 0.0200000000000102 0.0 488
+489 0.0157821178436279 0.00999999999999091 0.00999999999999091 0.0 489
+490 0.0410869121551514 0.0400000000000205 0.0400000000000205 0.0 490
+491 0.0159239768981934 0.0199999999999818 0.0199999999999818 0.0 491
+492 0.0158579349517822 0.0200000000000102 0.0200000000000102 0.0 492
+493 0.0157217979431152 0.00999999999999091 0.00999999999999091 0.0 493
+494 0.021359920501709 0.0200000000000102 0.0200000000000102 0.0 494
+495 0.0177481174468994 0.0199999999999818 0.0199999999999818 0.0 495
+496 0.0405080318450928 0.0400000000000205 0.0400000000000205 0.0 496
+497 0.0161361694335938 0.0199999999999818 0.0199999999999818 0.0 497
+498 0.0198690891265869 0.0200000000000102 0.0200000000000102 0.0 498
+499 0.0160260200500488 0.00999999999999091 0.00999999999999091 0.0 499
+500 0.0157639980316162 0.0200000000000102 0.0200000000000102 0.0 500
+501 0.0156447887420654 0.0200000000000102 0.0200000000000102 0.0 501
+502 0.0156769752502441 0.00999999999999091 0.00999999999999091 0.0 502
+503 0.0437228679656982 0.039999999999992 0.039999999999992 0.0 503
+504 0.0161030292510986 0.0200000000000102 0.0200000000000102 0.0 504
+505 0.016016960144043 0.0199999999999818 0.0199999999999818 0.0 505
+506 0.0158760547637939 0.0100000000000193 0.0100000000000193 0.0 506
+507 0.01578688621521 0.0199999999999818 0.0199999999999818 0.0 507
+508 0.0156271457672119 0.0100000000000193 0.0100000000000193 0.0 508
+509 0.0157058238983154 0.0199999999999818 0.0199999999999818 0.0 509
+510 0.0442900657653809 0.0400000000000205 0.0400000000000205 0.0 510
+511 0.017132043838501 0.0199999999999818 0.0199999999999818 0.0 511
+512 0.0159881114959717 0.0200000000000102 0.0200000000000102 0.0 512
+513 0.0160439014434814 0.00999999999999091 0.00999999999999091 0.0 513
+514 0.0164890289306641 0.0200000000000102 0.0200000000000102 0.0 514
+515 0.0156888961791992 0.0200000000000102 0.0200000000000102 0.0 515
+516 0.040363073348999 0.039999999999992 0.039999999999992 0.0 516
+517 0.0161979198455811 0.00999999999999091 0.00999999999999091 0.0 517
+518 0.0159780979156494 0.0200000000000102 0.0200000000000102 0.0 518
+519 0.0159690380096436 0.00999999999999091 0.00999999999999091 0.0 519
+520 0.015887975692749 0.0200000000000102 0.0200000000000102 0.0 520
+521 0.0156509876251221 0.0199999999999818 0.0199999999999818 0.0 521
+522 0.0156340599060059 0.0100000000000193 0.0100000000000193 0.0 522
+523 0.0451259613037109 0.0499999999999829 0.0499999999999829 0.0 523
+524 0.0159039497375488 0.0100000000000193 0.0100000000000193 0.0 524
+525 0.0158360004425049 0.0199999999999818 0.0199999999999818 0.0 525
+526 0.0157630443572998 0.0100000000000193 0.0100000000000193 0.0 526
+527 0.0156168937683105 0.0199999999999818 0.0199999999999818 0.0 527
+528 0.0156149864196777 0.0200000000000102 0.0200000000000102 0.0 528
+529 0.015984058380127 0.00999999999999091 0.00999999999999091 0.0 529
+530 0.040830135345459 0.039999999999992 0.039999999999992 0.0 530
+531 0.0160219669342041 0.0200000000000102 0.0200000000000102 0.0 531
+532 0.015923023223877 0.0200000000000102 0.0200000000000102 0.0 532
+533 0.0159180164337158 0.00999999999999091 0.00999999999999091 0.0 533
+534 0.0157890319824219 0.0200000000000102 0.0200000000000102 0.0 534
+535 0.0156989097595215 0.00999999999999091 0.00999999999999091 0.0 535
+536 0.043813943862915 0.0500000000000114 0.0500000000000114 0.0 536
+537 0.0161550045013428 0.00999999999999091 0.00999999999999091 0.0 537
+538 0.0161418914794922 0.0200000000000102 0.0200000000000102 0.0 538
+539 0.016010046005249 0.00999999999999091 0.00999999999999091 0.0 539
+540 0.015833854675293 0.0100000000000193 0.0100000000000193 0.0 540
+541 0.0156919956207275 0.0199999999999818 0.0199999999999818 0.0 541
+542 0.0156600475311279 0.0100000000000193 0.0100000000000193 0.0 542
+543 0.0471100807189941 0.0499999999999829 0.0499999999999829 0.0 543
+544 0.0160348415374756 0.0200000000000102 0.0200000000000102 0.0 544
+545 0.0160539150238037 0.00999999999999091 0.00999999999999091 0.0 545
+546 0.0158519744873047 0.0200000000000102 0.0200000000000102 0.0 546
+547 0.0158119201660156 0.00999999999999091 0.00999999999999091 0.0 547
+548 0.0178709030151367 0.0200000000000102 0.0200000000000102 0.0 548
+549 0.0169069766998291 0.0199999999999818 0.0199999999999818 0.0 549
+550 0.0407388210296631 0.0400000000000205 0.0400000000000205 0.0 550
+551 0.0159931182861328 0.0199999999999818 0.0199999999999818 0.0 551
+552 0.0167689323425293 0.0100000000000193 0.0100000000000193 0.0 552
+553 0.015841007232666 0.0199999999999818 0.0199999999999818 0.0 553
+554 0.0158300399780273 0.0100000000000193 0.0100000000000193 0.0 554
+555 0.0156581401824951 0.0199999999999818 0.0199999999999818 0.0 555
+556 0.0406780242919922 0.039999999999992 0.039999999999992 0.0 556
+557 0.0162060260772705 0.0200000000000102 0.0200000000000102 0.0 557
+558 0.0160999298095703 0.00999999999999091 0.00999999999999091 0.0 558
+559 0.0159580707550049 0.0200000000000102 0.0200000000000102 0.0 559
+560 0.0159261226654053 0.00999999999999091 0.00999999999999091 0.0 560
+561 0.0199720859527588 0.0200000000000102 0.0200000000000102 0.0 561
+562 0.0157170295715332 0.0200000000000102 0.0200000000000102 0.0 562
+563 0.041780948638916 0.039999999999992 0.039999999999992 0.0 563
+564 0.0160281658172607 0.0200000000000102 0.0200000000000102 0.0 564
+565 0.0160350799560547 0.00999999999999091 0.00999999999999091 0.0 565
+566 0.0158600807189941 0.0200000000000102 0.0200000000000102 0.0 566
+567 0.0157890319824219 0.0199999999999818 0.0199999999999818 0.0 567
+568 0.01568603515625 0.00999999999999091 0.00999999999999091 0.0 568
+569 0.0157349109649658 0.0200000000000102 0.0200000000000102 0.0 569
+570 0.0407240390777588 0.039999999999992 0.039999999999992 0.0 570
+571 0.0159690380096436 0.0100000000000193 0.0100000000000193 0.0 571
+572 0.0166740417480469 0.0199999999999818 0.0199999999999818 0.0 572
+573 0.0183789730072021 0.0200000000000102 0.0200000000000102 0.0 573
+574 0.0158569812774658 0.0200000000000102 0.0200000000000102 0.0 574
+575 0.0156340599060059 0.00999999999999091 0.00999999999999091 0.0 575
+576 0.0408451557159424 0.039999999999992 0.039999999999992 0.0 576
+577 0.0160448551177979 0.0200000000000102 0.0200000000000102 0.0 577
+578 0.0162789821624756 0.00999999999999091 0.00999999999999091 0.0 578
+579 0.0159311294555664 0.0200000000000102 0.0200000000000102 0.0 579
+580 0.0158848762512207 0.0199999999999818 0.0199999999999818 0.0 580
+581 0.0157999992370605 0.0100000000000193 0.0100000000000193 0.0 581
+582 0.0156741142272949 0.0199999999999818 0.0199999999999818 0.0 582
+583 0.0409140586853027 0.0400000000000205 0.0400000000000205 0.0 583
+584 0.0159211158752441 0.0199999999999818 0.0199999999999818 0.0 584
+585 0.0184950828552246 0.0100000000000193 0.0100000000000193 0.0 585
+586 0.0168490409851074 0.0199999999999818 0.0199999999999818 0.0 586
+587 0.0156459808349609 0.0200000000000102 0.0200000000000102 0.0 587
+588 0.0156338214874268 0.00999999999999091 0.00999999999999091 0.0 588
+589 0.0159139633178711 0.0200000000000102 0.0200000000000102 0.0 589
+590 0.0407509803771973 0.039999999999992 0.039999999999992 0.0 590
+591 0.0159850120544434 0.0100000000000193 0.0100000000000193 0.0 591
+592 0.0159389972686768 0.0199999999999818 0.0199999999999818 0.0 592
+593 0.0213720798492432 0.0200000000000102 0.0200000000000102 0.0 593
+594 0.0177850723266602 0.0199999999999818 0.0199999999999818 0.0 594
+595 0.0157310962677002 0.0200000000000102 0.0200000000000102 0.0 595
+596 0.0403420925140381 0.039999999999992 0.039999999999992 0.0 596
+597 0.0190529823303223 0.0200000000000102 0.0200000000000102 0.0 597
+598 0.0169448852539062 0.00999999999999091 0.00999999999999091 0.0 598
+599 0.0159680843353271 0.0200000000000102 0.0200000000000102 0.0 599
+600 0.0158801078796387 0.00999999999999091 0.00999999999999091 0.0 600
+601 0.0156979560852051 0.0200000000000102 0.0200000000000102 0.0 601
+602 0.0156271457672119 0.0200000000000102 0.0200000000000102 0.0 602
+603 0.0415568351745605 0.039999999999992 0.039999999999992 0.0 603
+604 0.0159718990325928 0.00999999999999091 0.00999999999999091 0.0 604
+605 0.0159180164337158 0.0200000000000102 0.0200000000000102 0.0 605
+606 0.0158648490905762 0.0199999999999818 0.0199999999999818 0.0 606
+607 0.0156810283660889 0.0100000000000193 0.0100000000000193 0.0 607
+608 0.0156228542327881 0.0199999999999818 0.0199999999999818 0.0 608
+609 0.0157201290130615 0.0100000000000193 0.0100000000000193 0.0 609
+610 0.0439960956573486 0.0499999999999829 0.0499999999999829 0.0 610
+611 0.0160610675811768 0.0100000000000193 0.0100000000000193 0.0 611
+612 0.0161979198455811 0.0199999999999818 0.0199999999999818 0.0 612
+613 0.0165619850158691 0.0200000000000102 0.0200000000000102 0.0 613
+614 0.0157890319824219 0.00999999999999091 0.00999999999999091 0.0 614
+615 0.0156469345092773 0.0200000000000102 0.0200000000000102 0.0 615
+616 0.0402541160583496 0.039999999999992 0.039999999999992 0.0 616
+617 0.0161638259887695 0.00999999999999091 0.00999999999999091 0.0 617
+618 0.0160119533538818 0.0200000000000102 0.0200000000000102 0.0 618
+619 0.0159289836883545 0.0200000000000102 0.0200000000000102 0.0 619
+620 0.0159239768981934 0.00999999999999091 0.00999999999999091 0.0 620
+621 0.0156819820404053 0.0200000000000102 0.0200000000000102 0.0 621
+622 0.0163209438323975 0.00999999999999091 0.00999999999999091 0.0 622
+623 0.0430841445922852 0.0500000000000114 0.0500000000000114 0.0 623
+624 0.0160331726074219 0.00999999999999091 0.00999999999999091 0.0 624
+625 0.0159151554107666 0.0200000000000102 0.0200000000000102 0.0 625
+626 0.0158572196960449 0.00999999999999091 0.00999999999999091 0.0 626
+627 0.0157380104064941 0.0100000000000193 0.0100000000000193 0.0 627
+628 0.015657901763916 0.0199999999999818 0.0199999999999818 0.0 628
+629 0.016016960144043 0.0100000000000193 0.0100000000000193 0.0 629
+630 0.0407459735870361 0.039999999999992 0.039999999999992 0.0 630
+631 0.0159480571746826 0.0199999999999818 0.0199999999999818 0.0 631
+632 0.0159869194030762 0.0200000000000102 0.0200000000000102 0.0 632
+633 0.0159099102020264 0.00999999999999091 0.00999999999999091 0.0 633
+634 0.0157899856567383 0.0200000000000102 0.0200000000000102 0.0 634
+635 0.0156879425048828 0.00999999999999091 0.00999999999999091 0.0 635
+636 0.0428619384765625 0.0500000000000114 0.0500000000000114 0.0 636
+637 0.0161869525909424 0.00999999999999091 0.00999999999999091 0.0 637
+638 0.0162138938903809 0.0200000000000102 0.0200000000000102 0.0 638
+639 0.0158801078796387 0.00999999999999091 0.00999999999999091 0.0 639
+640 0.0158560276031494 0.0200000000000102 0.0200000000000102 0.0 640
+641 0.0156440734863281 0.00999999999999091 0.00999999999999091 0.0 641
+642 0.0156350135803223 0.0200000000000102 0.0200000000000102 0.0 642
+643 0.047083854675293 0.0499999999999829 0.0499999999999829 0.0 643
+644 0.0159060955047607 0.0100000000000193 0.0100000000000193 0.0 644
+645 0.0158288478851318 0.0199999999999818 0.0199999999999818 0.0 645
+646 0.0157370567321777 0.0200000000000102 0.0200000000000102 0.0 646
+647 0.0155889987945557 0.00999999999999091 0.00999999999999091 0.0 647
+648 0.0187828540802002 0.0200000000000102 0.0200000000000102 0.0 648
+649 0.0158119201660156 0.0200000000000102 0.0200000000000102 0.0 649
+650 0.0408198833465576 0.039999999999992 0.039999999999992 0.0 650
+651 0.0160138607025146 0.00999999999999091 0.00999999999999091 0.0 651
+652 0.0169661045074463 0.0200000000000102 0.0200000000000102 0.0 652
+653 0.0158448219299316 0.0200000000000102 0.0200000000000102 0.0 653
+654 0.0157639980316162 0.00999999999999091 0.00999999999999091 0.0 654
+655 0.0156838893890381 0.0199999999999818 0.0199999999999818 0.0 655
+656 0.0403389930725098 0.0400000000000205 0.0400000000000205 0.0 656
+657 0.0161681175231934 0.00999999999999091 0.00999999999999091 0.0 657
+658 0.015963077545166 0.0200000000000102 0.0200000000000102 0.0 658
+659 0.0159058570861816 0.0199999999999818 0.0199999999999818 0.0 659
+660 0.0177428722381592 0.0100000000000193 0.0100000000000193 0.0 660
+661 0.0171470642089844 0.0199999999999818 0.0199999999999818 0.0 661
+662 0.015761137008667 0.0200000000000102 0.0200000000000102 0.0 662
+663 0.0421710014343262 0.039999999999992 0.039999999999992 0.0 663
+664 0.0159869194030762 0.0100000000000193 0.0100000000000193 0.0 664
+665 0.0158960819244385 0.0199999999999818 0.0199999999999818 0.0 665
+666 0.0158309936523438 0.0200000000000102 0.0200000000000102 0.0 666
+667 0.0156588554382324 0.00999999999999091 0.00999999999999091 0.0 667
+668 0.0155930519104004 0.0200000000000102 0.0200000000000102 0.0 668
+669 0.0157339572906494 0.00999999999999091 0.00999999999999091 0.0 669
+670 0.0408949851989746 0.039999999999992 0.039999999999992 0.0 670
+671 0.0166690349578857 0.0200000000000102 0.0200000000000102 0.0 671
+672 0.015967845916748 0.0200000000000102 0.0200000000000102 0.0 672
+673 0.0183408260345459 0.0199999999999818 0.0199999999999818 0.0 673
+674 0.0157818794250488 0.0100000000000193 0.0100000000000193 0.0 674
+675 0.0156641006469727 0.0199999999999818 0.0199999999999818 0.0 675
+676 0.0403289794921875 0.0400000000000205 0.0400000000000205 0.0 676
+677 0.0160641670227051 0.00999999999999091 0.00999999999999091 0.0 677
+678 0.0162630081176758 0.0200000000000102 0.0200000000000102 0.0 678
+679 0.0158939361572266 0.0199999999999818 0.0199999999999818 0.0 679
+680 0.0158121585845947 0.00999999999999091 0.00999999999999091 0.0 680
+681 0.0155899524688721 0.0200000000000102 0.0200000000000102 0.0 681
+682 0.0156369209289551 0.00999999999999091 0.00999999999999091 0.0 682
+683 0.0411529541015625 0.0400000000000205 0.0400000000000205 0.0 683
+684 0.0160119533538818 0.0199999999999818 0.0199999999999818 0.0 684
+685 0.0188088417053223 0.0200000000000102 0.0200000000000102 0.0 685
+686 0.0159080028533936 0.0200000000000102 0.0200000000000102 0.0 686
+687 0.0157148838043213 0.00999999999999091 0.00999999999999091 0.0 687
+688 0.0155959129333496 0.0200000000000102 0.0200000000000102 0.0 688
+689 0.0412189960479736 0.039999999999992 0.039999999999992 0.0 689
+690 0.015995979309082 0.00999999999999091 0.00999999999999091 0.0 690
+691 0.0159540176391602 0.0200000000000102 0.0200000000000102 0.0 691
+692 0.015949010848999 0.0199999999999818 0.0199999999999818 0.0 692
+693 0.0234458446502686 0.0200000000000102 0.0200000000000102 0.0 693
+694 0.0157320499420166 0.0200000000000102 0.0200000000000102 0.0 694
+695 0.0157339572906494 0.00999999999999091 0.00999999999999091 0.0 695
+696 0.0404260158538818 0.039999999999992 0.039999999999992 0.0 696
+697 0.0190789699554443 0.0200000000000102 0.0200000000000102 0.0 697
+698 0.0159289836883545 0.0200000000000102 0.0200000000000102 0.0 698
+699 0.0157830715179443 0.00999999999999091 0.00999999999999091 0.0 699
+700 0.0156319141387939 0.0200000000000102 0.0200000000000102 0.0 700
+701 0.01556396484375 0.00999999999999091 0.00999999999999091 0.0 701
+702 0.0156660079956055 0.0200000000000102 0.0200000000000102 0.0 702
+703 0.0413651466369629 0.039999999999992 0.039999999999992 0.0 703
+704 0.0159580707550049 0.0199999999999818 0.0199999999999818 0.0 704
+705 0.0158989429473877 0.0100000000000193 0.0100000000000193 0.0 705
+706 0.0158150196075439 0.0199999999999818 0.0199999999999818 0.0 706
+707 0.0156781673431396 0.0100000000000193 0.0100000000000193 0.0 707
+708 0.0156269073486328 0.0199999999999818 0.0199999999999818 0.0 708
+709 0.041424036026001 0.0400000000000205 0.0400000000000205 0.0 709
+710 0.0184199810028076 0.0199999999999818 0.0199999999999818 0.0 710
+711 0.0159978866577148 0.0200000000000102 0.0200000000000102 0.0 711
+712 0.0160419940948486 0.00999999999999091 0.00999999999999091 0.0 712
+713 0.016589879989624 0.0200000000000102 0.0200000000000102 0.0 713
+714 0.0156559944152832 0.0200000000000102 0.0200000000000102 0.0 714
+715 0.0157039165496826 0.00999999999999091 0.00999999999999091 0.0 715
+716 0.0408508777618408 0.039999999999992 0.039999999999992 0.0 716
+717 0.0159609317779541 0.0200000000000102 0.0200000000000102 0.0 717
+718 0.0159869194030762 0.00999999999999091 0.00999999999999091 0.0 718
+719 0.0159101486206055 0.0200000000000102 0.0200000000000102 0.0 719
+720 0.0156970024108887 0.0199999999999818 0.0199999999999818 0.0 720
+721 0.0155429840087891 0.0100000000000193 0.0100000000000193 0.0 721
+722 0.0163400173187256 0.0199999999999818 0.0199999999999818 0.0 722
+723 0.0429699420928955 0.0400000000000205 0.0400000000000205 0.0 723
+724 0.0160400867462158 0.0199999999999818 0.0199999999999818 0.0 724
+725 0.0159778594970703 0.0100000000000193 0.0100000000000193 0.0 725
+726 0.015826940536499 0.0199999999999818 0.0199999999999818 0.0 726
+727 0.0156888961791992 0.0100000000000193 0.0100000000000193 0.0 727
+728 0.0159649848937988 0.0199999999999818 0.0199999999999818 0.0 728
+729 0.0405631065368652 0.039999999999992 0.039999999999992 0.0 729
+730 0.0161111354827881 0.0200000000000102 0.0200000000000102 0.0 730
+731 0.0158760547637939 0.00999999999999091 0.00999999999999091 0.0 731
+732 0.0159549713134766 0.0200000000000102 0.0200000000000102 0.0 732
+733 0.0157599449157715 0.00999999999999091 0.00999999999999091 0.0 733
+734 0.0157549381256104 0.0200000000000102 0.0200000000000102 0.0 734
+735 0.0156841278076172 0.0200000000000102 0.0200000000000102 0.0 735
+736 0.0429198741912842 0.039999999999992 0.039999999999992 0.0 736
+737 0.0159552097320557 0.0200000000000102 0.0200000000000102 0.0 737
+738 0.016150951385498 0.00999999999999091 0.00999999999999091 0.0 738
+739 0.0157721042633057 0.0200000000000102 0.0200000000000102 0.0 739
+740 0.0156459808349609 0.00999999999999091 0.00999999999999091 0.0 740
+741 0.0156309604644775 0.0200000000000102 0.0200000000000102 0.0 741
+742 0.0458109378814697 0.039999999999992 0.039999999999992 0.0 742
+743 0.0170071125030518 0.0199999999999818 0.0199999999999818 0.0 743
+744 0.0160090923309326 0.0200000000000102 0.0200000000000102 0.0 744
+745 0.0158901214599609 0.00999999999999091 0.00999999999999091 0.0 745
+746 0.0158569812774658 0.0200000000000102 0.0200000000000102 0.0 746
+747 0.0156040191650391 0.0200000000000102 0.0200000000000102 0.0 747
+748 0.0188460350036621 0.00999999999999091 0.00999999999999091 0.0 748
+749 0.0407531261444092 0.0500000000000114 0.0500000000000114 0.0 749
+750 0.0160620212554932 0.00999999999999091 0.00999999999999091 0.0 750
+751 0.0160109996795654 0.0200000000000102 0.0200000000000102 0.0 751
+752 0.0167930126190186 0.00999999999999091 0.00999999999999091 0.0 752
+753 0.0158519744873047 0.0200000000000102 0.0200000000000102 0.0 753
+754 0.0157589912414551 0.0199999999999818 0.0199999999999818 0.0 754
+755 0.0156669616699219 0.00999999999999091 0.00999999999999091 0.0 755
+756 0.0408079624176025 0.0400000000000205 0.0400000000000205 0.0 756
+757 0.0160200595855713 0.0199999999999818 0.0199999999999818 0.0 757
+758 0.015981912612915 0.0100000000000193 0.0100000000000193 0.0 758
+759 0.0158510208129883 0.0199999999999818 0.0199999999999818 0.0 759
+760 0.0184319019317627 0.0200000000000102 0.0200000000000102 0.0 760
+761 0.0160219669342041 0.0200000000000102 0.0200000000000102 0.0 761
+762 0.0413029193878174 0.039999999999992 0.039999999999992 0.0 762
+763 0.0162460803985596 0.00999999999999091 0.00999999999999091 0.0 763
+764 0.0159189701080322 0.0200000000000102 0.0200000000000102 0.0 764
+765 0.0158321857452393 0.00999999999999091 0.00999999999999091 0.0 765
+766 0.0157649517059326 0.0200000000000102 0.0200000000000102 0.0 766
+767 0.0156459808349609 0.0199999999999818 0.0199999999999818 0.0 767
+768 0.0156371593475342 0.0100000000000193 0.0100000000000193 0.0 768
+769 0.042356014251709 0.039999999999992 0.039999999999992 0.0 769
+770 0.0159518718719482 0.0200000000000102 0.0200000000000102 0.0 770
+771 0.0165510177612305 0.0199999999999818 0.0199999999999818 0.0 771
+772 0.0166161060333252 0.0100000000000193 0.0100000000000193 0.0 772
+773 0.0192360877990723 0.0199999999999818 0.0199999999999818 0.0 773
+774 0.0156729221343994 0.0200000000000102 0.0200000000000102 0.0 774
+775 0.0404140949249268 0.039999999999992 0.039999999999992 0.0 775
+776 0.0159680843353271 0.0100000000000193 0.0100000000000193 0.0 776
+777 0.0160880088806152 0.0199999999999818 0.0199999999999818 0.0 777
+778 0.0158729553222656 0.0200000000000102 0.0200000000000102 0.0 778
+779 0.0157761573791504 0.00999999999999091 0.00999999999999091 0.0 779
+780 0.0156121253967285 0.0200000000000102 0.0200000000000102 0.0 780
+781 0.0156919956207275 0.00999999999999091 0.00999999999999091 0.0 781
+782 0.0405950546264648 0.039999999999992 0.039999999999992 0.0 782
+783 0.0157918930053711 0.0200000000000102 0.0200000000000102 0.0 783
+784 0.0157120227813721 0.0200000000000102 0.0200000000000102 0.0 784
+785 0.018751859664917 0.00999999999999091 0.00999999999999091 0.0 785
+786 0.0155041217803955 0.0200000000000102 0.0200000000000102 0.0 786
+787 0.0158028602600098 0.0199999999999818 0.0199999999999818 0.0 787
+788 0.0158569812774658 0.0100000000000193 0.0100000000000193 0.0 788
+789 0.0412540435791016 0.039999999999992 0.039999999999992 0.0 789
+790 0.0160260200500488 0.0200000000000102 0.0200000000000102 0.0 790
+791 0.0159499645233154 0.0199999999999818 0.0199999999999818 0.0 791
+792 0.019320011138916 0.00999999999999091 0.00999999999999091 0.0 792
+793 0.0201430320739746 0.0200000000000102 0.0200000000000102 0.0 793
+794 0.0157289505004883 0.0200000000000102 0.0200000000000102 0.0 794
+795 0.0402889251708984 0.039999999999992 0.039999999999992 0.0 795
+796 0.0161571502685547 0.0200000000000102 0.0200000000000102 0.0 796
+797 0.0203540325164795 0.0199999999999818 0.0199999999999818 0.0 797
+798 0.0160300731658936 0.0100000000000193 0.0100000000000193 0.0 798
+799 0.0157592296600342 0.0199999999999818 0.0199999999999818 0.0 799
+800 0.0156340599060059 0.0200000000000102 0.0200000000000102 0.0 800
+801 0.0156660079956055 0.00999999999999091 0.00999999999999091 0.0 801
+802 0.0413990020751953 0.0400000000000205 0.0400000000000205 0.0 802
+803 0.0160489082336426 0.0199999999999818 0.0199999999999818 0.0 803
+804 0.0158998966217041 0.00999999999999091 0.00999999999999091 0.0 804
+805 0.0157411098480225 0.0200000000000102 0.0200000000000102 0.0 805
+806 0.01564621925354 0.0200000000000102 0.0200000000000102 0.0 806
+807 0.0156128406524658 0.00999999999999091 0.00999999999999091 0.0 807
+808 0.0405199527740479 0.039999999999992 0.039999999999992 0.0 808
+809 0.0189261436462402 0.0200000000000102 0.0200000000000102 0.0 809
+810 0.0164599418640137 0.0200000000000102 0.0200000000000102 0.0 810
+811 0.0159981250762939 0.00999999999999091 0.00999999999999091 0.0 811
+812 0.0159931182861328 0.0200000000000102 0.0200000000000102 0.0 812
+813 0.0164968967437744 0.0199999999999818 0.0199999999999818 0.0 813
+814 0.0156979560852051 0.0100000000000193 0.0100000000000193 0.0 814
+815 0.0407021045684814 0.039999999999992 0.039999999999992 0.0 815
+816 0.0162220001220703 0.0199999999999818 0.0199999999999818 0.0 816
+817 0.0161950588226318 0.0200000000000102 0.0200000000000102 0.0 817
+818 0.016150951385498 0.00999999999999091 0.00999999999999091 0.0 818
+819 0.0162560939788818 0.0200000000000102 0.0200000000000102 0.0 819
+820 0.0156610012054443 0.00999999999999091 0.00999999999999091 0.0 820
+821 0.0164270401000977 0.0200000000000102 0.0200000000000102 0.0 821
+822 0.0451018810272217 0.0500000000000114 0.0500000000000114 0.0 822
+823 0.0159950256347656 0.00999999999999091 0.00999999999999091 0.0 823
+824 0.015963077545166 0.0200000000000102 0.0200000000000102 0.0 824
+825 0.0158100128173828 0.00999999999999091 0.00999999999999091 0.0 825
+826 0.0157589912414551 0.0200000000000102 0.0200000000000102 0.0 826
+827 0.0156979560852051 0.00999999999999091 0.00999999999999091 0.0 827
+828 0.0408341884613037 0.0499999999999829 0.0499999999999829 0.0 828
+829 0.0160629749298096 0.0100000000000193 0.0100000000000193 0.0 829
+830 0.015963077545166 0.0199999999999818 0.0199999999999818 0.0 830
+831 0.0164670944213867 0.0100000000000193 0.0100000000000193 0.0 831
+832 0.0157999992370605 0.0199999999999818 0.0199999999999818 0.0 832
+833 0.0158040523529053 0.0200000000000102 0.0200000000000102 0.0 833
+834 0.0157339572906494 0.00999999999999091 0.00999999999999091 0.0 834
+835 0.0431559085845947 0.0400000000000205 0.0400000000000205 0.0 835
+836 0.0160439014434814 0.00999999999999091 0.00999999999999091 0.0 836
+837 0.0160748958587646 0.0200000000000102 0.0200000000000102 0.0 837
+838 0.015887975692749 0.00999999999999091 0.00999999999999091 0.0 838
+839 0.0156698226928711 0.0200000000000102 0.0200000000000102 0.0 839
+840 0.01568603515625 0.00999999999999091 0.00999999999999091 0.0 840
+841 0.044741153717041 0.0500000000000114 0.0500000000000114 0.0 841
+842 0.018258810043335 0.0199999999999818 0.0199999999999818 0.0 842
+843 0.0159640312194824 0.0100000000000193 0.0100000000000193 0.0 843
+844 0.0158689022064209 0.0199999999999818 0.0199999999999818 0.0 844
+845 0.0158030986785889 0.0200000000000102 0.0200000000000102 0.0 845
+846 0.0156970024108887 0.00999999999999091 0.00999999999999091 0.0 846
+847 0.0167360305786133 0.0200000000000102 0.0200000000000102 0.0 847
+848 0.0449869632720947 0.039999999999992 0.039999999999992 0.0 848
+849 0.0159621238708496 0.0200000000000102 0.0200000000000102 0.0 849
+850 0.0158789157867432 0.0200000000000102 0.0200000000000102 0.0 850
+851 0.0166089534759521 0.00999999999999091 0.00999999999999091 0.0 851
+852 0.0156459808349609 0.0200000000000102 0.0200000000000102 0.0 852
+853 0.0158588886260986 0.00999999999999091 0.00999999999999091 0.0 853
+854 0.0406129360198975 0.039999999999992 0.039999999999992 0.0 854
+855 0.0159440040588379 0.0200000000000102 0.0200000000000102 0.0 855
+856 0.0158100128173828 0.0199999999999818 0.0199999999999818 0.0 856
+857 0.0157890319824219 0.0100000000000193 0.0100000000000193 0.0 857
+858 0.015923023223877 0.0199999999999818 0.0199999999999818 0.0 858
+859 0.0155861377716064 0.0100000000000193 0.0100000000000193 0.0 859
+860 0.0188548564910889 0.0199999999999818 0.0199999999999818 0.0 860
+861 0.0412931442260742 0.0400000000000205 0.0400000000000205 0.0 861
+862 0.0165369510650635 0.0199999999999818 0.0199999999999818 0.0 862
+863 0.0160419940948486 0.0200000000000102 0.0200000000000102 0.0 863
+864 0.0164439678192139 0.00999999999999091 0.00999999999999091 0.0 864
+865 0.0157101154327393 0.0200000000000102 0.0200000000000102 0.0 865
+866 0.0156807899475098 0.00999999999999091 0.00999999999999091 0.0 866
+867 0.0156638622283936 0.0200000000000102 0.0200000000000102 0.0 867
+868 0.040902853012085 0.039999999999992 0.039999999999992 0.0 868
+869 0.0159800052642822 0.0200000000000102 0.0200000000000102 0.0 869
+870 0.0166110992431641 0.00999999999999091 0.00999999999999091 0.0 870
+871 0.017413854598999 0.0200000000000102 0.0200000000000102 0.0 871
+872 0.0192930698394775 0.0199999999999818 0.0199999999999818 0.0 872
+873 0.0160510540008545 0.0100000000000193 0.0100000000000193 0.0 873
+874 0.0406858921051025 0.0499999999999829 0.0499999999999829 0.0 874
+875 0.0160770416259766 0.0100000000000193 0.0100000000000193 0.0 875
+876 0.0161919593811035 0.0199999999999818 0.0199999999999818 0.0 876
+877 0.015955924987793 0.0100000000000193 0.0100000000000193 0.0 877
+878 0.0158419609069824 0.0199999999999818 0.0199999999999818 0.0 878
+879 0.0157468318939209 0.0200000000000102 0.0200000000000102 0.0 879
+880 0.0157167911529541 0.00999999999999091 0.00999999999999091 0.0 880
+881 0.040755033493042 0.039999999999992 0.039999999999992 0.0 881
+882 0.0160150527954102 0.0200000000000102 0.0200000000000102 0.0 882
+883 0.0159170627593994 0.00999999999999091 0.00999999999999091 0.0 883
+884 0.0180459022521973 0.0200000000000102 0.0200000000000102 0.0 884
+885 0.01603102684021 0.0200000000000102 0.0200000000000102 0.0 885
+886 0.0156559944152832 0.00999999999999091 0.00999999999999091 0.0 886
+887 0.040722131729126 0.039999999999992 0.039999999999992 0.0 887
+888 0.0161468982696533 0.0200000000000102 0.0200000000000102 0.0 888
+889 0.0159561634063721 0.0200000000000102 0.0200000000000102 0.0 889
+890 0.0158951282501221 0.00999999999999091 0.00999999999999091 0.0 890
+891 0.0195560455322266 0.0199999999999818 0.0199999999999818 0.0 891
+892 0.0194118022918701 0.0200000000000102 0.0200000000000102 0.0 892
+893 0.0158801078796387 0.0200000000000102 0.0200000000000102 0.0 893
+894 0.0406708717346191 0.039999999999992 0.039999999999992 0.0 894
+895 0.0159239768981934 0.00999999999999091 0.00999999999999091 0.0 895
+896 0.0185558795928955 0.0200000000000102 0.0200000000000102 0.0 896
+897 0.0165250301361084 0.0200000000000102 0.0200000000000102 0.0 897
+898 0.0156872272491455 0.00999999999999091 0.00999999999999091 0.0 898
+899 0.0156629085540771 0.0200000000000102 0.0200000000000102 0.0 899
+900 0.0411269664764404 0.039999999999992 0.039999999999992 0.0 900
+901 0.0161049365997314 0.0200000000000102 0.0200000000000102 0.0 901
+902 0.0159130096435547 0.00999999999999091 0.00999999999999091 0.0 902
+903 0.0158100128173828 0.0199999999999818 0.0199999999999818 0.0 903
+904 0.0157549381256104 0.0200000000000102 0.0200000000000102 0.0 904
+905 0.0155808925628662 0.00999999999999091 0.00999999999999091 0.0 905
+906 0.0157089233398438 0.0200000000000102 0.0200000000000102 0.0 906
+907 0.040733814239502 0.039999999999992 0.039999999999992 0.0 907
+908 0.0157508850097656 0.0100000000000193 0.0100000000000193 0.0 908
+909 0.0190198421478271 0.0199999999999818 0.0199999999999818 0.0 909
+910 0.0157220363616943 0.0200000000000102 0.0200000000000102 0.0 910
+911 0.0156431198120117 0.00999999999999091 0.00999999999999091 0.0 911
+912 0.0163240432739258 0.0200000000000102 0.0200000000000102 0.0 912
+913 0.0405840873718262 0.039999999999992 0.039999999999992 0.0 913
+914 0.0158839225769043 0.0200000000000102 0.0200000000000102 0.0 914
+915 0.0158710479736328 0.00999999999999091 0.00999999999999091 0.0 915
+916 0.0157589912414551 0.0200000000000102 0.0200000000000102 0.0 916
+917 0.0157959461212158 0.00999999999999091 0.00999999999999091 0.0 917
+918 0.0156550407409668 0.0200000000000102 0.0200000000000102 0.0 918
+919 0.0157132148742676 0.0199999999999818 0.0199999999999818 0.0 919
+920 0.0412201881408691 0.0400000000000205 0.0400000000000205 0.0 920
+921 0.0189180374145508 0.0199999999999818 0.0199999999999818 0.0 921
+922 0.0160009860992432 0.0100000000000193 0.0100000000000193 0.0 922
+923 0.0156481266021729 0.0199999999999818 0.0199999999999818 0.0 923
+924 0.0155301094055176 0.0100000000000193 0.0100000000000193 0.0 924
+925 0.015531063079834 0.0199999999999818 0.0199999999999818 0.0 925
+926 0.0156428813934326 0.0200000000000102 0.0200000000000102 0.0 926
+927 0.0410211086273193 0.039999999999992 0.039999999999992 0.0 927
+928 0.0159690380096436 0.00999999999999091 0.00999999999999091 0.0 928
+929 0.0158920288085938 0.0200000000000102 0.0200000000000102 0.0 929
+930 0.0157539844512939 0.00999999999999091 0.00999999999999091 0.0 930
+931 0.0157601833343506 0.0200000000000102 0.0200000000000102 0.0 931
+932 0.0157170295715332 0.0200000000000102 0.0200000000000102 0.0 932
+933 0.041064977645874 0.039999999999992 0.039999999999992 0.0 933
+934 0.0186421871185303 0.0200000000000102 0.0200000000000102 0.0 934
+935 0.0160388946533203 0.00999999999999091 0.00999999999999091 0.0 935
+936 0.0158660411834717 0.0200000000000102 0.0200000000000102 0.0 936
+937 0.0163609981536865 0.00999999999999091 0.00999999999999091 0.0 937
+938 0.0156807899475098 0.0200000000000102 0.0200000000000102 0.0 938
+939 0.0157260894775391 0.0199999999999818 0.0199999999999818 0.0 939
+940 0.0416240692138672 0.039999999999992 0.039999999999992 0.0 940
+941 0.0218920707702637 0.0200000000000102 0.0200000000000102 0.0 941
+942 0.015984058380127 0.0200000000000102 0.0200000000000102 0.0 942
+943 0.0157361030578613 0.00999999999999091 0.00999999999999091 0.0 943
+944 0.015678882598877 0.0200000000000102 0.0200000000000102 0.0 944
+945 0.0157279968261719 0.00999999999999091 0.00999999999999091 0.0 945
+946 0.0436809062957764 0.0500000000000114 0.0500000000000114 0.0 946
+947 0.016185998916626 0.00999999999999091 0.00999999999999091 0.0 947
+948 0.0159549713134766 0.0200000000000102 0.0200000000000102 0.0 948
+949 0.015841007232666 0.00999999999999091 0.00999999999999091 0.0 949
+950 0.0157299041748047 0.0200000000000102 0.0200000000000102 0.0 950
+951 0.0167520046234131 0.0199999999999818 0.0199999999999818 0.0 951
+952 0.0157999992370605 0.0100000000000193 0.0100000000000193 0.0 952
+953 0.0407941341400146 0.039999999999992 0.039999999999992 0.0 953
+954 0.0159251689910889 0.0199999999999818 0.0199999999999818 0.0 954
+955 0.0158488750457764 0.0100000000000193 0.0100000000000193 0.0 955
+956 0.0157351493835449 0.0199999999999818 0.0199999999999818 0.0 956
+957 0.0157461166381836 0.0100000000000193 0.0100000000000193 0.0 957
+958 0.0157830715179443 0.00999999999999091 0.00999999999999091 0.0 958
+959 0.0440328121185303 0.0400000000000205 0.0400000000000205 0.0 959
+960 0.0163891315460205 0.0199999999999818 0.0199999999999818 0.0 960
+961 0.0172231197357178 0.0200000000000102 0.0200000000000102 0.0 961
+962 0.0159628391265869 0.00999999999999091 0.00999999999999091 0.0 962
+963 0.0158162117004395 0.0200000000000102 0.0200000000000102 0.0 963
+964 0.0156660079956055 0.0200000000000102 0.0200000000000102 0.0 964
+965 0.0156989097595215 0.00999999999999091 0.00999999999999091 0.0 965
+966 0.0409789085388184 0.039999999999992 0.039999999999992 0.0 966
+967 0.0159859657287598 0.0200000000000102 0.0200000000000102 0.0 967
+968 0.0158331394195557 0.00999999999999091 0.00999999999999091 0.0 968
+969 0.0157871246337891 0.0200000000000102 0.0200000000000102 0.0 969
+970 0.0163278579711914 0.0199999999999818 0.0199999999999818 0.0 970
+971 0.0156929492950439 0.0100000000000193 0.0100000000000193 0.0 971
+972 0.0429351329803467 0.039999999999992 0.039999999999992 0.0 972
+973 0.0161349773406982 0.0100000000000193 0.0100000000000193 0.0 973
+974 0.0159289836883545 0.0199999999999818 0.0199999999999818 0.0 974
+975 0.0159060955047607 0.0100000000000193 0.0100000000000193 0.0 975
+976 0.0160870552062988 0.0199999999999818 0.0199999999999818 0.0 976
+977 0.0157091617584229 0.0100000000000193 0.0100000000000193 0.0 977
+978 0.0156669616699219 0.00999999999999091 0.00999999999999091 0.0 978
+979 0.0407209396362305 0.039999999999992 0.039999999999992 0.0 979
+980 0.0159940719604492 0.0200000000000102 0.0200000000000102 0.0 980
+981 0.0158989429473877 0.00999999999999091 0.00999999999999091 0.0 981
+982 0.0158960819244385 0.0200000000000102 0.0200000000000102 0.0 982
+983 0.0157449245452881 0.0200000000000102 0.0200000000000102 0.0 983
+984 0.0183939933776855 0.00999999999999091 0.00999999999999091 0.0 984
+985 0.0408549308776855 0.039999999999992 0.039999999999992 0.0 985
+986 0.016895055770874 0.0200000000000102 0.0200000000000102 0.0 986
+987 0.0159039497375488 0.0200000000000102 0.0200000000000102 0.0 987
+988 0.0158200263977051 0.00999999999999091 0.00999999999999091 0.0 988
+989 0.0157120227813721 0.0200000000000102 0.0200000000000102 0.0 989
+990 0.0156378746032715 0.00999999999999091 0.00999999999999091 0.0 990
+991 0.0228080749511719 0.0300000000000011 0.0300000000000011 0.0 991
+992 0.0409870147705078 0.039999999999992 0.039999999999992 0.0 992
+993 0.0157871246337891 0.00999999999999091 0.00999999999999091 0.0 993
+994 0.0158090591430664 0.0200000000000102 0.0200000000000102 0.0 994
+995 0.0157351493835449 0.0200000000000102 0.0200000000000102 0.0 995
+996 0.0185980796813965 0.00999999999999091 0.00999999999999091 0.0 996
+997 0.0160398483276367 0.0100000000000193 0.0100000000000193 0.0 997
+998 0.0404281616210938 0.039999999999992 0.039999999999992 0.0 998
+999 0.0159862041473389 0.0200000000000102 0.0200000000000102 0.0 999
+1000 0.0166270732879639 0.00999999999999091 0.00999999999999091 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat
new file mode 100644
index 0000000..465df20
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.157087197207005
+3 -0.179374358706398
+4 -0.172816500237501
+5 -0.172100634304929
+6 -0.18168246758723
+7 0.131584075287582
+8 0.679752237368679
+9 -0.163860297278845
+10 -0.170882707294366
+11 -0.166375603226363
+12 -0.174254444639597
+13 -0.173888868337232
+14 0.433940412821542
+15 0.373069309028039
+16 -0.171649802572127
+17 -0.169200630892492
+18 -0.166138159457362
+19 -0.1739364332791
+20 -0.127425006116119
+21 0.638263694934923
+22 0.12818251876092
+23 -0.175688598458062
+24 -0.170582005696374
+25 -0.165295475640757
+26 -0.177492415685482
+27 0.0465831397893705
+28 0.599451138773896
+29 -0.00135765066794861
+30 -0.177033357980592
+31 -0.16635596602023
+32 -0.166602977483835
+33 -0.178673562542768
+34 0.266392442433904
+35 0.432387768599705
+36 -0.0637700252002599
+37 -0.158118264958072
+38 -0.154561138423435
+39 -0.168429948675986
+40 -0.0994325786160257
+41 0.367997918823535
+42 0.290384046265292
+43 -0.11116281208171
+44 -0.175373024280893
+45 -0.160272110090895
+46 -0.164805593524448
+47 0.0550278238782237
+48 0.351023276202299
+49 0.189193346917991
+50 -0.138321616409331
+51 -0.174504050225761
+52 -0.161113173550488
+53 -0.152964238493074
+54 0.191038921821061
+55 0.288997249517505
+56 0.112554121399719
+57 -0.149706886466374
+58 -0.170685450581499
+59 -0.160759706621769
+60 -0.0696049681599959
+61 0.233811635314305
+62 0.22571473291272
+63 0.0469231721057327
+64 -0.157850957680934
+65 -0.16305911351091
+66 -0.156231122634058
+67 0.0491468744009525
+68 0.211267819802324
+69 0.187107177066929
+70 -0.0139870239184726
+71 -0.170483645145253
+72 -0.155686290284564
+73 -0.103000811390189
+74 0.138570030181668
+75 0.173843340323656
+76 0.143423232074103
+77 -0.0485241530965123
+78 -0.17395256767516
+79 -0.152395667614926
+80 -0.0364997518056447
+81 0.131378028895852
+82 0.157204475464315
+83 0.107865380703487
+84 -0.0772032951733248
+85 -0.168140171271818
+86 -0.144858575319744
+87 0.0510940822285813
+88 0.124231830951662
+89 0.116480579259527
+90 0.0733005231661278
+91 -0.103673077903456
+92 -0.163789078187485
+93 -0.0843697533408863
+94 0.0927359518979788
+95 0.0900559027837676
+96 0.104664222340361
+97 0.0382789156324802
+98 -0.128374408331222
+99 -0.15642261126302
+100 -0.00667308165088894
+101 0.0851277709144437
+102 0.0836018530451663
+103 0.0884188000954497
+104 0.00709279611310642
+105 -0.144660181300486
+106 -0.138143070220052
+107 0.0562816525685598
+108 0.0595077406929604
+109 0.0867173037785974
+110 0.0826832811453164
+111 -0.0160964251569884
+112 -0.155747087099804
+113 -0.0673832956811193
+114 0.0555412723389198
+115 0.0535188804439087
+116 0.0598230946420233
+117 0.0535276678974355
+118 -0.0458652924354906
+119 -0.153114302912901
+120 0.00982696548054891
+121 0.046672474075762
+122 0.0376959986943637
+123 0.0573772097995026
+124 0.0291609863119664
+125 -0.0720491385088587
+126 -0.119574247127328
+127 0.0398229760968292
+128 0.0368708833970769
+129 0.0378810523621832
+130 0.0440552599869543
+131 0.0168785446700554
+132 -0.100876176445281
+133 -0.0522667691021854
+134 0.036471105657028
+135 0.0215593152266718
+136 0.0332088835541183
+137 0.0406116641053865
+138 -0.000575792803151212
+139 -0.110182879489659
+140 0.0119148280486452
+141 0.0103606549224577
+142 0.0174203821210768
+143 0.0264660206850527
+144 0.0279556175958258
+145 -0.0101677743859891
+146 -0.0714378616054869
+147 0.0268904165103586
+148 0.0197546838971675
+149 0.0020125342918206
+150 0.0208048892753844
+151 0.0177433252225432
+152 -0.0412629401386729
+153 -0.0331295172833144
+154 0.0185158552578208
+155 0.0109488606569471
+156 0.00829546562841099
+157 0.0193950108790453
+158 0.00363009909349868
+159 -0.0424508741873948
+160 0.00483444603011959
+161 0.00251257763944739
+162 -0.0027291007330315
+163 0.00583978101322954
+164 0.0119526210929789
+165 0.00202945630944433
+166 -0.0133120914217794
+167 -0.0012297645717332
+168 0.00270288118433543
+169 -0.00541306317192281
+170 0.00344801669308451
+171 -7.06221686644991e-05
+172 -0.0128411948649165
+173 0.0258140753965777
+174 -0.00838152285590955
+175 0.00457554209144489
+176 -0.0212504244136124
+177 0.00405744330785776
+178 0.00109889713027893
+179 -0.00653340121943499
+180 0.0251074943438506
+181 0.00390303260107667
+182 -0.00701005779107689
+183 -0.0065141088117886
+184 -0.00279230972823837
+185 -0.00416383972424965
+186 0.0262707341683331
+187 0.00819057184579269
+188 -0.00340288166837825
+189 -0.0143930625406389
+190 -0.0253314001312743
+191 -0.00185836549539233
+192 0.00104764466063349
+193 0.0539677516048275
+194 -0.0100541189143094
+195 -0.00921746463253617
+196 -0.0149462313841975
+197 -0.0188238663657463
+198 -0.0175064441267539
+199 0.020760922122737
+200 0.0554307275152524
+201 -0.0148112905353319
+202 -0.0127466158713358
+203 -0.0243021923478065
+204 -0.0209159713475539
+205 -0.0114124320328544
+206 0.0397229436097326
+207 0.0456075315085741
+208 -0.0215007018820454
+209 -0.0144624346486559
+210 -0.0322330130568126
+211 -0.00825272885493334
+212 -0.0149224222346792
+213 0.0682032593962929
+214 0.0121011513942831
+215 -0.0169882789240117
+216 -0.0149704075424761
+217 -0.0387466974669077
+218 -0.00399663244288092
+219 0.017199112436661
+220 0.0760951670626158
+221 0.000771488467078772
+222 -0.0299297731350407
+223 -0.00961973831748005
+224 -0.0472117112712389
+225 -0.0172398450528946
+226 0.0399982487996819
+227 0.0668906972411487
+228 -0.0195152172068293
+229 -0.0118748121155119
+230 -0.0328125031882784
+231 -0.0308080129381723
+232 -0.0122390206650683
+233 0.0689451191829333
+234 0.029994234380722
+235 -0.0160522469025481
+236 -0.0138652708623251
+237 -0.0507286056559315
+238 -0.0108444844897431
+239 -0.000749122945858211
+240 0.0707991870940562
+241 0.0267001298657314
+242 -0.0303467049269583
+243 -0.0132703522046187
+244 -0.0519324123908225
+245 -0.020827887860283
+246 0.035011894574258
+247 0.071041404155295
+248 0.00264333590518284
+249 -0.0324109538103439
+250 -0.0173917664974712
+251 -0.0488496793294092
+252 -0.0141041170429656
+253 0.0508320887854303
+254 0.0750173132102245
+255 -0.0141435331710239
+256 -0.0149919228080718
+257 -0.0363809443035875
+258 -0.044180318575384
+259 0.0137303280992071
+260 0.0453890157170559
+261 0.0499450703384104
+262 -0.0214405609870375
+263 -0.0171265875233509
+264 -0.0483467081512779
+265 -0.0238039375745267
+266 0.0297704275693148
+267 0.0477795017107822
+268 0.0306806785398672
+269 -0.0241732516868213
+270 -0.0232177034439842
+271 -0.0561919945895127
+272 -0.0121383708530614
+273 0.0383380316167486
+274 0.0692068597048456
+275 -0.0037308740073283
+276 -0.0238823990824962
+277 -0.0233175869444128
+278 -0.0466628437090312
+279 0.00124369697752989
+280 0.033635887914297
+281 0.0595585462605596
+282 -0.00471883892563787
+283 -0.022010928895564
+284 -0.0396393069529268
+285 -0.047610976414541
+286 0.0330006232948636
+287 0.0280762592215935
+288 0.0546372734557523
+289 -0.0127989574716365
+290 -0.0191221337324256
+291 -0.0441318227203198
+292 -0.0234180780296535
+293 0.0323850514195515
+294 0.0485470915014664
+295 0.0233514564784711
+296 -0.014986868171212
+297 -0.0303748609767652
+298 -0.0492165541971281
+299 -0.000385604501460381
+300 0.0269531666988284
+301 0.0565609923395246
+302 0.00593180901393307
+303 -0.0139487837507826
+304 -0.0382587858091347
+305 -0.0491851369445174
+306 0.0160807177510981
+307 0.0361087651605283
+308 0.0389978157300904
+309 0.00502802264445259
+310 -0.0214508646037847
+311 -0.0382274859105765
+312 -0.0406626513624875
+313 0.0280699039368022
+314 0.0389617980418346
+315 0.0271371634582089
+316 0.00383396360577986
+317 -0.0368406522772554
+318 -0.0386138394670918
+319 -0.0144256141856596
+320 0.0269236337036347
+321 0.0378611438537414
+322 0.0209886410948846
+323 -0.000452113297036075
+324 -0.0449001716863398
+325 -0.0362164044779451
+326 -0.00595679435360415
+327 0.0506843309155259
+328 0.0326573572134026
+329 0.0107949518760053
+330 -0.00524263889747431
+331 -0.045061910257765
+332 -0.0336081125622954
+333 0.0142902742395516
+334 0.0327621408145429
+335 0.0232224714127171
+336 0.0111851134672308
+337 -0.0168616046652318
+338 -0.0421660588992697
+339 -0.0304729350756775
+340 0.0315110873281277
+341 0.0393883283265487
+342 0.00688623370858959
+343 0.0155748729948725
+344 -0.0396114220680361
+345 -0.036903793556725
+346 -0.0106964102495091
+347 0.0321472442987069
+348 0.0291161569873515
+349 0.0127286036167739
+350 0.0131191581487462
+351 -0.0510684340547118
+352 -0.037342914226626
+353 0.00800616948303765
+354 0.0353286314592821
+355 0.0224843093277485
+356 0.00483640438097458
+357 0.00270936967225743
+358 -0.050958398888098
+359 -0.03181357197987
+360 0.0263165400282428
+361 0.0337466198913848
+362 0.0138214636037434
+363 0.0161643781357266
+364 -0.0166975714811741
+365 -0.0379548808112395
+366 -0.0107191330666086
+367 0.0151768728627536
+368 0.0330707869037677
+369 0.00862332944835417
+370 0.0126881690782585
+371 -0.035143571537685
+372 -0.0379591383040581
+373 0.0034903385393575
+374 0.0262443107228041
+375 0.0239169076988401
+376 0.0117645257098411
+377 0.00667620811923268
+378 -0.0487466537790665
+379 -0.0248323076320059
+380 0.00853369884513661
+381 0.0254571493249656
+382 0.0158332997765884
+383 0.0152150967683835
+384 -0.00560022391839541
+385 -0.0468960628871472
+386 -0.0122137430122784
+387 0.0195354222281915
+388 0.0205785620197055
+389 0.00640951181213936
+390 0.0192254336021024
+391 -0.0213684050918215
+392 -0.0390677938838948
+393 -0.00851270390379209
+394 0.0198814929031009
+395 0.0221284736508306
+396 0.0144170779179485
+397 0.00761346746337475
+398 -0.0341642702201187
+399 -0.0182072192904153
+400 -0.000917427430821407
+401 0.0240923988301287
+402 0.0149702208233445
+403 0.0254338021686953
+404 -0.0114315718167618
+405 -0.0367784109383449
+406 -0.0203107293220967
+407 0.0207711450646343
+408 0.00769317821995912
+409 0.0155113277213562
+410 0.0188010420230405
+411 -0.00588271186449876
+412 -0.0453215571077292
+413 -0.0023477078738424
+414 0.0045635114773767
+415 0.0193832767222524
+416 0.0126157524584856
+417 0.0125919924992071
+418 -0.022128831828596
+419 -0.0316624813090816
+420 0.00848651912597777
+421 0.00365846968970242
+422 0.0167934861719605
+423 0.0258369213405359
+424 -0.0110386479254365
+425 -0.0221266194130739
+426 -0.0342359305340173
+427 0.0198173965590731
+428 0.0113340288154053
+429 0.0117321942610559
+430 0.0199069545235314
+431 -0.00972019619126481
+432 -0.0334368587948193
+433 -0.00818672582858474
+434 0.00847403279906724
+435 0.0151410616338098
+436 0.0210571960796968
+437 0.0106767873737501
+438 -0.013923260538601
+439 -0.0295951598444345
+440 -0.00213381404969862
+441 0.00202904020725609
+442 0.0229482306295094
+443 0.0184877779142267
+444 -0.00967213617656215
+445 -0.00921421284518073
+446 -0.0235983767065866
+447 -0.00275565709687977
+448 0.00850528936282641
+449 0.021653187958436
+450 0.0175868623090648
+451 -0.0158567287280081
+452 -0.0197244183098808
+453 -0.0181122740176874
+454 0.0114885559203587
+455 0.00821969307220109
+456 0.0172333504264287
+457 0.0166219780995992
+458 -0.0218887409079099
+459 -0.0166096810167506
+460 -0.0175255182955902
+461 0.0155549717347949
+462 0.0109524688624427
+463 0.0108083192821273
+464 0.0109544410525194
+465 -0.012075150479233
+466 -0.0316229939529222
+467 -0.00616925120907086
+468 0.0132996349281117
+469 0.0194985827103642
+470 0.0118786255995167
+471 -0.00394060339988717
+472 -0.0074504553199804
+473 -0.0216171208389261
+474 0.00601096062326295
+475 0.00225300714016349
+476 0.0328870249803732
+477 -0.00143854393918084
+478 -0.0125765646700796
+479 -0.00518610856295871
+480 -0.0286671364514193
+481 0.0114893086586308
+482 0.0101767599569462
+483 0.0215358355330199
+484 0.0100013983093797
+485 -0.0189420875106819
+486 -0.0170156842542937
+487 -0.0181219245592761
+488 0.0134350210494302
+489 0.0157200832610872
+490 0.00820671869127948
+491 0.00609605427848417
+492 -0.00964792789764855
+493 -0.0280629491471991
+494 -0.00119096663786943
+495 0.0059816978766158
+496 0.0319195128927636
+497 -0.00616844922211785
+498 -0.00300183927697173
+499 -0.00255830020653143
+500 -0.0326795727885289
+501 0.00737460740372866
+502 0.0101738406924715
+503 0.0166480802410528
+504 0.0101781028011199
+505 -0.0148697505539931
+506 -0.00932908806811421
+507 -0.0228291650465262
+508 0.016317603272819
+509 0.0251213315783841
+510 0.00429219423365217
+511 0.00509519846591672
+512 -0.0118288041004493
+513 -0.0182276341829169
+514 -0.0136524793951616
+515 0.0125652837072878
+516 0.0237831170063298
+517 0.000525824158270796
+518 0.000861207866418543
+519 -0.000309524320918211
+520 -0.0319611866775823
+521 0.00377002226899237
+522 0.00366677706502651
+523 0.0238709877277231
+524 -0.00194721509431841
+525 -0.00532831903040821
+526 -0.0035954903575234
+527 -0.0265125935766282
+528 0.00819935557807736
+529 0.0187116031801041
+530 0.00335323640794092
+531 0.0093979106751416
+532 -0.00717619909651022
+533 -0.0222889570534225
+534 -0.0159873555724934
+535 0.0155232558898349
+536 0.0188575547550394
+537 0.00257632001432395
+538 0.0109600141670179
+539 -0.0136168353942696
+540 -0.0286265327239912
+541 -0.00493532024944744
+542 0.0131483720919412
+543 0.0207593713409036
+544 0.00752548764010655
+545 0.0101794683902496
+546 -0.00944756530014968
+547 -0.0361193792524987
+548 0.00900784799603882
+549 0.00814620931366632
+550 0.0118963349468229
+551 0.00869181440821501
+552 0.00553664631914035
+553 -0.0235896662674149
+554 -0.0213031930671748
+555 0.0144191547013866
+556 0.00985740627307818
+557 0.0146461357237841
+558 -0.00329509825327045
+559 0.00861808586430692
+560 -0.0382908781734418
+561 -0.00810416928099721
+562 0.0152325822988648
+563 0.0108896546286742
+564 0.0197283233093635
+565 -0.00597279642964848
+566 0.00549346286324277
+567 -0.0441402987586487
+568 0.00442694223265451
+569 0.00895528979634627
+570 0.00314478664849838
+571 0.0275939863464633
+572 -0.000211275077900297
+573 -0.0157780481890476
+574 -0.0348847108726074
+575 0.0178433894654182
+576 0.00358880348184893
+577 0.00325401416563326
+578 0.0168304732698679
+579 0.00759458115231633
+580 -0.0249153562132231
+581 -0.0148180695954744
+582 0.0108144203245513
+583 0.0147457973792171
+584 0.00442055500088463
+585 0.0113147505801929
+586 0.00208502530934012
+587 -0.0369024921021571
+588 -0.00738632772951817
+589 0.00992698216785421
+590 0.00762460161308267
+591 0.0264602045744605
+592 0.00179884430710083
+593 -0.0065858667702633
+594 -0.0400946265552496
+595 0.00586629198250832
+596 0.00638016879591378
+597 -0.00334997345122169
+598 0.0378696957160481
+599 -0.00291662872883922
+600 -0.0150181756899771
+601 -0.0308267314085245
+602 0.00545487745877096
+603 0.0145056871276495
+604 -0.00111862002362357
+605 0.0274345659047568
+606 -0.00545886365985009
+607 -0.02134718500889
+608 -0.0168792261598091
+609 0.00235047714564286
+610 0.0115358557818356
+611 0.00892944549777402
+612 0.0175837325671957
+613 -0.00241533013968592
+614 -0.0397066859486968
+615 -0.000775410212127817
+616 0.010404414311518
+617 0.00622818135682105
+618 0.0256159561966313
+619 0.0100572818761881
+620 -0.00997184439752021
+621 -0.0370357127908402
+622 -0.009493683122773
+623 0.019991811173322
+624 0.00616915844764652
+625 0.0226334480172136
+626 -0.00170152998435823
+627 -0.00527269037631295
+628 -0.0310245966733844
+629 -0.00334664758487885
+630 0.0108099133488301
+631 0.0162472542900972
+632 0.0107638392138735
+633 -9.28636881484359e-05
+634 -0.0251735775995027
+635 -0.0175915903660944
+636 0.0064154965729608
+637 0.00918775959735482
+638 0.025607471670139
+639 0.00415316421623987
+640 -0.00555481869685676
+641 -0.0243730502242372
+642 -0.0236765581404991
+643 0.0132551374194837
+644 0.0159204978713982
+645 0.0182545204715289
+646 -0.00177344669143713
+647 -0.00410362457456551
+648 -0.0217821833150809
+649 -0.0187567646143839
+650 0.0108473001511633
+651 0.024234409213132
+652 0.0103373343092404
+653 0.0053494854974728
+654 -0.0116971189957597
+655 -0.025622749432742
+656 -0.00703489184924496
+657 0.0127306317732122
+658 0.0264660231555335
+659 0.00441275817266093
+660 -0.000498144331723384
+661 -0.0170193444138239
+662 -0.035755915518656
+663 0.0153452894744309
+664 0.0184392623502257
+665 0.0179210598556496
+666 0.00323237671435628
+667 -0.0143732162504404
+668 -0.0059072260888979
+669 -0.0424395347705013
+670 0.0182802454123028
+671 0.028027312899014
+672 0.0105955795585643
+673 0.00873541917286547
+674 -0.0180699323851307
+675 -0.0157035416270782
+676 -0.0243544633968205
+677 0.0122599065615016
+678 0.0293159679608981
+679 -0.0023542771968947
+680 0.0173160434772516
+681 -0.0192740489190438
+682 -0.0267558924656808
+683 -0.00512931356799544
+684 0.0160575949541419
+685 0.0188852073807438
+686 0.00138912191794047
+687 -0.00115067732885235
+688 -0.0058938945939148
+689 -0.0270293884074899
+690 0.000894104439656761
+691 0.0254384890333336
+692 0.0135759887351247
+693 0.00706307551413458
+694 -0.00983098745115802
+695 -0.0182029532724777
+696 -0.0188844337318011
+697 -0.000620495183408782
+698 0.031569666060583
+699 0.00247939842897875
+700 0.0175967326065924
+701 -0.0140127620939771
+702 -0.0204023919721389
+703 -0.0265270099155168
+704 0.0189279709581055
+705 0.0230696877886033
+706 0.00221980643869467
+707 0.00877474738492577
+708 -0.0162154001263846
+709 -0.0131109560281679
+710 -0.0175675796745332
+711 0.0223801164921319
+712 0.00577037578768595
+713 0.015016209026733
+714 0.000700464791035295
+715 -0.0265570398797467
+716 -0.00328487594267362
+717 -0.0125180962593854
+718 0.0282899511684865
+719 0.00190078369585563
+720 0.00988422939784888
+721 -0.00206231662877586
+722 -0.0260676646786268
+723 -0.00911966903113347
+724 -0.00349690376176947
+725 0.0311131205663657
+726 0.00982115201693743
+727 0.00380892869332063
+728 -0.0110636013291228
+729 -0.0147589149221332
+730 -0.0142665446241887
+731 0.0082820839740987
+732 0.0115944492459724
+733 0.0193205726321855
+734 -0.00599937049345255
+735 -0.0124413644991841
+736 -0.00567111710885452
+737 -0.0172490266022523
+738 0.0208711936714456
+739 0.0049112245490164
+740 0.0119338001717033
+741 -0.00382254745169823
+742 -0.0168037126507566
+743 -0.0106727427496242
+744 -0.0015896316832005
+745 0.00986670286392471
+746 0.0187708614601626
+747 0.00280713985351326
+748 -0.0103005824233574
+749 -0.00698856527705199
+750 -0.0148829004327279
+751 0.00737864042801781
+752 0.00378825958027056
+753 0.0169762573619787
+754 0.0022171253424174
+755 -0.00880275220702398
+756 -0.0113861610535219
+757 -0.00866954185078337
+758 -0.00102625777568937
+759 0.0153621406801242
+760 0.0175483371870747
+761 -0.0117316284519376
+762 0.00201727719536751
+763 -0.0135695524051989
+764 -0.00236628739393315
+765 -0.00558540481434592
+766 0.0269770620065138
+767 0.00572732432254425
+768 -0.0206632040359575
+769 0.00669734976955735
+770 -0.0177594319318436
+771 0.00610794003109065
+772 0.000941524893761258
+773 0.0184249836070844
+774 0.00603564044659765
+775 -0.0194800088175
+776 0.00211956864190904
+777 -0.010814553078384
+778 -0.00345880879440837
+779 0.00784989092108616
+780 0.0219931715670487
+781 -0.00850728907326284
+782 -0.00818020013943201
+783 -0.000161877820177968
+784 -0.00713626483576915
+785 -0.00189547729017052
+786 0.00606277375629014
+787 0.0175714822376805
+788 -0.0163318892122437
+789 0.00355096379727685
+790 -0.00561323769976105
+791 -0.00173115162828963
+792 0.00285124323851199
+793 0.00626988628820364
+794 0.00217746014515121
+795 -0.00760875508840939
+796 -0.000158305774946426
+797 0.000505966683014493
+798 -0.00693871262526605
+799 0.00898933345030533
+800 0.014710588776899
+801 -0.0127611881730304
+802 0.00195021147362958
+803 -0.00619101895130629
+804 0.0026189336260538
+805 -0.0119751993107655
+806 0.00863989985124942
+807 0.0162582664631878
+808 -0.00961705217558156
+809 -0.00291393696249613
+810 0.00183243185138599
+811 -0.00460631909363343
+812 -0.0119632672766042
+813 0.0208966630422238
+814 -0.00308347876710094
+815 -0.000388668719911606
+816 -0.00886871268574757
+817 0.0104410151238245
+818 -0.00971881568327177
+819 -0.00556079139249464
+820 0.0192762976108135
+821 -0.0107849691388102
+822 0.00749648811680043
+823 -0.0133743112470617
+824 0.0148954204098446
+825 -0.012870734248631
+826 0.00297854342027238
+827 0.00400991287076845
+828 -0.000776475806225986
+829 0.000157063854584776
+830 -0.00648190853333762
+831 0.00841895039070195
+832 -0.0106394491215173
+833 0.0131617346674597
+834 -0.0110557177073731
+835 0.0104656591658511
+836 -0.00271631743019652
+837 0.00120199415841236
+838 0.003706954798763
+839 -0.00947603640270401
+840 0.00137362489293886
+841 -0.00412100522419038
+842 0.00440555479849327
+843 -0.00101257629784826
+844 0.011630938869848
+845 -0.00348460872671806
+846 -0.00490788919767545
+847 -0.00767305606978742
+848 0.00641850027996645
+849 -0.0047270157313243
+850 0.006561877154592
+851 0.00346504126665878
+852 0.000325934762370315
+853 -0.00691243590442494
+854 -0.0122397831712401
+855 0.0155142896041314
+856 -0.00649940375329406
+857 0.0115764362511307
+858 -0.00166218348252304
+859 0.00329024056556213
+860 -0.0168163842675434
+861 -0.0018300046237477
+862 0.00782622924665259
+863 0.00184144237820109
+864 0.00564522536281571
+865 0.00166897889337862
+866 0.000762761808421144
+867 -0.0247108710871775
+868 0.0102945871423903
+869 0.00176524231160526
+870 0.0100435696701272
+871 -0.000881447853453438
+872 0.0077251769247763
+873 -0.00856838315554851
+874 -0.0147878775532851
+875 0.0032203221928359
+876 0.00271820057534821
+877 0.0150200342356852
+878 -0.00679910502968767
+879 0.00803734684491422
+880 -0.0129685352671973
+881 -0.00468207467932367
+882 -0.0040001560959317
+883 0.0127784032727213
+884 0.00689584536184243
+885 -0.00348378029753978
+886 0.00583835064957876
+887 -0.018431993579404
+888 -0.00543151914104362
+889 0.000930192838208099
+890 0.0189669669181415
+891 0.00197455166108111
+892 0.000291983829886991
+893 -0.00151890218051029
+894 -0.018758927675871
+895 -0.00427007831617855
+896 0.00873163971817387
+897 0.0116921446719301
+898 0.00493448763764004
+899 0.000812558628478896
+900 -0.00829685479660704
+901 -0.016774476024156
+902 -0.00284574091222063
+903 0.0166712115089998
+904 0.00393567866715527
+905 0.00970634578920477
+906 -0.0013135499413494
+907 -0.0151419078767085
+908 -0.014262642806324
+909 0.000679710286692927
+910 0.023632237447571
+911 -0.000293075867552849
+912 0.00963897961846078
+913 -0.00892745437111743
+914 -0.0141610280914154
+915 -0.0143929747783252
+916 0.0126331813801288
+917 0.0140072140155889
+918 0.0038464358463258
+919 0.00872792856356974
+920 -0.0142893223780218
+921 -0.0144626608008151
+922 -0.0106633311842541
+923 0.0182487172273735
+924 0.00789811928832441
+925 0.00674770411457765
+926 0.00151185223543001
+927 -0.0131662643971208
+928 -0.0130299725001482
+929 -0.000421100875615765
+930 0.0101012876932665
+931 0.0109771581904619
+932 0.00600630873622808
+933 -0.00610768057521272
+934 -0.0113069105169847
+935 -0.0108646539420972
+936 0.00681782689120027
+937 0.00453863835411057
+938 0.0128033807887734
+939 0.00558460964303299
+940 -0.0111413786231144
+941 -0.010741707945974
+942 -0.0073905294023225
+943 0.00509539616333849
+944 0.00789664081858827
+945 0.0156023411643847
+946 -0.00196863307695851
+947 -0.00929990689658537
+948 -0.0100501558671196
+949 -0.00713963769082725
+950 0.00529444925980778
+951 0.00907288818013118
+952 0.0159396165239691
+953 -0.0070169105795629
+954 -0.00871200515303164
+955 -0.00623272113762449
+956 -0.00859043676592199
+957 0.00750758667776515
+958 0.0114715494246097
+959 0.00783845600054901
+960 -0.00640762499905148
+961 -0.00791318713998704
+962 -0.00388200155080539
+963 -0.00821887932833072
+964 0.00969710527680486
+965 0.0132324446252105
+966 0.000588150241816455
+967 -0.00459312775024423
+968 -0.00661504524014442
+969 -0.00488536336284523
+970 -0.00665739535025808
+971 0.0119120087088002
+972 0.0129080825261635
+973 -0.00502738233144332
+974 -0.00424651006131981
+975 -0.00529584314204073
+976 -0.00401797749822628
+977 -0.00398629771407627
+978 0.0145696891837213
+979 0.00312400996929776
+980 -0.0024620797714283
+981 -0.0029972609662243
+982 -0.00374070711004024
+983 -0.00324300553128461
+984 -0.00266784725010517
+985 0.0142342444009173
+986 -0.00291146863667702
+987 -0.00123170535641386
+988 -0.00195500360676893
+989 -0.0018623417265137
+990 -0.0010940028343966
+991 -0.00012714389035354
+992 0.00601935720393536
+993 -0.00153575128302119
+994 -0.000790525971546018
+995 -0.000953092463346404
+996 -0.000631437937788914
+997 -5.86631399396442e-05
+998 0.000839644378016313
+999 -0.000137648586440022
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat
new file mode 100644
index 0000000..1290916
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0308499336242676 0.0300000000000011 0.0300000000000011 0.0 1
+2 0.027501106262207 0.0299999999999976 0.0299999999999976 0.0 2
+3 0.0248689651489258 0.0200000000000031 0.0200000000000031 0.0 3
+4 0.0230190753936768 0.0199999999999996 0.0199999999999996 0.0 4
+5 0.0231549739837646 0.0299999999999976 0.0299999999999976 0.0 5
+6 0.0229060649871826 0.0200000000000031 0.0200000000000031 0.0 6
+7 0.0479171276092529 0.0499999999999972 0.0499999999999972 0.0 7
+8 0.0237171649932861 0.0199999999999996 0.0199999999999996 0.0 8
+9 0.0234429836273193 0.0200000000000031 0.0200000000000031 0.0 9
+10 0.0232129096984863 0.0299999999999976 0.0299999999999976 0.0 10
+11 0.0243880748748779 0.0199999999999996 0.0199999999999996 0.0 11
+12 0.0262730121612549 0.0300000000000011 0.0300000000000011 0.0 12
+13 0.022907018661499 0.0199999999999996 0.0199999999999996 0.0 13
+14 0.0502560138702393 0.0500000000000007 0.0500000000000007 0.0 14
+15 0.0239529609680176 0.0199999999999996 0.0199999999999996 0.0 15
+16 0.0233089923858643 0.0300000000000011 0.0300000000000011 0.0 16
+17 0.0230889320373535 0.0199999999999996 0.0199999999999996 0.0 17
+18 0.0229461193084717 0.0199999999999996 0.0199999999999996 0.0 18
+19 0.0228281021118164 0.0300000000000011 0.0300000000000011 0.0 19
+20 0.0227499008178711 0.0199999999999996 0.0199999999999996 0.0 20
+21 0.0519850254058838 0.0500000000000007 0.0500000000000007 0.0 21
+22 0.0238831043243408 0.0299999999999976 0.0299999999999976 0.0 22
+23 0.0233030319213867 0.0199999999999996 0.0199999999999996 0.0 23
+24 0.0230920314788818 0.0200000000000031 0.0200000000000031 0.0 24
+25 0.0230100154876709 0.0199999999999996 0.0199999999999996 0.0 25
+26 0.0230438709259033 0.0199999999999996 0.0199999999999996 0.0 26
+27 0.0233631134033203 0.0199999999999996 0.0199999999999996 0.0 27
+28 0.0499250888824463 0.0500000000000007 0.0500000000000007 0.0 28
+29 0.0236561298370361 0.0300000000000011 0.0300000000000011 0.0 29
+30 0.0273551940917969 0.0199999999999996 0.0199999999999996 0.0 30
+31 0.0231010913848877 0.0300000000000011 0.0300000000000011 0.0 31
+32 0.0228641033172607 0.0199999999999996 0.0199999999999996 0.0 32
+33 0.0227639675140381 0.0199999999999996 0.0199999999999996 0.0 33
+34 0.0227780342102051 0.0199999999999996 0.0199999999999996 0.0 34
+35 0.0491790771484375 0.0500000000000007 0.0500000000000007 0.0 35
+36 0.0235280990600586 0.0300000000000011 0.0300000000000011 0.0 36
+37 0.0303738117218018 0.0299999999999976 0.0299999999999976 0.0 37
+38 0.0235600471496582 0.0199999999999996 0.0199999999999996 0.0 38
+39 0.0272340774536133 0.0300000000000011 0.0300000000000011 0.0 39
+40 0.0229921340942383 0.0199999999999996 0.0199999999999996 0.0 40
+41 0.0230140686035156 0.0199999999999996 0.0199999999999996 0.0 41
+42 0.0487380027770996 0.0500000000000007 0.0500000000000007 0.0 42
+43 0.0233781337738037 0.0300000000000011 0.0300000000000011 0.0 43
+44 0.0232539176940918 0.0199999999999996 0.0199999999999996 0.0 44
+45 0.0231471061706543 0.0199999999999996 0.0199999999999996 0.0 45
+46 0.0229659080505371 0.0300000000000011 0.0300000000000011 0.0 46
+47 0.0236260890960693 0.0199999999999996 0.0199999999999996 0.0 47
+48 0.0249731540679932 0.0299999999999976 0.0299999999999976 0.0 48
+49 0.0491600036621094 0.0400000000000027 0.0400000000000027 0.0 49
+50 0.0233979225158691 0.0299999999999976 0.0299999999999976 0.0 50
+51 0.0233068466186523 0.0200000000000031 0.0200000000000031 0.0 51
+52 0.0230197906494141 0.0199999999999996 0.0199999999999996 0.0 52
+53 0.023003101348877 0.0299999999999976 0.0299999999999976 0.0 53
+54 0.0229551792144775 0.0199999999999996 0.0199999999999996 0.0 54
+55 0.0227420330047607 0.0200000000000031 0.0200000000000031 0.0 55
+56 0.0490391254425049 0.0499999999999972 0.0499999999999972 0.0 56
+57 0.0280921459197998 0.0300000000000011 0.0300000000000011 0.0 57
+58 0.0237009525299072 0.0199999999999996 0.0199999999999996 0.0 58
+59 0.0233352184295654 0.0300000000000011 0.0300000000000011 0.0 59
+60 0.0229549407958984 0.0199999999999996 0.0199999999999996 0.0 60
+61 0.0229389667510986 0.0199999999999996 0.0199999999999996 0.0 61
+62 0.022536039352417 0.0300000000000011 0.0300000000000011 0.0 62
+63 0.0481998920440674 0.0399999999999991 0.0399999999999991 0.0 63
+64 0.0232841968536377 0.0300000000000011 0.0300000000000011 0.0 64
+65 0.0232529640197754 0.0199999999999996 0.0199999999999996 0.0 65
+66 0.026047945022583 0.0299999999999976 0.0299999999999976 0.0 66
+67 0.0240390300750732 0.0200000000000031 0.0200000000000031 0.0 67
+68 0.0229721069335938 0.0199999999999996 0.0199999999999996 0.0 68
+69 0.0479068756103516 0.0500000000000007 0.0500000000000007 0.0 69
+70 0.023643970489502 0.0199999999999996 0.0199999999999996 0.0 70
+71 0.0241210460662842 0.0199999999999996 0.0199999999999996 0.0 71
+72 0.0232229232788086 0.0199999999999996 0.0199999999999996 0.0 72
+73 0.0230081081390381 0.0300000000000011 0.0300000000000011 0.0 73
+74 0.0300300121307373 0.0300000000000011 0.0300000000000011 0.0 74
+75 0.0227279663085938 0.0199999999999996 0.0199999999999996 0.0 75
+76 0.0513601303100586 0.0500000000000007 0.0500000000000007 0.0 76
+77 0.0237360000610352 0.0199999999999996 0.0199999999999996 0.0 77
+78 0.0233068466186523 0.0300000000000011 0.0300000000000011 0.0 78
+79 0.0231139659881592 0.0199999999999996 0.0199999999999996 0.0 79
+80 0.0230059623718262 0.0199999999999996 0.0199999999999996 0.0 80
+81 0.022935152053833 0.0299999999999976 0.0299999999999976 0.0 81
+82 0.0229039192199707 0.0200000000000031 0.0200000000000031 0.0 82
+83 0.0487849712371826 0.0499999999999972 0.0499999999999972 0.0 83
+84 0.0268459320068359 0.0199999999999996 0.0199999999999996 0.0 84
+85 0.0233829021453857 0.0300000000000011 0.0300000000000011 0.0 85
+86 0.0231680870056152 0.0199999999999996 0.0199999999999996 0.0 86
+87 0.0230309963226318 0.0199999999999996 0.0199999999999996 0.0 87
+88 0.0234689712524414 0.0300000000000011 0.0300000000000011 0.0 88
+89 0.0231020450592041 0.0199999999999996 0.0199999999999996 0.0 89
+90 0.0486099720001221 0.0500000000000007 0.0500000000000007 0.0 90
+91 0.0234777927398682 0.0200000000000031 0.0200000000000031 0.0 91
+92 0.0232808589935303 0.029999999999994 0.029999999999994 0.0 92
+93 0.0230159759521484 0.0200000000000031 0.0200000000000031 0.0 93
+94 0.0258738994598389 0.0300000000000011 0.0300000000000011 0.0 94
+95 0.0232770442962646 0.019999999999996 0.019999999999996 0.0 95
+96 0.022737979888916 0.0200000000000031 0.0200000000000031 0.0 96
+97 0.0484600067138672 0.0499999999999972 0.0499999999999972 0.0 97
+98 0.023435115814209 0.0200000000000031 0.0200000000000031 0.0 98
+99 0.0234768390655518 0.0300000000000011 0.0300000000000011 0.0 99
+100 0.0230209827423096 0.019999999999996 0.019999999999996 0.0 100
+101 0.0230460166931152 0.0200000000000031 0.0200000000000031 0.0 101
+102 0.0232481956481934 0.0300000000000011 0.0300000000000011 0.0 102
+103 0.0264010429382324 0.019999999999996 0.019999999999996 0.0 103
+104 0.0486769676208496 0.0500000000000043 0.0500000000000043 0.0 104
+105 0.0233399868011475 0.019999999999996 0.019999999999996 0.0 105
+106 0.0231819152832031 0.0300000000000011 0.0300000000000011 0.0 106
+107 0.0230488777160645 0.0200000000000031 0.0200000000000031 0.0 107
+108 0.0238149166107178 0.019999999999996 0.019999999999996 0.0 108
+109 0.0230348110198975 0.0300000000000011 0.0300000000000011 0.0 109
+110 0.0254418849945068 0.0200000000000031 0.0200000000000031 0.0 110
+111 0.0559201240539551 0.0599999999999952 0.0599999999999952 0.0 111
+112 0.0237429141998291 0.0200000000000031 0.0200000000000031 0.0 112
+113 0.0230910778045654 0.0300000000000011 0.0300000000000011 0.0 113
+114 0.0230679512023926 0.019999999999996 0.019999999999996 0.0 114
+115 0.022960901260376 0.0200000000000031 0.0200000000000031 0.0 115
+116 0.0229921340942383 0.019999999999996 0.019999999999996 0.0 116
+117 0.0226120948791504 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.0491540431976318 0.0500000000000043 0.0500000000000043 0.0 118
+119 0.0233540534973145 0.019999999999996 0.019999999999996 0.0 119
+120 0.023921012878418 0.0200000000000031 0.0200000000000031 0.0 120
+121 0.02628493309021 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.0231039524078369 0.019999999999996 0.019999999999996 0.0 122
+123 0.0229899883270264 0.0300000000000011 0.0300000000000011 0.0 123
+124 0.0484068393707275 0.0399999999999991 0.0399999999999991 0.0 124
+125 0.0236389636993408 0.0300000000000011 0.0300000000000011 0.0 125
+126 0.0232870578765869 0.019999999999996 0.019999999999996 0.0 126
+127 0.0232260227203369 0.0200000000000031 0.0200000000000031 0.0 127
+128 0.0229640007019043 0.0300000000000011 0.0300000000000011 0.0 128
+129 0.02298903465271 0.019999999999996 0.019999999999996 0.0 129
+130 0.0251820087432861 0.0300000000000011 0.0300000000000011 0.0 130
+131 0.0493929386138916 0.0399999999999991 0.0399999999999991 0.0 131
+132 0.0237491130828857 0.019999999999996 0.019999999999996 0.0 132
+133 0.0233249664306641 0.0200000000000031 0.0200000000000031 0.0 133
+134 0.0232069492340088 0.0300000000000011 0.0300000000000011 0.0 134
+135 0.0229921340942383 0.019999999999996 0.019999999999996 0.0 135
+136 0.0232110023498535 0.0200000000000031 0.0200000000000031 0.0 136
+137 0.0227601528167725 0.019999999999996 0.019999999999996 0.0 137
+138 0.0484609603881836 0.0500000000000043 0.0500000000000043 0.0 138
+139 0.0269899368286133 0.0300000000000011 0.0300000000000011 0.0 139
+140 0.0233750343322754 0.019999999999996 0.019999999999996 0.0 140
+141 0.023090124130249 0.0300000000000011 0.0300000000000011 0.0 141
+142 0.0229980945587158 0.019999999999996 0.019999999999996 0.0 142
+143 0.0231709480285645 0.0200000000000031 0.0200000000000031 0.0 143
+144 0.0230460166931152 0.0300000000000011 0.0300000000000011 0.0 144
+145 0.0494990348815918 0.0499999999999972 0.0499999999999972 0.0 145
+146 0.0304419994354248 0.0300000000000011 0.0300000000000011 0.0 146
+147 0.0233581066131592 0.0200000000000031 0.0200000000000031 0.0 147
+148 0.0262119770050049 0.0300000000000011 0.0300000000000011 0.0 148
+149 0.0228428840637207 0.019999999999996 0.019999999999996 0.0 149
+150 0.0228331089019775 0.0200000000000031 0.0200000000000031 0.0 150
+151 0.0226950645446777 0.019999999999996 0.019999999999996 0.0 151
+152 0.0486769676208496 0.0500000000000043 0.0500000000000043 0.0 152
+153 0.0234050750732422 0.029999999999994 0.029999999999994 0.0 153
+154 0.0234100818634033 0.0200000000000031 0.0200000000000031 0.0 154
+155 0.023036003112793 0.0200000000000031 0.0200000000000031 0.0 155
+156 0.0237429141998291 0.029999999999994 0.029999999999994 0.0 156
+157 0.0230100154876709 0.0200000000000031 0.0200000000000031 0.0 157
+158 0.0260419845581055 0.0300000000000011 0.0300000000000011 0.0 158
+159 0.0487880706787109 0.0399999999999991 0.0399999999999991 0.0 159
+160 0.0236630439758301 0.0200000000000031 0.0200000000000031 0.0 160
+161 0.0232570171356201 0.019999999999996 0.019999999999996 0.0 161
+162 0.0230000019073486 0.0300000000000011 0.0300000000000011 0.0 162
+163 0.0229759216308594 0.0200000000000031 0.0200000000000031 0.0 163
+164 0.0229389667510986 0.019999999999996 0.019999999999996 0.0 164
+165 0.0226230621337891 0.0200000000000031 0.0200000000000031 0.0 165
+166 0.052177906036377 0.0600000000000023 0.0600000000000023 0.0 166
+167 0.0238969326019287 0.019999999999996 0.019999999999996 0.0 167
+168 0.0231490135192871 0.0200000000000031 0.0200000000000031 0.0 168
+169 0.0229499340057373 0.029999999999994 0.029999999999994 0.0 169
+170 0.0229768753051758 0.0200000000000031 0.0200000000000031 0.0 170
+171 0.0229849815368652 0.0200000000000031 0.0200000000000031 0.0 171
+172 0.0481510162353516 0.0499999999999972 0.0499999999999972 0.0 172
+173 0.0235779285430908 0.0200000000000031 0.0200000000000031 0.0 173
+174 0.0235681533813477 0.029999999999994 0.029999999999994 0.0 174
+175 0.0232248306274414 0.0200000000000031 0.0200000000000031 0.0 175
+176 0.0256550312042236 0.0300000000000011 0.0300000000000011 0.0 176
+177 0.023108959197998 0.019999999999996 0.019999999999996 0.0 177
+178 0.0228090286254883 0.0200000000000031 0.0200000000000031 0.0 178
+179 0.0490450859069824 0.0499999999999972 0.0499999999999972 0.0 179
+180 0.0244641304016113 0.0300000000000011 0.0300000000000011 0.0 180
+181 0.0233809947967529 0.0200000000000031 0.0200000000000031 0.0 181
+182 0.0231349468231201 0.019999999999996 0.019999999999996 0.0 182
+183 0.0308740139007568 0.0300000000000011 0.0300000000000011 0.0 183
+184 0.0236179828643799 0.0300000000000011 0.0300000000000011 0.0 184
+185 0.0272319316864014 0.0200000000000031 0.0200000000000031 0.0 185
+186 0.0488860607147217 0.0399999999999991 0.0399999999999991 0.0 186
+187 0.0235450267791748 0.0300000000000011 0.0300000000000011 0.0 187
+188 0.0232491493225098 0.019999999999996 0.019999999999996 0.0 188
+189 0.0231590270996094 0.0200000000000031 0.0200000000000031 0.0 189
+190 0.0231139659881592 0.0300000000000011 0.0300000000000011 0.0 190
+191 0.0231552124023438 0.019999999999996 0.019999999999996 0.0 191
+192 0.022982120513916 0.0200000000000031 0.0200000000000031 0.0 192
+193 0.0529110431671143 0.0600000000000023 0.0600000000000023 0.0 193
+194 0.0235891342163086 0.019999999999996 0.019999999999996 0.0 194
+195 0.0234260559082031 0.0200000000000031 0.0200000000000031 0.0 195
+196 0.0230891704559326 0.029999999999994 0.029999999999994 0.0 196
+197 0.0230920314788818 0.0200000000000031 0.0200000000000031 0.0 197
+198 0.0229229927062988 0.0200000000000031 0.0200000000000031 0.0 198
+199 0.0226840972900391 0.029999999999994 0.029999999999994 0.0 199
+200 0.048753023147583 0.0400000000000063 0.0400000000000063 0.0 200
+201 0.0234558582305908 0.029999999999994 0.029999999999994 0.0 201
+202 0.0232200622558594 0.0200000000000031 0.0200000000000031 0.0 202
+203 0.0268151760101318 0.0300000000000011 0.0300000000000011 0.0 203
+204 0.0231211185455322 0.019999999999996 0.019999999999996 0.0 204
+205 0.0231039524078369 0.0200000000000031 0.0200000000000031 0.0 205
+206 0.0227501392364502 0.0300000000000011 0.0300000000000011 0.0 206
+207 0.0488438606262207 0.0499999999999972 0.0499999999999972 0.0 207
+208 0.023730993270874 0.0200000000000031 0.0200000000000031 0.0 208
+209 0.0231349468231201 0.019999999999996 0.019999999999996 0.0 209
+210 0.0231950283050537 0.0300000000000011 0.0300000000000011 0.0 210
+211 0.0232861042022705 0.0200000000000031 0.0200000000000031 0.0 211
+212 0.0260870456695557 0.0300000000000011 0.0300000000000011 0.0 212
+213 0.0480821132659912 0.0399999999999991 0.0399999999999991 0.0 213
+214 0.0236039161682129 0.029999999999994 0.029999999999994 0.0 214
+215 0.0233402252197266 0.0200000000000031 0.0200000000000031 0.0 215
+216 0.0233190059661865 0.0200000000000031 0.0200000000000031 0.0 216
+217 0.0242919921875 0.029999999999994 0.029999999999994 0.0 217
+218 0.0228087902069092 0.0200000000000031 0.0200000000000031 0.0 218
+219 0.0274980068206787 0.0300000000000011 0.0300000000000011 0.0 219
+220 0.0521900653839111 0.0499999999999972 0.0499999999999972 0.0 220
+221 0.0259828567504883 0.0300000000000011 0.0300000000000011 0.0 221
+222 0.0233159065246582 0.0200000000000031 0.0200000000000031 0.0 222
+223 0.0232350826263428 0.019999999999996 0.019999999999996 0.0 223
+224 0.023000955581665 0.0300000000000011 0.0300000000000011 0.0 224
+225 0.0230231285095215 0.0200000000000031 0.0200000000000031 0.0 225
+226 0.022864818572998 0.019999999999996 0.019999999999996 0.0 226
+227 0.0486090183258057 0.0500000000000043 0.0500000000000043 0.0 227
+228 0.0247719287872314 0.029999999999994 0.029999999999994 0.0 228
+229 0.0233240127563477 0.0200000000000031 0.0200000000000031 0.0 229
+230 0.0263748168945312 0.0300000000000011 0.0300000000000011 0.0 230
+231 0.0231301784515381 0.019999999999996 0.019999999999996 0.0 231
+232 0.0229740142822266 0.0200000000000031 0.0200000000000031 0.0 232
+233 0.0233769416809082 0.0300000000000011 0.0300000000000011 0.0 233
+234 0.0495500564575195 0.0499999999999972 0.0499999999999972 0.0 234
+235 0.0234000682830811 0.0200000000000031 0.0200000000000031 0.0 235
+236 0.0231790542602539 0.019999999999996 0.019999999999996 0.0 236
+237 0.0230810642242432 0.0300000000000011 0.0300000000000011 0.0 237
+238 0.0229249000549316 0.0200000000000031 0.0200000000000031 0.0 238
+239 0.0257270336151123 0.019999999999996 0.019999999999996 0.0 239
+240 0.0246570110321045 0.0300000000000011 0.0300000000000011 0.0 240
+241 0.049109935760498 0.0499999999999972 0.0499999999999972 0.0 241
+242 0.0233631134033203 0.0200000000000031 0.0200000000000031 0.0 242
+243 0.0232560634613037 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0232639312744141 0.019999999999996 0.019999999999996 0.0 244
+245 0.0231678485870361 0.0200000000000031 0.0200000000000031 0.0 245
+246 0.0229339599609375 0.0200000000000031 0.0200000000000031 0.0 246
+247 0.0234620571136475 0.029999999999994 0.029999999999994 0.0 247
+248 0.0517890453338623 0.0500000000000043 0.0500000000000043 0.0 248
+249 0.0233941078186035 0.019999999999996 0.019999999999996 0.0 249
+250 0.0230710506439209 0.0300000000000011 0.0300000000000011 0.0 250
+251 0.0229940414428711 0.0200000000000031 0.0200000000000031 0.0 251
+252 0.0231740474700928 0.019999999999996 0.019999999999996 0.0 252
+253 0.0238161087036133 0.0300000000000011 0.0300000000000011 0.0 253
+254 0.0480771064758301 0.0399999999999991 0.0399999999999991 0.0 254
+255 0.0314779281616211 0.0399999999999991 0.0399999999999991 0.0 255
+256 0.0233800411224365 0.0200000000000031 0.0200000000000031 0.0 256
+257 0.0274808406829834 0.0300000000000011 0.0300000000000011 0.0 257
+258 0.0230331420898438 0.019999999999996 0.019999999999996 0.0 258
+259 0.0229949951171875 0.0200000000000031 0.0200000000000031 0.0 259
+260 0.0227811336517334 0.0300000000000011 0.0300000000000011 0.0 260
+261 0.048346996307373 0.0399999999999991 0.0399999999999991 0.0 261
+262 0.0237669944763184 0.0300000000000011 0.0300000000000011 0.0 262
+263 0.0234119892120361 0.019999999999996 0.019999999999996 0.0 263
+264 0.0230929851531982 0.0300000000000011 0.0300000000000011 0.0 264
+265 0.0237300395965576 0.0200000000000031 0.0200000000000031 0.0 265
+266 0.0250859260559082 0.019999999999996 0.019999999999996 0.0 266
+267 0.0239300727844238 0.0300000000000011 0.0300000000000011 0.0 267
+268 0.048508882522583 0.0499999999999972 0.0499999999999972 0.0 268
+269 0.0236718654632568 0.0200000000000031 0.0200000000000031 0.0 269
+270 0.0233798027038574 0.0200000000000031 0.0200000000000031 0.0 270
+271 0.0230140686035156 0.029999999999994 0.029999999999994 0.0 271
+272 0.023123025894165 0.0200000000000031 0.0200000000000031 0.0 272
+273 0.0230128765106201 0.0200000000000031 0.0200000000000031 0.0 273
+274 0.0230889320373535 0.029999999999994 0.029999999999994 0.0 274
+275 0.0541810989379883 0.0500000000000043 0.0500000000000043 0.0 275
+276 0.0234689712524414 0.019999999999996 0.019999999999996 0.0 276
+277 0.0232949256896973 0.0300000000000011 0.0300000000000011 0.0 277
+278 0.0229971408843994 0.0200000000000031 0.0200000000000031 0.0 278
+279 0.023047924041748 0.019999999999996 0.019999999999996 0.0 279
+280 0.0229649543762207 0.0300000000000011 0.0300000000000011 0.0 280
+281 0.0231289863586426 0.0200000000000031 0.0200000000000031 0.0 281
+282 0.0487880706787109 0.0499999999999972 0.0499999999999972 0.0 282
+283 0.0234870910644531 0.0200000000000031 0.0200000000000031 0.0 283
+284 0.0263619422912598 0.0300000000000011 0.0300000000000011 0.0 284
+285 0.0238580703735352 0.019999999999996 0.019999999999996 0.0 285
+286 0.0231029987335205 0.0300000000000011 0.0300000000000011 0.0 286
+287 0.0230438709259033 0.019999999999996 0.019999999999996 0.0 287
+288 0.0477249622344971 0.0500000000000043 0.0500000000000043 0.0 288
+289 0.024465799331665 0.019999999999996 0.019999999999996 0.0 289
+290 0.023345947265625 0.0200000000000031 0.0200000000000031 0.0 290
+291 0.0297031402587891 0.0300000000000011 0.0300000000000011 0.0 291
+292 0.0236890316009521 0.0300000000000011 0.0300000000000011 0.0 292
+293 0.0227231979370117 0.019999999999996 0.019999999999996 0.0 293
+294 0.0271649360656738 0.0300000000000011 0.0300000000000011 0.0 294
+295 0.0483009815216064 0.0499999999999972 0.0499999999999972 0.0 295
+296 0.0236551761627197 0.0200000000000031 0.0200000000000031 0.0 296
+297 0.0233678817749023 0.0200000000000031 0.0200000000000031 0.0 297
+298 0.0230870246887207 0.029999999999994 0.029999999999994 0.0 298
+299 0.0232620239257812 0.0200000000000031 0.0200000000000031 0.0 299
+300 0.0231177806854248 0.0200000000000031 0.0200000000000031 0.0 300
+301 0.0231750011444092 0.029999999999994 0.029999999999994 0.0 301
+302 0.0530638694763184 0.0500000000000043 0.0500000000000043 0.0 302
+303 0.0237231254577637 0.019999999999996 0.019999999999996 0.0 303
+304 0.0232911109924316 0.0300000000000011 0.0300000000000011 0.0 304
+305 0.0233948230743408 0.0200000000000031 0.0200000000000031 0.0 305
+306 0.0232441425323486 0.019999999999996 0.019999999999996 0.0 306
+307 0.0230438709259033 0.0300000000000011 0.0300000000000011 0.0 307
+308 0.0230541229248047 0.0200000000000031 0.0200000000000031 0.0 308
+309 0.0487320423126221 0.0499999999999972 0.0499999999999972 0.0 309
+310 0.0232770442962646 0.0200000000000031 0.0200000000000031 0.0 310
+311 0.0253291130065918 0.0300000000000011 0.0300000000000011 0.0 311
+312 0.0244429111480713 0.019999999999996 0.019999999999996 0.0 312
+313 0.0229580402374268 0.0200000000000031 0.0200000000000031 0.0 313
+314 0.0229830741882324 0.029999999999994 0.029999999999994 0.0 314
+315 0.022658109664917 0.0200000000000031 0.0200000000000031 0.0 315
+316 0.0462629795074463 0.0499999999999972 0.0499999999999972 0.0 316
+317 0.023582935333252 0.0200000000000031 0.0200000000000031 0.0 317
+318 0.0232110023498535 0.0200000000000031 0.0200000000000031 0.0 318
+319 0.0232689380645752 0.029999999999994 0.029999999999994 0.0 319
+320 0.0231220722198486 0.0200000000000031 0.0200000000000031 0.0 320
+321 0.0256280899047852 0.0300000000000011 0.0300000000000011 0.0 321
+322 0.0481250286102295 0.0399999999999991 0.0399999999999991 0.0 322
+323 0.0235259532928467 0.0300000000000011 0.0300000000000011 0.0 323
+324 0.0235180854797363 0.019999999999996 0.019999999999996 0.0 324
+325 0.0231471061706543 0.0200000000000031 0.0200000000000031 0.0 325
+326 0.0238540172576904 0.0300000000000011 0.0300000000000011 0.0 326
+327 0.02276611328125 0.019999999999996 0.019999999999996 0.0 327
+328 0.0304388999938965 0.0399999999999991 0.0300000000000011 0.01 328
+329 0.0523970127105713 0.0500000000000043 0.0500000000000043 0.0 329
+330 0.023996114730835 0.029999999999994 0.029999999999994 0.0 330
+331 0.0234379768371582 0.0200000000000031 0.0200000000000031 0.0 331
+332 0.0230920314788818 0.019999999999996 0.019999999999996 0.0 332
+333 0.02305006980896 0.0300000000000011 0.0300000000000011 0.0 333
+334 0.0229852199554443 0.0200000000000031 0.0200000000000031 0.0 334
+335 0.0228848457336426 0.019999999999996 0.019999999999996 0.0 335
+336 0.0461750030517578 0.0500000000000043 0.0500000000000043 0.0 336
+337 0.0242049694061279 0.019999999999996 0.019999999999996 0.0 337
+338 0.0232689380645752 0.0300000000000011 0.0300000000000011 0.0 338
+339 0.027277946472168 0.0200000000000031 0.0200000000000031 0.0 339
+340 0.0230321884155273 0.0300000000000011 0.0300000000000011 0.0 340
+341 0.0230269432067871 0.019999999999996 0.019999999999996 0.0 341
+342 0.0231468677520752 0.0200000000000031 0.0200000000000031 0.0 342
+343 0.0488090515136719 0.0499999999999972 0.0499999999999972 0.0 343
+344 0.0232529640197754 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0230770111083984 0.0200000000000031 0.0200000000000031 0.0 345
+346 0.0230259895324707 0.019999999999996 0.019999999999996 0.0 346
+347 0.0230309963226318 0.0200000000000031 0.0200000000000031 0.0 347
+348 0.026080846786499 0.0300000000000011 0.0300000000000011 0.0 348
+349 0.023392915725708 0.019999999999996 0.019999999999996 0.0 349
+350 0.0461099147796631 0.0499999999999972 0.0499999999999972 0.0 350
+351 0.0233287811279297 0.0200000000000031 0.0200000000000031 0.0 351
+352 0.023190975189209 0.0300000000000011 0.0300000000000011 0.0 352
+353 0.0231750011444092 0.019999999999996 0.019999999999996 0.0 353
+354 0.0230758190155029 0.0200000000000031 0.0200000000000031 0.0 354
+355 0.0229721069335938 0.0300000000000011 0.0300000000000011 0.0 355
+356 0.0483551025390625 0.0499999999999972 0.0499999999999972 0.0 356
+357 0.0269951820373535 0.0200000000000031 0.0200000000000031 0.0 357
+358 0.0235021114349365 0.0300000000000011 0.0300000000000011 0.0 358
+359 0.0231399536132812 0.019999999999996 0.019999999999996 0.0 359
+360 0.0230071544647217 0.0200000000000031 0.0200000000000031 0.0 360
+361 0.0228490829467773 0.019999999999996 0.019999999999996 0.0 361
+362 0.0229380130767822 0.0300000000000011 0.0300000000000011 0.0 362
+363 0.0501840114593506 0.0500000000000043 0.0500000000000043 0.0 363
+364 0.029426097869873 0.029999999999994 0.029999999999994 0.0 364
+365 0.023777961730957 0.0200000000000031 0.0200000000000031 0.0 365
+366 0.0276000499725342 0.0300000000000011 0.0300000000000011 0.0 366
+367 0.0230789184570312 0.019999999999996 0.019999999999996 0.0 367
+368 0.0233089923858643 0.0200000000000031 0.0200000000000031 0.0 368
+369 0.0229260921478271 0.0300000000000011 0.0300000000000011 0.0 369
+370 0.0456759929656982 0.0399999999999991 0.0399999999999991 0.0 370
+371 0.0234260559082031 0.0300000000000011 0.0300000000000011 0.0 371
+372 0.0235531330108643 0.019999999999996 0.019999999999996 0.0 372
+373 0.0229899883270264 0.0200000000000031 0.0200000000000031 0.0 373
+374 0.0239078998565674 0.0300000000000011 0.0300000000000011 0.0 374
+375 0.0229928493499756 0.019999999999996 0.019999999999996 0.0 375
+376 0.0269260406494141 0.0300000000000011 0.0300000000000011 0.0 376
+377 0.0490090847015381 0.0499999999999972 0.0499999999999972 0.0 377
+378 0.0235331058502197 0.0200000000000031 0.0200000000000031 0.0 378
+379 0.0232670307159424 0.0200000000000031 0.0200000000000031 0.0 379
+380 0.0229969024658203 0.029999999999994 0.029999999999994 0.0 380
+381 0.0230321884155273 0.0200000000000031 0.0200000000000031 0.0 381
+382 0.0229909420013428 0.0200000000000031 0.0200000000000031 0.0 382
+383 0.022780179977417 0.029999999999994 0.029999999999994 0.0 383
+384 0.0519418716430664 0.0500000000000043 0.0500000000000043 0.0 384
+385 0.0233969688415527 0.019999999999996 0.019999999999996 0.0 385
+386 0.0231471061706543 0.0200000000000031 0.0200000000000031 0.0 386
+387 0.0230250358581543 0.0300000000000011 0.0300000000000011 0.0 387
+388 0.0229988098144531 0.019999999999996 0.019999999999996 0.0 388
+389 0.0229358673095703 0.0200000000000031 0.0200000000000031 0.0 389
+390 0.0482490062713623 0.0499999999999972 0.0499999999999972 0.0 390
+391 0.0239629745483398 0.0200000000000031 0.0200000000000031 0.0 391
+392 0.0235099792480469 0.0300000000000011 0.0300000000000011 0.0 392
+393 0.0232250690460205 0.019999999999996 0.019999999999996 0.0 393
+394 0.0269668102264404 0.0300000000000011 0.0300000000000011 0.0 394
+395 0.0230469703674316 0.0200000000000031 0.0200000000000031 0.0 395
+396 0.0230209827423096 0.019999999999996 0.019999999999996 0.0 396
+397 0.0488598346710205 0.0500000000000043 0.0500000000000043 0.0 397
+398 0.0243711471557617 0.029999999999994 0.029999999999994 0.0 398
+399 0.023435115814209 0.0200000000000031 0.0200000000000031 0.0 399
+400 0.0307729244232178 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.0231430530548096 0.0300000000000011 0.0300000000000011 0.0 401
+402 0.0228579044342041 0.019999999999996 0.019999999999996 0.0 402
+403 0.0268239974975586 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.0487518310546875 0.0399999999999991 0.0399999999999991 0.0 404
+405 0.0233860015869141 0.0300000000000011 0.0300000000000011 0.0 405
+406 0.0233309268951416 0.0200000000000031 0.0200000000000031 0.0 406
+407 0.0230538845062256 0.019999999999996 0.019999999999996 0.0 407
+408 0.0232100486755371 0.0300000000000011 0.0300000000000011 0.0 408
+409 0.0231878757476807 0.0200000000000031 0.0200000000000031 0.0 409
+410 0.0229208469390869 0.019999999999996 0.019999999999996 0.0 410
+411 0.0527458190917969 0.0600000000000023 0.0600000000000023 0.0 411
+412 0.0235259532928467 0.019999999999996 0.019999999999996 0.0 412
+413 0.0231070518493652 0.0200000000000031 0.0200000000000031 0.0 413
+414 0.0231637954711914 0.0300000000000011 0.0300000000000011 0.0 414
+415 0.0231881141662598 0.019999999999996 0.019999999999996 0.0 415
+416 0.0229959487915039 0.0200000000000031 0.0200000000000031 0.0 416
+417 0.0480611324310303 0.0499999999999972 0.0499999999999972 0.0 417
+418 0.0235860347747803 0.0200000000000031 0.0200000000000031 0.0 418
+419 0.0235400199890137 0.0300000000000011 0.0300000000000011 0.0 419
+420 0.0231409072875977 0.019999999999996 0.019999999999996 0.0 420
+421 0.0267078876495361 0.0300000000000011 0.0300000000000011 0.0 421
+422 0.0230278968811035 0.0200000000000031 0.0200000000000031 0.0 422
+423 0.0228691101074219 0.019999999999996 0.019999999999996 0.0 423
+424 0.0483551025390625 0.0500000000000043 0.0500000000000043 0.0 424
+425 0.0237739086151123 0.029999999999994 0.029999999999994 0.0 425
+426 0.0233981609344482 0.0200000000000031 0.0200000000000031 0.0 426
+427 0.0230469703674316 0.0200000000000031 0.0200000000000031 0.0 427
+428 0.0233399868011475 0.029999999999994 0.029999999999994 0.0 428
+429 0.0231611728668213 0.0200000000000031 0.0200000000000031 0.0 429
+430 0.0267009735107422 0.0300000000000011 0.0300000000000011 0.0 430
+431 0.0472571849822998 0.0399999999999991 0.0399999999999991 0.0 431
+432 0.0234270095825195 0.0300000000000011 0.0300000000000011 0.0 432
+433 0.0233609676361084 0.019999999999996 0.019999999999996 0.0 433
+434 0.0230159759521484 0.0200000000000031 0.0200000000000031 0.0 434
+435 0.0242648124694824 0.0300000000000011 0.0300000000000011 0.0 435
+436 0.0230550765991211 0.019999999999996 0.019999999999996 0.0 436
+437 0.0298559665679932 0.0300000000000011 0.0300000000000011 0.0 437
+438 0.0506420135498047 0.0500000000000043 0.0500000000000043 0.0 438
+439 0.0245800018310547 0.029999999999994 0.029999999999994 0.0 439
+440 0.0232729911804199 0.0200000000000031 0.0200000000000031 0.0 440
+441 0.023047924041748 0.019999999999996 0.019999999999996 0.0 441
+442 0.0230588912963867 0.0300000000000011 0.0300000000000011 0.0 442
+443 0.0230181217193604 0.0200000000000031 0.0200000000000031 0.0 443
+444 0.0474259853363037 0.0499999999999972 0.0499999999999972 0.0 444
+445 0.0234999656677246 0.0200000000000031 0.0200000000000031 0.0 445
+446 0.0245218276977539 0.019999999999996 0.019999999999996 0.0 446
+447 0.0232257843017578 0.0300000000000011 0.0300000000000011 0.0 447
+448 0.0262331962585449 0.0200000000000031 0.0200000000000031 0.0 448
+449 0.0228760242462158 0.0300000000000011 0.0300000000000011 0.0 449
+450 0.0228469371795654 0.019999999999996 0.019999999999996 0.0 450
+451 0.0489568710327148 0.0500000000000043 0.0500000000000043 0.0 451
+452 0.0236458778381348 0.019999999999996 0.019999999999996 0.0 452
+453 0.0232670307159424 0.0300000000000011 0.0300000000000011 0.0 453
+454 0.0231130123138428 0.0200000000000031 0.0200000000000031 0.0 454
+455 0.0231020450592041 0.019999999999996 0.019999999999996 0.0 455
+456 0.0229918956756592 0.0300000000000011 0.0300000000000011 0.0 456
+457 0.0239298343658447 0.0200000000000031 0.0200000000000031 0.0 457
+458 0.0493390560150146 0.0499999999999972 0.0499999999999972 0.0 458
+459 0.0235741138458252 0.019999999999996 0.019999999999996 0.0 459
+460 0.0232348442077637 0.0300000000000011 0.0300000000000011 0.0 460
+461 0.023144006729126 0.0200000000000031 0.0200000000000031 0.0 461
+462 0.0232930183410645 0.019999999999996 0.019999999999996 0.0 462
+463 0.0231001377105713 0.0300000000000011 0.0300000000000011 0.0 463
+464 0.022939920425415 0.0200000000000031 0.0200000000000031 0.0 464
+465 0.0494201183319092 0.0499999999999972 0.0499999999999972 0.0 465
+466 0.0259408950805664 0.0200000000000031 0.0200000000000031 0.0 466
+467 0.0232219696044922 0.0300000000000011 0.0300000000000011 0.0 467
+468 0.0229430198669434 0.019999999999996 0.019999999999996 0.0 468
+469 0.0229699611663818 0.0200000000000031 0.0200000000000031 0.0 469
+470 0.023082971572876 0.0300000000000011 0.0300000000000011 0.0 470
+471 0.0460779666900635 0.0399999999999991 0.0399999999999991 0.0 471
+472 0.0259521007537842 0.0300000000000011 0.0300000000000011 0.0 472
+473 0.0284790992736816 0.029999999999994 0.029999999999994 0.0 473
+474 0.0231249332427979 0.0200000000000031 0.0200000000000031 0.0 474
+475 0.0256848335266113 0.0300000000000011 0.0300000000000011 0.0 475
+476 0.0245170593261719 0.019999999999996 0.019999999999996 0.0 476
+477 0.0228760242462158 0.0200000000000031 0.0200000000000031 0.0 477
+478 0.0482878684997559 0.0499999999999972 0.0499999999999972 0.0 478
+479 0.0235881805419922 0.0300000000000011 0.0300000000000011 0.0 479
+480 0.0232489109039307 0.0200000000000031 0.0200000000000031 0.0 480
+481 0.0233352184295654 0.019999999999996 0.019999999999996 0.0 481
+482 0.0229990482330322 0.0300000000000011 0.0300000000000011 0.0 482
+483 0.0238139629364014 0.0200000000000031 0.0200000000000031 0.0 483
+484 0.0229029655456543 0.019999999999996 0.019999999999996 0.0 484
+485 0.0516219139099121 0.0500000000000043 0.0500000000000043 0.0 485
+486 0.023360013961792 0.029999999999994 0.029999999999994 0.0 486
+487 0.0233120918273926 0.0200000000000031 0.0200000000000031 0.0 487
+488 0.0231151580810547 0.0200000000000031 0.0200000000000031 0.0 488
+489 0.0229690074920654 0.029999999999994 0.029999999999994 0.0 489
+490 0.0230300426483154 0.0200000000000031 0.0200000000000031 0.0 490
+491 0.0228698253631592 0.0200000000000031 0.0200000000000031 0.0 491
+492 0.0457451343536377 0.0499999999999972 0.0499999999999972 0.0 492
+493 0.0249300003051758 0.0200000000000031 0.0200000000000031 0.0 493
+494 0.0259578227996826 0.029999999999994 0.029999999999994 0.0 494
+495 0.0231161117553711 0.0200000000000031 0.0200000000000031 0.0 495
+496 0.0229859352111816 0.0300000000000011 0.0300000000000011 0.0 496
+497 0.0230338573455811 0.019999999999996 0.019999999999996 0.0 497
+498 0.0484039783477783 0.0500000000000043 0.0500000000000043 0.0 498
+499 0.0237560272216797 0.019999999999996 0.019999999999996 0.0 499
+500 0.0233612060546875 0.0200000000000031 0.0200000000000031 0.0 500
+501 0.0233550071716309 0.0300000000000011 0.0300000000000011 0.0 501
+502 0.0231049060821533 0.019999999999996 0.019999999999996 0.0 502
+503 0.026008129119873 0.0300000000000011 0.0300000000000011 0.0 503
+504 0.0228710174560547 0.0200000000000031 0.0200000000000031 0.0 504
+505 0.0483829975128174 0.0499999999999972 0.0499999999999972 0.0 505
+506 0.0237247943878174 0.0200000000000031 0.0200000000000031 0.0 506
+507 0.02410888671875 0.029999999999994 0.029999999999994 0.0 507
+508 0.0231809616088867 0.0200000000000031 0.0200000000000031 0.0 508
+509 0.0286002159118652 0.0300000000000011 0.0300000000000011 0.0 509
+510 0.0245559215545654 0.019999999999996 0.019999999999996 0.0 510
+511 0.0228598117828369 0.0300000000000011 0.0300000000000011 0.0 511
+512 0.0508739948272705 0.0500000000000043 0.0500000000000043 0.0 512
+513 0.0235428810119629 0.019999999999996 0.019999999999996 0.0 513
+514 0.0231621265411377 0.0200000000000031 0.0200000000000031 0.0 514
+515 0.0231170654296875 0.0300000000000011 0.0300000000000011 0.0 515
+516 0.023061990737915 0.019999999999996 0.019999999999996 0.0 516
+517 0.0231702327728271 0.0200000000000031 0.0200000000000031 0.0 517
+518 0.0230000019073486 0.0300000000000011 0.0300000000000011 0.0 518
+519 0.0464069843292236 0.0399999999999991 0.0399999999999991 0.0 519
+520 0.0233228206634521 0.0300000000000011 0.0300000000000011 0.0 520
+521 0.0263099670410156 0.019999999999996 0.019999999999996 0.0 521
+522 0.0230581760406494 0.0300000000000011 0.0300000000000011 0.0 522
+523 0.0230810642242432 0.019999999999996 0.019999999999996 0.0 523
+524 0.0231571197509766 0.0200000000000031 0.0200000000000031 0.0 524
+525 0.0479769706726074 0.0499999999999972 0.0499999999999972 0.0 525
+526 0.0237100124359131 0.0200000000000031 0.0200000000000031 0.0 526
+527 0.0232999324798584 0.0300000000000011 0.0300000000000011 0.0 527
+528 0.0232400894165039 0.019999999999996 0.019999999999996 0.0 528
+529 0.0229151248931885 0.0200000000000031 0.0200000000000031 0.0 529
+530 0.0261499881744385 0.0300000000000011 0.0300000000000011 0.0 530
+531 0.0231139659881592 0.019999999999996 0.019999999999996 0.0 531
+532 0.0486347675323486 0.0500000000000043 0.0500000000000043 0.0 532
+533 0.023561954498291 0.0300000000000011 0.0300000000000011 0.0 533
+534 0.0232679843902588 0.019999999999996 0.019999999999996 0.0 534
+535 0.023292064666748 0.0200000000000031 0.0200000000000031 0.0 535
+536 0.0231978893280029 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.0229289531707764 0.019999999999996 0.019999999999996 0.0 537
+538 0.0231430530548096 0.0200000000000031 0.0200000000000031 0.0 538
+539 0.0520761013031006 0.0499999999999972 0.0499999999999972 0.0 539
+540 0.0233478546142578 0.0300000000000011 0.0300000000000011 0.0 540
+541 0.0231640338897705 0.019999999999996 0.019999999999996 0.0 541
+542 0.0230228900909424 0.0200000000000031 0.0200000000000031 0.0 542
+543 0.0231611728668213 0.0300000000000011 0.0300000000000011 0.0 543
+544 0.0238080024719238 0.019999999999996 0.019999999999996 0.0 544
+545 0.0228090286254883 0.0200000000000031 0.0200000000000031 0.0 545
+546 0.0527040958404541 0.0600000000000023 0.0600000000000023 0.0 546
+547 0.0233268737792969 0.019999999999996 0.019999999999996 0.0 547
+548 0.0268959999084473 0.0300000000000011 0.0300000000000011 0.0 548
+549 0.02323317527771 0.0200000000000031 0.0200000000000031 0.0 549
+550 0.0231490135192871 0.019999999999996 0.019999999999996 0.0 550
+551 0.0229969024658203 0.0300000000000011 0.0300000000000011 0.0 551
+552 0.0478971004486084 0.0399999999999991 0.0399999999999991 0.0 552
+553 0.0237979888916016 0.0300000000000011 0.0300000000000011 0.0 553
+554 0.0234241485595703 0.0200000000000031 0.0200000000000031 0.0 554
+555 0.023115873336792 0.019999999999996 0.019999999999996 0.0 555
+556 0.0237019062042236 0.0300000000000011 0.0300000000000011 0.0 556
+557 0.0229599475860596 0.0200000000000031 0.0200000000000031 0.0 557
+558 0.0263819694519043 0.029999999999994 0.029999999999994 0.0 558
+559 0.0488171577453613 0.0500000000000043 0.0500000000000043 0.0 559
+560 0.023486852645874 0.019999999999996 0.019999999999996 0.0 560
+561 0.0233681201934814 0.0200000000000031 0.0200000000000031 0.0 561
+562 0.0230288505554199 0.0300000000000011 0.0300000000000011 0.0 562
+563 0.022907018661499 0.019999999999996 0.019999999999996 0.0 563
+564 0.0227639675140381 0.0200000000000031 0.0200000000000031 0.0 564
+565 0.0228629112243652 0.019999999999996 0.019999999999996 0.0 565
+566 0.0502970218658447 0.0499999999999972 0.0499999999999972 0.0 566
+567 0.0234780311584473 0.0200000000000031 0.0200000000000031 0.0 567
+568 0.0246810913085938 0.019999999999996 0.019999999999996 0.0 568
+569 0.0233399868011475 0.0300000000000011 0.0300000000000011 0.0 569
+570 0.0233209133148193 0.0200000000000031 0.0200000000000031 0.0 570
+571 0.0233681201934814 0.019999999999996 0.019999999999996 0.0 571
+572 0.0485889911651611 0.0500000000000043 0.0500000000000043 0.0 572
+573 0.0244321823120117 0.029999999999994 0.029999999999994 0.0 573
+574 0.0241711139678955 0.0200000000000031 0.0200000000000031 0.0 574
+575 0.0249710083007812 0.0300000000000011 0.0300000000000011 0.0 575
+576 0.0267090797424316 0.019999999999996 0.019999999999996 0.0 576
+577 0.0232799053192139 0.0300000000000011 0.0300000000000011 0.0 577
+578 0.0231969356536865 0.0200000000000031 0.0200000000000031 0.0 578
+579 0.0491700172424316 0.0499999999999972 0.0499999999999972 0.0 579
+580 0.025277853012085 0.0200000000000031 0.0200000000000031 0.0 580
+581 0.0265741348266602 0.0300000000000011 0.0300000000000011 0.0 581
+582 0.0273458957672119 0.029999999999994 0.029999999999994 0.0 582
+583 0.0252799987792969 0.0200000000000031 0.0200000000000031 0.0 583
+584 0.0245480537414551 0.0300000000000011 0.0300000000000011 0.0 584
+585 0.0260021686553955 0.019999999999996 0.019999999999996 0.0 585
+586 0.0474262237548828 0.0500000000000043 0.0500000000000043 0.0 586
+587 0.0234909057617188 0.0300000000000011 0.0300000000000011 0.0 587
+588 0.023231029510498 0.019999999999996 0.019999999999996 0.0 588
+589 0.0231058597564697 0.0200000000000031 0.0200000000000031 0.0 589
+590 0.0234060287475586 0.0300000000000011 0.0300000000000011 0.0 590
+591 0.0230560302734375 0.019999999999996 0.019999999999996 0.0 591
+592 0.0236189365386963 0.0200000000000031 0.0200000000000031 0.0 592
+593 0.0531678199768066 0.0599999999999952 0.0599999999999952 0.0 593
+594 0.0234320163726807 0.0200000000000031 0.0200000000000031 0.0 594
+595 0.0234501361846924 0.019999999999996 0.019999999999996 0.0 595
+596 0.023097038269043 0.0300000000000011 0.0300000000000011 0.0 596
+597 0.0239620208740234 0.0200000000000031 0.0200000000000031 0.0 597
+598 0.023064136505127 0.019999999999996 0.019999999999996 0.0 598
+599 0.0469310283660889 0.0500000000000043 0.0500000000000043 0.0 599
+600 0.0238142013549805 0.019999999999996 0.019999999999996 0.0 600
+601 0.0232729911804199 0.0200000000000031 0.0200000000000031 0.0 601
+602 0.0264449119567871 0.0300000000000011 0.0300000000000011 0.0 602
+603 0.0250101089477539 0.0300000000000011 0.0300000000000011 0.0 603
+604 0.022953987121582 0.019999999999996 0.019999999999996 0.0 604
+605 0.0227360725402832 0.0200000000000031 0.0200000000000031 0.0 605
+606 0.0484528541564941 0.0499999999999972 0.0499999999999972 0.0 606
+607 0.0238401889801025 0.0200000000000031 0.0200000000000031 0.0 607
+608 0.023205041885376 0.0300000000000011 0.0300000000000011 0.0 608
+609 0.0230309963226318 0.019999999999996 0.019999999999996 0.0 609
+610 0.0233237743377686 0.0200000000000031 0.0200000000000031 0.0 610
+611 0.0229151248931885 0.0300000000000011 0.0300000000000011 0.0 611
+612 0.0266458988189697 0.019999999999996 0.019999999999996 0.0 612
+613 0.0459887981414795 0.0499999999999972 0.0499999999999972 0.0 613
+614 0.0233139991760254 0.0200000000000031 0.0200000000000031 0.0 614
+615 0.0232000350952148 0.0300000000000011 0.0300000000000011 0.0 615
+616 0.0238010883331299 0.019999999999996 0.019999999999996 0.0 616
+617 0.0231029987335205 0.0200000000000031 0.0200000000000031 0.0 617
+618 0.031013011932373 0.0300000000000011 0.0300000000000011 0.0 618
+619 0.0480711460113525 0.0499999999999972 0.0499999999999972 0.0 619
+620 0.0269320011138916 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0233550071716309 0.0200000000000031 0.0200000000000031 0.0 621
+622 0.0232939720153809 0.029999999999994 0.029999999999994 0.0 622
+623 0.0229189395904541 0.0200000000000031 0.0200000000000031 0.0 623
+624 0.022881031036377 0.0200000000000031 0.0200000000000031 0.0 624
+625 0.0228018760681152 0.029999999999994 0.029999999999994 0.0 625
+626 0.0487551689147949 0.0400000000000063 0.0400000000000063 0.0 626
+627 0.0234999656677246 0.029999999999994 0.029999999999994 0.0 627
+628 0.023996114730835 0.0200000000000031 0.0200000000000031 0.0 628
+629 0.0232369899749756 0.0300000000000011 0.0300000000000011 0.0 629
+630 0.0269510746002197 0.019999999999996 0.019999999999996 0.0 630
+631 0.024583101272583 0.0300000000000011 0.0300000000000011 0.0 631
+632 0.0230491161346436 0.0200000000000031 0.0200000000000031 0.0 632
+633 0.0473129749298096 0.0499999999999972 0.0499999999999972 0.0 633
+634 0.0233309268951416 0.0200000000000031 0.0200000000000031 0.0 634
+635 0.0232229232788086 0.019999999999996 0.019999999999996 0.0 635
+636 0.0229809284210205 0.0300000000000011 0.0300000000000011 0.0 636
+637 0.0231940746307373 0.0200000000000031 0.0200000000000031 0.0 637
+638 0.0231130123138428 0.019999999999996 0.019999999999996 0.0 638
+639 0.0522749423980713 0.0500000000000043 0.0500000000000043 0.0 639
+640 0.0235979557037354 0.029999999999994 0.029999999999994 0.0 640
+641 0.0233168601989746 0.0200000000000031 0.0200000000000031 0.0 641
+642 0.0231528282165527 0.0300000000000011 0.0300000000000011 0.0 642
+643 0.0232172012329102 0.019999999999996 0.019999999999996 0.0 643
+644 0.0227980613708496 0.0200000000000031 0.0200000000000031 0.0 644
+645 0.0227620601654053 0.0200000000000031 0.0200000000000031 0.0 645
+646 0.0490891933441162 0.0499999999999972 0.0499999999999972 0.0 646
+647 0.0240461826324463 0.0300000000000011 0.0300000000000011 0.0 647
+648 0.0267610549926758 0.019999999999996 0.019999999999996 0.0 648
+649 0.0232100486755371 0.0300000000000011 0.0300000000000011 0.0 649
+650 0.0230560302734375 0.0200000000000031 0.0200000000000031 0.0 650
+651 0.023500919342041 0.019999999999996 0.019999999999996 0.0 651
+652 0.0230460166931152 0.0300000000000011 0.0300000000000011 0.0 652
+653 0.0512759685516357 0.0500000000000043 0.0500000000000043 0.0 653
+654 0.0272390842437744 0.019999999999996 0.019999999999996 0.0 654
+655 0.0247349739074707 0.0300000000000011 0.0300000000000011 0.0 655
+656 0.0230178833007812 0.0200000000000031 0.0200000000000031 0.0 656
+657 0.0271899700164795 0.029999999999994 0.029999999999994 0.0 657
+658 0.0229711532592773 0.0200000000000031 0.0200000000000031 0.0 658
+659 0.0228548049926758 0.019999999999996 0.019999999999996 0.0 659
+660 0.0488860607147217 0.0500000000000043 0.0500000000000043 0.0 660
+661 0.0232799053192139 0.0300000000000011 0.0300000000000011 0.0 661
+662 0.0232510566711426 0.019999999999996 0.019999999999996 0.0 662
+663 0.0229790210723877 0.0200000000000031 0.0200000000000031 0.0 663
+664 0.0242810249328613 0.0300000000000011 0.0300000000000011 0.0 664
+665 0.0230100154876709 0.019999999999996 0.019999999999996 0.0 665
+666 0.0498199462890625 0.0500000000000043 0.0500000000000043 0.0 666
+667 0.0237331390380859 0.019999999999996 0.019999999999996 0.0 667
+668 0.0234551429748535 0.0300000000000011 0.0300000000000011 0.0 668
+669 0.0231800079345703 0.0200000000000031 0.0200000000000031 0.0 669
+670 0.0229709148406982 0.019999999999996 0.019999999999996 0.0 670
+671 0.023015022277832 0.0300000000000011 0.0300000000000011 0.0 671
+672 0.0230131149291992 0.0200000000000031 0.0200000000000031 0.0 672
+673 0.0487980842590332 0.0499999999999972 0.0499999999999972 0.0 673
+674 0.0240719318389893 0.0200000000000031 0.0200000000000031 0.0 674
+675 0.0269160270690918 0.029999999999994 0.029999999999994 0.0 675
+676 0.0230348110198975 0.0200000000000031 0.0200000000000031 0.0 676
+677 0.0227870941162109 0.0300000000000011 0.0300000000000011 0.0 677
+678 0.0228049755096436 0.019999999999996 0.019999999999996 0.0 678
+679 0.0226888656616211 0.0200000000000031 0.0200000000000031 0.0 679
+680 0.0477821826934814 0.0499999999999972 0.0499999999999972 0.0 680
+681 0.0232739448547363 0.0200000000000031 0.0200000000000031 0.0 681
+682 0.023953914642334 0.0300000000000011 0.0300000000000011 0.0 682
+683 0.0229859352111816 0.019999999999996 0.019999999999996 0.0 683
+684 0.0254220962524414 0.0200000000000031 0.0200000000000031 0.0 684
+685 0.0239348411560059 0.0300000000000011 0.0300000000000011 0.0 685
+686 0.0478279590606689 0.0499999999999972 0.0499999999999972 0.0 686
+687 0.023798942565918 0.0200000000000031 0.0200000000000031 0.0 687
+688 0.0233008861541748 0.019999999999996 0.019999999999996 0.0 688
+689 0.0240800380706787 0.0300000000000011 0.0300000000000011 0.0 689
+690 0.0304360389709473 0.0300000000000011 0.0300000000000011 0.0 690
+691 0.022982120513916 0.019999999999996 0.019999999999996 0.0 691
+692 0.0228438377380371 0.0200000000000031 0.0200000000000031 0.0 692
+693 0.0521981716156006 0.0600000000000023 0.0600000000000023 0.0 693
+694 0.0234532356262207 0.019999999999996 0.019999999999996 0.0 694
+695 0.0232119560241699 0.0200000000000031 0.0200000000000031 0.0 695
+696 0.0229840278625488 0.0300000000000011 0.0300000000000011 0.0 696
+697 0.0229799747467041 0.019999999999996 0.019999999999996 0.0 697
+698 0.0229427814483643 0.0200000000000031 0.0200000000000031 0.0 698
+699 0.0228908061981201 0.0300000000000011 0.0300000000000011 0.0 699
+700 0.0482070446014404 0.0399999999999991 0.0399999999999991 0.0 700
+701 0.023360013961792 0.0300000000000011 0.0300000000000011 0.0 701
+702 0.027055025100708 0.019999999999996 0.019999999999996 0.0 702
+703 0.0230090618133545 0.0300000000000011 0.0300000000000011 0.0 703
+704 0.02317214012146 0.019999999999996 0.019999999999996 0.0 704
+705 0.022986888885498 0.0200000000000031 0.0200000000000031 0.0 705
+706 0.0481140613555908 0.0499999999999972 0.0499999999999972 0.0 706
+707 0.0237739086151123 0.0300000000000011 0.0300000000000011 0.0 707
+708 0.0233809947967529 0.0200000000000031 0.0200000000000031 0.0 708
+709 0.0233211517333984 0.019999999999996 0.019999999999996 0.0 709
+710 0.0229690074920654 0.0300000000000011 0.0300000000000011 0.0 710
+711 0.0244121551513672 0.0200000000000031 0.0200000000000031 0.0 711
+712 0.0250389575958252 0.019999999999996 0.019999999999996 0.0 712
+713 0.0485482215881348 0.0399999999999991 0.0399999999999991 0.0 713
+714 0.0234758853912354 0.0300000000000011 0.0300000000000011 0.0 714
+715 0.023453950881958 0.019999999999996 0.019999999999996 0.0 715
+716 0.0230729579925537 0.0200000000000031 0.0200000000000031 0.0 716
+717 0.0230581760406494 0.0300000000000011 0.0300000000000011 0.0 717
+718 0.0230929851531982 0.019999999999996 0.019999999999996 0.0 718
+719 0.0229818820953369 0.0200000000000031 0.0200000000000031 0.0 719
+720 0.0512728691101074 0.0499999999999972 0.0499999999999972 0.0 720
+721 0.0234599113464355 0.0300000000000011 0.0300000000000011 0.0 721
+722 0.023129940032959 0.019999999999996 0.019999999999996 0.0 722
+723 0.0229649543762207 0.0200000000000031 0.0200000000000031 0.0 723
+724 0.0230588912963867 0.0300000000000011 0.0300000000000011 0.0 724
+725 0.0236339569091797 0.019999999999996 0.019999999999996 0.0 725
+726 0.0562300682067871 0.0600000000000023 0.0600000000000023 0.0 726
+727 0.0310180187225342 0.0300000000000011 0.0300000000000011 0.0 727
+728 0.0244710445404053 0.0200000000000031 0.0200000000000031 0.0 728
+729 0.0285270214080811 0.029999999999994 0.029999999999994 0.0 729
+730 0.0235979557037354 0.0300000000000011 0.0300000000000011 0.0 730
+731 0.0233108997344971 0.0200000000000031 0.0200000000000031 0.0 731
+732 0.0233650207519531 0.019999999999996 0.019999999999996 0.0 732
+733 0.0499210357666016 0.0500000000000043 0.0500000000000043 0.0 733
+734 0.0240199565887451 0.0300000000000011 0.0300000000000011 0.0 734
+735 0.0234189033508301 0.019999999999996 0.019999999999996 0.0 735
+736 0.0239479541778564 0.0200000000000031 0.0200000000000031 0.0 736
+737 0.0234498977661133 0.0300000000000011 0.0300000000000011 0.0 737
+738 0.027393102645874 0.019999999999996 0.019999999999996 0.0 738
+739 0.0233581066131592 0.0300000000000011 0.0300000000000011 0.0 739
+740 0.0494859218597412 0.0499999999999972 0.0499999999999972 0.0 740
+741 0.023939847946167 0.0200000000000031 0.0200000000000031 0.0 741
+742 0.0237078666687012 0.0300000000000011 0.0300000000000011 0.0 742
+743 0.023622989654541 0.019999999999996 0.019999999999996 0.0 743
+744 0.0235440731048584 0.0200000000000031 0.0200000000000031 0.0 744
+745 0.0236668586730957 0.0300000000000011 0.0300000000000011 0.0 745
+746 0.0538251399993896 0.0499999999999972 0.0499999999999972 0.0 746
+747 0.0246829986572266 0.0300000000000011 0.0300000000000011 0.0 747
+748 0.0239181518554688 0.019999999999996 0.019999999999996 0.0 748
+749 0.02370285987854 0.0200000000000031 0.0200000000000031 0.0 749
+750 0.0234520435333252 0.0300000000000011 0.0300000000000011 0.0 750
+751 0.0234749317169189 0.019999999999996 0.019999999999996 0.0 751
+752 0.0232760906219482 0.0200000000000031 0.0200000000000031 0.0 752
+753 0.050915002822876 0.0499999999999972 0.0499999999999972 0.0 753
+754 0.0237371921539307 0.0300000000000011 0.0300000000000011 0.0 754
+755 0.0239219665527344 0.0200000000000031 0.0200000000000031 0.0 755
+756 0.0273880958557129 0.0300000000000011 0.0300000000000011 0.0 756
+757 0.0232698917388916 0.019999999999996 0.019999999999996 0.0 757
+758 0.0235319137573242 0.0300000000000011 0.0300000000000011 0.0 758
+759 0.0232620239257812 0.0200000000000031 0.0200000000000031 0.0 759
+760 0.0498092174530029 0.0499999999999972 0.0499999999999972 0.0 760
+761 0.0315971374511719 0.0300000000000011 0.0300000000000011 0.0 761
+762 0.0236649513244629 0.019999999999996 0.019999999999996 0.0 762
+763 0.0233211517333984 0.0300000000000011 0.0300000000000011 0.0 763
+764 0.0230920314788818 0.0200000000000031 0.0200000000000031 0.0 764
+765 0.0270240306854248 0.0300000000000011 0.0300000000000011 0.0 765
+766 0.0479528903961182 0.0499999999999972 0.0499999999999972 0.0 766
+767 0.025413990020752 0.0200000000000031 0.0200000000000031 0.0 767
+768 0.0233969688415527 0.019999999999996 0.019999999999996 0.0 768
+769 0.0232100486755371 0.0300000000000011 0.0300000000000011 0.0 769
+770 0.0230209827423096 0.0200000000000031 0.0200000000000031 0.0 770
+771 0.0228300094604492 0.019999999999996 0.019999999999996 0.0 771
+772 0.0236411094665527 0.0300000000000011 0.0300000000000011 0.0 772
+773 0.0529980659484863 0.0499999999999972 0.0499999999999972 0.0 773
+774 0.0234870910644531 0.0200000000000031 0.0200000000000031 0.0 774
+775 0.0233190059661865 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.0230171680450439 0.019999999999996 0.019999999999996 0.0 776
+777 0.0230998992919922 0.0200000000000031 0.0200000000000031 0.0 777
+778 0.0230000019073486 0.0300000000000011 0.0300000000000011 0.0 778
+779 0.0227389335632324 0.019999999999996 0.019999999999996 0.0 779
+780 0.0475330352783203 0.0500000000000043 0.0500000000000043 0.0 780
+781 0.0235450267791748 0.019999999999996 0.019999999999996 0.0 781
+782 0.024838924407959 0.0200000000000031 0.0200000000000031 0.0 782
+783 0.0251529216766357 0.0300000000000011 0.0300000000000011 0.0 783
+784 0.0230610370635986 0.019999999999996 0.019999999999996 0.0 784
+785 0.0230369567871094 0.0300000000000011 0.0300000000000011 0.0 785
+786 0.0483219623565674 0.0399999999999991 0.0399999999999991 0.0 786
+787 0.023716926574707 0.0300000000000011 0.0300000000000011 0.0 787
+788 0.0233070850372314 0.0200000000000031 0.0200000000000031 0.0 788
+789 0.0230929851531982 0.019999999999996 0.019999999999996 0.0 789
+790 0.0231740474700928 0.0300000000000011 0.0300000000000011 0.0 790
+791 0.0228431224822998 0.0200000000000031 0.0200000000000031 0.0 791
+792 0.0254631042480469 0.029999999999994 0.029999999999994 0.0 792
+793 0.0485448837280273 0.0399999999999991 0.0399999999999991 0.0 793
+794 0.0234110355377197 0.0300000000000011 0.0300000000000011 0.0 794
+795 0.023223876953125 0.0200000000000031 0.0200000000000031 0.0 795
+796 0.0238728523254395 0.0300000000000011 0.0300000000000011 0.0 796
+797 0.0251760482788086 0.019999999999996 0.019999999999996 0.0 797
+798 0.0276870727539062 0.0300000000000011 0.0300000000000011 0.0 798
+799 0.0227670669555664 0.0200000000000031 0.0200000000000031 0.0 799
+800 0.0514481067657471 0.0499999999999972 0.0499999999999972 0.0 800
+801 0.023374080657959 0.0300000000000011 0.0300000000000011 0.0 801
+802 0.0230941772460938 0.019999999999996 0.019999999999996 0.0 802
+803 0.0230350494384766 0.0200000000000031 0.0200000000000031 0.0 803
+804 0.0229940414428711 0.0300000000000011 0.0300000000000011 0.0 804
+805 0.0229909420013428 0.019999999999996 0.019999999999996 0.0 805
+806 0.0481908321380615 0.0500000000000043 0.0500000000000043 0.0 806
+807 0.0239169597625732 0.019999999999996 0.019999999999996 0.0 807
+808 0.0238561630249023 0.0200000000000031 0.0200000000000031 0.0 808
+809 0.0231790542602539 0.0300000000000011 0.0300000000000011 0.0 809
+810 0.0275747776031494 0.0300000000000011 0.0300000000000011 0.0 810
+811 0.0230591297149658 0.019999999999996 0.019999999999996 0.0 811
+812 0.0231878757476807 0.0200000000000031 0.0200000000000031 0.0 812
+813 0.048914909362793 0.0499999999999972 0.0499999999999972 0.0 813
+814 0.0234620571136475 0.0200000000000031 0.0200000000000031 0.0 814
+815 0.0232930183410645 0.0300000000000011 0.0300000000000011 0.0 815
+816 0.022986888885498 0.019999999999996 0.019999999999996 0.0 816
+817 0.0229377746582031 0.0200000000000031 0.0200000000000031 0.0 817
+818 0.0235490798950195 0.0300000000000011 0.0300000000000011 0.0 818
+819 0.0506079196929932 0.0499999999999972 0.0499999999999972 0.0 819
+820 0.023629903793335 0.019999999999996 0.019999999999996 0.0 820
+821 0.0234060287475586 0.0300000000000011 0.0300000000000011 0.0 821
+822 0.0231649875640869 0.0200000000000031 0.0200000000000031 0.0 822
+823 0.0232610702514648 0.019999999999996 0.019999999999996 0.0 823
+824 0.0246009826660156 0.0300000000000011 0.0300000000000011 0.0 824
+825 0.0229051113128662 0.0200000000000031 0.0200000000000031 0.0 825
+826 0.0487561225891113 0.0499999999999972 0.0499999999999972 0.0 826
+827 0.0235860347747803 0.0200000000000031 0.0200000000000031 0.0 827
+828 0.0275599956512451 0.0300000000000011 0.0300000000000011 0.0 828
+829 0.0231928825378418 0.019999999999996 0.019999999999996 0.0 829
+830 0.0227789878845215 0.0200000000000031 0.0200000000000031 0.0 830
+831 0.022838830947876 0.0300000000000011 0.0300000000000011 0.0 831
+832 0.0226640701293945 0.019999999999996 0.019999999999996 0.0 832
+833 0.0558691024780273 0.0600000000000023 0.0600000000000023 0.0 833
+834 0.0235500335693359 0.019999999999996 0.019999999999996 0.0 834
+835 0.0233221054077148 0.0200000000000031 0.0200000000000031 0.0 835
+836 0.0230560302734375 0.0300000000000011 0.0300000000000011 0.0 836
+837 0.026296854019165 0.019999999999996 0.019999999999996 0.0 837
+838 0.0231189727783203 0.0200000000000031 0.0200000000000031 0.0 838
+839 0.0479569435119629 0.0399999999999991 0.0399999999999991 0.0 839
+840 0.0236861705780029 0.0300000000000011 0.0300000000000011 0.0 840
+841 0.0233621597290039 0.0200000000000031 0.0200000000000031 0.0 841
+842 0.0233719348907471 0.019999999999996 0.019999999999996 0.0 842
+843 0.022942066192627 0.0300000000000011 0.0300000000000011 0.0 843
+844 0.0234341621398926 0.0200000000000031 0.0200000000000031 0.0 844
+845 0.0227351188659668 0.019999999999996 0.019999999999996 0.0 845
+846 0.0519671440124512 0.0500000000000043 0.0500000000000043 0.0 846
+847 0.0236749649047852 0.029999999999994 0.029999999999994 0.0 847
+848 0.0233500003814697 0.0200000000000031 0.0200000000000031 0.0 848
+849 0.0230710506439209 0.0300000000000011 0.0300000000000011 0.0 849
+850 0.0229990482330322 0.019999999999996 0.019999999999996 0.0 850
+851 0.0230109691619873 0.0200000000000031 0.0200000000000031 0.0 851
+852 0.0227420330047607 0.0200000000000031 0.0200000000000031 0.0 852
+853 0.0477049350738525 0.0499999999999972 0.0499999999999972 0.0 853
+854 0.0240600109100342 0.0300000000000011 0.0300000000000011 0.0 854
+855 0.026954174041748 0.019999999999996 0.019999999999996 0.0 855
+856 0.0229690074920654 0.0300000000000011 0.0300000000000011 0.0 856
+857 0.0230190753936768 0.0200000000000031 0.0200000000000031 0.0 857
+858 0.0229530334472656 0.019999999999996 0.019999999999996 0.0 858
+859 0.0483298301696777 0.0500000000000043 0.0500000000000043 0.0 859
+860 0.0237421989440918 0.019999999999996 0.019999999999996 0.0 860
+861 0.0233712196350098 0.0300000000000011 0.0300000000000011 0.0 861
+862 0.0233938694000244 0.0200000000000031 0.0200000000000031 0.0 862
+863 0.0228838920593262 0.019999999999996 0.019999999999996 0.0 863
+864 0.0237820148468018 0.0300000000000011 0.0300000000000011 0.0 864
+865 0.0258240699768066 0.0200000000000031 0.0200000000000031 0.0 865
+866 0.0487151145935059 0.0499999999999972 0.0499999999999972 0.0 866
+867 0.023514986038208 0.0300000000000011 0.0300000000000011 0.0 867
+868 0.023252010345459 0.019999999999996 0.019999999999996 0.0 868
+869 0.0243101119995117 0.0200000000000031 0.0200000000000031 0.0 869
+870 0.0295658111572266 0.0300000000000011 0.0300000000000011 0.0 870
+871 0.0230669975280762 0.0300000000000011 0.0300000000000011 0.0 871
+872 0.0470709800720215 0.0399999999999991 0.0399999999999991 0.0 872
+873 0.0276908874511719 0.0300000000000011 0.0300000000000011 0.0 873
+874 0.0235562324523926 0.029999999999994 0.029999999999994 0.0 874
+875 0.0232779979705811 0.0200000000000031 0.0200000000000031 0.0 875
+876 0.0230128765106201 0.0200000000000031 0.0200000000000031 0.0 876
+877 0.0227088928222656 0.019999999999996 0.019999999999996 0.0 877
+878 0.0227501392364502 0.0300000000000011 0.0300000000000011 0.0 878
+879 0.048612117767334 0.0499999999999972 0.0499999999999972 0.0 879
+880 0.0247840881347656 0.0200000000000031 0.0200000000000031 0.0 880
+881 0.0233609676361084 0.0200000000000031 0.0200000000000031 0.0 881
+882 0.0263519287109375 0.029999999999994 0.029999999999994 0.0 882
+883 0.0231118202209473 0.0200000000000031 0.0200000000000031 0.0 883
+884 0.0230841636657715 0.0300000000000011 0.0300000000000011 0.0 884
+885 0.022723913192749 0.019999999999996 0.019999999999996 0.0 885
+886 0.0473191738128662 0.0500000000000043 0.0500000000000043 0.0 886
+887 0.0233719348907471 0.019999999999996 0.019999999999996 0.0 887
+888 0.0231339931488037 0.0200000000000031 0.0200000000000031 0.0 888
+889 0.0230438709259033 0.0300000000000011 0.0300000000000011 0.0 889
+890 0.0230700969696045 0.019999999999996 0.019999999999996 0.0 890
+891 0.0235311985015869 0.0200000000000031 0.0200000000000031 0.0 891
+892 0.0513098239898682 0.0499999999999972 0.0499999999999972 0.0 892
+893 0.0237538814544678 0.0300000000000011 0.0300000000000011 0.0 893
+894 0.0234150886535645 0.0200000000000031 0.0200000000000031 0.0 894
+895 0.0234220027923584 0.029999999999994 0.029999999999994 0.0 895
+896 0.0229578018188477 0.0200000000000031 0.0200000000000031 0.0 896
+897 0.0227642059326172 0.0200000000000031 0.0200000000000031 0.0 897
+898 0.0227861404418945 0.019999999999996 0.019999999999996 0.0 898
+899 0.0495121479034424 0.0500000000000043 0.0500000000000043 0.0 899
+900 0.0261099338531494 0.029999999999994 0.029999999999994 0.0 900
+901 0.0232861042022705 0.0200000000000031 0.0200000000000031 0.0 901
+902 0.0230598449707031 0.0300000000000011 0.0300000000000011 0.0 902
+903 0.0229661464691162 0.019999999999996 0.019999999999996 0.0 903
+904 0.0229828357696533 0.0200000000000031 0.0200000000000031 0.0 904
+905 0.0227420330047607 0.0300000000000011 0.0300000000000011 0.0 905
+906 0.0554108619689941 0.0499999999999972 0.0499999999999972 0.0 906
+907 0.0234618186950684 0.0200000000000031 0.0200000000000031 0.0 907
+908 0.023097038269043 0.0300000000000011 0.0300000000000011 0.0 908
+909 0.0240907669067383 0.019999999999996 0.019999999999996 0.0 909
+910 0.0250539779663086 0.0300000000000011 0.0300000000000011 0.0 910
+911 0.0229489803314209 0.019999999999996 0.019999999999996 0.0 911
+912 0.0479700565338135 0.0500000000000043 0.0500000000000043 0.0 912
+913 0.023643970489502 0.019999999999996 0.019999999999996 0.0 913
+914 0.0235710144042969 0.0200000000000031 0.0200000000000031 0.0 914
+915 0.0231690406799316 0.0300000000000011 0.0300000000000011 0.0 915
+916 0.0229480266571045 0.019999999999996 0.019999999999996 0.0 916
+917 0.0235409736633301 0.0200000000000031 0.0200000000000031 0.0 917
+918 0.0229229927062988 0.0300000000000011 0.0300000000000011 0.0 918
+919 0.0514621734619141 0.0499999999999972 0.0499999999999972 0.0 919
+920 0.023529052734375 0.0200000000000031 0.0200000000000031 0.0 920
+921 0.0231509208679199 0.0300000000000011 0.0300000000000011 0.0 921
+922 0.0229501724243164 0.019999999999996 0.019999999999996 0.0 922
+923 0.0228419303894043 0.0200000000000031 0.0200000000000031 0.0 923
+924 0.0227689743041992 0.019999999999996 0.019999999999996 0.0 924
+925 0.047015905380249 0.0500000000000043 0.0500000000000043 0.0 925
+926 0.0242269039154053 0.0300000000000011 0.0300000000000011 0.0 926
+927 0.0240240097045898 0.019999999999996 0.019999999999996 0.0 927
+928 0.0257468223571777 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.0229909420013428 0.019999999999996 0.019999999999996 0.0 929
+930 0.0228919982910156 0.0200000000000031 0.0200000000000031 0.0 930
+931 0.0228021144866943 0.0200000000000031 0.0200000000000031 0.0 931
+932 0.0487589836120605 0.0499999999999972 0.0499999999999972 0.0 932
+933 0.023705005645752 0.0300000000000011 0.0300000000000011 0.0 933
+934 0.0232529640197754 0.019999999999996 0.019999999999996 0.0 934
+935 0.0233039855957031 0.0200000000000031 0.0200000000000031 0.0 935
+936 0.0228619575500488 0.0300000000000011 0.0300000000000011 0.0 936
+937 0.0260879993438721 0.019999999999996 0.019999999999996 0.0 937
+938 0.022723913192749 0.0300000000000011 0.0300000000000011 0.0 938
+939 0.0474221706390381 0.0399999999999991 0.0399999999999991 0.0 939
+940 0.0233960151672363 0.0300000000000011 0.0300000000000011 0.0 940
+941 0.0239980220794678 0.0200000000000031 0.0200000000000031 0.0 941
+942 0.0292730331420898 0.0300000000000011 0.0300000000000011 0.0 942
+943 0.0237081050872803 0.019999999999996 0.019999999999996 0.0 943
+944 0.0230300426483154 0.0300000000000011 0.0300000000000011 0.0 944
+945 0.050105094909668 0.0499999999999972 0.0499999999999972 0.0 945
+946 0.0247271060943604 0.0200000000000031 0.0200000000000031 0.0 946
+947 0.0233941078186035 0.019999999999996 0.019999999999996 0.0 947
+948 0.0232498645782471 0.0300000000000011 0.0300000000000011 0.0 948
+949 0.0229218006134033 0.0200000000000031 0.0200000000000031 0.0 949
+950 0.0228300094604492 0.019999999999996 0.019999999999996 0.0 950
+951 0.023029088973999 0.0300000000000011 0.0300000000000011 0.0 951
+952 0.0492429733276367 0.0500000000000043 0.0500000000000043 0.0 952
+953 0.0234079360961914 0.019999999999996 0.019999999999996 0.0 953
+954 0.0232601165771484 0.0200000000000031 0.0200000000000031 0.0 954
+955 0.026918888092041 0.0300000000000011 0.0300000000000011 0.0 955
+956 0.0231409072875977 0.019999999999996 0.019999999999996 0.0 956
+957 0.0228209495544434 0.0300000000000011 0.0300000000000011 0.0 957
+958 0.0463271141052246 0.0399999999999991 0.0399999999999991 0.0 958
+959 0.0237219333648682 0.0300000000000011 0.0300000000000011 0.0 959
+960 0.0233180522918701 0.0200000000000031 0.0200000000000031 0.0 960
+961 0.0231690406799316 0.019999999999996 0.019999999999996 0.0 961
+962 0.0229840278625488 0.0300000000000011 0.0300000000000011 0.0 962
+963 0.0235729217529297 0.0200000000000031 0.0200000000000031 0.0 963
+964 0.0238869190216064 0.019999999999996 0.019999999999996 0.0 964
+965 0.0521998405456543 0.0600000000000023 0.0600000000000023 0.0 965
+966 0.0235168933868408 0.019999999999996 0.019999999999996 0.0 966
+967 0.0235238075256348 0.0200000000000031 0.0200000000000031 0.0 967
+968 0.0230309963226318 0.0300000000000011 0.0300000000000011 0.0 968
+969 0.0229330062866211 0.019999999999996 0.019999999999996 0.0 969
+970 0.0227758884429932 0.0200000000000031 0.0200000000000031 0.0 970
+971 0.0229518413543701 0.019999999999996 0.019999999999996 0.0 971
+972 0.0476210117340088 0.0500000000000043 0.0500000000000043 0.0 972
+973 0.0264060497283936 0.0300000000000011 0.0300000000000011 0.0 973
+974 0.023115873336792 0.019999999999996 0.019999999999996 0.0 974
+975 0.0229768753051758 0.0300000000000011 0.0300000000000011 0.0 975
+976 0.0229260921478271 0.0200000000000031 0.0200000000000031 0.0 976
+977 0.0229401588439941 0.019999999999996 0.019999999999996 0.0 977
+978 0.0558409690856934 0.0600000000000023 0.0600000000000023 0.0 978
+979 0.0236589908599854 0.019999999999996 0.019999999999996 0.0 979
+980 0.0233588218688965 0.0200000000000031 0.0200000000000031 0.0 980
+981 0.0231630802154541 0.0300000000000011 0.0300000000000011 0.0 981
+982 0.0260651111602783 0.019999999999996 0.019999999999996 0.0 982
+983 0.0229349136352539 0.0300000000000011 0.0300000000000011 0.0 983
+984 0.0229189395904541 0.0200000000000031 0.0200000000000031 0.0 984
+985 0.0485391616821289 0.0499999999999972 0.0499999999999972 0.0 985
+986 0.0233860015869141 0.0200000000000031 0.0200000000000031 0.0 986
+987 0.0233519077301025 0.0300000000000011 0.0300000000000011 0.0 987
+988 0.0228800773620605 0.019999999999996 0.019999999999996 0.0 988
+989 0.0234830379486084 0.0200000000000031 0.0200000000000031 0.0 989
+990 0.022752046585083 0.019999999999996 0.019999999999996 0.0 990
+991 0.0511069297790527 0.0600000000000023 0.0600000000000023 0.0 991
+992 0.0240139961242676 0.019999999999996 0.019999999999996 0.0 992
+993 0.0233669281005859 0.0200000000000031 0.0200000000000031 0.0 993
+994 0.0232489109039307 0.0300000000000011 0.0300000000000011 0.0 994
+995 0.0230247974395752 0.019999999999996 0.019999999999996 0.0 995
+996 0.023061990737915 0.0200000000000031 0.0200000000000031 0.0 996
+997 0.0229039192199707 0.0300000000000011 0.0300000000000011 0.0 997
+998 0.0489161014556885 0.0399999999999991 0.0399999999999991 0.0 998
+999 0.0239861011505127 0.0300000000000011 0.0300000000000011 0.0 999
+1000 0.0271100997924805 0.0300000000000011 0.0300000000000011 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat
new file mode 100644
index 0000000..28b7930
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.168711551610797
+3 -0.185075424775395
+4 -0.186405168470362
+5 -0.192236450287278
+6 -0.173995040669983
+7 0.497673430722803
+8 0.29654339644635
+9 -0.172542664486347
+10 -0.185316639646188
+11 -0.182116040823686
+12 -0.185415710620437
+13 0.0523528472158225
+14 0.71970177208368
+15 -0.151810164721185
+16 -0.187290279760093
+17 -0.182362754850871
+18 -0.182718737242755
+19 -0.129108594864474
+20 0.622082118720718
+21 0.130782387755957
+22 -0.170447345640965
+23 -0.196652105821247
+24 -0.173569338036787
+25 -0.182188355492763
+26 0.265071206382968
+27 0.484886522656777
+28 -0.140444543213911
+29 -0.174312335218403
+30 -0.183335022511814
+31 -0.179674296765045
+32 0.0232199842046602
+33 0.496114733715927
+34 0.0822638752997461
+35 -0.171572446908724
+36 -0.192551986206074
+37 -0.162051421499677
+38 -0.0895919384941433
+39 0.335786620502553
+40 0.327644243263212
+41 -0.129948612855453
+42 -0.184370502365683
+43 -0.177204007654948
+44 -0.162157037082618
+45 0.17271845923701
+46 0.351796103861273
+47 0.0642274162111852
+48 -0.170959443773073
+49 -0.190856323754992
+50 -0.163714827336534
+51 0.0228314931445091
+52 0.26381977073053
+53 0.247803374234943
+54 -0.117037193906021
+55 -0.183830227189461
+56 -0.164640226854526
+57 -0.079276117022691
+58 0.20723348437059
+59 0.239706931399691
+60 0.0489172113214087
+61 -0.172021951272623
+62 -0.182860808512729
+63 -0.127358224108573
+64 0.107845579472678
+65 0.188933656016848
+66 0.194757142044723
+67 -0.112205833758773
+68 -0.179001063269936
+69 -0.16311828493705
+70 0.0324344108778214
+71 0.15051955620332
+72 0.163810160363991
+73 0.0519448596312306
+74 -0.163602345245488
+75 -0.158418891887294
+76 -0.0560272711908581
+77 0.13272666880305
+78 0.128776651967307
+79 0.137508369826638
+80 -0.106468759380143
+81 -0.175112389279141
+82 -0.110600151424024
+83 0.0829713181187441
+84 0.116400027198787
+85 0.108590070864495
+86 0.0380032448395754
+87 -0.15928371193835
+88 -0.16128905172696
+89 0.0331094309593576
+90 0.0781776964153065
+91 0.102945304233414
+92 0.10106965637548
+93 -0.0872290949923226
+94 -0.169705593008044
+95 -0.0419012011984929
+96 0.0915477326766184
+97 0.0704199456915236
+98 0.0728740009744583
+99 0.0218543030675779
+100 -0.151415427637779
+101 -0.0978287647318857
+102 0.0561931235819149
+103 0.0505423398983019
+104 0.0727678785780604
+105 0.0722492445655898
+106 -0.0862525883888437
+107 -0.137087142443964
+108 0.00615618677612293
+109 0.05394162080397
+110 0.0553896795215559
+111 0.055562843944084
+112 0.0276994577739776
+113 -0.137189947176271
+114 -0.0377239416628224
+115 0.0514504295405741
+116 0.0313293831130493
+117 0.0301709278444951
+118 0.0568085567458709
+119 -0.0804133515562644
+120 -0.0795840579043476
+121 0.0330117984081293
+122 0.0164579873951377
+123 0.0433446545769141
+124 0.0255953757755855
+125 0.00173682042832781
+126 -0.103165860768009
+127 0.00232696284173702
+128 0.0312423522135313
+129 0.0149616490484137
+130 0.0184417493516088
+131 0.0447441958949695
+132 -0.0641393958061555
+133 -0.0383352332350825
+134 0.0245347192219029
+135 0.00652236926605711
+136 0.0171622535457413
+137 0.009279213035149
+138 0.00278884493235273
+139 -0.0536703342115355
+140 0.0241669190880944
+141 -0.00326726756980508
+142 0.0162345932059117
+143 -0.0128230828071517
+144 0.0286239253928854
+145 -0.0327123591597955
+146 -0.00540598964166124
+147 -0.000332512936572612
+148 0.0148948411721159
+149 0.0166966907990605
+150 -0.00567074642628022
+151 0.0228823388615856
+152 -0.0308965208330592
+153 0.0180444981742879
+154 -0.0206921039064052
+155 0.00595894351847688
+156 -0.0208220594875718
+157 0.0310092938713835
+158 0.00078836634941453
+159 0.0106191475130608
+160 -0.0238938431356785
+161 -0.00188312143245682
+162 -0.0172204115325742
+163 -0.0112282005708165
+164 0.045034914010554
+165 0.00699215558040877
+166 -0.00331533192179088
+167 -0.0190245860603562
+168 -0.00800260302384398
+169 -0.0268417229599795
+170 0.0337926174874967
+171 0.0299901254990817
+172 0.00546001840883143
+173 -0.0331114785270307
+174 -0.0100509196512551
+175 -0.0360797776791535
+176 0.00148731167321117
+177 0.0706998590798648
+178 0.0165067725132839
+179 -0.0253495351545265
+180 -0.0357212534091994
+181 -0.0113101599791917
+182 -0.0363761390533369
+183 0.0469745163800697
+184 0.0610771540099002
+185 0.00552862518083574
+186 -0.0369332414763318
+187 -0.0111795223609534
+188 -0.0432626099842255
+189 0.00749428956560664
+190 0.087771964947633
+191 0.00185581109295404
+192 -0.0313699827844243
+193 -0.0255394152605449
+194 -0.0313242476969615
+195 -0.0215433414073359
+196 0.0618252922061284
+197 0.0646027183854095
+198 -0.0273965032147501
+199 -0.0496517862033294
+200 -0.018433346375674
+201 -0.0411702579107107
+202 0.0253673387035334
+203 0.104691703014017
+204 -0.00185448989075414
+205 -0.0446682471573042
+206 -0.0238238321649752
+207 -0.0467619043304021
+208 -0.00360887459827125
+209 0.0793757654561071
+210 0.0429129421022387
+211 -0.0276583402343142
+212 -0.0541678923378372
+213 -0.0179592917752469
+214 -0.0355547481831798
+215 0.0461320988573292
+216 0.0913448308641226
+217 -0.01834847095298
+218 -0.0468350861575364
+219 -0.0339767892231334
+220 -0.0440298850183693
+221 0.0223578500867496
+222 0.0933434497060592
+223 0.0463337814726783
+224 -0.0425574347432942
+225 -0.0466890286886253
+226 -0.0399961538339586
+227 -0.0182587945265267
+228 0.0632222098042003
+229 0.0694906023247877
+230 -0.0142049617016301
+231 -0.0455291466080565
+232 -0.0361070791379545
+233 -0.0452564134883136
+234 0.0510580833723044
+235 0.0480780453494914
+236 0.0446139327527731
+237 -0.0522801405363582
+238 -0.0378004800445766
+239 -0.0470589177024096
+240 0.0108569075440268
+241 0.066938577476477
+242 0.0581800021039197
+243 -0.0194507150560373
+244 -0.0543671997964238
+245 -0.0401308556434312
+246 -0.0256000479147573
+247 0.0620205622045612
+248 0.030523271212025
+249 0.038296942239191
+250 -0.0449036287763184
+251 -0.0420966487827338
+252 -0.0465461175034265
+253 0.0377597573585246
+254 0.0350560493012657
+255 0.056093186329707
+256 -0.0275815952046349
+257 -0.04750423935097
+258 -0.0432832585148503
+259 0.0125157284398116
+260 0.064931228957816
+261 0.019604040715554
+262 0.0373596111888757
+263 -0.0636676558497218
+264 -0.0375272240403982
+265 -0.0361149121701811
+266 0.0465388746567212
+267 0.036241311622391
+268 0.0487539350868976
+269 -0.0287234748216925
+270 -0.0539239644524711
+271 -0.0436583063696183
+272 0.0205146377795573
+273 0.040230997344665
+274 0.0315213860739265
+275 0.0228897348670507
+276 -0.0572183200160057
+277 -0.0431270221897599
+278 -0.00833297422506617
+279 0.0473219005528863
+280 0.0251629586411652
+281 0.038915273454895
+282 -0.0354353137808485
+283 -0.0508161370460544
+284 -0.036047127999377
+285 0.0337334539194076
+286 0.0275614274110637
+287 0.0440004318004696
+288 0.00961414206729694
+289 -0.0613316463073689
+290 -0.0452152575735171
+291 0.00249641925695087
+292 0.0493185930315809
+293 0.011444255885649
+294 0.0316360674883416
+295 -0.0319106139816597
+296 -0.0295989018040149
+297 -0.0190441524352952
+298 0.0282870892585827
+299 0.0265353254552707
+300 0.032273319444618
+301 -0.000468750771499013
+302 -0.0611876583947586
+303 -0.0309474581592694
+304 0.0186631754625234
+305 0.0371821091242854
+306 0.0145022818476083
+307 0.0232617470286048
+308 -0.0395688677229205
+309 -0.0476060515379838
+310 -0.00769044117333217
+311 0.0353693458390462
+312 0.0240002604802843
+313 0.0245536637430618
+314 -0.004415413915098
+315 -0.0528044137604404
+316 -0.0234265814208568
+317 0.022470064568286
+318 0.028915521370024
+319 0.0211638004156281
+320 0.0054168896988135
+321 -0.042590350753945
+322 -0.0284283118181943
+323 -0.00664062749496557
+324 0.0411480242046925
+325 0.0128417754264411
+326 0.0305223344547661
+327 -0.0236579754952802
+328 -0.0540845927671526
+329 -0.015455893522093
+330 0.025833520023463
+331 0.0278005598102001
+332 0.023042186646012
+333 0.0188728568852482
+334 -0.0493662121878053
+335 -0.0261050936436941
+336 0.0147707465979224
+337 0.0180860444200187
+338 0.0126826785496685
+339 0.0298891954148176
+340 -0.0284892193567594
+341 -0.0442930583208295
+342 -0.00465824613683129
+343 0.0264974198001827
+344 0.0160287131470608
+345 0.0245897525651692
+346 -0.00575496663872669
+347 -0.0478041333821144
+348 -0.0171938958596392
+349 0.0121633028274292
+350 0.0339339464445481
+351 -0.00053023814088501
+352 0.0326742285343647
+353 -0.0341060707006212
+354 -0.039748874098284
+355 -8.49024655445998e-06
+356 0.0279658431303204
+357 0.00720050291043204
+358 0.0259853074034904
+359 -0.00689945021869653
+360 -0.0564417535195406
+361 0.00615675252612387
+362 0.012211786338546
+363 0.0210382695674554
+364 0.00854911585033297
+365 0.00730196086776967
+366 -0.0376558839307909
+367 -0.0205399505507927
+368 0.00730027899569551
+369 0.032246213402309
+370 0.0091169179182096
+371 0.0250196684542896
+372 -0.0111591997251681
+373 -0.0422136335522998
+374 -0.0128579601772781
+375 0.028053399466731
+376 0.00354103697855516
+377 0.0279174938103032
+378 -0.00904722473650234
+379 -0.028946301515676
+380 -0.0139786293136349
+381 0.00545851365358498
+382 0.0190227282430585
+383 -0.000179476269715586
+384 0.0207231566698558
+385 -0.0170447136957343
+386 -0.0310486179199879
+387 0.00187196784210256
+388 0.0224041083616037
+389 9.55672559842024e-06
+390 0.028063228403911
+391 -0.00629505686670561
+392 -0.0353987330853413
+393 -0.0136692381584725
+394 0.0175671180486305
+395 0.0138013069088845
+396 -0.00620615793014542
+397 0.0246579116616293
+398 -0.0183401258366494
+399 -0.032731274379925
+400 0.0140881514888206
+401 0.00766293328904026
+402 -0.00602692518274087
+403 0.0260538721783923
+404 -0.00584187577452444
+405 -0.0272022140360092
+406 -0.00245620949388524
+407 0.0238765788649767
+408 0.00803221790371331
+409 0.00486019379696553
+410 0.0128952371994524
+411 -0.0296483100976332
+412 -0.0169390703239796
+413 0.0100660026536031
+414 0.0116526840405598
+415 -0.00552490658166841
+416 0.0277013713253159
+417 -0.01262493213524
+418 -0.0279080581956591
+419 -0.00184485071740047
+420 0.0083680688534008
+421 0.00626000399151215
+422 0.0179881429190266
+423 -0.00447721272724791
+424 -0.0184829817994694
+425 -0.0111404841683833
+426 0.0129221736981228
+427 0.0117611123486844
+428 -0.00973900750863823
+429 0.0225145858300765
+430 -0.0109220115294983
+431 -0.0295910058303649
+432 0.00368789876917004
+433 0.00930110386233805
+434 0.00564395086046309
+435 0.0212026111611703
+436 -0.0130378739710715
+437 -0.0151643278007831
+438 -0.0180440351274524
+439 0.0151595776800046
+440 0.00929213226473587
+441 0.0003415659091603
+442 0.0139565319476247
+443 -0.00910162712841926
+444 -0.0047413122985865
+445 -0.00499428051231756
+446 0.0128999469215125
+447 -0.00928272901740709
+448 0.0272064223470049
+449 -0.0183788344655416
+450 -0.0118496040154817
+451 -0.0107494202754318
+452 0.0182399903606553
+453 0.00622660737187097
+454 0.00745915020514592
+455 -0.00127190501056035
+456 -0.0166547143603286
+457 -0.0103667163700212
+458 0.00400520855528189
+459 0.0147115427131264
+460 -0.0160615357972689
+461 0.0246609774312651
+462 -0.0029333920472466
+463 -0.0181346871754782
+464 -0.00953567256874797
+465 0.021178583971421
+466 -0.012606366153552
+467 0.0272533088449177
+468 -0.0210280900703455
+469 -0.00280319780800235
+470 -0.0170463672712959
+471 0.0183373667562639
+472 0.0107583671313877
+473 -0.0078936794893897
+474 0.00778649649424241
+475 -0.0155345265869157
+476 -0.00613257574212038
+477 -0.00504286887531768
+478 0.0210772277332088
+479 -0.0128524940267954
+480 0.0341276652831629
+481 -0.0170650621790446
+482 -0.00345617548803839
+483 -0.0129517082898899
+484 0.0173373606064477
+485 -0.00523973359223807
+486 0.00844247199289556
+487 -0.000388501685715539
+488 -0.00941832803307521
+489 -0.00657732323629541
+490 0.00367271132008509
+491 0.0104986289066865
+492 -0.012121254212176
+493 0.0144869605589711
+494 -0.00864941651177608
+495 -0.01112718777137
+496 -0.00334819620816524
+497 0.0185220421918073
+498 -0.00800250333583432
+499 0.0161430412671399
+500 -0.00811904696073173
+501 -0.0131958246871404
+502 0.00283288244567032
+503 0.00400534218369864
+504 0.00517285959530552
+505 -0.0113016945649371
+506 0.0133257896160407
+507 -0.0100249708015443
+508 -0.00256099015771646
+509 0.000136766223360138
+510 0.00855194730142931
+511 -0.00531138706017324
+512 0.00204161899934194
+513 -0.00420598958751402
+514 -0.00547421378316814
+515 -0.00769199850530263
+516 0.0216892032285094
+517 0.00908736119849349
+518 -0.00700354150287694
+519 0.00385030902693081
+520 -0.0123494297246387
+521 0.000934704276073887
+522 0.00705709592844499
+523 -0.00114787001008378
+524 -0.00210811799844287
+525 0.00379518996660863
+526 -0.00476039992301502
+527 0.00251331815987456
+528 -0.00826728020183847
+529 0.00902402695322199
+530 0.000870562551920878
+531 -0.00348481579363119
+532 -0.00125547085943994
+533 -0.00457730270844353
+534 0.000670589363068931
+535 0.00203788465196431
+536 0.00608567369144255
+537 2.19715778381094e-05
+538 -0.0039030628395208
+539 0.00512758275114747
+540 -0.0144646664397469
+541 0.0094686570477374
+542 0.00274671581906305
+543 -0.00678173613063177
+544 -0.00229002671014199
+545 0.00592727900087354
+546 -0.00816015486873931
+547 0.00907388451433627
+548 0.0018377578149579
+549 -0.0127399753897002
+550 0.0103068975915084
+551 -0.0106787121790095
+552 0.00570246495524106
+553 -0.00038055365375568
+554 0.0105773030205816
+555 0.00595131841957403
+556 -0.00509875005695669
+557 -0.00822359585740647
+558 0.00452689845139232
+559 -0.00293270803490497
+560 0.00105079194795726
+561 0.0109353635798441
+562 -0.0197506449586046
+563 0.0218239959802497
+564 -0.0146510772378776
+565 -0.0031545366575823
+566 0.00360976923040136
+567 0.00133537648121434
+568 -0.00289782413008785
+569 0.00758892970442103
+570 -0.0141005351769624
+571 0.00987824122870196
+572 -0.00255558849302304
+573 0.000744149940492195
+574 0.0106602498970704
+575 -0.0142431009887286
+576 0.00996314897224239
+577 -0.0104990007985002
+578 0.00109353754269881
+579 -0.00275371958433224
+580 0.0113885636424959
+581 -0.0150512253599863
+582 0.022337619882076
+583 -0.0216778389670573
+584 0.00863828810448533
+585 -0.00918952923772199
+586 0.00354541072669278
+587 0.00186796377320277
+588 -0.00419542916327283
+589 0.00975603734830963
+590 -0.00452668353073013
+591 0.00310061328497863
+592 0.00522892318692988
+593 0.000452603861773268
+594 -0.00392697607921247
+595 0.00863249154941176
+596 -0.00832078201242865
+597 -0.00394497658086084
+598 -0.00605451952414724
+599 0.0162191796757364
+600 -0.0110909733185336
+601 0.00720572232121751
+602 0.00218507796543462
+603 -0.00965401693454912
+604 -0.0108892449738329
+605 0.0182573291106095
+606 -0.0101848710757151
+607 0.00753912620319138
+608 0.00552590397878413
+609 -0.00699240285933447
+610 -0.00592445874426432
+611 0.00181675318258215
+612 0.00596213285085161
+613 -0.00175858286015883
+614 0.00407450191848153
+615 -0.00135060667016455
+616 -0.0132703466359575
+617 0.00119500154487564
+618 0.0104207042421722
+619 -0.0101546955527216
+620 0.0151923635732439
+621 -0.00273197735893913
+622 -0.00716289238336821
+623 -0.0171181101464724
+624 0.0167209884450157
+625 -0.00638456270553197
+626 0.0115244846746483
+627 0.00412387285497462
+628 0.00522037750437085
+629 -0.0207335154052575
+630 0.0107397344182975
+631 0.000446658250956307
+632 -0.00502788594559083
+633 0.0186557262987464
+634 -0.00802823332161929
+635 -0.0113496131760766
+636 -0.00301246620601798
+637 0.00960017707242071
+638 -0.0101983443096708
+639 0.0185874661412788
+640 -0.00796700063418294
+641 0.000800373366255129
+642 -0.0142259171933031
+643 0.00675256815377976
+644 -0.00261054615159158
+645 0.00391449782418117
+646 0.0139874531474154
+647 0.00530840019489214
+648 -0.0271260591182079
+649 0.00229999324419244
+650 0.0012589433396212
+651 0.000592814947107167
+652 0.0201903818074188
+653 -0.0109069610093694
+654 0.000612907033154517
+655 -0.0168429348765485
+656 0.00867757131382127
+657 -0.00734945498589961
+658 0.0116794460570149
+659 0.00508627131689495
+660 0.00338584069635359
+661 -0.0248824043490218
+662 0.00165251679722703
+663 0.00150493225276704
+664 0.0136218056659362
+665 0.0185790451050334
+666 -0.00254472668221909
+667 -0.012289308557362
+668 -0.0144954370766794
+669 0.00122172858017179
+670 0.0025962904924925
+671 0.0163382999614507
+672 0.00111261978891954
+673 0.0032877612305335
+674 -0.0260369810192395
+675 0.00159666131197362
+676 -0.00532940173394529
+677 0.0172320321775677
+678 0.00869668235164475
+679 0.00291575973127735
+680 -0.015462218778181
+681 -0.0118608792720508
+682 -0.00220903962177873
+683 0.0120179152403506
+684 0.0136302482537954
+685 0.00904529400779457
+686 -0.00689602667015569
+687 -0.0285633522016709
+688 -0.00218285494634568
+689 0.00546702558234338
+690 0.0209141673516685
+691 0.00370465573465944
+692 0.00302297586155796
+693 -0.016485314433266
+694 -0.0140010121985048
+695 -0.00666402217308437
+696 0.0185309777178555
+697 0.00524546360988583
+698 0.0136885255750835
+699 -0.0104440356403008
+700 -0.0241256457948681
+701 -0.000785820295910417
+702 0.0158790422192167
+703 0.0148074455993449
+704 0.0148524900638902
+705 -0.0115456319714617
+706 -0.0170567215815039
+707 -0.0158838823574548
+708 0.00366739139639638
+709 0.0229702948653725
+710 0.00020925945941642
+711 0.016393506286626
+712 -0.0146752015343459
+713 -0.0266439752231523
+714 -0.0106049447476659
+715 0.0200857710496951
+716 0.0159019417251445
+717 0.014477526739592
+718 -0.0114112270538866
+719 -0.0170568864212781
+720 -0.0198060133943224
+721 0.0141195633193631
+722 0.0169697876976791
+723 0.0111601506150928
+724 0.000736029778776562
+725 -0.0138823704910304
+726 -0.0297759947577568
+727 0.000877318422704956
+728 0.0245870344818203
+729 0.00991534185785315
+730 0.0167371008710776
+731 -0.01846756355292
+732 -0.0143120279886695
+733 -0.0275565546549941
+734 0.0192359115781678
+735 0.0161720734394042
+736 0.0126768844333159
+737 0.00181190220867761
+738 -0.0108467971335452
+739 -0.0304794501225128
+740 0.00782220949913542
+741 0.0209517859747924
+742 0.0159210578956611
+743 0.00507627421897103
+744 -0.0185977878326676
+745 -0.0172160801840428
+746 -0.0154503291175863
+747 0.0240468087097962
+748 0.00881259580601295
+749 0.0159692498562702
+750 -0.00910054705411617
+751 -0.0182022490122094
+752 -0.0240881360450285
+753 0.0120777690684819
+754 0.018009925362029
+755 0.0180902063329173
+756 0.000256136047852365
+757 -0.013362593701584
+758 -0.0228122214255098
+759 -0.00694060235600491
+760 0.0215395702278941
+761 0.0146271311142691
+762 0.0042224855013385
+763 -0.00912079764567066
+764 -0.0192977028904618
+765 -0.0141955473974918
+766 0.0183439845354601
+767 0.00930105732395573
+768 0.0184551584403917
+769 -0.00463309866829429
+770 -0.0226061978674481
+771 -0.0126560635461022
+772 -0.00415731908001533
+773 0.0187754008269273
+774 0.0180023436241415
+775 0.00200677790387502
+776 -0.00390091363657905
+777 -0.0259097935663753
+778 -0.00352849460582893
+779 0.0114869717500844
+780 0.0181590467496427
+781 0.00541354714803118
+782 -0.00341446349188591
+783 -0.0224873784300854
+784 -0.00419373295829652
+785 0.00151844686046239
+786 0.0113650109976602
+787 0.0158002722634896
+788 -0.00669123138348563
+789 -0.00944030297158121
+790 -0.0128471454926811
+791 -0.00195425126313221
+792 0.0074970279200069
+793 0.0181288263041054
+794 0.00373580246921938
+795 -0.00738898492727174
+796 -0.0131007631291169
+797 -0.000982016348095141
+798 -0.0077218774351863
+799 0.0213289345403391
+800 0.00354948225668615
+801 -0.00464603451943496
+802 -0.0112940265794087
+803 -0.00402400060757488
+804 0.00328202388625696
+805 -0.00289756468799923
+806 0.0217143167615233
+807 -0.00723480130387542
+808 -0.0106385305584251
+809 -0.000880622168562012
+810 0.00236278291649433
+811 -0.0102116844250211
+812 0.0231430095296313
+813 0.000498636796683443
+814 -0.00822238911567211
+815 -0.000690473274202945
+816 -0.0041688749017029
+817 -0.00252158403219581
+818 0.00607821741975229
+819 0.00777977338604755
+820 -0.00207050788971321
+821 -0.0140240864712808
+822 0.00947155215423528
+823 -0.00138467437610252
+824 -0.00770142306481203
+825 0.0154602942265093
+826 -0.00445857492028323
+827 -0.0101772151931684
+828 0.0100179562755017
+829 -0.00101796933766295
+830 -0.0119434679802116
+831 0.0102774737624907
+832 0.00478068349303803
+833 -0.00664556216054719
+834 -0.00197743246531773
+835 0.00543784524388563
+836 -0.0052886241893568
+837 0.0026439850351734
+838 0.0030919842085538
+839 -0.00804500518577692
+840 -0.0010416922039517
+841 0.0108884645351451
+842 -0.00566073610826143
+843 -0.00188898403884589
+844 -0.000623624431978478
+845 0.00428626298895372
+846 -0.0114117004140406
+847 0.0070058534073635
+848 0.01316321553763
+849 -0.0134743452627623
+850 0.00646873802741608
+851 -0.000711439355883821
+852 -0.0120290310079327
+853 0.00776340536975608
+854 0.0121426740397341
+855 -0.0112997696592519
+856 0.00101867582065373
+857 -0.00437667036049063
+858 0.000320275817054275
+859 -0.000142126707409615
+860 0.00721775365468403
+861 0.00498981583349973
+862 -0.00501663994971829
+863 -0.00749187478362105
+864 -0.00349429603220739
+865 0.00096737598977786
+866 0.00699694065608912
+867 0.00691803448626803
+868 -0.000449901074230268
+869 -0.00445988048738086
+870 -0.00905628623058306
+871 -0.00235661129997502
+872 0.00676090763319871
+873 0.00895030192113989
+874 4.49454384220283e-05
+875 -0.00263532947240222
+876 -0.010297542142376
+877 -0.010415543599356
+878 0.0128496698052284
+879 0.00696638356949457
+880 0.00214959987087146
+881 0.00604766744508239
+882 -0.0149547634792813
+883 -0.0133886474253249
+884 0.00661648124666426
+885 0.010135062194657
+886 0.0058559958108212
+887 0.00957431092209329
+888 -0.0090398903790597
+889 -0.0199467380548428
+890 -0.000587629934548291
+891 0.0110510611921795
+892 0.0128725674330994
+893 -0.00402188300253153
+894 0.00737831485228642
+895 -0.0184423803339027
+896 -0.0110288361296573
+897 0.00890220929064295
+898 0.0094403783725091
+899 -0.000809138837552774
+900 0.0116542051582576
+901 -0.0107875510009573
+902 -0.0180296809250011
+903 0.00306299530457164
+904 0.0106046718313357
+905 0.0100756629359416
+906 0.00402229149764495
+907 -0.00423755437734391
+908 -0.0147679502849595
+909 -0.00876645613183849
+910 0.00937383395424556
+911 0.00762135328148195
+912 0.00589312291049009
+913 0.00527632712012485
+914 -0.0150771941451772
+915 -0.0126209222242841
+916 0.00209594315460717
+917 0.0150533771997464
+918 -0.000323609234544641
+919 0.00910288654678051
+920 -0.00768699605697063
+921 -0.0131267840299683
+922 -0.00394519352651183
+923 0.0112577773951416
+924 0.00193303552341244
+925 0.0155473373100893
+926 -0.0059851304642569
+927 -0.0127129091731764
+928 -0.010012705310311
+929 0.00314209573634191
+930 0.0111473003309339
+931 0.00788913702307995
+932 0.00305911972139761
+933 -0.00846335727494071
+934 -0.0122811720479955
+935 -0.0061049349645249
+936 0.00712178796175147
+937 0.0109366030876719
+938 0.010847685977904
+939 -0.00884829082408408
+940 -0.00833721747749976
+941 -0.0119098033912994
+942 0.00740468154428091
+943 0.0055679748392607
+944 0.0108164694058525
+945 0.000125955287551805
+946 -0.00747241615545713
+947 -0.00869573388304389
+948 -0.00354302687064023
+949 0.00160999946217594
+950 0.0205396965281884
+951 -0.00211607394891862
+952 -0.00622739874288181
+953 -0.00653488891371642
+954 -0.00979554730684349
+955 0.000613100471788197
+956 0.0166711334404957
+957 0.00616769987888474
+958 -0.00491976982344559
+959 -0.00424317633763101
+960 -0.00827918671212606
+961 -0.00604128020653073
+962 0.00958577837280408
+963 0.0149354906693512
+964 -0.00421686394063702
+965 -0.00316215046844813
+966 -0.0064530371820805
+967 -0.00662231958613653
+968 0.00112156121486116
+969 0.0109421973075187
+970 0.00437305640139855
+971 -0.00455774256532607
+972 -0.00437412532272711
+973 -0.00518337545866395
+974 -0.00400100467146524
+975 0.0127573808612559
+976 0.00366553037525621
+977 -0.00238554249362654
+978 -0.00329057674587693
+979 -0.00396527990664183
+980 -0.00266571430247101
+981 0.00338581958247141
+982 0.00669480510272971
+983 -0.000520566185644882
+984 -0.00202730064400516
+985 -0.00225103555436894
+986 -0.00175391520986938
+987 -0.0030237079249996
+988 0.00556348089902938
+989 0.00016537124990895
+990 0.000366191847904269
+991 -0.000403568297995977
+992 -0.000980716337890804
+993 -0.00107150539540352
+994 -0.00116888364602599
+995 0.00111545140635789
+996 0.000974863549210892
+997 0.000888586420263992
+998 0.0007092258397136
+999 0.000470368356747198
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat
new file mode 100644
index 0000000..feedffb
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.023082971572876 0.019999999999996 0.019999999999996 0.0 1
+2 0.0226471424102783 0.0300000000000011 0.0300000000000011 0.0 2
+3 0.0225150585174561 0.0200000000000102 0.0200000000000102 0.0 3
+4 0.0226900577545166 0.019999999999996 0.019999999999996 0.0 4
+5 0.0225200653076172 0.019999999999996 0.019999999999996 0.0 5
+6 0.0237810611724854 0.0300000000000011 0.0300000000000011 0.0 6
+7 0.0472888946533203 0.0400000000000063 0.0400000000000063 0.0 7
+8 0.022852897644043 0.0300000000000011 0.0300000000000011 0.0 8
+9 0.0266950130462646 0.019999999999996 0.019999999999996 0.0 9
+10 0.0224850177764893 0.0300000000000011 0.0300000000000011 0.0 10
+11 0.0223457813262939 0.019999999999996 0.019999999999996 0.0 11
+12 0.0224599838256836 0.019999999999996 0.019999999999996 0.0 12
+13 0.0224049091339111 0.0200000000000102 0.0200000000000102 0.0 13
+14 0.0482068061828613 0.0499999999999972 0.0499999999999972 0.0 14
+15 0.0226612091064453 0.019999999999996 0.019999999999996 0.0 15
+16 0.0224330425262451 0.019999999999996 0.019999999999996 0.0 16
+17 0.0224549770355225 0.019999999999996 0.019999999999996 0.0 17
+18 0.0225000381469727 0.0200000000000102 0.0200000000000102 0.0 18
+19 0.0258901119232178 0.0300000000000011 0.0300000000000011 0.0 19
+20 0.0469810962677002 0.0499999999999972 0.0499999999999972 0.0 20
+21 0.0228328704833984 0.019999999999996 0.019999999999996 0.0 21
+22 0.0226919651031494 0.019999999999996 0.019999999999996 0.0 22
+23 0.022468090057373 0.0200000000000102 0.0200000000000102 0.0 23
+24 0.0230059623718262 0.0299999999999869 0.0299999999999869 0.0 24
+25 0.0221710205078125 0.0200000000000102 0.0200000000000102 0.0 25
+26 0.0221641063690186 0.019999999999996 0.019999999999996 0.0 26
+27 0.0475480556488037 0.0499999999999972 0.0499999999999972 0.0 27
+28 0.025291919708252 0.0200000000000102 0.0200000000000102 0.0 28
+29 0.0225188732147217 0.0299999999999869 0.0299999999999869 0.0 29
+30 0.0293300151824951 0.0300000000000011 0.0300000000000011 0.0 30
+31 0.0234100818634033 0.0200000000000102 0.0200000000000102 0.0 31
+32 0.0224781036376953 0.019999999999996 0.019999999999996 0.0 32
+33 0.0478579998016357 0.0499999999999972 0.0499999999999972 0.0 33
+34 0.0229699611663818 0.019999999999996 0.019999999999996 0.0 34
+35 0.0227549076080322 0.0300000000000011 0.0300000000000011 0.0 35
+36 0.0226318836212158 0.0200000000000102 0.0200000000000102 0.0 36
+37 0.0262620449066162 0.019999999999996 0.019999999999996 0.0 37
+38 0.0223979949951172 0.0300000000000011 0.0300000000000011 0.0 38
+39 0.0222330093383789 0.019999999999996 0.019999999999996 0.0 39
+40 0.0477039813995361 0.0499999999999972 0.0499999999999972 0.0 40
+41 0.0228910446166992 0.0200000000000102 0.0200000000000102 0.0 41
+42 0.0233700275421143 0.019999999999996 0.019999999999996 0.0 42
+43 0.0224530696868896 0.0300000000000011 0.0300000000000011 0.0 43
+44 0.0225670337677002 0.019999999999996 0.019999999999996 0.0 44
+45 0.0227048397064209 0.019999999999996 0.019999999999996 0.0 45
+46 0.0222969055175781 0.0200000000000102 0.0200000000000102 0.0 46
+47 0.050562858581543 0.0499999999999972 0.0499999999999972 0.0 47
+48 0.0228369235992432 0.0300000000000011 0.0300000000000011 0.0 48
+49 0.0225470066070557 0.019999999999996 0.019999999999996 0.0 49
+50 0.02256178855896 0.019999999999996 0.019999999999996 0.0 50
+51 0.0225701332092285 0.0300000000000011 0.0300000000000011 0.0 51
+52 0.0230269432067871 0.019999999999996 0.019999999999996 0.0 52
+53 0.0470359325408936 0.0500000000000114 0.0500000000000114 0.0 53
+54 0.0227799415588379 0.019999999999996 0.019999999999996 0.0 54
+55 0.0225660800933838 0.019999999999996 0.019999999999996 0.0 55
+56 0.025252103805542 0.0300000000000011 0.0300000000000011 0.0 56
+57 0.0222170352935791 0.019999999999996 0.019999999999996 0.0 57
+58 0.0221600532531738 0.0200000000000102 0.0200000000000102 0.0 58
+59 0.0222020149230957 0.019999999999996 0.019999999999996 0.0 59
+60 0.0476398468017578 0.0499999999999972 0.0499999999999972 0.0 60
+61 0.022913932800293 0.019999999999996 0.019999999999996 0.0 61
+62 0.0225539207458496 0.0300000000000011 0.0300000000000011 0.0 62
+63 0.0225050449371338 0.0200000000000102 0.0200000000000102 0.0 63
+64 0.022601842880249 0.019999999999996 0.019999999999996 0.0 64
+65 0.0236048698425293 0.0300000000000011 0.0300000000000011 0.0 65
+66 0.0489590167999268 0.039999999999992 0.039999999999992 0.0 66
+67 0.0297541618347168 0.0300000000000011 0.0300000000000011 0.0 67
+68 0.0229940414428711 0.0300000000000011 0.0300000000000011 0.0 68
+69 0.0228681564331055 0.0200000000000102 0.0200000000000102 0.0 69
+70 0.0228149890899658 0.019999999999996 0.019999999999996 0.0 70
+71 0.0225210189819336 0.0300000000000011 0.0300000000000011 0.0 71
+72 0.022305965423584 0.019999999999996 0.019999999999996 0.0 72
+73 0.0474321842193604 0.0499999999999972 0.0499999999999972 0.0 73
+74 0.0265100002288818 0.0200000000000102 0.0200000000000102 0.0 74
+75 0.0226712226867676 0.019999999999996 0.019999999999996 0.0 75
+76 0.022493839263916 0.0300000000000011 0.0300000000000011 0.0 76
+77 0.0225288867950439 0.019999999999996 0.019999999999996 0.0 77
+78 0.0226340293884277 0.019999999999996 0.019999999999996 0.0 78
+79 0.0476889610290527 0.0499999999999972 0.0499999999999972 0.0 79
+80 0.0229480266571045 0.0200000000000102 0.0200000000000102 0.0 80
+81 0.0228819847106934 0.0300000000000011 0.0300000000000011 0.0 81
+82 0.0227799415588379 0.019999999999996 0.019999999999996 0.0 82
+83 0.0224130153656006 0.019999999999996 0.019999999999996 0.0 83
+84 0.0260109901428223 0.0300000000000011 0.0300000000000011 0.0 84
+85 0.0223500728607178 0.019999999999996 0.019999999999996 0.0 85
+86 0.0476620197296143 0.0500000000000114 0.0500000000000114 0.0 86
+87 0.022737979888916 0.019999999999996 0.019999999999996 0.0 87
+88 0.0233170986175537 0.019999999999996 0.019999999999996 0.0 88
+89 0.0224459171295166 0.0300000000000011 0.0300000000000011 0.0 89
+90 0.0226268768310547 0.019999999999996 0.019999999999996 0.0 90
+91 0.0225470066070557 0.0200000000000102 0.0200000000000102 0.0 91
+92 0.0492300987243652 0.0499999999999972 0.0499999999999972 0.0 92
+93 0.0236849784851074 0.019999999999996 0.019999999999996 0.0 93
+94 0.0227689743041992 0.0300000000000011 0.0300000000000011 0.0 94
+95 0.022672176361084 0.019999999999996 0.019999999999996 0.0 95
+96 0.022651195526123 0.0200000000000102 0.0200000000000102 0.0 96
+97 0.0225498676300049 0.0300000000000011 0.0300000000000011 0.0 97
+98 0.0222620964050293 0.019999999999996 0.019999999999996 0.0 98
+99 0.0475699901580811 0.0499999999999972 0.0499999999999972 0.0 99
+100 0.0227551460266113 0.019999999999996 0.019999999999996 0.0 100
+101 0.0227038860321045 0.0200000000000102 0.0200000000000102 0.0 101
+102 0.0256071090698242 0.0300000000000011 0.0300000000000011 0.0 102
+103 0.0226211547851562 0.019999999999996 0.019999999999996 0.0 103
+104 0.0256171226501465 0.0300000000000011 0.0300000000000011 0.0 104
+105 0.051800012588501 0.0499999999999972 0.0499999999999972 0.0 105
+106 0.023643970489502 0.019999999999996 0.019999999999996 0.0 106
+107 0.0227420330047607 0.019999999999996 0.019999999999996 0.0 107
+108 0.0226438045501709 0.0300000000000011 0.0300000000000011 0.0 108
+109 0.022442102432251 0.0200000000000102 0.0200000000000102 0.0 109
+110 0.0223290920257568 0.019999999999996 0.019999999999996 0.0 110
+111 0.0222249031066895 0.019999999999996 0.019999999999996 0.0 111
+112 0.0505638122558594 0.0499999999999972 0.0499999999999972 0.0 112
+113 0.0227949619293213 0.0300000000000011 0.0300000000000011 0.0 113
+114 0.0227949619293213 0.0200000000000102 0.0200000000000102 0.0 114
+115 0.0225298404693604 0.019999999999996 0.019999999999996 0.0 115
+116 0.0225038528442383 0.019999999999996 0.019999999999996 0.0 116
+117 0.0231928825378418 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.0223879814147949 0.019999999999996 0.019999999999996 0.0 118
+119 0.0476298332214355 0.0500000000000114 0.0500000000000114 0.0 119
+120 0.0247969627380371 0.019999999999996 0.019999999999996 0.0 120
+121 0.0240130424499512 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.0225648880004883 0.019999999999996 0.019999999999996 0.0 122
+123 0.0225870609283447 0.019999999999996 0.019999999999996 0.0 123
+124 0.0225720405578613 0.0300000000000011 0.0300000000000011 0.0 124
+125 0.0477638244628906 0.0400000000000063 0.0400000000000063 0.0 125
+126 0.0232040882110596 0.0300000000000011 0.0300000000000011 0.0 126
+127 0.0227577686309814 0.019999999999996 0.019999999999996 0.0 127
+128 0.0225858688354492 0.019999999999996 0.019999999999996 0.0 128
+129 0.0224049091339111 0.0200000000000102 0.0200000000000102 0.0 129
+130 0.0251419544219971 0.0300000000000011 0.0300000000000011 0.0 130
+131 0.0224969387054443 0.019999999999996 0.019999999999996 0.0 131
+132 0.0474879741668701 0.0499999999999972 0.0499999999999972 0.0 132
+133 0.0228550434112549 0.019999999999996 0.019999999999996 0.0 133
+134 0.0226738452911377 0.0300000000000011 0.0300000000000011 0.0 134
+135 0.0226309299468994 0.019999999999996 0.019999999999996 0.0 135
+136 0.0224778652191162 0.0200000000000102 0.0200000000000102 0.0 136
+137 0.0225551128387451 0.019999999999996 0.019999999999996 0.0 137
+138 0.0470321178436279 0.0499999999999972 0.0499999999999972 0.0 138
+139 0.0260279178619385 0.0300000000000011 0.0300000000000011 0.0 139
+140 0.0227389335632324 0.019999999999996 0.019999999999996 0.0 140
+141 0.029339075088501 0.0300000000000011 0.0300000000000011 0.0 141
+142 0.0226800441741943 0.0200000000000102 0.0200000000000102 0.0 142
+143 0.0223538875579834 0.019999999999996 0.019999999999996 0.0 143
+144 0.0231339931488037 0.0300000000000011 0.0300000000000011 0.0 144
+145 0.0474388599395752 0.039999999999992 0.039999999999992 0.0 145
+146 0.0227169990539551 0.0300000000000011 0.0300000000000011 0.0 146
+147 0.0225269794464111 0.0200000000000102 0.0200000000000102 0.0 147
+148 0.0240280628204346 0.019999999999996 0.019999999999996 0.0 148
+149 0.0242280960083008 0.0300000000000011 0.0300000000000011 0.0 149
+150 0.0225520133972168 0.019999999999996 0.019999999999996 0.0 150
+151 0.0471599102020264 0.0499999999999972 0.0499999999999972 0.0 151
+152 0.0230400562286377 0.0200000000000102 0.0200000000000102 0.0 152
+153 0.0234670639038086 0.019999999999996 0.019999999999996 0.0 153
+154 0.0225429534912109 0.0300000000000011 0.0300000000000011 0.0 154
+155 0.0225739479064941 0.019999999999996 0.019999999999996 0.0 155
+156 0.0225040912628174 0.019999999999996 0.019999999999996 0.0 156
+157 0.0224270820617676 0.0200000000000102 0.0200000000000102 0.0 157
+158 0.050184965133667 0.0499999999999972 0.0499999999999972 0.0 158
+159 0.0228159427642822 0.0300000000000011 0.0300000000000011 0.0 159
+160 0.0225830078125 0.019999999999996 0.019999999999996 0.0 160
+161 0.0224440097808838 0.019999999999996 0.019999999999996 0.0 161
+162 0.0228800773620605 0.0200000000000102 0.0200000000000102 0.0 162
+163 0.0230019092559814 0.0299999999999869 0.0299999999999869 0.0 163
+164 0.0468800067901611 0.0400000000000063 0.0400000000000063 0.0 164
+165 0.0230178833007812 0.019999999999996 0.019999999999996 0.0 165
+166 0.0227179527282715 0.0300000000000011 0.0300000000000011 0.0 166
+167 0.0280098915100098 0.0200000000000102 0.0200000000000102 0.0 167
+168 0.0224480628967285 0.0299999999999869 0.0299999999999869 0.0 168
+169 0.0222821235656738 0.0200000000000102 0.0200000000000102 0.0 169
+170 0.0222339630126953 0.019999999999996 0.019999999999996 0.0 170
+171 0.0482370853424072 0.0499999999999972 0.0499999999999972 0.0 171
+172 0.0229589939117432 0.019999999999996 0.019999999999996 0.0 172
+173 0.0225811004638672 0.0200000000000102 0.0200000000000102 0.0 173
+174 0.0225679874420166 0.0300000000000011 0.0300000000000011 0.0 174
+175 0.0226399898529053 0.019999999999996 0.019999999999996 0.0 175
+176 0.0225110054016113 0.019999999999996 0.019999999999996 0.0 176
+177 0.0512759685516357 0.0599999999999881 0.0499999999999972 0.01 177
+178 0.0293910503387451 0.0300000000000011 0.0300000000000011 0.0 178
+179 0.0228638648986816 0.0200000000000102 0.0200000000000102 0.0 179
+180 0.0226418972015381 0.0300000000000011 0.0300000000000011 0.0 180
+181 0.0233349800109863 0.019999999999996 0.019999999999996 0.0 181
+182 0.0224719047546387 0.019999999999996 0.019999999999996 0.0 182
+183 0.0222139358520508 0.019999999999996 0.019999999999996 0.0 183
+184 0.0475149154663086 0.0500000000000114 0.0500000000000114 0.0 184
+185 0.0268290042877197 0.0300000000000011 0.0300000000000011 0.0 185
+186 0.0225980281829834 0.019999999999996 0.019999999999996 0.0 186
+187 0.0224361419677734 0.019999999999996 0.019999999999996 0.0 187
+188 0.0225210189819336 0.0300000000000011 0.0300000000000011 0.0 188
+189 0.022615909576416 0.019999999999996 0.019999999999996 0.0 189
+190 0.0477218627929688 0.0499999999999972 0.0499999999999972 0.0 190
+191 0.0229659080505371 0.0200000000000102 0.0200000000000102 0.0 191
+192 0.0230429172515869 0.019999999999996 0.019999999999996 0.0 192
+193 0.0226750373840332 0.0300000000000011 0.0300000000000011 0.0 193
+194 0.0224380493164062 0.019999999999996 0.019999999999996 0.0 194
+195 0.0255289077758789 0.0200000000000102 0.0200000000000102 0.0 195
+196 0.0223410129547119 0.0299999999999869 0.0299999999999869 0.0 196
+197 0.0477759838104248 0.0400000000000063 0.0400000000000063 0.0 197
+198 0.0227560997009277 0.0300000000000011 0.0300000000000011 0.0 198
+199 0.0232150554656982 0.019999999999996 0.019999999999996 0.0 199
+200 0.0224218368530273 0.019999999999996 0.019999999999996 0.0 200
+201 0.0226380825042725 0.0300000000000011 0.0300000000000011 0.0 201
+202 0.0225119590759277 0.0200000000000102 0.0200000000000102 0.0 202
+203 0.0471208095550537 0.0499999999999972 0.0499999999999972 0.0 203
+204 0.0271830558776855 0.019999999999996 0.019999999999996 0.0 204
+205 0.0227551460266113 0.0300000000000011 0.0300000000000011 0.0 205
+206 0.0225760936737061 0.019999999999996 0.019999999999996 0.0 206
+207 0.0225489139556885 0.0200000000000102 0.0200000000000102 0.0 207
+208 0.0224738121032715 0.019999999999996 0.019999999999996 0.0 208
+209 0.0224080085754395 0.019999999999996 0.019999999999996 0.0 209
+210 0.0474929809570312 0.0499999999999972 0.0499999999999972 0.0 210
+211 0.0227348804473877 0.0200000000000102 0.0200000000000102 0.0 211
+212 0.0227007865905762 0.0300000000000011 0.0300000000000011 0.0 212
+213 0.0257821083068848 0.019999999999996 0.019999999999996 0.0 213
+214 0.0230338573455811 0.0300000000000011 0.0300000000000011 0.0 214
+215 0.0283098220825195 0.019999999999996 0.019999999999996 0.0 215
+216 0.048043966293335 0.0499999999999972 0.0499999999999972 0.0 216
+217 0.0241200923919678 0.0300000000000011 0.0300000000000011 0.0 217
+218 0.0226061344146729 0.019999999999996 0.019999999999996 0.0 218
+219 0.0226290225982666 0.0200000000000102 0.0200000000000102 0.0 219
+220 0.0223400592803955 0.019999999999996 0.019999999999996 0.0 220
+221 0.0222020149230957 0.019999999999996 0.019999999999996 0.0 221
+222 0.0221819877624512 0.019999999999996 0.019999999999996 0.0 222
+223 0.0513238906860352 0.0499999999999972 0.0499999999999972 0.0 223
+224 0.0227959156036377 0.0200000000000102 0.0200000000000102 0.0 224
+225 0.02286696434021 0.0300000000000011 0.0300000000000011 0.0 225
+226 0.0226180553436279 0.019999999999996 0.019999999999996 0.0 226
+227 0.0225269794464111 0.019999999999996 0.019999999999996 0.0 227
+228 0.0236740112304688 0.0300000000000011 0.0300000000000011 0.0 228
+229 0.0473580360412598 0.0400000000000063 0.0400000000000063 0.0 229
+230 0.0230889320373535 0.0300000000000011 0.0300000000000011 0.0 230
+231 0.0243098735809326 0.019999999999996 0.019999999999996 0.0 231
+232 0.0242350101470947 0.019999999999996 0.019999999999996 0.0 232
+233 0.0224809646606445 0.0300000000000011 0.0300000000000011 0.0 233
+234 0.0225131511688232 0.019999999999996 0.019999999999996 0.0 234
+235 0.0222058296203613 0.0200000000000102 0.0200000000000102 0.0 235
+236 0.0484139919281006 0.0499999999999972 0.0499999999999972 0.0 236
+237 0.0229649543762207 0.019999999999996 0.019999999999996 0.0 237
+238 0.0226538181304932 0.0300000000000011 0.0300000000000011 0.0 238
+239 0.0224990844726562 0.019999999999996 0.019999999999996 0.0 239
+240 0.0224988460540771 0.0200000000000102 0.0200000000000102 0.0 240
+241 0.0252270698547363 0.0300000000000011 0.0300000000000011 0.0 241
+242 0.0471029281616211 0.039999999999992 0.039999999999992 0.0 242
+243 0.0229470729827881 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0228309631347656 0.019999999999996 0.019999999999996 0.0 244
+245 0.0227391719818115 0.0200000000000102 0.0200000000000102 0.0 245
+246 0.0233259201049805 0.0299999999999869 0.0299999999999869 0.0 246
+247 0.0224099159240723 0.0200000000000102 0.0200000000000102 0.0 247
+248 0.0227949619293213 0.019999999999996 0.019999999999996 0.0 248
+249 0.0480821132659912 0.0499999999999972 0.0499999999999972 0.0 249
+250 0.026867151260376 0.0300000000000011 0.0300000000000011 0.0 250
+251 0.0245769023895264 0.019999999999996 0.019999999999996 0.0 251
+252 0.0283010005950928 0.0300000000000011 0.0300000000000011 0.0 252
+253 0.0227351188659668 0.0200000000000102 0.0200000000000102 0.0 253
+254 0.0224411487579346 0.019999999999996 0.019999999999996 0.0 254
+255 0.0479519367218018 0.0499999999999972 0.0499999999999972 0.0 255
+256 0.0230560302734375 0.019999999999996 0.019999999999996 0.0 256
+257 0.0227730274200439 0.0300000000000011 0.0300000000000011 0.0 257
+258 0.022550106048584 0.0200000000000102 0.0200000000000102 0.0 258
+259 0.0257129669189453 0.0300000000000011 0.0300000000000011 0.0 259
+260 0.0255739688873291 0.019999999999996 0.019999999999996 0.0 260
+261 0.0222690105438232 0.019999999999996 0.019999999999996 0.0 261
+262 0.0475499629974365 0.0499999999999972 0.0499999999999972 0.0 262
+263 0.0229249000549316 0.0200000000000102 0.0200000000000102 0.0 263
+264 0.0233249664306641 0.0299999999999869 0.0299999999999869 0.0 264
+265 0.0224719047546387 0.0200000000000102 0.0200000000000102 0.0 265
+266 0.0227599143981934 0.019999999999996 0.019999999999996 0.0 266
+267 0.0225708484649658 0.019999999999996 0.019999999999996 0.0 267
+268 0.0508639812469482 0.0500000000000114 0.0500000000000114 0.0 268
+269 0.0232470035552979 0.0299999999999869 0.0299999999999869 0.0 269
+270 0.0228660106658936 0.0200000000000102 0.0200000000000102 0.0 270
+271 0.0226750373840332 0.019999999999996 0.019999999999996 0.0 271
+272 0.0224699974060059 0.0300000000000011 0.0300000000000011 0.0 272
+273 0.023015022277832 0.019999999999996 0.019999999999996 0.0 273
+274 0.0223150253295898 0.019999999999996 0.019999999999996 0.0 274
+275 0.0476338863372803 0.0500000000000114 0.0500000000000114 0.0 275
+276 0.0227279663085938 0.019999999999996 0.019999999999996 0.0 276
+277 0.022507905960083 0.019999999999996 0.019999999999996 0.0 277
+278 0.0251290798187256 0.0300000000000011 0.0300000000000011 0.0 278
+279 0.0224900245666504 0.019999999999996 0.019999999999996 0.0 279
+280 0.0226230621337891 0.0200000000000102 0.0200000000000102 0.0 280
+281 0.0479300022125244 0.0499999999999972 0.0499999999999972 0.0 281
+282 0.0231950283050537 0.019999999999996 0.019999999999996 0.0 282
+283 0.0243661403656006 0.0300000000000011 0.0300000000000011 0.0 283
+284 0.0225939750671387 0.019999999999996 0.019999999999996 0.0 284
+285 0.0224170684814453 0.0200000000000102 0.0200000000000102 0.0 285
+286 0.0223720073699951 0.019999999999996 0.019999999999996 0.0 286
+287 0.0249221324920654 0.0300000000000011 0.0300000000000011 0.0 287
+288 0.0556089878082275 0.0600000000000023 0.0600000000000023 0.0 288
+289 0.0228722095489502 0.019999999999996 0.019999999999996 0.0 289
+290 0.0225820541381836 0.019999999999996 0.019999999999996 0.0 290
+291 0.0232369899749756 0.0200000000000102 0.0200000000000102 0.0 291
+292 0.0225460529327393 0.0299999999999869 0.0299999999999869 0.0 292
+293 0.0225048065185547 0.0200000000000102 0.0200000000000102 0.0 293
+294 0.0471150875091553 0.0499999999999972 0.0499999999999972 0.0 294
+295 0.0229630470275879 0.019999999999996 0.019999999999996 0.0 295
+296 0.026698112487793 0.0300000000000011 0.0300000000000011 0.0 296
+297 0.0225720405578613 0.019999999999996 0.019999999999996 0.0 297
+298 0.0224101543426514 0.0200000000000102 0.0200000000000102 0.0 298
+299 0.0224401950836182 0.019999999999996 0.019999999999996 0.0 299
+300 0.0223391056060791 0.0300000000000011 0.0300000000000011 0.0 300
+301 0.0480380058288574 0.039999999999992 0.039999999999992 0.0 301
+302 0.0228781700134277 0.0300000000000011 0.0300000000000011 0.0 302
+303 0.0226998329162598 0.0200000000000102 0.0200000000000102 0.0 303
+304 0.0224788188934326 0.019999999999996 0.019999999999996 0.0 304
+305 0.0245270729064941 0.0300000000000011 0.0300000000000011 0.0 305
+306 0.0251939296722412 0.019999999999996 0.019999999999996 0.0 306
+307 0.0470340251922607 0.0499999999999972 0.0499999999999972 0.0 307
+308 0.0229289531707764 0.0200000000000102 0.0200000000000102 0.0 308
+309 0.0233960151672363 0.0300000000000011 0.0300000000000011 0.0 309
+310 0.0224819183349609 0.019999999999996 0.019999999999996 0.0 310
+311 0.0227260589599609 0.019999999999996 0.019999999999996 0.0 311
+312 0.0223228931427002 0.019999999999996 0.019999999999996 0.0 312
+313 0.0223159790039062 0.0300000000000011 0.0300000000000011 0.0 313
+314 0.0510008335113525 0.0500000000000114 0.0500000000000114 0.0 314
+315 0.022799015045166 0.019999999999996 0.019999999999996 0.0 315
+316 0.0225009918212891 0.019999999999996 0.019999999999996 0.0 316
+317 0.0224380493164062 0.0300000000000011 0.0300000000000011 0.0 317
+318 0.0225141048431396 0.019999999999996 0.019999999999996 0.0 318
+319 0.0224788188934326 0.0200000000000102 0.0200000000000102 0.0 319
+320 0.0472540855407715 0.0499999999999972 0.0499999999999972 0.0 320
+321 0.0229048728942871 0.019999999999996 0.019999999999996 0.0 321
+322 0.022752046585083 0.019999999999996 0.019999999999996 0.0 322
+323 0.0224988460540771 0.0300000000000011 0.0300000000000011 0.0 323
+324 0.026637077331543 0.0200000000000102 0.0200000000000102 0.0 324
+325 0.0254490375518799 0.0299999999999869 0.0299999999999869 0.0 325
+326 0.0267879962921143 0.0300000000000011 0.0300000000000011 0.0 326
+327 0.0475130081176758 0.0400000000000063 0.0400000000000063 0.0 327
+328 0.0235271453857422 0.0300000000000011 0.0300000000000011 0.0 328
+329 0.0225729942321777 0.019999999999996 0.019999999999996 0.0 329
+330 0.0224888324737549 0.019999999999996 0.019999999999996 0.0 330
+331 0.0224771499633789 0.0200000000000102 0.0200000000000102 0.0 331
+332 0.0225000381469727 0.0300000000000011 0.0300000000000011 0.0 332
+333 0.0503771305084229 0.0499999999999972 0.0499999999999972 0.0 333
+334 0.02280592918396 0.019999999999996 0.019999999999996 0.0 334
+335 0.0226900577545166 0.019999999999996 0.019999999999996 0.0 335
+336 0.0226840972900391 0.0300000000000011 0.0300000000000011 0.0 336
+337 0.0223648548126221 0.0200000000000102 0.0200000000000102 0.0 337
+338 0.0229740142822266 0.019999999999996 0.019999999999996 0.0 338
+339 0.0223648548126221 0.019999999999996 0.019999999999996 0.0 339
+340 0.047623872756958 0.0499999999999972 0.0499999999999972 0.0 340
+341 0.0227048397064209 0.0200000000000102 0.0200000000000102 0.0 341
+342 0.0267980098724365 0.0300000000000011 0.0300000000000011 0.0 342
+343 0.0225899219512939 0.019999999999996 0.019999999999996 0.0 343
+344 0.022446870803833 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0226569175720215 0.019999999999996 0.019999999999996 0.0 345
+346 0.0477259159088135 0.0499999999999972 0.0499999999999972 0.0 346
+347 0.0228300094604492 0.019999999999996 0.019999999999996 0.0 347
+348 0.0228700637817383 0.0200000000000102 0.0200000000000102 0.0 348
+349 0.0224990844726562 0.019999999999996 0.019999999999996 0.0 349
+350 0.0223531723022461 0.0300000000000011 0.0300000000000011 0.0 350
+351 0.0225429534912109 0.019999999999996 0.019999999999996 0.0 351
+352 0.0264379978179932 0.0300000000000011 0.0300000000000011 0.0 352
+353 0.04734206199646 0.0400000000000063 0.0400000000000063 0.0 353
+354 0.0228159427642822 0.0300000000000011 0.0300000000000011 0.0 354
+355 0.0224540233612061 0.019999999999996 0.019999999999996 0.0 355
+356 0.0227231979370117 0.019999999999996 0.019999999999996 0.0 356
+357 0.0225269794464111 0.019999999999996 0.019999999999996 0.0 357
+358 0.0225820541381836 0.0300000000000011 0.0300000000000011 0.0 358
+359 0.0475459098815918 0.0400000000000063 0.0400000000000063 0.0 359
+360 0.0234520435333252 0.0300000000000011 0.0300000000000011 0.0 360
+361 0.0246992111206055 0.019999999999996 0.019999999999996 0.0 361
+362 0.0294170379638672 0.0300000000000011 0.0300000000000011 0.0 362
+363 0.0224790573120117 0.019999999999996 0.019999999999996 0.0 363
+364 0.0222852230072021 0.0300000000000011 0.0300000000000011 0.0 364
+365 0.0477530956268311 0.0400000000000063 0.0400000000000063 0.0 365
+366 0.0229170322418213 0.0300000000000011 0.0300000000000011 0.0 366
+367 0.0227410793304443 0.019999999999996 0.019999999999996 0.0 367
+368 0.0225741863250732 0.019999999999996 0.019999999999996 0.0 368
+369 0.0224859714508057 0.0300000000000011 0.0300000000000011 0.0 369
+370 0.0270230770111084 0.0200000000000102 0.0200000000000102 0.0 370
+371 0.0225620269775391 0.0299999999999869 0.0299999999999869 0.0 371
+372 0.047544002532959 0.0400000000000063 0.0400000000000063 0.0 372
+373 0.0227890014648438 0.0300000000000011 0.0300000000000011 0.0 373
+374 0.0226559638977051 0.019999999999996 0.019999999999996 0.0 374
+375 0.0231430530548096 0.019999999999996 0.019999999999996 0.0 375
+376 0.0225589275360107 0.0200000000000102 0.0200000000000102 0.0 376
+377 0.0225508213043213 0.0300000000000011 0.0300000000000011 0.0 377
+378 0.0470719337463379 0.039999999999992 0.039999999999992 0.0 378
+379 0.0261499881744385 0.0300000000000011 0.0300000000000011 0.0 379
+380 0.0227980613708496 0.019999999999996 0.019999999999996 0.0 380
+381 0.0226030349731445 0.0300000000000011 0.0300000000000011 0.0 381
+382 0.022442102432251 0.0200000000000102 0.0200000000000102 0.0 382
+383 0.0225498676300049 0.019999999999996 0.019999999999996 0.0 383
+384 0.0228650569915771 0.019999999999996 0.019999999999996 0.0 384
+385 0.0473499298095703 0.0499999999999972 0.0499999999999972 0.0 385
+386 0.0227880477905273 0.0200000000000102 0.0200000000000102 0.0 386
+387 0.0225081443786621 0.0300000000000011 0.0300000000000011 0.0 387
+388 0.0234310626983643 0.019999999999996 0.019999999999996 0.0 388
+389 0.0260570049285889 0.0300000000000011 0.0300000000000011 0.0 389
+390 0.0224580764770508 0.019999999999996 0.019999999999996 0.0 390
+391 0.0471310615539551 0.0499999999999972 0.0499999999999972 0.0 391
+392 0.02298903465271 0.0200000000000102 0.0200000000000102 0.0 392
+393 0.022860050201416 0.019999999999996 0.019999999999996 0.0 393
+394 0.0225329399108887 0.019999999999996 0.019999999999996 0.0 394
+395 0.0224058628082275 0.0300000000000011 0.0300000000000011 0.0 395
+396 0.0223350524902344 0.019999999999996 0.019999999999996 0.0 396
+397 0.022367000579834 0.0200000000000102 0.0200000000000102 0.0 397
+398 0.055199146270752 0.0599999999999881 0.0599999999999881 0.0 398
+399 0.0272421836853027 0.0200000000000102 0.0200000000000102 0.0 399
+400 0.0226209163665771 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.0224409103393555 0.019999999999996 0.019999999999996 0.0 401
+402 0.0233349800109863 0.019999999999996 0.019999999999996 0.0 402
+403 0.0224699974060059 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.0471019744873047 0.0400000000000063 0.0400000000000063 0.0 404
+405 0.0228829383850098 0.0300000000000011 0.0300000000000011 0.0 405
+406 0.0244019031524658 0.019999999999996 0.019999999999996 0.0 406
+407 0.0267729759216309 0.0300000000000011 0.0300000000000011 0.0 407
+408 0.0224130153656006 0.019999999999996 0.019999999999996 0.0 408
+409 0.022313117980957 0.019999999999996 0.019999999999996 0.0 409
+410 0.0224151611328125 0.0200000000000102 0.0200000000000102 0.0 410
+411 0.0483131408691406 0.0499999999999972 0.0499999999999972 0.0 411
+412 0.0227799415588379 0.019999999999996 0.019999999999996 0.0 412
+413 0.0228002071380615 0.0300000000000011 0.0300000000000011 0.0 413
+414 0.0224690437316895 0.019999999999996 0.019999999999996 0.0 414
+415 0.0225539207458496 0.0200000000000102 0.0200000000000102 0.0 415
+416 0.0254161357879639 0.0300000000000011 0.0300000000000011 0.0 416
+417 0.0482659339904785 0.0499999999999972 0.0499999999999972 0.0 417
+418 0.0229690074920654 0.019999999999996 0.019999999999996 0.0 418
+419 0.0226681232452393 0.019999999999996 0.019999999999996 0.0 419
+420 0.0230739116668701 0.0200000000000102 0.0200000000000102 0.0 420
+421 0.0223119258880615 0.0299999999999869 0.0299999999999869 0.0 421
+422 0.0240011215209961 0.0200000000000102 0.0200000000000102 0.0 422
+423 0.0470819473266602 0.0499999999999972 0.0499999999999972 0.0 423
+424 0.0231809616088867 0.019999999999996 0.019999999999996 0.0 424
+425 0.027169942855835 0.0300000000000011 0.0300000000000011 0.0 425
+426 0.0226540565490723 0.019999999999996 0.019999999999996 0.0 426
+427 0.0227150917053223 0.0200000000000102 0.0200000000000102 0.0 427
+428 0.0225992202758789 0.0300000000000011 0.0300000000000011 0.0 428
+429 0.0225179195404053 0.019999999999996 0.019999999999996 0.0 429
+430 0.0476188659667969 0.0499999999999972 0.0499999999999972 0.0 430
+431 0.0228111743927002 0.019999999999996 0.019999999999996 0.0 431
+432 0.0226650238037109 0.0200000000000102 0.0200000000000102 0.0 432
+433 0.0224969387054443 0.019999999999996 0.019999999999996 0.0 433
+434 0.0223591327667236 0.0300000000000011 0.0300000000000011 0.0 434
+435 0.0267119407653809 0.019999999999996 0.019999999999996 0.0 435
+436 0.0539910793304443 0.0600000000000023 0.0600000000000023 0.0 436
+437 0.0230631828308105 0.019999999999996 0.019999999999996 0.0 437
+438 0.0237729549407959 0.0200000000000102 0.0200000000000102 0.0 438
+439 0.0227470397949219 0.0299999999999869 0.0299999999999869 0.0 439
+440 0.0226438045501709 0.0200000000000102 0.0200000000000102 0.0 440
+441 0.0225329399108887 0.019999999999996 0.019999999999996 0.0 441
+442 0.0225589275360107 0.019999999999996 0.019999999999996 0.0 442
+443 0.0517570972442627 0.0600000000000023 0.0600000000000023 0.0 443
+444 0.0228259563446045 0.019999999999996 0.019999999999996 0.0 444
+445 0.0225679874420166 0.0200000000000102 0.0200000000000102 0.0 445
+446 0.0226199626922607 0.019999999999996 0.019999999999996 0.0 446
+447 0.0224108695983887 0.0300000000000011 0.0300000000000011 0.0 447
+448 0.022813081741333 0.019999999999996 0.019999999999996 0.0 448
+449 0.048245906829834 0.0499999999999972 0.0499999999999972 0.0 449
+450 0.0229110717773438 0.0200000000000102 0.0200000000000102 0.0 450
+451 0.0228190422058105 0.019999999999996 0.019999999999996 0.0 451
+452 0.022475004196167 0.0300000000000011 0.0300000000000011 0.0 452
+453 0.0269429683685303 0.019999999999996 0.019999999999996 0.0 453
+454 0.0225560665130615 0.0300000000000011 0.0300000000000011 0.0 454
+455 0.0226960182189941 0.019999999999996 0.019999999999996 0.0 455
+456 0.0481019020080566 0.0500000000000114 0.0500000000000114 0.0 456
+457 0.0228400230407715 0.019999999999996 0.019999999999996 0.0 457
+458 0.0225000381469727 0.019999999999996 0.019999999999996 0.0 458
+459 0.0225820541381836 0.0300000000000011 0.0300000000000011 0.0 459
+460 0.022550106048584 0.019999999999996 0.019999999999996 0.0 460
+461 0.0224931240081787 0.0200000000000102 0.0200000000000102 0.0 461
+462 0.0505130290985107 0.0499999999999972 0.0499999999999972 0.0 462
+463 0.0229830741882324 0.019999999999996 0.019999999999996 0.0 463
+464 0.0227599143981934 0.0300000000000011 0.0300000000000011 0.0 464
+465 0.0224440097808838 0.019999999999996 0.019999999999996 0.0 465
+466 0.0224459171295166 0.0200000000000102 0.0200000000000102 0.0 466
+467 0.0230529308319092 0.0299999999999869 0.0299999999999869 0.0 467
+468 0.0472948551177979 0.0400000000000063 0.0400000000000063 0.0 468
+469 0.0229778289794922 0.0300000000000011 0.0300000000000011 0.0 469
+470 0.0227181911468506 0.019999999999996 0.019999999999996 0.0 470
+471 0.0253911018371582 0.0200000000000102 0.0200000000000102 0.0 471
+472 0.0295701026916504 0.0299999999999869 0.0299999999999869 0.0 472
+473 0.0240099430084229 0.0300000000000011 0.0300000000000011 0.0 473
+474 0.0225830078125 0.0200000000000102 0.0200000000000102 0.0 474
+475 0.0483601093292236 0.0499999999999972 0.0499999999999972 0.0 475
+476 0.0228290557861328 0.019999999999996 0.019999999999996 0.0 476
+477 0.0227599143981934 0.019999999999996 0.019999999999996 0.0 477
+478 0.0223991870880127 0.0300000000000011 0.0300000000000011 0.0 478
+479 0.0224149227142334 0.0200000000000102 0.0200000000000102 0.0 479
+480 0.0231549739837646 0.019999999999996 0.019999999999996 0.0 480
+481 0.0494570732116699 0.0499999999999972 0.0499999999999972 0.0 481
+482 0.0229361057281494 0.0300000000000011 0.0300000000000011 0.0 482
+483 0.0228068828582764 0.019999999999996 0.019999999999996 0.0 483
+484 0.0226590633392334 0.0200000000000102 0.0200000000000102 0.0 484
+485 0.0231790542602539 0.019999999999996 0.019999999999996 0.0 485
+486 0.0226171016693115 0.0300000000000011 0.0300000000000011 0.0 486
+487 0.0226919651031494 0.019999999999996 0.019999999999996 0.0 487
+488 0.0492510795593262 0.0499999999999972 0.0499999999999972 0.0 488
+489 0.0257031917572021 0.0200000000000102 0.0200000000000102 0.0 489
+490 0.0239601135253906 0.0299999999999869 0.0299999999999869 0.0 490
+491 0.0223851203918457 0.0200000000000102 0.0200000000000102 0.0 491
+492 0.0224499702453613 0.019999999999996 0.019999999999996 0.0 492
+493 0.0224368572235107 0.019999999999996 0.019999999999996 0.0 493
+494 0.0476479530334473 0.0499999999999972 0.0499999999999972 0.0 494
+495 0.022913932800293 0.0300000000000011 0.0300000000000011 0.0 495
+496 0.022791862487793 0.0200000000000102 0.0200000000000102 0.0 496
+497 0.0225038528442383 0.019999999999996 0.019999999999996 0.0 497
+498 0.0226709842681885 0.019999999999996 0.019999999999996 0.0 498
+499 0.0256888866424561 0.0300000000000011 0.0300000000000011 0.0 499
+500 0.0224859714508057 0.019999999999996 0.019999999999996 0.0 500
+501 0.0475161075592041 0.0500000000000114 0.0500000000000114 0.0 501
+502 0.0226891040802002 0.019999999999996 0.019999999999996 0.0 502
+503 0.0227141380310059 0.019999999999996 0.019999999999996 0.0 503
+504 0.0224587917327881 0.0300000000000011 0.0300000000000011 0.0 504
+505 0.0225260257720947 0.019999999999996 0.019999999999996 0.0 505
+506 0.0225589275360107 0.0200000000000102 0.0200000000000102 0.0 506
+507 0.0470049381256104 0.0499999999999972 0.0499999999999972 0.0 507
+508 0.0271100997924805 0.0300000000000011 0.0300000000000011 0.0 508
+509 0.0292420387268066 0.0300000000000011 0.0300000000000011 0.0 509
+510 0.0224711894989014 0.019999999999996 0.019999999999996 0.0 510
+511 0.0221920013427734 0.019999999999996 0.019999999999996 0.0 511
+512 0.0228841304779053 0.0200000000000102 0.0200000000000102 0.0 512
+513 0.0471491813659668 0.0499999999999972 0.0499999999999972 0.0 513
+514 0.0229198932647705 0.019999999999996 0.019999999999996 0.0 514
+515 0.0227129459381104 0.0300000000000011 0.0300000000000011 0.0 515
+516 0.0225949287414551 0.019999999999996 0.019999999999996 0.0 516
+517 0.0255181789398193 0.0200000000000102 0.0200000000000102 0.0 517
+518 0.0228209495544434 0.0299999999999869 0.0299999999999869 0.0 518
+519 0.0225160121917725 0.0200000000000102 0.0200000000000102 0.0 519
+520 0.0473577976226807 0.0499999999999972 0.0499999999999972 0.0 520
+521 0.0227980613708496 0.019999999999996 0.019999999999996 0.0 521
+522 0.0231969356536865 0.019999999999996 0.019999999999996 0.0 522
+523 0.0227179527282715 0.0300000000000011 0.0300000000000011 0.0 523
+524 0.0223970413208008 0.0200000000000102 0.0200000000000102 0.0 524
+525 0.0223920345306396 0.019999999999996 0.019999999999996 0.0 525
+526 0.0507230758666992 0.0499999999999972 0.0499999999999972 0.0 526
+527 0.0229480266571045 0.019999999999996 0.019999999999996 0.0 527
+528 0.0227980613708496 0.0300000000000011 0.0300000000000011 0.0 528
+529 0.0225141048431396 0.0200000000000102 0.0200000000000102 0.0 529
+530 0.0231029987335205 0.019999999999996 0.019999999999996 0.0 530
+531 0.0224690437316895 0.0300000000000011 0.0300000000000011 0.0 531
+532 0.0224161148071289 0.019999999999996 0.019999999999996 0.0 532
+533 0.0474939346313477 0.0499999999999972 0.0499999999999972 0.0 533
+534 0.0227530002593994 0.0200000000000102 0.0200000000000102 0.0 534
+535 0.02276611328125 0.019999999999996 0.019999999999996 0.0 535
+536 0.025050163269043 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.0224800109863281 0.019999999999996 0.019999999999996 0.0 537
+538 0.0225398540496826 0.019999999999996 0.019999999999996 0.0 538
+539 0.047184944152832 0.0500000000000114 0.0500000000000114 0.0 539
+540 0.0230119228363037 0.019999999999996 0.019999999999996 0.0 540
+541 0.022691011428833 0.019999999999996 0.019999999999996 0.0 541
+542 0.0224730968475342 0.0300000000000011 0.0300000000000011 0.0 542
+543 0.0223429203033447 0.019999999999996 0.019999999999996 0.0 543
+544 0.0224099159240723 0.0200000000000102 0.0200000000000102 0.0 544
+545 0.0533881187438965 0.0499999999999972 0.0499999999999972 0.0 545
+546 0.0262870788574219 0.0300000000000011 0.0300000000000011 0.0 546
+547 0.0228250026702881 0.019999999999996 0.019999999999996 0.0 547
+548 0.0226221084594727 0.0300000000000011 0.0300000000000011 0.0 548
+549 0.0232529640197754 0.019999999999996 0.019999999999996 0.0 549
+550 0.0225918292999268 0.019999999999996 0.019999999999996 0.0 550
+551 0.0225841999053955 0.0300000000000011 0.0300000000000011 0.0 551
+552 0.047435998916626 0.0400000000000063 0.0400000000000063 0.0 552
+553 0.0227999687194824 0.0300000000000011 0.0300000000000011 0.0 553
+554 0.0258529186248779 0.019999999999996 0.019999999999996 0.0 554
+555 0.022432804107666 0.019999999999996 0.019999999999996 0.0 555
+556 0.0223519802093506 0.0300000000000011 0.0300000000000011 0.0 556
+557 0.0224819183349609 0.0200000000000102 0.0200000000000102 0.0 557
+558 0.0474679470062256 0.0499999999999972 0.0499999999999972 0.0 558
+559 0.0229389667510986 0.019999999999996 0.019999999999996 0.0 559
+560 0.0228800773620605 0.019999999999996 0.019999999999996 0.0 560
+561 0.0224850177764893 0.0200000000000102 0.0200000000000102 0.0 561
+562 0.0225398540496826 0.0300000000000011 0.0300000000000011 0.0 562
+563 0.0224540233612061 0.019999999999996 0.019999999999996 0.0 563
+564 0.025576114654541 0.0300000000000011 0.0300000000000011 0.0 564
+565 0.0475959777832031 0.039999999999992 0.039999999999992 0.0 565
+566 0.0227079391479492 0.0300000000000011 0.0300000000000011 0.0 566
+567 0.0230989456176758 0.0200000000000102 0.0200000000000102 0.0 567
+568 0.0224859714508057 0.019999999999996 0.019999999999996 0.0 568
+569 0.0224618911743164 0.019999999999996 0.019999999999996 0.0 569
+570 0.0225780010223389 0.0300000000000011 0.0300000000000011 0.0 570
+571 0.0471539497375488 0.0400000000000063 0.0400000000000063 0.0 571
+572 0.0252819061279297 0.0300000000000011 0.0300000000000011 0.0 572
+573 0.0236349105834961 0.019999999999996 0.019999999999996 0.0 573
+574 0.0224208831787109 0.0300000000000011 0.0300000000000011 0.0 574
+575 0.0223720073699951 0.019999999999996 0.019999999999996 0.0 575
+576 0.0222949981689453 0.019999999999996 0.019999999999996 0.0 576
+577 0.0470468997955322 0.0499999999999972 0.0499999999999972 0.0 577
+578 0.0229780673980713 0.0200000000000102 0.0200000000000102 0.0 578
+579 0.0227508544921875 0.019999999999996 0.019999999999996 0.0 579
+580 0.022536039352417 0.0300000000000011 0.0300000000000011 0.0 580
+581 0.0225150585174561 0.019999999999996 0.019999999999996 0.0 581
+582 0.0254819393157959 0.0200000000000102 0.0200000000000102 0.0 582
+583 0.0310370922088623 0.0299999999999869 0.0299999999999869 0.0 583
+584 0.0474588871002197 0.0500000000000114 0.0500000000000114 0.0 584
+585 0.022752046585083 0.019999999999996 0.019999999999996 0.0 585
+586 0.0233280658721924 0.0300000000000011 0.0300000000000011 0.0 586
+587 0.0223760604858398 0.019999999999996 0.019999999999996 0.0 587
+588 0.0223050117492676 0.019999999999996 0.019999999999996 0.0 588
+589 0.0223169326782227 0.0200000000000102 0.0200000000000102 0.0 589
+590 0.047105073928833 0.0499999999999972 0.0499999999999972 0.0 590
+591 0.0272059440612793 0.0300000000000011 0.0300000000000011 0.0 591
+592 0.0227630138397217 0.019999999999996 0.019999999999996 0.0 592
+593 0.0226268768310547 0.019999999999996 0.019999999999996 0.0 593
+594 0.0225090980529785 0.0300000000000011 0.0300000000000011 0.0 594
+595 0.0225892066955566 0.0200000000000102 0.0200000000000102 0.0 595
+596 0.0231549739837646 0.019999999999996 0.019999999999996 0.0 596
+597 0.0475459098815918 0.0499999999999972 0.0499999999999972 0.0 597
+598 0.0226891040802002 0.019999999999996 0.019999999999996 0.0 598
+599 0.0224978923797607 0.0300000000000011 0.0300000000000011 0.0 599
+600 0.0245161056518555 0.0200000000000102 0.0200000000000102 0.0 600
+601 0.0242869853973389 0.019999999999996 0.019999999999996 0.0 601
+602 0.0225369930267334 0.0300000000000011 0.0300000000000011 0.0 602
+603 0.0477139949798584 0.039999999999992 0.039999999999992 0.0 603
+604 0.0228500366210938 0.0300000000000011 0.0300000000000011 0.0 604
+605 0.0225930213928223 0.019999999999996 0.019999999999996 0.0 605
+606 0.0224370956420898 0.0200000000000102 0.0200000000000102 0.0 606
+607 0.0223829746246338 0.019999999999996 0.019999999999996 0.0 607
+608 0.0222539901733398 0.0300000000000011 0.0300000000000011 0.0 608
+609 0.0497751235961914 0.0499999999999972 0.0499999999999972 0.0 609
+610 0.0235979557037354 0.019999999999996 0.019999999999996 0.0 610
+611 0.0227591991424561 0.0200000000000102 0.0200000000000102 0.0 611
+612 0.0226850509643555 0.0300000000000011 0.0300000000000011 0.0 612
+613 0.0225200653076172 0.019999999999996 0.019999999999996 0.0 613
+614 0.0227999687194824 0.019999999999996 0.019999999999996 0.0 614
+615 0.0224919319152832 0.019999999999996 0.019999999999996 0.0 615
+616 0.0472068786621094 0.0500000000000114 0.0500000000000114 0.0 616
+617 0.0227549076080322 0.019999999999996 0.019999999999996 0.0 617
+618 0.0224969387054443 0.0300000000000011 0.0300000000000011 0.0 618
+619 0.0257840156555176 0.019999999999996 0.019999999999996 0.0 619
+620 0.0295670032501221 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0229511260986328 0.019999999999996 0.019999999999996 0.0 621
+622 0.0471799373626709 0.0500000000000114 0.0500000000000114 0.0 622
+623 0.0238358974456787 0.0299999999999869 0.0299999999999869 0.0 623
+624 0.0228331089019775 0.0200000000000102 0.0200000000000102 0.0 624
+625 0.0225739479064941 0.019999999999996 0.019999999999996 0.0 625
+626 0.0223119258880615 0.019999999999996 0.019999999999996 0.0 626
+627 0.0223081111907959 0.0300000000000011 0.0300000000000011 0.0 627
+628 0.0510420799255371 0.0499999999999972 0.0499999999999972 0.0 628
+629 0.0229439735412598 0.0200000000000102 0.0200000000000102 0.0 629
+630 0.0228598117828369 0.019999999999996 0.019999999999996 0.0 630
+631 0.0226309299468994 0.0300000000000011 0.0300000000000011 0.0 631
+632 0.0225811004638672 0.019999999999996 0.019999999999996 0.0 632
+633 0.0231959819793701 0.019999999999996 0.019999999999996 0.0 633
+634 0.022752046585083 0.0200000000000102 0.0200000000000102 0.0 634
+635 0.0472497940063477 0.0499999999999972 0.0499999999999972 0.0 635
+636 0.0227398872375488 0.019999999999996 0.019999999999996 0.0 636
+637 0.0257761478424072 0.0300000000000011 0.0300000000000011 0.0 637
+638 0.0224080085754395 0.019999999999996 0.019999999999996 0.0 638
+639 0.0224230289459229 0.0300000000000011 0.0300000000000011 0.0 639
+640 0.0224108695983887 0.0200000000000102 0.0200000000000102 0.0 640
+641 0.0475258827209473 0.0499999999999972 0.0499999999999972 0.0 641
+642 0.0228271484375 0.019999999999996 0.019999999999996 0.0 642
+643 0.0227019786834717 0.019999999999996 0.019999999999996 0.0 643
+644 0.0224940776824951 0.0200000000000102 0.0200000000000102 0.0 644
+645 0.0224850177764893 0.0300000000000011 0.0300000000000011 0.0 645
+646 0.0227019786834717 0.019999999999996 0.019999999999996 0.0 646
+647 0.0250790119171143 0.019999999999996 0.019999999999996 0.0 647
+648 0.0480010509490967 0.0499999999999972 0.0499999999999972 0.0 648
+649 0.0226480960845947 0.0200000000000102 0.0200000000000102 0.0 649
+650 0.0224239826202393 0.0300000000000011 0.0300000000000011 0.0 650
+651 0.0233159065246582 0.019999999999996 0.019999999999996 0.0 651
+652 0.022554874420166 0.019999999999996 0.019999999999996 0.0 652
+653 0.0225050449371338 0.019999999999996 0.019999999999996 0.0 653
+654 0.04734206199646 0.0500000000000114 0.0500000000000114 0.0 654
+655 0.0227370262145996 0.019999999999996 0.019999999999996 0.0 655
+656 0.0317370891571045 0.0299999999999869 0.0299999999999869 0.0 656
+657 0.0237619876861572 0.0200000000000102 0.0200000000000102 0.0 657
+658 0.0224289894104004 0.019999999999996 0.019999999999996 0.0 658
+659 0.0223090648651123 0.0300000000000011 0.0300000000000011 0.0 659
+660 0.0475950241088867 0.039999999999992 0.039999999999992 0.0 660
+661 0.0230028629302979 0.0300000000000011 0.0300000000000011 0.0 661
+662 0.0226609706878662 0.0200000000000102 0.0200000000000102 0.0 662
+663 0.0227439403533936 0.019999999999996 0.019999999999996 0.0 663
+664 0.0224378108978271 0.019999999999996 0.019999999999996 0.0 664
+665 0.0267817974090576 0.0300000000000011 0.0300000000000011 0.0 665
+666 0.0225181579589844 0.019999999999996 0.019999999999996 0.0 666
+667 0.0476372241973877 0.0500000000000114 0.0500000000000114 0.0 667
+668 0.0227279663085938 0.019999999999996 0.019999999999996 0.0 668
+669 0.0238058567047119 0.0300000000000011 0.0300000000000011 0.0 669
+670 0.0225961208343506 0.019999999999996 0.019999999999996 0.0 670
+671 0.0226478576660156 0.019999999999996 0.019999999999996 0.0 671
+672 0.0224800109863281 0.0300000000000011 0.0300000000000011 0.0 672
+673 0.0478980541229248 0.0400000000000063 0.0400000000000063 0.0 673
+674 0.0272519588470459 0.0300000000000011 0.0300000000000011 0.0 674
+675 0.0226519107818604 0.019999999999996 0.019999999999996 0.0 675
+676 0.0225238800048828 0.0300000000000011 0.0300000000000011 0.0 676
+677 0.0224411487579346 0.019999999999996 0.019999999999996 0.0 677
+678 0.0228710174560547 0.0200000000000102 0.0200000000000102 0.0 678
+679 0.0471720695495605 0.0499999999999972 0.0499999999999972 0.0 679
+680 0.0229899883270264 0.019999999999996 0.019999999999996 0.0 680
+681 0.0226860046386719 0.019999999999996 0.019999999999996 0.0 681
+682 0.0227768421173096 0.0300000000000011 0.0300000000000011 0.0 682
+683 0.0246498584747314 0.0200000000000102 0.0200000000000102 0.0 683
+684 0.024179220199585 0.0299999999999869 0.0299999999999869 0.0 684
+685 0.0224809646606445 0.0200000000000102 0.0200000000000102 0.0 685
+686 0.0472848415374756 0.0499999999999972 0.0499999999999972 0.0 686
+687 0.0227711200714111 0.019999999999996 0.019999999999996 0.0 687
+688 0.0226719379425049 0.019999999999996 0.019999999999996 0.0 688
+689 0.0224339962005615 0.0200000000000102 0.0200000000000102 0.0 689
+690 0.022291898727417 0.0300000000000011 0.0300000000000011 0.0 690
+691 0.02239990234375 0.019999999999996 0.019999999999996 0.0 691
+692 0.0513718128204346 0.0499999999999972 0.0499999999999972 0.0 692
+693 0.0307130813598633 0.0300000000000011 0.0300000000000011 0.0 693
+694 0.0228471755981445 0.019999999999996 0.019999999999996 0.0 694
+695 0.0224709510803223 0.0300000000000011 0.0300000000000011 0.0 695
+696 0.0225100517272949 0.0200000000000102 0.0200000000000102 0.0 696
+697 0.0233030319213867 0.019999999999996 0.019999999999996 0.0 697
+698 0.0470919609069824 0.0499999999999972 0.0499999999999972 0.0 698
+699 0.0229198932647705 0.019999999999996 0.019999999999996 0.0 699
+700 0.0227630138397217 0.0200000000000102 0.0200000000000102 0.0 700
+701 0.0225980281829834 0.0200000000000102 0.0200000000000102 0.0 701
+702 0.0258259773254395 0.019999999999996 0.019999999999996 0.0 702
+703 0.0223879814147949 0.0300000000000011 0.0300000000000011 0.0 703
+704 0.0224990844726562 0.019999999999996 0.019999999999996 0.0 704
+705 0.0473251342773438 0.0499999999999972 0.0499999999999972 0.0 705
+706 0.0234189033508301 0.019999999999996 0.019999999999996 0.0 706
+707 0.0227119922637939 0.0200000000000102 0.0200000000000102 0.0 707
+708 0.0224349498748779 0.019999999999996 0.019999999999996 0.0 708
+709 0.0224518775939941 0.0300000000000011 0.0300000000000011 0.0 709
+710 0.0225179195404053 0.019999999999996 0.019999999999996 0.0 710
+711 0.0502331256866455 0.0499999999999972 0.0499999999999972 0.0 711
+712 0.0228428840637207 0.0200000000000102 0.0200000000000102 0.0 712
+713 0.0227060317993164 0.0300000000000011 0.0300000000000011 0.0 713
+714 0.023097038269043 0.019999999999996 0.019999999999996 0.0 714
+715 0.0223181247711182 0.019999999999996 0.019999999999996 0.0 715
+716 0.0222809314727783 0.019999999999996 0.019999999999996 0.0 716
+717 0.0471060276031494 0.0500000000000114 0.0500000000000114 0.0 717
+718 0.0228781700134277 0.019999999999996 0.019999999999996 0.0 718
+719 0.0229380130767822 0.0300000000000011 0.0300000000000011 0.0 719
+720 0.0258369445800781 0.019999999999996 0.019999999999996 0.0 720
+721 0.0224931240081787 0.0300000000000011 0.0300000000000011 0.0 721
+722 0.0230259895324707 0.019999999999996 0.019999999999996 0.0 722
+723 0.02252197265625 0.0200000000000102 0.0200000000000102 0.0 723
+724 0.0475549697875977 0.0499999999999972 0.0499999999999972 0.0 724
+725 0.0227770805358887 0.019999999999996 0.019999999999996 0.0 725
+726 0.0225141048431396 0.019999999999996 0.019999999999996 0.0 726
+727 0.0227451324462891 0.0300000000000011 0.0300000000000011 0.0 727
+728 0.0223758220672607 0.0200000000000102 0.0200000000000102 0.0 728
+729 0.023906946182251 0.019999999999996 0.019999999999996 0.0 729
+730 0.0556581020355225 0.0600000000000023 0.0600000000000023 0.0 730
+731 0.0229699611663818 0.019999999999996 0.019999999999996 0.0 731
+732 0.0226690769195557 0.019999999999996 0.019999999999996 0.0 732
+733 0.0225589275360107 0.0300000000000011 0.0300000000000011 0.0 733
+734 0.0232241153717041 0.019999999999996 0.019999999999996 0.0 734
+735 0.0225598812103271 0.0200000000000102 0.0200000000000102 0.0 735
+736 0.0470528602600098 0.0499999999999972 0.0499999999999972 0.0 736
+737 0.0228769779205322 0.019999999999996 0.019999999999996 0.0 737
+738 0.0257880687713623 0.0300000000000011 0.0300000000000011 0.0 738
+739 0.0235300064086914 0.019999999999996 0.019999999999996 0.0 739
+740 0.0224180221557617 0.0200000000000102 0.0200000000000102 0.0 740
+741 0.0224599838256836 0.0300000000000011 0.0300000000000011 0.0 741
+742 0.022385835647583 0.019999999999996 0.019999999999996 0.0 742
+743 0.0479929447174072 0.0499999999999972 0.0499999999999972 0.0 743
+744 0.0231039524078369 0.019999999999996 0.019999999999996 0.0 744
+745 0.0225660800933838 0.0200000000000102 0.0200000000000102 0.0 745
+746 0.0224900245666504 0.019999999999996 0.019999999999996 0.0 746
+747 0.0224640369415283 0.0300000000000011 0.0300000000000011 0.0 747
+748 0.0256268978118896 0.019999999999996 0.019999999999996 0.0 748
+749 0.0473120212554932 0.0499999999999972 0.0499999999999972 0.0 749
+750 0.0228018760681152 0.0200000000000102 0.0200000000000102 0.0 750
+751 0.0232498645782471 0.0300000000000011 0.0300000000000011 0.0 751
+752 0.0224390029907227 0.019999999999996 0.019999999999996 0.0 752
+753 0.022291898727417 0.019999999999996 0.019999999999996 0.0 753
+754 0.0223748683929443 0.019999999999996 0.019999999999996 0.0 754
+755 0.0472152233123779 0.0500000000000114 0.0500000000000114 0.0 755
+756 0.0228731632232666 0.019999999999996 0.019999999999996 0.0 756
+757 0.0252671241760254 0.0300000000000011 0.0300000000000011 0.0 757
+758 0.0226409435272217 0.019999999999996 0.019999999999996 0.0 758
+759 0.0225830078125 0.019999999999996 0.019999999999996 0.0 759
+760 0.0225331783294678 0.0300000000000011 0.0300000000000011 0.0 760
+761 0.0225949287414551 0.0200000000000102 0.0200000000000102 0.0 761
+762 0.0475749969482422 0.0499999999999972 0.0499999999999972 0.0 762
+763 0.0227329730987549 0.019999999999996 0.019999999999996 0.0 763
+764 0.0225529670715332 0.019999999999996 0.019999999999996 0.0 764
+765 0.0224440097808838 0.0200000000000102 0.0200000000000102 0.0 765
+766 0.0223290920257568 0.0300000000000011 0.0300000000000011 0.0 766
+767 0.033358097076416 0.0299999999999869 0.0299999999999869 0.0 767
+768 0.0471920967102051 0.0500000000000114 0.0500000000000114 0.0 768
+769 0.0227799415588379 0.019999999999996 0.019999999999996 0.0 769
+770 0.0234429836273193 0.019999999999996 0.019999999999996 0.0 770
+771 0.0224521160125732 0.0300000000000011 0.0300000000000011 0.0 771
+772 0.0226120948791504 0.019999999999996 0.019999999999996 0.0 772
+773 0.0225300788879395 0.0200000000000102 0.0200000000000102 0.0 773
+774 0.0472240447998047 0.0499999999999972 0.0499999999999972 0.0 774
+775 0.0266668796539307 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.023015022277832 0.019999999999996 0.019999999999996 0.0 776
+777 0.0226809978485107 0.019999999999996 0.019999999999996 0.0 777
+778 0.0225629806518555 0.0200000000000102 0.0200000000000102 0.0 778
+779 0.0223550796508789 0.0300000000000011 0.0300000000000011 0.0 779
+780 0.0230989456176758 0.019999999999996 0.019999999999996 0.0 780
+781 0.0475809574127197 0.0499999999999972 0.0499999999999972 0.0 781
+782 0.0226840972900391 0.019999999999996 0.019999999999996 0.0 782
+783 0.0225729942321777 0.0200000000000102 0.0200000000000102 0.0 783
+784 0.0224289894104004 0.0300000000000011 0.0300000000000011 0.0 784
+785 0.0256469249725342 0.019999999999996 0.019999999999996 0.0 785
+786 0.0225028991699219 0.019999999999996 0.019999999999996 0.0 786
+787 0.0480420589447021 0.0499999999999972 0.0499999999999972 0.0 787
+788 0.0228919982910156 0.0200000000000102 0.0200000000000102 0.0 788
+789 0.0226309299468994 0.0299999999999869 0.0299999999999869 0.0 789
+790 0.0224378108978271 0.0200000000000102 0.0200000000000102 0.0 790
+791 0.0224709510803223 0.019999999999996 0.019999999999996 0.0 791
+792 0.0223159790039062 0.019999999999996 0.019999999999996 0.0 792
+793 0.0482239723205566 0.0400000000000063 0.0400000000000063 0.0 793
+794 0.0246069431304932 0.0299999999999869 0.0299999999999869 0.0 794
+795 0.0227251052856445 0.0200000000000102 0.0200000000000102 0.0 795
+796 0.0226359367370605 0.019999999999996 0.019999999999996 0.0 796
+797 0.0224781036376953 0.0300000000000011 0.0300000000000011 0.0 797
+798 0.0225961208343506 0.019999999999996 0.019999999999996 0.0 798
+799 0.0226588249206543 0.019999999999996 0.019999999999996 0.0 799
+800 0.0475590229034424 0.0500000000000114 0.0500000000000114 0.0 800
+801 0.0227870941162109 0.019999999999996 0.019999999999996 0.0 801
+802 0.0225069522857666 0.019999999999996 0.019999999999996 0.0 802
+803 0.0258538722991943 0.0300000000000011 0.0300000000000011 0.0 803
+804 0.0293428897857666 0.0300000000000011 0.0300000000000011 0.0 804
+805 0.022611141204834 0.019999999999996 0.019999999999996 0.0 805
+806 0.0470418930053711 0.0500000000000114 0.0500000000000114 0.0 806
+807 0.0237758159637451 0.019999999999996 0.019999999999996 0.0 807
+808 0.0227320194244385 0.0300000000000011 0.0300000000000011 0.0 808
+809 0.0224711894989014 0.019999999999996 0.019999999999996 0.0 809
+810 0.0225059986114502 0.019999999999996 0.019999999999996 0.0 810
+811 0.0224649906158447 0.0200000000000102 0.0200000000000102 0.0 811
+812 0.0506050586700439 0.0499999999999972 0.0499999999999972 0.0 812
+813 0.0230269432067871 0.0300000000000011 0.0300000000000011 0.0 813
+814 0.0228140354156494 0.019999999999996 0.019999999999996 0.0 814
+815 0.0225369930267334 0.019999999999996 0.019999999999996 0.0 815
+816 0.0224819183349609 0.0300000000000011 0.0300000000000011 0.0 816
+817 0.0230681896209717 0.019999999999996 0.019999999999996 0.0 817
+818 0.0226531028747559 0.0200000000000102 0.0200000000000102 0.0 818
+819 0.0471920967102051 0.0499999999999972 0.0499999999999972 0.0 819
+820 0.022752046585083 0.019999999999996 0.019999999999996 0.0 820
+821 0.0240130424499512 0.0300000000000011 0.0300000000000011 0.0 821
+822 0.024043083190918 0.019999999999996 0.019999999999996 0.0 822
+823 0.022367000579834 0.0200000000000102 0.0200000000000102 0.0 823
+824 0.0223929882049561 0.019999999999996 0.019999999999996 0.0 824
+825 0.0477418899536133 0.0499999999999972 0.0499999999999972 0.0 825
+826 0.0227749347686768 0.0300000000000011 0.0300000000000011 0.0 826
+827 0.0227129459381104 0.019999999999996 0.019999999999996 0.0 827
+828 0.0225088596343994 0.0200000000000102 0.0200000000000102 0.0 828
+829 0.0223178863525391 0.019999999999996 0.019999999999996 0.0 829
+830 0.02256178855896 0.0300000000000011 0.0300000000000011 0.0 830
+831 0.0491888523101807 0.039999999999992 0.039999999999992 0.0 831
+832 0.0238690376281738 0.0300000000000011 0.0300000000000011 0.0 832
+833 0.0228731632232666 0.0200000000000102 0.0200000000000102 0.0 833
+834 0.0226390361785889 0.019999999999996 0.019999999999996 0.0 834
+835 0.0226919651031494 0.0300000000000011 0.0300000000000011 0.0 835
+836 0.0225028991699219 0.019999999999996 0.019999999999996 0.0 836
+837 0.0224220752716064 0.019999999999996 0.019999999999996 0.0 837
+838 0.0475718975067139 0.0500000000000114 0.0500000000000114 0.0 838
+839 0.0228641033172607 0.019999999999996 0.019999999999996 0.0 839
+840 0.0308690071105957 0.0300000000000011 0.0300000000000011 0.0 840
+841 0.0251350402832031 0.0300000000000011 0.0300000000000011 0.0 841
+842 0.022784948348999 0.019999999999996 0.019999999999996 0.0 842
+843 0.022475004196167 0.019999999999996 0.019999999999996 0.0 843
+844 0.0481071472167969 0.0499999999999972 0.0499999999999972 0.0 844
+845 0.022777795791626 0.0200000000000102 0.0200000000000102 0.0 845
+846 0.0225391387939453 0.0300000000000011 0.0300000000000011 0.0 846
+847 0.0223829746246338 0.019999999999996 0.019999999999996 0.0 847
+848 0.0222880840301514 0.019999999999996 0.019999999999996 0.0 848
+849 0.0231649875640869 0.0200000000000102 0.0200000000000102 0.0 849
+850 0.0498239994049072 0.0499999999999972 0.0499999999999972 0.0 850
+851 0.0229728221893311 0.0300000000000011 0.0300000000000011 0.0 851
+852 0.0226678848266602 0.019999999999996 0.019999999999996 0.0 852
+853 0.0235629081726074 0.019999999999996 0.019999999999996 0.0 853
+854 0.0226778984069824 0.0300000000000011 0.0300000000000011 0.0 854
+855 0.0225760936737061 0.019999999999996 0.019999999999996 0.0 855
+856 0.0472428798675537 0.0500000000000114 0.0500000000000114 0.0 856
+857 0.0228590965270996 0.019999999999996 0.019999999999996 0.0 857
+858 0.0256388187408447 0.0300000000000011 0.0300000000000011 0.0 858
+859 0.0229208469390869 0.019999999999996 0.019999999999996 0.0 859
+860 0.0224840641021729 0.019999999999996 0.019999999999996 0.0 860
+861 0.0223701000213623 0.0200000000000102 0.0200000000000102 0.0 861
+862 0.0229117870330811 0.0300000000000011 0.0300000000000011 0.0 862
+863 0.0475149154663086 0.039999999999992 0.039999999999992 0.0 863
+864 0.022799015045166 0.0300000000000011 0.0300000000000011 0.0 864
+865 0.0225379467010498 0.019999999999996 0.019999999999996 0.0 865
+866 0.0226678848266602 0.0200000000000102 0.0200000000000102 0.0 866
+867 0.0223591327667236 0.019999999999996 0.019999999999996 0.0 867
+868 0.0251359939575195 0.0300000000000011 0.0300000000000011 0.0 868
+869 0.0475220680236816 0.0499999999999972 0.0499999999999972 0.0 869
+870 0.0227980613708496 0.019999999999996 0.019999999999996 0.0 870
+871 0.0227110385894775 0.0200000000000102 0.0200000000000102 0.0 871
+872 0.0231759548187256 0.0299999999999869 0.0299999999999869 0.0 872
+873 0.0223469734191895 0.0200000000000102 0.0200000000000102 0.0 873
+874 0.0222749710083008 0.019999999999996 0.019999999999996 0.0 874
+875 0.046968936920166 0.0499999999999972 0.0499999999999972 0.0 875
+876 0.0229840278625488 0.0200000000000102 0.0200000000000102 0.0 876
+877 0.0336899757385254 0.0299999999999869 0.0299999999999869 0.0 877
+878 0.0226821899414062 0.0300000000000011 0.0300000000000011 0.0 878
+879 0.0225288867950439 0.0200000000000102 0.0200000000000102 0.0 879
+880 0.0224189758300781 0.019999999999996 0.019999999999996 0.0 880
+881 0.023205041885376 0.0300000000000011 0.0300000000000011 0.0 881
+882 0.0473780632019043 0.039999999999992 0.039999999999992 0.0 882
+883 0.0226800441741943 0.0300000000000011 0.0300000000000011 0.0 883
+884 0.0224399566650391 0.0200000000000102 0.0200000000000102 0.0 884
+885 0.0223681926727295 0.019999999999996 0.019999999999996 0.0 885
+886 0.0252659320831299 0.0300000000000011 0.0300000000000011 0.0 886
+887 0.0249259471893311 0.019999999999996 0.019999999999996 0.0 887
+888 0.047400951385498 0.0499999999999972 0.0499999999999972 0.0 888
+889 0.0227570533752441 0.0200000000000102 0.0200000000000102 0.0 889
+890 0.0234551429748535 0.019999999999996 0.019999999999996 0.0 890
+891 0.0227649211883545 0.0300000000000011 0.0300000000000011 0.0 891
+892 0.0223729610443115 0.019999999999996 0.019999999999996 0.0 892
+893 0.0223479270935059 0.019999999999996 0.019999999999996 0.0 893
+894 0.047307014465332 0.0500000000000114 0.0500000000000114 0.0 894
+895 0.0258030891418457 0.019999999999996 0.019999999999996 0.0 895
+896 0.0229730606079102 0.0300000000000011 0.0300000000000011 0.0 896
+897 0.0226550102233887 0.019999999999996 0.019999999999996 0.0 897
+898 0.0230071544647217 0.019999999999996 0.019999999999996 0.0 898
+899 0.0224480628967285 0.0300000000000011 0.0300000000000011 0.0 899
+900 0.047260046005249 0.0400000000000063 0.0400000000000063 0.0 900
+901 0.0229511260986328 0.0300000000000011 0.0300000000000011 0.0 901
+902 0.0227549076080322 0.019999999999996 0.019999999999996 0.0 902
+903 0.0227870941162109 0.019999999999996 0.019999999999996 0.0 903
+904 0.023169994354248 0.0200000000000102 0.0200000000000102 0.0 904
+905 0.0247299671173096 0.0299999999999869 0.0299999999999869 0.0 905
+906 0.0232272148132324 0.0200000000000102 0.0200000000000102 0.0 906
+907 0.0473639965057373 0.0499999999999972 0.0499999999999972 0.0 907
+908 0.0231180191040039 0.019999999999996 0.019999999999996 0.0 908
+909 0.0226378440856934 0.0300000000000011 0.0300000000000011 0.0 909
+910 0.0224730968475342 0.019999999999996 0.019999999999996 0.0 910
+911 0.0223720073699951 0.0200000000000102 0.0200000000000102 0.0 911
+912 0.0224881172180176 0.019999999999996 0.019999999999996 0.0 912
+913 0.0518181324005127 0.0600000000000023 0.0600000000000023 0.0 913
+914 0.0285370349884033 0.019999999999996 0.019999999999996 0.0 914
+915 0.0229339599609375 0.0300000000000011 0.0300000000000011 0.0 915
+916 0.0224258899688721 0.019999999999996 0.019999999999996 0.0 916
+917 0.0223419666290283 0.0200000000000102 0.0200000000000102 0.0 917
+918 0.0231149196624756 0.019999999999996 0.019999999999996 0.0 918
+919 0.0469498634338379 0.0499999999999972 0.0499999999999972 0.0 919
+920 0.0229380130767822 0.019999999999996 0.019999999999996 0.0 920
+921 0.022784948348999 0.0300000000000011 0.0300000000000011 0.0 921
+922 0.0224778652191162 0.0200000000000102 0.0200000000000102 0.0 922
+923 0.025670051574707 0.0299999999999869 0.0299999999999869 0.0 923
+924 0.0241270065307617 0.0200000000000102 0.0200000000000102 0.0 924
+925 0.0224959850311279 0.019999999999996 0.019999999999996 0.0 925
+926 0.0475151538848877 0.0499999999999972 0.0499999999999972 0.0 926
+927 0.0233569145202637 0.019999999999996 0.019999999999996 0.0 927
+928 0.022697925567627 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.0224049091339111 0.0200000000000102 0.0200000000000102 0.0 929
+930 0.0223929882049561 0.019999999999996 0.019999999999996 0.0 930
+931 0.0224430561065674 0.019999999999996 0.019999999999996 0.0 931
+932 0.0508589744567871 0.0499999999999972 0.0499999999999972 0.0 932
+933 0.0229549407958984 0.0300000000000011 0.0300000000000011 0.0 933
+934 0.0227360725402832 0.0200000000000102 0.0200000000000102 0.0 934
+935 0.0230159759521484 0.019999999999996 0.019999999999996 0.0 935
+936 0.0223309993743896 0.019999999999996 0.019999999999996 0.0 936
+937 0.0222959518432617 0.019999999999996 0.019999999999996 0.0 937
+938 0.0472970008850098 0.0400000000000063 0.0400000000000063 0.0 938
+939 0.0230600833892822 0.0300000000000011 0.0300000000000011 0.0 939
+940 0.0226349830627441 0.019999999999996 0.019999999999996 0.0 940
+941 0.025303840637207 0.0300000000000011 0.0300000000000011 0.0 941
+942 0.0234689712524414 0.019999999999996 0.019999999999996 0.0 942
+943 0.022615909576416 0.019999999999996 0.019999999999996 0.0 943
+944 0.0470030307769775 0.0500000000000114 0.0500000000000114 0.0 944
+945 0.0232269763946533 0.019999999999996 0.019999999999996 0.0 945
+946 0.0227811336517334 0.0300000000000011 0.0300000000000011 0.0 946
+947 0.0225110054016113 0.019999999999996 0.019999999999996 0.0 947
+948 0.0224099159240723 0.019999999999996 0.019999999999996 0.0 948
+949 0.0224759578704834 0.0200000000000102 0.0200000000000102 0.0 949
+950 0.0223360061645508 0.0300000000000011 0.0300000000000011 0.0 950
+951 0.0556850433349609 0.0499999999999972 0.0499999999999972 0.0 951
+952 0.0229251384735107 0.019999999999996 0.019999999999996 0.0 952
+953 0.0225358009338379 0.0300000000000011 0.0300000000000011 0.0 953
+954 0.0226168632507324 0.019999999999996 0.019999999999996 0.0 954
+955 0.023292064666748 0.019999999999996 0.019999999999996 0.0 955
+956 0.0225601196289062 0.0300000000000011 0.0300000000000011 0.0 956
+957 0.0472140312194824 0.0400000000000063 0.0400000000000063 0.0 957
+958 0.0228290557861328 0.0300000000000011 0.0300000000000011 0.0 958
+959 0.0247390270233154 0.019999999999996 0.019999999999996 0.0 959
+960 0.0244059562683105 0.019999999999996 0.019999999999996 0.0 960
+961 0.0223748683929443 0.0300000000000011 0.0300000000000011 0.0 961
+962 0.0224399566650391 0.0200000000000102 0.0200000000000102 0.0 962
+963 0.0478479862213135 0.0499999999999972 0.0499999999999972 0.0 963
+964 0.0231130123138428 0.019999999999996 0.019999999999996 0.0 964
+965 0.0229220390319824 0.019999999999996 0.019999999999996 0.0 965
+966 0.0224699974060059 0.0300000000000011 0.0300000000000011 0.0 966
+967 0.0225620269775391 0.0200000000000102 0.0200000000000102 0.0 967
+968 0.0224020481109619 0.019999999999996 0.019999999999996 0.0 968
+969 0.0508251190185547 0.0499999999999972 0.0499999999999972 0.0 969
+970 0.0230629444122314 0.0300000000000011 0.0300000000000011 0.0 970
+971 0.0234439373016357 0.019999999999996 0.019999999999996 0.0 971
+972 0.0241410732269287 0.0200000000000102 0.0200000000000102 0.0 972
+973 0.0225048065185547 0.019999999999996 0.019999999999996 0.0 973
+974 0.0223360061645508 0.0300000000000011 0.0300000000000011 0.0 974
+975 0.0224909782409668 0.019999999999996 0.019999999999996 0.0 975
+976 0.0475950241088867 0.0499999999999972 0.0499999999999972 0.0 976
+977 0.0227401256561279 0.0200000000000102 0.0200000000000102 0.0 977
+978 0.0255289077758789 0.019999999999996 0.019999999999996 0.0 978
+979 0.0238900184631348 0.0300000000000011 0.0300000000000011 0.0 979
+980 0.0224909782409668 0.019999999999996 0.019999999999996 0.0 980
+981 0.0223910808563232 0.019999999999996 0.019999999999996 0.0 981
+982 0.0473268032073975 0.0499999999999972 0.0499999999999972 0.0 982
+983 0.0227880477905273 0.0200000000000102 0.0200000000000102 0.0 983
+984 0.0226118564605713 0.0300000000000011 0.0300000000000011 0.0 984
+985 0.0223948955535889 0.019999999999996 0.019999999999996 0.0 985
+986 0.0223472118377686 0.019999999999996 0.019999999999996 0.0 986
+987 0.0237748622894287 0.0200000000000102 0.0200000000000102 0.0 987
+988 0.0564570426940918 0.0499999999999972 0.0499999999999972 0.0 988
+989 0.0229530334472656 0.0200000000000102 0.0200000000000102 0.0 989
+990 0.0226871967315674 0.0300000000000011 0.0300000000000011 0.0 990
+991 0.0234870910644531 0.019999999999996 0.019999999999996 0.0 991
+992 0.0224900245666504 0.019999999999996 0.019999999999996 0.0 992
+993 0.0224850177764893 0.0300000000000011 0.0300000000000011 0.0 993
+994 0.0470020771026611 0.0400000000000063 0.0400000000000063 0.0 994
+995 0.022852897644043 0.0300000000000011 0.0300000000000011 0.0 995
+996 0.0257470607757568 0.019999999999996 0.019999999999996 0.0 996
+997 0.0236849784851074 0.0300000000000011 0.0300000000000011 0.0 997
+998 0.0226609706878662 0.019999999999996 0.019999999999996 0.0 998
+999 0.0222959518432617 0.019999999999996 0.019999999999996 0.0 999
+1000 0.0223429203033447 0.0200000000000102 0.0200000000000102 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log
new file mode 100644
index 0000000..1d42e63
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log
@@ -0,0 +1,262 @@
+========================== 2009-04-01T16:50:52 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'GeneratorBenchmarkPure' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+GeneratorBenchmarkPure#generator_pretty:
+ real total user system
+sum 27.356301069 27.380000000 27.370000000 0.010000000
+min 0.022372007 0.020000000 0.020000000 0.000000000
+std- 0.018178834 0.017248947 0.017256376 -0.000306228
+mean 0.027356301 0.027380000 0.027370000 0.000010000
+std+ 0.036533768 0.037511053 0.037483624 0.000326228
+max 0.059602976 0.060000000 0.060000000 0.010000000
+std 0.009177467 0.010131053 0.010113624 0.000316228
+std% 33.547909026 37.001655096 36.951493429 3162.277660168
+harm 0.025499974 0.024719842 0.024716787 nan
+geo 0.026258699 0.025883656 0.025877881 0.000000000
+q1 0.023006916 0.020000000 0.020000000 0.000000000
+med 0.023234129 0.020000000 0.020000000 0.000000000
+q3 0.024879038 0.030000000 0.030000000 0.000000000
+ 1000 36.55465 0.027356301
+ calls calls/sec secs/call
+
+ 0.05774 -|
+ 0.05402 -|*
+ 0.05030 -|****
+ 0.04657 -|***
+ 0.04285 -|
+ 0.03913 -|
+ 0.03540 -|
+ 0.03168 -|*
+ 0.02796 -|***
+ 0.02423 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02323, iqr=0.00187, factor=3.00):
+high=72 very_high=150
+
+Ljung-Box statistics: q=3705.61130 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkPure#generator_pretty:
+ real total user system
+sum 27.569372892 27.540000000 27.530000000 0.010000000
+min 0.022536039 0.020000000 0.020000000 0.000000000
+std- 0.018335894 0.017329581 0.017326902 -0.000306228
+mean 0.027569373 0.027540000 0.027530000 0.000010000
+std+ 0.036802852 0.037750419 0.037733098 0.000326228
+max 0.056230068 0.060000000 0.060000000 0.010000000
+std 0.009233479 0.010210419 0.010203098 0.000316228
+std% 33.491797772 37.074868658 37.061742557 3162.277660168
+harm 0.025675439 0.024841635 0.024836493 nan
+geo 0.026453993 0.026024721 0.026017235 0.000000000
+q1 0.023056030 0.020000000 0.020000000 0.000000000
+med 0.023363113 0.020000000 0.020000000 0.000000000
+q3 0.025253892 0.030000000 0.030000000 0.000000000
+ 1000 36.27213 0.027569373
+ calls calls/sec secs/call
+
+ 0.05455 -|*
+ 0.05118 -|**
+ 0.04781 -|******
+ 0.04444 -|
+ 0.04107 -|
+ 0.03770 -|
+ 0.03433 -|
+ 0.03096 -|*
+ 0.02759 -|*****
+ 0.02422 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02336, iqr=0.00220, factor=3.00):
+high=67 very_high=148
+
+Ljung-Box statistics: q=3212.48820 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+-------------------------------------------------------------------------------
+
+This first run is only for warmup.
+GeneratorBenchmarkPure#generator_safe:
+ real total user system
+sum 26.869803667 26.870000000 26.870000000 0.000000000
+min 0.022134781 0.020000000 0.020000000 0.000000000
+std- 0.017763505 0.016750439 0.016750439 0.000000000
+mean 0.026869804 0.026870000 0.026870000 0.000000000
+std+ 0.035976103 0.036989561 0.036989561 0.000000000
+max 0.054952860 0.060000000 0.060000000 0.000000000
+std 0.009106299 0.010119561 0.010119561 0.000000000
+std% 33.890455748 37.661185483 37.661185483 nan
+harm 0.024986876 0.024236549 0.024236549 nan
+geo 0.025759291 0.025373850 0.025373850 0.000000000
+q1 0.022480011 0.020000000 0.020000000 0.000000000
+med 0.022669554 0.020000000 0.020000000 0.000000000
+q3 0.024562180 0.030000000 0.030000000 0.000000000
+ 1000 37.21650 0.026869804
+ calls calls/sec secs/call
+
+ 0.05331 -|*
+ 0.05003 -|**
+ 0.04675 -|*******
+ 0.04347 -|
+ 0.04018 -|
+ 0.03690 -|
+ 0.03362 -|
+ 0.03034 -|*
+ 0.02706 -|****
+ 0.02378 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02267, iqr=0.00208, factor=3.00):
+high=77 very_high=149
+
+Ljung-Box statistics: q=3100.69443 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkPure#generator_safe:
+ real total user system
+sum 27.079979420 27.040000000 27.030000000 0.010000000
+min 0.022160053 0.020000000 0.020000000 0.000000000
+std- 0.017839790 0.016756803 0.016774061 -0.000306228
+mean 0.027079979 0.027040000 0.027030000 0.000010000
+std+ 0.036320169 0.037323197 0.037285939 0.000326228
+max 0.056457043 0.060000000 0.060000000 0.010000000
+std 0.009240189 0.010283197 0.010255939 0.000316228
+std% 34.121847738 38.029575352 37.942800504 3162.277660168
+harm 0.025134510 0.024331887 0.024329914 nan
+geo 0.025935574 0.025501913 0.025497264 0.000000000
+q1 0.022511005 0.020000000 0.020000000 0.000000000
+med 0.022763968 0.020000000 0.020000000 0.000000000
+q3 0.024686873 0.030000000 0.030000000 0.000000000
+ 1000 36.92765 0.027079979
+ calls calls/sec secs/call
+
+ 0.05474 -|
+ 0.05131 -|*
+ 0.04788 -|********
+ 0.04445 -|
+ 0.04102 -|
+ 0.03759 -|
+ 0.03416 -|
+ 0.03073 -|*
+ 0.02730 -|***
+ 0.02387 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02276, iqr=0.00218, factor=3.00):
+high=53 very_high=158
+
+Ljung-Box statistics: q=3263.81737 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+-------------------------------------------------------------------------------
+
+This first run is only for warmup.
+GeneratorBenchmarkPure#generator_fast:
+ real total user system
+sum 19.930217266 19.900000000 19.900000000 0.000000000
+min 0.015556812 0.010000000 0.010000000 0.000000000
+std- 0.010984683 0.009865525 0.009865525 0.000000000
+mean 0.019930217 0.019900000 0.019900000 0.000000000
+std+ 0.028875752 0.029934475 0.029934475 0.000000000
+max 0.048508883 0.050000000 0.050000000 0.000000000
+std 0.008945535 0.010034475 0.010034475 0.000000000
+std% 44.884280314 50.424498030 50.424498030 nan
+harm 0.017806422 0.016056519 0.016056519 nan
+geo 0.018618502 0.017792091 0.017792091 0.000000000
+q1 0.015833676 0.010000000 0.010000000 0.000000000
+med 0.016059995 0.020000000 0.020000000 0.000000000
+q3 0.016686678 0.020000000 0.020000000 0.000000000
+ 1000 50.17507 0.019930217
+ calls calls/sec secs/call
+
+ 0.04686 -|
+ 0.04357 -|**
+ 0.04027 -|******
+ 0.03698 -|
+ 0.03368 -|
+ 0.03039 -|
+ 0.02709 -|
+ 0.02379 -|*
+ 0.02050 -|**
+ 0.01720 -|**************************************************
+
+Outliers detected with box plot algo (median=0.01606, iqr=0.00085, factor=3.00):
+high=46 very_high=180
+
+Ljung-Box statistics: q=3486.59836 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkPure#generator_fast:
+ real total user system
+sum 20.008520842 19.960000000 19.950000000 0.010000000
+min 0.015434027 0.010000000 0.010000000 0.000000000
+std- 0.010882230 0.009581845 0.009596030 -0.000306228
+mean 0.020008521 0.019960000 0.019950000 0.000010000
+std+ 0.029134812 0.030338155 0.030303970 0.000326228
+max 0.047976971 0.050000000 0.050000000 0.010000000
+std 0.009126291 0.010378155 0.010353970 0.000316228
+std% 45.612021047 51.994765712 51.899601404 3162.277660168
+harm 0.017787111 0.015944725 0.015943454 nan
+geo 0.018637889 0.017737808 0.017733851 0.000000000
+q1 0.015746295 0.010000000 0.010000000 0.000000000
+med 0.015944481 0.020000000 0.020000000 0.000000000
+q3 0.016811609 0.020000000 0.020000000 0.000000000
+ 1000 49.97871 0.020008521
+ calls calls/sec secs/call
+
+ 0.04635 -|*
+ 0.04310 -|**
+ 0.03984 -|*******
+ 0.03659 -|
+ 0.03333 -|
+ 0.03008 -|
+ 0.02682 -|
+ 0.02357 -|
+ 0.02032 -|***
+ 0.01706 -|**************************************************
+
+Outliers detected with box plot algo (median=0.01594, iqr=0.00107, factor=3.00):
+high=64 very_high=166
+
+Ljung-Box statistics: q=2965.93220 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:53:33 CEST ===========================
+
+Comparing times (call_time_mean):
+ 1 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 49.978706968 ( real) -> 1.378x
+ 0.020008521
+ 2 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 36.927649925 ( real) -> 1.018x 3 (>=3859)
+ 0.027079979
+ 3 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 36.272134441 ( real) -> 1.000x 2 (>=3859)
+ 0.027569373
+ calls/sec ( time) -> speed covers
+ secs/call
+
+Comparing times (call_time_median):
+ 1 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+ 62.717626652 ( real) -> 1.465x
+ 0.015944481
+ 2 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+ 43.929073409 ( real) -> 1.026x 3 (>=3859)
+ 0.022763968
+ 3 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+ 42.802514491 ( real) -> 1.000x 2 (>=3859)
+ 0.023363113
+ calls/sec ( time) -> speed covers
+ secs/call
+===============================================================================
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_pretty.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat'.
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_safe.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat'.
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_fast.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat'.
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat
new file mode 100644
index 0000000..8817d65
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.0465724627546347
+3 -0.0538491011993629
+4 -0.0538837516678858
+5 -0.0581087152880847
+6 -0.0572986418232159
+7 -0.0599999756465123
+8 -0.068646253651936
+9 -0.0748373181827194
+10 -0.0762302382502274
+11 -0.0698190157504385
+12 -0.0638026172211339
+13 -0.056269249634719
+14 -0.0567327382445349
+15 -0.0596771394790282
+16 -0.054002423139168
+17 -0.0490317335722634
+18 0.461538736857567
+19 0.45915885478734
+20 -0.0465031134094806
+21 -0.0522729893812941
+22 -0.0556508820670087
+23 -0.0550082280116714
+24 -0.0545719306525113
+25 -0.0657168876641937
+26 -0.0693857874047984
+27 -0.0792986072802413
+28 -0.0733338236920328
+29 -0.0654333815670565
+30 -0.0571917436864775
+31 -0.0526717459233624
+32 -0.0557521787108153
+33 -0.0549975758505058
+34 -0.0517415749303995
+35 0.0235297603781655
+36 0.804189593789118
+37 0.0278204967070628
+38 -0.050024141489799
+39 -0.0518095926145569
+40 -0.0452419084747306
+41 -0.0508505065460828
+42 -0.0630761219578647
+43 -0.062815338541251
+44 -0.0772705590073707
+45 -0.0729125138410514
+46 -0.0718320579999123
+47 -0.0607354760752678
+48 -0.0537362276786008
+49 -0.0486777895346357
+50 -0.0554247873222313
+51 -0.0511645855928409
+52 -0.0466004298363093
+53 0.459873350367521
+54 0.424472275070108
+55 -0.0487047547824375
+56 -0.0545283173980978
+57 -0.0480870048405532
+58 -0.0558758950923908
+59 -0.0508952051704444
+60 -0.0620003778190341
+61 -0.0676424010473159
+62 -0.0753766989500048
+63 -0.0695341618321725
+64 -0.0663751431467297
+65 -0.0563170232338965
+66 -0.053655761264179
+67 -0.0530055660822738
+68 -0.0517420323264873
+69 -0.0456703115975304
+70 0.103335608865948
+71 0.639961232446673
+72 0.0835611643585718
+73 -0.0505874487567197
+74 -0.0544864827038179
+75 -0.05268470170316
+76 -0.0471381749128569
+77 -0.0587367141040808
+78 -0.0594188669128526
+79 -0.0650917021991912
+80 -0.068525580194848
+81 -0.0720464392408628
+82 -0.0530371585210882
+83 -0.0594974405056426
+84 -0.0468462249568105
+85 -0.0556729861678099
+86 -0.0486685569511801
+87 -0.0231831809211586
+88 0.412151261252192
+89 0.427286596751845
+90 -0.0468484487476343
+91 -0.0513065750413643
+92 -0.0506460103589642
+93 -0.0523040710285122
+94 -0.0553864194240335
+95 -0.0624298273708398
+96 -0.0629408163122051
+97 -0.0704192947779158
+98 -0.0661863417422444
+99 -0.0616198727092325
+100 -0.0549440862832691
+101 -0.0493100463446785
+102 -0.0513058903561152
+103 -0.0546567629566328
+104 -0.0447767089062448
+105 0.155994950171604
+106 0.499983838989633
+107 0.146752854694195
+108 -0.0499527760238258
+109 -0.0481994338837686
+110 -0.0507971256336303
+111 -0.053242725247733
+112 -0.0556340421399292
+113 -0.0659043126583437
+114 -0.0664898553672703
+115 -0.0623446272778118
+116 -0.0661076782182718
+117 -0.0496402401287781
+118 -0.0494603231236963
+119 -0.04785210230028
+120 -0.0549514395062738
+121 -0.0457893865901791
+122 0.0107718727916323
+123 0.354591871972286
+124 0.378214524188427
+125 -0.00576473785992366
+126 -0.0475263414095933
+127 -0.0467032507959455
+128 -0.0492439340398371
+129 -0.0553725291795042
+130 -0.0588373348224932
+131 -0.0653802923166691
+132 -0.065420878560692
+133 -0.0664825458346486
+134 -0.0585794787867471
+135 -0.0526654847715212
+136 -0.0458834268571694
+137 -0.0488834733479998
+138 -0.0484626462105708
+139 -0.0459832096817391
+140 0.217115969208045
+141 0.366645152379531
+142 0.180037374351014
+143 -0.0470069302868867
+144 -0.0448016085636167
+145 -0.0480964372087658
+146 -0.047581587974722
+147 -0.0542737921731714
+148 -0.0616712591015281
+149 -0.0645264998964167
+150 -0.0660893063296893
+151 -0.0626040533901412
+152 -0.0563401748225009
+153 -0.0489872324179382
+154 -0.0416660137613489
+155 -0.0474153625982119
+156 -0.0429322203344692
+157 0.0758981518142605
+158 0.280022168317631
+159 0.322388389335567
+160 0.029741268314489
+161 -0.0477650431020993
+162 -0.0450492975581489
+163 -0.0437136320420844
+164 -0.0525847472537078
+165 -0.0545773291954165
+166 -0.0605617971026816
+167 -0.0604174493574271
+168 -0.0668887082049361
+169 -0.0569988719330788
+170 -0.0531317736158737
+171 -0.0453847330038626
+172 -0.0478811645968217
+173 -0.0490973206952072
+174 -0.0208865958962374
+175 0.219799921570466
+176 0.281455499801039
+177 0.217413022569843
+178 -0.0472411753883375
+179 -0.0420519413404592
+180 -0.0503599257085886
+181 -0.0460149167014056
+182 -0.0525935089624673
+183 -0.058565014679309
+184 -0.0597480380605469
+185 -0.0594067588886417
+186 -0.0596129671442577
+187 -0.0532084985745771
+188 -0.0488672523172161
+189 -0.0467425993035773
+190 -0.047469398929737
+191 -0.0478812995202321
+192 0.113496325641223
+193 0.235261527843186
+194 0.274288512637064
+195 0.0686558749507578
+196 -0.0421890074761181
+197 -0.0462774420288975
+198 -0.0436343780463106
+199 -0.0526745158526506
+200 -0.0530085997416379
+201 -0.0595766365030657
+202 -0.0527520859095327
+203 -0.0617844575573737
+204 -0.0533732516707478
+205 -0.0475406344908671
+206 -0.0448557657939025
+207 -0.0491813452587493
+208 -0.0465215540303466
+209 0.0129885978681198
+210 0.18048531357979
+211 0.232613590605931
+212 0.216739579303611
+213 -0.0198642765598399
+214 -0.0414628173858397
+215 -0.0446070145491157
+216 -0.0466847454519845
+217 -0.0516226742873491
+218 -0.0545361970917439
+219 -0.0613148091516843
+220 -0.055072960413915
+221 -0.0570761596774525
+222 -0.0495753919838192
+223 -0.044640513821499
+224 -0.0405018327822807
+225 -0.0466702636420172
+226 -0.0430523088898141
+227 0.125260003795363
+228 0.191674753632075
+229 0.237532651857125
+230 0.0874635279713366
+231 -0.0384027504022232
+232 -0.0385130011851906
+233 -0.0369193020542282
+234 -0.0515458512947041
+235 -0.050306447453753
+236 -0.0581741159838659
+237 -0.052999201910556
+238 -0.0589658237786291
+239 -0.0514526377102802
+240 -0.0466869399159385
+241 -0.0380841759966984
+242 -0.0453267873931886
+243 -0.0425000608264673
+244 0.0366267109959152
+245 0.160369979130273
+246 0.196676462412679
+247 0.196963399648668
+248 -0.00269284361330376
+249 -0.0432567847711532
+250 -0.038260742578146
+251 -0.0448624744088596
+252 -0.0455503391926038
+253 -0.0532191861758754
+254 -0.0548508398385335
+255 -0.0555442566058335
+256 -0.0526918597919155
+257 -0.0496453707825256
+258 -0.0463836479193388
+259 -0.0379199031664589
+260 -0.043979755952542
+261 -0.0385836044654481
+262 0.148383243382033
+263 0.160888203514488
+264 0.201083269668142
+265 0.101463931607865
+266 -0.0389240581250844
+267 -0.043318710806698
+268 -0.0360099743646708
+269 -0.0479594556724686
+270 -0.0461272027080179
+271 -0.0510551768794275
+272 -0.0463026057033333
+273 -0.0586300566668458
+274 -0.0481537987530518
+275 -0.0467240944281063
+276 -0.0388278648519038
+277 -0.0438740084909164
+278 -0.0404201849366918
+279 0.0573087818198142
+280 0.149625568374594
+281 0.165251996461555
+282 0.180497909191808
+283 0.0141274252706337
+284 -0.0433910523077124
+285 -0.0353327138881179
+286 -0.04407012419326
+287 -0.0472875341495554
+288 -0.0500154039913527
+289 -0.0489059070454218
+290 -0.0523175481803876
+291 -0.0483438070974799
+292 -0.0465391341735897
+293 -0.0443706893358358
+294 -0.0383212232736209
+295 -0.0439923509231612
+296 -0.0179530530333497
+297 0.126953953852207
+298 0.148073497780274
+299 0.169463284775491
+300 0.12460981401008
+301 -0.0384433337210392
+302 -0.037574676038055
+303 -0.0373312294892246
+304 -0.0476939816787347
+305 -0.0485476034606885
+306 -0.053203479537681
+307 -0.0432695529453645
+308 -0.0531581165281506
+309 -0.0433332891054256
+310 -0.0406621361812071
+311 -0.0336785273069936
+312 -0.0450892345419585
+313 -0.0372803722726718
+314 0.0747413637301572
+315 0.12838403521187
+316 0.131273451158583
+317 0.165634916670676
+318 0.0393574762093495
+319 -0.0400219462092557
+320 -0.0321130988518114
+321 -0.0426329631110547
+322 -0.0472021330054887
+323 -0.0510884361963381
+324 -0.0451526836510229
+325 -0.0497432174259365
+326 -0.0494924567626408
+327 -0.0426445357005891
+328 -0.0399977780929692
+329 -0.035075954620801
+330 -0.0398937379838232
+331 0.00141601747607724
+332 0.111237045799794
+333 0.129781753698161
+334 0.148823429538605
+335 0.111428704849097
+336 -0.0189114212837953
+337 -0.0358144500870447
+338 -0.0338893528609611
+339 -0.04156202524001
+340 -0.0476279047622513
+341 -0.0479240001912479
+342 -0.0448192129885784
+343 -0.0520619488376005
+344 -0.045398294011681
+345 -0.0425448160252897
+346 -0.0301879715513119
+347 -0.039119844953792
+348 -0.0318445060292795
+349 0.0775128927560733
+350 0.133696030929458
+351 0.0934040962894178
+352 0.165037006342042
+353 0.0370713206399436
+354 -0.0370489719027206
+355 -0.0298304751416159
+356 -0.0387994185030151
+357 -0.0425739727567155
+358 -0.0469026409069165
+359 -0.0418293150822566
+360 -0.0473273219131854
+361 -0.049308019642061
+362 -0.0433284886806794
+363 -0.0369972157525989
+364 -0.0345525347288445
+365 -0.0400585889725531
+366 0.006656467274749
+367 0.11319538432443
+368 0.114967420474613
+369 0.133840368292221
+370 0.11280046677219
+371 -0.0184103961539414
+372 -0.0339399206362434
+373 -0.0341590200213704
+374 -0.0389400741910205
+375 -0.0448588461724111
+376 -0.0447120964840124
+377 -0.0401284599190171
+378 -0.0470280445927007
+379 -0.0439972690249817
+380 -0.0392994644400358
+381 -0.0331443114964012
+382 -0.0396320099995872
+383 -0.0357237280973228
+384 0.0769794799672965
+385 0.121101405134608
+386 0.100303300798787
+387 0.149213747230628
+388 0.0412712734968881
+389 -0.034428474543572
+390 -0.0309853686271892
+391 -0.037127802798713
+392 -0.0410862385400477
+393 -0.0446683655260938
+394 -0.0377779019366912
+395 -0.0432145550363202
+396 -0.0438865867392626
+397 -0.0397741719725851
+398 -0.0337532454079572
+399 -0.0345799482263535
+400 -0.0387855235790556
+401 0.0042952586621399
+402 0.114260797874283
+403 0.0962185400570627
+404 0.116302086694965
+405 0.116848660126361
+406 -0.0132599069767382
+407 -0.0326838372412273
+408 -0.031676894325753
+409 -0.0359544345578842
+410 -0.0430939231188687
+411 -0.0427909313399572
+412 -0.0392589148284163
+413 -0.0430139521930403
+414 -0.0405058980200932
+415 -0.0359005384516355
+416 -0.0297289315488662
+417 -0.0346787823837342
+418 -0.0332184590996983
+419 0.0771309823574169
+420 0.0954831808563938
+421 0.0986580814637101
+422 0.132204221810988
+423 0.0432995539287995
+424 -0.0282150289086581
+425 -0.0254088298731916
+426 -0.035952142901876
+427 -0.037552626088304
+428 -0.0405520090843967
+429 -0.0395737434856001
+430 -0.0415264891793749
+431 -0.0396875191674724
+432 -0.0384740880698292
+433 -0.0302213018176337
+434 -0.0302192627628463
+435 -0.0348307323662469
+436 0.00857082219058242
+437 0.113991981123305
+438 0.0810743348982558
+439 0.0970584251304922
+440 0.115026168034471
+441 -0.0130244881629081
+442 -0.0292031219799078
+443 -0.0308836212065116
+444 -0.0320575360367349
+445 -0.0393235092139189
+446 -0.0404817406521166
+447 -0.0375499698943704
+448 -0.0391450519157927
+449 -0.0397015347530508
+450 -0.0341587808934071
+451 -0.0310633384201306
+452 -0.0298881734250907
+453 -0.0295664081324632
+454 0.0805186281243404
+455 0.0833481690834954
+456 0.100864427083124
+457 0.111048128125141
+458 0.0464738054146592
+459 -0.0349995254836163
+460 -0.0255159736923953
+461 -0.0328764364137298
+462 -0.0338236112511505
+463 -0.0346782988250705
+464 -0.0340726935148046
+465 -0.0404234701095829
+466 -0.0356824878052483
+467 -0.0365578629303766
+468 -0.0324733709193554
+469 -0.0289648187856306
+470 -0.0320583632447268
+471 0.0109080362038411
+472 0.11757782076319
+473 0.0695324086716044
+474 0.079135520981604
+475 0.117166513712611
+476 -0.0107597842046391
+477 -0.0317910056255559
+478 -0.027713154753877
+479 -0.0328896799629515
+480 -0.0351148398263727
+481 -0.0367274328131775
+482 -0.0364350706943765
+483 -0.0352358798451258
+484 -0.0349817805140066
+485 -0.0341765926002117
+486 -0.0295770684618762
+487 -0.0265724708520466
+488 -0.0307810244464994
+489 0.0809894603579388
+490 0.0657550565427912
+491 0.106121880875152
+492 0.0974533505603275
+493 0.048238583810636
+494 -0.0288751879183889
+495 -0.0278787597095273
+496 -0.0337889205336922
+497 -0.0310688626579132
+498 -0.0384449649057626
+499 -0.0323682085966455
+500 -0.0361594385992874
+501 -0.0307937097313911
+502 -0.0313341566221988
+503 -0.0279856067641256
+504 -0.0289346840813807
+505 -0.0274872799690336
+506 0.00966555565940951
+507 0.0987720472362742
+508 0.0693890261403234
+509 0.0836756922797179
+510 0.10281770126579
+511 -0.00727787007831376
+512 -0.0258225019587932
+513 -0.0298502698700326
+514 -0.0306103473329238
+515 -0.0340826155989302
+516 -0.0355383371718098
+517 -0.0332157070791453
+518 -0.0354738192624273
+519 -0.0294010470848171
+520 -0.0310021513905682
+521 -0.0278235052216282
+522 -0.0239204460552095
+523 -0.0270969544256545
+524 0.0813764246127106
+525 0.0493102023473518
+526 0.104517332044244
+527 0.0811860139474904
+528 0.0510442031887192
+529 -0.0263637770970907
+530 -0.024755257304
+531 -0.0293388219300537
+532 -0.030007512828798
+533 -0.0323871465584352
+534 -0.0326780116025662
+535 -0.0374203204825225
+536 -0.0287231615177231
+537 -0.0332054768516264
+538 -0.0263051872864467
+539 -0.0243639277620771
+540 -0.023684344033898
+541 0.0142647324079813
+542 0.08574245660666
+543 0.0666795058595027
+544 0.0869761334698767
+545 0.0822018389405922
+546 -0.00295335814304317
+547 -0.0235452895911804
+548 -0.0281420988182953
+549 -0.0274120947938358
+550 -0.030158448744077
+551 -0.0295591560556766
+552 -0.0349368577359752
+553 -0.0326892340430509
+554 -0.0288806796544796
+555 -0.0295906146661126
+556 -0.0255785772166513
+557 -0.0247509384838002
+558 -0.0232231373627232
+559 0.0658724153140723
+560 0.0712698072158692
+561 0.0881661970571259
+562 0.0663434329796159
+563 0.0504442196817487
+564 -0.0220475381031792
+565 -0.0264520763210997
+566 -0.0262681630778278
+567 -0.0288120090469048
+568 -0.0292045667237407
+569 -0.0288062681932496
+570 -0.0330307486178301
+571 -0.0276514157813042
+572 -0.0268575483268837
+573 -0.0286764091398958
+574 -0.0281163961143271
+575 -0.0228693014048811
+576 0.0137045823052654
+577 0.0708633033596918
+578 0.0727744765379734
+579 0.0901470435080371
+580 0.0668755655920324
+581 -0.000653685262202251
+582 -0.0226994101946291
+583 -0.0270858316982201
+584 -0.0262718617327352
+585 -0.0265543856920115
+586 -0.0263771846461291
+587 -0.0319210552186977
+588 -0.029228183377507
+589 -0.0253777881177648
+590 -0.023809668956424
+591 -0.0280707574473553
+592 -0.0236140212549248
+593 -0.0228812657345804
+594 0.0486286781379677
+595 0.0898094414635747
+596 0.0508172134123107
+597 0.0901627351364118
+598 0.035844991775818
+599 -0.0203954379453198
+600 -0.0236862766959248
+601 -0.0247764225976876
+602 -0.0268581954253402
+603 -0.024001323229557
+604 -0.0303209729182735
+605 -0.0282931887611187
+606 -0.0292448557436288
+607 -0.0204578421032432
+608 -0.0248481591188926
+609 -0.0243082585401647
+610 -0.0203058655309834
+611 0.0139804741022989
+612 0.0505962449646704
+613 0.0690065939226321
+614 0.0907008020619833
+615 0.0519895469381193
+616 0.00206395484186643
+617 -0.0179281261622168
+618 -0.0227541776038619
+619 -0.0257149623750039
+620 -0.0221474812173537
+621 -0.0258958495203968
+622 -0.0291821476071184
+623 -0.0275173183668531
+624 -0.0219475947671766
+625 -0.0205864860149524
+626 -0.025198699283959
+627 -0.0196801475213126
+628 -0.0202813022751003
+629 0.0348753757737052
+630 0.0886744284826022
+631 0.0510351034421101
+632 0.0895415054055807
+633 0.0164865165554748
+634 -0.015820890351599
+635 -0.0235475303149806
+636 -0.0213487610196947
+637 -0.0223199871320358
+638 -0.0232883343131998
+639 -0.0272670686256873
+640 -0.0272994728260666
+641 -0.0251308147365066
+642 -0.0178939045831991
+643 -0.0228455395566411
+644 -0.0221674583093893
+645 -0.0181323711670327
+646 -0.000452057490636536
+647 0.0730003371658734
+648 0.0526039790662623
+649 0.0893120555725861
+650 0.0370376391850216
+651 -0.00089235639136826
+652 -0.0187548356986865
+653 -0.0202476722666913
+654 -0.0234402686094643
+655 -0.0176944079943485
+656 -0.0217419932421246
+657 -0.0252856528727102
+658 -0.0266563306764344
+659 -0.0179448089254929
+660 -0.0195530157887301
+661 -0.0242694989687706
+662 -0.0190898174037584
+663 -0.0162971087662526
+664 0.0190291931578508
+665 0.0920040569420149
+666 0.0547776230200262
+667 0.092519718174194
+668 -0.00323187468810452
+669 -0.0159810677640527
+670 -0.0185314129082898
+671 -0.0214996968543122
+672 -0.0209394743431591
+673 -0.0193460621057047
+674 -0.0257496298508357
+675 -0.0234878155623851
+676 -0.0215154679548733
+677 -0.0168154166505892
+678 -0.019623012738795
+679 -0.0222731795719489
+680 -0.0150548901993986
+681 -0.0172527061580013
+682 0.0747183966470148
+683 0.0721393781132992
+684 0.0565213941535672
+685 0.0565389116679803
+686 -0.0148388383909541
+687 -0.0189549593111703
+688 -0.0194161863407717
+689 -0.0197915076545455
+690 -0.0204244077381793
+691 -0.0218016316407433
+692 -0.0214645015602913
+693 -0.0238079641007921
+694 -0.0139629684168808
+695 -0.0156538895936235
+696 -0.021079456852115
+697 -0.0181418459552329
+698 -0.0145711876585601
+699 0.021215272535226
+700 0.0739558887973388
+701 0.0544658986157784
+702 0.0807341348823958
+703 -0.000188368345643536
+704 -0.0129199941327641
+705 -0.0180368997395347
+706 -0.0177692127800531
+707 -0.0204829544190261
+708 -0.0186632967600099
+709 -0.0204496056760325
+710 -0.023317274857146
+711 -0.0203774310283799
+712 -0.0136747501938559
+713 -0.0178116490297146
+714 -0.0189587954269383
+715 -0.0118858609089409
+716 -0.0172514569604997
+717 0.060802565704854
+718 0.0729937005677284
+719 0.0561951789698019
+720 0.042100568116198
+721 -0.0145015528092692
+722 -0.015700955312727
+723 -0.0167874521751816
+724 -0.0157176826421741
+725 -0.01783312467466
+726 -0.0220309477451877
+727 -0.0206302592507727
+728 -0.0200916933627863
+729 -0.0188778418069578
+730 -0.0113708982542668
+731 -0.0176778219523296
+732 -0.014843868366855
+733 -0.0112296460883651
+734 0.0256322345958098
+735 0.0560052205819785
+736 0.0568640232132456
+737 0.0611881586473825
+738 0.00379039852134298
+739 -0.0104730174558681
+740 -0.0164262606347393
+741 -0.0144022889870097
+742 -0.0168139620706729
+743 -0.0162615811333726
+744 -0.0196477371337629
+745 -0.0198824745918442
+746 -0.0192330305226495
+747 -0.012843462564526
+748 -0.0132891104080353
+749 -0.0181808023489715
+750 -0.0130545167379928
+751 -0.0113910229689613
+752 0.041990539641635
+753 0.0763855238906953
+754 0.0594251709620633
+755 0.0243609283015674
+756 -0.011509575108219
+757 -0.0130005756539877
+758 -0.0150890385548497
+759 -0.0139673203815592
+760 -0.0157156335728081
+761 -0.0186682466883542
+762 -0.0185554927618856
+763 -0.0162755018147282
+764 -0.0154200664197001
+765 -0.0134500863696249
+766 -0.014171081512106
+767 -0.0144636296247257
+768 -0.0126931065239486
+769 0.00886491087382969
+770 0.0582642578199214
+771 0.0786546867228701
+772 0.0272306482046141
+773 0.00822579495183492
+774 -0.011517390916366
+775 -0.0139592957633573
+776 -0.0129421565517047
+777 -0.0134986559471086
+778 -0.0136304589585504
+779 -0.0173438393070116
+780 -0.016064531677406
+781 -0.0152510664062614
+782 -0.0101822066131621
+783 -0.0130099394643087
+784 -0.0150897101751983
+785 -0.0121547232260943
+786 -0.0117824571975702
+787 0.0242515574526126
+788 0.0773173900249155
+789 0.061635146281499
+790 0.00959030625397352
+791 -0.0090693872805306
+792 -0.0112081729509553
+793 -0.0138649594742307
+794 -0.010084978733244
+795 -0.0132143360704552
+796 -0.01496302977637
+797 -0.0164140720480332
+798 -0.0137826264017484
+799 -0.0128738607141167
+800 -0.0108179181287105
+801 -0.0114389768189071
+802 -0.0115710434341599
+803 -0.00965025893918617
+804 -0.0135132422793313
+805 0.0617365766920115
+806 0.0779699523399871
+807 0.0247967756220761
+808 -0.0065090662747984
+809 -0.00857892822230665
+810 -0.0101662607994292
+811 -0.0108507653686812
+812 -0.00958246558520002
+813 -0.0144516907622999
+814 -0.0150147299589262
+815 -0.0135220759135818
+816 -0.0115211008118439
+817 -0.0104021106108387
+818 -0.00780776429502702
+819 -0.011404849912357
+820 -0.00951333011434902
+821 -0.00938572506372878
+822 0.0266216133025957
+823 0.0610181017554806
+824 0.0438869371591075
+825 0.00859504869317741
+826 -0.00699743519150731
+827 -0.00929600314682341
+828 -0.0111911531783819
+829 -0.00823625897932562
+830 -0.0100913686286367
+831 -0.0125756643002852
+832 -0.0152602353555104
+833 -0.00953260529007071
+834 -0.0100594605441607
+835 -0.00871459443751229
+836 -0.00938155933764076
+837 -0.00918618283897082
+838 -0.00755980106901216
+839 -0.0107245855066125
+840 0.0458486876264972
+841 0.0824090055093124
+842 0.00574421553061521
+843 -0.00725667517287379
+844 -0.00867494223043522
+845 -0.00829285117321785
+846 -0.00957414187855957
+847 -0.00659032223177494
+848 -0.0106624401215929
+849 -0.0122427759092887
+850 -0.0104622099267244
+851 -0.00799623147718296
+852 -0.0104382420530796
+853 -0.0075668223790859
+854 -0.00621892353946098
+855 -0.00836920759535837
+856 -0.00630014552985234
+857 0.0113479974095218
+858 0.0628686123242055
+859 0.0463260384468626
+860 -0.00865830449867469
+861 -0.00632533057369849
+862 -0.00620405394762857
+863 -0.00876475527943431
+864 -0.00910265771371557
+865 -0.00714690863853632
+866 -0.0103958026182488
+867 -0.0121633888743942
+868 -0.00676196610841381
+869 -0.00714452896204837
+870 -0.00679873891573572
+871 -0.00845680011347619
+872 -0.00625057507944579
+873 -0.00606839813409962
+874 -0.00725859558269772
+875 0.0281965759233777
+876 0.0670260741629087
+877 0.00963490036467712
+878 -0.00456245837151462
+879 -0.00755131292428571
+880 -0.00586747799683473
+881 -0.00783299131040265
+882 -0.00744370954110726
+883 -0.00915087240687255
+884 -0.00957213417268418
+885 -0.00832361596391925
+886 -0.0050340090260566
+887 -0.00755295159414475
+888 -0.00495117481094215
+889 -0.00424086001593403
+890 -0.00515343444584415
+891 -0.00744099299381077
+892 -0.00696188041633924
+893 0.0670358828192865
+894 0.0306555670430617
+895 -0.00700188318283173
+896 -0.00439483158228684
+897 -0.00440309654475794
+898 -0.00580106920715627
+899 -0.00743386431878525
+900 -0.00615300126683845
+901 -0.00852083652339179
+902 -0.00801483743475307
+903 -0.0074130347068713
+904 -0.00363565987760851
+905 -0.007955033309064
+906 -0.00193305784421065
+907 -0.0041800577189778
+908 -0.00353565656672481
+909 -0.0058551774732522
+910 0.0302595657677451
+911 0.0314102314562899
+912 0.013212750015713
+913 -0.00316630844923298
+914 -0.00520479906156008
+915 -0.00420739410816969
+916 -0.00564901350096342
+917 -0.00531128324885506
+918 -0.00606089198821065
+919 -0.00772996050306375
+920 -0.00676594704104744
+921 -0.00533751850001158
+922 -0.0058222391965106
+923 -0.00590469211682123
+924 -0.00139624368550244
+925 -0.00225770557975624
+926 -0.00430278519099915
+927 -0.00497994091066768
+928 0.0521745063047641
+929 0.0125007611461825
+930 -0.00335983528594071
+931 -0.00200633784627574
+932 -0.00192061226814783
+933 -0.00414996522579167
+934 -0.00453925170940819
+935 -0.00441610859184833
+936 -0.00487531850001996
+937 -0.00511365916811154
+938 -0.00549890284279737
+939 -0.00379682253936933
+940 -0.00404757676266654
+941 -0.00349312951783624
+942 -0.00159942004178191
+943 -0.00176952812644145
+944 -0.00366444935410891
+945 0.0162283566898874
+946 0.0320898583297591
+947 -0.00388380045409207
+948 -0.0018243911045478
+949 -0.00115125308892718
+950 -0.00149365801922153
+951 -0.00294988667592288
+952 -0.00329687293305934
+953 -0.00371267430404071
+954 -0.00407396263409427
+955 -0.00384065535263086
+956 -0.00283959971098493
+957 -0.00342824033321658
+958 -0.00321142688896053
+959 -0.00222112060678468
+960 -0.0020328615528584
+961 -0.00145605698519582
+962 -0.00287857829852364
+963 0.0183610738417914
+964 0.0154027556420478
+965 -0.00179489314871512
+966 -0.00129790436843852
+967 -0.000853980926230406
+968 -0.000666619047494671
+969 -0.00118456473308688
+970 -0.00182173221293997
+971 -0.00223763548036304
+972 -0.00250045159359336
+973 -0.00244783545512189
+974 -0.00233355012767793
+975 -0.00148662334882801
+976 -0.00109910993153004
+977 -0.00197535475727005
+978 -0.00150005492632689
+979 -0.000669782105543667
+980 -0.00133477373003284
+981 0.0173273972011934
+982 -0.00112526521664063
+983 -0.000841739351965462
+984 0.000565203827743629
+985 -0.000459312244397425
+986 -0.000418262528083788
+987 -0.000498463341452234
+988 -0.000616296957122406
+989 -0.000679296268851578
+990 -0.00084778145306077
+991 -0.000978798423497668
+992 -0.000894990113732281
+993 -0.000701461719327138
+994 -0.000511781130867642
+995 -0.000286708792038961
+996 -0.000395118651726646
+997 -0.000921290818811666
+998 -0.000781372909192289
+999 9.80848043031114e-05
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat
new file mode 100644
index 0000000..7ed81ad
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0234072208404541 0.0299999999999976 0.0299999999999976 0.0 1
+2 0.0229461193084717 0.0199999999999996 0.0199999999999996 0.0 2
+3 0.0243709087371826 0.0200000000000031 0.0200000000000031 0.0 3
+4 0.0244681835174561 0.0299999999999976 0.0299999999999976 0.0 4
+5 0.0235309600830078 0.0199999999999996 0.0199999999999996 0.0 5
+6 0.0227420330047607 0.0199999999999996 0.0199999999999996 0.0 6
+7 0.022014856338501 0.0300000000000011 0.0300000000000011 0.0 7
+8 0.0215449333190918 0.0199999999999996 0.0199999999999996 0.0 8
+9 0.0216219425201416 0.0199999999999996 0.0199999999999996 0.0 9
+10 0.0218148231506348 0.0199999999999996 0.0199999999999996 0.0 10
+11 0.0217390060424805 0.0200000000000031 0.0200000000000031 0.0 11
+12 0.0218250751495361 0.0299999999999976 0.0299999999999976 0.0 12
+13 0.0219888687133789 0.0199999999999996 0.0199999999999996 0.0 13
+14 0.021812915802002 0.0200000000000031 0.0200000000000031 0.0 14
+15 0.0244221687316895 0.0199999999999996 0.0199999999999996 0.0 15
+16 0.022874116897583 0.0299999999999976 0.0299999999999976 0.0 16
+17 0.0218498706817627 0.0199999999999996 0.0199999999999996 0.0 17
+18 0.0760290622711182 0.0700000000000003 0.0700000000000003 0.0 18
+19 0.0238790512084961 0.0300000000000011 0.0300000000000011 0.0 19
+20 0.0229480266571045 0.0199999999999996 0.0199999999999996 0.0 20
+21 0.0231330394744873 0.0199999999999996 0.0199999999999996 0.0 21
+22 0.0228769779205322 0.0300000000000011 0.0300000000000011 0.0 22
+23 0.0258219242095947 0.0199999999999996 0.0199999999999996 0.0 23
+24 0.0243449211120605 0.0300000000000011 0.0300000000000011 0.0 24
+25 0.0228381156921387 0.0199999999999996 0.0199999999999996 0.0 25
+26 0.022367000579834 0.0199999999999996 0.0199999999999996 0.0 26
+27 0.0216410160064697 0.0199999999999996 0.0199999999999996 0.0 27
+28 0.0216100215911865 0.0300000000000011 0.0300000000000011 0.0 28
+29 0.0220630168914795 0.0199999999999996 0.0199999999999996 0.0 29
+30 0.0222890377044678 0.0199999999999996 0.0199999999999996 0.0 30
+31 0.0216050148010254 0.0199999999999996 0.0199999999999996 0.0 31
+32 0.0216009616851807 0.0199999999999996 0.0199999999999996 0.0 32
+33 0.021636962890625 0.0199999999999996 0.0199999999999996 0.0 33
+34 0.0239388942718506 0.0300000000000011 0.0300000000000011 0.0 34
+35 0.021759033203125 0.0199999999999996 0.0199999999999996 0.0 35
+36 0.0811088085174561 0.0800000000000018 0.0800000000000018 0.0 36
+37 0.0229001045227051 0.0199999999999996 0.0199999999999996 0.0 37
+38 0.0228509902954102 0.0299999999999976 0.0299999999999976 0.0 38
+39 0.0228641033172607 0.0200000000000031 0.0200000000000031 0.0 39
+40 0.0229160785675049 0.0199999999999996 0.0199999999999996 0.0 40
+41 0.0227169990539551 0.0299999999999976 0.0299999999999976 0.0 41
+42 0.0228250026702881 0.0200000000000031 0.0200000000000031 0.0 42
+43 0.0261838436126709 0.0199999999999996 0.0199999999999996 0.0 43
+44 0.0234429836273193 0.0299999999999976 0.0299999999999976 0.0 44
+45 0.0215818881988525 0.0199999999999996 0.0199999999999996 0.0 45
+46 0.0215709209442139 0.0200000000000031 0.0200000000000031 0.0 46
+47 0.0215950012207031 0.0199999999999996 0.0199999999999996 0.0 47
+48 0.0215859413146973 0.0199999999999996 0.0199999999999996 0.0 48
+49 0.0217461585998535 0.0299999999999976 0.0299999999999976 0.0 49
+50 0.021589994430542 0.0200000000000031 0.0200000000000031 0.0 50
+51 0.0216829776763916 0.0199999999999996 0.0199999999999996 0.0 51
+52 0.0217359066009521 0.0199999999999996 0.0199999999999996 0.0 52
+53 0.0219109058380127 0.0199999999999996 0.0199999999999996 0.0 53
+54 0.0795738697052002 0.0799999999999983 0.0799999999999983 0.0 54
+55 0.023021936416626 0.0300000000000011 0.0300000000000011 0.0 55
+56 0.0230770111083984 0.0199999999999996 0.0199999999999996 0.0 56
+57 0.0229918956756592 0.0199999999999996 0.0199999999999996 0.0 57
+58 0.0233080387115479 0.0300000000000011 0.0300000000000011 0.0 58
+59 0.0226249694824219 0.0199999999999996 0.0199999999999996 0.0 59
+60 0.022819995880127 0.0199999999999996 0.0199999999999996 0.0 60
+61 0.0220620632171631 0.0199999999999996 0.0199999999999996 0.0 61
+62 0.0242538452148438 0.0300000000000011 0.0300000000000011 0.0 62
+63 0.0224769115447998 0.0199999999999996 0.0199999999999996 0.0 63
+64 0.0229120254516602 0.0199999999999996 0.0199999999999996 0.0 64
+65 0.0216310024261475 0.0199999999999996 0.0199999999999996 0.0 65
+66 0.0215990543365479 0.0300000000000011 0.0300000000000011 0.0 66
+67 0.0216221809387207 0.0199999999999996 0.0199999999999996 0.0 67
+68 0.0220649242401123 0.0199999999999996 0.0199999999999996 0.0 68
+69 0.0225241184234619 0.0199999999999996 0.0199999999999996 0.0 69
+70 0.0217139720916748 0.0200000000000031 0.0200000000000031 0.0 70
+71 0.0781118869781494 0.0799999999999983 0.0799999999999983 0.0 71
+72 0.0234410762786865 0.0300000000000011 0.0300000000000011 0.0 72
+73 0.0229668617248535 0.0199999999999996 0.0199999999999996 0.0 73
+74 0.0291080474853516 0.0300000000000011 0.0300000000000011 0.0 74
+75 0.0240139961242676 0.0199999999999996 0.0199999999999996 0.0 75
+76 0.0226550102233887 0.0199999999999996 0.0199999999999996 0.0 76
+77 0.0226681232452393 0.0299999999999976 0.0299999999999976 0.0 77
+78 0.0226988792419434 0.0200000000000031 0.0200000000000031 0.0 78
+79 0.0223758220672607 0.0199999999999996 0.0199999999999996 0.0 79
+80 0.0216100215911865 0.0199999999999996 0.0199999999999996 0.0 80
+81 0.0216431617736816 0.0300000000000011 0.0300000000000011 0.0 81
+82 0.0247490406036377 0.0199999999999996 0.0199999999999996 0.0 82
+83 0.023237943649292 0.0199999999999996 0.0199999999999996 0.0 83
+84 0.0217869281768799 0.0299999999999976 0.0299999999999976 0.0 84
+85 0.0216598510742188 0.0200000000000031 0.0200000000000031 0.0 85
+86 0.0217628479003906 0.0199999999999996 0.0199999999999996 0.0 86
+87 0.0218119621276855 0.0199999999999996 0.0199999999999996 0.0 87
+88 0.0217659473419189 0.0199999999999996 0.0199999999999996 0.0 88
+89 0.0768370628356934 0.0799999999999983 0.0799999999999983 0.0 89
+90 0.025317907333374 0.0200000000000031 0.0200000000000031 0.0 90
+91 0.0233399868011475 0.0299999999999976 0.0299999999999976 0.0 91
+92 0.0232961177825928 0.0199999999999996 0.0199999999999996 0.0 92
+93 0.0227580070495605 0.0199999999999996 0.0199999999999996 0.0 93
+94 0.0227789878845215 0.0300000000000011 0.0300000000000011 0.0 94
+95 0.0228569507598877 0.0199999999999996 0.0199999999999996 0.0 95
+96 0.0226337909698486 0.0199999999999996 0.0199999999999996 0.0 96
+97 0.0222299098968506 0.0300000000000011 0.0300000000000011 0.0 97
+98 0.0214722156524658 0.0199999999999996 0.0199999999999996 0.0 98
+99 0.0216591358184814 0.0199999999999996 0.0199999999999996 0.0 99
+100 0.0215888023376465 0.0199999999999996 0.0199999999999996 0.0 100
+101 0.0234711170196533 0.0200000000000031 0.0200000000000031 0.0 101
+102 0.0229098796844482 0.0299999999999976 0.0299999999999976 0.0 102
+103 0.0220291614532471 0.0199999999999996 0.0199999999999996 0.0 103
+104 0.0216660499572754 0.0199999999999996 0.0199999999999996 0.0 104
+105 0.0216059684753418 0.0200000000000031 0.0200000000000031 0.0 105
+106 0.0761630535125732 0.0799999999999983 0.0799999999999983 0.0 106
+107 0.0231220722198486 0.0199999999999996 0.0199999999999996 0.0 107
+108 0.0229330062866211 0.0199999999999996 0.0199999999999996 0.0 108
+109 0.0230400562286377 0.0300000000000011 0.0300000000000011 0.0 109
+110 0.0250980854034424 0.0199999999999996 0.0199999999999996 0.0 110
+111 0.0231518745422363 0.0300000000000011 0.0300000000000011 0.0 111
+112 0.0227048397064209 0.0199999999999996 0.0199999999999996 0.0 112
+113 0.0284969806671143 0.0300000000000011 0.0300000000000011 0.0 113
+114 0.0239260196685791 0.0199999999999996 0.0199999999999996 0.0 114
+115 0.0219199657440186 0.0199999999999996 0.0199999999999996 0.0 115
+116 0.0215260982513428 0.0199999999999996 0.0199999999999996 0.0 116
+117 0.0215198993682861 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.0216398239135742 0.0199999999999996 0.0199999999999996 0.0 118
+119 0.0215740203857422 0.0199999999999996 0.0199999999999996 0.0 119
+120 0.0216050148010254 0.0199999999999996 0.0199999999999996 0.0 120
+121 0.0247631072998047 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.0225539207458496 0.0199999999999996 0.0199999999999996 0.0 122
+123 0.0218660831451416 0.0199999999999996 0.0199999999999996 0.0 123
+124 0.0765988826751709 0.0799999999999983 0.0799999999999983 0.0 124
+125 0.0230319499969482 0.0199999999999996 0.0199999999999996 0.0 125
+126 0.0229179859161377 0.0200000000000031 0.0200000000000031 0.0 126
+127 0.0229899883270264 0.0299999999999976 0.0299999999999976 0.0 127
+128 0.0230929851531982 0.0199999999999996 0.0199999999999996 0.0 128
+129 0.024507999420166 0.0200000000000031 0.0200000000000031 0.0 129
+130 0.0237898826599121 0.0299999999999976 0.0299999999999976 0.0 130
+131 0.0237009525299072 0.0199999999999996 0.0199999999999996 0.0 131
+132 0.0220949649810791 0.0199999999999996 0.0199999999999996 0.0 132
+133 0.0216069221496582 0.0300000000000011 0.0300000000000011 0.0 133
+134 0.0217080116271973 0.0199999999999996 0.0199999999999996 0.0 134
+135 0.0218410491943359 0.0199999999999996 0.0199999999999996 0.0 135
+136 0.0222909450531006 0.0199999999999996 0.0199999999999996 0.0 136
+137 0.0216519832611084 0.0200000000000031 0.0200000000000031 0.0 137
+138 0.0217440128326416 0.0299999999999976 0.0299999999999976 0.0 138
+139 0.0217659473419189 0.0199999999999996 0.0199999999999996 0.0 139
+140 0.0218610763549805 0.0200000000000031 0.0200000000000031 0.0 140
+141 0.0243120193481445 0.0199999999999996 0.0199999999999996 0.0 141
+142 0.0773770809173584 0.0799999999999983 0.0799999999999983 0.0 142
+143 0.0230779647827148 0.0199999999999996 0.0199999999999996 0.0 143
+144 0.022913932800293 0.0300000000000011 0.0300000000000011 0.0 144
+145 0.0239241123199463 0.0199999999999996 0.0199999999999996 0.0 145
+146 0.0227971076965332 0.0199999999999996 0.0199999999999996 0.0 146
+147 0.0230598449707031 0.0300000000000011 0.0300000000000011 0.0 147
+148 0.0227980613708496 0.0200000000000031 0.0199999999999996 0.0 148
+149 0.0250101089477539 0.019999999999996 0.0199999999999996 0.0 149
+150 0.0231060981750488 0.0300000000000011 0.0300000000000011 0.0 150
+151 0.021589994430542 0.0200000000000031 0.0199999999999996 0.0 151
+152 0.0279331207275391 0.029999999999994 0.0299999999999976 0.0 152
+153 0.0230989456176758 0.0200000000000031 0.0200000000000031 0.0 153
+154 0.0220518112182617 0.019999999999996 0.019999999999996 0.0 154
+155 0.02158522605896 0.0200000000000031 0.0200000000000031 0.0 155
+156 0.0215890407562256 0.0300000000000011 0.0300000000000011 0.0 156
+157 0.021787166595459 0.019999999999996 0.019999999999996 0.0 157
+158 0.0218689441680908 0.0200000000000031 0.0200000000000031 0.0 158
+159 0.0797779560089111 0.0799999999999983 0.0799999999999983 0.0 159
+160 0.0232160091400146 0.0200000000000031 0.0200000000000031 0.0 160
+161 0.0228378772735596 0.019999999999996 0.019999999999996 0.0 161
+162 0.02286696434021 0.0300000000000011 0.0300000000000011 0.0 162
+163 0.0227479934692383 0.0200000000000031 0.0200000000000031 0.0 163
+164 0.0228869915008545 0.019999999999996 0.019999999999996 0.0 164
+165 0.0226659774780273 0.0300000000000011 0.0300000000000011 0.0 165
+166 0.022770881652832 0.0200000000000031 0.0200000000000031 0.0 166
+167 0.0226860046386719 0.019999999999996 0.019999999999996 0.0 167
+168 0.0242869853973389 0.0300000000000011 0.0300000000000011 0.0 168
+169 0.0219647884368896 0.0200000000000031 0.0200000000000031 0.0 169
+170 0.0227658748626709 0.019999999999996 0.019999999999996 0.0 170
+171 0.0217809677124023 0.0200000000000031 0.0200000000000031 0.0 171
+172 0.0216867923736572 0.019999999999996 0.019999999999996 0.0 172
+173 0.0220091342926025 0.0300000000000011 0.0300000000000011 0.0 173
+174 0.0218439102172852 0.0200000000000031 0.0200000000000031 0.0 174
+175 0.0223178863525391 0.019999999999996 0.019999999999996 0.0 175
+176 0.0216579437255859 0.0200000000000031 0.0200000000000031 0.0 176
+177 0.0791630744934082 0.0799999999999983 0.0799999999999983 0.0 177
+178 0.0234289169311523 0.0300000000000011 0.0300000000000011 0.0 178
+179 0.0239951610565186 0.019999999999996 0.019999999999996 0.0 179
+180 0.0231759548187256 0.0200000000000031 0.0200000000000031 0.0 180
+181 0.0228521823883057 0.0300000000000011 0.0300000000000011 0.0 181
+182 0.0234448909759521 0.019999999999996 0.019999999999996 0.0 182
+183 0.0231420993804932 0.0200000000000031 0.0200000000000031 0.0 183
+184 0.0229649543762207 0.0300000000000011 0.0300000000000011 0.0 184
+185 0.0216999053955078 0.019999999999996 0.019999999999996 0.0 185
+186 0.0214908123016357 0.0200000000000031 0.0200000000000031 0.0 186
+187 0.0216050148010254 0.019999999999996 0.019999999999996 0.0 187
+188 0.0253100395202637 0.0200000000000031 0.0200000000000031 0.0 188
+189 0.0231828689575195 0.0300000000000011 0.0300000000000011 0.0 189
+190 0.021651029586792 0.019999999999996 0.019999999999996 0.0 190
+191 0.0281798839569092 0.0300000000000011 0.0300000000000011 0.0 191
+192 0.0221288204193115 0.0200000000000031 0.0200000000000031 0.0 192
+193 0.0217571258544922 0.019999999999996 0.019999999999996 0.0 193
+194 0.0757858753204346 0.0800000000000054 0.0800000000000054 0.0 194
+195 0.0231471061706543 0.019999999999996 0.019999999999996 0.0 195
+196 0.0251290798187256 0.0300000000000011 0.0300000000000011 0.0 196
+197 0.0239238739013672 0.0200000000000031 0.0200000000000031 0.0 197
+198 0.0237748622894287 0.019999999999996 0.019999999999996 0.0 198
+199 0.0228419303894043 0.0300000000000011 0.0300000000000011 0.0 199
+200 0.0227909088134766 0.0200000000000031 0.0200000000000031 0.0 200
+201 0.0227510929107666 0.019999999999996 0.019999999999996 0.0 201
+202 0.0226459503173828 0.0200000000000031 0.0200000000000031 0.0 202
+203 0.0219879150390625 0.0300000000000011 0.0300000000000011 0.0 203
+204 0.0215039253234863 0.019999999999996 0.019999999999996 0.0 204
+205 0.021712064743042 0.0200000000000031 0.0200000000000031 0.0 205
+206 0.0217649936676025 0.019999999999996 0.019999999999996 0.0 206
+207 0.0244510173797607 0.0300000000000011 0.0300000000000011 0.0 207
+208 0.0221529006958008 0.0200000000000031 0.0200000000000031 0.0 208
+209 0.0231170654296875 0.019999999999996 0.019999999999996 0.0 209
+210 0.0216870307922363 0.0200000000000031 0.0200000000000031 0.0 210
+211 0.0216608047485352 0.019999999999996 0.019999999999996 0.0 211
+212 0.0771470069885254 0.0800000000000054 0.0800000000000054 0.0 212
+213 0.0229711532592773 0.019999999999996 0.019999999999996 0.0 213
+214 0.0230278968811035 0.0300000000000011 0.0300000000000011 0.0 214
+215 0.0230338573455811 0.019999999999996 0.019999999999996 0.0 215
+216 0.0260100364685059 0.0300000000000011 0.0300000000000011 0.0 216
+217 0.0238170623779297 0.0200000000000031 0.0200000000000031 0.0 217
+218 0.0228071212768555 0.019999999999996 0.019999999999996 0.0 218
+219 0.0227000713348389 0.0300000000000011 0.0300000000000011 0.0 219
+220 0.0220599174499512 0.0200000000000031 0.0200000000000031 0.0 220
+221 0.0216770172119141 0.019999999999996 0.019999999999996 0.0 221
+222 0.0224151611328125 0.0200000000000031 0.0200000000000031 0.0 222
+223 0.0217008590698242 0.0200000000000031 0.0200000000000031 0.0 223
+224 0.0216941833496094 0.029999999999994 0.029999999999994 0.0 224
+225 0.0216820240020752 0.0200000000000031 0.0200000000000031 0.0 225
+226 0.0217270851135254 0.019999999999996 0.019999999999996 0.0 226
+227 0.0246779918670654 0.0200000000000031 0.0200000000000031 0.0 227
+228 0.0233469009399414 0.0300000000000011 0.0300000000000011 0.0 228
+229 0.0217921733856201 0.019999999999996 0.019999999999996 0.0 229
+230 0.0832829475402832 0.0800000000000054 0.0800000000000054 0.0 230
+231 0.02298903465271 0.019999999999996 0.019999999999996 0.0 231
+232 0.0229618549346924 0.0300000000000011 0.0300000000000011 0.0 232
+233 0.0230050086975098 0.0200000000000031 0.0200000000000031 0.0 233
+234 0.022770881652832 0.019999999999996 0.019999999999996 0.0 234
+235 0.0257570743560791 0.0300000000000011 0.0300000000000011 0.0 235
+236 0.0234668254852295 0.0200000000000031 0.0200000000000031 0.0 236
+237 0.0224740505218506 0.029999999999994 0.029999999999994 0.0 237
+238 0.0215451717376709 0.0200000000000031 0.0200000000000031 0.0 238
+239 0.0215630531311035 0.0200000000000031 0.0200000000000031 0.0 239
+240 0.0216259956359863 0.019999999999996 0.019999999999996 0.0 240
+241 0.0215809345245361 0.0200000000000031 0.0200000000000031 0.0 241
+242 0.0216450691223145 0.019999999999996 0.019999999999996 0.0 242
+243 0.0215449333190918 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0216479301452637 0.0200000000000031 0.0200000000000031 0.0 244
+245 0.0218291282653809 0.019999999999996 0.019999999999996 0.0 245
+246 0.0227890014648438 0.0200000000000031 0.0200000000000031 0.0 246
+247 0.0793211460113525 0.0799999999999983 0.0799999999999983 0.0 247
+248 0.0230979919433594 0.0200000000000031 0.0200000000000031 0.0 248
+249 0.0230920314788818 0.029999999999994 0.029999999999994 0.0 249
+250 0.0235588550567627 0.0200000000000031 0.0200000000000031 0.0 250
+251 0.0228121280670166 0.0200000000000031 0.0200000000000031 0.0 251
+252 0.0227479934692383 0.029999999999994 0.029999999999994 0.0 252
+253 0.0227429866790771 0.0200000000000031 0.0200000000000031 0.0 253
+254 0.0227539539337158 0.019999999999996 0.019999999999996 0.0 254
+255 0.0255939960479736 0.0300000000000011 0.0300000000000011 0.0 255
+256 0.0225818157196045 0.0200000000000031 0.0200000000000031 0.0 256
+257 0.0216748714447021 0.019999999999996 0.019999999999996 0.0 257
+258 0.0216860771179199 0.0200000000000031 0.0200000000000031 0.0 258
+259 0.0217640399932861 0.0300000000000011 0.0300000000000011 0.0 259
+260 0.0218229293823242 0.019999999999996 0.019999999999996 0.0 260
+261 0.0217108726501465 0.0200000000000031 0.0200000000000031 0.0 261
+262 0.0230560302734375 0.0200000000000031 0.0200000000000031 0.0 262
+263 0.0218439102172852 0.019999999999996 0.019999999999996 0.0 263
+264 0.0216600894927979 0.0200000000000031 0.0200000000000031 0.0 264
+265 0.0821051597595215 0.0899999999999963 0.0899999999999963 0.0 265
+266 0.0255589485168457 0.0200000000000031 0.0200000000000031 0.0 266
+267 0.0274901390075684 0.0300000000000011 0.0300000000000011 0.0 267
+268 0.0230200290679932 0.019999999999996 0.019999999999996 0.0 268
+269 0.0227861404418945 0.0200000000000031 0.0200000000000031 0.0 269
+270 0.0227971076965332 0.0300000000000011 0.0300000000000011 0.0 270
+271 0.0227358341217041 0.019999999999996 0.019999999999996 0.0 271
+272 0.0242559909820557 0.0200000000000031 0.0200000000000031 0.0 272
+273 0.0217318534851074 0.029999999999994 0.029999999999994 0.0 273
+274 0.0250978469848633 0.0200000000000031 0.0200000000000031 0.0 274
+275 0.0236959457397461 0.0200000000000031 0.0200000000000031 0.0 275
+276 0.0217390060424805 0.029999999999994 0.029999999999994 0.0 276
+277 0.0216028690338135 0.0200000000000031 0.0200000000000031 0.0 277
+278 0.0216250419616699 0.0200000000000031 0.0200000000000031 0.0 278
+279 0.0216012001037598 0.019999999999996 0.019999999999996 0.0 279
+280 0.0216450691223145 0.0200000000000031 0.0200000000000031 0.0 280
+281 0.0217640399932861 0.019999999999996 0.019999999999996 0.0 281
+282 0.076016902923584 0.0799999999999983 0.0799999999999983 0.0 282
+283 0.0259561538696289 0.0300000000000011 0.0300000000000011 0.0 283
+284 0.024043083190918 0.0200000000000031 0.0200000000000031 0.0 284
+285 0.0230240821838379 0.019999999999996 0.019999999999996 0.0 285
+286 0.0229220390319824 0.0300000000000011 0.0300000000000011 0.0 286
+287 0.0229079723358154 0.0200000000000031 0.0200000000000031 0.0 287
+288 0.0228331089019775 0.019999999999996 0.019999999999996 0.0 288
+289 0.0232009887695312 0.0300000000000011 0.0300000000000011 0.0 289
+290 0.0225679874420166 0.0200000000000031 0.0200000000000031 0.0 290
+291 0.021859884262085 0.019999999999996 0.019999999999996 0.0 291
+292 0.0215480327606201 0.0200000000000031 0.0200000000000031 0.0 292
+293 0.0216219425201416 0.019999999999996 0.019999999999996 0.0 293
+294 0.0247988700866699 0.0300000000000011 0.0300000000000011 0.0 294
+295 0.0220661163330078 0.0200000000000031 0.0200000000000031 0.0 295
+296 0.0218551158905029 0.019999999999996 0.019999999999996 0.0 296
+297 0.0216910839080811 0.0200000000000031 0.0200000000000031 0.0 297
+298 0.0218009948730469 0.0300000000000011 0.0300000000000011 0.0 298
+299 0.0217809677124023 0.019999999999996 0.019999999999996 0.0 299
+300 0.0773510932922363 0.0800000000000054 0.0800000000000054 0.0 300
+301 0.0230739116668701 0.019999999999996 0.019999999999996 0.0 301
+302 0.0251951217651367 0.0200000000000031 0.0200000000000031 0.0 302
+303 0.0236630439758301 0.0300000000000011 0.0300000000000011 0.0 303
+304 0.0231490135192871 0.019999999999996 0.019999999999996 0.0 304
+305 0.029649019241333 0.0300000000000011 0.0300000000000011 0.0 305
+306 0.0232720375061035 0.0200000000000031 0.0200000000000031 0.0 306
+307 0.0227010250091553 0.029999999999994 0.029999999999994 0.0 307
+308 0.0219080448150635 0.0200000000000031 0.0200000000000031 0.0 308
+309 0.0215001106262207 0.0200000000000031 0.0200000000000031 0.0 309
+310 0.0215349197387695 0.019999999999996 0.019999999999996 0.0 310
+311 0.0216870307922363 0.0200000000000031 0.0200000000000031 0.0 311
+312 0.0215351581573486 0.019999999999996 0.019999999999996 0.0 312
+313 0.0247399806976318 0.0300000000000011 0.0300000000000011 0.0 313
+314 0.0232751369476318 0.0200000000000031 0.0200000000000031 0.0 314
+315 0.0219449996948242 0.019999999999996 0.019999999999996 0.0 315
+316 0.0216867923736572 0.0300000000000011 0.0300000000000011 0.0 316
+317 0.0756809711456299 0.0700000000000003 0.0700000000000003 0.0 317
+318 0.0230629444122314 0.0300000000000011 0.0300000000000011 0.0 318
+319 0.0229449272155762 0.019999999999996 0.019999999999996 0.0 319
+320 0.0231809616088867 0.0200000000000031 0.0200000000000031 0.0 320
+321 0.0229148864746094 0.019999999999996 0.019999999999996 0.0 321
+322 0.0256710052490234 0.0300000000000011 0.0300000000000011 0.0 322
+323 0.0237009525299072 0.0200000000000031 0.0200000000000031 0.0 323
+324 0.0227048397064209 0.0300000000000011 0.0300000000000011 0.0 324
+325 0.0226731300354004 0.019999999999996 0.019999999999996 0.0 325
+326 0.0221679210662842 0.0200000000000031 0.0200000000000031 0.0 326
+327 0.0216591358184814 0.019999999999996 0.019999999999996 0.0 327
+328 0.0220868587493896 0.0300000000000011 0.0300000000000011 0.0 328
+329 0.0215578079223633 0.0200000000000031 0.0200000000000031 0.0 329
+330 0.0216000080108643 0.019999999999996 0.019999999999996 0.0 330
+331 0.0216810703277588 0.0200000000000031 0.0200000000000031 0.0 331
+332 0.0217440128326416 0.019999999999996 0.019999999999996 0.0 332
+333 0.024817943572998 0.0300000000000011 0.0300000000000011 0.0 333
+334 0.0228419303894043 0.0200000000000031 0.0200000000000031 0.0 334
+335 0.0767669677734375 0.0799999999999983 0.0799999999999983 0.0 335
+336 0.0229949951171875 0.0200000000000031 0.0200000000000031 0.0 336
+337 0.0237720012664795 0.019999999999996 0.019999999999996 0.0 337
+338 0.0229918956756592 0.0300000000000011 0.0300000000000011 0.0 338
+339 0.0228021144866943 0.0200000000000031 0.0200000000000031 0.0 339
+340 0.0227911472320557 0.019999999999996 0.019999999999996 0.0 340
+341 0.0249691009521484 0.0300000000000011 0.0300000000000011 0.0 341
+342 0.0228381156921387 0.0200000000000031 0.0200000000000031 0.0 342
+343 0.0229289531707764 0.019999999999996 0.019999999999996 0.0 343
+344 0.028364896774292 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0216519832611084 0.0200000000000031 0.0200000000000031 0.0 345
+346 0.0216679573059082 0.029999999999994 0.029999999999994 0.0 346
+347 0.0215489864349365 0.0200000000000031 0.0200000000000031 0.0 347
+348 0.0216460227966309 0.0200000000000031 0.0200000000000031 0.0 348
+349 0.0217490196228027 0.019999999999996 0.019999999999996 0.0 349
+350 0.0217440128326416 0.0200000000000031 0.0200000000000031 0.0 350
+351 0.0216310024261475 0.019999999999996 0.019999999999996 0.0 351
+352 0.0248680114746094 0.0300000000000011 0.0300000000000011 0.0 352
+353 0.0779280662536621 0.0799999999999983 0.0799999999999983 0.0 353
+354 0.0229990482330322 0.0200000000000031 0.0200000000000031 0.0 354
+355 0.02298903465271 0.019999999999996 0.019999999999996 0.0 355
+356 0.0229768753051758 0.0300000000000011 0.0300000000000011 0.0 356
+357 0.0228021144866943 0.0200000000000031 0.0200000000000031 0.0 357
+358 0.0227739810943604 0.019999999999996 0.019999999999996 0.0 358
+359 0.0229020118713379 0.0200000000000031 0.0200000000000031 0.0 359
+360 0.0220818519592285 0.0300000000000011 0.0300000000000011 0.0 360
+361 0.024421215057373 0.019999999999996 0.019999999999996 0.0 361
+362 0.0219769477844238 0.0200000000000031 0.0200000000000031 0.0 362
+363 0.0216801166534424 0.0300000000000011 0.0300000000000011 0.0 363
+364 0.0218110084533691 0.019999999999996 0.019999999999996 0.0 364
+365 0.0219409465789795 0.0200000000000031 0.0200000000000031 0.0 365
+366 0.0218820571899414 0.019999999999996 0.019999999999996 0.0 366
+367 0.0223009586334229 0.0200000000000031 0.0200000000000031 0.0 367
+368 0.0218269824981689 0.0300000000000011 0.0300000000000011 0.0 368
+369 0.0217530727386475 0.019999999999996 0.019999999999996 0.0 369
+370 0.0778021812438965 0.0700000000000003 0.0700000000000003 0.0 370
+371 0.0233700275421143 0.0300000000000011 0.0300000000000011 0.0 371
+372 0.0233359336853027 0.0200000000000031 0.0200000000000031 0.0 372
+373 0.0229201316833496 0.019999999999996 0.019999999999996 0.0 373
+374 0.0229110717773438 0.0300000000000011 0.0300000000000011 0.0 374
+375 0.0227591991424561 0.0200000000000031 0.0200000000000031 0.0 375
+376 0.023568868637085 0.019999999999996 0.019999999999996 0.0 376
+377 0.022733211517334 0.0300000000000011 0.0300000000000011 0.0 377
+378 0.0221920013427734 0.0200000000000031 0.0200000000000031 0.0 378
+379 0.0215809345245361 0.019999999999996 0.019999999999996 0.0 379
+380 0.0231049060821533 0.0200000000000031 0.0200000000000031 0.0 380
+381 0.0227119922637939 0.0300000000000011 0.0300000000000011 0.0 381
+382 0.0230410099029541 0.019999999999996 0.019999999999996 0.0 382
+383 0.0276191234588623 0.0300000000000011 0.0300000000000011 0.0 383
+384 0.0234389305114746 0.0200000000000031 0.0200000000000031 0.0 384
+385 0.0217380523681641 0.019999999999996 0.019999999999996 0.0 385
+386 0.0216379165649414 0.0200000000000031 0.0200000000000031 0.0 386
+387 0.0217010974884033 0.0300000000000011 0.0300000000000011 0.0 387
+388 0.0771059989929199 0.0699999999999932 0.0699999999999932 0.0 388
+389 0.0259981155395508 0.0300000000000011 0.0300000000000011 0.0 389
+390 0.0245940685272217 0.0200000000000031 0.0200000000000031 0.0 390
+391 0.0229830741882324 0.0300000000000011 0.0300000000000011 0.0 391
+392 0.0227859020233154 0.019999999999996 0.019999999999996 0.0 392
+393 0.0226709842681885 0.0200000000000031 0.0200000000000031 0.0 393
+394 0.0227479934692383 0.0300000000000011 0.0300000000000011 0.0 394
+395 0.0223689079284668 0.019999999999996 0.019999999999996 0.0 395
+396 0.0215182304382324 0.0200000000000031 0.0200000000000031 0.0 396
+397 0.0214920043945312 0.019999999999996 0.019999999999996 0.0 397
+398 0.0217499732971191 0.0200000000000031 0.0200000000000031 0.0 398
+399 0.021583080291748 0.019999999999996 0.019999999999996 0.0 399
+400 0.0245871543884277 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.0234861373901367 0.0200000000000031 0.0200000000000031 0.0 401
+402 0.0216600894927979 0.019999999999996 0.019999999999996 0.0 402
+403 0.0216600894927979 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.021885871887207 0.0200000000000031 0.0200000000000031 0.0 404
+405 0.0772140026092529 0.0799999999999983 0.0799999999999983 0.0 405
+406 0.0230650901794434 0.0200000000000031 0.0200000000000031 0.0 406
+407 0.0229761600494385 0.019999999999996 0.019999999999996 0.0 407
+408 0.0251660346984863 0.0300000000000011 0.0300000000000011 0.0 408
+409 0.0232548713684082 0.0200000000000031 0.0200000000000031 0.0 409
+410 0.0238220691680908 0.019999999999996 0.019999999999996 0.0 410
+411 0.0227861404418945 0.0300000000000011 0.0300000000000011 0.0 411
+412 0.0226359367370605 0.0200000000000031 0.0200000000000031 0.0 412
+413 0.0224370956420898 0.019999999999996 0.019999999999996 0.0 413
+414 0.0216140747070312 0.0200000000000031 0.0200000000000031 0.0 414
+415 0.0223848819732666 0.0300000000000011 0.0300000000000011 0.0 415
+416 0.0215442180633545 0.019999999999996 0.019999999999996 0.0 416
+417 0.0215690135955811 0.0200000000000031 0.0200000000000031 0.0 417
+418 0.0216190814971924 0.019999999999996 0.019999999999996 0.0 418
+419 0.0228719711303711 0.0200000000000031 0.0200000000000031 0.0 419
+420 0.0226399898529053 0.0300000000000011 0.0300000000000011 0.0 420
+421 0.0236082077026367 0.019999999999996 0.019999999999996 0.0 421
+422 0.0264570713043213 0.0300000000000011 0.0300000000000011 0.0 422
+423 0.0789790153503418 0.0799999999999983 0.0799999999999983 0.0 423
+424 0.0229339599609375 0.0200000000000031 0.0200000000000031 0.0 424
+425 0.0229668617248535 0.019999999999996 0.019999999999996 0.0 425
+426 0.02298903465271 0.0200000000000031 0.0200000000000031 0.0 426
+427 0.0229198932647705 0.0300000000000011 0.0300000000000011 0.0 427
+428 0.0257198810577393 0.019999999999996 0.019999999999996 0.0 428
+429 0.0243279933929443 0.0300000000000011 0.0300000000000011 0.0 429
+430 0.022507905960083 0.0200000000000031 0.0200000000000031 0.0 430
+431 0.0216341018676758 0.019999999999996 0.019999999999996 0.0 431
+432 0.0214908123016357 0.0200000000000031 0.0200000000000031 0.0 432
+433 0.0215690135955811 0.0300000000000011 0.0300000000000011 0.0 433
+434 0.0216338634490967 0.019999999999996 0.019999999999996 0.0 434
+435 0.0216329097747803 0.0200000000000031 0.0200000000000031 0.0 435
+436 0.0217580795288086 0.019999999999996 0.019999999999996 0.0 436
+437 0.0218169689178467 0.0200000000000031 0.0200000000000031 0.0 437
+438 0.0216329097747803 0.019999999999996 0.019999999999996 0.0 438
+439 0.0245261192321777 0.0300000000000011 0.0300000000000011 0.0 439
+440 0.0769329071044922 0.0700000000000003 0.0700000000000003 0.0 440
+441 0.0231759548187256 0.0300000000000011 0.0300000000000011 0.0 441
+442 0.0230391025543213 0.0200000000000031 0.0200000000000031 0.0 442
+443 0.0233399868011475 0.019999999999996 0.019999999999996 0.0 443
+444 0.0227611064910889 0.0300000000000011 0.0300000000000011 0.0 444
+445 0.0228729248046875 0.0200000000000031 0.0200000000000031 0.0 445
+446 0.0227501392364502 0.019999999999996 0.019999999999996 0.0 446
+447 0.0253760814666748 0.0300000000000011 0.0300000000000011 0.0 447
+448 0.0228900909423828 0.0200000000000031 0.0200000000000031 0.0 448
+449 0.0227060317993164 0.019999999999996 0.019999999999996 0.0 449
+450 0.0215671062469482 0.0300000000000011 0.0300000000000011 0.0 450
+451 0.0215458869934082 0.0200000000000031 0.0200000000000031 0.0 451
+452 0.0216641426086426 0.019999999999996 0.019999999999996 0.0 452
+453 0.0215919017791748 0.0200000000000031 0.0200000000000031 0.0 453
+454 0.022503137588501 0.019999999999996 0.019999999999996 0.0 454
+455 0.0216779708862305 0.0300000000000011 0.0300000000000011 0.0 455
+456 0.0216538906097412 0.0200000000000031 0.0200000000000031 0.0 456
+457 0.0217761993408203 0.019999999999996 0.019999999999996 0.0 457
+458 0.0798358917236328 0.0799999999999983 0.0799999999999983 0.0 458
+459 0.0303719043731689 0.0300000000000011 0.0300000000000011 0.0 459
+460 0.0229458808898926 0.0200000000000031 0.0200000000000031 0.0 460
+461 0.0229299068450928 0.019999999999996 0.019999999999996 0.0 461
+462 0.0227961540222168 0.019999999999996 0.019999999999996 0.0 462
+463 0.0226409435272217 0.0200000000000031 0.0200000000000031 0.0 463
+464 0.0226771831512451 0.019999999999996 0.019999999999996 0.0 464
+465 0.0224730968475342 0.0300000000000011 0.0300000000000011 0.0 465
+466 0.0218050479888916 0.0200000000000031 0.0200000000000031 0.0 466
+467 0.025601863861084 0.019999999999996 0.019999999999996 0.0 467
+468 0.0238199234008789 0.0300000000000011 0.0300000000000011 0.0 468
+469 0.0232160091400146 0.0200000000000031 0.0200000000000031 0.0 469
+470 0.0216109752655029 0.019999999999996 0.019999999999996 0.0 470
+471 0.0216319561004639 0.0200000000000031 0.0200000000000031 0.0 471
+472 0.0216560363769531 0.019999999999996 0.019999999999996 0.0 472
+473 0.021658182144165 0.0300000000000011 0.0300000000000011 0.0 473
+474 0.0217010974884033 0.0200000000000031 0.0200000000000031 0.0 474
+475 0.0779910087585449 0.0799999999999983 0.0799999999999983 0.0 475
+476 0.0244100093841553 0.0200000000000031 0.0200000000000031 0.0 476
+477 0.026054859161377 0.029999999999994 0.029999999999994 0.0 477
+478 0.022968053817749 0.0200000000000031 0.0200000000000031 0.0 478
+479 0.0229709148406982 0.0200000000000031 0.0200000000000031 0.0 479
+480 0.0229671001434326 0.019999999999996 0.019999999999996 0.0 480
+481 0.0232329368591309 0.0300000000000011 0.0300000000000011 0.0 481
+482 0.0227680206298828 0.0200000000000031 0.0200000000000031 0.0 482
+483 0.0224251747131348 0.019999999999996 0.019999999999996 0.0 483
+484 0.021751880645752 0.0300000000000011 0.0300000000000011 0.0 484
+485 0.0215151309967041 0.019999999999996 0.019999999999996 0.0 485
+486 0.0246729850769043 0.0200000000000031 0.0200000000000031 0.0 486
+487 0.0227639675140381 0.0200000000000031 0.0200000000000031 0.0 487
+488 0.0219759941101074 0.029999999999994 0.029999999999994 0.0 488
+489 0.0217058658599854 0.0200000000000031 0.0200000000000031 0.0 489
+490 0.0216960906982422 0.0200000000000031 0.0200000000000031 0.0 490
+491 0.0218369960784912 0.019999999999996 0.019999999999996 0.0 491
+492 0.0217111110687256 0.0200000000000031 0.0200000000000031 0.0 492
+493 0.078171968460083 0.0799999999999983 0.0799999999999983 0.0 493
+494 0.0229799747467041 0.019999999999996 0.019999999999996 0.0 494
+495 0.0272798538208008 0.0300000000000011 0.0300000000000011 0.0 495
+496 0.0244588851928711 0.0200000000000031 0.0200000000000031 0.0 496
+497 0.028217077255249 0.0300000000000011 0.0300000000000011 0.0 497
+498 0.0241749286651611 0.0300000000000011 0.0300000000000011 0.0 498
+499 0.0227570533752441 0.019999999999996 0.019999999999996 0.0 499
+500 0.022475004196167 0.0200000000000031 0.0200000000000031 0.0 500
+501 0.021665096282959 0.019999999999996 0.019999999999996 0.0 501
+502 0.021481990814209 0.0300000000000011 0.0300000000000011 0.0 502
+503 0.0216250419616699 0.0200000000000031 0.0200000000000031 0.0 503
+504 0.0215671062469482 0.019999999999996 0.019999999999996 0.0 504
+505 0.0225341320037842 0.0200000000000031 0.0200000000000031 0.0 505
+506 0.0243070125579834 0.0300000000000011 0.0300000000000011 0.0 506
+507 0.0236639976501465 0.019999999999996 0.019999999999996 0.0 507
+508 0.021744966506958 0.0200000000000031 0.0200000000000031 0.0 508
+509 0.0216488838195801 0.019999999999996 0.019999999999996 0.0 509
+510 0.0759198665618896 0.0800000000000054 0.0800000000000054 0.0 510
+511 0.0230319499969482 0.019999999999996 0.019999999999996 0.0 511
+512 0.0232639312744141 0.0300000000000011 0.0300000000000011 0.0 512
+513 0.022974967956543 0.019999999999996 0.019999999999996 0.0 513
+514 0.0257279872894287 0.0200000000000031 0.0200000000000031 0.0 514
+515 0.0243010520935059 0.0300000000000011 0.0300000000000011 0.0 515
+516 0.0226881504058838 0.019999999999996 0.019999999999996 0.0 516
+517 0.0226349830627441 0.0200000000000031 0.0200000000000031 0.0 517
+518 0.0224928855895996 0.0300000000000011 0.0300000000000011 0.0 518
+519 0.0218918323516846 0.019999999999996 0.019999999999996 0.0 519
+520 0.0220029354095459 0.0200000000000031 0.0200000000000031 0.0 520
+521 0.0215179920196533 0.0200000000000031 0.0200000000000031 0.0 521
+522 0.0215981006622314 0.019999999999996 0.019999999999996 0.0 522
+523 0.0216679573059082 0.0300000000000011 0.0300000000000011 0.0 523
+524 0.0216460227966309 0.019999999999996 0.019999999999996 0.0 524
+525 0.0247371196746826 0.0200000000000031 0.0200000000000031 0.0 525
+526 0.0231599807739258 0.0300000000000011 0.0300000000000011 0.0 526
+527 0.021859884262085 0.019999999999996 0.019999999999996 0.0 527
+528 0.0768899917602539 0.0700000000000003 0.0700000000000003 0.0 528
+529 0.0238020420074463 0.0300000000000011 0.0300000000000011 0.0 529
+530 0.0229949951171875 0.0200000000000031 0.0200000000000031 0.0 530
+531 0.0229158401489258 0.019999999999996 0.019999999999996 0.0 531
+532 0.0228259563446045 0.0300000000000011 0.0300000000000011 0.0 532
+533 0.0230560302734375 0.0200000000000031 0.0200000000000031 0.0 533
+534 0.0252690315246582 0.0300000000000011 0.0300000000000011 0.0 534
+535 0.0236430168151855 0.019999999999996 0.019999999999996 0.0 535
+536 0.029339075088501 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.0215559005737305 0.0200000000000031 0.0200000000000031 0.0 537
+538 0.0222070217132568 0.019999999999996 0.019999999999996 0.0 538
+539 0.0215811729431152 0.0200000000000031 0.0200000000000031 0.0 539
+540 0.0215599536895752 0.0300000000000011 0.0300000000000011 0.0 540
+541 0.0217399597167969 0.019999999999996 0.019999999999996 0.0 541
+542 0.0217771530151367 0.0200000000000031 0.0200000000000031 0.0 542
+543 0.0216219425201416 0.019999999999996 0.019999999999996 0.0 543
+544 0.0232682228088379 0.0200000000000031 0.0200000000000031 0.0 544
+545 0.0793290138244629 0.0799999999999983 0.0799999999999983 0.0 545
+546 0.0229940414428711 0.0300000000000011 0.0300000000000011 0.0 546
+547 0.022838830947876 0.019999999999996 0.019999999999996 0.0 547
+548 0.0229969024658203 0.0200000000000031 0.0200000000000031 0.0 548
+549 0.0229189395904541 0.0300000000000011 0.0300000000000011 0.0 549
+550 0.0227901935577393 0.019999999999996 0.019999999999996 0.0 550
+551 0.0229239463806152 0.0200000000000031 0.0200000000000031 0.0 551
+552 0.022730827331543 0.019999999999996 0.019999999999996 0.0 552
+553 0.0253369808197021 0.0300000000000011 0.0300000000000011 0.0 553
+554 0.0220980644226074 0.0200000000000031 0.0200000000000031 0.0 554
+555 0.0214731693267822 0.019999999999996 0.019999999999996 0.0 555
+556 0.0215020179748535 0.0300000000000011 0.0300000000000011 0.0 556
+557 0.0217249393463135 0.0200000000000031 0.0200000000000031 0.0 557
+558 0.0217740535736084 0.019999999999996 0.019999999999996 0.0 558
+559 0.022136926651001 0.0200000000000031 0.0200000000000031 0.0 559
+560 0.021636962890625 0.0200000000000031 0.0200000000000031 0.0 560
+561 0.0216689109802246 0.019999999999996 0.019999999999996 0.0 561
+562 0.0218231678009033 0.0300000000000011 0.0300000000000011 0.0 562
+563 0.0795009136199951 0.0799999999999983 0.0799999999999983 0.0 563
+564 0.0232501029968262 0.0200000000000031 0.0200000000000031 0.0 564
+565 0.0230040550231934 0.019999999999996 0.019999999999996 0.0 565
+566 0.0230789184570312 0.0300000000000011 0.0300000000000011 0.0 566
+567 0.0227739810943604 0.0200000000000031 0.0200000000000031 0.0 567
+568 0.0235750675201416 0.019999999999996 0.019999999999996 0.0 568
+569 0.0226988792419434 0.0200000000000031 0.0200000000000031 0.0 569
+570 0.0223028659820557 0.0300000000000011 0.0300000000000011 0.0 570
+571 0.0216829776763916 0.019999999999996 0.019999999999996 0.0 571
+572 0.0214540958404541 0.0200000000000031 0.0200000000000031 0.0 572
+573 0.0238778591156006 0.019999999999996 0.019999999999996 0.0 573
+574 0.0230958461761475 0.0300000000000011 0.0300000000000011 0.0 574
+575 0.0280261039733887 0.0300000000000011 0.0300000000000011 0.0 575
+576 0.0220839977264404 0.0200000000000031 0.0200000000000031 0.0 576
+577 0.0217299461364746 0.019999999999996 0.019999999999996 0.0 577
+578 0.0215981006622314 0.0200000000000031 0.0200000000000031 0.0 578
+579 0.0216739177703857 0.019999999999996 0.019999999999996 0.0 579
+580 0.0760340690612793 0.0799999999999983 0.0799999999999983 0.0 580
+581 0.0261681079864502 0.0200000000000031 0.0200000000000031 0.0 581
+582 0.0245881080627441 0.0300000000000011 0.0300000000000011 0.0 582
+583 0.0231649875640869 0.019999999999996 0.019999999999996 0.0 583
+584 0.0228891372680664 0.0300000000000011 0.0300000000000011 0.0 584
+585 0.0227940082550049 0.0200000000000031 0.0200000000000031 0.0 585
+586 0.0227079391479492 0.019999999999996 0.019999999999996 0.0 586
+587 0.0227351188659668 0.0200000000000031 0.0200000000000031 0.0 587
+588 0.0223979949951172 0.0300000000000011 0.0300000000000011 0.0 588
+589 0.0217239856719971 0.019999999999996 0.019999999999996 0.0 589
+590 0.0216400623321533 0.0200000000000031 0.0200000000000031 0.0 590
+591 0.0222110748291016 0.019999999999996 0.019999999999996 0.0 591
+592 0.0244839191436768 0.0300000000000011 0.0300000000000011 0.0 592
+593 0.0231800079345703 0.0200000000000031 0.0200000000000031 0.0 593
+594 0.0216829776763916 0.019999999999996 0.019999999999996 0.0 594
+595 0.0216670036315918 0.0200000000000031 0.0200000000000031 0.0 595
+596 0.0216989517211914 0.0200000000000031 0.0200000000000031 0.0 596
+597 0.0218870639801025 0.039999999999992 0.029999999999994 0.01 597
+598 0.077578067779541 0.0700000000000003 0.0700000000000003 0.0 598
+599 0.0230538845062256 0.0300000000000011 0.0300000000000011 0.0 599
+600 0.0230109691619873 0.0200000000000031 0.0200000000000031 0.0 600
+601 0.0260770320892334 0.0300000000000011 0.0300000000000011 0.0 601
+602 0.0238099098205566 0.019999999999996 0.019999999999996 0.0 602
+603 0.0228049755096436 0.0200000000000031 0.0200000000000031 0.0 603
+604 0.0226948261260986 0.019999999999996 0.019999999999996 0.0 604
+605 0.0223379135131836 0.0300000000000011 0.0300000000000011 0.0 605
+606 0.0216000080108643 0.0200000000000031 0.0200000000000031 0.0 606
+607 0.0224909782409668 0.019999999999996 0.019999999999996 0.0 607
+608 0.0216529369354248 0.0200000000000031 0.0200000000000031 0.0 608
+609 0.0217139720916748 0.019999999999996 0.019999999999996 0.0 609
+610 0.0218150615692139 0.0300000000000011 0.0300000000000011 0.0 610
+611 0.0217039585113525 0.0200000000000031 0.0200000000000031 0.0 611
+612 0.0246798992156982 0.019999999999996 0.019999999999996 0.0 612
+613 0.0233089923858643 0.0300000000000011 0.0300000000000011 0.0 613
+614 0.0297579765319824 0.0300000000000011 0.0300000000000011 0.0 614
+615 0.0762190818786621 0.0700000000000003 0.0700000000000003 0.0 615
+616 0.0230169296264648 0.0200000000000031 0.0200000000000031 0.0 616
+617 0.0229558944702148 0.029999999999994 0.029999999999994 0.0 617
+618 0.0230798721313477 0.0200000000000031 0.0200000000000031 0.0 618
+619 0.0230178833007812 0.019999999999996 0.019999999999996 0.0 619
+620 0.0257527828216553 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0235459804534912 0.0200000000000031 0.0200000000000031 0.0 621
+622 0.0228161811828613 0.0300000000000011 0.0300000000000011 0.0 622
+623 0.022197961807251 0.019999999999996 0.019999999999996 0.0 623
+624 0.021589994430542 0.0200000000000031 0.0200000000000031 0.0 624
+625 0.0214920043945312 0.019999999999996 0.019999999999996 0.0 625
+626 0.0215818881988525 0.0200000000000031 0.0200000000000031 0.0 626
+627 0.021651029586792 0.0300000000000011 0.0300000000000011 0.0 627
+628 0.0215868949890137 0.019999999999996 0.019999999999996 0.0 628
+629 0.0218029022216797 0.0200000000000031 0.0200000000000031 0.0 629
+630 0.0216500759124756 0.019999999999996 0.019999999999996 0.0 630
+631 0.0244319438934326 0.0200000000000031 0.0200000000000031 0.0 631
+632 0.0230758190155029 0.0300000000000011 0.0300000000000011 0.0 632
+633 0.077272891998291 0.0799999999999983 0.0799999999999983 0.0 633
+634 0.0236070156097412 0.0200000000000031 0.0200000000000031 0.0 634
+635 0.0229601860046387 0.019999999999996 0.019999999999996 0.0 635
+636 0.0228729248046875 0.0200000000000031 0.0200000000000031 0.0 636
+637 0.0228011608123779 0.0300000000000011 0.0300000000000011 0.0 637
+638 0.0227499008178711 0.019999999999996 0.019999999999996 0.0 638
+639 0.0244989395141602 0.0200000000000031 0.0200000000000031 0.0 639
+640 0.0235378742218018 0.0200000000000031 0.0200000000000031 0.0 640
+641 0.0223779678344727 0.019999999999996 0.019999999999996 0.0 641
+642 0.0215990543365479 0.0200000000000031 0.0200000000000031 0.0 642
+643 0.0215990543365479 0.019999999999996 0.019999999999996 0.0 643
+644 0.0219650268554688 0.0300000000000011 0.0300000000000011 0.0 644
+645 0.0215990543365479 0.0200000000000031 0.0200000000000031 0.0 645
+646 0.0224740505218506 0.019999999999996 0.019999999999996 0.0 646
+647 0.0216758251190186 0.0200000000000031 0.0200000000000031 0.0 647
+648 0.0216619968414307 0.019999999999996 0.019999999999996 0.0 648
+649 0.0221309661865234 0.0300000000000011 0.0300000000000011 0.0 649
+650 0.0787041187286377 0.0700000000000003 0.0700000000000003 0.0 650
+651 0.0299739837646484 0.0300000000000011 0.0300000000000011 0.0 651
+652 0.0230100154876709 0.0200000000000031 0.0200000000000031 0.0 652
+653 0.0230507850646973 0.019999999999996 0.019999999999996 0.0 653
+654 0.0228569507598877 0.0200000000000031 0.0200000000000031 0.0 654
+655 0.0227470397949219 0.0300000000000011 0.0300000000000011 0.0 655
+656 0.0226500034332275 0.019999999999996 0.019999999999996 0.0 656
+657 0.0228099822998047 0.0200000000000031 0.0200000000000031 0.0 657
+658 0.0222539901733398 0.019999999999996 0.019999999999996 0.0 658
+659 0.0245277881622314 0.0300000000000011 0.0300000000000011 0.0 659
+660 0.0224230289459229 0.0200000000000031 0.0200000000000031 0.0 660
+661 0.0216460227966309 0.019999999999996 0.019999999999996 0.0 661
+662 0.0215950012207031 0.0300000000000011 0.0300000000000011 0.0 662
+663 0.0216000080108643 0.0200000000000031 0.0200000000000031 0.0 663
+664 0.0216140747070312 0.019999999999996 0.019999999999996 0.0 664
+665 0.021726131439209 0.0200000000000031 0.0200000000000031 0.0 665
+666 0.0217559337615967 0.0200000000000031 0.0200000000000031 0.0 666
+667 0.0218238830566406 0.019999999999996 0.019999999999996 0.0 667
+668 0.0802149772644043 0.0799999999999983 0.0799999999999983 0.0 668
+669 0.0245440006256104 0.0300000000000011 0.0300000000000011 0.0 669
+670 0.0230040550231934 0.0200000000000031 0.0200000000000031 0.0 670
+671 0.02288818359375 0.019999999999996 0.019999999999996 0.0 671
+672 0.0228390693664551 0.0300000000000011 0.0300000000000011 0.0 672
+673 0.023313045501709 0.0200000000000031 0.0200000000000031 0.0 673
+674 0.0226609706878662 0.019999999999996 0.019999999999996 0.0 674
+675 0.0220029354095459 0.0300000000000011 0.0300000000000011 0.0 675
+676 0.0215702056884766 0.0200000000000031 0.0200000000000031 0.0 676
+677 0.0216479301452637 0.019999999999996 0.019999999999996 0.0 677
+678 0.0215539932250977 0.0200000000000031 0.0200000000000031 0.0 678
+679 0.0247859954833984 0.0300000000000011 0.0300000000000011 0.0 679
+680 0.0219168663024902 0.019999999999996 0.019999999999996 0.0 680
+681 0.0216579437255859 0.0200000000000031 0.0200000000000031 0.0 681
+682 0.0216360092163086 0.019999999999996 0.019999999999996 0.0 682
+683 0.0217740535736084 0.0200000000000031 0.0200000000000031 0.0 683
+684 0.0216720104217529 0.019999999999996 0.019999999999996 0.0 684
+685 0.076854944229126 0.0800000000000054 0.0800000000000054 0.0 685
+686 0.0229959487915039 0.019999999999996 0.019999999999996 0.0 686
+687 0.0258049964904785 0.0300000000000011 0.0300000000000011 0.0 687
+688 0.0232279300689697 0.0200000000000031 0.0200000000000031 0.0 688
+689 0.0251309871673584 0.029999999999994 0.029999999999994 0.0 689
+690 0.0279409885406494 0.0300000000000011 0.0300000000000011 0.0 690
+691 0.0227260589599609 0.0200000000000031 0.0200000000000031 0.0 691
+692 0.0227479934692383 0.019999999999996 0.019999999999996 0.0 692
+693 0.0219731330871582 0.0200000000000031 0.0200000000000031 0.0 693
+694 0.0215420722961426 0.0300000000000011 0.0300000000000011 0.0 694
+695 0.0214939117431641 0.019999999999996 0.019999999999996 0.0 695
+696 0.0216901302337646 0.0200000000000031 0.0200000000000031 0.0 696
+697 0.0216901302337646 0.019999999999996 0.019999999999996 0.0 697
+698 0.0246269702911377 0.0200000000000031 0.0200000000000031 0.0 698
+699 0.0231730937957764 0.0300000000000011 0.0300000000000011 0.0 699
+700 0.021737813949585 0.019999999999996 0.019999999999996 0.0 700
+701 0.0217559337615967 0.0200000000000031 0.0200000000000031 0.0 701
+702 0.0756359100341797 0.0799999999999983 0.0799999999999983 0.0 702
+703 0.0232179164886475 0.0200000000000031 0.0200000000000031 0.0 703
+704 0.0229458808898926 0.019999999999996 0.019999999999996 0.0 704
+705 0.0230169296264648 0.0300000000000011 0.0300000000000011 0.0 705
+706 0.0228660106658936 0.0200000000000031 0.0200000000000031 0.0 706
+707 0.0257608890533447 0.0300000000000011 0.0300000000000011 0.0 707
+708 0.0230529308319092 0.019999999999996 0.019999999999996 0.0 708
+709 0.0226249694824219 0.0200000000000031 0.0200000000000031 0.0 709
+710 0.0225780010223389 0.019999999999996 0.019999999999996 0.0 710
+711 0.0220761299133301 0.0300000000000011 0.0300000000000011 0.0 711
+712 0.0221598148345947 0.0200000000000031 0.0200000000000031 0.0 712
+713 0.0215129852294922 0.019999999999996 0.019999999999996 0.0 713
+714 0.0216219425201416 0.0200000000000031 0.0200000000000031 0.0 714
+715 0.0215890407562256 0.019999999999996 0.019999999999996 0.0 715
+716 0.0216820240020752 0.0200000000000031 0.0200000000000031 0.0 716
+717 0.0216300487518311 0.0300000000000011 0.0300000000000011 0.0 717
+718 0.0247721672058105 0.019999999999996 0.019999999999996 0.0 718
+719 0.0220820903778076 0.0200000000000031 0.0200000000000031 0.0 719
+720 0.0769851207733154 0.0799999999999983 0.0799999999999983 0.0 720
+721 0.0229990482330322 0.0200000000000031 0.0200000000000031 0.0 721
+722 0.024212121963501 0.0300000000000011 0.0300000000000011 0.0 722
+723 0.0229740142822266 0.019999999999996 0.019999999999996 0.0 723
+724 0.0227351188659668 0.0200000000000031 0.0200000000000031 0.0 724
+725 0.0226562023162842 0.029999999999994 0.029999999999994 0.0 725
+726 0.0255320072174072 0.0200000000000031 0.0200000000000031 0.0 726
+727 0.0227208137512207 0.0200000000000031 0.0200000000000031 0.0 727
+728 0.0237081050872803 0.029999999999994 0.029999999999994 0.0 728
+729 0.0268452167510986 0.0200000000000031 0.0200000000000031 0.0 729
+730 0.0218770503997803 0.0300000000000011 0.0300000000000011 0.0 730
+731 0.0217039585113525 0.019999999999996 0.019999999999996 0.0 731
+732 0.0215818881988525 0.0200000000000031 0.0200000000000031 0.0 732
+733 0.0217380523681641 0.0200000000000031 0.0200000000000031 0.0 733
+734 0.0216901302337646 0.019999999999996 0.019999999999996 0.0 734
+735 0.0217649936676025 0.0300000000000011 0.0300000000000011 0.0 735
+736 0.0216591358184814 0.019999999999996 0.019999999999996 0.0 736
+737 0.0809669494628906 0.0800000000000054 0.0800000000000054 0.0 737
+738 0.0230050086975098 0.019999999999996 0.019999999999996 0.0 738
+739 0.0229599475860596 0.0200000000000031 0.0200000000000031 0.0 739
+740 0.0229651927947998 0.0300000000000011 0.0300000000000011 0.0 740
+741 0.0228550434112549 0.019999999999996 0.019999999999996 0.0 741
+742 0.0228068828582764 0.0200000000000031 0.0200000000000031 0.0 742
+743 0.022993803024292 0.0300000000000011 0.0300000000000011 0.0 743
+744 0.0227200984954834 0.019999999999996 0.019999999999996 0.0 744
+745 0.02242112159729 0.0200000000000031 0.0200000000000031 0.0 745
+746 0.0246379375457764 0.0300000000000011 0.0300000000000011 0.0 746
+747 0.0218410491943359 0.019999999999996 0.019999999999996 0.0 747
+748 0.0215339660644531 0.0200000000000031 0.0200000000000031 0.0 748
+749 0.0215659141540527 0.019999999999996 0.019999999999996 0.0 749
+750 0.0216779708862305 0.0200000000000031 0.0200000000000031 0.0 750
+751 0.0216810703277588 0.019999999999996 0.019999999999996 0.0 751
+752 0.0221710205078125 0.0300000000000011 0.0300000000000011 0.0 752
+753 0.0216331481933594 0.0200000000000031 0.0200000000000031 0.0 753
+754 0.0217230319976807 0.019999999999996 0.019999999999996 0.0 754
+755 0.0797798633575439 0.0800000000000054 0.0800000000000054 0.0 755
+756 0.0233240127563477 0.019999999999996 0.019999999999996 0.0 756
+757 0.0232129096984863 0.0300000000000011 0.0300000000000011 0.0 757
+758 0.0233068466186523 0.0200000000000031 0.0200000000000031 0.0 758
+759 0.0228340625762939 0.019999999999996 0.019999999999996 0.0 759
+760 0.0226619243621826 0.0300000000000011 0.0300000000000011 0.0 760
+761 0.0235550403594971 0.0200000000000031 0.0200000000000031 0.0 761
+762 0.0222749710083008 0.019999999999996 0.019999999999996 0.0 762
+763 0.0216190814971924 0.0200000000000031 0.0200000000000031 0.0 763
+764 0.0215640068054199 0.019999999999996 0.019999999999996 0.0 764
+765 0.0237760543823242 0.0300000000000011 0.0300000000000011 0.0 765
+766 0.0217039585113525 0.0200000000000031 0.0200000000000031 0.0 766
+767 0.0219049453735352 0.019999999999996 0.019999999999996 0.0 767
+768 0.0291330814361572 0.0300000000000011 0.0300000000000011 0.0 768
+769 0.0216200351715088 0.0200000000000031 0.0200000000000031 0.0 769
+770 0.0217278003692627 0.019999999999996 0.019999999999996 0.0 770
+771 0.0217189788818359 0.0300000000000011 0.0300000000000011 0.0 771
+772 0.0760140419006348 0.0700000000000003 0.0700000000000003 0.0 772
+773 0.0230591297149658 0.0300000000000011 0.0300000000000011 0.0 773
+774 0.0260210037231445 0.019999999999996 0.019999999999996 0.0 774
+775 0.0247459411621094 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.0229299068450928 0.0200000000000031 0.0200000000000031 0.0 776
+777 0.0227248668670654 0.019999999999996 0.019999999999996 0.0 777
+778 0.022636890411377 0.0300000000000011 0.0300000000000011 0.0 778
+779 0.0227160453796387 0.0200000000000031 0.0200000000000031 0.0 779
+780 0.0222170352935791 0.019999999999996 0.019999999999996 0.0 780
+781 0.0216178894042969 0.0200000000000031 0.0200000000000031 0.0 781
+782 0.0216701030731201 0.019999999999996 0.019999999999996 0.0 782
+783 0.0215609073638916 0.0300000000000011 0.0300000000000011 0.0 783
+784 0.0215671062469482 0.0200000000000031 0.0200000000000031 0.0 784
+785 0.0244979858398438 0.019999999999996 0.019999999999996 0.0 785
+786 0.02254319190979 0.0200000000000031 0.0200000000000031 0.0 786
+787 0.0216531753540039 0.0300000000000011 0.0300000000000011 0.0 787
+788 0.0216619968414307 0.019999999999996 0.019999999999996 0.0 788
+789 0.0218989849090576 0.0200000000000031 0.0200000000000031 0.0 789
+790 0.0775949954986572 0.0799999999999983 0.0799999999999983 0.0 790
+791 0.0229768753051758 0.0200000000000031 0.0200000000000031 0.0 791
+792 0.0230350494384766 0.019999999999996 0.019999999999996 0.0 792
+793 0.0247578620910645 0.0300000000000011 0.0300000000000011 0.0 793
+794 0.0241599082946777 0.0200000000000031 0.0200000000000031 0.0 794
+795 0.0229189395904541 0.029999999999994 0.029999999999994 0.0 795
+796 0.0227510929107666 0.0200000000000031 0.0200000000000031 0.0 796
+797 0.0223112106323242 0.0200000000000031 0.0200000000000031 0.0 797
+798 0.0216238498687744 0.019999999999996 0.019999999999996 0.0 798
+799 0.0216000080108643 0.0200000000000031 0.0200000000000031 0.0 799
+800 0.0226099491119385 0.0300000000000011 0.0300000000000011 0.0 800
+801 0.0218279361724854 0.019999999999996 0.019999999999996 0.0 801
+802 0.0216817855834961 0.0200000000000031 0.0200000000000031 0.0 802
+803 0.0218219757080078 0.019999999999996 0.019999999999996 0.0 803
+804 0.0220489501953125 0.0200000000000031 0.0200000000000031 0.0 804
+805 0.0245721340179443 0.0300000000000011 0.0300000000000011 0.0 805
+806 0.0237100124359131 0.019999999999996 0.019999999999996 0.0 806
+807 0.0831229686737061 0.0900000000000034 0.0900000000000034 0.0 807
+808 0.0229980945587158 0.019999999999996 0.019999999999996 0.0 808
+809 0.0230069160461426 0.0200000000000031 0.0200000000000031 0.0 809
+810 0.0229578018188477 0.019999999999996 0.019999999999996 0.0 810
+811 0.0229570865631104 0.0300000000000011 0.0300000000000011 0.0 811
+812 0.0228419303894043 0.0200000000000031 0.0200000000000031 0.0 812
+813 0.0257079601287842 0.0300000000000011 0.0300000000000011 0.0 813
+814 0.0235209465026855 0.019999999999996 0.019999999999996 0.0 814
+815 0.0221221446990967 0.0200000000000031 0.0200000000000031 0.0 815
+816 0.0214879512786865 0.019999999999996 0.019999999999996 0.0 816
+817 0.0215079784393311 0.0300000000000011 0.0300000000000011 0.0 817
+818 0.0216140747070312 0.0200000000000031 0.0200000000000031 0.0 818
+819 0.0216760635375977 0.019999999999996 0.019999999999996 0.0 819
+820 0.021683931350708 0.0200000000000031 0.0200000000000031 0.0 820
+821 0.0217459201812744 0.019999999999996 0.019999999999996 0.0 821
+822 0.0217831134796143 0.0200000000000031 0.0200000000000031 0.0 822
+823 0.0216968059539795 0.0300000000000011 0.0300000000000011 0.0 823
+824 0.0794470310211182 0.0799999999999983 0.0799999999999983 0.0 824
+825 0.0230400562286377 0.0200000000000031 0.0200000000000031 0.0 825
+826 0.0233430862426758 0.019999999999996 0.019999999999996 0.0 826
+827 0.023482084274292 0.0300000000000011 0.0300000000000011 0.0 827
+828 0.0228879451751709 0.0200000000000031 0.0200000000000031 0.0 828
+829 0.0232207775115967 0.019999999999996 0.019999999999996 0.0 829
+830 0.0228579044342041 0.0200000000000031 0.0200000000000031 0.0 830
+831 0.022691011428833 0.029999999999994 0.029999999999994 0.0 831
+832 0.024960994720459 0.0200000000000031 0.0200000000000031 0.0 832
+833 0.0226261615753174 0.0200000000000031 0.0200000000000031 0.0 833
+834 0.0222339630126953 0.029999999999994 0.029999999999994 0.0 834
+835 0.0216858386993408 0.0200000000000031 0.0200000000000031 0.0 835
+836 0.0216341018676758 0.0200000000000031 0.0200000000000031 0.0 836
+837 0.0216710567474365 0.019999999999996 0.019999999999996 0.0 837
+838 0.0217170715332031 0.0200000000000031 0.0200000000000031 0.0 838
+839 0.0223820209503174 0.0300000000000011 0.0300000000000011 0.0 839
+840 0.0218658447265625 0.019999999999996 0.019999999999996 0.0 840
+841 0.0216851234436035 0.0200000000000031 0.0200000000000031 0.0 841
+842 0.0797119140625 0.0799999999999983 0.0799999999999983 0.0 842
+843 0.0296900272369385 0.0300000000000011 0.0300000000000011 0.0 843
+844 0.023921012878418 0.019999999999996 0.019999999999996 0.0 844
+845 0.0230309963226318 0.0300000000000011 0.0300000000000011 0.0 845
+846 0.0227670669555664 0.0200000000000031 0.0200000000000031 0.0 846
+847 0.0226919651031494 0.019999999999996 0.019999999999996 0.0 847
+848 0.0227150917053223 0.0200000000000031 0.0200000000000031 0.0 848
+849 0.0224990844726562 0.0300000000000011 0.0300000000000011 0.0 849
+850 0.0217578411102295 0.019999999999996 0.019999999999996 0.0 850
+851 0.0215840339660645 0.0200000000000031 0.0200000000000031 0.0 851
+852 0.0246429443359375 0.0300000000000011 0.0300000000000011 0.0 852
+853 0.0232079029083252 0.019999999999996 0.019999999999996 0.0 853
+854 0.0217320919036865 0.0200000000000031 0.0200000000000031 0.0 854
+855 0.0215840339660645 0.019999999999996 0.019999999999996 0.0 855
+856 0.0217161178588867 0.0200000000000031 0.0200000000000031 0.0 856
+857 0.0216400623321533 0.0300000000000011 0.0300000000000011 0.0 857
+858 0.0217981338500977 0.019999999999996 0.019999999999996 0.0 858
+859 0.0765349864959717 0.0700000000000003 0.0700000000000003 0.0 859
+860 0.0244770050048828 0.0300000000000011 0.0300000000000011 0.0 860
+861 0.0246331691741943 0.0200000000000031 0.0200000000000031 0.0 861
+862 0.0232968330383301 0.029999999999994 0.029999999999994 0.0 862
+863 0.0228350162506104 0.0200000000000031 0.0200000000000031 0.0 863
+864 0.0228140354156494 0.0200000000000031 0.0200000000000031 0.0 864
+865 0.0230000019073486 0.029999999999994 0.029999999999994 0.0 865
+866 0.0231919288635254 0.0200000000000031 0.0200000000000031 0.0 866
+867 0.0222370624542236 0.0200000000000031 0.0200000000000031 0.0 867
+868 0.0216059684753418 0.019999999999996 0.019999999999996 0.0 868
+869 0.0215280055999756 0.0200000000000031 0.0200000000000031 0.0 869
+870 0.0218400955200195 0.029999999999994 0.029999999999994 0.0 870
+871 0.0238420963287354 0.0200000000000031 0.0200000000000031 0.0 871
+872 0.0222158432006836 0.0200000000000031 0.0200000000000031 0.0 872
+873 0.0229439735412598 0.029999999999994 0.029999999999994 0.0 873
+874 0.022014856338501 0.0200000000000031 0.0200000000000031 0.0 874
+875 0.0218870639801025 0.0200000000000031 0.0200000000000031 0.0 875
+876 0.0765628814697266 0.0799999999999983 0.0799999999999983 0.0 876
+877 0.0229649543762207 0.019999999999996 0.019999999999996 0.0 877
+878 0.0228400230407715 0.0200000000000031 0.0200000000000031 0.0 878
+879 0.0230231285095215 0.019999999999996 0.019999999999996 0.0 879
+880 0.0252189636230469 0.0300000000000011 0.0300000000000011 0.0 880
+881 0.0232028961181641 0.0200000000000031 0.0200000000000031 0.0 881
+882 0.0295140743255615 0.0300000000000011 0.0300000000000011 0.0 882
+883 0.0227620601654053 0.0300000000000011 0.0300000000000011 0.0 883
+884 0.0229089260101318 0.019999999999996 0.019999999999996 0.0 884
+885 0.0219950675964355 0.0200000000000031 0.0200000000000031 0.0 885
+886 0.021589994430542 0.019999999999996 0.019999999999996 0.0 886
+887 0.0214979648590088 0.0200000000000031 0.0200000000000031 0.0 887
+888 0.0215859413146973 0.0300000000000011 0.0300000000000011 0.0 888
+889 0.0217750072479248 0.019999999999996 0.019999999999996 0.0 889
+890 0.021744966506958 0.0200000000000031 0.0200000000000031 0.0 890
+891 0.025892972946167 0.019999999999996 0.019999999999996 0.0 891
+892 0.0236170291900635 0.0300000000000011 0.0300000000000011 0.0 892
+893 0.0218141078948975 0.0200000000000031 0.0200000000000031 0.0 893
+894 0.0771820545196533 0.0799999999999983 0.0799999999999983 0.0 894
+895 0.0230357646942139 0.0200000000000031 0.0200000000000031 0.0 895
+896 0.0231060981750488 0.019999999999996 0.019999999999996 0.0 896
+897 0.023137092590332 0.0300000000000011 0.0300000000000011 0.0 897
+898 0.022799015045166 0.019999999999996 0.019999999999996 0.0 898
+899 0.0256779193878174 0.0200000000000031 0.0200000000000031 0.0 899
+900 0.0231838226318359 0.0300000000000011 0.0300000000000011 0.0 900
+901 0.0232141017913818 0.019999999999996 0.019999999999996 0.0 901
+902 0.0217940807342529 0.0200000000000031 0.0200000000000031 0.0 902
+903 0.0214989185333252 0.0200000000000031 0.0200000000000031 0.0 903
+904 0.0218000411987305 0.029999999999994 0.029999999999994 0.0 904
+905 0.0220961570739746 0.0200000000000031 0.0200000000000031 0.0 905
+906 0.0215680599212646 0.0200000000000031 0.0200000000000031 0.0 906
+907 0.0216329097747803 0.019999999999996 0.019999999999996 0.0 907
+908 0.0217070579528809 0.0200000000000031 0.0200000000000031 0.0 908
+909 0.0216760635375977 0.019999999999996 0.019999999999996 0.0 909
+910 0.0236759185791016 0.0300000000000011 0.0300000000000011 0.0 910
+911 0.0770270824432373 0.0799999999999983 0.0799999999999983 0.0 911
+912 0.0231328010559082 0.0200000000000031 0.0200000000000031 0.0 912
+913 0.0229079723358154 0.019999999999996 0.019999999999996 0.0 913
+914 0.0230019092559814 0.0200000000000031 0.0200000000000031 0.0 914
+915 0.0252349376678467 0.0300000000000011 0.0300000000000011 0.0 915
+916 0.0227150917053223 0.019999999999996 0.019999999999996 0.0 916
+917 0.0228018760681152 0.0200000000000031 0.0200000000000031 0.0 917
+918 0.0226809978485107 0.0300000000000011 0.0300000000000011 0.0 918
+919 0.0252270698547363 0.019999999999996 0.019999999999996 0.0 919
+920 0.0231540203094482 0.0300000000000011 0.0300000000000011 0.0 920
+921 0.0289709568023682 0.0200000000000031 0.0200000000000031 0.0 921
+922 0.0215799808502197 0.0300000000000011 0.0300000000000011 0.0 922
+923 0.0319468975067139 0.0300000000000011 0.019999999999996 0.01 923
+924 0.0216109752655029 0.0200000000000031 0.0200000000000031 0.0 924
+925 0.0217740535736084 0.019999999999996 0.019999999999996 0.0 925
+926 0.0216958522796631 0.0200000000000031 0.0200000000000031 0.0 926
+927 0.0216629505157471 0.019999999999996 0.019999999999996 0.0 927
+928 0.0217578411102295 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.0820608139038086 0.0799999999999983 0.0799999999999983 0.0 929
+930 0.0229201316833496 0.0200000000000031 0.0200000000000031 0.0 930
+931 0.0229270458221436 0.0200000000000031 0.0200000000000031 0.0 931
+932 0.0229320526123047 0.029999999999994 0.029999999999994 0.0 932
+933 0.0227558612823486 0.0200000000000031 0.0200000000000031 0.0 933
+934 0.0226609706878662 0.0200000000000031 0.0200000000000031 0.0 934
+935 0.0229549407958984 0.019999999999996 0.019999999999996 0.0 935
+936 0.0221340656280518 0.0300000000000011 0.0300000000000011 0.0 936
+937 0.0215301513671875 0.019999999999996 0.019999999999996 0.0 937
+938 0.0243568420410156 0.0200000000000031 0.0200000000000031 0.0 938
+939 0.021946907043457 0.0300000000000011 0.0300000000000011 0.0 939
+940 0.021575927734375 0.019999999999996 0.019999999999996 0.0 940
+941 0.0216639041900635 0.0200000000000031 0.0200000000000031 0.0 941
+942 0.0217418670654297 0.0200000000000031 0.0200000000000031 0.0 942
+943 0.0222411155700684 0.019999999999996 0.019999999999996 0.0 943
+944 0.0216610431671143 0.0200000000000031 0.0200000000000031 0.0 944
+945 0.0216820240020752 0.019999999999996 0.019999999999996 0.0 945
+946 0.0792751312255859 0.0699999999999932 0.0699999999999932 0.0 946
+947 0.0251059532165527 0.0300000000000011 0.0300000000000011 0.0 947
+948 0.0247578620910645 0.0200000000000031 0.0200000000000031 0.0 948
+949 0.0229980945587158 0.0300000000000011 0.0300000000000011 0.0 949
+950 0.0229229927062988 0.019999999999996 0.019999999999996 0.0 950
+951 0.0227029323577881 0.0200000000000031 0.0200000000000031 0.0 951
+952 0.0226871967315674 0.019999999999996 0.019999999999996 0.0 952
+953 0.0235540866851807 0.0300000000000011 0.0300000000000011 0.0 953
+954 0.0219640731811523 0.0200000000000031 0.0200000000000031 0.0 954
+955 0.0214629173278809 0.019999999999996 0.019999999999996 0.0 955
+956 0.021557092666626 0.0200000000000031 0.0200000000000031 0.0 956
+957 0.02388596534729 0.0300000000000011 0.0300000000000011 0.0 957
+958 0.0222799777984619 0.019999999999996 0.019999999999996 0.0 958
+959 0.0276319980621338 0.0300000000000011 0.0300000000000011 0.0 959
+960 0.0242338180541992 0.0200000000000031 0.0200000000000031 0.0 960
+961 0.0216600894927979 0.019999999999996 0.019999999999996 0.0 961
+962 0.0217490196228027 0.0200000000000031 0.0200000000000031 0.0 962
+963 0.0757958889007568 0.0799999999999983 0.0799999999999983 0.0 963
+964 0.0231211185455322 0.0200000000000031 0.0200000000000031 0.0 964
+965 0.023090124130249 0.029999999999994 0.029999999999994 0.0 965
+966 0.02652907371521 0.0200000000000031 0.0200000000000031 0.0 966
+967 0.024601936340332 0.0300000000000011 0.0300000000000011 0.0 967
+968 0.0228731632232666 0.019999999999996 0.019999999999996 0.0 968
+969 0.0227208137512207 0.0200000000000031 0.0200000000000031 0.0 969
+970 0.0226399898529053 0.0300000000000011 0.0300000000000011 0.0 970
+971 0.0225419998168945 0.019999999999996 0.019999999999996 0.0 971
+972 0.0218651294708252 0.0200000000000031 0.0200000000000031 0.0 972
+973 0.0215599536895752 0.0200000000000031 0.0200000000000031 0.0 973
+974 0.0218329429626465 0.019999999999996 0.019999999999996 0.0 974
+975 0.0215480327606201 0.0300000000000011 0.0300000000000011 0.0 975
+976 0.0220801830291748 0.019999999999996 0.019999999999996 0.0 976
+977 0.0245459079742432 0.0200000000000031 0.0200000000000031 0.0 977
+978 0.0230350494384766 0.0300000000000011 0.0300000000000011 0.0 978
+979 0.0217211246490479 0.019999999999996 0.019999999999996 0.0 979
+980 0.0217759609222412 0.0200000000000031 0.0200000000000031 0.0 980
+981 0.0778119564056396 0.0799999999999983 0.0799999999999983 0.0 981
+982 0.0229709148406982 0.0200000000000031 0.0200000000000031 0.0 982
+983 0.023047924041748 0.019999999999996 0.019999999999996 0.0 983
+984 0.0228879451751709 0.0300000000000011 0.0300000000000011 0.0 984
+985 0.0263099670410156 0.0200000000000031 0.0200000000000031 0.0 985
+986 0.0241529941558838 0.0300000000000011 0.0300000000000011 0.0 986
+987 0.0228710174560547 0.019999999999996 0.019999999999996 0.0 987
+988 0.0223538875579834 0.0200000000000031 0.0200000000000031 0.0 988
+989 0.0217280387878418 0.019999999999996 0.019999999999996 0.0 989
+990 0.0214800834655762 0.0300000000000011 0.0300000000000011 0.0 990
+991 0.0215470790863037 0.0200000000000031 0.0200000000000031 0.0 991
+992 0.0224719047546387 0.019999999999996 0.019999999999996 0.0 992
+993 0.0216379165649414 0.0200000000000031 0.0200000000000031 0.0 993
+994 0.0215561389923096 0.019999999999996 0.019999999999996 0.0 994
+995 0.021676778793335 0.0200000000000031 0.0200000000000031 0.0 995
+996 0.024587869644165 0.0300000000000011 0.0300000000000011 0.0 996
+997 0.0231449604034424 0.019999999999996 0.019999999999996 0.0 997
+998 0.0824549198150635 0.0900000000000034 0.0900000000000034 0.0 998
+999 0.0230429172515869 0.019999999999996 0.019999999999996 0.0 999
+1000 0.0229730606079102 0.0200000000000031 0.0200000000000031 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log
new file mode 100644
index 0000000..7272679
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log
@@ -0,0 +1,82 @@
+========================== 2009-04-01T16:49:55 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'GeneratorBenchmarkRails' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+GeneratorBenchmarkRails#generator:
+ real total user system
+sum 25.871086597 25.820000000 25.780000000 0.040000000
+min 0.021485090 0.020000000 0.020000000 0.000000000
+std- 0.013123732 0.012534515 0.012507179 -0.000591505
+mean 0.025871087 0.025820000 0.025780000 0.000040000
+std+ 0.038618441 0.039105485 0.039052821 0.000671505
+max 0.084933996 0.090000000 0.090000000 0.010000000
+std 0.012747354 0.013285485 0.013272821 0.000631505
+std% 49.272590131 51.454239794 51.484952060 1578.762962731
+harm 0.023654431 0.022959497 0.022933171 nan
+geo 0.024373445 0.023988580 0.023955348 0.000000000
+q1 0.021737874 0.020000000 0.020000000 0.000000000
+med 0.022677064 0.020000000 0.020000000 0.000000000
+q3 0.023290575 0.030000000 0.030000000 0.000000000
+ 1000 38.65319 0.025871087
+ calls calls/sec secs/call
+
+ 0.08176 -|*
+ 0.07542 -|**
+ 0.06907 -|
+ 0.06273 -|
+ 0.05638 -|
+ 0.05004 -|
+ 0.04369 -|
+ 0.03735 -|
+ 0.03100 -|*
+ 0.02466 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02268, iqr=0.00155, factor=3.00):
+high=115 very_high=69
+
+Ljung-Box statistics: q=1246.12050 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+GeneratorBenchmarkRails#generator:
+ real total user system
+sum 25.952543497 25.950000000 25.930000000 0.020000000
+min 0.021454096 0.020000000 0.020000000 0.000000000
+std- 0.013029796 0.012272113 0.012258057 -0.000426990
+mean 0.025952543 0.025950000 0.025930000 0.000020000
+std+ 0.038875291 0.039627887 0.039601943 0.000466990
+max 0.083282948 0.090000000 0.090000000 0.010000000
+std 0.012922747 0.013677887 0.013671943 0.000446990
+std% 49.793760083 52.708619269 52.726351240 2234.948544149
+harm 0.023675798 0.022977187 0.022963996 nan
+geo 0.024414095 0.024037524 0.024020868 0.000000000
+q1 0.021728516 0.020000000 0.020000000 0.000000000
+med 0.022745013 0.020000000 0.020000000 0.000000000
+q3 0.023253679 0.030000000 0.030000000 0.000000000
+ 1000 38.53187 0.025952543
+ calls calls/sec secs/call
+
+ 0.08019 -|**
+ 0.07401 -|*
+ 0.06783 -|
+ 0.06164 -|
+ 0.05546 -|
+ 0.04928 -|
+ 0.04309 -|
+ 0.03691 -|
+ 0.03073 -|*
+ 0.02455 -|**************************************************
+
+Outliers detected with box plot algo (median=0.02275, iqr=0.00153, factor=3.00):
+high=106 very_high=75
+
+Ljung-Box statistics: q=1270.99317 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:50:50 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/GeneratorBenchmarkRails#generator.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/GeneratorBenchmarkRails#generator-autocorrelation.dat'.
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log
new file mode 100644
index 0000000..7df4445
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log
@@ -0,0 +1,34 @@
+========================== 2009-04-01T16:49:51 CEST ===========================
+
+Comparing times (call_time_mean):
+ 1 ParserBenchmarkExt#parser 900 repeats:
+ 553.922304770 ( real) -> 21.500x
+ 0.001805307
+ 2 ParserBenchmarkYAML#parser 1000 repeats:
+ 224.513358139 ( real) -> 8.714x
+ 0.004454078
+ 3 ParserBenchmarkPure#parser 1000 repeats:
+ 26.755020642 ( real) -> 1.038x
+ 0.037376163
+ 4 ParserBenchmarkRails#parser 1000 repeats:
+ 25.763381731 ( real) -> 1.000x
+ 0.038814780
+ calls/sec ( time) -> speed covers
+ secs/call
+
+Comparing times (call_time_median):
+ 1 ParserBenchmarkExt#parser 900 repeats:
+ 800.592479481 ( real) -> 26.936x
+ 0.001249075
+ 2 ParserBenchmarkYAML#parser 1000 repeats:
+ 271.002390644 ( real) -> 9.118x
+ 0.003690004
+ 3 ParserBenchmarkRails#parser 1000 repeats:
+ 30.227910865 ( real) -> 1.017x
+ 0.033082008
+ 4 ParserBenchmarkPure#parser 1000 repeats:
+ 29.722384421 ( real) -> 1.000x
+ 0.033644676
+ calls/sec ( time) -> speed covers
+ secs/call
+===============================================================================
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat
new file mode 100644
index 0000000..40efc57
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat
@@ -0,0 +1,900 @@
+#lag autocorrelation
+101 1.0
+102 0.00985212418163005
+103 -0.00105742571489969
+104 -0.0200019393620297
+105 -0.00933105977449441
+106 -0.0198053539236752
+107 -0.0179767811553642
+108 -0.0176611423990743
+109 -0.0185222417953087
+110 -0.0205843694390457
+111 -0.01715959553508
+112 -0.0198505157325194
+113 -0.0185062490072185
+114 -0.0196897065923063
+115 -0.021656479097572
+116 -0.0204821887654524
+117 -0.0184415185088398
+118 -0.0211615011085338
+119 -0.0216761971444828
+120 -0.0198233495768411
+121 -0.0203604715880323
+122 -0.0198005010000642
+123 -0.0186848341524697
+124 -0.0180302780242917
+125 -0.0183844885059821
+126 -0.0193889269967917
+127 -0.0192676046194778
+128 -0.017137594880939
+129 -0.0170409124066728
+130 -0.0150595759310503
+131 -0.018497243864985
+132 -0.0191312662452333
+133 -0.0194917405622472
+134 -0.0182724916370003
+135 -0.0171018288530395
+136 -0.017693203383731
+137 -0.019233808628409
+138 -0.0204803489133546
+139 -0.0206519814870514
+140 -0.0209197600090546
+141 -0.0201426439148014
+142 -0.0181979335068176
+143 -0.0198192645275531
+144 -0.0202773409268149
+145 -0.0197509641765462
+146 -0.0174542791271672
+147 -0.0185131963029398
+148 -0.0142911622141816
+149 -0.018189949446747
+150 -0.0172775321644038
+151 -0.0172514996638929
+152 -0.0149711216258677
+153 -0.0180209406771167
+154 -0.0187829326095732
+155 -0.0179420788237305
+156 0.00424372785454928
+157 0.00821554188465932
+158 0.35293400731859
+159 0.366837592246794
+160 0.213298783047283
+161 -0.0157394761915721
+162 -0.00774376349114834
+163 -0.0172186119438013
+164 -0.0162348306988972
+165 -0.0179811217375531
+166 -0.0168325248721867
+167 -0.0177863454159124
+168 -0.0162717222175639
+169 -0.0191117204105146
+170 -0.0177356811020167
+171 -0.0186975490077008
+172 -0.0172583072789483
+173 -0.0189210264178748
+174 -0.0171826733538386
+175 -0.0197467598837419
+176 -0.0197612311894552
+177 -0.0200029809913758
+178 -0.0197615059774931
+179 -0.017571989727297
+180 -0.0173400082784329
+181 -0.0176396221137864
+182 -0.0178007321096628
+183 -0.0171581059408866
+184 -0.0175715243687287
+185 -0.0144018049890081
+186 -0.0137323861679082
+187 -0.0160141550759938
+188 -0.017722831700802
+189 -0.015351426662838
+190 -0.0185698089210776
+191 -0.0175157776409104
+192 -0.0155631516338833
+193 -0.0169248557096909
+194 -0.0172361325951485
+195 -0.0181452103029826
+196 -0.0188512630759419
+197 -0.019287412783149
+198 -0.0189502964327969
+199 -0.0175238114666983
+200 -0.0183952774301715
+201 -0.0186218598819691
+202 -0.018542074990071
+203 -0.0182545379514657
+204 -0.017840994815964
+205 -0.0165268111705284
+206 -0.0170697996989772
+207 -0.0164709961667795
+208 -0.016643508111465
+209 -0.0157568996501781
+210 -0.0168374783887807
+211 -0.0177159477110073
+212 -0.0185524368774668
+213 0.0053422952230943
+214 0.00276128222155045
+215 0.286489934471652
+216 0.0658269400928081
+217 0.262561253228902
+218 0.169103819531699
+219 0.0650049870287007
+220 -0.0133346213868773
+221 -0.0142126752180425
+222 -0.0160968078458446
+223 -0.0167528062012806
+224 -0.0164817511097463
+225 -0.0142119297070018
+226 -0.0184810797176798
+227 -0.0172569541054024
+228 -0.0172066024264211
+229 -0.0169726297147995
+230 -0.0150887497973008
+231 -0.0156277947184747
+232 -0.0180738339464492
+233 -0.0190883324101496
+234 -0.0183422711026111
+235 -0.018362277398652
+236 -0.0181804365041856
+237 -0.0173970084740036
+238 -0.0160781720728349
+239 -0.0175236902049324
+240 -0.0174042718759811
+241 -0.0173938793276598
+242 -0.0147551028769872
+243 -0.0122857581039405
+244 -0.010867924198452
+245 -0.0147424216205904
+246 -0.0161622617779801
+247 -0.0172022551420587
+248 -0.0150808969605776
+249 -0.0151917742587137
+250 -0.0152127703813932
+251 -0.0164007891388044
+252 -0.0158495946074772
+253 -0.0165231819746255
+254 -0.0179743821309601
+255 -0.0168790954979486
+256 -0.0162120097817564
+257 -0.0178739491417351
+258 -0.0173473040628906
+259 -0.017333660413587
+260 -0.0169091470123355
+261 -0.0173480396586057
+262 -0.0162244782824425
+263 -0.0161131334675745
+264 -0.015440149830728
+265 -0.0158807862437797
+266 -0.0152294521155507
+267 -0.0158352218642096
+268 -0.0155828944335708
+269 -0.0154836062421944
+270 0.00558208708467659
+271 0.0114870902959279
+272 0.231287473612096
+273 0.0339554100844083
+274 0.0575163566469858
+275 0.200319219612533
+276 0.130545113965154
+277 0.103208025156172
+278 -0.00828951271991966
+279 -0.011478192463039
+280 -0.0144428867470379
+281 -0.0166239539451988
+282 -0.0140920994032186
+283 -0.0158723288388108
+284 -0.0165069706040961
+285 -0.0161430629749153
+286 -0.0156730553051534
+287 -0.0140404598916659
+288 -0.0133504108974733
+289 -0.0157085445845684
+290 -0.0176124651386038
+291 -0.0171680503827001
+292 -0.0170039830572799
+293 -0.0168887759061973
+294 -0.0169101987732867
+295 -0.0163174932481928
+296 -0.0167303236582728
+297 -0.0164240715366653
+298 -0.0174052740404305
+299 -0.0154895527247017
+300 -0.0136444220312839
+301 -0.0116830781987026
+302 -0.0115068177333964
+303 -0.0122234935117673
+304 -0.0161080245808241
+305 -0.0156513921624129
+306 -0.015465759720129
+307 -0.0155883071657887
+308 -0.014915569597449
+309 -0.0154401977831601
+310 -0.0152328705988631
+311 -0.0150660231818582
+312 -0.0162849647550971
+313 -0.0156909486406831
+314 -0.0157314619149535
+315 -0.0171049069711299
+316 -0.0163207392432989
+317 -0.0162187518728422
+318 -0.0159225278740695
+319 -0.0158753160806369
+320 -0.0175020706698857
+321 -0.0162498852657993
+322 -0.0142911340574672
+323 -0.0134726499133121
+324 -0.0139601338890013
+325 -0.0135761876345162
+326 -0.0137860102565959
+327 0.00758105123652143
+328 0.0138556686845422
+329 0.160536954774616
+330 0.0580898398456171
+331 0.0362943231984366
+332 0.0582894097570709
+333 0.140607199465268
+334 0.122618966464092
+335 0.0544884026670781
+336 0.0574883295508244
+337 -0.0128811621108332
+338 -0.0142051495442353
+339 -0.012596825344306
+340 -0.0144711739317383
+341 -0.0143424560269512
+342 -0.0151482554143398
+343 -0.0152335381293791
+344 -0.0145008541639242
+345 -0.0128863677349906
+346 -0.0135998919997521
+347 -0.0137187354568586
+348 -0.016562150133356
+349 -0.0159327586951356
+350 -0.0157278421724429
+351 -0.0156917921778683
+352 -0.0162525169522264
+353 -0.0151087680645235
+354 -0.0163683946557918
+355 -0.0158321090068333
+356 -0.014187820897252
+357 -0.0135506277381031
+358 -0.0129291218507853
+359 -0.011476061331394
+360 -0.0106220863859184
+361 -0.0136381523747695
+362 -0.0144198007144617
+363 -0.0140646467360062
+364 -0.0146311562003427
+365 -0.0138043111265009
+366 -0.0132336502438289
+367 -0.0137447378009751
+368 -0.0134055994936963
+369 -0.0138096044909662
+370 -0.0148709544542698
+371 -0.0141560548846661
+372 -0.0143189068321436
+373 -0.0154246653827396
+374 -0.0143998490618263
+375 -0.0151239610115372
+376 -0.0145837141470442
+377 -0.0149820141088871
+378 -0.0152660994133885
+379 -0.0150896640677698
+380 -0.0143925874319689
+381 -0.012857919840862
+382 -0.012469852706461
+383 -0.0114191455070416
+384 -0.0117369627541799
+385 0.00901231127194259
+386 0.112581309251641
+387 0.0630586366341156
+388 0.0560506964150278
+389 0.034078031969884
+390 0.0673456104691437
+391 0.0675823686435704
+392 0.125111752483497
+393 0.0574208869213907
+394 0.0547195112212531
+395 -0.0126520762992662
+396 -0.0108416098060863
+397 -0.0130469248384881
+398 -0.0127546014788274
+399 -0.0132792357499854
+400 -0.0146832842515137
+401 -0.0126612510959431
+402 -0.0115800372136954
+403 -0.0113903072278453
+404 -0.0140846407853927
+405 -0.0131520362471166
+406 -0.0151139726926659
+407 -0.014338285447184
+408 -0.0139604129340576
+409 -0.0146086760584088
+410 -0.0147068805852203
+411 -0.0133990381740181
+412 -0.0146858710730989
+413 -0.0130742254367083
+414 -0.0131112804223081
+415 -0.0137104304702131
+416 -0.0127181490916882
+417 -0.0101122805581215
+418 -0.0116311057808783
+419 -0.0116685677717087
+420 -0.0125364818049418
+421 -0.0131681573750755
+422 -0.0136051276108772
+423 -0.0120078720987834
+424 -0.0120742461009416
+425 -0.0122528176238668
+426 -0.0117254366398627
+427 -0.0121713901545344
+428 -0.0134473192309673
+429 -0.0125993249687127
+430 -0.0127679522459455
+431 -0.0139092549620457
+432 -0.012803641341176
+433 -0.0136774030500624
+434 -0.0141830514589281
+435 -0.0128995570395618
+436 -0.0138061906269556
+437 -0.0138485903191603
+438 -0.0134705594226274
+439 -0.0135710367850959
+440 -0.0134802406736088
+441 -0.0114240523633417
+442 0.00941052876968686
+443 0.0430904882987511
+444 0.0610654134717703
+445 0.062319445242902
+446 0.0601232622212667
+447 0.0405754724552619
+448 0.0620931832458557
+449 0.0116088523973264
+450 0.0982633823768887
+451 0.0714603689521745
+452 0.0559398394361076
+453 -0.0101201070889078
+454 -0.00879771513149454
+455 -0.0115272354759577
+456 -0.0116269116840352
+457 -0.0122869101923228
+458 -0.0120188445899197
+459 -0.0118598309936189
+460 -0.0101004693907269
+461 -0.0114030122417514
+462 -0.0122734729370316
+463 -0.0115720712151182
+464 -0.0138183196216235
+465 -0.0127878610331042
+466 -0.0125076360625095
+467 -0.012954528306254
+468 -0.0134636454445403
+469 -0.0119988447482744
+470 -0.0129555835189171
+471 -0.0118492958760378
+472 -0.0118594416726488
+473 -0.0122062699596644
+474 -0.010080021699572
+475 -0.0096177810356361
+476 -0.0103925438270026
+477 -0.00956922010832709
+478 -0.0112412626452718
+479 -0.0121001052660535
+480 -0.011378640220319
+481 -0.0092484956113967
+482 -0.0106941808432033
+483 -0.0110034314038638
+484 -0.0110076000819364
+485 -0.0120066628455925
+486 -0.0120644325940679
+487 -0.0113002732292104
+488 -0.0115088408547228
+489 -0.0124620522688203
+490 -0.011436641831689
+491 -0.0122177151639931
+492 -0.011889848089267
+493 -0.0112514741258071
+494 -0.0123396196285994
+495 -0.0125441398199035
+496 -0.0120423852622065
+497 -0.0117710714915686
+498 -0.0120685728943707
+499 -0.0102415762932917
+500 -0.00952560982747511
+501 0.057365018480452
+502 0.0589533698587152
+503 0.0631840298934377
+504 0.0575949246719766
+505 0.0495075237359153
+506 -0.00276987533523964
+507 0.0566980942764334
+508 0.0446716609032234
+509 0.0800168272027955
+510 0.0590566885918559
+511 -0.00867575003512787
+512 -0.00762446391218853
+513 -0.0110530315739159
+514 -0.0112154987644773
+515 -0.0115595346792594
+516 -0.00980277940001169
+517 -0.00973051262117572
+518 -0.0103794047555936
+519 -0.0112379712859069
+520 -0.0115804163149423
+521 -0.0101848401928812
+522 -0.0124971838157264
+523 -0.0116095875762639
+524 -0.0110264315185272
+525 -0.0117091264505558
+526 -0.0123732885927322
+527 -0.010594137537324
+528 -0.0118959477121367
+529 -0.0104863548938662
+530 -0.0105605260979509
+531 -0.0106933635291854
+532 -0.0108043363381157
+533 -0.00921313629560141
+534 -0.00991616820012903
+535 -0.00958582052168739
+536 -0.00704544580624994
+537 -0.0106691661025772
+538 -0.010420801758334
+539 -0.00875433609811375
+540 -0.00883595894162315
+541 -0.00997102984238341
+542 -0.0102647231793572
+543 -0.0102814553860974
+544 -0.0108603826750419
+545 -0.00986739232072193
+546 -0.0101569632812344
+547 -0.011268829829185
+548 -0.0103314326239715
+549 -0.0108025538636602
+550 -0.0110885402975588
+551 -0.00994108726738058
+552 -0.0109717247548978
+553 -0.0111952027153027
+554 -0.0106777314688714
+555 -0.0105192670440749
+556 -0.0103965890169893
+557 -0.00921877528177769
+558 -0.0105438348503076
+559 0.0565407931203086
+560 0.0607631038776418
+561 0.0631456281304688
+562 0.0643969806813753
+563 0.00250124004424947
+564 0.0238807604805019
+565 0.0611062977177439
+566 0.00597775022828004
+567 0.0460556379694793
+568 0.0815090939407766
+569 -0.00626805713052914
+570 -0.00661349141206074
+571 -0.0103106916231778
+572 -0.00997759927119779
+573 -0.00925417552568336
+574 -0.00793232399214336
+575 -0.00984859802468641
+576 -0.00970943291247622
+577 -0.0102555983171129
+578 -0.0105112448841139
+579 -0.00934462727175849
+580 -0.0109724429920345
+581 -0.0105475816212072
+582 -0.00987869004825123
+583 -0.0108012349540747
+584 -0.0110285881583596
+585 -0.00936923199699531
+586 -0.010677032137483
+587 -0.00926759654250112
+588 -0.00927806685390026
+589 -0.00953198453346766
+590 -0.00985316922914821
+591 -0.00816343304426746
+592 -0.00804247528052676
+593 -0.00716187036218296
+594 -0.00719169352938419
+595 -0.00640320531281439
+596 -0.00933925279879329
+597 -0.00742884578783592
+598 -0.00884147481763569
+599 -0.00946231770499787
+600 -0.00920569741458586
+601 -0.00945237056796019
+602 -0.00981398771732927
+603 -0.00871297697902305
+604 -0.0100303276706874
+605 -0.00898480302286613
+606 -0.00924314281708078
+607 -0.00967182311916309
+608 -0.00990373367569264
+609 -0.00867546650016389
+610 -0.00974271626786161
+611 -0.00993605711012294
+612 -0.00942263108268127
+613 -0.00900896482065972
+614 -0.0091002536867116
+615 -0.0087141619357278
+616 -0.00892632720545352
+617 0.0589814861280723
+618 0.0605513762593439
+619 0.0714950418331747
+620 -0.00270802819557134
+621 0.0492471524740303
+622 0.038730090749927
+623 -0.00470286001171746
+624 0.0805291384934167
+625 -0.0061135815816416
+626 0.0469241708061885
+627 0.0129057834766504
+628 -0.00613654384956245
+629 -0.00879823441679327
+630 -0.00781138453907383
+631 -0.00742325743221473
+632 -0.00823530705565565
+633 -0.0084784951984544
+634 -0.00809365168883783
+635 -0.00953458560320773
+636 -0.00802484455858134
+637 -0.00916422962874895
+638 -0.00901522658367207
+639 -0.00980509257172476
+640 -0.00879042365734647
+641 -0.00895901541679582
+642 -0.00967011172668992
+643 -0.00909032972552398
+644 -0.00839888383893324
+645 -0.00811198094900032
+646 -0.00768107918073061
+647 -0.00816456224653991
+648 -0.0082275430634122
+649 -0.0081977088645516
+650 -0.00539347813540888
+651 -0.00654335448921841
+652 -0.00443308105716727
+653 -0.00570487900007702
+654 -0.0066893756968109
+655 -0.00818867754248517
+656 -0.00757689453770065
+657 -0.00809806707024929
+658 -0.00781954604985851
+659 -0.00817710586907003
+660 -0.00815598808085207
+661 -0.00838471453215144
+662 -0.00761655712958744
+663 -0.00754256056280177
+664 -0.00784016975796052
+665 -0.00809877261256007
+666 -0.00845387142411403
+667 -0.00839255166002082
+668 -0.00750643389123885
+669 -0.00842839786359518
+670 -0.00793771252048078
+671 -0.00821559065464683
+672 -0.00836801649799504
+673 -0.00801406294900344
+674 -0.0068829238602205
+675 0.0587431729672395
+676 0.0679066498016378
+677 0.00138627052356425
+678 0.045430011210707
+679 0.0703642058717147
+680 -0.00785311036081027
+681 0.0393771166371859
+682 -0.0012573720198598
+683 0.0787866974453597
+684 -0.00622669473512034
+685 -0.00636435714406588
+686 -0.00498738462505791
+687 -0.00682069596495773
+688 -0.00626878401038485
+689 -0.00829494420297491
+690 -0.00672112910303483
+691 -0.00742349355313316
+692 -0.00663050740514031
+693 -0.00668402104568857
+694 -0.00765554385447826
+695 -0.00750480426076586
+696 -0.00755677083867405
+697 -0.00878562401331522
+698 -0.00750067365297707
+699 -0.00777302023891454
+700 -0.00817258866736239
+701 -0.00782461564356417
+702 -0.00524788018311442
+703 -0.00639934484202989
+704 -0.00643323873066334
+705 -0.00675310931225713
+706 -0.00662734325519555
+707 -0.00521831889291382
+708 -0.00564541170834083
+709 -0.00456417269308792
+710 -0.00400766521918149
+711 -0.00371044720499201
+712 -0.00477769884156836
+713 -0.00650815478194108
+714 -0.00648004714637358
+715 -0.00676089500421721
+716 -0.00680941068103167
+717 -0.00642611423395982
+718 -0.00702188737616296
+719 -0.00653395389621014
+720 -0.00584494763207698
+721 -0.00698560115812894
+722 -0.00617395252882351
+723 -0.00649589045366301
+724 -0.00697571124768394
+725 -0.00710622766255317
+726 -0.00619879747257016
+727 -0.00665952366507082
+728 -0.00697267381777301
+729 -0.00656067343167249
+730 -0.00686476942480864
+731 -0.00642237619826439
+732 -0.00571464839985842
+733 0.0667446844690344
+734 -0.000602956363836805
+735 0.0435578419252502
+736 0.0671949304076346
+737 0.00272911716837698
+738 0.0617459164425819
+739 -0.00803573888395584
+740 0.0408644996908555
+741 -0.00188635612841879
+742 0.012816656873346
+743 -0.00568767407759494
+744 -0.00636171895252407
+745 -0.00542006518701238
+746 -0.00762131167004239
+747 -0.00660561178711003
+748 -0.00606759153689151
+749 -0.0058887906931096
+750 -0.00489479103900307
+751 -0.00560951874516548
+752 -0.00616879095509287
+753 -0.00635688929093473
+754 -0.00647498478390112
+755 -0.00602500915318228
+756 -0.00733096951475789
+757 -0.00594264381799701
+758 -0.00639292931982792
+759 -0.00572524668506834
+760 -0.00539599866786123
+761 -0.00379529224483641
+762 -0.00508628266806213
+763 -0.00482859601859399
+764 -0.00384270276169917
+765 -0.0048947554317503
+766 -0.0036868713314995
+767 -0.00296664588261117
+768 -0.00394853350358643
+769 -0.00370978621561119
+770 -0.00496135959443785
+771 -0.00483764544982328
+772 -0.00514032926285884
+773 -0.00429422735197048
+774 -0.00533057103732123
+775 -0.00536211175807313
+776 -0.00507354991704586
+777 -0.00523842710609345
+778 -0.00538601193828756
+779 -0.00457245530033061
+780 -0.00555196995586425
+781 -0.00431853553236008
+782 -0.00528202292794999
+783 -0.00548332867892791
+784 -0.0054668106220194
+785 -0.00467211264805423
+786 -0.0056172070705691
+787 -0.0050524268347218
+788 -0.00490507861057278
+789 -0.00533817709181219
+790 -0.00320459126822799
+791 0.000899360051725526
+792 0.0415445575505902
+793 0.0636610531703114
+794 -0.0016809425357539
+795 0.0687212087083107
+796 0.000196803163775908
+797 0.0629583673226595
+798 -0.00692549309097212
+799 -0.00464547193258324
+800 -0.00554999704707722
+801 -0.00548776067864322
+802 -0.00542976281097604
+803 -0.0035044437646846
+804 -0.0055525582475137
+805 -0.00571646473007065
+806 -0.00559650400651719
+807 -0.0038274405540596
+808 -0.0049295061654944
+809 -0.00431367615172496
+810 -0.00488424593891825
+811 -0.00508803026004008
+812 -0.00516376184293035
+813 -0.00533514975859532
+814 -0.00495590288647863
+815 -0.00582914296339316
+816 -0.00363638197988919
+817 -0.00435167714877856
+818 -0.00395852323776287
+819 -0.0040209798766184
+820 -0.00259964040539382
+821 -0.00252589454921766
+822 -0.00402931674090356
+823 -0.00437393888079731
+824 -0.00424357159059594
+825 -0.00410943374121717
+826 -0.00317027800134567
+827 -0.00401422305864503
+828 -0.00362959396117676
+829 -0.00435662189051477
+830 -0.00429725981497675
+831 -0.00437374795310113
+832 -0.00378466430841879
+833 -0.00411294642315096
+834 -0.00378707889918487
+835 -0.00453957661876227
+836 -0.00428380826395531
+837 -0.00440314525366383
+838 -0.0035999051330324
+839 -0.00448715088820831
+840 -0.00394825961839359
+841 -0.00424255651229298
+842 -0.00457239362923998
+843 -0.00454960510129971
+844 -0.00359729823872128
+845 -0.00427987549442926
+846 -0.00383749859614317
+847 -0.00440264075958008
+848 -0.00443053281886172
+849 -0.00462479790588209
+850 0.0635581089210887
+851 -0.00436894515178304
+852 0.0644673368682151
+853 -0.000871046243511147
+854 0.0774867967247699
+855 -0.00520058993039265
+856 -0.00455758197376518
+857 -0.0045515125818426
+858 -0.00326760124250017
+859 -0.00391042035486497
+860 -0.00365931176845998
+861 -0.00406590514483785
+862 -0.0025402582470179
+863 -0.00536731784656349
+864 -0.00383767883865199
+865 -0.00355617763954968
+866 -0.00378000247138692
+867 -0.00392301919821498
+868 -0.00311017256485425
+869 -0.00362676859689902
+870 -0.00388528530404416
+871 -0.00403811507092716
+872 -0.00389341264783238
+873 -0.00250872494912967
+874 -0.00227481761327797
+875 -0.00232996833366221
+876 -0.00304083453398083
+877 -0.00268074555016819
+878 -0.00265096778109124
+879 -0.00262000280831905
+880 -0.00263328713175465
+881 -0.0025831537476473
+882 -0.00285396803049453
+883 -0.00275081518908208
+884 -0.00275786365878849
+885 -0.00270692981149454
+886 -0.00279346701415621
+887 -0.00243358618146588
+888 -0.00292581648863345
+889 -0.00324682684580069
+890 -0.00268405340278505
+891 -0.00298098008752344
+892 -0.0030275487992921
+893 -0.00253465692577619
+894 -0.0030528198225934
+895 -0.00306163668899383
+896 -0.00302971568628192
+897 -0.00312372318456645
+898 -0.00302532654866883
+899 -0.00260699554256586
+900 -0.00314997872940616
+901 -0.00310092374684808
+902 -0.00285287807280204
+903 -0.00322514674479286
+904 -0.00324555248275787
+905 -0.00266343884682981
+906 -0.0033292088604627
+907 -0.00311942534161818
+908 -0.003188028948592
+909 0.063849474353312
+910 -0.00314766360320187
+911 0.0654720703776586
+912 -0.00104922659034679
+913 0.00682464273763961
+914 -0.00303985655616328
+915 -0.00305320941524036
+916 -0.00235000269848827
+917 -0.00159322372169743
+918 -0.00266570495618958
+919 -0.00262099570862898
+920 -0.00331666377238153
+921 -0.000308570913141365
+922 -0.0043164022171378
+923 -0.00371227484203275
+924 -0.00247827724873875
+925 -0.00234032536054011
+926 -0.00253743141649567
+927 -0.00196547166307156
+928 -0.00258072736023124
+929 -0.00262490193099622
+930 -0.00130204665127498
+931 -0.00126358935693649
+932 -0.00125324190600646
+933 -0.00103101472775934
+934 -0.00130963767061068
+935 -0.00170600528719406
+936 -0.00131231544424995
+937 -0.00130240649250473
+938 -0.0011496494054081
+939 -0.00120338315610114
+940 -0.00107955390929202
+941 -0.00136336765253578
+942 -0.00138525137115296
+943 -0.00142000506928781
+944 -0.00137347169208518
+945 -0.00130072987756282
+946 -0.00149282878067872
+947 -0.00147328073275425
+948 -0.00148996134571696
+949 -0.0015346094598941
+950 -0.00155787525175409
+951 -0.0015758298667031
+952 -0.00144258818629267
+953 -0.0016057038498501
+954 -0.00161313789189179
+955 -0.0014926163928444
+956 -0.00167630619540263
+957 -0.00171225333920666
+958 -0.00158417048330168
+959 -0.00172363849918105
+960 -0.00178681745393769
+961 -0.00177326985666539
+962 -0.00177274859905472
+963 -0.00180813461186522
+964 -0.00164734316246358
+965 -0.00179758469878046
+966 -0.00170533834289266
+967 -0.0018391064291266
+968 0.0648568044321966
+969 -0.00181391508277247
+970 -0.00187271774497418
+971 -0.00171843154333231
+972 0.00690748933974905
+973 -0.0020046618702145
+974 -0.00209930430368119
+975 -0.00151158386207428
+976 -0.00215827618636864
+977 -0.00219374577659291
+978 -0.00221636226760568
+979 -0.00228093075519445
+980 -0.00204652728069895
+981 -0.00229765429774947
+982 -0.00230704101453769
+983 -0.00107403973652915
+984 -0.00110441180969535
+985 -0.00113692360921596
+986 -0.00114267728647558
+987 0.000141381944635982
+988 0.00011755670125973
+989 9.44527623139297e-05
+990 7.92340829889737e-05
+991 0.000230018756762113
+992 0.000207110838703588
+993 0.000182764350871147
+994 0.000169272314028801
+995 0.000144905246673696
+996 0.000120096836237343
+997 9.53172448027285e-05
+998 7.0792968638772e-05
+999 4.98796983407663e-05
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat
new file mode 100644
index 0000000..797a3d0
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat
@@ -0,0 +1,901 @@
+#scatter real total user system repeat
+101 0.00124120712280273 0.0 0.0 0.0 101
+102 0.00123310089111328 0.0 0.0 0.0 102
+103 0.0012359619140625 0.0 0.0 0.0 103
+104 0.00124216079711914 0.0 0.0 0.0 104
+105 0.00124096870422363 0.0 0.0 0.0 105
+106 0.00124096870422363 0.00999999999999979 0.00999999999999979 0.0 106
+107 0.00124692916870117 0.0 0.0 0.0 107
+108 0.00122189521789551 0.0 0.0 0.0 108
+109 0.00124287605285645 0.0 0.0 0.0 109
+110 0.00124287605285645 0.0 0.0 0.0 110
+111 0.00124597549438477 0.0 0.0 0.0 111
+112 0.0012519359588623 0.0 0.0 0.0 112
+113 0.00124788284301758 0.0 0.0 0.0 113
+114 0.00124502182006836 0.0100000000000007 0.0100000000000007 0.0 114
+115 0.00124692916870117 0.0 0.0 0.0 115
+116 0.00123810768127441 0.0 0.0 0.0 116
+117 0.00125002861022949 0.0 0.0 0.0 117
+118 0.00125789642333984 0.0 0.0 0.0 118
+119 0.0300710201263428 0.0299999999999994 0.0299999999999994 0.0 119
+120 0.00127291679382324 0.0 0.0 0.0 120
+121 0.00133109092712402 0.0 0.0 0.0 121
+122 0.0012810230255127 0.0100000000000007 0.0100000000000007 0.0 122
+123 0.00127792358398438 0.0 0.0 0.0 123
+124 0.0012671947479248 0.0 0.0 0.0 124
+125 0.00126814842224121 0.0 0.0 0.0 125
+126 0.00125694274902344 0.0 0.0 0.0 126
+127 0.00124883651733398 0.0 0.0 0.0 127
+128 0.00124907493591309 0.0 0.0 0.0 128
+129 0.0012509822845459 0.0 0.0 0.0 129
+130 0.0012509822845459 0.00999999999999979 0.00999999999999979 0.0 130
+131 0.00125312805175781 0.0 0.0 0.0 131
+132 0.00131797790527344 0.0 0.0 0.0 132
+133 0.00125694274902344 0.0 0.0 0.0 133
+134 0.00125288963317871 0.0 0.0 0.0 134
+135 0.0012519359588623 0.0 0.0 0.0 135
+136 0.00124692916870117 0.0 0.0 0.0 136
+137 0.00124692916870117 0.0 0.0 0.0 137
+138 0.00124907493591309 0.00999999999999979 0.00999999999999979 0.0 138
+139 0.0012509822845459 0.0 0.0 0.0 139
+140 0.00125598907470703 0.0 0.0 0.0 140
+141 0.00124287605285645 0.0 0.0 0.0 141
+142 0.00124812126159668 0.0 0.0 0.0 142
+143 0.00124883651733398 0.0 0.0 0.0 143
+144 0.00123500823974609 0.0 0.0 0.0 144
+145 0.00124382972717285 0.00999999999999979 0.00999999999999979 0.0 145
+146 0.00123715400695801 0.0 0.0 0.0 146
+147 0.00134897232055664 0.0 0.0 0.0 147
+148 0.00123906135559082 0.0 0.0 0.0 148
+149 0.00124788284301758 0.0 0.0 0.0 149
+150 0.0012359619140625 0.0 0.0 0.0 150
+151 0.00123476982116699 0.0 0.0 0.0 151
+152 0.00124597549438477 0.0 0.0 0.0 152
+153 0.00124597549438477 0.0100000000000007 0.0100000000000007 0.0 153
+154 0.00123190879821777 0.0 0.0 0.0 154
+155 0.0012509822845459 0.0 0.0 0.0 155
+156 0.00124096870422363 0.0 0.0 0.0 156
+157 0.0012359619140625 0.0 0.0 0.0 157
+158 0.00123906135559082 0.0 0.0 0.0 158
+159 0.00123906135559082 0.0 0.0 0.0 159
+160 0.00123691558837891 0.0 0.0 0.0 160
+161 0.00124001502990723 0.00999999999999979 0.00999999999999979 0.0 161
+162 0.00124597549438477 0.0 0.0 0.0 162
+163 0.00124096870422363 0.0 0.0 0.0 163
+164 0.0012359619140625 0.0 0.0 0.0 164
+165 0.00123500823974609 0.0 0.0 0.0 165
+166 0.00173211097717285 0.0 0.0 0.0 166
+167 0.00125217437744141 0.0 0.0 0.0 167
+168 0.00124406814575195 0.00999999999999979 0.00999999999999979 0.0 168
+169 0.00124096870422363 0.0 0.0 0.0 169
+170 0.00123381614685059 0.0 0.0 0.0 170
+171 0.00124001502990723 0.0 0.0 0.0 171
+172 0.00124001502990723 0.0 0.0 0.0 172
+173 0.00123715400695801 0.0 0.0 0.0 173
+174 0.00123691558837891 0.0 0.0 0.0 174
+175 0.00124692916870117 0.0 0.0 0.0 175
+176 0.00130796432495117 0.00999999999999979 0.00999999999999979 0.0 176
+177 0.00127100944519043 0.0 0.0 0.0 177
+178 0.0301418304443359 0.0300000000000002 0.0300000000000002 0.0 178
+179 0.00127196311950684 0.0 0.0 0.0 179
+180 0.00131416320800781 0.0 0.0 0.0 180
+181 0.00119805335998535 0.0 0.0 0.0 181
+182 0.00128316879272461 0.0 0.0 0.0 182
+183 0.0013129711151123 0.0 0.0 0.0 183
+184 0.00127100944519043 0.0 0.0 0.0 184
+185 0.00141692161560059 0.0 0.0 0.0 185
+186 0.00130701065063477 0.0 0.0 0.0 186
+187 0.00126099586486816 0.0 0.0 0.0 187
+188 0.00125694274902344 0.0 0.0 0.0 188
+189 0.00124502182006836 0.0 0.0 0.0 189
+190 0.00125217437744141 0.0 0.0 0.0 190
+191 0.00124216079711914 0.0 0.0 0.0 191
+192 0.00125408172607422 0.0100000000000007 0.0100000000000007 0.0 192
+193 0.00124502182006836 0.0 0.0 0.0 193
+194 0.00125718116760254 0.0 0.0 0.0 194
+195 0.00125503540039062 0.0 0.0 0.0 195
+196 0.00125598907470703 0.0 0.0 0.0 196
+197 0.00137186050415039 0.0 0.0 0.0 197
+198 0.0011131763458252 0.0 0.0 0.0 198
+199 0.00124788284301758 0.0 0.0 0.0 199
+200 0.00124597549438477 0.00999999999999979 0.00999999999999979 0.0 200
+201 0.00124597549438477 0.0 0.0 0.0 201
+202 0.00132608413696289 0.0 0.0 0.0 202
+203 0.00129795074462891 0.0 0.0 0.0 203
+204 0.00120997428894043 0.0 0.0 0.0 204
+205 0.00124192237854004 0.0 0.0 0.0 205
+206 0.00126290321350098 0.0 0.0 0.0 206
+207 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 207
+208 0.00125503540039062 0.0 0.0 0.0 208
+209 0.00124883651733398 0.0 0.0 0.0 209
+210 0.00124192237854004 0.0 0.0 0.0 210
+211 0.00124812126159668 0.0 0.0 0.0 211
+212 0.00125002861022949 0.0 0.0 0.0 212
+213 0.00124287605285645 0.0 0.0 0.0 213
+214 0.00125288963317871 0.0 0.0 0.0 214
+215 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 215
+216 0.00124287605285645 0.0 0.0 0.0 216
+217 0.00124001502990723 0.0 0.0 0.0 217
+218 0.00124883651733398 0.0 0.0 0.0 218
+219 0.00124192237854004 0.0 0.0 0.0 219
+220 0.00123405456542969 0.0 0.0 0.0 220
+221 0.00124883651733398 0.0 0.0 0.0 221
+222 0.00123810768127441 0.0 0.0 0.0 222
+223 0.0012359619140625 0.00999999999999979 0.00999999999999979 0.0 223
+224 0.00123405456542969 0.0 0.0 0.0 224
+225 0.00124788284301758 0.0 0.0 0.0 225
+226 0.00148200988769531 0.0 0.0 0.0 226
+227 0.00123882293701172 0.0 0.0 0.0 227
+228 0.00124907493591309 0.0 0.0 0.0 228
+229 0.00124120712280273 0.0 0.0 0.0 229
+230 0.00124096870422363 0.0 0.0 0.0 230
+231 0.00124812126159668 0.0100000000000007 0.0100000000000007 0.0 231
+232 0.00124001502990723 0.0 0.0 0.0 232
+233 0.001251220703125 0.0 0.0 0.0 233
+234 0.00123810768127441 0.0 0.0 0.0 234
+235 0.00125885009765625 0.0 0.0 0.0 235
+236 0.00126409530639648 0.0 0.0 0.0 236
+237 0.0301649570465088 0.0299999999999994 0.0299999999999994 0.0 237
+238 0.00130605697631836 0.0 0.0 0.0 238
+239 0.00129795074462891 0.0100000000000007 0.0100000000000007 0.0 239
+240 0.00127410888671875 0.0 0.0 0.0 240
+241 0.00134420394897461 0.0 0.0 0.0 241
+242 0.00127720832824707 0.0 0.0 0.0 242
+243 0.00126409530639648 0.0 0.0 0.0 243
+244 0.00125288963317871 0.0 0.0 0.0 244
+245 0.00125384330749512 0.0 0.0 0.0 245
+246 0.00124788284301758 0.0 0.0 0.0 246
+247 0.00124287605285645 0.00999999999999979 0.00999999999999979 0.0 247
+248 0.00125813484191895 0.0 0.0 0.0 248
+249 0.00125002861022949 0.0 0.0 0.0 249
+250 0.00124502182006836 0.0 0.0 0.0 250
+251 0.00125694274902344 0.0 0.0 0.0 251
+252 0.00124192237854004 0.0 0.0 0.0 252
+253 0.00128889083862305 0.0 0.0 0.0 253
+254 0.00124883651733398 0.00999999999999979 0.00999999999999979 0.0 254
+255 0.00124907493591309 0.0 0.0 0.0 255
+256 0.00124812126159668 0.0 0.0 0.0 256
+257 0.00125503540039062 0.0 0.0 0.0 257
+258 0.00125789642333984 0.0 0.0 0.0 258
+259 0.00124692916870117 0.0 0.0 0.0 259
+260 0.00124812126159668 0.0 0.0 0.0 260
+261 0.00124192237854004 0.0 0.0 0.0 261
+262 0.00124287605285645 0.00999999999999979 0.00999999999999979 0.0 262
+263 0.00124192237854004 0.0 0.0 0.0 263
+264 0.00123500823974609 0.0 0.0 0.0 264
+265 0.00123715400695801 0.0 0.0 0.0 265
+266 0.0018610954284668 0.0 0.0 0.0 266
+267 0.00128507614135742 0.0 0.0 0.0 267
+268 0.00123906135559082 0.0 0.0 0.0 268
+269 0.00124001502990723 0.0 0.0 0.0 269
+270 0.00124907493591309 0.0 0.0 0.0 270
+271 0.00124716758728027 0.0 0.0 0.0 271
+272 0.00124001502990723 0.0 0.0 0.0 272
+273 0.00125288963317871 0.0 0.0 0.0 273
+274 0.00118589401245117 0.0 0.0 0.0 274
+275 0.00124192237854004 0.0 0.0 0.0 275
+276 0.00123906135559082 0.0 0.0 0.0 276
+277 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 277
+278 0.00124597549438477 0.0 0.0 0.0 278
+279 0.00124096870422363 0.0 0.0 0.0 279
+280 0.00124382972717285 0.0 0.0 0.0 280
+281 0.00125694274902344 0.0 0.0 0.0 281
+282 0.00124812126159668 0.0 0.0 0.0 282
+283 0.00124192237854004 0.0 0.0 0.0 283
+284 0.001251220703125 0.0 0.0 0.0 284
+285 0.00128316879272461 0.00999999999999979 0.00999999999999979 0.0 285
+286 0.00124287605285645 0.0 0.0 0.0 286
+287 0.00133800506591797 0.0 0.0 0.0 287
+288 0.00124788284301758 0.0 0.0 0.0 288
+289 0.0012509822845459 0.0 0.0 0.0 289
+290 0.00124883651733398 0.0 0.0 0.0 290
+291 0.00124502182006836 0.0 0.0 0.0 291
+292 0.00124382972717285 0.0 0.0 0.0 292
+293 0.00125908851623535 0.00999999999999979 0.00999999999999979 0.0 293
+294 0.00126791000366211 0.0 0.0 0.0 294
+295 0.0215630531311035 0.0200000000000005 0.0200000000000005 0.0 295
+296 0.00352096557617188 0.0 0.0 0.0 296
+297 0.00220417976379395 0.0 0.0 0.0 297
+298 0.00125384330749512 0.00999999999999979 0.00999999999999979 0.0 298
+299 0.00129985809326172 0.0 0.0 0.0 299
+300 0.00123715400695801 0.0 0.0 0.0 300
+301 0.00124096870422363 0.0 0.0 0.0 301
+302 0.00124001502990723 0.0 0.0 0.0 302
+303 0.00123405456542969 0.0 0.0 0.0 303
+304 0.0012509822845459 0.0 0.0 0.0 304
+305 0.0012509822845459 0.00999999999999979 0.00999999999999979 0.0 305
+306 0.00125288963317871 0.0 0.0 0.0 306
+307 0.00126099586486816 0.0 0.0 0.0 307
+308 0.00124788284301758 0.0 0.0 0.0 308
+309 0.00124907493591309 0.0 0.0 0.0 309
+310 0.00124096870422363 0.0 0.0 0.0 310
+311 0.00125002861022949 0.0 0.0 0.0 311
+312 0.0012519359588623 0.0 0.0 0.0 312
+313 0.00126314163208008 0.0100000000000007 0.0100000000000007 0.0 313
+314 0.00124406814575195 0.0 0.0 0.0 314
+315 0.00125789642333984 0.0 0.0 0.0 315
+316 0.00128793716430664 0.0 0.0 0.0 316
+317 0.0012509822845459 0.0 0.0 0.0 317
+318 0.00156903266906738 0.0 0.0 0.0 318
+319 0.00181221961975098 0.0 0.0 0.0 319
+320 0.0018010139465332 0.00999999999999979 0.00999999999999979 0.0 320
+321 0.00193095207214355 0.0 0.0 0.0 321
+322 0.0014030933380127 0.0 0.0 0.0 322
+323 0.0012519359588623 0.0 0.0 0.0 323
+324 0.00121903419494629 0.0 0.0 0.0 324
+325 0.00120687484741211 0.0 0.0 0.0 325
+326 0.00123000144958496 0.0 0.0 0.0 326
+327 0.00123095512390137 0.00999999999999979 0.00999999999999979 0.0 327
+328 0.00124692916870117 0.0 0.0 0.0 328
+329 0.00127005577087402 0.0 0.0 0.0 329
+330 0.00124716758728027 0.0 0.0 0.0 330
+331 0.00126481056213379 0.0 0.0 0.0 331
+332 0.00125694274902344 0.0 0.0 0.0 332
+333 0.00118613243103027 0.0 0.0 0.0 333
+334 0.00124001502990723 0.0 0.0 0.0 334
+335 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 335
+336 0.00126791000366211 0.0 0.0 0.0 336
+337 0.00124692916870117 0.0 0.0 0.0 337
+338 0.00124907493591309 0.0 0.0 0.0 338
+339 0.00126218795776367 0.0 0.0 0.0 339
+340 0.00124406814575195 0.0 0.0 0.0 340
+341 0.0012359619140625 0.0 0.0 0.0 341
+342 0.00125885009765625 0.0100000000000007 0.0100000000000007 0.0 342
+343 0.00131320953369141 0.0 0.0 0.0 343
+344 0.0012519359588623 0.0 0.0 0.0 344
+345 0.00123691558837891 0.0 0.0 0.0 345
+346 0.00125694274902344 0.0 0.0 0.0 346
+347 0.00139403343200684 0.0 0.0 0.0 347
+348 0.00127506256103516 0.0 0.0 0.0 348
+349 0.00130009651184082 0.0 0.0 0.0 349
+350 0.00128412246704102 0.00999999999999979 0.00999999999999979 0.0 350
+351 0.00133395195007324 0.0 0.0 0.0 351
+352 0.00152087211608887 0.0 0.0 0.0 352
+353 0.0015110969543457 0.0 0.0 0.0 353
+354 0.0320370197296143 0.0299999999999994 0.0299999999999994 0.0 354
+355 0.00130319595336914 0.0 0.0 0.0 355
+356 0.0012969970703125 0.0100000000000007 0.0100000000000007 0.0 356
+357 0.00127792358398438 0.0 0.0 0.0 357
+358 0.00127506256103516 0.0 0.0 0.0 358
+359 0.00126791000366211 0.0 0.0 0.0 359
+360 0.00126385688781738 0.0 0.0 0.0 360
+361 0.00125694274902344 0.0 0.0 0.0 361
+362 0.00125002861022949 0.0 0.0 0.0 362
+363 0.00125598907470703 0.0 0.0 0.0 363
+364 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 364
+365 0.00124692916870117 0.0 0.0 0.0 365
+366 0.00125503540039062 0.0 0.0 0.0 366
+367 0.00125217437744141 0.0 0.0 0.0 367
+368 0.00124406814575195 0.0 0.0 0.0 368
+369 0.00125789642333984 0.0 0.0 0.0 369
+370 0.0012509822845459 0.0 0.0 0.0 370
+371 0.00124287605285645 0.0 0.0 0.0 371
+372 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 372
+373 0.00124692916870117 0.0 0.0 0.0 373
+374 0.0012519359588623 0.0 0.0 0.0 374
+375 0.0012519359588623 0.0 0.0 0.0 375
+376 0.00125503540039062 0.0 0.0 0.0 376
+377 0.00123691558837891 0.0 0.0 0.0 377
+378 0.00123310089111328 0.0 0.0 0.0 378
+379 0.00123190879821777 0.0 0.0 0.0 379
+380 0.00124382972717285 0.00999999999999979 0.00999999999999979 0.0 380
+381 0.00123906135559082 0.0 0.0 0.0 381
+382 0.00124883651733398 0.0 0.0 0.0 382
+383 0.00124192237854004 0.0 0.0 0.0 383
+384 0.0012509822845459 0.0 0.0 0.0 384
+385 0.00124406814575195 0.0 0.0 0.0 385
+386 0.00123405456542969 0.0 0.0 0.0 386
+387 0.00124788284301758 0.0100000000000007 0.0100000000000007 0.0 387
+388 0.00125002861022949 0.0 0.0 0.0 388
+389 0.00123214721679688 0.0 0.0 0.0 389
+390 0.00123810768127441 0.0 0.0 0.0 390
+391 0.00124287605285645 0.0 0.0 0.0 391
+392 0.0012359619140625 0.0 0.0 0.0 392
+393 0.00123405456542969 0.0 0.0 0.0 393
+394 0.00124621391296387 0.0 0.0 0.0 394
+395 0.00124907493591309 0.00999999999999979 0.00999999999999979 0.0 395
+396 0.00124216079711914 0.0 0.0 0.0 396
+397 0.00123190879821777 0.0 0.0 0.0 397
+398 0.00139594078063965 0.0 0.0 0.0 398
+399 0.0022280216217041 0.0 0.0 0.0 399
+400 0.00197100639343262 0.0 0.0 0.0 400
+401 0.00163888931274414 0.00999999999999979 0.00999999999999979 0.0 401
+402 0.00142812728881836 0.0 0.0 0.0 402
+403 0.00138711929321289 0.0 0.0 0.0 403
+404 0.00148701667785645 0.0 0.0 0.0 404
+405 0.00162696838378906 0.0 0.0 0.0 405
+406 0.00157594680786133 0.0 0.0 0.0 406
+407 0.00158596038818359 0.00999999999999979 0.00999999999999979 0.0 407
+408 0.00186491012573242 0.0 0.0 0.0 408
+409 0.0016481876373291 0.0 0.0 0.0 409
+410 0.00135707855224609 0.0 0.0 0.0 410
+411 0.00129485130310059 0.0 0.0 0.0 411
+412 0.0299890041351318 0.0300000000000002 0.0300000000000002 0.0 412
+413 0.00138497352600098 0.0 0.0 0.0 413
+414 0.0013120174407959 0.0 0.0 0.0 414
+415 0.00127696990966797 0.00999999999999979 0.00999999999999979 0.0 415
+416 0.00128507614135742 0.0 0.0 0.0 416
+417 0.00126981735229492 0.0 0.0 0.0 417
+418 0.00126814842224121 0.0 0.0 0.0 418
+419 0.00125718116760254 0.0 0.0 0.0 419
+420 0.00125408172607422 0.0 0.0 0.0 420
+421 0.0012509822845459 0.0 0.0 0.0 421
+422 0.00124716758728027 0.0 0.0 0.0 422
+423 0.00125408172607422 0.0100000000000007 0.0100000000000007 0.0 423
+424 0.001251220703125 0.0 0.0 0.0 424
+425 0.00124812126159668 0.0 0.0 0.0 425
+426 0.00124692916870117 0.0 0.0 0.0 426
+427 0.00124597549438477 0.0 0.0 0.0 427
+428 0.001251220703125 0.0 0.0 0.0 428
+429 0.00124311447143555 0.0 0.0 0.0 429
+430 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 430
+431 0.00124311447143555 0.0 0.0 0.0 431
+432 0.00125002861022949 0.0 0.0 0.0 432
+433 0.00125002861022949 0.0 0.0 0.0 433
+434 0.00125002861022949 0.0 0.0 0.0 434
+435 0.00124502182006836 0.0 0.0 0.0 435
+436 0.00124382972717285 0.0 0.0 0.0 436
+437 0.00124812126159668 0.0 0.0 0.0 437
+438 0.00124406814575195 0.00999999999999979 0.00999999999999979 0.0 438
+439 0.00122785568237305 0.0 0.0 0.0 439
+440 0.00123214721679688 0.0 0.0 0.0 440
+441 0.00123691558837891 0.0 0.0 0.0 441
+442 0.00124502182006836 0.0 0.0 0.0 442
+443 0.00123405456542969 0.0 0.0 0.0 443
+444 0.00124311447143555 0.0 0.0 0.0 444
+445 0.00124382972717285 0.0 0.0 0.0 445
+446 0.00123906135559082 0.00999999999999979 0.00999999999999979 0.0 446
+447 0.00124096870422363 0.0 0.0 0.0 447
+448 0.00124311447143555 0.0 0.0 0.0 448
+449 0.00124788284301758 0.0 0.0 0.0 449
+450 0.00123500823974609 0.0 0.0 0.0 450
+451 0.00124096870422363 0.0 0.0 0.0 451
+452 0.00123906135559082 0.0 0.0 0.0 452
+453 0.00123500823974609 0.0 0.0 0.0 453
+454 0.0012359619140625 0.0100000000000007 0.0100000000000007 0.0 454
+455 0.00124192237854004 0.0 0.0 0.0 455
+456 0.00124096870422363 0.0 0.0 0.0 456
+457 0.00123405456542969 0.0 0.0 0.0 457
+458 0.00124311447143555 0.0 0.0 0.0 458
+459 0.00158381462097168 0.0 0.0 0.0 459
+460 0.00182890892028809 0.0 0.0 0.0 460
+461 0.00183510780334473 0.00999999999999979 0.00999999999999979 0.0 461
+462 0.00188088417053223 0.0 0.0 0.0 462
+463 0.00174307823181152 0.0 0.0 0.0 463
+464 0.00124692916870117 0.0 0.0 0.0 464
+465 0.00123906135559082 0.0 0.0 0.0 465
+466 0.00124096870422363 0.0 0.0 0.0 466
+467 0.00124311447143555 0.00999999999999979 0.00999999999999979 0.0 467
+468 0.00125503540039062 0.0 0.0 0.0 468
+469 0.00125908851623535 0.0 0.0 0.0 469
+470 0.0304310321807861 0.0300000000000002 0.0300000000000002 0.0 470
+471 0.00145387649536133 0.0 0.0 0.0 471
+472 0.00129985809326172 0.0 0.0 0.0 472
+473 0.00149822235107422 0.0 0.0 0.0 473
+474 0.0015261173248291 0.0 0.0 0.0 474
+475 0.00127696990966797 0.00999999999999979 0.00999999999999979 0.0 475
+476 0.0012669563293457 0.0 0.0 0.0 476
+477 0.00122594833374023 0.0 0.0 0.0 477
+478 0.00125002861022949 0.0 0.0 0.0 478
+479 0.00124478340148926 0.0 0.0 0.0 479
+480 0.00125694274902344 0.0 0.0 0.0 480
+481 0.001251220703125 0.0 0.0 0.0 481
+482 0.0012509822845459 0.0 0.0 0.0 482
+483 0.0012509822845459 0.00999999999999979 0.00999999999999979 0.0 483
+484 0.00125288963317871 0.0 0.0 0.0 484
+485 0.00125408172607422 0.0 0.0 0.0 485
+486 0.00125718116760254 0.0 0.0 0.0 486
+487 0.00124716758728027 0.0 0.0 0.0 487
+488 0.00117087364196777 0.0 0.0 0.0 488
+489 0.00124812126159668 0.0 0.0 0.0 489
+490 0.00122618675231934 0.00999999999999979 0.00999999999999979 0.0 490
+491 0.00125598907470703 0.0 0.0 0.0 491
+492 0.00124311447143555 0.0 0.0 0.0 492
+493 0.00124192237854004 0.0 0.0 0.0 493
+494 0.00124692916870117 0.0 0.0 0.0 494
+495 0.00123381614685059 0.0 0.0 0.0 495
+496 0.00123691558837891 0.0 0.0 0.0 496
+497 0.00123906135559082 0.0 0.0 0.0 497
+498 0.00125718116760254 0.0100000000000007 0.0100000000000007 0.0 498
+499 0.00124502182006836 0.0 0.0 0.0 499
+500 0.00124788284301758 0.0 0.0 0.0 500
+501 0.00124812126159668 0.0 0.0 0.0 501
+502 0.00124096870422363 0.0 0.0 0.0 502
+503 0.00124287605285645 0.0 0.0 0.0 503
+504 0.00122690200805664 0.0 0.0 0.0 504
+505 0.00124406814575195 0.0 0.0 0.0 505
+506 0.00123786926269531 0.00999999999999979 0.00999999999999979 0.0 506
+507 0.00124001502990723 0.0 0.0 0.0 507
+508 0.0012519359588623 0.0 0.0 0.0 508
+509 0.00124597549438477 0.0 0.0 0.0 509
+510 0.00124311447143555 0.0 0.0 0.0 510
+511 0.00124979019165039 0.0 0.0 0.0 511
+512 0.00124502182006836 0.0 0.0 0.0 512
+513 0.00124001502990723 0.0 0.0 0.0 513
+514 0.00123810768127441 0.00999999999999979 0.00999999999999979 0.0 514
+515 0.00125002861022949 0.0 0.0 0.0 515
+516 0.00124812126159668 0.0 0.0 0.0 516
+517 0.00124311447143555 0.0 0.0 0.0 517
+518 0.00125288963317871 0.0 0.0 0.0 518
+519 0.00124979019165039 0.0 0.0 0.0 519
+520 0.00124192237854004 0.0 0.0 0.0 520
+521 0.00124406814575195 0.0 0.0 0.0 521
+522 0.00125622749328613 0.00999999999999979 0.00999999999999979 0.0 522
+523 0.00124907493591309 0.0 0.0 0.0 523
+524 0.00124692916870117 0.0 0.0 0.0 524
+525 0.00125002861022949 0.0 0.0 0.0 525
+526 0.0012671947479248 0.0 0.0 0.0 526
+527 0.00126910209655762 0.0 0.0 0.0 527
+528 0.0301029682159424 0.0300000000000002 0.0300000000000002 0.0 528
+529 0.00129103660583496 0.0 0.0 0.0 529
+530 0.00132203102111816 0.00999999999999979 0.00999999999999979 0.0 530
+531 0.00127696990966797 0.0 0.0 0.0 531
+532 0.00128507614135742 0.0 0.0 0.0 532
+533 0.00127196311950684 0.0 0.0 0.0 533
+534 0.00127100944519043 0.0 0.0 0.0 534
+535 0.00126886367797852 0.0 0.0 0.0 535
+536 0.00125789642333984 0.0 0.0 0.0 536
+537 0.00124311447143555 0.0 0.0 0.0 537
+538 0.0012509822845459 0.0100000000000007 0.0100000000000007 0.0 538
+539 0.00125908851623535 0.0 0.0 0.0 539
+540 0.00124788284301758 0.0 0.0 0.0 540
+541 0.00125002861022949 0.0 0.0 0.0 541
+542 0.0012671947479248 0.0 0.0 0.0 542
+543 0.00125312805175781 0.0 0.0 0.0 543
+544 0.00125885009765625 0.0 0.0 0.0 544
+545 0.00125503540039062 0.00999999999999979 0.00999999999999979 0.0 545
+546 0.00126099586486816 0.0 0.0 0.0 546
+547 0.00126218795776367 0.0 0.0 0.0 547
+548 0.00124883651733398 0.0 0.0 0.0 548
+549 0.00126099586486816 0.0 0.0 0.0 549
+550 0.00126194953918457 0.0 0.0 0.0 550
+551 0.00119996070861816 0.0 0.0 0.0 551
+552 0.00124883651733398 0.0 0.0 0.0 552
+553 0.00124192237854004 0.00999999999999979 0.00999999999999979 0.0 553
+554 0.00124382972717285 0.0 0.0 0.0 554
+555 0.00124311447143555 0.0 0.0 0.0 555
+556 0.00123500823974609 0.0 0.0 0.0 556
+557 0.0012359619140625 0.0 0.0 0.0 557
+558 0.00123882293701172 0.0 0.0 0.0 558
+559 0.0012519359588623 0.0 0.0 0.0 559
+560 0.00124716758728027 0.0 0.0 0.0 560
+561 0.00124406814575195 0.0 0.0 0.0 561
+562 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 562
+563 0.00129103660583496 0.0 0.0 0.0 563
+564 0.00124001502990723 0.0 0.0 0.0 564
+565 0.00124406814575195 0.0 0.0 0.0 565
+566 0.00125789642333984 0.0 0.0 0.0 566
+567 0.00124406814575195 0.0 0.0 0.0 567
+568 0.00123500823974609 0.0 0.0 0.0 568
+569 0.00124311447143555 0.0 0.0 0.0 569
+570 0.00124096870422363 0.0 0.0 0.0 570
+571 0.00124001502990723 0.0 0.0 0.0 571
+572 0.00123786926269531 0.0 0.0 0.0 572
+573 0.00125288963317871 0.0 0.0 0.0 573
+574 0.00124502182006836 0.0 0.0 0.0 574
+575 0.00124192237854004 0.0 0.0 0.0 575
+576 0.00124502182006836 0.0 0.0 0.0 576
+577 0.00125479698181152 0.00999999999999979 0.00999999999999979 0.0 577
+578 0.00124502182006836 0.0 0.0 0.0 578
+579 0.00124502182006836 0.0 0.0 0.0 579
+580 0.00124692916870117 0.0 0.0 0.0 580
+581 0.00123095512390137 0.0 0.0 0.0 581
+582 0.00124287605285645 0.0 0.0 0.0 582
+583 0.00125288963317871 0.0 0.0 0.0 583
+584 0.0012669563293457 0.0 0.0 0.0 584
+585 0.00127005577087402 0.00999999999999979 0.00999999999999979 0.0 585
+586 0.0311369895935059 0.0300000000000002 0.0300000000000002 0.0 586
+587 0.00198984146118164 0.0 0.0 0.0 587
+588 0.00141692161560059 0.0 0.0 0.0 588
+589 0.00131011009216309 0.0 0.0 0.0 589
+590 0.0012810230255127 0.0 0.0 0.0 590
+591 0.00123500823974609 0.0 0.0 0.0 591
+592 0.00117397308349609 0.00999999999999979 0.00999999999999979 0.0 592
+593 0.00125908851623535 0.0 0.0 0.0 593
+594 0.00126194953918457 0.0 0.0 0.0 594
+595 0.00124597549438477 0.0 0.0 0.0 595
+596 0.00124692916870117 0.0 0.0 0.0 596
+597 0.00125479698181152 0.0 0.0 0.0 597
+598 0.00127911567687988 0.0 0.0 0.0 598
+599 0.00125789642333984 0.0 0.0 0.0 599
+600 0.00124406814575195 0.00999999999999979 0.00999999999999979 0.0 600
+601 0.00124907493591309 0.0 0.0 0.0 601
+602 0.00124216079711914 0.0 0.0 0.0 602
+603 0.00124907493591309 0.0 0.0 0.0 603
+604 0.00125384330749512 0.0 0.0 0.0 604
+605 0.00125694274902344 0.0 0.0 0.0 605
+606 0.00124192237854004 0.0 0.0 0.0 606
+607 0.00124502182006836 0.0 0.0 0.0 607
+608 0.0012509822845459 0.0100000000000007 0.0100000000000007 0.0 608
+609 0.00123906135559082 0.0 0.0 0.0 609
+610 0.0014030933380127 0.0 0.0 0.0 610
+611 0.00124883651733398 0.0 0.0 0.0 611
+612 0.00135397911071777 0.0 0.0 0.0 612
+613 0.00174593925476074 0.0 0.0 0.0 613
+614 0.00124716758728027 0.0 0.0 0.0 614
+615 0.00124812126159668 0.00999999999999979 0.00999999999999979 0.0 615
+616 0.00125503540039062 0.0 0.0 0.0 616
+617 0.00140786170959473 0.0 0.0 0.0 617
+618 0.00125312805175781 0.0 0.0 0.0 618
+619 0.0012509822845459 0.0 0.0 0.0 619
+620 0.00124096870422363 0.0 0.0 0.0 620
+621 0.0012359619140625 0.0 0.0 0.0 621
+622 0.00124382972717285 0.00999999999999979 0.00999999999999979 0.0 622
+623 0.00124406814575195 0.0 0.0 0.0 623
+624 0.00123000144958496 0.0 0.0 0.0 624
+625 0.00124001502990723 0.0 0.0 0.0 625
+626 0.00124001502990723 0.0 0.0 0.0 626
+627 0.00124001502990723 0.0 0.0 0.0 627
+628 0.00125885009765625 0.0 0.0 0.0 628
+629 0.00124907493591309 0.0 0.0 0.0 629
+630 0.00124192237854004 0.00999999999999979 0.00999999999999979 0.0 630
+631 0.00124406814575195 0.0 0.0 0.0 631
+632 0.0012519359588623 0.0 0.0 0.0 632
+633 0.00124502182006836 0.0 0.0 0.0 633
+634 0.00124287605285645 0.0 0.0 0.0 634
+635 0.00123906135559082 0.0 0.0 0.0 635
+636 0.00124621391296387 0.0 0.0 0.0 636
+637 0.00124502182006836 0.0 0.0 0.0 637
+638 0.00124692916870117 0.00999999999999979 0.00999999999999979 0.0 638
+639 0.0012509822845459 0.0 0.0 0.0 639
+640 0.00132584571838379 0.0 0.0 0.0 640
+641 0.00126409530639648 0.0 0.0 0.0 641
+642 0.00126504898071289 0.0 0.0 0.0 642
+643 0.00127911567687988 0.0 0.0 0.0 643
+644 0.0240340232849121 0.0300000000000002 0.0300000000000002 0.0 644
+645 0.0101561546325684 0.00999999999999979 0.00999999999999979 0.0 645
+646 0.00133299827575684 0.0 0.0 0.0 646
+647 0.00129604339599609 0.0 0.0 0.0 647
+648 0.00124382972717285 0.0 0.0 0.0 648
+649 0.00127410888671875 0.0 0.0 0.0 649
+650 0.00126409530639648 0.0 0.0 0.0 650
+651 0.0012519359588623 0.0 0.0 0.0 651
+652 0.00124597549438477 0.0100000000000007 0.0100000000000007 0.0 652
+653 0.000922918319702148 0.0 0.0 0.0 653
+654 0.00125503540039062 0.0 0.0 0.0 654
+655 0.00124287605285645 0.0 0.0 0.0 655
+656 0.00124692916870117 0.0 0.0 0.0 656
+657 0.00126004219055176 0.0 0.0 0.0 657
+658 0.00125384330749512 0.0 0.0 0.0 658
+659 0.0013279914855957 0.0 0.0 0.0 659
+660 0.00124502182006836 0.00999999999999979 0.00999999999999979 0.0 660
+661 0.00125598907470703 0.0 0.0 0.0 661
+662 0.00124192237854004 0.0 0.0 0.0 662
+663 0.00124096870422363 0.0 0.0 0.0 663
+664 0.00125312805175781 0.0 0.0 0.0 664
+665 0.00124692916870117 0.0 0.0 0.0 665
+666 0.00124597549438477 0.0 0.0 0.0 666
+667 0.00123977661132812 0.0 0.0 0.0 667
+668 0.00124406814575195 0.0 0.0 0.0 668
+669 0.00123500823974609 0.0 0.0 0.0 669
+670 0.00124502182006836 0.0 0.0 0.0 670
+671 0.00124502182006836 0.0 0.0 0.0 671
+672 0.00124382972717285 0.0 0.0 0.0 672
+673 0.00123190879821777 0.0 0.0 0.0 673
+674 0.00123500823974609 0.0 0.0 0.0 674
+675 0.00124692916870117 0.00999999999999979 0.00999999999999979 0.0 675
+676 0.00123310089111328 0.0 0.0 0.0 676
+677 0.00123095512390137 0.0 0.0 0.0 677
+678 0.00124192237854004 0.0 0.0 0.0 678
+679 0.00122690200805664 0.0 0.0 0.0 679
+680 0.00123286247253418 0.0 0.0 0.0 680
+681 0.00124096870422363 0.0 0.0 0.0 681
+682 0.00124192237854004 0.0 0.0 0.0 682
+683 0.00124692916870117 0.0100000000000007 0.0100000000000007 0.0 683
+684 0.0012359619140625 0.0 0.0 0.0 684
+685 0.00123286247253418 0.0 0.0 0.0 685
+686 0.00124001502990723 0.0 0.0 0.0 686
+687 0.00124001502990723 0.0 0.0 0.0 687
+688 0.00123786926269531 0.0 0.0 0.0 688
+689 0.00125002861022949 0.0 0.0 0.0 689
+690 0.00124907493591309 0.0 0.0 0.0 690
+691 0.00129103660583496 0.00999999999999979 0.00999999999999979 0.0 691
+692 0.00124311447143555 0.0 0.0 0.0 692
+693 0.00129890441894531 0.0 0.0 0.0 693
+694 0.00130796432495117 0.0 0.0 0.0 694
+695 0.00123500823974609 0.0 0.0 0.0 695
+696 0.00124716758728027 0.0 0.0 0.0 696
+697 0.00123906135559082 0.0 0.0 0.0 697
+698 0.00124287605285645 0.0 0.0 0.0 698
+699 0.00127696990966797 0.00999999999999979 0.00999999999999979 0.0 699
+700 0.00124907493591309 0.0 0.0 0.0 700
+701 0.0300769805908203 0.0300000000000002 0.0300000000000002 0.0 701
+702 0.0012669563293457 0.0 0.0 0.0 702
+703 0.00174999237060547 0.0 0.0 0.0 703
+704 0.00131797790527344 0.0 0.0 0.0 704
+705 0.00130391120910645 0.0 0.0 0.0 705
+706 0.00126886367797852 0.0 0.0 0.0 706
+707 0.00127601623535156 0.00999999999999979 0.00999999999999979 0.0 707
+708 0.00125503540039062 0.0 0.0 0.0 708
+709 0.00125312805175781 0.0 0.0 0.0 709
+710 0.00124597549438477 0.0 0.0 0.0 710
+711 0.00125217437744141 0.0 0.0 0.0 711
+712 0.00124311447143555 0.0 0.0 0.0 712
+713 0.00124287605285645 0.0 0.0 0.0 713
+714 0.00125503540039062 0.00999999999999979 0.00999999999999979 0.0 714
+715 0.0012519359588623 0.0 0.0 0.0 715
+716 0.00124502182006836 0.0 0.0 0.0 716
+717 0.00124502182006836 0.0 0.0 0.0 717
+718 0.00126814842224121 0.0 0.0 0.0 718
+719 0.00124883651733398 0.0 0.0 0.0 719
+720 0.00124812126159668 0.0 0.0 0.0 720
+721 0.00125408172607422 0.0 0.0 0.0 721
+722 0.00125694274902344 0.0100000000000007 0.0100000000000007 0.0 722
+723 0.00125002861022949 0.0 0.0 0.0 723
+724 0.0012509822845459 0.0 0.0 0.0 724
+725 0.00124502182006836 0.0 0.0 0.0 725
+726 0.00115799903869629 0.0 0.0 0.0 726
+727 0.00148391723632812 0.0 0.0 0.0 727
+728 0.00177001953125 0.0 0.0 0.0 728
+729 0.00183606147766113 0.00999999999999979 0.00999999999999979 0.0 729
+730 0.00171613693237305 0.0 0.0 0.0 730
+731 0.00128793716430664 0.0 0.0 0.0 731
+732 0.000819921493530273 0.0 0.0 0.0 732
+733 0.00124001502990723 0.0 0.0 0.0 733
+734 0.00124692916870117 0.0 0.0 0.0 734
+735 0.00124001502990723 0.0 0.0 0.0 735
+736 0.00123882293701172 0.0 0.0 0.0 736
+737 0.00124597549438477 0.00999999999999979 0.00999999999999979 0.0 737
+738 0.00124502182006836 0.0 0.0 0.0 738
+739 0.00124096870422363 0.0 0.0 0.0 739
+740 0.00124502182006836 0.0 0.0 0.0 740
+741 0.00124096870422363 0.0 0.0 0.0 741
+742 0.00124287605285645 0.0 0.0 0.0 742
+743 0.00124096870422363 0.0 0.0 0.0 743
+744 0.00124692916870117 0.00999999999999979 0.00999999999999979 0.0 744
+745 0.00138497352600098 0.0 0.0 0.0 745
+746 0.00129485130310059 0.0 0.0 0.0 746
+747 0.0012509822845459 0.0 0.0 0.0 747
+748 0.00124907493591309 0.0 0.0 0.0 748
+749 0.00123500823974609 0.0 0.0 0.0 749
+750 0.00124621391296387 0.0 0.0 0.0 750
+751 0.00124096870422363 0.0 0.0 0.0 751
+752 0.00123810768127441 0.0100000000000007 0.0100000000000007 0.0 752
+753 0.00124287605285645 0.0 0.0 0.0 753
+754 0.00124716758728027 0.0 0.0 0.0 754
+755 0.00124311447143555 0.0 0.0 0.0 755
+756 0.00124883651733398 0.0 0.0 0.0 756
+757 0.0014030933380127 0.0 0.0 0.0 757
+758 0.0220100879669189 0.0199999999999996 0.0199999999999996 0.0 758
+759 0.00328278541564941 0.00999999999999979 0.00999999999999979 0.0 759
+760 0.00999212265014648 0.00999999999999979 0.00999999999999979 0.0 760
+761 0.00151991844177246 0.0 0.0 0.0 761
+762 0.00131011009216309 0.0 0.0 0.0 762
+763 0.00128889083862305 0.0 0.0 0.0 763
+764 0.0012819766998291 0.0 0.0 0.0 764
+765 0.0012819766998291 0.0 0.0 0.0 765
+766 0.00126886367797852 0.0100000000000007 0.0100000000000007 0.0 766
+767 0.00125288963317871 0.0 0.0 0.0 767
+768 0.00125408172607422 0.0 0.0 0.0 768
+769 0.00125718116760254 0.0 0.0 0.0 769
+770 0.00125384330749512 0.0 0.0 0.0 770
+771 0.00125002861022949 0.0 0.0 0.0 771
+772 0.00124406814575195 0.0 0.0 0.0 772
+773 0.00125002861022949 0.00999999999999979 0.00999999999999979 0.0 773
+774 0.0012509822845459 0.0 0.0 0.0 774
+775 0.00124502182006836 0.0 0.0 0.0 775
+776 0.00124788284301758 0.0 0.0 0.0 776
+777 0.00125408172607422 0.0 0.0 0.0 777
+778 0.00125288963317871 0.0 0.0 0.0 778
+779 0.00124788284301758 0.0 0.0 0.0 779
+780 0.00124287605285645 0.0 0.0 0.0 780
+781 0.00125694274902344 0.00999999999999979 0.00999999999999979 0.0 781
+782 0.00124096870422363 0.0 0.0 0.0 782
+783 0.00123691558837891 0.0 0.0 0.0 783
+784 0.00124287605285645 0.0 0.0 0.0 784
+785 0.00124597549438477 0.0 0.0 0.0 785
+786 0.00123786926269531 0.0 0.0 0.0 786
+787 0.00124502182006836 0.0 0.0 0.0 787
+788 0.00124096870422363 0.0 0.0 0.0 788
+789 0.00124096870422363 0.00999999999999979 0.00999999999999979 0.0 789
+790 0.00123500823974609 0.0 0.0 0.0 790
+791 0.00124001502990723 0.0 0.0 0.0 791
+792 0.00124001502990723 0.0 0.0 0.0 792
+793 0.00123000144958496 0.0 0.0 0.0 793
+794 0.00124406814575195 0.0 0.0 0.0 794
+795 0.00123691558837891 0.0 0.0 0.0 795
+796 0.00123286247253418 0.0 0.0 0.0 796
+797 0.00123906135559082 0.0100000000000007 0.0100000000000007 0.0 797
+798 0.00120997428894043 0.0 0.0 0.0 798
+799 0.00156807899475098 0.0 0.0 0.0 799
+800 0.00123286247253418 0.0 0.0 0.0 800
+801 0.00125002861022949 0.0 0.0 0.0 801
+802 0.0012199878692627 0.0 0.0 0.0 802
+803 0.00123405456542969 0.0 0.0 0.0 803
+804 0.0012519359588623 0.00999999999999979 0.00999999999999979 0.0 804
+805 0.00124192237854004 0.0 0.0 0.0 805
+806 0.00124406814575195 0.0 0.0 0.0 806
+807 0.00124001502990723 0.0 0.0 0.0 807
+808 0.00124692916870117 0.0 0.0 0.0 808
+809 0.00125002861022949 0.0 0.0 0.0 809
+810 0.00125312805175781 0.0 0.0 0.0 810
+811 0.00126981735229492 0.0 0.0 0.0 811
+812 0.00124001502990723 0.00999999999999979 0.00999999999999979 0.0 812
+813 0.00124597549438477 0.0 0.0 0.0 813
+814 0.00126290321350098 0.0 0.0 0.0 814
+815 0.0310249328613281 0.0300000000000002 0.0300000000000002 0.0 815
+816 0.000841140747070312 0.0 0.0 0.0 816
+817 0.000878095626831055 0.0 0.0 0.0 817
+818 0.000874042510986328 0.0 0.0 0.0 818
+819 0.000869035720825195 0.0 0.0 0.0 819
+820 0.0012819766998291 0.0 0.0 0.0 820
+821 0.00133609771728516 0.00999999999999979 0.00999999999999979 0.0 821
+822 0.0012660026550293 0.0 0.0 0.0 822
+823 0.0013270378112793 0.0 0.0 0.0 823
+824 0.00125718116760254 0.0 0.0 0.0 824
+825 0.00124907493591309 0.0 0.0 0.0 825
+826 0.00137901306152344 0.0 0.0 0.0 826
+827 0.00125503540039062 0.0 0.0 0.0 827
+828 0.0012509822845459 0.0 0.0 0.0 828
+829 0.00126791000366211 0.00999999999999979 0.00999999999999979 0.0 829
+830 0.00128698348999023 0.0 0.0 0.0 830
+831 0.00125598907470703 0.0 0.0 0.0 831
+832 0.00135207176208496 0.0 0.0 0.0 832
+833 0.000869035720825195 0.0 0.0 0.0 833
+834 0.00125503540039062 0.0 0.0 0.0 834
+835 0.0012519359588623 0.0 0.0 0.0 835
+836 0.00126004219055176 0.0 0.0 0.0 836
+837 0.00126099586486816 0.0100000000000007 0.0100000000000007 0.0 837
+838 0.00181698799133301 0.0 0.0 0.0 838
+839 0.00126290321350098 0.0 0.0 0.0 839
+840 0.00124096870422363 0.0 0.0 0.0 840
+841 0.00118899345397949 0.0 0.0 0.0 841
+842 0.00124096870422363 0.0 0.0 0.0 842
+843 0.00123286247253418 0.0 0.0 0.0 843
+844 0.00165700912475586 0.00999999999999979 0.00999999999999979 0.0 844
+845 0.00125789642333984 0.0 0.0 0.0 845
+846 0.00123405456542969 0.0 0.0 0.0 846
+847 0.00123095512390137 0.0 0.0 0.0 847
+848 0.0012509822845459 0.0 0.0 0.0 848
+849 0.00123906135559082 0.0 0.0 0.0 849
+850 0.00165104866027832 0.0 0.0 0.0 850
+851 0.00123906135559082 0.00999999999999979 0.00999999999999979 0.0 851
+852 0.00123786926269531 0.0 0.0 0.0 852
+853 0.00120902061462402 0.0 0.0 0.0 853
+854 0.00130009651184082 0.0 0.0 0.0 854
+855 0.00124502182006836 0.0 0.0 0.0 855
+856 0.0016329288482666 0.0 0.0 0.0 856
+857 0.0012509822845459 0.0 0.0 0.0 857
+858 0.00124692916870117 0.0 0.0 0.0 858
+859 0.00129890441894531 0.00999999999999979 0.00999999999999979 0.0 859
+860 0.00123786926269531 0.0 0.0 0.0 860
+861 0.00123786926269531 0.0 0.0 0.0 861
+862 0.0016181468963623 0.0 0.0 0.0 862
+863 0.00124192237854004 0.0 0.0 0.0 863
+864 0.00124692916870117 0.0 0.0 0.0 864
+865 0.00124597549438477 0.0 0.0 0.0 865
+866 0.00124478340148926 0.0100000000000007 0.0100000000000007 0.0 866
+867 0.00123500823974609 0.0 0.0 0.0 867
+868 0.00165414810180664 0.0 0.0 0.0 868
+869 0.00124502182006836 0.0 0.0 0.0 869
+870 0.0012669563293457 0.0 0.0 0.0 870
+871 0.0018620491027832 0.0 0.0 0.0 871
+872 0.0325958728790283 0.04 0.04 0.0 872
+873 0.000857114791870117 0.0 0.0 0.0 873
+874 0.00117611885070801 0.0 0.0 0.0 874
+875 0.000876903533935547 0.0 0.0 0.0 875
+876 0.00108814239501953 0.0 0.0 0.0 876
+877 0.00129008293151855 0.0 0.0 0.0 877
+878 0.00138592720031738 0.0 0.0 0.0 878
+879 0.00126004219055176 0.0 0.0 0.0 879
+880 0.00133490562438965 0.00999999999999979 0.00999999999999979 0.0 880
+881 0.00133109092712402 0.0 0.0 0.0 881
+882 0.00126004219055176 0.0 0.0 0.0 882
+883 0.00134086608886719 0.0 0.0 0.0 883
+884 0.00124907493591309 0.0 0.0 0.0 884
+885 0.00122594833374023 0.0 0.0 0.0 885
+886 0.00130510330200195 0.0 0.0 0.0 886
+887 0.00134396553039551 0.0 0.0 0.0 887
+888 0.00126194953918457 0.00999999999999979 0.00999999999999979 0.0 888
+889 0.00120782852172852 0.0 0.0 0.0 889
+890 0.00124692916870117 0.0 0.0 0.0 890
+891 0.00125813484191895 0.0 0.0 0.0 891
+892 0.0012509822845459 0.0 0.0 0.0 892
+893 0.00136804580688477 0.0 0.0 0.0 893
+894 0.00125718116760254 0.0 0.0 0.0 894
+895 0.00125312805175781 0.00999999999999979 0.00999999999999979 0.0 895
+896 0.00126218795776367 0.0 0.0 0.0 896
+897 0.00123286247253418 0.0 0.0 0.0 897
+898 0.00124406814575195 0.0 0.0 0.0 898
+899 0.00131702423095703 0.0 0.0 0.0 899
+900 0.00123405456542969 0.0 0.0 0.0 900
+901 0.00121402740478516 0.0 0.0 0.0 901
+902 0.00123882293701172 0.0 0.0 0.0 902
+903 0.00123310089111328 0.00999999999999979 0.00999999999999979 0.0 903
+904 0.00124096870422363 0.0 0.0 0.0 904
+905 0.00147390365600586 0.0 0.0 0.0 905
+906 0.0012509822845459 0.0 0.0 0.0 906
+907 0.00124692916870117 0.0 0.0 0.0 907
+908 0.00124907493591309 0.0 0.0 0.0 908
+909 0.00124597549438477 0.0 0.0 0.0 909
+910 0.00124001502990723 0.0 0.0 0.0 910
+911 0.00142002105712891 0.0100000000000007 0.0100000000000007 0.0 911
+912 0.00124502182006836 0.0 0.0 0.0 912
+913 0.00124502182006836 0.0 0.0 0.0 913
+914 0.0012819766998291 0.0 0.0 0.0 914
+915 0.00123786926269531 0.0 0.0 0.0 915
+916 0.00124287605285645 0.0 0.0 0.0 916
+917 0.00142312049865723 0.0 0.0 0.0 917
+918 0.0012509822845459 0.00999999999999979 0.00999999999999979 0.0 918
+919 0.00124502182006836 0.0 0.0 0.0 919
+920 0.00124692916870117 0.0 0.0 0.0 920
+921 0.00124192237854004 0.0 0.0 0.0 921
+922 0.00119709968566895 0.0 0.0 0.0 922
+923 0.00140190124511719 0.0 0.0 0.0 923
+924 0.00125002861022949 0.0 0.0 0.0 924
+925 0.00124502182006836 0.0 0.0 0.0 925
+926 0.00124597549438477 0.00999999999999979 0.00999999999999979 0.0 926
+927 0.00127720832824707 0.0 0.0 0.0 927
+928 0.00126409530639648 0.0 0.0 0.0 928
+929 0.0312209129333496 0.0300000000000002 0.0300000000000002 0.0 929
+930 0.00214791297912598 0.0 0.0 0.0 930
+931 0.00183796882629395 0.0 0.0 0.0 931
+932 0.00143814086914062 0.00999999999999979 0.00999999999999979 0.0 932
+933 0.00145792961120605 0.0 0.0 0.0 933
+934 0.00152087211608887 0.0 0.0 0.0 934
+935 0.00213003158569336 0.0 0.0 0.0 935
+936 0.00166201591491699 0.0 0.0 0.0 936
+937 0.0016930103302002 0.0 0.0 0.0 937
+938 0.00139403343200684 0.00999999999999979 0.00999999999999979 0.0 938
+939 0.00214695930480957 0.0 0.0 0.0 939
+940 0.00102400779724121 0.0 0.0 0.0 940
+941 0.0012660026550293 0.0 0.0 0.0 941
+942 0.00126004219055176 0.0 0.0 0.0 942
+943 0.00126194953918457 0.0 0.0 0.0 943
+944 0.00125813484191895 0.0 0.0 0.0 944
+945 0.00152897834777832 0.0100000000000007 0.0100000000000007 0.0 945
+946 0.0012669563293457 0.0 0.0 0.0 946
+947 0.00125408172607422 0.0 0.0 0.0 947
+948 0.00125980377197266 0.0 0.0 0.0 948
+949 0.00126481056213379 0.0 0.0 0.0 949
+950 0.00125908851623535 0.0 0.0 0.0 950
+951 0.00138092041015625 0.0 0.0 0.0 951
+952 0.00125384330749512 0.00999999999999979 0.00999999999999979 0.0 952
+953 0.00108504295349121 0.0 0.0 0.0 953
+954 0.0012509822845459 0.0 0.0 0.0 954
+955 0.00125980377197266 0.0 0.0 0.0 955
+956 0.00131511688232422 0.0 0.0 0.0 956
+957 0.00130796432495117 0.0 0.0 0.0 957
+958 0.00124597549438477 0.0 0.0 0.0 958
+959 0.00125002861022949 0.0 0.0 0.0 959
+960 0.00124287605285645 0.00999999999999979 0.00999999999999979 0.0 960
+961 0.00124812126159668 0.0 0.0 0.0 961
+962 0.0012509822845459 0.0 0.0 0.0 962
+963 0.00130891799926758 0.0 0.0 0.0 963
+964 0.00123500823974609 0.0 0.0 0.0 964
+965 0.00124096870422363 0.0 0.0 0.0 965
+966 0.00124883651733398 0.0 0.0 0.0 966
+967 0.00124192237854004 0.0 0.0 0.0 967
+968 0.00124502182006836 0.00999999999999979 0.00999999999999979 0.0 968
+969 0.00124597549438477 0.0 0.0 0.0 969
+970 0.00130796432495117 0.0 0.0 0.0 970
+971 0.00124716758728027 0.0 0.0 0.0 971
+972 0.00125408172607422 0.0 0.0 0.0 972
+973 0.00125384330749512 0.0 0.0 0.0 973
+974 0.00124907493591309 0.0 0.0 0.0 974
+975 0.00124502182006836 0.0 0.0 0.0 975
+976 0.00131011009216309 0.0100000000000007 0.0100000000000007 0.0 976
+977 0.00125384330749512 0.0 0.0 0.0 977
+978 0.00124597549438477 0.0 0.0 0.0 978
+979 0.00125503540039062 0.0 0.0 0.0 979
+980 0.00125384330749512 0.0 0.0 0.0 980
+981 0.0012509822845459 0.0 0.0 0.0 981
+982 0.00131988525390625 0.0 0.0 0.0 982
+983 0.00126099586486816 0.00999999999999979 0.00999999999999979 0.0 983
+984 0.00126004219055176 0.0 0.0 0.0 984
+985 0.00127100944519043 0.0 0.0 0.0 985
+986 0.0304250717163086 0.0300000000000002 0.0300000000000002 0.0 986
+987 0.00131678581237793 0.0 0.0 0.0 987
+988 0.00130200386047363 0.0 0.0 0.0 988
+989 0.00139880180358887 0.0 0.0 0.0 989
+990 0.00517010688781738 0.0 0.0 0.0 990
+991 0.00128984451293945 0.00999999999999979 0.00999999999999979 0.0 991
+992 0.00125789642333984 0.0 0.0 0.0 992
+993 0.00152301788330078 0.0 0.0 0.0 993
+994 0.00125598907470703 0.0 0.0 0.0 994
+995 0.00125312805175781 0.0 0.0 0.0 995
+996 0.00125312805175781 0.0 0.0 0.0 996
+997 0.00125598907470703 0.0 0.0 0.0 997
+998 0.00134396553039551 0.0 0.0 0.0 998
+999 0.00124979019165039 0.00999999999999979 0.00999999999999979 0.0 999
+1000 0.00125598907470703 0.0 0.0 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log
new file mode 100644
index 0000000..ca6c64e
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log
@@ -0,0 +1,81 @@
+========================== 2009-04-01T16:49:42 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'ParserBenchmarkExt' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+ParserBenchmarkExt#parser:
+ real total user system
+sum 1.733042240 1.770000000 1.760000000 0.010000000
+min 0.000833988 0.000000000 0.000000000 0.000000000
+std- -0.001838092 -0.003229209 -0.003232727 -0.000306228
+mean 0.001733042 0.001770000 0.001760000 0.000010000
+std+ 0.005304177 0.006769209 0.006752727 0.000326228
+max 0.032314062 0.040000000 0.040000000 0.010000000
+std 0.003571134 0.004999209 0.004992727 0.000316228
+std% 206.061583704 282.441194727 283.677695666 3162.277660168
+harm 0.001283614 nan nan nan
+geo 0.001337350 0.000000000 0.000000000 0.000000000
+q1 0.001236916 0.000000000 0.000000000 0.000000000
+med 0.001246929 0.000000000 0.000000000 0.000000000
+q3 0.001260996 0.000000000 0.000000000 0.000000000
+ 1000 577.01998 0.001733042
+ calls calls/sec secs/call
+
+ 0.03074 -|*
+ 0.02759 -|
+ 0.02444 -|
+ 0.02130 -|
+ 0.01815 -|
+ 0.01500 -|
+ 0.01185 -|
+ 0.00870 -|
+ 0.00556 -|
+ 0.00241 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00125, iqr=0.00002, factor=3.00):
+very_low=32 low=15 high=77 very_high=135
+
+Ljung-Box statistics: q=13.14182 (alpha=0.05, df=50).
+0.00000 < 0.95000 => No autocorrelation was detected.
+
+ParserBenchmarkExt#parser:
+ real total user system
+sum 1.624776602 1.620000000 1.620000000 0.000000000
+min 0.000819921 0.000000000 0.000000000 0.000000000
+std- -0.001936067 -0.003223194 -0.003223194 0.000000000
+mean 0.001805307 0.001800000 0.001800000 0.000000000
+std+ 0.005546681 0.006823194 0.006823194 0.000000000
+max 0.032595873 0.040000000 0.040000000 0.000000000
+std 0.003741374 0.005023194 0.005023194 0.000000000
+std% 207.243050150 279.066347558 279.066347558 nan
+harm 0.001297084 nan nan nan
+geo 0.001358799 0.000000000 0.000000000 0.000000000
+q1 0.001241922 0.000000000 0.000000000 0.000000000
+med 0.001249075 0.000000000 0.000000000 0.000000000
+q3 0.001264811 0.000000000 0.000000000 0.000000000
+ 900 553.92230 0.001805307
+ calls calls/sec secs/call
+
+ 0.03101 -|*
+ 0.02783 -|
+ 0.02465 -|
+ 0.02147 -|
+ 0.01830 -|
+ 0.01512 -|
+ 0.01194 -|
+ 0.00876 -|
+ 0.00559 -|
+ 0.00241 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00125, iqr=0.00002, factor=3.00):
+very_low=15 low=9 high=76 very_high=110
+
+Ljung-Box statistics: q=15.89429 (alpha=0.05, df=50).
+0.00000 < 0.95000 => No autocorrelation was detected.
+
+Truncated initial 100 measurements: 1000 -> 900 (-10.00%).
+========================== 2009-04-01T16:49:49 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/ParserBenchmarkExt#parser.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/ParserBenchmarkExt#parser-autocorrelation.dat'.
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat
new file mode 100644
index 0000000..40a0668
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.126526065077488
+3 -0.144961526627029
+4 -0.139357177406834
+5 -0.143974826894912
+6 -0.142298816838391
+7 -0.139337332621068
+8 -0.0804933565996591
+9 0.863154337738992
+10 -0.0856698326462466
+11 -0.139044499260128
+12 -0.144409577021306
+13 -0.139952610271037
+14 -0.137830644370195
+15 -0.138237560134025
+16 -0.0318228583907447
+17 0.762295174674438
+18 -0.0451085401986914
+19 -0.139574314980337
+20 -0.137706022735926
+21 -0.135000055250474
+22 -0.140944565680693
+23 -0.136209503772352
+24 0.0116248943043287
+25 0.668814012806624
+26 0.00194941922845652
+27 -0.132610614145838
+28 -0.110905629572418
+29 -0.142849770878147
+30 -0.143488824970324
+31 -0.134330197021416
+32 0.0538835449451642
+33 0.575132011890069
+34 0.0505429010331842
+35 -0.137467592425517
+36 -0.125877861208834
+37 -0.148631268110284
+38 -0.136115193781866
+39 -0.137935999911469
+40 0.0988849495063306
+41 0.486986888878156
+42 0.0878752779386658
+43 -0.132160917693119
+44 -0.129643145971886
+45 -0.149607998788336
+46 -0.13478438037923
+47 -0.133019295702461
+48 0.14888456218326
+49 0.393046641526692
+50 0.120499739018384
+51 -0.12075319894839
+52 -0.132962236637115
+53 -0.144429618272262
+54 -0.119605702139121
+55 -0.101682767008184
+56 0.152609045047458
+57 0.329588666724346
+58 0.139652155383137
+59 -0.114941895372878
+60 -0.126489834985415
+61 -0.139130898077927
+62 -0.137842155865592
+63 -0.0861253194251446
+64 0.150629648832854
+65 0.281018765279001
+66 0.13915358689329
+67 -0.0896859084267328
+68 -0.123313711110523
+69 -0.142874643960391
+70 -0.135495171639773
+71 -0.0711514410690874
+72 0.147596411956897
+73 0.251872397592371
+74 0.121839586873541
+75 -0.0575973326704366
+76 -0.126799299154496
+77 -0.144543550470945
+78 -0.124111534889387
+79 -0.0466899945416701
+80 0.131315152952299
+81 0.252160996580415
+82 0.10666721386194
+83 -0.0339037628702252
+84 -0.127183439268724
+85 -0.143132479164138
+86 -0.125851156910328
+87 -0.0147264358973224
+88 0.118449575410306
+89 0.201728736307241
+90 0.0886049712661605
+91 -0.00382129887238343
+92 -0.131751835679824
+93 -0.140792586519908
+94 -0.118637713578907
+95 0.02095681301022
+96 0.0813261521961686
+97 0.180482658314394
+98 0.0795745616300617
+99 0.0126200590172042
+100 -0.127051186194544
+101 -0.137444352404263
+102 -0.109978539446263
+103 0.0380230003474469
+104 0.0605417360053513
+105 0.171590136906878
+106 0.0604018417747588
+107 0.0402566049413917
+108 -0.100533719460918
+109 -0.140161784412186
+110 -0.10312957661735
+111 0.0485735840442751
+112 0.0373718997374129
+113 0.167648566872301
+114 0.0459260028708854
+115 0.046121183499996
+116 -0.110430068243273
+117 -0.140278458993756
+118 -0.0875776667752535
+119 0.0510626017064324
+120 0.0238451049454621
+121 0.16085061505561
+122 0.030276460935626
+123 0.0561232990819215
+124 -0.105464808595229
+125 -0.135546173373586
+126 -0.079801944025769
+127 0.0599654914699078
+128 0.0136534141192567
+129 0.15182365517752
+130 0.0197096306752212
+131 0.0534620866010349
+132 -0.0917414096626928
+133 -0.127172172660217
+134 -0.0514782042484449
+135 0.0685986797971808
+136 -0.00353858174559342
+137 0.142196102713977
+138 0.0134469000302172
+139 0.0396095015311617
+140 -0.0655242334449433
+141 -0.122832275916882
+142 -0.0479444786698279
+143 0.050751999392634
+144 -0.011019423438215
+145 0.132113807423818
+146 0.00290229828051553
+147 0.0324895304839574
+148 -0.0424435359166719
+149 -0.122337133535285
+150 -0.0293859066983028
+151 0.0383678650842516
+152 -0.0194742885265415
+153 0.126609912325987
+154 -0.00608808492180084
+155 0.0395330884838485
+156 -0.0368665742861527
+157 -0.121320946026168
+158 -0.0130016640468885
+159 0.0309861525800574
+160 -0.018558052599205
+161 0.137300590031426
+162 -0.00746032318164814
+163 0.0344072362770583
+164 -0.0323265667023796
+165 -0.108099357804514
+166 -0.00728009854612887
+167 0.0166450780849257
+168 -0.0143279526502486
+169 0.109076299549607
+170 -0.0115962562225386
+171 0.0177205211496241
+172 -0.0165802545828673
+173 -0.0995936967878659
+174 0.011605779237427
+175 0.00523220776952252
+176 -0.0161523464956781
+177 0.0989734877266892
+178 -0.0129792250545895
+179 0.00898322395475531
+180 -0.0153158199749067
+181 -0.0800824097692582
+182 0.0178200034942401
+183 -0.00474786676294106
+184 -0.0157551972778546
+185 0.0942532461909266
+186 -0.00969269130384397
+187 0.00652836785416871
+188 0.000910018587766529
+189 -0.0619232375104542
+190 0.0179928377991651
+191 -0.0159711302098274
+192 -0.018744717694339
+193 0.0877619939638119
+194 -0.00502556289883764
+195 -0.00667460786160017
+196 -0.0121723963071187
+197 -0.0449032831155359
+198 0.0212125953730812
+199 -0.0262860792829433
+200 -0.016162057795481
+201 0.0811913575034835
+202 -0.00330089426590078
+203 -0.0151519759511698
+204 -0.017960262928082
+205 -0.0215037814284608
+206 0.0182943543046035
+207 -0.0341747401956763
+208 -0.0146866352915169
+209 0.0792718771176078
+210 -0.00321919646839206
+211 -0.023611826169962
+212 -0.0126184079823646
+213 -0.000954698682123794
+214 0.0297339638938581
+215 -0.0312735654036501
+216 -0.0161173400247215
+217 0.0692180762363309
+218 -0.00283288277832248
+219 -0.0388702841271483
+220 0.00457538848515518
+221 0.017702534023738
+222 0.00544552208632338
+223 -0.0446102056961128
+224 -0.0135729757433799
+225 0.061318425794026
+226 -0.00494947349286398
+227 -0.0321768515141099
+228 0.00497720552190702
+229 0.0267952089554404
+230 -0.000738697332716776
+231 -0.0492659393491728
+232 -0.0148071186922711
+233 0.0545872347505704
+234 -0.00382673762292252
+235 -0.0282826124126036
+236 0.00794227173858329
+237 0.0378731489090914
+238 -0.00835973314997662
+239 -0.0447739268124712
+240 -0.0127983223158383
+241 0.0636581757214183
+242 -0.000854926428120144
+243 -0.0310943152069584
+244 -0.00259888627525403
+245 0.0558953643657078
+246 -0.0171154785163806
+247 -0.0391969466693341
+248 -0.0117324565371219
+249 0.0429666350675198
+250 -0.00749755396653516
+251 -0.0292116650124283
+252 -0.00980920002999956
+253 0.0728023253137216
+254 -0.0242433063094984
+255 -0.0319002210401708
+256 -0.0116887755426019
+257 0.0318202643673836
+258 -0.00934603617096265
+259 -0.0320628549574969
+260 -0.0138223876265734
+261 0.0891055411435177
+262 -0.0247651373213855
+263 -0.0309052036748624
+264 -0.0100532798596721
+265 0.0243378856936498
+266 -0.0045778331986359
+267 -0.026821752316485
+268 0.000989105341668746
+269 0.0888402056176568
+270 -0.0231248959628869
+271 -0.0335116780227126
+272 -0.0117587705487187
+273 0.0167906040316404
+274 -0.00329835726197584
+275 -0.0310756973538631
+276 -0.00167909352527941
+277 0.0731070181742769
+278 -0.0163827003248124
+279 -0.0314028257468305
+280 -0.00966921026548781
+281 0.0102706941067124
+282 0.00203072073029314
+283 -0.0308313739794282
+284 0.00547048142856235
+285 0.0539371640185639
+286 -0.00773101119983001
+287 -0.0303450446180751
+288 -0.00733600257056593
+289 0.00772935578415776
+290 0.00197958032226745
+291 -0.0273846524631412
+292 0.0112672702862109
+293 0.045049409831887
+294 0.00799728833473099
+295 -0.0200723316807648
+296 -0.00733856327080615
+297 -0.001791898850227
+298 0.00388503548910184
+299 -0.0339646317125627
+300 0.0269401380987506
+301 0.0295897394272477
+302 0.00882971838376906
+303 -0.0255032485942965
+304 -0.00586660773988975
+305 -0.0143116332821527
+306 0.00534299944397864
+307 -0.0288912695776605
+308 0.0357675762276391
+309 0.0162077381233435
+310 0.0175736980127429
+311 -0.0300119235674159
+312 -0.00563685913557697
+313 -0.0218208266576808
+314 0.00532212484976867
+315 -0.0165702155219983
+316 0.03160258037738
+317 0.0156089288371773
+318 0.0179977820150998
+319 -0.0255657663584924
+320 -0.00314013163781615
+321 -0.0174257276545932
+322 0.00856637995358983
+323 -0.00719462491658861
+324 0.0248064952084498
+325 0.0118797380566877
+326 0.0164280770611372
+327 -0.0202684072278218
+328 -0.000968003222461791
+329 -0.0392377749025386
+330 0.00616137008243444
+331 -0.00395889897053221
+332 0.0209975704367836
+333 0.0165669731399994
+334 0.0167876667126637
+335 -0.0162800034591445
+336 0.00157612684339945
+337 -0.0497601369515435
+338 0.00168009969601492
+339 -0.00390601780649794
+340 0.023648567413202
+341 0.0158640545767057
+342 0.0244736064929526
+343 -0.014150912333521
+344 0.00356083314932668
+345 -0.0588422955021098
+346 0.0064856866009032
+347 0.000344551175540443
+348 0.0364591845510023
+349 0.0166346451576227
+350 0.0251881929581815
+351 -0.01627179367963
+352 0.00180146013521436
+353 -0.0649333243287488
+354 0.00866862821696223
+355 -0.00279970209152114
+356 0.0263646717293285
+357 0.0211193247836195
+358 0.0214320318152118
+359 -0.0151817766787754
+360 0.00485821947887842
+361 -0.0715992844478512
+362 0.0108378220586832
+363 -0.00133094811006224
+364 0.0247532282729131
+365 0.016495069638089
+366 0.0229500626359929
+367 -0.0147226502159456
+368 0.00647045064867083
+369 -0.073385789691225
+370 0.0114312149907294
+371 0.00249982568991776
+372 0.0225934619182297
+373 0.0238409420604106
+374 0.0300604984923422
+375 -0.00852632300506627
+376 -0.000476408670694637
+377 -0.0669893069127702
+378 0.00708510482024032
+379 -0.00633855524099727
+380 0.0316293143381378
+381 0.0224467328328507
+382 0.024131620910292
+383 -0.0144420099990433
+384 -0.00656804302886437
+385 -0.0605047793511062
+386 -0.00244909720127004
+387 -0.00228283234187514
+388 0.0347630666059254
+389 0.0255372783174439
+390 0.0249118471215147
+391 -0.0156811043640799
+392 -0.0186780895478396
+393 -0.0500470638854078
+394 -0.0106681828115876
+395 0.00299348108637595
+396 0.0375478351991823
+397 0.0272676652644904
+398 0.0249262372804901
+399 -0.0128139590091909
+400 -0.0244260954570344
+401 -0.0296360177448727
+402 -0.0156522051426314
+403 0.00371335698467524
+404 0.0375532256529043
+405 0.025029221367199
+406 0.0252473835020561
+407 -0.00821195172190185
+408 -0.0340470970501328
+409 -0.0312374914683474
+410 -0.0253324219431086
+411 0.00556439075799471
+412 0.0343851616998114
+413 0.0296108649664041
+414 0.0244865536821279
+415 -0.00642396788124207
+416 -0.0381703614534087
+417 -0.0250381539188707
+418 -0.0339628157444566
+419 0.00243992182082179
+420 0.0377363310935231
+421 0.0279269519560789
+422 0.0330045526455719
+423 -0.00511644400658994
+424 -0.0450141067262116
+425 -0.0158485572785398
+426 -0.03936429400437
+427 0.00750953654479071
+428 0.0477707926390831
+429 0.0288151654666373
+430 0.0361802804944373
+431 -0.00712917753126239
+432 -0.0583334638414398
+433 -0.00267010949721538
+434 -0.0470917242637041
+435 0.00517042251078623
+436 0.037455528907572
+437 0.0343942996609878
+438 0.0332028694901519
+439 -0.00589078251875288
+440 -0.0637043911707992
+441 0.00666183788238349
+442 -0.0525517266899241
+443 0.00895232543554424
+444 0.0382697031000271
+445 0.0284021587291105
+446 0.0334942204660841
+447 -0.00596107650540415
+448 -0.0720966795946044
+449 0.0232447585917915
+450 -0.0608153052711438
+451 0.0116399374656849
+452 0.0381251008359883
+453 0.0346830496503291
+454 0.0398065018725046
+455 -0.000362012301347499
+456 -0.0785173577161933
+457 0.0300252474048187
+458 -0.0646382374089607
+459 0.00182900934772608
+460 0.0454064481406782
+461 0.0329664080833594
+462 0.0362011391795208
+463 -0.015347551228469
+464 -0.0671509681824761
+465 0.0296481877260799
+466 -0.0746946268126137
+467 0.00641586390856246
+468 0.0470505050556008
+469 0.0366327721242302
+470 0.0377150582080205
+471 -0.0257508722774105
+472 -0.0637151879640854
+473 0.0236744558402174
+474 -0.0680975388310196
+475 0.00255042565832294
+476 0.0512681657479446
+477 0.0403605713503443
+478 0.0359001859859639
+479 -0.029132074768914
+480 -0.0508034717438863
+481 0.0239527602817767
+482 -0.0575129877889322
+483 -0.00369721861473263
+484 0.0505988973989383
+485 0.0361467620291191
+486 0.0368416078787121
+487 -0.032834716815589
+488 -0.0434932898244011
+489 0.00911801422218572
+490 -0.0523537970034941
+491 -0.00821280045148764
+492 0.0487328578561805
+493 0.0392756061114285
+494 0.0353235938763974
+495 -0.0362172978867714
+496 -0.0301630804400009
+497 -0.00312318019738603
+498 -0.0442427016803628
+499 -0.0193549364510511
+500 0.0511246815814022
+501 0.0375525162491352
+502 0.0415223485757893
+503 -0.0434162929277164
+504 -0.0174703151437594
+505 -0.0123368071049746
+506 -0.030092552759096
+507 -0.0259859780907219
+508 0.0606752480087361
+509 0.0379827626715177
+510 0.0429850681863943
+511 -0.0519282882356438
+512 -0.0109290187868267
+513 -0.0198911294093943
+514 -0.0179805613817386
+515 -0.0373506310511416
+516 0.051718263130701
+517 0.0437679408364481
+518 0.0396991923289056
+519 -0.0598738380924832
+520 0.00227956370589332
+521 -0.0315948919060393
+522 -0.00689298816517704
+523 -0.0400683003822942
+524 0.0504116144670193
+525 0.0384452328799252
+526 0.0422779082777363
+527 -0.0628378541858099
+528 0.00648345925565532
+529 -0.0339074110875153
+530 0.00392215913901875
+531 -0.0447371320235012
+532 0.0499683975261213
+533 0.0445342493453758
+534 0.0358507522616787
+535 -0.0462975420467472
+536 0.0065134510940885
+537 -0.0446950607193122
+538 0.0078695055551158
+539 -0.0435564432715238
+540 0.0490054802985018
+541 0.0429751997079501
+542 0.0249996087628272
+543 -0.0442291516924361
+544 0.00869843705070359
+545 -0.0527698107871565
+546 0.00799130494240491
+547 -0.0323718744761137
+548 0.0410065929835765
+549 0.0475759092955819
+550 0.0175755467103812
+551 -0.0376302948184889
+552 0.00700412709467122
+553 -0.0608320774535298
+554 0.0048130064138099
+555 -0.0173352616909856
+556 0.0346973915783743
+557 0.0493903178904071
+558 0.0101108717892249
+559 -0.0265084973202414
+560 0.00358635362684098
+561 -0.0470576145955835
+562 9.30616028058754e-05
+563 -0.009328796983189
+564 0.0265128180743515
+565 0.047184891847067
+566 0.00219163772528874
+567 -0.0121413168884318
+568 -0.00749414671957915
+569 -0.0440813124278593
+570 -0.00813710471833781
+571 0.00114675437656366
+572 0.0162393335738264
+573 0.0504911799834256
+574 -0.00853374126083636
+575 0.000754234959055234
+576 -0.0117204282603961
+577 -0.0354583766676116
+578 -0.0192100536607529
+579 0.00839406418544501
+580 0.00960845163504427
+581 0.0469051048472684
+582 -0.00888902900418868
+583 0.0100099116353234
+584 -0.0179909146856837
+585 -0.0244293914853853
+586 -0.0256760479816353
+587 0.0212220748711766
+588 0.00632084475559719
+589 0.0387313178071368
+590 -0.000554587934313714
+591 0.0124601538908314
+592 -0.0295249733381573
+593 -0.0144520545351094
+594 -0.0331889907164869
+595 0.0212877712137735
+596 0.00590139546386316
+597 0.0273355576179403
+598 0.00735416770830889
+599 0.0128873818372069
+600 -0.0346175922714857
+601 -0.00857703845819032
+602 -0.0362631596335238
+603 0.0242701471795148
+604 0.0131286156780055
+605 0.00696270942062036
+606 0.0188195193146635
+607 0.0103462402033716
+608 -0.0417481445059436
+609 0.00414843805232896
+610 -0.041616927291058
+611 0.0282618294134973
+612 0.02337979916365
+613 -0.00673110780182958
+614 0.0290971868544386
+615 0.017105062059816
+616 -0.0516331546555055
+617 0.0142062007627548
+618 -0.046594757738246
+619 0.0214354322279795
+620 0.0395098993458107
+621 -0.0267793069789269
+622 0.0381323026116677
+623 0.0119813141067502
+624 -0.0521722164918075
+625 0.00907497826142658
+626 -0.0377414784171271
+627 0.0150907402651132
+628 0.0450797547657188
+629 -0.0367261749783528
+630 0.0474940016463238
+631 0.000764223750645765
+632 -0.0464350834773778
+633 0.00292816454844645
+634 -0.0345472431115147
+635 0.0140802099582887
+636 0.046733825449202
+637 -0.0331976317138726
+638 0.0505769917402539
+639 -0.00507624644834293
+640 -0.0344212973139547
+641 -0.00226163410076298
+642 -0.0197922791475835
+643 0.00383630490838536
+644 0.0363444998831405
+645 -0.0152447367341023
+646 0.0410735723819794
+647 -0.00866551034416046
+648 -0.0282028390344346
+649 -0.0138273162520216
+650 -0.013988974897117
+651 -0.00356215450658962
+652 0.0315292998347554
+653 0.00265684065928491
+654 0.0297462860635905
+655 -0.0132763024515043
+656 -0.0151844375022346
+657 -0.0222624267154824
+658 -0.00808783339763846
+659 -0.0118309039774407
+660 0.0257051832194354
+661 0.0139672196593361
+662 0.0297614515417377
+663 -0.021331361380431
+664 -0.00340733006761883
+665 -0.0283789637687968
+666 0.00461054911911345
+667 -0.018250569181885
+668 0.0226081124897128
+669 0.0323347720900023
+670 0.0223372263530966
+671 -0.0329163380381145
+672 0.00653265472132318
+673 -0.0348871958579168
+674 0.0141751097268468
+675 -0.0288075244305473
+676 0.00890270626763702
+677 0.0520479385647175
+678 0.0145072446621148
+679 -0.0415204263536339
+680 0.0171547215622114
+681 -0.0470557518960979
+682 0.0193254756646944
+683 -0.0255419271372531
+684 0.00688287993008186
+685 0.0526562424346814
+686 0.00589567882152875
+687 -0.0339847831638287
+688 0.02068125784698
+689 -0.0420544887083924
+690 0.013314784448658
+691 -0.0245768886587792
+692 0.00903037071195691
+693 0.0563846260400661
+694 -0.00286801368241955
+695 -0.0213844040017938
+696 0.0126629235111523
+697 -0.0309372292635961
+698 0.00276336704503089
+699 -0.015616452692981
+700 0.00419778210216804
+701 0.0536380666776548
+702 -0.012596502198999
+703 -0.0174715146408299
+704 0.00871952059420196
+705 -0.0227565257963439
+706 -0.00318256697092859
+707 -0.0038667173143475
+708 -0.00772968118848665
+709 0.0587207873901504
+710 -0.0193357475432715
+711 -0.0115269673972748
+712 -1.7421858581782e-05
+713 -0.012115015884252
+714 -0.0149797201478353
+715 0.00756590604451175
+716 -0.0126297132883264
+717 0.0594933008421939
+718 -0.0267304156748315
+719 0.00405070013394311
+720 -0.00821048967450404
+721 -0.000558386344514712
+722 -0.0178272992410061
+723 0.0152599286078378
+724 -0.0188510979465177
+725 0.056849489519984
+726 -0.0348880232368348
+727 0.0167352525344068
+728 -0.020642086446652
+729 0.00744701455708182
+730 -0.027702827538011
+731 0.0163569136090967
+732 -0.00705447320310994
+733 0.0411987341306314
+734 -0.0263596539233783
+735 0.0159406402225642
+736 -0.0248727169666328
+737 0.0157261169316672
+738 -0.039588636677443
+739 0.019694261902396
+740 0.00199064144206026
+741 0.0194114269206411
+742 -0.0122293779441828
+743 0.0185339904720133
+744 -0.0293392689309816
+745 0.0259396934186521
+746 -0.0358486717626121
+747 0.0137081983383313
+748 0.0135827148405382
+749 0.00581560048523093
+750 -0.00646581428956839
+751 0.0110071423563427
+752 -0.0246658880723862
+753 0.0234599435571564
+754 -0.0251762927530073
+755 0.00161483936854108
+756 0.0187635618473274
+757 -0.00741664776560292
+758 0.000689537114138283
+759 0.00538728043193201
+760 -0.0121682428833197
+761 0.0107275222262937
+762 -0.0128031079890448
+763 -0.0063592461488716
+764 0.0251504687162441
+765 -0.0239334767266835
+766 0.0114670525225061
+767 -0.00487523656435794
+768 -0.00763249778942318
+769 0.0104557895326864
+770 -0.00080890423935272
+771 -0.011995729852147
+772 0.0283817192968894
+773 -0.0287562177182345
+774 0.0217718323275436
+775 -0.0101305067053654
+776 0.0014155810398293
+777 0.00324589569032011
+778 0.00708416810583891
+779 -0.022169020480487
+780 0.0234205617460705
+781 -0.0208062585550248
+782 0.0203380109609699
+783 -0.020741474408173
+784 0.0135803686158102
+785 -0.00501416160524954
+786 0.0164731425495951
+787 -0.0268911165061168
+788 0.0106549298554577
+789 -0.00845501832015795
+790 0.023385887150049
+791 -0.0315824919189702
+792 0.0225937647734562
+793 -0.0122625199927789
+794 0.0237235394650212
+795 -0.027848735297458
+796 0.0102148026540408
+797 -0.00743306965465811
+798 0.0163964193052597
+799 -0.0205275094803387
+800 0.0268449934848731
+801 -0.0196194639874214
+802 0.0245047543387088
+803 -0.018846409722053
+804 0.00241958726037752
+805 -0.00956161998696891
+806 0.00999709244485242
+807 -0.010418326586979
+808 0.0168983481695472
+809 -0.0127566274792617
+810 0.0217393096303905
+811 -0.0103549544989814
+812 -0.00649684841130904
+813 -0.00620619985783303
+814 0.000695206197500287
+815 -0.00340809372595454
+816 0.0136404808756853
+817 -0.00453202592092646
+818 0.0101641460331084
+819 0.00219305363441266
+820 -0.01561469271582
+821 -0.00960597345375202
+822 -0.00481911400465912
+823 0.00944779427817189
+824 0.00716593193427114
+825 0.00794506991287553
+826 0.00465812347978461
+827 0.010359878693985
+828 -0.020236818592972
+829 -0.0111741972267443
+830 -0.0115950977160356
+831 0.020041269074572
+832 -0.00202251725285479
+833 0.015145433881013
+834 -0.00118772326275258
+835 0.0172802408084672
+836 -0.023141151004978
+837 -0.00684287010020396
+838 -0.0222362324134472
+839 0.0290833389346101
+840 -0.00863450139262045
+841 0.0198832975538718
+842 -0.0104466516619161
+843 0.0216180798136572
+844 -0.0224573860747524
+845 -0.0159317111021684
+846 -0.0124256114118245
+847 0.0319156051078274
+848 -0.020989683927269
+849 0.0331677982754718
+850 -0.0160779048828163
+851 0.0221942143966997
+852 -0.0207114091551809
+853 -0.0193864563297597
+854 -0.00631341525970981
+855 0.0256287918067823
+856 -0.0127670576748428
+857 0.0268901900517397
+858 -0.00929763294799435
+859 0.0179202360715882
+860 -0.0205297531444686
+861 -0.0205828726597419
+862 -0.00590540758107269
+863 0.0155451399031948
+864 -0.000875709073962753
+865 0.0168572022602374
+866 0.0028001228220118
+867 0.0104479294454913
+868 -0.0213679514358647
+869 -0.0190762037709474
+870 -0.00370777717818964
+871 0.00842042601552804
+872 0.010436753298379
+873 0.00801824546756709
+874 0.00905450943087241
+875 0.00193033358362754
+876 -0.0169120672468857
+877 -0.0180536990655791
+878 -0.00178520558336185
+879 0.00342242219620668
+880 0.0209308868044849
+881 0.00123969777653587
+882 0.0189079333389431
+883 -0.00681131675201787
+884 -0.0163080121259332
+885 -0.0199735256447265
+886 0.00366535906601146
+887 -0.00556880592163452
+888 0.0273660773092557
+889 -0.0056009291081872
+890 0.0258105464894864
+891 -0.0110454740226059
+892 -0.0163301324647326
+893 -0.0182941746735561
+894 0.00615903992467205
+895 -0.0162282546172766
+896 0.0386373258470084
+897 -0.0125315671068463
+898 0.0272787535301086
+899 -0.0123831641946371
+900 -0.0133878892299601
+901 -0.0190951688075489
+902 -0.00155326284649879
+903 -0.00410581328198279
+904 0.0316127784251008
+905 -0.00291818177314328
+906 0.0227531671125918
+907 -0.0109655434893085
+908 -0.012799308403064
+909 -0.0160017423860052
+910 -0.0119329107305064
+911 0.00364258505980213
+912 0.0217756860858317
+913 0.010678734327474
+914 0.0134293321905379
+915 -0.0116912782885493
+916 -0.0117630350181795
+917 -0.0135312586647217
+918 -0.0108968297221034
+919 0.00680452587364608
+920 0.0148747844715078
+921 0.0162949694832807
+922 0.00539910868322474
+923 -0.00933468939253505
+924 -0.0106686683836374
+925 -0.0124085659528643
+926 -0.0105711782287246
+927 0.00804235477237977
+928 0.00723801263775247
+929 0.0258061476363918
+930 -0.000684398388361734
+931 -0.00762103435599326
+932 -0.00904303753421588
+933 -0.00745301596275639
+934 -0.0103044124193686
+935 0.00595191617101465
+936 2.14978806537769e-05
+937 0.0352834100860169
+938 -0.00718396988767262
+939 -0.00837792361666858
+940 -0.00720830894781464
+941 -0.00721256609199517
+942 -0.0103563055654315
+943 0.0067689029813515
+944 -0.00615969185391731
+945 0.0366438822751357
+946 -0.00555322732762464
+947 -0.00559909850816345
+948 -0.00807226171468928
+949 -0.0072437466206792
+950 -0.00880657440286336
+951 -0.000406817302546885
+952 0.00334053871073266
+953 0.0282996182562531
+954 -0.00548530337183551
+955 -0.00508266404610792
+956 -0.00475991829082716
+957 -0.00556541448888507
+958 -0.00693102605261411
+959 -0.0068914951848352
+960 0.0124551723792496
+961 0.0205485192799428
+962 -0.0051215464298893
+963 -0.00544517946765895
+964 -0.00360902370385679
+965 -0.00389124817008502
+966 -0.00568418258247609
+967 -0.00451409289805204
+968 0.0126296974425642
+969 0.0119357974221847
+970 -0.00453960421739095
+971 -0.00389602063108262
+972 -0.00253945519375536
+973 -0.00246645747512712
+974 -0.00331176412956721
+975 -0.0045686818998509
+976 0.0119005284725565
+977 0.00477869960024375
+978 -0.00316972429661236
+979 -0.00294762637219811
+980 -0.00197263485163538
+981 -0.00240027919608702
+982 -0.00221728547295443
+983 -0.00268664184058333
+984 0.013078013292045
+985 -0.00054100792945422
+986 -0.000917736517605598
+987 -0.001567052283492
+988 -0.000836676486280892
+989 -0.00221208695388904
+990 -0.00248903162837629
+991 -0.0021625005351972
+992 0.0072477698974949
+993 0.00063353338379511
+994 0.000469110586525005
+995 -0.000441976909684745
+996 -0.000609378899765559
+997 -0.000809499361526555
+998 -0.0010684119522621
+999 -0.00124157520451844
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat
new file mode 100644
index 0000000..0d92cc3
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0375239849090576 0.029999999999994 0.029999999999994 0.0 1
+2 0.0333089828491211 0.0300000000000011 0.0300000000000011 0.0 2
+3 0.0330851078033447 0.0399999999999991 0.0399999999999991 0.0 3
+4 0.0331559181213379 0.0300000000000011 0.0300000000000011 0.0 4
+5 0.0330770015716553 0.0300000000000011 0.0300000000000011 0.0 5
+6 0.0331110954284668 0.0399999999999991 0.0399999999999991 0.0 6
+7 0.0357470512390137 0.0300000000000011 0.0300000000000011 0.0 7
+8 0.0360550880432129 0.0399999999999991 0.0399999999999991 0.0 8
+9 0.0575530529022217 0.0600000000000023 0.0600000000000023 0.0 9
+10 0.0352299213409424 0.0300000000000011 0.0300000000000011 0.0 10
+11 0.0335679054260254 0.029999999999994 0.029999999999994 0.0 11
+12 0.0332560539245605 0.0400000000000063 0.0400000000000063 0.0 12
+13 0.0364248752593994 0.029999999999994 0.029999999999994 0.0 13
+14 0.033275842666626 0.0400000000000063 0.0400000000000063 0.0 14
+15 0.0336852073669434 0.029999999999994 0.029999999999994 0.0 15
+16 0.0334939956665039 0.0300000000000011 0.0300000000000011 0.0 16
+17 0.0582540035247803 0.0600000000000023 0.0600000000000023 0.0 17
+18 0.0354878902435303 0.0399999999999991 0.0399999999999991 0.0 18
+19 0.0385029315948486 0.0399999999999991 0.0399999999999991 0.0 19
+20 0.0362861156463623 0.0300000000000011 0.0300000000000011 0.0 20
+21 0.035506010055542 0.0399999999999991 0.0399999999999991 0.0 21
+22 0.0334300994873047 0.0300000000000011 0.0300000000000011 0.0 22
+23 0.0329139232635498 0.0399999999999991 0.0399999999999991 0.0 23
+24 0.0332398414611816 0.0300000000000011 0.0300000000000011 0.0 24
+25 0.0579190254211426 0.0600000000000023 0.0600000000000023 0.0 25
+26 0.0361781120300293 0.029999999999994 0.029999999999994 0.0 26
+27 0.0338189601898193 0.0400000000000063 0.0400000000000063 0.0 27
+28 0.0347120761871338 0.029999999999994 0.029999999999994 0.0 28
+29 0.0333528518676758 0.0399999999999991 0.0399999999999991 0.0 29
+30 0.0332620143890381 0.0300000000000011 0.0300000000000011 0.0 30
+31 0.0329258441925049 0.0300000000000011 0.0300000000000011 0.0 31
+32 0.033383846282959 0.0300000000000011 0.0300000000000011 0.0 32
+33 0.0601050853729248 0.0700000000000003 0.0700000000000003 0.0 33
+34 0.0353600978851318 0.0300000000000011 0.0300000000000011 0.0 34
+35 0.0334739685058594 0.0300000000000011 0.0300000000000011 0.0 35
+36 0.0333919525146484 0.0399999999999991 0.0399999999999991 0.0 36
+37 0.034959077835083 0.0300000000000011 0.0300000000000011 0.0 37
+38 0.0332329273223877 0.029999999999994 0.029999999999994 0.0 38
+39 0.0333740711212158 0.0400000000000063 0.0400000000000063 0.0 39
+40 0.0358071327209473 0.029999999999994 0.029999999999994 0.0 40
+41 0.0592548847198486 0.0600000000000023 0.0600000000000023 0.0 41
+42 0.0328431129455566 0.0399999999999991 0.0399999999999991 0.0 42
+43 0.0325570106506348 0.0300000000000011 0.0300000000000011 0.0 43
+44 0.0326550006866455 0.0300000000000011 0.0300000000000011 0.0 44
+45 0.0341711044311523 0.0300000000000011 0.0300000000000011 0.0 45
+46 0.0385479927062988 0.0300000000000011 0.0300000000000011 0.0 46
+47 0.0355618000030518 0.0399999999999991 0.0399999999999991 0.0 47
+48 0.0336899757385254 0.0300000000000011 0.0300000000000011 0.0 48
+49 0.0340290069580078 0.0399999999999991 0.0399999999999991 0.0 49
+50 0.057744026184082 0.0499999999999972 0.0499999999999972 0.0 50
+51 0.0332441329956055 0.0399999999999991 0.0399999999999991 0.0 51
+52 0.0334060192108154 0.0300000000000011 0.0300000000000011 0.0 52
+53 0.0331339836120605 0.0300000000000011 0.0300000000000011 0.0 53
+54 0.0364229679107666 0.0399999999999991 0.0399999999999991 0.0 54
+55 0.0333731174468994 0.0300000000000011 0.0300000000000011 0.0 55
+56 0.0333929061889648 0.0399999999999991 0.0399999999999991 0.0 56
+57 0.0332939624786377 0.0300000000000011 0.0300000000000011 0.0 57
+58 0.0580708980560303 0.0600000000000023 0.0600000000000023 0.0 58
+59 0.0334999561309814 0.0300000000000011 0.0300000000000011 0.0 59
+60 0.0361111164093018 0.0399999999999991 0.0399999999999991 0.0 60
+61 0.0338809490203857 0.0300000000000011 0.0300000000000011 0.0 61
+62 0.0334880352020264 0.0399999999999991 0.0399999999999991 0.0 62
+63 0.0335280895233154 0.029999999999994 0.029999999999994 0.0 63
+64 0.0350849628448486 0.0300000000000011 0.0300000000000011 0.0 64
+65 0.033484935760498 0.0399999999999991 0.0399999999999991 0.0 65
+66 0.0578420162200928 0.0500000000000043 0.0500000000000043 0.0 66
+67 0.0367329120635986 0.0399999999999991 0.0399999999999991 0.0 67
+68 0.0351338386535645 0.0399999999999991 0.0399999999999991 0.0 68
+69 0.0334072113037109 0.0300000000000011 0.0300000000000011 0.0 69
+70 0.0339431762695312 0.0300000000000011 0.0300000000000011 0.0 70
+71 0.0332098007202148 0.0399999999999991 0.0399999999999991 0.0 71
+72 0.034019947052002 0.0300000000000011 0.0300000000000011 0.0 72
+73 0.0393249988555908 0.0399999999999991 0.0399999999999991 0.0 73
+74 0.0685920715332031 0.0600000000000023 0.0600000000000023 0.0 74
+75 0.034276008605957 0.0399999999999991 0.0399999999999991 0.0 75
+76 0.0334501266479492 0.029999999999994 0.029999999999994 0.0 76
+77 0.0332150459289551 0.0300000000000011 0.0300000000000011 0.0 77
+78 0.0333437919616699 0.0399999999999991 0.0399999999999991 0.0 78
+79 0.0332369804382324 0.0300000000000011 0.0300000000000011 0.0 79
+80 0.0360598564147949 0.0399999999999991 0.0399999999999991 0.0 80
+81 0.0335109233856201 0.0300000000000011 0.0300000000000011 0.0 81
+82 0.058535099029541 0.0600000000000023 0.0600000000000023 0.0 82
+83 0.0335390567779541 0.0300000000000011 0.0300000000000011 0.0 83
+84 0.0335979461669922 0.0399999999999991 0.0399999999999991 0.0 84
+85 0.0331900119781494 0.0300000000000011 0.0300000000000011 0.0 85
+86 0.03330397605896 0.0300000000000011 0.0300000000000011 0.0 86
+87 0.0366411209106445 0.0399999999999991 0.0399999999999991 0.0 87
+88 0.0347549915313721 0.0300000000000011 0.0300000000000011 0.0 88
+89 0.0331470966339111 0.0399999999999991 0.0399999999999991 0.0 89
+90 0.0598249435424805 0.0599999999999952 0.0599999999999952 0.0 90
+91 0.0330801010131836 0.0300000000000011 0.0300000000000011 0.0 91
+92 0.0329310894012451 0.0300000000000011 0.0300000000000011 0.0 92
+93 0.032721996307373 0.0300000000000011 0.0300000000000011 0.0 93
+94 0.0355160236358643 0.0399999999999991 0.0399999999999991 0.0 94
+95 0.0339648723602295 0.0300000000000011 0.0300000000000011 0.0 95
+96 0.032512903213501 0.0399999999999991 0.0399999999999991 0.0 96
+97 0.0330419540405273 0.0300000000000011 0.0300000000000011 0.0 97
+98 0.0334761142730713 0.0300000000000011 0.0300000000000011 0.0 98
+99 0.0660569667816162 0.0700000000000003 0.0700000000000003 0.0 99
+100 0.0368058681488037 0.0399999999999991 0.0399999999999991 0.0 100
+101 0.0347878932952881 0.0300000000000011 0.0300000000000011 0.0 101
+102 0.0338079929351807 0.029999999999994 0.029999999999994 0.0 102
+103 0.0334770679473877 0.029999999999994 0.029999999999994 0.0 103
+104 0.0329740047454834 0.0300000000000011 0.0300000000000011 0.0 104
+105 0.0333049297332764 0.0300000000000011 0.0300000000000011 0.0 105
+106 0.033519983291626 0.0399999999999991 0.0399999999999991 0.0 106
+107 0.0611979961395264 0.0600000000000023 0.0600000000000023 0.0 107
+108 0.0340859889984131 0.0300000000000011 0.0300000000000011 0.0 108
+109 0.0335040092468262 0.0399999999999991 0.0399999999999991 0.0 109
+110 0.0334708690643311 0.0300000000000011 0.0300000000000011 0.0 110
+111 0.0335888862609863 0.0300000000000011 0.0300000000000011 0.0 111
+112 0.033301830291748 0.0399999999999991 0.0399999999999991 0.0 112
+113 0.0332660675048828 0.0300000000000011 0.0300000000000011 0.0 113
+114 0.0370340347290039 0.0399999999999991 0.0399999999999991 0.0 114
+115 0.0586259365081787 0.0599999999999952 0.0599999999999952 0.0 115
+116 0.0336349010467529 0.0300000000000011 0.0300000000000011 0.0 116
+117 0.0350830554962158 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.033397912979126 0.0399999999999991 0.0399999999999991 0.0 118
+119 0.0334382057189941 0.0300000000000011 0.0300000000000011 0.0 119
+120 0.0333988666534424 0.0399999999999991 0.0399999999999991 0.0 120
+121 0.0362389087677002 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.033973217010498 0.0399999999999991 0.0399999999999991 0.0 122
+123 0.0578141212463379 0.0499999999999972 0.0499999999999972 0.0 123
+124 0.033689022064209 0.0400000000000063 0.0400000000000063 0.0 124
+125 0.0340471267700195 0.029999999999994 0.029999999999994 0.0 125
+126 0.0395550727844238 0.0400000000000063 0.0400000000000063 0.0 126
+127 0.0365371704101562 0.0399999999999991 0.0399999999999991 0.0 127
+128 0.034188985824585 0.0300000000000011 0.0300000000000011 0.0 128
+129 0.0336990356445312 0.0399999999999991 0.0399999999999991 0.0 129
+130 0.033534049987793 0.029999999999994 0.029999999999994 0.0 130
+131 0.0577750205993652 0.0600000000000023 0.0600000000000023 0.0 131
+132 0.0339059829711914 0.0300000000000011 0.0300000000000011 0.0 132
+133 0.0334141254425049 0.0300000000000011 0.0300000000000011 0.0 133
+134 0.0364940166473389 0.0399999999999991 0.0399999999999991 0.0 134
+135 0.0346250534057617 0.0399999999999991 0.0399999999999991 0.0 135
+136 0.03348708152771 0.0300000000000011 0.0300000000000011 0.0 136
+137 0.0330390930175781 0.0300000000000011 0.0300000000000011 0.0 137
+138 0.0333828926086426 0.0399999999999991 0.0399999999999991 0.0 138
+139 0.0577211380004883 0.0499999999999972 0.0499999999999972 0.0 139
+140 0.0367538928985596 0.0399999999999991 0.0399999999999991 0.0 140
+141 0.0339748859405518 0.0300000000000011 0.0300000000000011 0.0 141
+142 0.0334391593933105 0.0399999999999991 0.0399999999999991 0.0 142
+143 0.0334470272064209 0.0300000000000011 0.0300000000000011 0.0 143
+144 0.0356760025024414 0.0399999999999991 0.0399999999999991 0.0 144
+145 0.0332551002502441 0.0300000000000011 0.0300000000000011 0.0 145
+146 0.0335030555725098 0.0300000000000011 0.0300000000000011 0.0 146
+147 0.0603840351104736 0.0600000000000023 0.0600000000000023 0.0 147
+148 0.033195972442627 0.0399999999999991 0.0399999999999991 0.0 148
+149 0.0326118469238281 0.0300000000000011 0.0300000000000011 0.0 149
+150 0.0324470996856689 0.029999999999994 0.029999999999994 0.0 150
+151 0.0330009460449219 0.0400000000000063 0.0400000000000063 0.0 151
+152 0.0324180126190186 0.029999999999994 0.029999999999994 0.0 152
+153 0.0400440692901611 0.0400000000000063 0.0400000000000063 0.0 153
+154 0.0362899303436279 0.029999999999994 0.029999999999994 0.0 154
+155 0.0349278450012207 0.0400000000000063 0.0400000000000063 0.0 155
+156 0.0600240230560303 0.0599999999999952 0.0599999999999952 0.0 156
+157 0.0334708690643311 0.0300000000000011 0.0300000000000011 0.0 157
+158 0.0335209369659424 0.0399999999999991 0.0399999999999991 0.0 158
+159 0.0335359573364258 0.0300000000000011 0.0300000000000011 0.0 159
+160 0.0334579944610596 0.0300000000000011 0.0300000000000011 0.0 160
+161 0.0362169742584229 0.0399999999999991 0.0399999999999991 0.0 161
+162 0.0338380336761475 0.0300000000000011 0.0300000000000011 0.0 162
+163 0.0335981845855713 0.0399999999999991 0.0399999999999991 0.0 163
+164 0.0578079223632812 0.0499999999999972 0.0499999999999972 0.0 164
+165 0.0334019660949707 0.0399999999999991 0.0399999999999991 0.0 165
+166 0.0331990718841553 0.0300000000000011 0.0300000000000011 0.0 166
+167 0.0360620021820068 0.0399999999999991 0.0399999999999991 0.0 167
+168 0.0344648361206055 0.0300000000000011 0.0300000000000011 0.0 168
+169 0.0341999530792236 0.0399999999999991 0.0399999999999991 0.0 169
+170 0.0331728458404541 0.0300000000000011 0.0300000000000011 0.0 170
+171 0.0350158214569092 0.0300000000000011 0.0300000000000011 0.0 171
+172 0.0580298900604248 0.0600000000000023 0.0600000000000023 0.0 172
+173 0.0335690975189209 0.0300000000000011 0.0300000000000011 0.0 173
+174 0.036384105682373 0.0399999999999991 0.0399999999999991 0.0 174
+175 0.034492015838623 0.0300000000000011 0.0300000000000011 0.0 175
+176 0.03336501121521 0.0399999999999991 0.0399999999999991 0.0 176
+177 0.0331079959869385 0.029999999999994 0.029999999999994 0.0 177
+178 0.0331339836120605 0.0300000000000011 0.0300000000000011 0.0 178
+179 0.0350081920623779 0.0399999999999991 0.0399999999999991 0.0 179
+180 0.0666470527648926 0.0700000000000003 0.0700000000000003 0.0 180
+181 0.0338301658630371 0.0300000000000011 0.0300000000000011 0.0 181
+182 0.0340950489044189 0.0300000000000011 0.0300000000000011 0.0 182
+183 0.0334529876708984 0.0399999999999991 0.0399999999999991 0.0 183
+184 0.0331630706787109 0.0300000000000011 0.0300000000000011 0.0 184
+185 0.0333731174468994 0.0300000000000011 0.0300000000000011 0.0 185
+186 0.0330700874328613 0.0399999999999991 0.0399999999999991 0.0 186
+187 0.0334250926971436 0.0300000000000011 0.0300000000000011 0.0 187
+188 0.0619869232177734 0.0600000000000023 0.0600000000000023 0.0 188
+189 0.0336270332336426 0.0399999999999991 0.0399999999999991 0.0 189
+190 0.0331699848175049 0.029999999999994 0.029999999999994 0.0 190
+191 0.033411979675293 0.0300000000000011 0.0300000000000011 0.0 191
+192 0.0346980094909668 0.0399999999999991 0.0399999999999991 0.0 192
+193 0.0330710411071777 0.0300000000000011 0.0300000000000011 0.0 193
+194 0.0360589027404785 0.0399999999999991 0.0399999999999991 0.0 194
+195 0.0341928005218506 0.0300000000000011 0.0300000000000011 0.0 195
+196 0.0596940517425537 0.0600000000000023 0.0600000000000023 0.0 196
+197 0.0352950096130371 0.0300000000000011 0.0300000000000011 0.0 197
+198 0.0335190296173096 0.0399999999999991 0.0399999999999991 0.0 198
+199 0.0334808826446533 0.0300000000000011 0.0300000000000011 0.0 199
+200 0.0335469245910645 0.0399999999999991 0.0399999999999991 0.0 200
+201 0.035862922668457 0.0300000000000011 0.0300000000000011 0.0 201
+202 0.034390926361084 0.0399999999999991 0.0399999999999991 0.0 202
+203 0.0333080291748047 0.0300000000000011 0.0300000000000011 0.0 203
+204 0.0580418109893799 0.0599999999999952 0.0599999999999952 0.0 204
+205 0.0345079898834229 0.0300000000000011 0.0300000000000011 0.0 205
+206 0.041719913482666 0.0499999999999972 0.0399999999999991 0.01 206
+207 0.0368390083312988 0.0399999999999991 0.0399999999999991 0.0 207
+208 0.0351078510284424 0.0300000000000011 0.0300000000000011 0.0 208
+209 0.0345809459686279 0.0399999999999991 0.0399999999999991 0.0 209
+210 0.0339300632476807 0.0300000000000011 0.0300000000000011 0.0 210
+211 0.0333361625671387 0.0399999999999991 0.0399999999999991 0.0 211
+212 0.0581560134887695 0.0600000000000023 0.0600000000000023 0.0 212
+213 0.0329880714416504 0.0300000000000011 0.0300000000000011 0.0 213
+214 0.0360338687896729 0.0300000000000011 0.0300000000000011 0.0 214
+215 0.0338609218597412 0.0399999999999991 0.0399999999999991 0.0 215
+216 0.0329849720001221 0.0300000000000011 0.0300000000000011 0.0 216
+217 0.0327110290527344 0.029999999999994 0.029999999999994 0.0 217
+218 0.0328159332275391 0.0400000000000063 0.0400000000000063 0.0 218
+219 0.0330610275268555 0.029999999999994 0.029999999999994 0.0 219
+220 0.03336501121521 0.0300000000000011 0.0300000000000011 0.0 220
+221 0.0611529350280762 0.0600000000000023 0.0600000000000023 0.0 221
+222 0.0351941585540771 0.0399999999999991 0.0399999999999991 0.0 222
+223 0.0333490371704102 0.0300000000000011 0.0300000000000011 0.0 223
+224 0.0350041389465332 0.0399999999999991 0.0399999999999991 0.0 224
+225 0.0333740711212158 0.0300000000000011 0.0300000000000011 0.0 225
+226 0.0332489013671875 0.0300000000000011 0.0300000000000011 0.0 226
+227 0.0336949825286865 0.0399999999999991 0.0399999999999991 0.0 227
+228 0.035956859588623 0.0300000000000011 0.0300000000000011 0.0 228
+229 0.0582809448242188 0.0599999999999952 0.0599999999999952 0.0 229
+230 0.0335919857025146 0.0300000000000011 0.0300000000000011 0.0 230
+231 0.0334489345550537 0.0399999999999991 0.0399999999999991 0.0 231
+232 0.0346810817718506 0.0300000000000011 0.0300000000000011 0.0 232
+233 0.0393500328063965 0.0399999999999991 0.0399999999999991 0.0 233
+234 0.0365040302276611 0.0399999999999991 0.0399999999999991 0.0 234
+235 0.0341880321502686 0.0300000000000011 0.0300000000000011 0.0 235
+236 0.0340659618377686 0.0399999999999991 0.0399999999999991 0.0 236
+237 0.0579462051391602 0.0500000000000043 0.0500000000000043 0.0 237
+238 0.0337111949920654 0.0399999999999991 0.0399999999999991 0.0 238
+239 0.0335190296173096 0.0300000000000011 0.0300000000000011 0.0 239
+240 0.0335848331451416 0.0399999999999991 0.0399999999999991 0.0 240
+241 0.0367398262023926 0.0300000000000011 0.0300000000000011 0.0 241
+242 0.0346360206604004 0.0399999999999991 0.0399999999999991 0.0 242
+243 0.0332989692687988 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0345680713653564 0.029999999999994 0.029999999999994 0.0 244
+245 0.0580320358276367 0.0600000000000023 0.0600000000000023 0.0 245
+246 0.0333890914916992 0.0399999999999991 0.0399999999999991 0.0 246
+247 0.0363030433654785 0.0300000000000011 0.0300000000000011 0.0 247
+248 0.0343329906463623 0.0399999999999991 0.0399999999999991 0.0 248
+249 0.0347940921783447 0.0300000000000011 0.0300000000000011 0.0 249
+250 0.0332629680633545 0.0300000000000011 0.0300000000000011 0.0 250
+251 0.0347621440887451 0.0399999999999991 0.0399999999999991 0.0 251
+252 0.0334999561309814 0.0300000000000011 0.0300000000000011 0.0 252
+253 0.0580670833587646 0.0600000000000023 0.0600000000000023 0.0 253
+254 0.0367870330810547 0.0399999999999991 0.0399999999999991 0.0 254
+255 0.0336589813232422 0.0300000000000011 0.0300000000000011 0.0 255
+256 0.0331900119781494 0.029999999999994 0.029999999999994 0.0 256
+257 0.0331740379333496 0.0399999999999991 0.0399999999999991 0.0 257
+258 0.0331830978393555 0.0300000000000011 0.0300000000000011 0.0 258
+259 0.037837028503418 0.0399999999999991 0.0399999999999991 0.0 259
+260 0.0366449356079102 0.0300000000000011 0.0300000000000011 0.0 260
+261 0.0612552165985107 0.0599999999999952 0.0599999999999952 0.0 261
+262 0.0344550609588623 0.0300000000000011 0.0300000000000011 0.0 262
+263 0.0333309173583984 0.0300000000000011 0.0300000000000011 0.0 263
+264 0.0331869125366211 0.0399999999999991 0.0399999999999991 0.0 264
+265 0.0332980155944824 0.0300000000000011 0.0300000000000011 0.0 265
+266 0.0332081317901611 0.0300000000000011 0.0300000000000011 0.0 266
+267 0.0328857898712158 0.0399999999999991 0.0399999999999991 0.0 267
+268 0.036323070526123 0.0300000000000011 0.0300000000000011 0.0 268
+269 0.0584030151367188 0.0599999999999952 0.0599999999999952 0.0 269
+270 0.0336670875549316 0.0399999999999991 0.0399999999999991 0.0 270
+271 0.0333220958709717 0.0300000000000011 0.0300000000000011 0.0 271
+272 0.0331919193267822 0.0300000000000011 0.0300000000000011 0.0 272
+273 0.0332930088043213 0.0399999999999991 0.0399999999999991 0.0 273
+274 0.0363700389862061 0.0300000000000011 0.0300000000000011 0.0 274
+275 0.0336799621582031 0.0399999999999991 0.0399999999999991 0.0 275
+276 0.0346400737762451 0.0300000000000011 0.0300000000000011 0.0 276
+277 0.0583391189575195 0.0600000000000023 0.0600000000000023 0.0 277
+278 0.0353269577026367 0.0300000000000011 0.0300000000000011 0.0 278
+279 0.0334451198577881 0.0399999999999991 0.0399999999999991 0.0 279
+280 0.0338170528411865 0.0300000000000011 0.0300000000000011 0.0 280
+281 0.0358221530914307 0.0399999999999991 0.0399999999999991 0.0 281
+282 0.033682107925415 0.0300000000000011 0.0300000000000011 0.0 282
+283 0.0331659317016602 0.029999999999994 0.029999999999994 0.0 283
+284 0.0337538719177246 0.0399999999999991 0.0399999999999991 0.0 284
+285 0.0577969551086426 0.0600000000000023 0.0600000000000023 0.0 285
+286 0.0399131774902344 0.0399999999999991 0.0399999999999991 0.0 286
+287 0.0358040332794189 0.0300000000000011 0.0300000000000011 0.0 287
+288 0.0327050685882568 0.0300000000000011 0.0300000000000011 0.0 288
+289 0.0338749885559082 0.0399999999999991 0.0399999999999991 0.0 289
+290 0.0324099063873291 0.0300000000000011 0.0300000000000011 0.0 290
+291 0.032336950302124 0.0300000000000011 0.0300000000000011 0.0 291
+292 0.0333211421966553 0.0399999999999991 0.0399999999999991 0.0 292
+293 0.0579719543457031 0.0499999999999972 0.0499999999999972 0.0 293
+294 0.0362699031829834 0.0399999999999991 0.0399999999999991 0.0 294
+295 0.0343790054321289 0.0300000000000011 0.0300000000000011 0.0 295
+296 0.0331552028656006 0.0399999999999991 0.0399999999999991 0.0 296
+297 0.0328569412231445 0.0300000000000011 0.0300000000000011 0.0 297
+298 0.0329990386962891 0.0300000000000011 0.0300000000000011 0.0 298
+299 0.0327639579772949 0.0399999999999991 0.0399999999999991 0.0 299
+300 0.0331850051879883 0.0300000000000011 0.0300000000000011 0.0 300
+301 0.0610020160675049 0.0600000000000023 0.0600000000000023 0.0 301
+302 0.0331580638885498 0.0300000000000011 0.0300000000000011 0.0 302
+303 0.0325980186462402 0.0399999999999991 0.0399999999999991 0.0 303
+304 0.0325989723205566 0.029999999999994 0.029999999999994 0.0 304
+305 0.0341310501098633 0.0300000000000011 0.0300000000000011 0.0 305
+306 0.0326070785522461 0.0399999999999991 0.0399999999999991 0.0 306
+307 0.032383918762207 0.0300000000000011 0.0300000000000011 0.0 307
+308 0.0361649990081787 0.0300000000000011 0.0300000000000011 0.0 308
+309 0.0585198402404785 0.0600000000000023 0.0600000000000023 0.0 309
+310 0.0331130027770996 0.0399999999999991 0.0399999999999991 0.0 310
+311 0.0329859256744385 0.0300000000000011 0.0300000000000011 0.0 311
+312 0.0329129695892334 0.0300000000000011 0.0300000000000011 0.0 312
+313 0.0405938625335693 0.0399999999999991 0.0399999999999991 0.0 313
+314 0.0329680442810059 0.0300000000000011 0.0300000000000011 0.0 314
+315 0.0359671115875244 0.0399999999999991 0.0399999999999991 0.0 315
+316 0.0347959995269775 0.0399999999999991 0.0399999999999991 0.0 316
+317 0.0335128307342529 0.0300000000000011 0.0300000000000011 0.0 317
+318 0.0581021308898926 0.0599999999999952 0.0599999999999952 0.0 318
+319 0.033390998840332 0.0300000000000011 0.0300000000000011 0.0 319
+320 0.0332300662994385 0.0300000000000011 0.0300000000000011 0.0 320
+321 0.0363011360168457 0.0399999999999991 0.0399999999999991 0.0 321
+322 0.0331549644470215 0.0300000000000011 0.0300000000000011 0.0 322
+323 0.0341241359710693 0.0399999999999991 0.0399999999999991 0.0 323
+324 0.0336441993713379 0.0300000000000011 0.0300000000000011 0.0 324
+325 0.0336179733276367 0.0300000000000011 0.0300000000000011 0.0 325
+326 0.0578069686889648 0.0599999999999952 0.0599999999999952 0.0 326
+327 0.0333080291748047 0.0400000000000063 0.0400000000000063 0.0 327
+328 0.0363671779632568 0.029999999999994 0.029999999999994 0.0 328
+329 0.0343098640441895 0.0400000000000063 0.0400000000000063 0.0 329
+330 0.033099889755249 0.029999999999994 0.029999999999994 0.0 330
+331 0.0332112312316895 0.0300000000000011 0.0300000000000011 0.0 331
+332 0.0349369049072266 0.0399999999999991 0.0399999999999991 0.0 332
+333 0.033397912979126 0.0300000000000011 0.0300000000000011 0.0 333
+334 0.0581459999084473 0.0600000000000023 0.0600000000000023 0.0 334
+335 0.0366590023040771 0.0300000000000011 0.0300000000000011 0.0 335
+336 0.0336220264434814 0.0399999999999991 0.0399999999999991 0.0 336
+337 0.0332498550415039 0.0300000000000011 0.0300000000000011 0.0 337
+338 0.0331971645355225 0.0399999999999991 0.0399999999999991 0.0 338
+339 0.0332369804382324 0.0300000000000011 0.0300000000000011 0.0 339
+340 0.0404288768768311 0.0399999999999991 0.0399999999999991 0.0 340
+341 0.0335631370544434 0.0300000000000011 0.0300000000000011 0.0 341
+342 0.0613040924072266 0.0599999999999952 0.0599999999999952 0.0 342
+343 0.0339159965515137 0.0399999999999991 0.0399999999999991 0.0 343
+344 0.0333619117736816 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0331740379333496 0.0300000000000011 0.0300000000000011 0.0 345
+346 0.0331220626831055 0.0399999999999991 0.0399999999999991 0.0 346
+347 0.0331380367279053 0.0300000000000011 0.0300000000000011 0.0 347
+348 0.0358641147613525 0.0399999999999991 0.0399999999999991 0.0 348
+349 0.0335299968719482 0.0300000000000011 0.0300000000000011 0.0 349
+350 0.0584430694580078 0.0600000000000023 0.0600000000000023 0.0 350
+351 0.0353488922119141 0.029999999999994 0.029999999999994 0.0 351
+352 0.03336501121521 0.0400000000000063 0.0400000000000063 0.0 352
+353 0.0332889556884766 0.029999999999994 0.029999999999994 0.0 353
+354 0.0334041118621826 0.0300000000000011 0.0300000000000011 0.0 354
+355 0.0363349914550781 0.0399999999999991 0.0399999999999991 0.0 355
+356 0.0346698760986328 0.0300000000000011 0.0300000000000011 0.0 356
+357 0.0335850715637207 0.0399999999999991 0.0399999999999991 0.0 357
+358 0.0599031448364258 0.0600000000000023 0.0600000000000023 0.0 358
+359 0.0340287685394287 0.0300000000000011 0.0300000000000011 0.0 359
+360 0.0335278511047363 0.0300000000000011 0.0300000000000011 0.0 360
+361 0.0349221229553223 0.0399999999999991 0.0399999999999991 0.0 361
+362 0.0355300903320312 0.0300000000000011 0.0300000000000011 0.0 362
+363 0.0349609851837158 0.0399999999999991 0.0399999999999991 0.0 363
+364 0.0329630374908447 0.0300000000000011 0.0300000000000011 0.0 364
+365 0.0333020687103271 0.0399999999999991 0.0399999999999991 0.0 365
+366 0.065701961517334 0.0599999999999952 0.0599999999999952 0.0 366
+367 0.0337100028991699 0.0400000000000063 0.0400000000000063 0.0 367
+368 0.0366199016571045 0.029999999999994 0.029999999999994 0.0 368
+369 0.0340349674224854 0.0400000000000063 0.0400000000000063 0.0 369
+370 0.0338621139526367 0.029999999999994 0.029999999999994 0.0 370
+371 0.0332958698272705 0.0300000000000011 0.0300000000000011 0.0 371
+372 0.0330479145050049 0.0399999999999991 0.0399999999999991 0.0 372
+373 0.033778190612793 0.0300000000000011 0.0300000000000011 0.0 373
+374 0.0588729381561279 0.0600000000000023 0.0600000000000023 0.0 374
+375 0.036099910736084 0.0399999999999991 0.0399999999999991 0.0 375
+376 0.0358579158782959 0.0300000000000011 0.0300000000000011 0.0 376
+377 0.03354811668396 0.0399999999999991 0.0399999999999991 0.0 377
+378 0.0334241390228271 0.0300000000000011 0.0300000000000011 0.0 378
+379 0.0335249900817871 0.0300000000000011 0.0300000000000011 0.0 379
+380 0.0329539775848389 0.0399999999999991 0.0399999999999991 0.0 380
+381 0.0334098339080811 0.0300000000000011 0.0300000000000011 0.0 381
+382 0.0632669925689697 0.0599999999999952 0.0599999999999952 0.0 382
+383 0.033499002456665 0.0399999999999991 0.0399999999999991 0.0 383
+384 0.0333430767059326 0.0300000000000011 0.0300000000000011 0.0 384
+385 0.03495192527771 0.0300000000000011 0.0300000000000011 0.0 385
+386 0.0333530902862549 0.0399999999999991 0.0399999999999991 0.0 386
+387 0.0335168838500977 0.0300000000000011 0.0300000000000011 0.0 387
+388 0.0355610847473145 0.0399999999999991 0.0399999999999991 0.0 388
+389 0.0336718559265137 0.0300000000000011 0.0300000000000011 0.0 389
+390 0.0594749450683594 0.0600000000000023 0.0600000000000023 0.0 390
+391 0.03342604637146 0.029999999999994 0.029999999999994 0.0 391
+392 0.0333490371704102 0.0400000000000063 0.0400000000000063 0.0 392
+393 0.0401210784912109 0.0399999999999991 0.0399999999999991 0.0 393
+394 0.0331671237945557 0.0300000000000011 0.0300000000000011 0.0 394
+395 0.0364630222320557 0.0399999999999991 0.0399999999999991 0.0 395
+396 0.0339119434356689 0.0300000000000011 0.0300000000000011 0.0 396
+397 0.0332529544830322 0.029999999999994 0.029999999999994 0.0 397
+398 0.0581979751586914 0.0600000000000023 0.0600000000000023 0.0 398
+399 0.0337510108947754 0.0300000000000011 0.0300000000000011 0.0 399
+400 0.0334861278533936 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.0362730026245117 0.0300000000000011 0.0300000000000011 0.0 401
+402 0.03330397605896 0.0399999999999991 0.0399999999999991 0.0 402
+403 0.0347201824188232 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.0331459045410156 0.0399999999999991 0.0399999999999991 0.0 404
+405 0.0333847999572754 0.0300000000000011 0.0300000000000011 0.0 405
+406 0.0580871105194092 0.0599999999999952 0.0599999999999952 0.0 406
+407 0.0334339141845703 0.0300000000000011 0.0300000000000011 0.0 407
+408 0.0370500087738037 0.0399999999999991 0.0399999999999991 0.0 408
+409 0.0344600677490234 0.0300000000000011 0.0300000000000011 0.0 409
+410 0.0331830978393555 0.0399999999999991 0.0399999999999991 0.0 410
+411 0.0335149765014648 0.0300000000000011 0.0300000000000011 0.0 411
+412 0.0346379280090332 0.0300000000000011 0.0300000000000011 0.0 412
+413 0.0334169864654541 0.0399999999999991 0.0399999999999991 0.0 413
+414 0.0582180023193359 0.0600000000000023 0.0600000000000023 0.0 414
+415 0.0361251831054688 0.0300000000000011 0.0300000000000011 0.0 415
+416 0.0350911617279053 0.0399999999999991 0.0399999999999991 0.0 416
+417 0.0334968566894531 0.0300000000000011 0.0300000000000011 0.0 417
+418 0.0332348346710205 0.029999999999994 0.029999999999994 0.0 418
+419 0.0332620143890381 0.0400000000000063 0.0400000000000063 0.0 419
+420 0.0409719944000244 0.0399999999999991 0.0399999999999991 0.0 420
+421 0.0333600044250488 0.0300000000000011 0.0300000000000011 0.0 421
+422 0.0630040168762207 0.0599999999999952 0.0599999999999952 0.0 422
+423 0.0343139171600342 0.0399999999999991 0.0399999999999991 0.0 423
+424 0.0333878993988037 0.0300000000000011 0.0300000000000011 0.0 424
+425 0.0333099365234375 0.0300000000000011 0.0300000000000011 0.0 425
+426 0.0331859588623047 0.0399999999999991 0.0399999999999991 0.0 426
+427 0.0331718921661377 0.0300000000000011 0.0300000000000011 0.0 427
+428 0.0377118587493896 0.0399999999999991 0.0399999999999991 0.0 428
+429 0.0332839488983154 0.0300000000000011 0.0300000000000011 0.0 429
+430 0.0597720146179199 0.0600000000000023 0.0600000000000023 0.0 430
+431 0.0336380004882812 0.029999999999994 0.029999999999994 0.0 431
+432 0.0333139896392822 0.0400000000000063 0.0400000000000063 0.0 432
+433 0.0331470966339111 0.029999999999994 0.029999999999994 0.0 433
+434 0.0334060192108154 0.0300000000000011 0.0300000000000011 0.0 434
+435 0.0361709594726562 0.0399999999999991 0.0399999999999991 0.0 435
+436 0.0336370468139648 0.0300000000000011 0.0300000000000011 0.0 436
+437 0.0333271026611328 0.0399999999999991 0.0399999999999991 0.0 437
+438 0.0596990585327148 0.0500000000000043 0.0500000000000043 0.0 438
+439 0.0337719917297363 0.0399999999999991 0.0399999999999991 0.0 439
+440 0.0335121154785156 0.0300000000000011 0.0300000000000011 0.0 440
+441 0.0355470180511475 0.0399999999999991 0.0399999999999991 0.0 441
+442 0.0341551303863525 0.0300000000000011 0.0300000000000011 0.0 442
+443 0.033562183380127 0.0399999999999991 0.0399999999999991 0.0 443
+444 0.033012866973877 0.0300000000000011 0.0300000000000011 0.0 444
+445 0.0334839820861816 0.029999999999994 0.029999999999994 0.0 445
+446 0.064687967300415 0.0700000000000003 0.0700000000000003 0.0 446
+447 0.0336949825286865 0.0300000000000011 0.0300000000000011 0.0 447
+448 0.0361959934234619 0.0399999999999991 0.0399999999999991 0.0 448
+449 0.0349109172821045 0.0300000000000011 0.0300000000000011 0.0 449
+450 0.0339109897613525 0.0399999999999991 0.0399999999999991 0.0 450
+451 0.0331861972808838 0.0300000000000011 0.0300000000000011 0.0 451
+452 0.0328741073608398 0.0300000000000011 0.0300000000000011 0.0 452
+453 0.0332541465759277 0.0399999999999991 0.0399999999999991 0.0 453
+454 0.0579590797424316 0.0500000000000043 0.0500000000000043 0.0 454
+455 0.0366909503936768 0.0399999999999991 0.0399999999999991 0.0 455
+456 0.0345089435577393 0.0300000000000011 0.0300000000000011 0.0 456
+457 0.0332140922546387 0.0399999999999991 0.0399999999999991 0.0 457
+458 0.0330581665039062 0.029999999999994 0.029999999999994 0.0 458
+459 0.0331969261169434 0.0300000000000011 0.0300000000000011 0.0 459
+460 0.0328719615936279 0.0399999999999991 0.0399999999999991 0.0 460
+461 0.033440113067627 0.0300000000000011 0.0300000000000011 0.0 461
+462 0.0617790222167969 0.0600000000000023 0.0600000000000023 0.0 462
+463 0.033750057220459 0.0300000000000011 0.0300000000000011 0.0 463
+464 0.0332808494567871 0.0399999999999991 0.0399999999999991 0.0 464
+465 0.0350358486175537 0.0300000000000011 0.0300000000000011 0.0 465
+466 0.0332400798797607 0.0399999999999991 0.0399999999999991 0.0 466
+467 0.0332620143890381 0.0300000000000011 0.0300000000000011 0.0 467
+468 0.0343048572540283 0.0300000000000011 0.0300000000000011 0.0 468
+469 0.0357210636138916 0.0399999999999991 0.0399999999999991 0.0 469
+470 0.0584299564361572 0.0599999999999952 0.0599999999999952 0.0 470
+471 0.0334739685058594 0.0300000000000011 0.0300000000000011 0.0 471
+472 0.0334410667419434 0.0300000000000011 0.0300000000000011 0.0 472
+473 0.0423488616943359 0.0499999999999972 0.0499999999999972 0.0 473
+474 0.033174991607666 0.0300000000000011 0.0300000000000011 0.0 474
+475 0.0360331535339355 0.0300000000000011 0.0300000000000011 0.0 475
+476 0.036052942276001 0.0399999999999991 0.0399999999999991 0.0 476
+477 0.0333659648895264 0.0300000000000011 0.0300000000000011 0.0 477
+478 0.0577530860900879 0.0600000000000023 0.0600000000000023 0.0 478
+479 0.0335140228271484 0.0399999999999991 0.0399999999999991 0.0 479
+480 0.0333487987518311 0.0300000000000011 0.0300000000000011 0.0 480
+481 0.0346870422363281 0.0300000000000011 0.0300000000000011 0.0 481
+482 0.0349428653717041 0.0399999999999991 0.0399999999999991 0.0 482
+483 0.0336499214172363 0.0300000000000011 0.0300000000000011 0.0 483
+484 0.0331089496612549 0.0399999999999991 0.0399999999999991 0.0 484
+485 0.0334107875823975 0.029999999999994 0.029999999999994 0.0 485
+486 0.0580129623413086 0.0600000000000023 0.0600000000000023 0.0 486
+487 0.0336880683898926 0.0300000000000011 0.0300000000000011 0.0 487
+488 0.0364341735839844 0.0399999999999991 0.0399999999999991 0.0 488
+489 0.0356800556182861 0.0300000000000011 0.0300000000000011 0.0 489
+490 0.033689022064209 0.0399999999999991 0.0399999999999991 0.0 490
+491 0.0335180759429932 0.0300000000000011 0.0300000000000011 0.0 491
+492 0.0345418453216553 0.0300000000000011 0.0300000000000011 0.0 492
+493 0.0336930751800537 0.0399999999999991 0.0399999999999991 0.0 493
+494 0.0580000877380371 0.0600000000000023 0.0600000000000023 0.0 494
+495 0.0361080169677734 0.029999999999994 0.029999999999994 0.0 495
+496 0.0336720943450928 0.0400000000000063 0.0400000000000063 0.0 496
+497 0.0333058834075928 0.029999999999994 0.029999999999994 0.0 497
+498 0.0333189964294434 0.0300000000000011 0.0300000000000011 0.0 498
+499 0.0332541465759277 0.0399999999999991 0.0399999999999991 0.0 499
+500 0.0402250289916992 0.0399999999999991 0.0399999999999991 0.0 500
+501 0.0334169864654541 0.0300000000000011 0.0300000000000011 0.0 501
+502 0.0628290176391602 0.0600000000000023 0.0600000000000023 0.0 502
+503 0.0341489315032959 0.0399999999999991 0.0399999999999991 0.0 503
+504 0.0333640575408936 0.0300000000000011 0.0300000000000011 0.0 504
+505 0.03312087059021 0.0300000000000011 0.0300000000000011 0.0 505
+506 0.0330550670623779 0.0399999999999991 0.0399999999999991 0.0 506
+507 0.0333640575408936 0.0300000000000011 0.0300000000000011 0.0 507
+508 0.0347590446472168 0.0300000000000011 0.0300000000000011 0.0 508
+509 0.0346050262451172 0.0399999999999991 0.0399999999999991 0.0 509
+510 0.0589158535003662 0.0599999999999952 0.0599999999999952 0.0 510
+511 0.0335807800292969 0.0300000000000011 0.0300000000000011 0.0 511
+512 0.0333380699157715 0.0399999999999991 0.0399999999999991 0.0 512
+513 0.0332279205322266 0.0300000000000011 0.0300000000000011 0.0 513
+514 0.0332310199737549 0.0300000000000011 0.0300000000000011 0.0 514
+515 0.0361509323120117 0.0399999999999991 0.0399999999999991 0.0 515
+516 0.0350699424743652 0.0300000000000011 0.0300000000000011 0.0 516
+517 0.0337638854980469 0.0399999999999991 0.0399999999999991 0.0 517
+518 0.0580861568450928 0.0600000000000023 0.0600000000000023 0.0 518
+519 0.035269021987915 0.0300000000000011 0.0300000000000011 0.0 519
+520 0.0334429740905762 0.029999999999994 0.029999999999994 0.0 520
+521 0.0334320068359375 0.0400000000000063 0.0400000000000063 0.0 521
+522 0.0365338325500488 0.029999999999994 0.029999999999994 0.0 522
+523 0.0335922241210938 0.0400000000000063 0.0400000000000063 0.0 523
+524 0.0331869125366211 0.029999999999994 0.029999999999994 0.0 524
+525 0.0333640575408936 0.0300000000000011 0.0300000000000011 0.0 525
+526 0.0657279491424561 0.0700000000000003 0.0700000000000003 0.0 526
+527 0.0335869789123535 0.0300000000000011 0.0300000000000011 0.0 527
+528 0.0365140438079834 0.0399999999999991 0.0399999999999991 0.0 528
+529 0.033782958984375 0.0300000000000011 0.0300000000000011 0.0 529
+530 0.0337071418762207 0.0399999999999991 0.0399999999999991 0.0 530
+531 0.0332880020141602 0.0300000000000011 0.0300000000000011 0.0 531
+532 0.0329639911651611 0.0300000000000011 0.0300000000000011 0.0 532
+533 0.033315896987915 0.0399999999999991 0.0399999999999991 0.0 533
+534 0.0582611560821533 0.0499999999999972 0.0499999999999972 0.0 534
+535 0.0367379188537598 0.0399999999999991 0.0399999999999991 0.0 535
+536 0.033797025680542 0.0400000000000063 0.0400000000000063 0.0 536
+537 0.0335040092468262 0.029999999999994 0.029999999999994 0.0 537
+538 0.0333931446075439 0.0300000000000011 0.0300000000000011 0.0 538
+539 0.033318042755127 0.0399999999999991 0.0399999999999991 0.0 539
+540 0.0329570770263672 0.0300000000000011 0.0300000000000011 0.0 540
+541 0.0334439277648926 0.0300000000000011 0.0300000000000011 0.0 541
+542 0.0605781078338623 0.0600000000000023 0.0600000000000023 0.0 542
+543 0.0348639488220215 0.0399999999999991 0.0399999999999991 0.0 543
+544 0.0333831310272217 0.0300000000000011 0.0300000000000011 0.0 544
+545 0.0333919525146484 0.029999999999994 0.029999999999994 0.0 545
+546 0.0348379611968994 0.0400000000000063 0.0400000000000063 0.0 546
+547 0.0334489345550537 0.029999999999994 0.029999999999994 0.0 547
+548 0.0333089828491211 0.0400000000000063 0.0400000000000063 0.0 548
+549 0.0365209579467773 0.029999999999994 0.029999999999994 0.0 549
+550 0.0601961612701416 0.0600000000000023 0.0600000000000023 0.0 550
+551 0.0337119102478027 0.0300000000000011 0.0300000000000011 0.0 551
+552 0.0332701206207275 0.0399999999999991 0.0399999999999991 0.0 552
+553 0.0401608943939209 0.0399999999999991 0.0399999999999991 0.0 553
+554 0.0333070755004883 0.0300000000000011 0.0300000000000011 0.0 554
+555 0.0364260673522949 0.0399999999999991 0.0399999999999991 0.0 555
+556 0.0348329544067383 0.0300000000000011 0.0300000000000011 0.0 556
+557 0.0339481830596924 0.0399999999999991 0.0399999999999991 0.0 557
+558 0.0576767921447754 0.0499999999999972 0.0499999999999972 0.0 558
+559 0.0335049629211426 0.0300000000000011 0.0300000000000011 0.0 559
+560 0.0332691669464111 0.029999999999994 0.029999999999994 0.0 560
+561 0.0332450866699219 0.0400000000000063 0.0400000000000063 0.0 561
+562 0.037883996963501 0.029999999999994 0.029999999999994 0.0 562
+563 0.0370709896087646 0.0400000000000063 0.0400000000000063 0.0 563
+564 0.0331628322601318 0.029999999999994 0.029999999999994 0.0 564
+565 0.0335371494293213 0.0399999999999991 0.0399999999999991 0.0 565
+566 0.0579180717468262 0.0500000000000043 0.0500000000000043 0.0 566
+567 0.0335509777069092 0.0399999999999991 0.0399999999999991 0.0 567
+568 0.0369341373443604 0.0300000000000011 0.0300000000000011 0.0 568
+569 0.0334761142730713 0.0399999999999991 0.0399999999999991 0.0 569
+570 0.0333311557769775 0.0300000000000011 0.0300000000000011 0.0 570
+571 0.0333850383758545 0.0300000000000011 0.0300000000000011 0.0 571
+572 0.0344130992889404 0.0399999999999991 0.0399999999999991 0.0 572
+573 0.0333690643310547 0.0300000000000011 0.0300000000000011 0.0 573
+574 0.0581290721893311 0.0599999999999952 0.0599999999999952 0.0 574
+575 0.0367560386657715 0.0399999999999991 0.0399999999999991 0.0 575
+576 0.0336780548095703 0.0300000000000011 0.0300000000000011 0.0 576
+577 0.0331878662109375 0.0300000000000011 0.0300000000000011 0.0 577
+578 0.0332210063934326 0.0399999999999991 0.0399999999999991 0.0 578
+579 0.0332109928131104 0.0300000000000011 0.0300000000000011 0.0 579
+580 0.0409071445465088 0.0399999999999991 0.0399999999999991 0.0 580
+581 0.033595085144043 0.0300000000000011 0.0300000000000011 0.0 581
+582 0.0607550144195557 0.0600000000000023 0.0600000000000023 0.0 582
+583 0.0355041027069092 0.0399999999999991 0.0399999999999991 0.0 583
+584 0.0334818363189697 0.0300000000000011 0.0300000000000011 0.0 584
+585 0.0333139896392822 0.0399999999999991 0.0399999999999991 0.0 585
+586 0.0332391262054443 0.0300000000000011 0.0300000000000011 0.0 586
+587 0.0332348346710205 0.029999999999994 0.029999999999994 0.0 587
+588 0.0332849025726318 0.0400000000000063 0.0400000000000063 0.0 588
+589 0.0360300540924072 0.029999999999994 0.029999999999994 0.0 589
+590 0.0599799156188965 0.0600000000000023 0.0600000000000023 0.0 590
+591 0.0335240364074707 0.0399999999999991 0.0399999999999991 0.0 591
+592 0.0333631038665771 0.0300000000000011 0.0300000000000011 0.0 592
+593 0.0332529544830322 0.0300000000000011 0.0300000000000011 0.0 593
+594 0.0335328578948975 0.0399999999999991 0.0399999999999991 0.0 594
+595 0.0370910167694092 0.0300000000000011 0.0300000000000011 0.0 595
+596 0.0335230827331543 0.0399999999999991 0.0399999999999991 0.0 596
+597 0.0337550640106201 0.0300000000000011 0.0300000000000011 0.0 597
+598 0.0580778121948242 0.0599999999999952 0.0599999999999952 0.0 598
+599 0.0352489948272705 0.0300000000000011 0.0300000000000011 0.0 599
+600 0.0334210395812988 0.0399999999999991 0.0399999999999991 0.0 600
+601 0.0336451530456543 0.0300000000000011 0.0300000000000011 0.0 601
+602 0.0362639427185059 0.0399999999999991 0.0399999999999991 0.0 602
+603 0.0335409641265869 0.0300000000000011 0.0300000000000011 0.0 603
+604 0.0330269336700439 0.0300000000000011 0.0300000000000011 0.0 604
+605 0.033350944519043 0.0399999999999991 0.0399999999999991 0.0 605
+606 0.0649051666259766 0.0600000000000023 0.0600000000000023 0.0 606
+607 0.0337560176849365 0.0399999999999991 0.0399999999999991 0.0 607
+608 0.0365309715270996 0.0300000000000011 0.0300000000000011 0.0 608
+609 0.0352151393890381 0.0399999999999991 0.0399999999999991 0.0 609
+610 0.0339179039001465 0.0300000000000011 0.0300000000000011 0.0 610
+611 0.0331799983978271 0.0300000000000011 0.0300000000000011 0.0 611
+612 0.0330498218536377 0.0399999999999991 0.0399999999999991 0.0 612
+613 0.0336270332336426 0.0300000000000011 0.0300000000000011 0.0 613
+614 0.0577888488769531 0.0599999999999952 0.0599999999999952 0.0 614
+615 0.0366761684417725 0.0399999999999991 0.0399999999999991 0.0 615
+616 0.0336871147155762 0.0300000000000011 0.0300000000000011 0.0 616
+617 0.0334889888763428 0.0300000000000011 0.0300000000000011 0.0 617
+618 0.033146858215332 0.0399999999999991 0.0399999999999991 0.0 618
+619 0.0333569049835205 0.0300000000000011 0.0300000000000011 0.0 619
+620 0.0330309867858887 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0333929061889648 0.0399999999999991 0.0399999999999991 0.0 621
+622 0.0609011650085449 0.0600000000000023 0.0600000000000023 0.0 622
+623 0.0338809490203857 0.0300000000000011 0.0300000000000011 0.0 623
+624 0.0332272052764893 0.029999999999994 0.029999999999994 0.0 624
+625 0.0336441993713379 0.0399999999999991 0.0399999999999991 0.0 625
+626 0.035059928894043 0.0300000000000011 0.0300000000000011 0.0 626
+627 0.0334160327911377 0.0399999999999991 0.0399999999999991 0.0 627
+628 0.0334069728851318 0.0300000000000011 0.0300000000000011 0.0 628
+629 0.0366249084472656 0.0399999999999991 0.0399999999999991 0.0 629
+630 0.0583260059356689 0.0500000000000043 0.0500000000000043 0.0 630
+631 0.0333540439605713 0.0399999999999991 0.0399999999999991 0.0 631
+632 0.0333960056304932 0.0300000000000011 0.0300000000000011 0.0 632
+633 0.0413072109222412 0.0399999999999991 0.0399999999999991 0.0 633
+634 0.0332448482513428 0.0399999999999991 0.0399999999999991 0.0 634
+635 0.0363118648529053 0.0300000000000011 0.0300000000000011 0.0 635
+636 0.035132884979248 0.0399999999999991 0.0399999999999991 0.0 636
+637 0.0339901447296143 0.0300000000000011 0.0300000000000011 0.0 637
+638 0.0578219890594482 0.0599999999999952 0.0599999999999952 0.0 638
+639 0.0334219932556152 0.0300000000000011 0.0300000000000011 0.0 639
+640 0.0333530902862549 0.0399999999999991 0.0399999999999991 0.0 640
+641 0.033282995223999 0.0300000000000011 0.0300000000000011 0.0 641
+642 0.0364758968353271 0.0399999999999991 0.0399999999999991 0.0 642
+643 0.0333881378173828 0.0300000000000011 0.0300000000000011 0.0 643
+644 0.0334060192108154 0.0300000000000011 0.0300000000000011 0.0 644
+645 0.0334770679473877 0.0399999999999991 0.0399999999999991 0.0 645
+646 0.0579509735107422 0.0500000000000043 0.0500000000000043 0.0 646
+647 0.0336329936981201 0.0399999999999991 0.0399999999999991 0.0 647
+648 0.0373489856719971 0.0399999999999991 0.0399999999999991 0.0 648
+649 0.0342509746551514 0.0300000000000011 0.0300000000000011 0.0 649
+650 0.0337338447570801 0.0300000000000011 0.0300000000000011 0.0 650
+651 0.0333359241485596 0.0399999999999991 0.0399999999999991 0.0 651
+652 0.0332560539245605 0.029999999999994 0.029999999999994 0.0 652
+653 0.034912109375 0.029999999999994 0.0300000000000011 0.0 653
+654 0.0582709312438965 0.0600000000000023 0.0600000000000023 0.0 654
+655 0.0366790294647217 0.0400000000000063 0.0400000000000063 0.0 655
+656 0.0336661338806152 0.0299999999999869 0.0299999999999869 0.0 656
+657 0.0334138870239258 0.0400000000000063 0.0400000000000063 0.0 657
+658 0.033390998840332 0.0300000000000011 0.0300000000000011 0.0 658
+659 0.0330209732055664 0.0300000000000011 0.0300000000000011 0.0 659
+660 0.0407001972198486 0.039999999999992 0.039999999999992 0.0 660
+661 0.0335381031036377 0.0400000000000063 0.0400000000000063 0.0 661
+662 0.0610449314117432 0.0600000000000023 0.0600000000000023 0.0 662
+663 0.0341410636901855 0.0300000000000011 0.0300000000000011 0.0 663
+664 0.0333421230316162 0.039999999999992 0.039999999999992 0.0 664
+665 0.0331799983978271 0.0300000000000011 0.0300000000000011 0.0 665
+666 0.0331680774688721 0.0300000000000011 0.0300000000000011 0.0 666
+667 0.0328528881072998 0.0400000000000063 0.0400000000000063 0.0 667
+668 0.0334010124206543 0.0300000000000011 0.0300000000000011 0.0 668
+669 0.0363960266113281 0.0300000000000011 0.0300000000000011 0.0 669
+670 0.058311939239502 0.0599999999999881 0.0599999999999881 0.0 670
+671 0.03330397605896 0.0400000000000063 0.0400000000000063 0.0 671
+672 0.0332088470458984 0.0300000000000011 0.0300000000000011 0.0 672
+673 0.0331571102142334 0.0300000000000011 0.0300000000000011 0.0 673
+674 0.0347979068756104 0.039999999999992 0.039999999999992 0.0 674
+675 0.0361380577087402 0.0300000000000011 0.0300000000000011 0.0 675
+676 0.0341131687164307 0.0400000000000063 0.0400000000000063 0.0 676
+677 0.03476881980896 0.0300000000000011 0.0300000000000011 0.0 677
+678 0.058121919631958 0.0600000000000023 0.0600000000000023 0.0 678
+679 0.0350527763366699 0.0300000000000011 0.0300000000000011 0.0 679
+680 0.0333900451660156 0.039999999999992 0.039999999999992 0.0 680
+681 0.033829927444458 0.0300000000000011 0.0300000000000011 0.0 681
+682 0.0363891124725342 0.0400000000000063 0.0400000000000063 0.0 682
+683 0.0345211029052734 0.0299999999999869 0.0299999999999869 0.0 683
+684 0.0335590839385986 0.0400000000000063 0.0400000000000063 0.0 684
+685 0.0574600696563721 0.0499999999999972 0.0499999999999972 0.0 685
+686 0.041471004486084 0.0499999999999972 0.0499999999999972 0.0 686
+687 0.0334889888763428 0.0300000000000011 0.0300000000000011 0.0 687
+688 0.0362579822540283 0.0400000000000063 0.0400000000000063 0.0 688
+689 0.033682107925415 0.0300000000000011 0.0300000000000011 0.0 689
+690 0.0352790355682373 0.0300000000000011 0.0300000000000011 0.0 690
+691 0.033221960067749 0.039999999999992 0.039999999999992 0.0 691
+692 0.0330390930175781 0.0300000000000011 0.0300000000000011 0.0 692
+693 0.0577991008758545 0.0600000000000023 0.0600000000000023 0.0 693
+694 0.0340001583099365 0.0300000000000011 0.0300000000000011 0.0 694
+695 0.0366599559783936 0.0400000000000063 0.0400000000000063 0.0 695
+696 0.0336761474609375 0.0299999999999869 0.0299999999999869 0.0 696
+697 0.0338170528411865 0.0400000000000063 0.0400000000000063 0.0 697
+698 0.0334699153900146 0.0300000000000011 0.0300000000000011 0.0 698
+699 0.0334680080413818 0.0300000000000011 0.0300000000000011 0.0 699
+700 0.0334641933441162 0.039999999999992 0.039999999999992 0.0 700
+701 0.0584831237792969 0.0700000000000074 0.0600000000000023 0.01 701
+702 0.0371170043945312 0.0300000000000011 0.0300000000000011 0.0 702
+703 0.0348899364471436 0.0400000000000063 0.0400000000000063 0.0 703
+704 0.0332977771759033 0.0300000000000011 0.0300000000000011 0.0 704
+705 0.0337090492248535 0.0300000000000011 0.0300000000000011 0.0 705
+706 0.0363600254058838 0.039999999999992 0.039999999999992 0.0 706
+707 0.0332589149475098 0.0300000000000011 0.0300000000000011 0.0 707
+708 0.0335700511932373 0.0300000000000011 0.0300000000000011 0.0 708
+709 0.0618710517883301 0.0699999999999932 0.0699999999999932 0.0 709
+710 0.0338459014892578 0.0300000000000011 0.0300000000000011 0.0 710
+711 0.0334110260009766 0.0300000000000011 0.0300000000000011 0.0 711
+712 0.0332870483398438 0.0400000000000063 0.0400000000000063 0.0 712
+713 0.0403330326080322 0.039999999999992 0.039999999999992 0.0 713
+714 0.0332109928131104 0.0300000000000011 0.0300000000000011 0.0 714
+715 0.0362699031829834 0.0400000000000063 0.0400000000000063 0.0 715
+716 0.0349149703979492 0.0300000000000011 0.0300000000000011 0.0 716
+717 0.0590531826019287 0.0600000000000023 0.0600000000000023 0.0 717
+718 0.0336310863494873 0.039999999999992 0.039999999999992 0.0 718
+719 0.0333178043365479 0.0300000000000011 0.0300000000000011 0.0 719
+720 0.0332901477813721 0.0300000000000011 0.0300000000000011 0.0 720
+721 0.0332920551300049 0.0400000000000063 0.0400000000000063 0.0 721
+722 0.0363869667053223 0.0300000000000011 0.0300000000000011 0.0 722
+723 0.0335569381713867 0.039999999999992 0.039999999999992 0.0 723
+724 0.0336151123046875 0.0300000000000011 0.0300000000000011 0.0 724
+725 0.0579018592834473 0.0600000000000023 0.0600000000000023 0.0 725
+726 0.0334959030151367 0.0300000000000011 0.0300000000000011 0.0 726
+727 0.0332579612731934 0.0300000000000011 0.0300000000000011 0.0 727
+728 0.0363228321075439 0.039999999999992 0.039999999999992 0.0 728
+729 0.034060001373291 0.0300000000000011 0.0300000000000011 0.0 729
+730 0.0342481136322021 0.0400000000000063 0.0400000000000063 0.0 730
+731 0.033174991607666 0.0300000000000011 0.0300000000000011 0.0 731
+732 0.0333402156829834 0.039999999999992 0.039999999999992 0.0 732
+733 0.0594391822814941 0.0499999999999972 0.0499999999999972 0.0 733
+734 0.0340390205383301 0.0400000000000063 0.0400000000000063 0.0 734
+735 0.0368988513946533 0.0300000000000011 0.0300000000000011 0.0 735
+736 0.036196231842041 0.039999999999992 0.039999999999992 0.0 736
+737 0.0333859920501709 0.0300000000000011 0.0300000000000011 0.0 737
+738 0.0332441329956055 0.0400000000000063 0.0400000000000063 0.0 738
+739 0.0330839157104492 0.0300000000000011 0.0300000000000011 0.0 739
+740 0.0413918495178223 0.039999999999992 0.039999999999992 0.0 740
+741 0.0612490177154541 0.0600000000000023 0.0600000000000023 0.0 741
+742 0.0341551303863525 0.0300000000000011 0.0300000000000011 0.0 742
+743 0.035499095916748 0.0400000000000063 0.0400000000000063 0.0 743
+744 0.0333080291748047 0.0300000000000011 0.0300000000000011 0.0 744
+745 0.0331649780273438 0.039999999999992 0.039999999999992 0.0 745
+746 0.0332601070404053 0.0300000000000011 0.0300000000000011 0.0 746
+747 0.0330040454864502 0.0300000000000011 0.0300000000000011 0.0 747
+748 0.0333499908447266 0.0400000000000063 0.0400000000000063 0.0 748
+749 0.0617849826812744 0.0599999999999881 0.0599999999999881 0.0 749
+750 0.0337250232696533 0.0300000000000011 0.0300000000000011 0.0 750
+751 0.0336470603942871 0.0400000000000063 0.0400000000000063 0.0 751
+752 0.0334620475769043 0.0300000000000011 0.0300000000000011 0.0 752
+753 0.0332620143890381 0.0300000000000011 0.0300000000000011 0.0 753
+754 0.0332539081573486 0.039999999999992 0.039999999999992 0.0 754
+755 0.036297082901001 0.0300000000000011 0.0300000000000011 0.0 755
+756 0.0344269275665283 0.0400000000000063 0.0400000000000063 0.0 756
+757 0.0584709644317627 0.0499999999999972 0.0499999999999972 0.0 757
+758 0.0336380004882812 0.0300000000000011 0.0300000000000011 0.0 758
+759 0.0352699756622314 0.0300000000000011 0.0300000000000011 0.0 759
+760 0.0333750247955322 0.039999999999992 0.039999999999992 0.0 760
+761 0.0338349342346191 0.0300000000000011 0.0300000000000011 0.0 761
+762 0.0356252193450928 0.0400000000000063 0.0400000000000063 0.0 762
+763 0.0349218845367432 0.0299999999999869 0.0299999999999869 0.0 763
+764 0.0333728790283203 0.0300000000000011 0.0300000000000011 0.0 764
+765 0.057542085647583 0.0600000000000023 0.0600000000000023 0.0 765
+766 0.040518045425415 0.0400000000000063 0.0400000000000063 0.0 766
+767 0.0333969593048096 0.039999999999992 0.039999999999992 0.0 767
+768 0.036506175994873 0.0300000000000011 0.0300000000000011 0.0 768
+769 0.034682035446167 0.0400000000000063 0.0400000000000063 0.0 769
+770 0.0337419509887695 0.0300000000000011 0.0300000000000011 0.0 770
+771 0.0334620475769043 0.0300000000000011 0.0300000000000011 0.0 771
+772 0.0577020645141602 0.0600000000000023 0.0600000000000023 0.0 772
+773 0.0334780216217041 0.039999999999992 0.039999999999992 0.0 773
+774 0.0334508419036865 0.0300000000000011 0.0300000000000011 0.0 774
+775 0.036329984664917 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.0336270332336426 0.039999999999992 0.039999999999992 0.0 776
+777 0.0338649749755859 0.0300000000000011 0.0300000000000011 0.0 777
+778 0.0331289768218994 0.0400000000000063 0.0400000000000063 0.0 778
+779 0.0331418514251709 0.0300000000000011 0.0300000000000011 0.0 779
+780 0.0577938556671143 0.0600000000000023 0.0600000000000023 0.0 780
+781 0.0363731384277344 0.0300000000000011 0.0300000000000011 0.0 781
+782 0.0350909233093262 0.039999999999992 0.039999999999992 0.0 782
+783 0.0350501537322998 0.0300000000000011 0.0300000000000011 0.0 783
+784 0.0335679054260254 0.0400000000000063 0.0400000000000063 0.0 784
+785 0.0334410667419434 0.0300000000000011 0.0300000000000011 0.0 785
+786 0.0349650382995605 0.0300000000000011 0.0300000000000011 0.0 786
+787 0.0338919162750244 0.039999999999992 0.039999999999992 0.0 787
+788 0.060966968536377 0.0600000000000023 0.0600000000000023 0.0 788
+789 0.0341048240661621 0.0300000000000011 0.0300000000000011 0.0 789
+790 0.0336289405822754 0.039999999999992 0.039999999999992 0.0 790
+791 0.0333750247955322 0.0300000000000011 0.0300000000000011 0.0 791
+792 0.0333640575408936 0.0300000000000011 0.0300000000000011 0.0 792
+793 0.0411760807037354 0.0499999999999972 0.0499999999999972 0.0 793
+794 0.0330638885498047 0.0300000000000011 0.0300000000000011 0.0 794
+795 0.0362119674682617 0.0300000000000011 0.0300000000000011 0.0 795
+796 0.0589008331298828 0.0499999999999972 0.0499999999999972 0.0 796
+797 0.0335359573364258 0.0400000000000063 0.0400000000000063 0.0 797
+798 0.0333008766174316 0.0300000000000011 0.0300000000000011 0.0 798
+799 0.0347950458526611 0.0300000000000011 0.0300000000000011 0.0 799
+800 0.0332999229431152 0.039999999999992 0.039999999999992 0.0 800
+801 0.033350944519043 0.0300000000000011 0.0300000000000011 0.0 801
+802 0.0362880229949951 0.0400000000000063 0.0400000000000063 0.0 802
+803 0.0351760387420654 0.0299999999999869 0.0299999999999869 0.0 803
+804 0.0578329563140869 0.0600000000000023 0.0600000000000023 0.0 804
+805 0.0334799289703369 0.0300000000000011 0.0300000000000011 0.0 805
+806 0.0332357883453369 0.0400000000000063 0.0400000000000063 0.0 806
+807 0.0333900451660156 0.0300000000000011 0.0300000000000011 0.0 807
+808 0.0362451076507568 0.039999999999992 0.039999999999992 0.0 808
+809 0.0333170890808105 0.0300000000000011 0.0300000000000011 0.0 809
+810 0.0343527793884277 0.0400000000000063 0.0400000000000063 0.0 810
+811 0.0335409641265869 0.0300000000000011 0.0300000000000011 0.0 811
+812 0.0592930316925049 0.0600000000000023 0.0600000000000023 0.0 812
+813 0.0335829257965088 0.0299999999999869 0.0299999999999869 0.0 813
+814 0.033574104309082 0.0300000000000011 0.0300000000000011 0.0 814
+815 0.0360231399536133 0.0400000000000063 0.0400000000000063 0.0 815
+816 0.033574104309082 0.0300000000000011 0.0300000000000011 0.0 816
+817 0.0337851047515869 0.039999999999992 0.039999999999992 0.0 817
+818 0.0332200527191162 0.0300000000000011 0.0300000000000011 0.0 818
+819 0.0334579944610596 0.0300000000000011 0.0300000000000011 0.0 819
+820 0.063668966293335 0.0600000000000023 0.0600000000000023 0.0 820
+821 0.0360410213470459 0.0300000000000011 0.0300000000000011 0.0 821
+822 0.0340430736541748 0.039999999999992 0.039999999999992 0.0 822
+823 0.0340561866760254 0.0300000000000011 0.0300000000000011 0.0 823
+824 0.0331687927246094 0.0400000000000063 0.0400000000000063 0.0 824
+825 0.0331730842590332 0.0300000000000011 0.0300000000000011 0.0 825
+826 0.0330498218536377 0.0300000000000011 0.0300000000000011 0.0 826
+827 0.0333058834075928 0.039999999999992 0.039999999999992 0.0 827
+828 0.0610239505767822 0.0600000000000023 0.0600000000000023 0.0 828
+829 0.0348649024963379 0.0300000000000011 0.0300000000000011 0.0 829
+830 0.0334899425506592 0.039999999999992 0.039999999999992 0.0 830
+831 0.0332210063934326 0.0300000000000011 0.0300000000000011 0.0 831
+832 0.0332589149475098 0.0300000000000011 0.0300000000000011 0.0 832
+833 0.0330421924591064 0.0400000000000063 0.0400000000000063 0.0 833
+834 0.033440113067627 0.0300000000000011 0.0300000000000011 0.0 834
+835 0.0366320610046387 0.039999999999992 0.039999999999992 0.0 835
+836 0.0392351150512695 0.039999999999992 0.039999999999992 0.0 836
+837 0.0332860946655273 0.0400000000000063 0.0400000000000063 0.0 837
+838 0.0337049961090088 0.0300000000000011 0.0300000000000011 0.0 838
+839 0.0346989631652832 0.0300000000000011 0.0300000000000011 0.0 839
+840 0.0334670543670654 0.039999999999992 0.039999999999992 0.0 840
+841 0.0332751274108887 0.0300000000000011 0.0300000000000011 0.0 841
+842 0.0364458560943604 0.0400000000000063 0.0400000000000063 0.0 842
+843 0.0590341091156006 0.0600000000000023 0.0600000000000023 0.0 843
+844 0.0335009098052979 0.0300000000000011 0.0300000000000011 0.0 844
+845 0.0332801342010498 0.0300000000000011 0.0300000000000011 0.0 845
+846 0.0411808490753174 0.0499999999999972 0.0499999999999972 0.0 846
+847 0.0332710742950439 0.0300000000000011 0.0300000000000011 0.0 847
+848 0.0353641510009766 0.0300000000000011 0.0300000000000011 0.0 848
+849 0.0346250534057617 0.039999999999992 0.039999999999992 0.0 849
+850 0.0339748859405518 0.0300000000000011 0.0300000000000011 0.0 850
+851 0.0577869415283203 0.0600000000000023 0.0600000000000023 0.0 851
+852 0.0328571796417236 0.0300000000000011 0.0300000000000011 0.0 852
+853 0.0324909687042236 0.039999999999992 0.039999999999992 0.0 853
+854 0.0326740741729736 0.0300000000000011 0.0300000000000011 0.0 854
+855 0.035412073135376 0.0300000000000011 0.0300000000000011 0.0 855
+856 0.0338008403778076 0.0400000000000063 0.0400000000000063 0.0 856
+857 0.0328540802001953 0.0300000000000011 0.0300000000000011 0.0 857
+858 0.0333800315856934 0.0300000000000011 0.0300000000000011 0.0 858
+859 0.057999849319458 0.0600000000000023 0.0600000000000023 0.0 859
+860 0.0334048271179199 0.039999999999992 0.039999999999992 0.0 860
+861 0.0332610607147217 0.0300000000000011 0.0300000000000011 0.0 861
+862 0.0369820594787598 0.0400000000000063 0.0400000000000063 0.0 862
+863 0.0350849628448486 0.0299999999999869 0.0299999999999869 0.0 863
+864 0.0332708358764648 0.0300000000000011 0.0300000000000011 0.0 864
+865 0.0333819389343262 0.0400000000000063 0.0400000000000063 0.0 865
+866 0.0360109806060791 0.0300000000000011 0.0300000000000011 0.0 866
+867 0.058070182800293 0.0600000000000023 0.0600000000000023 0.0 867
+868 0.0367460250854492 0.039999999999992 0.039999999999992 0.0 868
+869 0.0335311889648438 0.0300000000000011 0.0300000000000011 0.0 869
+870 0.034480094909668 0.0400000000000063 0.0400000000000063 0.0 870
+871 0.0331480503082275 0.0300000000000011 0.0300000000000011 0.0 871
+872 0.0331017971038818 0.0300000000000011 0.0300000000000011 0.0 872
+873 0.0400230884552002 0.039999999999992 0.039999999999992 0.0 873
+874 0.0334382057189941 0.0400000000000063 0.0400000000000063 0.0 874
+875 0.0614311695098877 0.0600000000000023 0.0600000000000023 0.0 875
+876 0.0357120037078857 0.0299999999999869 0.0299999999999869 0.0 876
+877 0.0331881046295166 0.0400000000000063 0.0400000000000063 0.0 877
+878 0.0333230495452881 0.0300000000000011 0.0300000000000011 0.0 878
+879 0.033128023147583 0.0300000000000011 0.0300000000000011 0.0 879
+880 0.0331029891967773 0.039999999999992 0.039999999999992 0.0 880
+881 0.0331718921661377 0.0300000000000011 0.0300000000000011 0.0 881
+882 0.0365970134735107 0.0400000000000063 0.0400000000000063 0.0 882
+883 0.0594449043273926 0.0499999999999972 0.0499999999999972 0.0 883
+884 0.0333600044250488 0.0400000000000063 0.0400000000000063 0.0 884
+885 0.0332062244415283 0.0300000000000011 0.0300000000000011 0.0 885
+886 0.0332579612731934 0.0300000000000011 0.0300000000000011 0.0 886
+887 0.033174991607666 0.039999999999992 0.039999999999992 0.0 887
+888 0.033627986907959 0.0300000000000011 0.0300000000000011 0.0 888
+889 0.0363061428070068 0.0400000000000063 0.0400000000000063 0.0 889
+890 0.0346910953521729 0.0299999999999869 0.0299999999999869 0.0 890
+891 0.0577399730682373 0.0600000000000023 0.0600000000000023 0.0 891
+892 0.0351190567016602 0.0300000000000011 0.0300000000000011 0.0 892
+893 0.0334410667419434 0.0300000000000011 0.0300000000000011 0.0 893
+894 0.0332920551300049 0.0300000000000011 0.0300000000000011 0.0 894
+895 0.0356509685516357 0.039999999999992 0.039999999999992 0.0 895
+896 0.0329999923706055 0.0300000000000011 0.0300000000000011 0.0 896
+897 0.0350220203399658 0.0400000000000063 0.0400000000000063 0.0 897
+898 0.0576491355895996 0.0499999999999972 0.0499999999999972 0.0 898
+899 0.0413708686828613 0.0400000000000063 0.0400000000000063 0.0 899
+900 0.0334579944610596 0.039999999999992 0.039999999999992 0.0 900
+901 0.0331728458404541 0.0300000000000011 0.0300000000000011 0.0 901
+902 0.0366899967193604 0.0400000000000063 0.0400000000000063 0.0 902
+903 0.0341849327087402 0.0299999999999869 0.0299999999999869 0.0 903
+904 0.0330212116241455 0.0300000000000011 0.0300000000000011 0.0 904
+905 0.0330519676208496 0.0400000000000063 0.0400000000000063 0.0 905
+906 0.0578551292419434 0.0600000000000023 0.0600000000000023 0.0 906
+907 0.0339560508728027 0.0300000000000011 0.0300000000000011 0.0 907
+908 0.0368251800537109 0.039999999999992 0.039999999999992 0.0 908
+909 0.0336120128631592 0.0300000000000011 0.0300000000000011 0.0 909
+910 0.0353670120239258 0.0400000000000063 0.0400000000000063 0.0 910
+911 0.0335800647735596 0.0300000000000011 0.0300000000000011 0.0 911
+912 0.0334420204162598 0.0300000000000011 0.0300000000000011 0.0 912
+913 0.0334601402282715 0.039999999999992 0.039999999999992 0.0 913
+914 0.058056116104126 0.0499999999999972 0.0499999999999972 0.0 914
+915 0.0368549823760986 0.0400000000000063 0.0400000000000063 0.0 915
+916 0.0347049236297607 0.039999999999992 0.039999999999992 0.0 916
+917 0.0332660675048828 0.0300000000000011 0.0300000000000011 0.0 917
+918 0.03336501121521 0.0300000000000011 0.0300000000000011 0.0 918
+919 0.0346500873565674 0.0400000000000063 0.0400000000000063 0.0 919
+920 0.0330588817596436 0.0300000000000011 0.0300000000000011 0.0 920
+921 0.0336630344390869 0.0300000000000011 0.0300000000000011 0.0 921
+922 0.0604748725891113 0.0600000000000023 0.0600000000000023 0.0 922
+923 0.0347628593444824 0.039999999999992 0.039999999999992 0.0 923
+924 0.0331780910491943 0.0300000000000011 0.0300000000000011 0.0 924
+925 0.0331499576568604 0.0300000000000011 0.0300000000000011 0.0 925
+926 0.0402188301086426 0.0400000000000063 0.0400000000000063 0.0 926
+927 0.0330500602722168 0.039999999999992 0.039999999999992 0.0 927
+928 0.0330708026885986 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.036876916885376 0.0400000000000063 0.0400000000000063 0.0 929
+930 0.0586659908294678 0.0599999999999881 0.0599999999999881 0.0 930
+931 0.0333189964294434 0.0300000000000011 0.0300000000000011 0.0 931
+932 0.0332140922546387 0.0300000000000011 0.0300000000000011 0.0 932
+933 0.0332601070404053 0.0400000000000063 0.0400000000000063 0.0 933
+934 0.033146858215332 0.0300000000000011 0.0300000000000011 0.0 934
+935 0.0361688137054443 0.039999999999992 0.039999999999992 0.0 935
+936 0.0331850051879883 0.0300000000000011 0.0300000000000011 0.0 936
+937 0.0338339805603027 0.0300000000000011 0.0300000000000011 0.0 937
+938 0.0579109191894531 0.0600000000000023 0.0600000000000023 0.0 938
+939 0.0335099697113037 0.0300000000000011 0.0300000000000011 0.0 939
+940 0.0332717895507812 0.039999999999992 0.039999999999992 0.0 940
+941 0.0332541465759277 0.0300000000000011 0.0300000000000011 0.0 941
+942 0.0368809700012207 0.0400000000000063 0.0400000000000063 0.0 942
+943 0.0335171222686768 0.0300000000000011 0.0300000000000011 0.0 943
+944 0.0335350036621094 0.0300000000000011 0.0300000000000011 0.0 944
+945 0.0578980445861816 0.0600000000000023 0.0600000000000023 0.0 945
+946 0.0351078510284424 0.039999999999992 0.039999999999992 0.0 946
+947 0.0334479808807373 0.0300000000000011 0.0300000000000011 0.0 947
+948 0.033311128616333 0.0300000000000011 0.0300000000000011 0.0 948
+949 0.0363750457763672 0.0400000000000063 0.0400000000000063 0.0 949
+950 0.033627986907959 0.0299999999999869 0.0299999999999869 0.0 950
+951 0.033160924911499 0.0400000000000063 0.0400000000000063 0.0 951
+952 0.033203125 0.0300000000000011 0.0300000000000011 0.0 952
+953 0.0647599697113037 0.0600000000000023 0.0600000000000023 0.0 953
+954 0.0328559875488281 0.039999999999992 0.039999999999992 0.0 954
+955 0.0357460975646973 0.0300000000000011 0.0300000000000011 0.0 955
+956 0.033236026763916 0.0400000000000063 0.0400000000000063 0.0 956
+957 0.0331499576568604 0.0300000000000011 0.0300000000000011 0.0 957
+958 0.0325798988342285 0.0300000000000011 0.0300000000000011 0.0 958
+959 0.0328090190887451 0.0300000000000011 0.0300000000000011 0.0 959
+960 0.033491849899292 0.039999999999992 0.039999999999992 0.0 960
+961 0.0579450130462646 0.0600000000000023 0.0600000000000023 0.0 961
+962 0.0369048118591309 0.0300000000000011 0.0300000000000011 0.0 962
+963 0.0337331295013428 0.039999999999992 0.039999999999992 0.0 963
+964 0.0333647727966309 0.0300000000000011 0.0300000000000011 0.0 964
+965 0.0332319736480713 0.0300000000000011 0.0300000000000011 0.0 965
+966 0.033174991607666 0.0400000000000063 0.0400000000000063 0.0 966
+967 0.0331299304962158 0.0300000000000011 0.0300000000000011 0.0 967
+968 0.0334961414337158 0.0300000000000011 0.0300000000000011 0.0 968
+969 0.0604250431060791 0.0600000000000023 0.0600000000000023 0.0 969
+970 0.0347049236297607 0.039999999999992 0.039999999999992 0.0 970
+971 0.0334169864654541 0.0300000000000011 0.0300000000000011 0.0 971
+972 0.0332670211791992 0.0400000000000063 0.0400000000000063 0.0 972
+973 0.0347368717193604 0.0300000000000011 0.0300000000000011 0.0 973
+974 0.0333490371704102 0.0299999999999869 0.0299999999999869 0.0 974
+975 0.033484935760498 0.0400000000000063 0.0400000000000063 0.0 975
+976 0.0361530780792236 0.0300000000000011 0.0300000000000011 0.0 976
+977 0.0591049194335938 0.0600000000000023 0.0600000000000023 0.0 977
+978 0.0333170890808105 0.039999999999992 0.039999999999992 0.0 978
+979 0.0332751274108887 0.0300000000000011 0.0300000000000011 0.0 979
+980 0.0404400825500488 0.0400000000000063 0.0400000000000063 0.0 980
+981 0.0332608222961426 0.0300000000000011 0.0300000000000011 0.0 981
+982 0.0361859798431396 0.039999999999992 0.039999999999992 0.0 982
+983 0.0338070392608643 0.0300000000000011 0.0300000000000011 0.0 983
+984 0.0339329242706299 0.0400000000000063 0.0400000000000063 0.0 984
+985 0.0576000213623047 0.0499999999999972 0.0499999999999972 0.0 985
+986 0.0332310199737549 0.0400000000000063 0.0400000000000063 0.0 986
+987 0.0331230163574219 0.0299999999999869 0.0299999999999869 0.0 987
+988 0.0332698822021484 0.0300000000000011 0.0300000000000011 0.0 988
+989 0.0362260341644287 0.0400000000000063 0.0400000000000063 0.0 989
+990 0.0335850715637207 0.0300000000000011 0.0300000000000011 0.0 990
+991 0.0335838794708252 0.039999999999992 0.039999999999992 0.0 991
+992 0.0581378936767578 0.0600000000000023 0.0600000000000023 0.0 992
+993 0.0338449478149414 0.0300000000000011 0.0300000000000011 0.0 993
+994 0.0334839820861816 0.0300000000000011 0.0300000000000011 0.0 994
+995 0.0354399681091309 0.0400000000000063 0.0400000000000063 0.0 995
+996 0.0348441600799561 0.0300000000000011 0.0300000000000011 0.0 996
+997 0.033607006072998 0.039999999999992 0.039999999999992 0.0 997
+998 0.0334219932556152 0.0300000000000011 0.0300000000000011 0.0 998
+999 0.0331289768218994 0.0300000000000011 0.0300000000000011 0.0 999
+1000 0.0591549873352051 0.0600000000000023 0.0600000000000023 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log
new file mode 100644
index 0000000..abfc0d4
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log
@@ -0,0 +1,82 @@
+========================== 2009-04-01T16:48:20 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'ParserBenchmarkPure' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+ParserBenchmarkPure#parser:
+ real total user system
+sum 37.410897017 37.380000000 37.360000000 0.020000000
+min 0.032916069 0.030000000 0.030000000 0.000000000
+std- 0.029058517 0.027934111 0.027951551 -0.000426990
+mean 0.037410897 0.037380000 0.037360000 0.000020000
+std+ 0.045763277 0.046825889 0.046768449 0.000466990
+max 0.068524122 0.070000000 0.070000000 0.010000000
+std 0.008352380 0.009445889 0.009408449 0.000446990
+std% 22.326062222 25.269901841 25.183215569 2234.948544149
+harm 0.036161242 0.035525181 0.035515868 nan
+geo 0.036699193 0.036372385 0.036358664 0.000000000
+q1 0.033462286 0.030000000 0.030000000 0.000000000
+med 0.033834100 0.040000000 0.040000000 0.000000000
+q3 0.036020756 0.040000000 0.040000000 0.000000000
+ 1000 26.73018 0.037410897
+ calls calls/sec secs/call
+
+ 0.06674 -|
+ 0.06318 -|*
+ 0.05962 -|******
+ 0.05606 -|*
+ 0.05250 -|
+ 0.04894 -|
+ 0.04538 -|
+ 0.04182 -|*
+ 0.03826 -|****
+ 0.03470 -|**************************************************
+
+Outliers detected with box plot algo (median=0.03383, iqr=0.00256, factor=3.00):
+high=35 very_high=121
+
+Ljung-Box statistics: q=2505.23586 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+ParserBenchmarkPure#parser:
+ real total user system
+sum 37.376162529 37.280000000 37.260000000 0.020000000
+min 0.032336950 0.030000000 0.030000000 0.000000000
+std- 0.028895529 0.027756750 0.027774096 -0.000426990
+mean 0.037376163 0.037280000 0.037260000 0.000020000
+std+ 0.045856796 0.046803250 0.046745904 0.000466990
+max 0.068592072 0.070000000 0.070000000 0.010000000
+std 0.008480634 0.009523250 0.009485904 0.000446990
+std% 22.689953522 25.545198741 25.458680636 2234.948544149
+harm 0.036080414 0.035400319 0.035391071 nan
+geo 0.036638902 0.036256656 0.036242979 0.000000000
+q1 0.033310235 0.030000000 0.030000000 0.000000000
+med 0.033644676 0.030000000 0.030000000 0.000000000
+q3 0.036110342 0.040000000 0.040000000 0.000000000
+ 1000 26.75502 0.037376163
+ calls calls/sec secs/call
+
+ 0.06678 -|
+ 0.06315 -|*
+ 0.05953 -|*******
+ 0.05590 -|
+ 0.05228 -|
+ 0.04865 -|
+ 0.04503 -|
+ 0.04140 -|**
+ 0.03778 -|********
+ 0.03415 -|**************************************************
+
+Outliers detected with box plot algo (median=0.03364, iqr=0.00280, factor=3.00):
+high=33 very_high=124
+
+Ljung-Box statistics: q=3251.86614 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:49:38 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/ParserBenchmarkPure#parser.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/ParserBenchmarkPure#parser-autocorrelation.dat'.
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat
new file mode 100644
index 0000000..17c5d6f
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.155070059967971
+3 -0.138640912344721
+4 -0.139479328635323
+5 -0.143780851624976
+6 -0.131974028031826
+7 -0.131846874465781
+8 -0.0297449586146407
+9 0.845922970552183
+10 -0.159296984935386
+11 -0.138285991843348
+12 -0.134537533789242
+13 -0.131577093324224
+14 -0.125691308156566
+15 -0.132970073437043
+16 0.0701610897537414
+17 0.726509328882366
+18 -0.155563464936531
+19 -0.130583532910968
+20 -0.130321215707134
+21 -0.128053370668094
+22 -0.131414104117502
+23 -0.143370315509163
+24 0.167753265713558
+25 0.62702138447293
+26 -0.141554127399372
+27 -0.115269798845456
+28 -0.136445627883801
+29 -0.132820637414474
+30 -0.135080622216643
+31 -0.144602952408704
+32 0.276623173612157
+33 0.525501850891615
+34 -0.139450017650941
+35 -0.134162769453426
+36 -0.140949499976629
+37 -0.132215037534107
+38 -0.128279804339387
+39 -0.136810773207112
+40 0.379134129717981
+41 0.416977891767592
+42 -0.140192442908231
+43 -0.13892710741734
+44 -0.137436044286789
+45 -0.12612058061194
+46 -0.123633038155193
+47 -0.137070098406579
+48 0.472544339120691
+49 0.301863391448336
+50 -0.137675443743332
+51 -0.132184661720946
+52 -0.121519101402595
+53 -0.115776688296262
+54 -0.131478499025051
+55 -0.116275192910739
+56 0.513473974254625
+57 0.227814467008427
+58 -0.129625218043982
+59 -0.125216745459882
+60 -0.125935112946914
+61 -0.130109252240931
+62 -0.135733419564075
+63 -0.0889814647212915
+64 0.559816239969457
+65 0.163620887268623
+66 -0.126594899689712
+67 -0.127716578736114
+68 -0.128558799740727
+69 -0.132714253074456
+70 -0.132981927789806
+71 -0.0463125531444366
+72 0.581465412089299
+73 0.0982819048234013
+74 -0.129982480706599
+75 -0.133771142860062
+76 -0.126274218030991
+77 -0.123223469867868
+78 -0.11895869982128
+79 0.0160445617942978
+80 0.549313085089554
+81 0.0523653189850826
+82 -0.129204586675343
+83 -0.127677297248879
+84 -0.11959366617596
+85 -0.118162084235907
+86 -0.129587964492176
+87 0.0651465727581341
+88 0.512663258282342
+89 0.0223897667771226
+90 -0.118248096115527
+91 -0.123885682842303
+92 -0.117535431833331
+93 -0.121345328959052
+94 -0.133999463136408
+95 0.135326455911309
+96 0.463805777555027
+97 0.00311864739783577
+98 -0.114421979094575
+99 -0.128164506124927
+100 -0.122080031865248
+101 -0.127022342388225
+102 -0.12151335276331
+103 0.208878191673693
+104 0.419309330326886
+105 -0.0174799014199824
+106 -0.12009985269644
+107 -0.131417368471035
+108 -0.121134843634553
+109 -0.120666756344282
+110 -0.105725377626208
+111 0.262489561386311
+112 0.354541905467325
+113 -0.0429415817022358
+114 -0.118506332455011
+115 -0.127753774809165
+116 -0.109476116043001
+117 -0.119418083275649
+118 -0.0854522404041955
+119 0.302906589860581
+120 0.286896207128895
+121 -0.0493387013179091
+122 -0.111479392930294
+123 -0.123008951924811
+124 -0.106573141028928
+125 -0.126135643791708
+126 -0.0577076665067928
+127 0.311292557510419
+128 0.249513559300441
+129 -0.0437015056466829
+130 -0.10140472809797
+131 -0.125545283680022
+132 -0.113851927275127
+133 -0.129070941594458
+134 -0.0206722811383723
+135 0.33013248984195
+136 0.20961947786441
+137 -0.0505286003858023
+138 -0.118483870649077
+139 -0.129232461148704
+140 -0.110922591820262
+141 -0.126965629548802
+142 0.0286192948484217
+143 0.337096243794888
+144 0.169248086740963
+145 -0.0654190423907559
+146 -0.120486323653649
+147 -0.127288129860007
+148 -0.103891665783828
+149 -0.124659309493563
+150 0.0654747872813297
+151 0.339088871793489
+152 0.117694381111953
+153 -0.069800715562458
+154 -0.113826839844647
+155 -0.112055163352168
+156 -0.0970154053292618
+157 -0.12192255176261
+158 0.0946677686276986
+159 0.319767630968006
+160 0.0962983917333902
+161 -0.0684068034695184
+162 -0.112118295167087
+163 -0.114032731963194
+164 -0.110895191829693
+165 -0.12490942207346
+166 0.150898199785889
+167 0.291628773924692
+168 0.0856114574594624
+169 -0.0734234204063937
+170 -0.114367902362174
+171 -0.118059154641348
+172 -0.112572722725924
+173 -0.103481698557819
+174 0.173284813389025
+175 0.278003056900596
+176 0.0650604673280916
+177 -0.0868193733027222
+178 -0.11924430409928
+179 -0.113850555498896
+180 -0.104056053166332
+181 -0.0706195733056155
+182 0.195014655464426
+183 0.251621304231625
+184 0.0441497783679571
+185 -0.0959128518254443
+186 -0.114114295397473
+187 -0.10361116463172
+188 -0.107664797628733
+189 -0.0474401968360638
+190 0.192034834911418
+191 0.224134275351347
+192 0.0395907319098148
+193 -0.0949220934593083
+194 -0.110602484889644
+195 -0.100717728255861
+196 -0.112049320791611
+197 -0.0238825067986291
+198 0.201018888376214
+199 0.200211719960315
+200 0.0376449870339866
+201 -0.0991903665462876
+202 -0.116672120770685
+203 -0.104917842447271
+204 -0.116982682663512
+205 0.0162721560678791
+206 0.204021816160558
+207 0.207342785121829
+208 0.00663694227997103
+209 -0.106521500277643
+210 -0.116317595851116
+211 -0.104116328257713
+212 -0.112167749776831
+213 0.0615103449414028
+214 0.199609635845337
+215 0.172676627738091
+216 -0.0173787071397098
+217 -0.104939889867195
+218 -0.112425821733991
+219 -0.0953637703798143
+220 -0.093052367494033
+221 0.0644616034737725
+222 0.21086820069092
+223 0.135486543334319
+224 -0.0210787666638188
+225 -0.0993320996511885
+226 -0.109562190043721
+227 -0.0908673948537397
+228 -0.0914456089142807
+229 0.077581460778825
+230 0.208551872164277
+231 0.116140101018818
+232 -0.0163102277997069
+233 -0.0916236078939407
+234 -0.111987175847954
+235 -0.0967383768271821
+236 -0.0826408025523878
+237 0.0966321189661173
+238 0.217509001187049
+239 0.0915108637148122
+240 -0.0253671941695331
+241 -0.104462116651977
+242 -0.11348746907754
+243 -0.0959006192794962
+244 -0.0612059863164585
+245 0.113695227895139
+246 0.208511810998661
+247 0.0766780695718476
+248 -0.0378625564901882
+249 -0.10618641671093
+250 -0.109982771242569
+251 -0.0926244918680679
+252 -0.0406078163763886
+253 0.124817056851144
+254 0.194848461762426
+255 0.053597534522723
+256 -0.0438252920201072
+257 -0.0998946597604676
+258 -0.0959760154259235
+259 -0.090197307047542
+260 -0.0257502198933741
+261 0.136762854179184
+262 0.168912763917697
+263 0.048323842970136
+264 -0.0436786423512219
+265 -0.100740525834715
+266 -0.0977845042725835
+267 -0.0927358458760765
+268 -0.0166810260413945
+269 0.146292226604344
+270 0.158004011117704
+271 0.0463090919867654
+272 -0.0508649026224276
+273 -0.100538901603337
+274 -0.0991902746655388
+275 -0.0968540899423071
+276 0.0148153955144431
+277 0.142136683921793
+278 0.150608238602075
+279 0.0366986042958235
+280 -0.0623139712087233
+281 -0.104975317080266
+282 -0.0956029621068854
+283 -0.0890770998720019
+284 0.0548354482192922
+285 0.133209397126082
+286 0.135583138300418
+287 0.0272435880371227
+288 -0.0714230928286135
+289 -0.0994192940032151
+290 -0.088773103919012
+291 -0.0841613176265042
+292 0.0592558849502553
+293 0.125376924612805
+294 0.129920277737479
+295 0.0195010407479747
+296 -0.0711393383891102
+297 -0.0966110162658782
+298 -0.0881783407707736
+299 -0.0770822025982766
+300 0.066971190635949
+301 0.132833571859132
+302 0.106070818363025
+303 0.0264050368313431
+304 -0.0786120187871163
+305 -0.099744480101871
+306 -0.0903116034438872
+307 -0.0727258814461179
+308 0.0805880901984141
+309 0.152764049007061
+310 0.0897693593924932
+311 0.0244183980184888
+312 -0.0913585727715549
+313 -0.101610527844229
+314 -0.0890784444186723
+315 -0.0580505722105439
+316 0.10438372554223
+317 0.13749147221931
+318 0.0759708703685098
+319 0.0047310993987612
+320 -0.0918433949431894
+321 -0.0973283709859868
+322 -0.0830381658731675
+323 -0.0375501533905209
+324 0.104260628790112
+325 0.136767805598137
+326 0.0649623096294137
+327 -0.0111381353615883
+328 -0.0902174271151667
+329 -0.0900084947503609
+330 -0.0845603027974476
+331 -0.0222484905680352
+332 0.10044110265699
+333 0.137209031622297
+334 0.0512317724372533
+335 -0.00469813974344492
+336 -0.0852660869649502
+337 -0.0936856764672113
+338 -0.0810781749410849
+339 -0.0111001728500522
+340 0.103897631604526
+341 0.131709630700509
+342 0.0454986930271181
+343 -0.0154461854075281
+344 -0.0950428147360073
+345 -0.0917481808403137
+346 -0.0819073492712917
+347 0.0124487690676487
+348 0.108988172807393
+349 0.12289144923052
+350 0.0405329244459299
+351 -0.0278261263679556
+352 -0.0969672128436255
+353 -0.0868716693424195
+354 -0.0819407369083838
+355 0.035944491369377
+356 0.107744673984401
+357 0.112575623631055
+358 0.0263346758872926
+359 -0.0328420504056899
+360 -0.0908205706813633
+361 -0.0750870093565662
+362 -0.0805597459059112
+363 0.0581570376747647
+364 0.0865463018735628
+365 0.116540878273595
+366 0.0199948600453009
+367 -0.03533657508366
+368 -0.0918593012174403
+369 -0.0794617415964357
+370 -0.0787014627401186
+371 0.0674476303755033
+372 0.087942973565642
+373 0.104930936427726
+374 0.0273053506001638
+375 -0.0464030903226921
+376 -0.0892541387964512
+377 -0.0826842259404731
+378 -0.071374986057042
+379 0.0807180550904197
+380 0.0929177969009142
+381 0.0862437690352589
+382 0.0286028161793366
+383 -0.0593261076213299
+384 -0.0910657756760768
+385 -0.0789683507405574
+386 -0.0550314183063351
+387 0.100805664939276
+388 0.0897320960012182
+389 0.067010863731299
+390 0.0261048090556462
+391 -0.0659316696174206
+392 -0.086786864764739
+393 -0.0733845242014095
+394 -0.0405465879929758
+395 0.0859517679001778
+396 0.0936250494518407
+397 0.0524562962824195
+398 0.0270919515769923
+399 -0.0676718513969418
+400 -0.0824139549961516
+401 -0.0758274382046422
+402 -0.021973546868283
+403 0.075410664358751
+404 0.104172119247351
+405 0.0343795991613305
+406 0.0358573471696254
+407 -0.0790257754948948
+408 -0.0826103755113398
+409 -0.0802175095763564
+410 -0.00408772816730303
+411 0.0797817450643218
+412 0.10269754375399
+413 0.0435425040893042
+414 0.0151375915059022
+415 -0.082224988149043
+416 -0.0825565105203654
+417 -0.0696184362192416
+418 0.00170781584040336
+419 0.0936874402227218
+420 0.0877595224369305
+421 0.0362572112929432
+422 -0.000752383773564971
+423 -0.0819270792159826
+424 -0.0773158381537405
+425 -0.0651464418900243
+426 0.0233879760162931
+427 0.0833911120244448
+428 0.0867605850712271
+429 0.0258451549993298
+430 -0.00489040153892436
+431 -0.0813233842666857
+432 -0.0691569813607638
+433 -0.0684545819114933
+434 0.0396563587473597
+435 0.0716165433337824
+436 0.0861256506553954
+437 0.0246435046549525
+438 -0.00567840565516219
+439 -0.0766446108871898
+440 -0.0734501086613091
+441 -0.0625863247444175
+442 0.0405008658019374
+443 0.0751250312042876
+444 0.0937777476669092
+445 0.0157135360029692
+446 -0.0185119034061188
+447 -0.0834731849818629
+448 -0.0721596446426834
+449 -0.0539848776994025
+450 0.0482803239352817
+451 0.0865159532050759
+452 0.0758518110612569
+453 0.0183167125626064
+454 -0.0302067075389182
+455 -0.0836849146728332
+456 -0.0680915900681338
+457 -0.0453151677467697
+458 0.0635811903828984
+459 0.0735228836096314
+460 0.0668774855582583
+461 0.0155517569389754
+462 -0.0361902584803522
+463 -0.0772526293731969
+464 -0.0599993945121568
+465 -0.0350025604255705
+466 0.0675409442225932
+467 0.0626588958411958
+468 0.0628618478913283
+469 0.0182100018474144
+470 -0.0393572049932932
+471 -0.0769465863807705
+472 -0.0669019696984521
+473 -0.0307690547029792
+474 0.0787650857298563
+475 0.0555937053005102
+476 0.0591286536064479
+477 0.0236864710611653
+478 -0.0510348446259402
+479 -0.0750230625326582
+480 -0.0692429698123807
+481 -0.0136046303961235
+482 0.074650527480705
+483 0.0576038372995368
+484 0.0514169146679383
+485 0.0235780875676953
+486 -0.0619450461800331
+487 -0.0775574009249976
+488 -0.0561458830522187
+489 -0.00509801117317696
+490 0.0804313785186439
+491 0.0577719157969876
+492 0.03898688881339
+493 0.0241595263048843
+494 -0.0685591657894399
+495 -0.0723076795891697
+496 -0.0523226231903489
+497 0.00373957683716917
+498 0.0717069979485176
+499 0.0550717482683905
+500 0.0403995445989468
+501 0.0113079953085825
+502 -0.0649276537000009
+503 -0.06649843954063
+504 -0.0560505708705572
+505 0.0137761579457734
+506 0.0702863631617265
+507 0.0541404684830862
+508 0.0443433883094673
+509 -0.00133780696150024
+510 -0.0665134068108655
+511 -0.0657601321121601
+512 -0.0607034011107588
+513 0.0213546383342833
+514 0.0775077767181889
+515 0.063458353376667
+516 0.0389609528439854
+517 -0.0108770067728056
+518 -0.0688616436130423
+519 -0.065807838377633
+520 -0.0591899626361279
+521 0.0477995260084885
+522 0.069819996106301
+523 0.0493499046172744
+524 0.0332730594271413
+525 -0.0200687475895302
+526 -0.0673172583961927
+527 -0.0608118592717286
+528 -0.046481250749937
+529 0.0514180414158432
+530 0.0671097463271896
+531 0.0400867520372663
+532 0.0333984982834754
+533 -0.0264838317178022
+534 -0.0659983240048536
+535 -0.0542885590490045
+536 -0.0401453467006326
+537 0.0485625723714385
+538 0.0635239092110429
+539 0.0345979294218286
+540 0.0399929330334083
+541 -0.028147715594677
+542 -0.0619139995393741
+543 -0.0586913999576994
+544 -0.0334649755872845
+545 0.0516737635834675
+546 0.0645253644882226
+547 0.0345307867743962
+548 0.0400603616259159
+549 -0.0423531962375596
+550 -0.0672300807914405
+551 -0.0587843856721668
+552 -0.0232646807886831
+553 0.058345982518284
+554 0.0665917961516256
+555 0.0274860012958233
+556 0.0415598244265968
+557 -0.0545146822234879
+558 -0.0677685109591305
+559 -0.0552725887508413
+560 -0.0125012238487659
+561 0.0625075581718202
+562 0.066971444471093
+563 0.0129232540938186
+564 0.0392980506706601
+565 -0.05908734296345
+566 -0.0607304242571567
+567 -0.0493112113842046
+568 0.00071062117125135
+569 0.0653734421725974
+570 0.0469205167937502
+571 0.0252022285127285
+572 0.0269428623042389
+573 -0.0554040258813037
+574 -0.0594329262955446
+575 -0.0472055457536386
+576 -0.00273760356981996
+577 0.0642743964669037
+578 0.0419312704866381
+579 0.0399122296513867
+580 0.0132186725236814
+581 -0.0547466706460982
+582 -0.0579756221767372
+583 -0.0511476715833451
+584 0.00601423910448657
+585 0.0689373246423459
+586 0.0353940033868963
+587 0.0425778157862413
+588 0.00424129603039375
+589 -0.0586697203651189
+590 -0.059002595522944
+591 -0.0470191336291943
+592 0.0244211578887408
+593 0.0714176288385068
+594 0.0293208317804955
+595 0.0369996210742842
+596 -0.00457553552424864
+597 -0.0559531047561718
+598 -0.0523918096467366
+599 -0.0446664312862491
+600 0.0316320734850762
+601 0.0644602080811167
+602 0.0199863627247641
+603 0.0369746309809726
+604 -0.00948602618598588
+605 -0.0504144894458729
+606 -0.0498443845352435
+607 -0.0444638507903543
+608 0.0391189013974007
+609 0.0628424781970596
+610 0.0112347649830505
+611 0.041452654212153
+612 -0.0137347497952992
+613 -0.0506892746398375
+614 -0.0511072669077967
+615 -0.0477234466444133
+616 0.048705448350975
+617 0.0667627851388053
+618 0.0115120265386804
+619 0.0461383553267045
+620 -0.0255620287525987
+621 -0.0530260247588348
+622 -0.0518381410417808
+623 -0.034700796376516
+624 0.0438063518562166
+625 0.0798836058195734
+626 -0.00243894245318495
+627 0.0406243460796687
+628 -0.0332199890358811
+629 -0.0523350080049007
+630 -0.0477070167478482
+631 -0.0215305402264588
+632 0.0472394359550523
+633 0.0694737083559497
+634 -0.00372172457388709
+635 0.0391809172600764
+636 -0.0382719971378076
+637 -0.0501961995371232
+638 -0.042738214015656
+639 -0.0140839477377811
+640 0.0442885931768186
+641 0.0581346694204897
+642 -0.000477976111666972
+643 0.044566527743489
+644 -0.0396856402477227
+645 -0.0466626145007252
+646 -0.0480864305333951
+647 -0.00726442405889962
+648 0.0459497867910762
+649 0.0529082222445075
+650 0.0147432426130685
+651 0.0267433571795441
+652 -0.0446692520126606
+653 -0.0497203066081803
+654 -0.0480919421757669
+655 0.00345954210366673
+656 0.0509913399433936
+657 0.0467433070314585
+658 0.0252001648134732
+659 0.0106946846977517
+660 -0.0484551606819746
+661 -0.0500758070505588
+662 -0.0440163401232168
+663 0.0148218474037118
+664 0.0526365008291643
+665 0.0397902946591361
+666 0.0206689888910779
+667 0.00207265111858896
+668 -0.0440452489670014
+669 -0.0447792337914997
+670 -0.0286381554427784
+671 0.00640869437792482
+672 0.057153163903739
+673 0.0304890998129141
+674 0.0230136624918959
+675 -0.00281506118608654
+676 -0.0387242678971035
+677 -0.044929991903093
+678 -0.0345193810230013
+679 0.00492460337689268
+680 0.0679821172192718
+681 0.0219950472241659
+682 0.0289438385002853
+683 -0.00781136170677615
+684 -0.0388612390832975
+685 -0.0438680272774733
+686 -0.0376131497506628
+687 0.0139348600467974
+688 0.0615101213028946
+689 0.0249115734544766
+690 0.0331598636184604
+691 -0.0195415991964588
+692 -0.0396395679788538
+693 -0.0456649577394422
+694 -0.0344136244069955
+695 0.031200395934606
+696 0.0562012519733673
+697 0.0260663012747182
+698 0.0295359686001106
+699 -0.0291311572903775
+700 -0.0371203313810216
+701 -0.0424418146790537
+702 -0.0303746199454463
+703 0.0388492858751788
+704 0.0424481679100295
+705 0.0263584605497916
+706 0.0288712604390293
+707 -0.0341554547083513
+708 -0.0333021072203847
+709 -0.0383392296141879
+710 -0.030923211248435
+711 0.0471145773235206
+712 0.032067317539082
+713 0.0263399585846731
+714 0.0323937671311792
+715 -0.0392772990043492
+716 -0.0317758252581109
+717 -0.0407689976562314
+718 -0.0327532575849971
+719 0.0558983521943971
+720 0.026320879417627
+721 0.0457775828616138
+722 0.0162704705253485
+723 -0.0410862090233348
+724 -0.0334511325087015
+725 -0.0413337594074423
+726 -0.0301113850535044
+727 0.0700417742596319
+728 0.0210871230961877
+729 0.0496617422305004
+730 -0.00408251250355076
+731 -0.0406821339716385
+732 -0.0329210563908783
+733 -0.0378798823957753
+734 -0.0166612213666539
+735 0.0622559233401728
+736 0.0220631815362089
+737 0.0480937159816023
+738 -0.0123428856122574
+739 -0.0375402198111287
+740 -0.0309453130567288
+741 -0.0353256252179894
+742 -0.00536945125430805
+743 0.0496444169496324
+744 0.0204929366248046
+745 0.0499533569480695
+746 -0.0174935751544407
+747 -0.0286134919496942
+748 -0.0305151115655182
+749 -0.0370057423961568
+750 0.00182606608143132
+751 0.0417928304144692
+752 0.0232491015772242
+753 0.0556033683720853
+754 -0.0281117547926764
+755 -0.030035318580472
+756 -0.0330573966633533
+757 -0.0365260598388687
+758 0.0111750942979797
+759 0.0374827782514529
+760 0.0257453279628935
+761 0.0580299290244595
+762 -0.0358087395388202
+763 -0.0338231237069173
+764 -0.0328610625099181
+765 -0.0336222121488749
+766 0.0234186100148553
+767 0.0293361050839678
+768 0.0383060243360171
+769 0.0358879458606336
+770 -0.0363117922484678
+771 -0.0310100414844719
+772 -0.0298340231919974
+773 -0.0258481757762449
+774 0.033493341046757
+775 0.0172146853910682
+776 0.0455221955873717
+777 0.0204498758334694
+778 -0.033692934640153
+779 -0.0254246875075756
+780 -0.0321408035488926
+781 -0.0179574084831518
+782 0.0214789164114721
+783 0.019638114859952
+784 0.0455930828635699
+785 0.0178984964416421
+786 -0.0300055577311117
+787 -0.0240917794268532
+788 -0.0321597467853985
+789 -0.0210401731167207
+790 0.0230111556897733
+791 0.0217566052979974
+792 0.0489917866644012
+793 0.0104440982676834
+794 -0.0301428802473305
+795 -0.0258951028342734
+796 -0.03187192392573
+797 -0.0176269050708972
+798 0.027393570534183
+799 0.0263875715311133
+800 0.0486779658212448
+801 -0.00102291484615847
+802 -0.0300556523736458
+803 -0.023857819156972
+804 -0.0280605128257784
+805 -0.0146115387847382
+806 0.0244907923259942
+807 0.0247824841072157
+808 0.0494074681728141
+809 -0.0095960873131345
+810 -0.0267959528999005
+811 -0.0203312406902549
+812 -0.0260311947802059
+813 -0.0131484879600813
+814 0.0230120193265332
+815 0.0228091639758259
+816 0.051666749222434
+817 -0.0152576501369182
+818 -0.0250358027329496
+819 -0.0190314982739485
+820 -0.0266605188325892
+821 -0.0144373958898868
+822 0.0237380994329812
+823 0.0260374801079161
+824 0.0586957834829624
+825 -0.022457849542461
+826 -0.0262980585565696
+827 -0.0200584452117297
+828 -0.0266876132871316
+829 -0.0129290645560979
+830 0.0289095571745369
+831 0.0354539766084729
+832 0.0392777761914384
+833 -0.0238771076358964
+834 -0.0245018601036372
+835 -0.0205517186652316
+836 -0.0234327204627339
+837 -0.00933955244847433
+838 0.0296367828905565
+839 0.0459917434926111
+840 0.0186744768510845
+841 -0.0234505177518883
+842 -0.0215210406113312
+843 -0.01812563049523
+844 -0.0212885529434847
+845 -0.0088234522037928
+846 0.0280281842675072
+847 0.045730091253579
+848 0.0136208433079523
+849 -0.0205058386168346
+850 -0.0163481209061992
+851 -0.017230164457982
+852 -0.0230906563738739
+853 -0.00937085079532756
+854 0.0286089438226922
+855 0.0501679772526387
+856 0.00511934527865221
+857 -0.0188740591732872
+858 -0.017123441437589
+859 -0.0185029603009925
+860 -0.0202624384779385
+861 -0.0103662518808214
+862 0.0316765684721357
+863 0.0535962784902621
+864 -0.00257262435536896
+865 -0.0176721411023214
+866 -0.0194221796537958
+867 -0.0180419513954025
+868 -0.0173325086944974
+869 -0.00890051108382059
+870 0.0333845873727604
+871 0.0544120911411167
+872 -0.0112929673408612
+873 -0.0180526419713337
+874 -0.0167143497616369
+875 -0.0157948604767141
+876 -0.0130148291547908
+877 -0.0066614174930643
+878 0.0306666725820053
+879 0.0540685898200517
+880 -0.0179887040186856
+881 -0.0155749350538922
+882 -0.015542452853135
+883 -0.0149949065113926
+884 -0.0134739305361601
+885 -0.0082822064674981
+886 0.0415180058769115
+887 0.037756025074253
+888 -0.0148899027592997
+889 -0.013090094291838
+890 -0.0153014397425967
+891 -0.0135012972355123
+892 -0.015585448733386
+893 -0.00788737374502331
+894 0.0535415797928148
+895 0.0217926147381109
+896 -0.01363175489377
+897 -0.012354773771845
+898 -0.0155285058724365
+899 -0.0135036893080631
+900 -0.0125236766180776
+901 -0.00637080628552419
+902 0.0605226042557018
+903 0.0112303280281208
+904 -0.0133912061642023
+905 -0.0124502459337457
+906 -0.0142998634027549
+907 -0.0099981269727546
+908 -0.0122633402331702
+909 -0.00567413706716593
+910 0.0595172409685727
+911 0.00326019370638518
+912 -0.0128841193059995
+913 -0.0102224824574885
+914 -0.0116469346046309
+915 -0.00776357295252222
+916 -0.0118848925539363
+917 -0.00433896685705348
+918 0.0567076341120711
+919 -0.00300835870741313
+920 -0.0107647074857665
+921 -0.00845164093060122
+922 -0.0106818140369162
+923 -0.00761048402311565
+924 -0.0114674108324614
+925 -0.00417421313051504
+926 0.0598773670187433
+927 -0.00747931723570069
+928 -0.00927920131574313
+929 -0.00986810999500912
+930 -0.0104075730217127
+931 -0.00695169167094114
+932 -0.0109784274186893
+933 0.00811872232461237
+934 0.0430158981401019
+935 -0.00722859498851006
+936 -0.00990312674945696
+937 -0.00920124918803136
+938 -0.00908355760957161
+939 -0.00496962170124263
+940 -0.00878291146198605
+941 0.0194043242975934
+942 0.0256780783722546
+943 -0.00897052689874001
+944 -0.00954900138754423
+945 -0.00713164082441335
+946 -0.00673138670048183
+947 -0.00311543034312673
+948 -0.00793377494765913
+949 0.0199694046973212
+950 0.0180051634303271
+951 -0.00731841589233604
+952 -0.0061524475893558
+953 -0.00552246177877621
+954 -0.00405347414382562
+955 -0.00502519204794434
+956 -0.00735520719380658
+957 0.0201391483118552
+958 0.0115351551478785
+959 -0.00595396340022971
+960 -0.0044658313778136
+961 -0.00466635333434365
+962 -0.00505971330517482
+963 -0.00426347088471071
+964 -0.00630201264403959
+965 0.0226924063931286
+966 0.00532856864375404
+967 -0.00456693836529996
+968 -0.00500848518452319
+969 -0.00521286355162228
+970 -0.00466691800162192
+971 -0.00261192567994811
+972 -0.00365801738266432
+973 0.0244751515715762
+974 -0.00293671804465107
+975 -0.0036023990997325
+976 -0.00448873920500162
+977 -0.00365131282800052
+978 -0.00180880871887979
+979 -0.00132104428035144
+980 0.00742840409816276
+981 0.00626148410583357
+982 -0.00316720508921753
+983 -0.00304702341715472
+984 -0.0023682711547723
+985 -0.00118323799369014
+986 -3.66599346965767e-05
+987 -0.000324399710172427
+988 0.00733954118289635
+989 -0.00225809776707784
+990 -0.00133635779017759
+991 -0.00134850512655973
+992 -0.000434310902574387
+993 -0.000233992853297238
+994 0.000360461316321191
+995 -0.000531725699132137
+996 -0.000471000549829534
+997 0.000486792668870103
+998 0.000364177523187972
+999 0.000256019411210032
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat
new file mode 100644
index 0000000..e51dc44
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.0337560176849365 0.0300000000000011 0.0300000000000011 0.0 1
+2 0.0330429077148438 0.029999999999994 0.029999999999994 0.0 2
+3 0.0369691848754883 0.0400000000000063 0.0400000000000063 0.0 3
+4 0.0330410003662109 0.029999999999994 0.029999999999994 0.0 4
+5 0.0346219539642334 0.0400000000000063 0.0400000000000063 0.0 5
+6 0.0324759483337402 0.029999999999994 0.029999999999994 0.0 6
+7 0.0320150852203369 0.0300000000000011 0.0300000000000011 0.0 7
+8 0.0320718288421631 0.0300000000000011 0.0300000000000011 0.0 8
+9 0.0765988826751709 0.0799999999999983 0.0799999999999983 0.0 9
+10 0.0331180095672607 0.0300000000000011 0.0300000000000011 0.0 10
+11 0.0346410274505615 0.0399999999999991 0.0399999999999991 0.0 11
+12 0.0330672264099121 0.0300000000000011 0.0300000000000011 0.0 12
+13 0.0326869487762451 0.0300000000000011 0.0300000000000011 0.0 13
+14 0.0323951244354248 0.0399999999999991 0.0399999999999991 0.0 14
+15 0.0317728519439697 0.0300000000000011 0.0300000000000011 0.0 15
+16 0.0336828231811523 0.0300000000000011 0.0300000000000011 0.0 16
+17 0.0816280841827393 0.0799999999999983 0.0799999999999983 0.0 17
+18 0.0336179733276367 0.0399999999999991 0.0399999999999991 0.0 18
+19 0.0329349040985107 0.0300000000000011 0.0300000000000011 0.0 19
+20 0.0328211784362793 0.0300000000000011 0.0300000000000011 0.0 20
+21 0.0326688289642334 0.0300000000000011 0.0300000000000011 0.0 21
+22 0.0329129695892334 0.0399999999999991 0.0399999999999991 0.0 22
+23 0.0351161956787109 0.0300000000000011 0.0300000000000011 0.0 23
+24 0.073289155960083 0.0799999999999983 0.0799999999999983 0.0 24
+25 0.0333049297332764 0.0300000000000011 0.0300000000000011 0.0 25
+26 0.0327980518341064 0.029999999999994 0.029999999999994 0.0 26
+27 0.0333559513092041 0.0400000000000063 0.0400000000000063 0.0 27
+28 0.0331299304962158 0.029999999999994 0.029999999999994 0.0 28
+29 0.0361030101776123 0.0300000000000011 0.0300000000000011 0.0 29
+30 0.0326149463653564 0.0399999999999991 0.0399999999999991 0.0 30
+31 0.0354421138763428 0.0300000000000011 0.0300000000000011 0.0 31
+32 0.0737769603729248 0.0799999999999983 0.0799999999999983 0.0 32
+33 0.0334198474884033 0.0300000000000011 0.0300000000000011 0.0 33
+34 0.0328729152679443 0.0300000000000011 0.0300000000000011 0.0 34
+35 0.0363237857818604 0.0399999999999991 0.0399999999999991 0.0 35
+36 0.0331850051879883 0.0300000000000011 0.0300000000000011 0.0 36
+37 0.033970832824707 0.0399999999999991 0.0399999999999991 0.0 37
+38 0.0325729846954346 0.0300000000000011 0.0300000000000011 0.0 38
+39 0.0321781635284424 0.0300000000000011 0.0300000000000011 0.0 39
+40 0.0730009078979492 0.0700000000000003 0.0700000000000003 0.0 40
+41 0.0354671478271484 0.0399999999999991 0.0399999999999991 0.0 41
+42 0.0329980850219727 0.0300000000000011 0.0300000000000011 0.0 42
+43 0.0432839393615723 0.0499999999999972 0.0499999999999972 0.0 43
+44 0.0330131053924561 0.0300000000000011 0.0300000000000011 0.0 44
+45 0.032541036605835 0.0300000000000011 0.0300000000000011 0.0 45
+46 0.0323638916015625 0.0300000000000011 0.0300000000000011 0.0 46
+47 0.0322492122650146 0.0399999999999991 0.0399999999999991 0.0 47
+48 0.0752780437469482 0.0700000000000003 0.0700000000000003 0.0 48
+49 0.0334651470184326 0.0300000000000011 0.0300000000000011 0.0 49
+50 0.0330009460449219 0.0399999999999991 0.0399999999999991 0.0 50
+51 0.0331478118896484 0.0300000000000011 0.0300000000000011 0.0 51
+52 0.0328009128570557 0.029999999999994 0.029999999999994 0.0 52
+53 0.0326621532440186 0.0400000000000063 0.0400000000000063 0.0 53
+54 0.0325331687927246 0.029999999999994 0.029999999999994 0.0 54
+55 0.0355179309844971 0.0300000000000011 0.0300000000000011 0.0 55
+56 0.0758390426635742 0.0800000000000054 0.0800000000000054 0.0 56
+57 0.0330648422241211 0.029999999999994 0.029999999999994 0.0 57
+58 0.0333669185638428 0.0399999999999991 0.0399999999999991 0.0 58
+59 0.0331768989562988 0.0300000000000011 0.0300000000000011 0.0 59
+60 0.0326540470123291 0.0300000000000011 0.0300000000000011 0.0 60
+61 0.036034107208252 0.0399999999999991 0.0399999999999991 0.0 61
+62 0.0326058864593506 0.0300000000000011 0.0300000000000011 0.0 62
+63 0.032081127166748 0.0300000000000011 0.0300000000000011 0.0 63
+64 0.0732240676879883 0.0799999999999983 0.0799999999999983 0.0 64
+65 0.0332009792327881 0.0300000000000011 0.0300000000000011 0.0 65
+66 0.0333409309387207 0.0300000000000011 0.0300000000000011 0.0 66
+67 0.0352249145507812 0.0399999999999991 0.0399999999999991 0.0 67
+68 0.0328779220581055 0.0300000000000011 0.0300000000000011 0.0 68
+69 0.0408899784088135 0.0399999999999991 0.0399999999999991 0.0 69
+70 0.0330538749694824 0.0399999999999991 0.0399999999999991 0.0 70
+71 0.0315990447998047 0.0300000000000011 0.0300000000000011 0.0 71
+72 0.0723180770874023 0.0700000000000003 0.0700000000000003 0.0 72
+73 0.0360608100891113 0.0399999999999991 0.0399999999999991 0.0 73
+74 0.0332560539245605 0.0300000000000011 0.0300000000000011 0.0 74
+75 0.0337710380554199 0.0300000000000011 0.0300000000000011 0.0 75
+76 0.0330729484558105 0.0399999999999991 0.0399999999999991 0.0 76
+77 0.0325820446014404 0.0300000000000011 0.0300000000000011 0.0 77
+78 0.0323619842529297 0.029999999999994 0.029999999999994 0.0 78
+79 0.0319099426269531 0.0300000000000011 0.0300000000000011 0.0 79
+80 0.0756161212921143 0.0800000000000054 0.0800000000000054 0.0 80
+81 0.0331521034240723 0.029999999999994 0.029999999999994 0.0 81
+82 0.0353209972381592 0.0400000000000063 0.0400000000000063 0.0 82
+83 0.0330510139465332 0.029999999999994 0.029999999999994 0.0 83
+84 0.03314208984375 0.0300000000000011 0.0300000000000011 0.0 84
+85 0.03261399269104 0.0300000000000011 0.0300000000000011 0.0 85
+86 0.0322940349578857 0.0399999999999991 0.0399999999999991 0.0 86
+87 0.034559965133667 0.0300000000000011 0.0300000000000011 0.0 87
+88 0.0729730129241943 0.0700000000000003 0.0700000000000003 0.0 88
+89 0.033174991607666 0.0399999999999991 0.0399999999999991 0.0 89
+90 0.0331950187683105 0.0300000000000011 0.0300000000000011 0.0 90
+91 0.032789945602417 0.0300000000000011 0.0300000000000011 0.0 91
+92 0.032573938369751 0.0399999999999991 0.0399999999999991 0.0 92
+93 0.0352959632873535 0.0300000000000011 0.0300000000000011 0.0 93
+94 0.0322601795196533 0.0300000000000011 0.0300000000000011 0.0 94
+95 0.0399200916290283 0.0399999999999991 0.0399999999999991 0.0 95
+96 0.0733668804168701 0.0799999999999983 0.0799999999999983 0.0 96
+97 0.0330679416656494 0.0300000000000011 0.0300000000000011 0.0 97
+98 0.0331020355224609 0.0300000000000011 0.0300000000000011 0.0 98
+99 0.0338099002838135 0.0399999999999991 0.0399999999999991 0.0 99
+100 0.0351119041442871 0.0300000000000011 0.0300000000000011 0.0 100
+101 0.0325391292572021 0.0399999999999991 0.0399999999999991 0.0 101
+102 0.0326120853424072 0.0300000000000011 0.0300000000000011 0.0 102
+103 0.0314269065856934 0.029999999999994 0.029999999999994 0.0 103
+104 0.0736079216003418 0.0700000000000003 0.0700000000000003 0.0 104
+105 0.0331168174743652 0.0399999999999991 0.0399999999999991 0.0 105
+106 0.0369949340820312 0.0300000000000011 0.0300000000000011 0.0 106
+107 0.033034086227417 0.0399999999999991 0.0399999999999991 0.0 107
+108 0.0347108840942383 0.0300000000000011 0.0300000000000011 0.0 108
+109 0.0326550006866455 0.0300000000000011 0.0300000000000011 0.0 109
+110 0.032649040222168 0.0399999999999991 0.0399999999999991 0.0 110
+111 0.0317308902740479 0.0300000000000011 0.0300000000000011 0.0 111
+112 0.075963020324707 0.0700000000000003 0.0700000000000003 0.0 112
+113 0.0332450866699219 0.0399999999999991 0.0399999999999991 0.0 113
+114 0.0340969562530518 0.0300000000000011 0.0300000000000011 0.0 114
+115 0.0331099033355713 0.0300000000000011 0.0300000000000011 0.0 115
+116 0.0326979160308838 0.0399999999999991 0.0399999999999991 0.0 116
+117 0.0322890281677246 0.0300000000000011 0.0300000000000011 0.0 117
+118 0.0321509838104248 0.0300000000000011 0.0300000000000011 0.0 118
+119 0.0315690040588379 0.029999999999994 0.029999999999994 0.0 119
+120 0.0853371620178223 0.0900000000000034 0.0900000000000034 0.0 120
+121 0.0338900089263916 0.0300000000000011 0.0300000000000011 0.0 121
+122 0.0330648422241211 0.0399999999999991 0.0399999999999991 0.0 122
+123 0.0330510139465332 0.0300000000000011 0.0300000000000011 0.0 123
+124 0.0327119827270508 0.0300000000000011 0.0300000000000011 0.0 124
+125 0.0324461460113525 0.029999999999994 0.029999999999994 0.0 125
+126 0.036160945892334 0.0400000000000063 0.0400000000000063 0.0 126
+127 0.0314981937408447 0.029999999999994 0.029999999999994 0.0 127
+128 0.073836088180542 0.0800000000000054 0.0800000000000054 0.0 128
+129 0.0328719615936279 0.029999999999994 0.029999999999994 0.0 129
+130 0.0332820415496826 0.0300000000000011 0.0300000000000011 0.0 130
+131 0.0329020023345947 0.0300000000000011 0.0300000000000011 0.0 131
+132 0.0362491607666016 0.0399999999999991 0.0399999999999991 0.0 132
+133 0.0325329303741455 0.0300000000000011 0.0300000000000011 0.0 133
+134 0.0340819358825684 0.0399999999999991 0.0399999999999991 0.0 134
+135 0.0319511890411377 0.0300000000000011 0.0300000000000011 0.0 135
+136 0.0739138126373291 0.0700000000000003 0.0700000000000003 0.0 136
+137 0.0330600738525391 0.0300000000000011 0.0300000000000011 0.0 137
+138 0.0359530448913574 0.0399999999999991 0.0399999999999991 0.0 138
+139 0.0330100059509277 0.0300000000000011 0.0300000000000011 0.0 139
+140 0.0330448150634766 0.0399999999999991 0.0399999999999991 0.0 140
+141 0.0330119132995605 0.0300000000000011 0.0300000000000011 0.0 141
+142 0.0321979522705078 0.0300000000000011 0.0300000000000011 0.0 142
+143 0.0314090251922607 0.029999999999994 0.029999999999994 0.0 143
+144 0.0762948989868164 0.0800000000000054 0.0800000000000054 0.0 144
+145 0.0330369472503662 0.0300000000000011 0.0300000000000011 0.0 145
+146 0.0413818359375 0.0399999999999991 0.0399999999999991 0.0 146
+147 0.0336639881134033 0.0399999999999991 0.0399999999999991 0.0 147
+148 0.032634973526001 0.0300000000000011 0.0300000000000011 0.0 148
+149 0.0324230194091797 0.029999999999994 0.029999999999994 0.0 149
+150 0.0322530269622803 0.0400000000000063 0.0400000000000063 0.0 150
+151 0.0314328670501709 0.029999999999994 0.029999999999994 0.0 151
+152 0.0764839649200439 0.0700000000000003 0.0700000000000003 0.0 152
+153 0.0351881980895996 0.0400000000000063 0.0400000000000063 0.0 153
+154 0.0330648422241211 0.029999999999994 0.029999999999994 0.0 154
+155 0.0328710079193115 0.0399999999999991 0.0399999999999991 0.0 155
+156 0.032764196395874 0.0300000000000011 0.0300000000000011 0.0 156
+157 0.0323169231414795 0.0300000000000011 0.0300000000000011 0.0 157
+158 0.0350921154022217 0.0399999999999991 0.0399999999999991 0.0 158
+159 0.0315439701080322 0.0300000000000011 0.0300000000000011 0.0 159
+160 0.0760791301727295 0.0700000000000003 0.0700000000000003 0.0 160
+161 0.0333390235900879 0.0399999999999991 0.0399999999999991 0.0 161
+162 0.0331790447235107 0.0300000000000011 0.0300000000000011 0.0 162
+163 0.0328421592712402 0.0300000000000011 0.0300000000000011 0.0 163
+164 0.0354018211364746 0.0399999999999991 0.0399999999999991 0.0 164
+165 0.0326108932495117 0.0300000000000011 0.0300000000000011 0.0 165
+166 0.0330290794372559 0.0300000000000011 0.0300000000000011 0.0 166
+167 0.0316469669342041 0.0300000000000011 0.0300000000000011 0.0 167
+168 0.0735650062561035 0.0799999999999983 0.0799999999999983 0.0 168
+169 0.0328128337860107 0.0300000000000011 0.0300000000000011 0.0 169
+170 0.034276008605957 0.0399999999999991 0.0399999999999991 0.0 170
+171 0.0350871086120605 0.0300000000000011 0.0300000000000011 0.0 171
+172 0.0402491092681885 0.0399999999999991 0.0399999999999991 0.0 172
+173 0.033289909362793 0.0300000000000011 0.0300000000000011 0.0 173
+174 0.0319631099700928 0.0399999999999991 0.0399999999999991 0.0 174
+175 0.0314111709594727 0.029999999999994 0.029999999999994 0.0 175
+176 0.0736920833587646 0.0700000000000003 0.0700000000000003 0.0 176
+177 0.0366611480712891 0.0400000000000063 0.0400000000000063 0.0 177
+178 0.0331029891967773 0.029999999999994 0.029999999999994 0.0 178
+179 0.0331480503082275 0.0300000000000011 0.0300000000000011 0.0 179
+180 0.0324270725250244 0.0399999999999991 0.0399999999999991 0.0 180
+181 0.0324950218200684 0.0300000000000011 0.0300000000000011 0.0 181
+182 0.032120943069458 0.0300000000000011 0.0300000000000011 0.0 182
+183 0.0316941738128662 0.0300000000000011 0.0300000000000011 0.0 183
+184 0.0764799118041992 0.0799999999999983 0.0799999999999983 0.0 184
+185 0.0351009368896484 0.0300000000000011 0.0300000000000011 0.0 185
+186 0.0331439971923828 0.0399999999999991 0.0399999999999991 0.0 186
+187 0.0333070755004883 0.0300000000000011 0.0300000000000011 0.0 187
+188 0.0326988697052002 0.0300000000000011 0.0300000000000011 0.0 188
+189 0.0324010848999023 0.0399999999999991 0.0399999999999991 0.0 189
+190 0.0343129634857178 0.0300000000000011 0.0300000000000011 0.0 190
+191 0.0317180156707764 0.0300000000000011 0.0300000000000011 0.0 191
+192 0.0754880905151367 0.0799999999999983 0.0799999999999983 0.0 192
+193 0.0328428745269775 0.0300000000000011 0.0300000000000011 0.0 193
+194 0.0328872203826904 0.029999999999994 0.029999999999994 0.0 194
+195 0.0326900482177734 0.0400000000000063 0.0400000000000063 0.0 195
+196 0.0326938629150391 0.029999999999994 0.029999999999994 0.0 196
+197 0.036156177520752 0.0400000000000063 0.0400000000000063 0.0 197
+198 0.0402121543884277 0.029999999999994 0.029999999999994 0.0 198
+199 0.0345208644866943 0.0400000000000063 0.0400000000000063 0.0 199
+200 0.0736300945281982 0.0699999999999932 0.0699999999999932 0.0 200
+201 0.0329070091247559 0.0400000000000063 0.0400000000000063 0.0 201
+202 0.0329358577728271 0.029999999999994 0.029999999999994 0.0 202
+203 0.0367400646209717 0.0400000000000063 0.0400000000000063 0.0 203
+204 0.0326740741729736 0.029999999999994 0.029999999999994 0.0 204
+205 0.0328309535980225 0.0300000000000011 0.0300000000000011 0.0 205
+206 0.0319180488586426 0.0300000000000011 0.0300000000000011 0.0 206
+207 0.0315039157867432 0.0300000000000011 0.0300000000000011 0.0 207
+208 0.073983907699585 0.0799999999999983 0.0799999999999983 0.0 208
+209 0.0354940891265869 0.0300000000000011 0.0300000000000011 0.0 209
+210 0.0329270362854004 0.0399999999999991 0.0399999999999991 0.0 210
+211 0.0364441871643066 0.0300000000000011 0.0300000000000011 0.0 211
+212 0.0326921939849854 0.0300000000000011 0.0300000000000011 0.0 212
+213 0.0329389572143555 0.0399999999999991 0.0399999999999991 0.0 213
+214 0.0320320129394531 0.0300000000000011 0.0300000000000011 0.0 214
+215 0.0314679145812988 0.0300000000000011 0.0300000000000011 0.0 215
+216 0.0766069889068604 0.0799999999999983 0.0799999999999983 0.0 216
+217 0.0343639850616455 0.0300000000000011 0.0300000000000011 0.0 217
+218 0.0331821441650391 0.0399999999999991 0.0399999999999991 0.0 218
+219 0.0328841209411621 0.0300000000000011 0.0300000000000011 0.0 219
+220 0.0324678421020508 0.029999999999994 0.029999999999994 0.0 220
+221 0.0323128700256348 0.0300000000000011 0.0300000000000011 0.0 221
+222 0.0320940017700195 0.0399999999999991 0.0399999999999991 0.0 222
+223 0.084298849105835 0.0800000000000054 0.0800000000000054 0.0 223
+224 0.0338959693908691 0.0300000000000011 0.0300000000000011 0.0 224
+225 0.0326578617095947 0.0399999999999991 0.0399999999999991 0.0 225
+226 0.0329980850219727 0.029999999999994 0.029999999999994 0.0 226
+227 0.0328388214111328 0.0300000000000011 0.0300000000000011 0.0 227
+228 0.0324342250823975 0.0399999999999991 0.0399999999999991 0.0 228
+229 0.0363619327545166 0.0300000000000011 0.0300000000000011 0.0 229
+230 0.0319449901580811 0.0300000000000011 0.0300000000000011 0.0 230
+231 0.0728111267089844 0.0799999999999983 0.0799999999999983 0.0 231
+232 0.0331339836120605 0.0300000000000011 0.0300000000000011 0.0 232
+233 0.0330288410186768 0.0300000000000011 0.0300000000000011 0.0 233
+234 0.0328319072723389 0.0399999999999991 0.0399999999999991 0.0 234
+235 0.0353119373321533 0.0300000000000011 0.0300000000000011 0.0 235
+236 0.0324058532714844 0.0300000000000011 0.0300000000000011 0.0 236
+237 0.0343661308288574 0.0399999999999991 0.0399999999999991 0.0 237
+238 0.0319287776947021 0.0300000000000011 0.0300000000000011 0.0 238
+239 0.0734179019927979 0.0700000000000003 0.0700000000000003 0.0 239
+240 0.0330750942230225 0.0399999999999991 0.0399999999999991 0.0 240
+241 0.0359859466552734 0.0300000000000011 0.0300000000000011 0.0 241
+242 0.0331950187683105 0.0399999999999991 0.0399999999999991 0.0 242
+243 0.0336649417877197 0.0300000000000011 0.0300000000000011 0.0 243
+244 0.0327489376068115 0.0300000000000011 0.0300000000000011 0.0 244
+245 0.0324509143829346 0.029999999999994 0.029999999999994 0.0 245
+246 0.0315418243408203 0.0399999999999991 0.0399999999999991 0.0 246
+247 0.0725250244140625 0.0700000000000003 0.0700000000000003 0.0 247
+248 0.0361208915710449 0.0300000000000011 0.0300000000000011 0.0 248
+249 0.040661096572876 0.0399999999999991 0.0399999999999991 0.0 249
+250 0.0346300601959229 0.0400000000000063 0.0400000000000063 0.0 250
+251 0.0325310230255127 0.029999999999994 0.029999999999994 0.0 251
+252 0.032663106918335 0.0300000000000011 0.0300000000000011 0.0 252
+253 0.0323901176452637 0.0399999999999991 0.0399999999999991 0.0 253
+254 0.0314888954162598 0.0300000000000011 0.0300000000000011 0.0 254
+255 0.0757758617401123 0.0700000000000003 0.0700000000000003 0.0 255
+256 0.0334639549255371 0.0399999999999991 0.0399999999999991 0.0 256
+257 0.032958984375 0.0300000000000011 0.0300000000000011 0.0 257
+258 0.0329427719116211 0.0300000000000011 0.0300000000000011 0.0 258
+259 0.0325839519500732 0.0399999999999991 0.0399999999999991 0.0 259
+260 0.0327038764953613 0.0300000000000011 0.0300000000000011 0.0 260
+261 0.0347969532012939 0.0300000000000011 0.0300000000000011 0.0 261
+262 0.0313179492950439 0.0399999999999991 0.0399999999999991 0.0 262
+263 0.0764021873474121 0.0700000000000003 0.0700000000000003 0.0 263
+264 0.0333998203277588 0.0300000000000011 0.0300000000000011 0.0 264
+265 0.0331900119781494 0.0399999999999991 0.0399999999999991 0.0 265
+266 0.0328788757324219 0.0300000000000011 0.0300000000000011 0.0 266
+267 0.0352470874786377 0.0399999999999991 0.0399999999999991 0.0 267
+268 0.0326640605926514 0.0300000000000011 0.0300000000000011 0.0 268
+269 0.0323259830474854 0.029999999999994 0.029999999999994 0.0 269
+270 0.0321478843688965 0.0300000000000011 0.0300000000000011 0.0 270
+271 0.0730900764465332 0.0799999999999983 0.0799999999999983 0.0 271
+272 0.032844066619873 0.0300000000000011 0.0300000000000011 0.0 272
+273 0.0331649780273438 0.0300000000000011 0.0300000000000011 0.0 273
+274 0.0364649295806885 0.0399999999999991 0.0399999999999991 0.0 274
+275 0.0396530628204346 0.0399999999999991 0.0399999999999991 0.0 275
+276 0.0334179401397705 0.0300000000000011 0.0300000000000011 0.0 276
+277 0.0320639610290527 0.0300000000000011 0.0300000000000011 0.0 277
+278 0.0313940048217773 0.0399999999999991 0.0399999999999991 0.0 278
+279 0.0731561183929443 0.0700000000000003 0.0700000000000003 0.0 279
+280 0.0364029407501221 0.0399999999999991 0.0399999999999991 0.0 280
+281 0.0330798625946045 0.0300000000000011 0.0300000000000011 0.0 281
+282 0.0338191986083984 0.0300000000000011 0.0300000000000011 0.0 282
+283 0.0326099395751953 0.0399999999999991 0.0399999999999991 0.0 283
+284 0.0324950218200684 0.0300000000000011 0.0300000000000011 0.0 284
+285 0.0321521759033203 0.0300000000000011 0.0300000000000011 0.0 285
+286 0.0321328639984131 0.0300000000000011 0.0300000000000011 0.0 286
+287 0.0761940479278564 0.0799999999999983 0.0799999999999983 0.0 287
+288 0.0365800857543945 0.0300000000000011 0.0300000000000011 0.0 288
+289 0.0353879928588867 0.0399999999999991 0.0399999999999991 0.0 289
+290 0.0333998203277588 0.0300000000000011 0.0300000000000011 0.0 290
+291 0.0328271389007568 0.029999999999994 0.029999999999994 0.0 291
+292 0.0326738357543945 0.0400000000000063 0.0400000000000063 0.0 292
+293 0.0339128971099854 0.029999999999994 0.029999999999994 0.0 293
+294 0.0325300693511963 0.0300000000000011 0.0300000000000011 0.0 294
+295 0.0739338397979736 0.0800000000000054 0.0800000000000054 0.0 295
+296 0.0328948497772217 0.029999999999994 0.029999999999994 0.0 296
+297 0.0328888893127441 0.0300000000000011 0.0300000000000011 0.0 297
+298 0.0327708721160889 0.0399999999999991 0.0399999999999991 0.0 298
+299 0.0325500965118408 0.0300000000000011 0.0300000000000011 0.0 299
+300 0.0354809761047363 0.0300000000000011 0.0300000000000011 0.0 300
+301 0.0396809577941895 0.0399999999999991 0.0399999999999991 0.0 301
+302 0.0334930419921875 0.0399999999999991 0.0399999999999991 0.0 302
+303 0.0734050273895264 0.0700000000000003 0.0700000000000003 0.0 303
+304 0.0328478813171387 0.0300000000000011 0.0300000000000011 0.0 304
+305 0.0329740047454834 0.0399999999999991 0.0399999999999991 0.0 305
+306 0.0364749431610107 0.0300000000000011 0.0300000000000011 0.0 306
+307 0.0326058864593506 0.0300000000000011 0.0300000000000011 0.0 307
+308 0.0327680110931396 0.0399999999999991 0.0399999999999991 0.0 308
+309 0.0319027900695801 0.0300000000000011 0.0300000000000011 0.0 309
+310 0.0315032005310059 0.0300000000000011 0.0300000000000011 0.0 310
+311 0.073652982711792 0.0700000000000003 0.0700000000000003 0.0 311
+312 0.0356411933898926 0.0399999999999991 0.0399999999999991 0.0 312
+313 0.0330371856689453 0.0300000000000011 0.0300000000000011 0.0 313
+314 0.0342891216278076 0.0399999999999991 0.0399999999999991 0.0 314
+315 0.0345110893249512 0.0300000000000011 0.0300000000000011 0.0 315
+316 0.032926082611084 0.029999999999994 0.029999999999994 0.0 316
+317 0.031851053237915 0.0399999999999991 0.0399999999999991 0.0 317
+318 0.0316848754882812 0.0300000000000011 0.0300000000000011 0.0 318
+319 0.0761759281158447 0.0700000000000003 0.0700000000000003 0.0 319
+320 0.0328528881072998 0.0399999999999991 0.0399999999999991 0.0 320
+321 0.0334789752960205 0.0300000000000011 0.0300000000000011 0.0 321
+322 0.0328638553619385 0.0300000000000011 0.0300000000000011 0.0 322
+323 0.0323901176452637 0.0399999999999991 0.0399999999999991 0.0 323
+324 0.0323100090026855 0.0300000000000011 0.0300000000000011 0.0 324
+325 0.0324501991271973 0.0300000000000011 0.0300000000000011 0.0 325
+326 0.0336298942565918 0.0300000000000011 0.0300000000000011 0.0 326
+327 0.0810260772705078 0.0899999999999963 0.0899999999999963 0.0 327
+328 0.0327072143554688 0.0300000000000011 0.0300000000000011 0.0 328
+329 0.0328741073608398 0.0300000000000011 0.0300000000000011 0.0 329
+330 0.0328249931335449 0.0300000000000011 0.0300000000000011 0.0 330
+331 0.0325191020965576 0.0399999999999991 0.0399999999999991 0.0 331
+332 0.0351779460906982 0.0300000000000011 0.0300000000000011 0.0 332
+333 0.0318300724029541 0.0300000000000011 0.0300000000000011 0.0 333
+334 0.075192928314209 0.0799999999999983 0.0799999999999983 0.0 334
+335 0.0331308841705322 0.0300000000000011 0.0300000000000011 0.0 335
+336 0.0328052043914795 0.029999999999994 0.029999999999994 0.0 336
+337 0.0331370830535889 0.0400000000000063 0.0400000000000063 0.0 337
+338 0.0356910228729248 0.029999999999994 0.029999999999994 0.0 338
+339 0.0324921607971191 0.0400000000000063 0.0400000000000063 0.0 339
+340 0.0324490070343018 0.029999999999994 0.029999999999994 0.0 340
+341 0.0341949462890625 0.0300000000000011 0.0300000000000011 0.0 341
+342 0.0734210014343262 0.0799999999999983 0.0799999999999983 0.0 342
+343 0.0332908630371094 0.0300000000000011 0.0300000000000011 0.0 343
+344 0.0332479476928711 0.0300000000000011 0.0300000000000011 0.0 344
+345 0.0360391139984131 0.0399999999999991 0.0399999999999991 0.0 345
+346 0.0328700542449951 0.0300000000000011 0.0300000000000011 0.0 346
+347 0.0346879959106445 0.0399999999999991 0.0399999999999991 0.0 347
+348 0.0322730541229248 0.0300000000000011 0.0300000000000011 0.0 348
+349 0.0316729545593262 0.0300000000000011 0.0300000000000011 0.0 349
+350 0.0730090141296387 0.0700000000000003 0.0700000000000003 0.0 350
+351 0.0364499092102051 0.0399999999999991 0.0399999999999991 0.0 351
+352 0.0416209697723389 0.0399999999999991 0.0399999999999991 0.0 352
+353 0.0340771675109863 0.0399999999999991 0.0399999999999991 0.0 353
+354 0.0326759815216064 0.0300000000000011 0.0300000000000011 0.0 354
+355 0.0324649810791016 0.0300000000000011 0.0300000000000011 0.0 355
+356 0.032310962677002 0.0300000000000011 0.0300000000000011 0.0 356
+357 0.0313961505889893 0.0300000000000011 0.0300000000000011 0.0 357
+358 0.0751090049743652 0.0799999999999983 0.0799999999999983 0.0 358
+359 0.0351879596710205 0.0399999999999991 0.0399999999999991 0.0 359
+360 0.0331299304962158 0.0300000000000011 0.0300000000000011 0.0 360
+361 0.0328550338745117 0.0300000000000011 0.0300000000000011 0.0 361
+362 0.0325639247894287 0.029999999999994 0.029999999999994 0.0 362
+363 0.0325849056243896 0.0400000000000063 0.0400000000000063 0.0 363
+364 0.0344219207763672 0.029999999999994 0.029999999999994 0.0 364
+365 0.0323021411895752 0.0300000000000011 0.0300000000000011 0.0 365
+366 0.0760447978973389 0.0800000000000054 0.0800000000000054 0.0 366
+367 0.0335848331451416 0.029999999999994 0.029999999999994 0.0 367
+368 0.0331020355224609 0.0399999999999991 0.0399999999999991 0.0 368
+369 0.0329232215881348 0.0300000000000011 0.0300000000000011 0.0 369
+370 0.0328400135040283 0.0300000000000011 0.0300000000000011 0.0 370
+371 0.0363020896911621 0.0399999999999991 0.0399999999999991 0.0 371
+372 0.0322511196136475 0.0300000000000011 0.0300000000000011 0.0 372
+373 0.0333948135375977 0.0300000000000011 0.0300000000000011 0.0 373
+374 0.0732510089874268 0.0799999999999983 0.0799999999999983 0.0 374
+375 0.032930850982666 0.0300000000000011 0.0300000000000011 0.0 375
+376 0.0330500602722168 0.0300000000000011 0.0300000000000011 0.0 376
+377 0.0361061096191406 0.0399999999999991 0.0399999999999991 0.0 377
+378 0.0395760536193848 0.0399999999999991 0.0399999999999991 0.0 378
+379 0.0334169864654541 0.0300000000000011 0.0300000000000011 0.0 379
+380 0.0320568084716797 0.0300000000000011 0.0300000000000011 0.0 380
+381 0.0315189361572266 0.0399999999999991 0.0399999999999991 0.0 381
+382 0.0733020305633545 0.0700000000000003 0.0700000000000003 0.0 382
+383 0.0355980396270752 0.0399999999999991 0.0399999999999991 0.0 383
+384 0.0331339836120605 0.0300000000000011 0.0300000000000011 0.0 384
+385 0.0331411361694336 0.0300000000000011 0.0300000000000011 0.0 385
+386 0.0324721336364746 0.0300000000000011 0.0300000000000011 0.0 386
+387 0.0324320793151855 0.0399999999999991 0.0399999999999991 0.0 387
+388 0.0321850776672363 0.029999999999994 0.029999999999994 0.0 388
+389 0.0315890312194824 0.0300000000000011 0.0300000000000011 0.0 389
+390 0.0761289596557617 0.0800000000000054 0.0800000000000054 0.0 390
+391 0.033301830291748 0.029999999999994 0.029999999999994 0.0 391
+392 0.035081148147583 0.0300000000000011 0.0300000000000011 0.0 392
+393 0.0335009098052979 0.0399999999999991 0.0399999999999991 0.0 393
+394 0.0326759815216064 0.0300000000000011 0.0300000000000011 0.0 394
+395 0.0327270030975342 0.0300000000000011 0.0300000000000011 0.0 395
+396 0.0323770046234131 0.0399999999999991 0.0399999999999991 0.0 396
+397 0.0347421169281006 0.0300000000000011 0.0300000000000011 0.0 397
+398 0.0752899646759033 0.0799999999999983 0.0799999999999983 0.0 398
+399 0.0327789783477783 0.0300000000000011 0.0300000000000011 0.0 399
+400 0.032951831817627 0.0300000000000011 0.0300000000000011 0.0 400
+401 0.03273606300354 0.0300000000000011 0.0300000000000011 0.0 401
+402 0.0324621200561523 0.0399999999999991 0.0399999999999991 0.0 402
+403 0.0350461006164551 0.0300000000000011 0.0300000000000011 0.0 403
+404 0.0376379489898682 0.0399999999999991 0.0399999999999991 0.0 404
+405 0.0354411602020264 0.0300000000000011 0.0300000000000011 0.0 405
+406 0.0734958648681641 0.0799999999999983 0.0799999999999983 0.0 406
+407 0.0329210758209229 0.0300000000000011 0.0300000000000011 0.0 407
+408 0.0329289436340332 0.0300000000000011 0.0300000000000011 0.0 408
+409 0.0354850292205811 0.0399999999999991 0.0399999999999991 0.0 409
+410 0.0325729846954346 0.0300000000000011 0.0300000000000011 0.0 410
+411 0.0327589511871338 0.0399999999999991 0.0399999999999991 0.0 411
+412 0.0319170951843262 0.0300000000000011 0.0300000000000011 0.0 412
+413 0.031519889831543 0.029999999999994 0.029999999999994 0.0 413
+414 0.0742340087890625 0.0700000000000003 0.0700000000000003 0.0 414
+415 0.0346739292144775 0.0399999999999991 0.0399999999999991 0.0 415
+416 0.0351288318634033 0.0300000000000011 0.0300000000000011 0.0 416
+417 0.0329630374908447 0.0399999999999991 0.0399999999999991 0.0 417
+418 0.0367558002471924 0.0300000000000011 0.0300000000000011 0.0 418
+419 0.0328981876373291 0.0300000000000011 0.0300000000000011 0.0 419
+420 0.0320210456848145 0.0399999999999991 0.0399999999999991 0.0 420
+421 0.031790018081665 0.0300000000000011 0.0300000000000011 0.0 421
+422 0.0784010887145996 0.0799999999999983 0.0799999999999983 0.0 422
+423 0.0330309867858887 0.0300000000000011 0.0300000000000011 0.0 423
+424 0.0335760116577148 0.0300000000000011 0.0300000000000011 0.0 424
+425 0.0327050685882568 0.0399999999999991 0.0399999999999991 0.0 425
+426 0.0326788425445557 0.0300000000000011 0.0300000000000011 0.0 426
+427 0.032289981842041 0.0300000000000011 0.0300000000000011 0.0 427
+428 0.0317809581756592 0.0300000000000011 0.0300000000000011 0.0 428
+429 0.0816869735717773 0.0899999999999963 0.0899999999999963 0.0 429
+430 0.035430908203125 0.0300000000000011 0.0300000000000011 0.0 430
+431 0.0327348709106445 0.0300000000000011 0.0300000000000011 0.0 431
+432 0.0328209400177002 0.0399999999999991 0.0399999999999991 0.0 432
+433 0.0328578948974609 0.0300000000000011 0.0300000000000011 0.0 433
+434 0.0324020385742188 0.0300000000000011 0.0300000000000011 0.0 434
+435 0.0351409912109375 0.0399999999999991 0.0399999999999991 0.0 435
+436 0.0321168899536133 0.0300000000000011 0.0300000000000011 0.0 436
+437 0.0726029872894287 0.0700000000000003 0.0700000000000003 0.0 437
+438 0.0331008434295654 0.029999999999994 0.029999999999994 0.0 438
+439 0.0328960418701172 0.0399999999999991 0.0399999999999991 0.0 439
+440 0.0328078269958496 0.0300000000000011 0.0300000000000011 0.0 440
+441 0.0326459407806396 0.0300000000000011 0.0300000000000011 0.0 441
+442 0.0361838340759277 0.0399999999999991 0.0399999999999991 0.0 442
+443 0.0322508811950684 0.0300000000000011 0.0300000000000011 0.0 443
+444 0.0355379581451416 0.0399999999999991 0.0399999999999991 0.0 444
+445 0.0736260414123535 0.0700000000000003 0.0700000000000003 0.0 445
+446 0.0333738327026367 0.0300000000000011 0.0300000000000011 0.0 446
+447 0.0333800315856934 0.0399999999999991 0.0399999999999991 0.0 447
+448 0.0369861125946045 0.0300000000000011 0.0300000000000011 0.0 448
+449 0.033034086227417 0.0399999999999991 0.0399999999999991 0.0 449
+450 0.034984827041626 0.0300000000000011 0.0300000000000011 0.0 450
+451 0.0323779582977295 0.0300000000000011 0.0300000000000011 0.0 451
+452 0.0319168567657471 0.0399999999999991 0.0399999999999991 0.0 452
+453 0.0730609893798828 0.0700000000000003 0.0700000000000003 0.0 453
+454 0.0357108116149902 0.0399999999999991 0.0399999999999991 0.0 454
+455 0.0403239727020264 0.0399999999999991 0.0399999999999991 0.0 455
+456 0.033923864364624 0.0300000000000011 0.0300000000000011 0.0 456
+457 0.0325479507446289 0.0300000000000011 0.0300000000000011 0.0 457
+458 0.0323481559753418 0.0300000000000011 0.0300000000000011 0.0 458
+459 0.0323350429534912 0.0399999999999991 0.0399999999999991 0.0 459
+460 0.0314900875091553 0.0300000000000011 0.0300000000000011 0.0 460
+461 0.075538158416748 0.0700000000000003 0.0700000000000003 0.0 461
+462 0.0340449810028076 0.0399999999999991 0.0399999999999991 0.0 462
+463 0.0331201553344727 0.0300000000000011 0.0300000000000011 0.0 463
+464 0.0330970287322998 0.029999999999994 0.029999999999994 0.0 464
+465 0.0326929092407227 0.0399999999999991 0.0399999999999991 0.0 465
+466 0.0326869487762451 0.0300000000000011 0.0300000000000011 0.0 466
+467 0.0325558185577393 0.0300000000000011 0.0300000000000011 0.0 467
+468 0.0355589389801025 0.0399999999999991 0.0399999999999991 0.0 468
+469 0.0771338939666748 0.0700000000000003 0.0700000000000003 0.0 469
+470 0.0334289073944092 0.0399999999999991 0.0399999999999991 0.0 470
+471 0.0330390930175781 0.0300000000000011 0.0300000000000011 0.0 471
+472 0.0329241752624512 0.0300000000000011 0.0300000000000011 0.0 472
+473 0.0327908992767334 0.0399999999999991 0.0399999999999991 0.0 473
+474 0.0363669395446777 0.0300000000000011 0.0300000000000011 0.0 474
+475 0.0322010517120361 0.0300000000000011 0.0300000000000011 0.0 475
+476 0.0328471660614014 0.0399999999999991 0.0399999999999991 0.0 476
+477 0.0735671520233154 0.0700000000000003 0.0700000000000003 0.0 477
+478 0.0327999591827393 0.0300000000000011 0.0300000000000011 0.0 478
+479 0.0329790115356445 0.0399999999999991 0.0399999999999991 0.0 479
+480 0.0350720882415771 0.0300000000000011 0.0300000000000011 0.0 480
+481 0.0392179489135742 0.0399999999999991 0.0399999999999991 0.0 481
+482 0.0342378616333008 0.0399999999999991 0.0399999999999991 0.0 482
+483 0.0319888591766357 0.0300000000000011 0.0300000000000011 0.0 483
+484 0.0314619541168213 0.0300000000000011 0.0300000000000011 0.0 484
+485 0.0736970901489258 0.0700000000000003 0.0700000000000003 0.0 485
+486 0.0357317924499512 0.0399999999999991 0.0399999999999991 0.0 486
+487 0.0331878662109375 0.0300000000000011 0.0300000000000011 0.0 487
+488 0.033804178237915 0.0399999999999991 0.0399999999999991 0.0 488
+489 0.0325119495391846 0.0300000000000011 0.0300000000000011 0.0 489
+490 0.0325300693511963 0.029999999999994 0.029999999999994 0.0 490
+491 0.0321159362792969 0.0300000000000011 0.0300000000000011 0.0 491
+492 0.0320580005645752 0.0399999999999991 0.0399999999999991 0.0 492
+493 0.075861930847168 0.0700000000000003 0.0700000000000003 0.0 493
+494 0.033599853515625 0.0399999999999991 0.0399999999999991 0.0 494
+495 0.0367560386657715 0.0300000000000011 0.0300000000000011 0.0 495
+496 0.0333199501037598 0.0300000000000011 0.0300000000000011 0.0 496
+497 0.0325191020965576 0.0399999999999991 0.0399999999999991 0.0 497
+498 0.0327298641204834 0.0300000000000011 0.0300000000000011 0.0 498
+499 0.0322799682617188 0.0300000000000011 0.0300000000000011 0.0 499
+500 0.0348708629608154 0.0399999999999991 0.0399999999999991 0.0 500
+501 0.0749578475952148 0.0700000000000003 0.0700000000000003 0.0 501
+502 0.0332460403442383 0.0399999999999991 0.0399999999999991 0.0 502
+503 0.0331079959869385 0.0300000000000011 0.0300000000000011 0.0 503
+504 0.0328578948974609 0.0300000000000011 0.0300000000000011 0.0 504
+505 0.032494068145752 0.0300000000000011 0.0300000000000011 0.0 505
+506 0.0351459980010986 0.0399999999999991 0.0399999999999991 0.0 506
+507 0.0394799709320068 0.0500000000000043 0.0399999999999991 0.01 507
+508 0.0342020988464355 0.0300000000000011 0.0300000000000011 0.0 508
+509 0.0742120742797852 0.0799999999999983 0.0799999999999983 0.0 509
+510 0.0330269336700439 0.0300000000000011 0.0300000000000011 0.0 510
+511 0.032991886138916 0.0300000000000011 0.0300000000000011 0.0 511
+512 0.0354578495025635 0.0399999999999991 0.0399999999999991 0.0 512
+513 0.0327198505401611 0.0300000000000011 0.0300000000000011 0.0 513
+514 0.0336050987243652 0.029999999999994 0.029999999999994 0.0 514
+515 0.0318880081176758 0.0400000000000063 0.0400000000000063 0.0 515
+516 0.0725610256195068 0.0699999999999932 0.0699999999999932 0.0 516
+517 0.0332450866699219 0.0300000000000011 0.0300000000000011 0.0 517
+518 0.0342578887939453 0.0399999999999991 0.0399999999999991 0.0 518
+519 0.035430908203125 0.0300000000000011 0.0300000000000011 0.0 519
+520 0.032912015914917 0.0399999999999991 0.0399999999999991 0.0 520
+521 0.0366041660308838 0.0300000000000011 0.0300000000000011 0.0 521
+522 0.0328991413116455 0.0300000000000011 0.0300000000000011 0.0 522
+523 0.0319130420684814 0.0399999999999991 0.0399999999999991 0.0 523
+524 0.07318115234375 0.0700000000000003 0.0700000000000003 0.0 524
+525 0.0363700389862061 0.0399999999999991 0.0399999999999991 0.0 525
+526 0.033411979675293 0.0300000000000011 0.0300000000000011 0.0 526
+527 0.0364720821380615 0.0399999999999991 0.0399999999999991 0.0 527
+528 0.0327281951904297 0.0300000000000011 0.0300000000000011 0.0 528
+529 0.0325851440429688 0.0300000000000011 0.0300000000000011 0.0 529
+530 0.0322520732879639 0.0300000000000011 0.0300000000000011 0.0 530
+531 0.0316128730773926 0.0399999999999991 0.0399999999999991 0.0 531
+532 0.0813291072845459 0.0799999999999983 0.0799999999999983 0.0 532
+533 0.0356478691101074 0.0300000000000011 0.0300000000000011 0.0 533
+534 0.0330061912536621 0.0300000000000011 0.0300000000000011 0.0 534
+535 0.0327270030975342 0.0399999999999991 0.0399999999999991 0.0 535
+536 0.032696008682251 0.0300000000000011 0.0300000000000011 0.0 536
+537 0.032243013381958 0.0300000000000011 0.0300000000000011 0.0 537
+538 0.0348541736602783 0.0399999999999991 0.0399999999999991 0.0 538
+539 0.031674861907959 0.0300000000000011 0.0300000000000011 0.0 539
+540 0.0754058361053467 0.0700000000000003 0.0700000000000003 0.0 540
+541 0.0328490734100342 0.0399999999999991 0.0399999999999991 0.0 541
+542 0.0332391262054443 0.029999999999994 0.029999999999994 0.0 542
+543 0.0331962108612061 0.0300000000000011 0.0300000000000011 0.0 543
+544 0.0350210666656494 0.0399999999999991 0.0399999999999991 0.0 544
+545 0.0324161052703857 0.0300000000000011 0.0300000000000011 0.0 545
+546 0.031865119934082 0.0300000000000011 0.0300000000000011 0.0 546
+547 0.0355000495910645 0.0399999999999991 0.0399999999999991 0.0 547
+548 0.0733621120452881 0.0700000000000003 0.0700000000000003 0.0 548
+549 0.0331029891967773 0.0300000000000011 0.0300000000000011 0.0 549
+550 0.0332908630371094 0.0399999999999991 0.0399999999999991 0.0 550
+551 0.0365278720855713 0.0300000000000011 0.0300000000000011 0.0 551
+552 0.0326669216156006 0.0399999999999991 0.0399999999999991 0.0 552
+553 0.0345711708068848 0.0300000000000011 0.0300000000000011 0.0 553
+554 0.0320999622344971 0.0300000000000011 0.0300000000000011 0.0 554
+555 0.0315120220184326 0.0300000000000011 0.0300000000000011 0.0 555
+556 0.0733709335327148 0.0700000000000003 0.0700000000000003 0.0 556
+557 0.0357170104980469 0.0300000000000011 0.0300000000000011 0.0 557
+558 0.0411560535430908 0.0399999999999991 0.0399999999999991 0.0 558
+559 0.0337309837341309 0.0399999999999991 0.0399999999999991 0.0 559
+560 0.0325090885162354 0.0300000000000011 0.0300000000000011 0.0 560
+561 0.0326089859008789 0.0300000000000011 0.0300000000000011 0.0 561
+562 0.032412052154541 0.029999999999994 0.029999999999994 0.0 562
+563 0.0314450263977051 0.0300000000000011 0.0300000000000011 0.0 563
+564 0.0781939029693604 0.0700000000000003 0.0700000000000003 0.0 564
+565 0.0359461307525635 0.0399999999999991 0.0399999999999991 0.0 565
+566 0.0339870452880859 0.0300000000000011 0.0300000000000011 0.0 566
+567 0.0329389572143555 0.0399999999999991 0.0399999999999991 0.0 567
+568 0.0336530208587646 0.029999999999994 0.029999999999994 0.0 568
+569 0.0326399803161621 0.0300000000000011 0.0300000000000011 0.0 569
+570 0.0351450443267822 0.0399999999999991 0.0399999999999991 0.0 570
+571 0.0314168930053711 0.0300000000000011 0.0300000000000011 0.0 571
+572 0.0775408744812012 0.0800000000000054 0.0800000000000054 0.0 572
+573 0.032926082611084 0.029999999999994 0.029999999999994 0.0 573
+574 0.0330569744110107 0.0300000000000011 0.0300000000000011 0.0 574
+575 0.0329349040985107 0.0300000000000011 0.0300000000000011 0.0 575
+576 0.0327939987182617 0.0399999999999991 0.0399999999999991 0.0 576
+577 0.035599946975708 0.0300000000000011 0.0300000000000011 0.0 577
+578 0.0321230888366699 0.0399999999999991 0.0399999999999991 0.0 578
+579 0.0320999622344971 0.0300000000000011 0.0300000000000011 0.0 579
+580 0.0739450454711914 0.0700000000000003 0.0700000000000003 0.0 580
+581 0.0332319736480713 0.0300000000000011 0.0300000000000011 0.0 581
+582 0.0331840515136719 0.0300000000000011 0.0300000000000011 0.0 582
+583 0.0358431339263916 0.0300000000000011 0.0300000000000011 0.0 583
+584 0.0413031578063965 0.0499999999999972 0.0499999999999972 0.0 584
+585 0.0345101356506348 0.0300000000000011 0.0300000000000011 0.0 585
+586 0.0317580699920654 0.0300000000000011 0.0300000000000011 0.0 586
+587 0.0729880332946777 0.0799999999999983 0.0799999999999983 0.0 587
+588 0.0332069396972656 0.0300000000000011 0.0300000000000011 0.0 588
+589 0.036264181137085 0.0300000000000011 0.0300000000000011 0.0 589
+590 0.0331530570983887 0.0399999999999991 0.0399999999999991 0.0 590
+591 0.0343399047851562 0.0300000000000011 0.0300000000000011 0.0 591
+592 0.0326418876647949 0.0300000000000011 0.0300000000000011 0.0 592
+593 0.0326697826385498 0.0300000000000011 0.0300000000000011 0.0 593
+594 0.0320968627929688 0.0299999999999869 0.029999999999994 0.0 594
+595 0.0752952098846436 0.0800000000000125 0.0800000000000054 0.0 595
+596 0.0330331325531006 0.0299999999999869 0.029999999999994 0.0 596
+597 0.0343711376190186 0.0300000000000011 0.0300000000000011 0.0 597
+598 0.035207986831665 0.0400000000000063 0.0400000000000063 0.0 598
+599 0.0326581001281738 0.0300000000000011 0.0300000000000011 0.0 599
+600 0.0325701236724854 0.0300000000000011 0.0300000000000011 0.0 600
+601 0.0330169200897217 0.039999999999992 0.039999999999992 0.0 601
+602 0.0319371223449707 0.0300000000000011 0.0300000000000011 0.0 602
+603 0.0774281024932861 0.0799999999999983 0.0799999999999983 0.0 603
+604 0.033113956451416 0.0300000000000011 0.0300000000000011 0.0 604
+605 0.0331709384918213 0.0300000000000011 0.0300000000000011 0.0 605
+606 0.0327689647674561 0.0300000000000011 0.0300000000000011 0.0 606
+607 0.0324411392211914 0.0400000000000063 0.0400000000000063 0.0 607
+608 0.0325808525085449 0.0299999999999869 0.0299999999999869 0.0 608
+609 0.0360062122344971 0.0400000000000063 0.0400000000000063 0.0 609
+610 0.041234016418457 0.0400000000000063 0.0400000000000063 0.0 610
+611 0.0736250877380371 0.0699999999999932 0.0699999999999932 0.0 611
+612 0.0329921245574951 0.0300000000000011 0.0300000000000011 0.0 612
+613 0.0332169532775879 0.0400000000000063 0.0400000000000063 0.0 613
+614 0.0327460765838623 0.0299999999999869 0.0299999999999869 0.0 614
+615 0.0364718437194824 0.0400000000000063 0.0400000000000063 0.0 615
+616 0.0324280261993408 0.0300000000000011 0.0300000000000011 0.0 616
+617 0.0323798656463623 0.0300000000000011 0.0300000000000011 0.0 617
+618 0.031386137008667 0.0300000000000011 0.0300000000000011 0.0 618
+619 0.0726630687713623 0.0799999999999983 0.0799999999999983 0.0 619
+620 0.0328989028930664 0.0300000000000011 0.0300000000000011 0.0 620
+621 0.0358729362487793 0.0300000000000011 0.0300000000000011 0.0 621
+622 0.0327029228210449 0.039999999999992 0.039999999999992 0.0 622
+623 0.0342001914978027 0.0300000000000011 0.0300000000000011 0.0 623
+624 0.0347521305084229 0.0400000000000063 0.0400000000000063 0.0 624
+625 0.0318779945373535 0.0300000000000011 0.0300000000000011 0.0 625
+626 0.0316078662872314 0.0300000000000011 0.0300000000000011 0.0 626
+627 0.0768020153045654 0.0699999999999932 0.0699999999999932 0.0 627
+628 0.0332560539245605 0.0400000000000063 0.0400000000000063 0.0 628
+629 0.0345439910888672 0.0300000000000011 0.0300000000000011 0.0 629
+630 0.033174991607666 0.039999999999992 0.039999999999992 0.0 630
+631 0.0327689647674561 0.0300000000000011 0.0300000000000011 0.0 631
+632 0.0324020385742188 0.0300000000000011 0.0300000000000011 0.0 632
+633 0.0320298671722412 0.0300000000000011 0.0300000000000011 0.0 633
+634 0.0313320159912109 0.0300000000000011 0.0300000000000011 0.0 634
+635 0.0831730365753174 0.0900000000000034 0.0900000000000034 0.0 635
+636 0.0344598293304443 0.0299999999999869 0.0299999999999869 0.0 636
+637 0.0330190658569336 0.0400000000000063 0.0400000000000063 0.0 637
+638 0.033113956451416 0.0300000000000011 0.0300000000000011 0.0 638
+639 0.032689094543457 0.0300000000000011 0.0300000000000011 0.0 639
+640 0.0323820114135742 0.0300000000000011 0.0300000000000011 0.0 640
+641 0.034714937210083 0.039999999999992 0.039999999999992 0.0 641
+642 0.0318310260772705 0.0300000000000011 0.0300000000000011 0.0 642
+643 0.0750701427459717 0.0700000000000074 0.0700000000000074 0.0 643
+644 0.0330171585083008 0.039999999999992 0.039999999999992 0.0 644
+645 0.0331709384918213 0.0300000000000011 0.0300000000000011 0.0 645
+646 0.0328099727630615 0.0300000000000011 0.0300000000000011 0.0 646
+647 0.0354018211364746 0.0400000000000063 0.0400000000000063 0.0 647
+648 0.0324749946594238 0.0300000000000011 0.0300000000000011 0.0 648
+649 0.0331239700317383 0.0300000000000011 0.0300000000000011 0.0 649
+650 0.0337600708007812 0.039999999999992 0.039999999999992 0.0 650
+651 0.0735490322113037 0.0700000000000074 0.0700000000000074 0.0 651
+652 0.0332188606262207 0.0300000000000011 0.0300000000000011 0.0 652
+653 0.0344240665435791 0.039999999999992 0.039999999999992 0.0 653
+654 0.0346159934997559 0.0300000000000011 0.0300000000000011 0.0 654
+655 0.0326159000396729 0.0400000000000063 0.0400000000000063 0.0 655
+656 0.0342769622802734 0.0299999999999869 0.0299999999999869 0.0 656
+657 0.0318350791931152 0.0300000000000011 0.0300000000000011 0.0 657
+658 0.0315489768981934 0.0300000000000011 0.0300000000000011 0.0 658
+659 0.0741128921508789 0.0799999999999983 0.0799999999999983 0.0 659
+660 0.0384690761566162 0.0400000000000063 0.0400000000000063 0.0 660
+661 0.0412099361419678 0.0400000000000063 0.0400000000000063 0.0 661
+662 0.0339169502258301 0.0299999999999869 0.0299999999999869 0.0 662
+663 0.0325090885162354 0.0300000000000011 0.0300000000000011 0.0 663
+664 0.0323750972747803 0.0400000000000063 0.0400000000000063 0.0 664
+665 0.0319221019744873 0.0300000000000011 0.0300000000000011 0.0 665
+666 0.0757949352264404 0.0699999999999932 0.0699999999999932 0.0 666
+667 0.0332348346710205 0.0400000000000063 0.0400000000000063 0.0 667
+668 0.0343492031097412 0.0300000000000011 0.0300000000000011 0.0 668
+669 0.0330471992492676 0.0300000000000011 0.0300000000000011 0.0 669
+670 0.0328240394592285 0.039999999999992 0.039999999999992 0.0 670
+671 0.0326519012451172 0.0300000000000011 0.0300000000000011 0.0 671
+672 0.0323309898376465 0.0300000000000011 0.0300000000000011 0.0 672
+673 0.0348069667816162 0.0400000000000063 0.0400000000000063 0.0 673
+674 0.0734519958496094 0.0699999999999932 0.0699999999999932 0.0 674
+675 0.0358669757843018 0.0400000000000063 0.0400000000000063 0.0 675
+676 0.0329530239105225 0.0300000000000011 0.0300000000000011 0.0 676
+677 0.033228874206543 0.0300000000000011 0.0300000000000011 0.0 677
+678 0.0329709053039551 0.039999999999992 0.039999999999992 0.0 678
+679 0.0349721908569336 0.0300000000000011 0.0300000000000011 0.0 679
+680 0.0329270362854004 0.0300000000000011 0.0300000000000011 0.0 680
+681 0.0317440032958984 0.0400000000000063 0.0400000000000063 0.0 681
+682 0.0737960338592529 0.0699999999999932 0.0699999999999932 0.0 682
+683 0.0329961776733398 0.0300000000000011 0.0300000000000011 0.0 683
+684 0.0329370498657227 0.0400000000000063 0.0400000000000063 0.0 684
+685 0.033027172088623 0.0299999999999869 0.0299999999999869 0.0 685
+686 0.0384509563446045 0.0400000000000063 0.0400000000000063 0.0 686
+687 0.0391240119934082 0.0400000000000063 0.0400000000000063 0.0 687
+688 0.0333750247955322 0.0299999999999869 0.0299999999999869 0.0 688
+689 0.0313661098480225 0.0300000000000011 0.0300000000000011 0.0 689
+690 0.0728821754455566 0.0700000000000074 0.0700000000000074 0.0 690
+691 0.0328829288482666 0.039999999999992 0.039999999999992 0.0 691
+692 0.0367858409881592 0.0300000000000011 0.0300000000000011 0.0 692
+693 0.032905101776123 0.0400000000000063 0.0400000000000063 0.0 693
+694 0.0336589813232422 0.0300000000000011 0.0300000000000011 0.0 694
+695 0.0322878360748291 0.0300000000000011 0.0300000000000011 0.0 695
+696 0.0319581031799316 0.0300000000000011 0.0300000000000011 0.0 696
+697 0.0315032005310059 0.039999999999992 0.039999999999992 0.0 697
+698 0.0756649971008301 0.0700000000000074 0.0700000000000074 0.0 698
+699 0.0332357883453369 0.039999999999992 0.039999999999992 0.0 699
+700 0.0345721244812012 0.0300000000000011 0.0300000000000011 0.0 700
+701 0.035128116607666 0.0300000000000011 0.0300000000000011 0.0 701
+702 0.0327088832855225 0.0400000000000063 0.0400000000000063 0.0 702
+703 0.032559871673584 0.0300000000000011 0.0300000000000011 0.0 703
+704 0.0327198505401611 0.0300000000000011 0.0300000000000011 0.0 704
+705 0.0315008163452148 0.0299999999999869 0.0299999999999869 0.0 705
+706 0.0784509181976318 0.0800000000000125 0.0800000000000125 0.0 706
+707 0.032890796661377 0.039999999999992 0.039999999999992 0.0 707
+708 0.0331568717956543 0.0300000000000011 0.0300000000000011 0.0 708
+709 0.0327529907226562 0.0300000000000011 0.0300000000000011 0.0 709
+710 0.0325257778167725 0.0300000000000011 0.0300000000000011 0.0 710
+711 0.0323739051818848 0.039999999999992 0.039999999999992 0.0 711
+712 0.0377719402313232 0.0300000000000011 0.0300000000000011 0.0 712
+713 0.0389621257781982 0.0400000000000063 0.0400000000000063 0.0 713
+714 0.0756630897521973 0.0799999999999983 0.0799999999999983 0.0 714
+715 0.0329148769378662 0.0300000000000011 0.0300000000000011 0.0 715
+716 0.0330750942230225 0.0400000000000063 0.0400000000000063 0.0 716
+717 0.0328159332275391 0.0299999999999869 0.0299999999999869 0.0 717
+718 0.0366039276123047 0.0300000000000011 0.0300000000000011 0.0 718
+719 0.032505989074707 0.0400000000000063 0.0400000000000063 0.0 719
+720 0.0332479476928711 0.0300000000000011 0.0300000000000011 0.0 720
+721 0.0314240455627441 0.0300000000000011 0.0300000000000011 0.0 721
+722 0.0737588405609131 0.0799999999999983 0.0799999999999983 0.0 722
+723 0.0348548889160156 0.0300000000000011 0.0300000000000011 0.0 723
+724 0.0358438491821289 0.0300000000000011 0.0300000000000011 0.0 724
+725 0.0327739715576172 0.0300000000000011 0.0300000000000011 0.0 725
+726 0.0338411331176758 0.0300000000000011 0.0300000000000011 0.0 726
+727 0.0345768928527832 0.0400000000000063 0.0400000000000063 0.0 727
+728 0.0319709777832031 0.0300000000000011 0.0300000000000011 0.0 728
+729 0.0316281318664551 0.0300000000000011 0.0300000000000011 0.0 729
+730 0.0774428844451904 0.0799999999999983 0.0799999999999983 0.0 730
+731 0.0331730842590332 0.0300000000000011 0.0300000000000011 0.0 731
+732 0.0344212055206299 0.0300000000000011 0.0300000000000011 0.0 732
+733 0.0328938961029053 0.039999999999992 0.039999999999992 0.0 733
+734 0.032724142074585 0.0300000000000011 0.0300000000000011 0.0 734
+735 0.0324850082397461 0.0300000000000011 0.0300000000000011 0.0 735
+736 0.031792163848877 0.0300000000000011 0.0300000000000011 0.0 736
+737 0.0799460411071777 0.0799999999999983 0.0799999999999983 0.0 737
+738 0.0354650020599365 0.0400000000000063 0.0400000000000063 0.0 738
+739 0.0343890190124512 0.0299999999999869 0.0299999999999869 0.0 739
+740 0.0328691005706787 0.0400000000000063 0.0400000000000063 0.0 740
+741 0.0328059196472168 0.0300000000000011 0.0300000000000011 0.0 741
+742 0.0325958728790283 0.0300000000000011 0.0300000000000011 0.0 742
+743 0.0322740077972412 0.039999999999992 0.039999999999992 0.0 743
+744 0.0356390476226807 0.0300000000000011 0.0300000000000011 0.0 744
+745 0.0736830234527588 0.0700000000000074 0.0700000000000074 0.0 745
+746 0.0331189632415771 0.0300000000000011 0.0300000000000011 0.0 746
+747 0.0331828594207764 0.0300000000000011 0.0300000000000011 0.0 747
+748 0.0329599380493164 0.0300000000000011 0.0300000000000011 0.0 748
+749 0.0325560569763184 0.0400000000000063 0.0400000000000063 0.0 749
+750 0.0352969169616699 0.0300000000000011 0.0300000000000011 0.0 750
+751 0.0321471691131592 0.0300000000000011 0.0300000000000011 0.0 751
+752 0.0331270694732666 0.039999999999992 0.039999999999992 0.0 752
+753 0.0755550861358643 0.0700000000000074 0.0700000000000074 0.0 753
+754 0.0331971645355225 0.039999999999992 0.039999999999992 0.0 754
+755 0.0333280563354492 0.0300000000000011 0.0300000000000011 0.0 755
+756 0.0349440574645996 0.0300000000000011 0.0300000000000011 0.0 756
+757 0.0327320098876953 0.0400000000000063 0.0400000000000063 0.0 757
+758 0.0337162017822266 0.0300000000000011 0.0300000000000011 0.0 758
+759 0.0320689678192139 0.0299999999999869 0.0299999999999869 0.0 759
+760 0.0315940380096436 0.0300000000000011 0.0300000000000011 0.0 760
+761 0.0736989974975586 0.0800000000000125 0.0800000000000125 0.0 761
+762 0.0331079959869385 0.0299999999999869 0.0299999999999869 0.0 762
+763 0.0434081554412842 0.0400000000000063 0.0400000000000063 0.0 763
+764 0.0350160598754883 0.0400000000000063 0.0400000000000063 0.0 764
+765 0.0333938598632812 0.0299999999999869 0.0299999999999869 0.0 765
+766 0.0325360298156738 0.0400000000000063 0.0400000000000063 0.0 766
+767 0.032012939453125 0.0300000000000011 0.0300000000000011 0.0 767
+768 0.031588077545166 0.0300000000000011 0.0300000000000011 0.0 768
+769 0.0773451328277588 0.0799999999999983 0.0799999999999983 0.0 769
+770 0.0328960418701172 0.0300000000000011 0.0300000000000011 0.0 770
+771 0.0350039005279541 0.0300000000000011 0.0300000000000011 0.0 771
+772 0.0326879024505615 0.039999999999992 0.039999999999992 0.0 772
+773 0.0326569080352783 0.0300000000000011 0.0300000000000011 0.0 773
+774 0.0326459407806396 0.0300000000000011 0.0300000000000011 0.0 774
+775 0.0321180820465088 0.0300000000000011 0.0300000000000011 0.0 775
+776 0.0343871116638184 0.0400000000000063 0.0400000000000063 0.0 776
+777 0.0758569240570068 0.0799999999999983 0.0799999999999983 0.0 777
+778 0.0349979400634766 0.0300000000000011 0.0300000000000011 0.0 778
+779 0.0329880714416504 0.0300000000000011 0.0300000000000011 0.0 779
+780 0.0330510139465332 0.039999999999992 0.039999999999992 0.0 780
+781 0.0328168869018555 0.0300000000000011 0.0300000000000011 0.0 781
+782 0.0347089767456055 0.0300000000000011 0.0300000000000011 0.0 782
+783 0.0322279930114746 0.0400000000000063 0.0400000000000063 0.0 783
+784 0.0752460956573486 0.0699999999999932 0.0699999999999932 0.0 784
+785 0.0333998203277588 0.0300000000000011 0.0300000000000011 0.0 785
+786 0.0327608585357666 0.0400000000000063 0.0400000000000063 0.0 786
+787 0.032987117767334 0.0300000000000011 0.0300000000000011 0.0 787
+788 0.0328860282897949 0.0299999999999869 0.0299999999999869 0.0 788
+789 0.0421018600463867 0.0500000000000114 0.0500000000000114 0.0 789
+790 0.0354950428009033 0.0300000000000011 0.0300000000000011 0.0 790
+791 0.0326569080352783 0.0299999999999869 0.0299999999999869 0.0 791
+792 0.072484016418457 0.0800000000000125 0.0800000000000125 0.0 792
+793 0.0332272052764893 0.0300000000000011 0.0300000000000011 0.0 793
+794 0.0329101085662842 0.0299999999999869 0.0299999999999869 0.0 794
+795 0.0368521213531494 0.0400000000000063 0.0400000000000063 0.0 795
+796 0.0328860282897949 0.0300000000000011 0.0300000000000011 0.0 796
+797 0.0351109504699707 0.039999999999992 0.039999999999992 0.0 797
+798 0.0322809219360352 0.0300000000000011 0.0300000000000011 0.0 798
+799 0.0317561626434326 0.0300000000000011 0.0300000000000011 0.0 799
+800 0.0744378566741943 0.0799999999999983 0.0799999999999983 0.0 800
+801 0.0369539260864258 0.0300000000000011 0.0300000000000011 0.0 801
+802 0.0338389873504639 0.0400000000000063 0.0400000000000063 0.0 802
+803 0.0353808403015137 0.0300000000000011 0.0300000000000011 0.0 803
+804 0.0346858501434326 0.039999999999992 0.039999999999992 0.0 804
+805 0.0324549674987793 0.0300000000000011 0.0300000000000011 0.0 805
+806 0.0338549613952637 0.0300000000000011 0.0300000000000011 0.0 806
+807 0.0316150188446045 0.0300000000000011 0.0300000000000011 0.0 807
+808 0.0747511386871338 0.0799999999999983 0.0799999999999983 0.0 808
+809 0.0340969562530518 0.0300000000000011 0.0300000000000011 0.0 809
+810 0.0330560207366943 0.0300000000000011 0.0300000000000011 0.0 810
+811 0.0328769683837891 0.0400000000000063 0.0400000000000063 0.0 811
+812 0.0325078964233398 0.0300000000000011 0.0300000000000011 0.0 812
+813 0.0323269367218018 0.0300000000000011 0.0300000000000011 0.0 813
+814 0.0345659255981445 0.039999999999992 0.039999999999992 0.0 814
+815 0.0393409729003906 0.0300000000000011 0.0300000000000011 0.0 815
+816 0.0769538879394531 0.0799999999999983 0.0799999999999983 0.0 816
+817 0.0329430103302002 0.0300000000000011 0.0300000000000011 0.0 817
+818 0.033038854598999 0.0400000000000063 0.0400000000000063 0.0 818
+819 0.0329020023345947 0.0300000000000011 0.0300000000000011 0.0 819
+820 0.0346760749816895 0.0299999999999869 0.0299999999999869 0.0 820
+821 0.0338461399078369 0.0400000000000063 0.0400000000000063 0.0 821
+822 0.0328898429870605 0.0300000000000011 0.0300000000000011 0.0 822
+823 0.0318491458892822 0.0300000000000011 0.0300000000000011 0.0 823
+824 0.0737371444702148 0.0799999999999983 0.0799999999999983 0.0 824
+825 0.032710075378418 0.0300000000000011 0.0300000000000011 0.0 825
+826 0.0330679416656494 0.0300000000000011 0.0300000000000011 0.0 826
+827 0.0366559028625488 0.039999999999992 0.039999999999992 0.0 827
+828 0.0327389240264893 0.0300000000000011 0.0300000000000011 0.0 828
+829 0.0343880653381348 0.0400000000000063 0.0400000000000063 0.0 829
+830 0.0338549613952637 0.0300000000000011 0.0300000000000011 0.0 830
+831 0.0315511226654053 0.0300000000000011 0.0300000000000011 0.0 831
+832 0.0741341114044189 0.0699999999999932 0.0699999999999932 0.0 832
+833 0.0351898670196533 0.0400000000000063 0.0400000000000063 0.0 833
+834 0.0331771373748779 0.0300000000000011 0.0300000000000011 0.0 834
+835 0.0344979763031006 0.039999999999992 0.039999999999992 0.0 835
+836 0.0324339866638184 0.0300000000000011 0.0300000000000011 0.0 836
+837 0.0324251651763916 0.0300000000000011 0.0300000000000011 0.0 837
+838 0.0322468280792236 0.0400000000000063 0.0400000000000063 0.0 838
+839 0.0315029621124268 0.0300000000000011 0.0300000000000011 0.0 839
+840 0.0842621326446533 0.0799999999999983 0.0799999999999983 0.0 840
+841 0.035271167755127 0.039999999999992 0.039999999999992 0.0 841
+842 0.0329780578613281 0.0300000000000011 0.0300000000000011 0.0 842
+843 0.0328261852264404 0.0300000000000011 0.0300000000000011 0.0 843
+844 0.032487154006958 0.0300000000000011 0.0300000000000011 0.0 844
+845 0.0325088500976562 0.0300000000000011 0.0300000000000011 0.0 845
+846 0.0327229499816895 0.0299999999999869 0.0299999999999869 0.0 846
+847 0.0770940780639648 0.0800000000000125 0.0800000000000125 0.0 847
+848 0.0332331657409668 0.0299999999999869 0.0299999999999869 0.0 848
+849 0.0330700874328613 0.0300000000000011 0.0300000000000011 0.0 849
+850 0.0333080291748047 0.0400000000000063 0.0400000000000063 0.0 850
+851 0.0327019691467285 0.0300000000000011 0.0300000000000011 0.0 851
+852 0.0325930118560791 0.0300000000000011 0.0300000000000011 0.0 852
+853 0.0363738536834717 0.039999999999992 0.039999999999992 0.0 853
+854 0.0318160057067871 0.0300000000000011 0.0300000000000011 0.0 854
+855 0.0756251811981201 0.0799999999999983 0.0799999999999983 0.0 855
+856 0.0331168174743652 0.0300000000000011 0.0300000000000011 0.0 856
+857 0.0332381725311279 0.0300000000000011 0.0300000000000011 0.0 857
+858 0.0331380367279053 0.0400000000000063 0.0400000000000063 0.0 858
+859 0.0359609127044678 0.0300000000000011 0.0300000000000011 0.0 859
+860 0.0326030254364014 0.0300000000000011 0.0300000000000011 0.0 860
+861 0.0326559543609619 0.039999999999992 0.039999999999992 0.0 861
+862 0.0313940048217773 0.0300000000000011 0.0300000000000011 0.0 862
+863 0.0721480846405029 0.0700000000000074 0.0700000000000074 0.0 863
+864 0.0329670906066895 0.0300000000000011 0.0300000000000011 0.0 864
+865 0.0358521938323975 0.039999999999992 0.039999999999992 0.0 865
+866 0.0417828559875488 0.0400000000000063 0.0400000000000063 0.0 866
+867 0.0335261821746826 0.039999999999992 0.039999999999992 0.0 867
+868 0.032412052154541 0.0300000000000011 0.0300000000000011 0.0 868
+869 0.0315959453582764 0.0300000000000011 0.0300000000000011 0.0 869
+870 0.0313148498535156 0.0300000000000011 0.0300000000000011 0.0 870
+871 0.0756919384002686 0.0799999999999983 0.0799999999999983 0.0 871
+872 0.033372163772583 0.0300000000000011 0.0300000000000011 0.0 872
+873 0.0342988967895508 0.0300000000000011 0.0300000000000011 0.0 873
+874 0.0328269004821777 0.039999999999992 0.039999999999992 0.0 874
+875 0.0327079296112061 0.0300000000000011 0.0300000000000011 0.0 875
+876 0.0325889587402344 0.0300000000000011 0.0300000000000011 0.0 876
+877 0.0320539474487305 0.0300000000000011 0.0300000000000011 0.0 877
+878 0.0315239429473877 0.0400000000000063 0.0400000000000063 0.0 878
+879 0.0760519504547119 0.0699999999999932 0.0699999999999932 0.0 879
+880 0.0334291458129883 0.0300000000000011 0.0300000000000011 0.0 880
+881 0.0349709987640381 0.0400000000000063 0.0400000000000063 0.0 881
+882 0.0328500270843506 0.0300000000000011 0.0300000000000011 0.0 882
+883 0.0326099395751953 0.0300000000000011 0.0300000000000011 0.0 883
+884 0.0326600074768066 0.039999999999992 0.039999999999992 0.0 884
+885 0.0347640514373779 0.0300000000000011 0.0300000000000011 0.0 885
+886 0.0317268371582031 0.0300000000000011 0.0300000000000011 0.0 886
+887 0.0741100311279297 0.0799999999999983 0.0799999999999983 0.0 887
+888 0.0328361988067627 0.0300000000000011 0.0300000000000011 0.0 888
+889 0.0330181121826172 0.0300000000000011 0.0300000000000011 0.0 889
+890 0.0327560901641846 0.0400000000000063 0.0400000000000063 0.0 890
+891 0.0344109535217285 0.0299999999999869 0.0299999999999869 0.0 891
+892 0.0412158966064453 0.0400000000000063 0.0400000000000063 0.0 892
+893 0.03265380859375 0.0400000000000063 0.0400000000000063 0.0 893
+894 0.0321509838104248 0.0299999999999869 0.0299999999999869 0.0 894
+895 0.0741260051727295 0.0700000000000074 0.0700000000000074 0.0 895
+896 0.0328559875488281 0.0300000000000011 0.0300000000000011 0.0 896
+897 0.0330810546875 0.039999999999992 0.039999999999992 0.0 897
+898 0.0366909503936768 0.0300000000000011 0.0300000000000011 0.0 898
+899 0.0327630043029785 0.0400000000000063 0.0400000000000063 0.0 899
+900 0.0326259136199951 0.0300000000000011 0.0300000000000011 0.0 900
+901 0.031965970993042 0.0300000000000011 0.0300000000000011 0.0 901
+902 0.0730900764465332 0.0699999999999932 0.0699999999999932 0.0 902
+903 0.0331590175628662 0.0400000000000063 0.0400000000000063 0.0 903
+904 0.0365490913391113 0.0300000000000011 0.0300000000000011 0.0 904
+905 0.0330300331115723 0.039999999999992 0.039999999999992 0.0 905
+906 0.0332710742950439 0.0300000000000011 0.0300000000000011 0.0 906
+907 0.0344429016113281 0.0300000000000011 0.0300000000000011 0.0 907
+908 0.032494068145752 0.0400000000000063 0.0400000000000063 0.0 908
+909 0.0318870544433594 0.0300000000000011 0.0300000000000011 0.0 909
+910 0.0748629570007324 0.0699999999999932 0.0699999999999932 0.0 910
+911 0.0334439277648926 0.0400000000000063 0.0400000000000063 0.0 911
+912 0.0351619720458984 0.0300000000000011 0.0300000000000011 0.0 912
+913 0.0328991413116455 0.039999999999992 0.039999999999992 0.0 913
+914 0.0326261520385742 0.0300000000000011 0.0300000000000011 0.0 914
+915 0.0323889255523682 0.0300000000000011 0.0300000000000011 0.0 915
+916 0.0323429107666016 0.0300000000000011 0.0300000000000011 0.0 916
+917 0.0321781635284424 0.039999999999992 0.039999999999992 0.0 917
+918 0.0845181941986084 0.0800000000000125 0.0800000000000125 0.0 918
+919 0.0327539443969727 0.0299999999999869 0.0299999999999869 0.0 919
+920 0.0328059196472168 0.0300000000000011 0.0300000000000011 0.0 920
+921 0.0324711799621582 0.0400000000000063 0.0400000000000063 0.0 921
+922 0.0323400497436523 0.0300000000000011 0.0300000000000011 0.0 922
+923 0.0321018695831299 0.0300000000000011 0.0300000000000011 0.0 923
+924 0.0361039638519287 0.039999999999992 0.039999999999992 0.0 924
+925 0.0316181182861328 0.0300000000000011 0.0300000000000011 0.0 925
+926 0.0748419761657715 0.0700000000000074 0.0700000000000074 0.0 926
+927 0.0332598686218262 0.039999999999992 0.039999999999992 0.0 927
+928 0.0332441329956055 0.0300000000000011 0.0300000000000011 0.0 928
+929 0.0330359935760498 0.0300000000000011 0.0300000000000011 0.0 929
+930 0.0358648300170898 0.0400000000000063 0.0400000000000063 0.0 930
+931 0.0327050685882568 0.0300000000000011 0.0300000000000011 0.0 931
+932 0.0349700450897217 0.039999999999992 0.039999999999992 0.0 932
+933 0.0338780879974365 0.0300000000000011 0.0300000000000011 0.0 933
+934 0.0738511085510254 0.0700000000000074 0.0700000000000074 0.0 934
+935 0.0332021713256836 0.039999999999992 0.039999999999992 0.0 935
+936 0.0359549522399902 0.0300000000000011 0.0300000000000011 0.0 936
+937 0.0331430435180664 0.0400000000000063 0.0400000000000063 0.0 937
+938 0.0340991020202637 0.0300000000000011 0.0300000000000011 0.0 938
+939 0.0326049327850342 0.0299999999999869 0.0299999999999869 0.0 939
+940 0.0325651168823242 0.0400000000000063 0.0400000000000063 0.0 940
+941 0.0317420959472656 0.0300000000000011 0.0300000000000011 0.0 941
+942 0.0775351524353027 0.0799999999999983 0.0799999999999983 0.0 942
+943 0.0417890548706055 0.0400000000000063 0.0400000000000063 0.0 943
+944 0.0358331203460693 0.0300000000000011 0.0300000000000011 0.0 944
+945 0.0328278541564941 0.039999999999992 0.039999999999992 0.0 945
+946 0.0325720310211182 0.0300000000000011 0.0300000000000011 0.0 946
+947 0.0324339866638184 0.0300000000000011 0.0300000000000011 0.0 947
+948 0.0318090915679932 0.0300000000000011 0.0300000000000011 0.0 948
+949 0.0755469799041748 0.0799999999999983 0.0799999999999983 0.0 949
+950 0.0346879959106445 0.0300000000000011 0.0300000000000011 0.0 950
+951 0.0329141616821289 0.039999999999992 0.039999999999992 0.0 951
+952 0.0330381393432617 0.0300000000000011 0.0300000000000011 0.0 952
+953 0.0330090522766113 0.0300000000000011 0.0300000000000011 0.0 953
+954 0.0340299606323242 0.0400000000000063 0.0400000000000063 0.0 954
+955 0.0325748920440674 0.0300000000000011 0.0300000000000011 0.0 955
+956 0.0356650352478027 0.039999999999992 0.039999999999992 0.0 956
+957 0.0749011039733887 0.0700000000000074 0.0700000000000074 0.0 957
+958 0.0347681045532227 0.0300000000000011 0.0300000000000011 0.0 958
+959 0.0330829620361328 0.039999999999992 0.039999999999992 0.0 959
+960 0.0334758758544922 0.0300000000000011 0.0300000000000011 0.0 960
+961 0.0329201221466064 0.0300000000000011 0.0300000000000011 0.0 961
+962 0.0358650684356689 0.0400000000000063 0.0400000000000063 0.0 962
+963 0.0327301025390625 0.0300000000000011 0.0300000000000011 0.0 963
+964 0.03354811668396 0.039999999999992 0.039999999999992 0.0 964
+965 0.0745160579681396 0.0700000000000074 0.0700000000000074 0.0 965
+966 0.0329270362854004 0.0300000000000011 0.0300000000000011 0.0 966
+967 0.0329809188842773 0.039999999999992 0.039999999999992 0.0 967
+968 0.0393757820129395 0.0300000000000011 0.0300000000000011 0.0 968
+969 0.0380401611328125 0.0300000000000011 0.0300000000000011 0.0 969
+970 0.0357730388641357 0.039999999999992 0.039999999999992 0.0 970
+971 0.0322329998016357 0.0300000000000011 0.0300000000000011 0.0 971
+972 0.0315341949462891 0.0300000000000011 0.0300000000000011 0.0 972
+973 0.0736370086669922 0.0799999999999983 0.0799999999999983 0.0 973
+974 0.0357208251953125 0.0300000000000011 0.0300000000000011 0.0 974
+975 0.0331871509552002 0.0400000000000063 0.0400000000000063 0.0 975
+976 0.0338621139526367 0.0300000000000011 0.0300000000000011 0.0 976
+977 0.03261399269104 0.0299999999999869 0.0299999999999869 0.0 977
+978 0.0324549674987793 0.0300000000000011 0.0300000000000011 0.0 978
+979 0.0323319435119629 0.0400000000000063 0.0400000000000063 0.0 979
+980 0.0314400196075439 0.0300000000000011 0.0300000000000011 0.0 980
+981 0.0762598514556885 0.0699999999999932 0.0699999999999932 0.0 981
+982 0.0347981452941895 0.0400000000000063 0.0400000000000063 0.0 982
+983 0.0366230010986328 0.0400000000000063 0.0300000000000011 0.01 983
+984 0.0328900814056396 0.039999999999992 0.039999999999992 0.0 984
+985 0.032588005065918 0.0300000000000011 0.0300000000000011 0.0 985
+986 0.0326781272888184 0.0300000000000011 0.0300000000000011 0.0 986
+987 0.0319411754608154 0.0300000000000011 0.0300000000000011 0.0 987
+988 0.0342800617218018 0.0400000000000063 0.0400000000000063 0.0 988
+989 0.0760009288787842 0.0699999999999932 0.0699999999999932 0.0 989
+990 0.0328078269958496 0.0400000000000063 0.0400000000000063 0.0 990
+991 0.0330369472503662 0.0300000000000011 0.0300000000000011 0.0 991
+992 0.0326659679412842 0.0300000000000011 0.0300000000000011 0.0 992
+993 0.0325169563293457 0.0300000000000011 0.0300000000000011 0.0 993
+994 0.0384469032287598 0.039999999999992 0.039999999999992 0.0 994
+995 0.035956859588623 0.0400000000000063 0.0400000000000063 0.0 995
+996 0.075498104095459 0.0699999999999932 0.0699999999999932 0.0 996
+997 0.0330910682678223 0.0300000000000011 0.0300000000000011 0.0 997
+998 0.0327069759368896 0.0300000000000011 0.0300000000000011 0.0 998
+999 0.0329201221466064 0.0300000000000011 0.0300000000000011 0.0 999
+1000 0.0352790355682373 0.039999999999992 0.039999999999992 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log
new file mode 100644
index 0000000..f349db1
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log
@@ -0,0 +1,82 @@
+========================== 2009-04-01T16:46:56 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'ParserBenchmarkRails' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+ParserBenchmarkRails#parser:
+ real total user system
+sum 38.690086126 38.620000000 38.610000000 0.010000000
+min 0.031255007 0.030000000 0.030000000 0.000000000
+std- 0.025022178 0.024277709 0.024265187 -0.000306228
+mean 0.038690086 0.038620000 0.038610000 0.000010000
+std+ 0.052357994 0.052962291 0.052954813 0.000326228
+max 0.083594084 0.090000000 0.090000000 0.010000000
+std 0.013667908 0.014342291 0.014344813 0.000316228
+std% 35.326641197 37.136951469 37.153104057 3162.277660168
+harm 0.035964441 0.035345750 0.035335342 nan
+geo 0.037048388 0.036703287 0.036692729 0.000000000
+q1 0.032610178 0.030000000 0.030000000 0.000000000
+med 0.033129930 0.030000000 0.030000000 0.000000000
+q3 0.035388470 0.040000000 0.040000000 0.000000000
+ 1000 25.84641 0.038690086
+ calls calls/sec secs/call
+
+ 0.08098 -|*
+ 0.07574 -|*****
+ 0.07051 -|**
+ 0.06528 -|
+ 0.06004 -|
+ 0.05481 -|
+ 0.04957 -|
+ 0.04434 -|*
+ 0.03911 -|***
+ 0.03387 -|**************************************************
+
+Outliers detected with box plot algo (median=0.03313, iqr=0.00278, factor=3.00):
+high=47 very_high=124
+
+Ljung-Box statistics: q=5276.52020 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+ParserBenchmarkRails#parser:
+ real total user system
+sum 38.814780235 38.730000000 38.710000000 0.020000000
+min 0.031314850 0.030000000 0.030000000 0.000000000
+std- 0.024801114 0.023975177 0.023956914 -0.000426990
+mean 0.038814780 0.038730000 0.038710000 0.000020000
+std+ 0.052828447 0.053484823 0.053463086 0.000466990
+max 0.085337162 0.090000000 0.090000000 0.010000000
+std 0.014013666 0.014754823 0.014753086 0.000446990
+std% 36.103943796 38.096625621 38.111821850 2234.948544149
+harm 0.035975867 0.035320781 0.035304155 nan
+geo 0.037101026 0.036725170 0.036706415 0.000000000
+q1 0.032611191 0.030000000 0.030000000 0.000000000
+med 0.033082008 0.030000000 0.030000000 0.000000000
+q3 0.035308182 0.040000000 0.040000000 0.000000000
+ 1000 25.76338 0.038814780
+ calls calls/sec secs/call
+
+ 0.08264 -|*
+ 0.07723 -|***
+ 0.07183 -|****
+ 0.06643 -|
+ 0.06103 -|
+ 0.05562 -|
+ 0.05022 -|
+ 0.04482 -|
+ 0.03942 -|**
+ 0.03402 -|**************************************************
+
+Outliers detected with box plot algo (median=0.03308, iqr=0.00270, factor=3.00):
+high=43 very_high=127
+
+Ljung-Box statistics: q=3451.96535 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:48:17 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/ParserBenchmarkRails#parser.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/ParserBenchmarkRails#parser-autocorrelation.dat'.
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat
new file mode 100644
index 0000000..f32d17f
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat
@@ -0,0 +1,1000 @@
+#lag autocorrelation
+1 1.0
+2 -0.0162844496545126
+3 -0.0217599649154442
+4 -0.0158858309903125
+5 -0.0200808613960338
+6 -0.0259529053941171
+7 -0.0301975414696179
+8 -0.0250675870796551
+9 -0.0285985946623563
+10 -0.0307680893851068
+11 -0.0288265198488383
+12 -0.0271571829024007
+13 -0.0301250298936937
+14 -0.0226181132137933
+15 -0.0294060805772707
+16 -0.0337045155176462
+17 -0.0318194303001094
+18 -0.0292065217707409
+19 -0.0302440574139168
+20 -0.0358556403201638
+21 -0.0277391993235684
+22 -0.0302464277108834
+23 -0.0324555396059655
+24 -0.0281812881852202
+25 -0.022546962678309
+26 -0.0303404504420409
+27 -0.0284646539775073
+28 -0.028171618962038
+29 -0.028565092958004
+30 -0.0291690975621738
+31 -0.0281712395665202
+32 -0.0238379726807203
+33 -0.0294236975427878
+34 -0.0208882165043777
+35 -0.0209638384059497
+36 -0.0161683101478742
+37 -0.0198997973165107
+38 0.435257874984686
+39 0.458604874110641
+40 0.0237621756843474
+41 -0.0234662943892799
+42 -0.0132052112478708
+43 -0.0232550385773748
+44 -0.0265177529080711
+45 -0.0295042353148468
+46 -0.0248888514316335
+47 -0.0267548816775851
+48 -0.0301945196949619
+49 -0.0256866572019894
+50 -0.0261353739728522
+51 -0.0245073925246022
+52 -0.0267569882760944
+53 -0.0290607941928704
+54 -0.030612533159521
+55 -0.0324276179436348
+56 -0.0294828176269951
+57 -0.0302074451537584
+58 -0.0308924549200688
+59 -0.0272193925170758
+60 -0.0310943839021242
+61 -0.0282313865089381
+62 -0.0273610010809688
+63 -0.0250425898280312
+64 -0.0269825367863249
+65 -0.030293343792881
+66 -0.0285829676042798
+67 -0.0259669504450748
+68 -0.028423496235617
+69 -0.0286177493293173
+70 -0.0239113501418138
+71 -0.0226730211754719
+72 -0.0216274261753708
+73 -0.0175668930237053
+74 -0.016987706219544
+75 0.281860410751591
+76 0.25297384526533
+77 0.306701827698567
+78 0.0194414665764478
+79 -0.0243796783451221
+80 -0.0146952129609066
+81 -0.0229107323358625
+82 -0.02476592170182
+83 -0.0262150166126129
+84 -0.0233100425521956
+85 -0.0263455380004048
+86 -0.0253912832942502
+87 -0.0245622723440493
+88 -0.0225180917608497
+89 -0.0292400873158552
+90 -0.0255215645749941
+91 -0.02586826799364
+92 -0.0315849501291156
+93 -0.0319172083894574
+94 -0.0270097346640797
+95 -0.0278372423315524
+96 -0.0306627817548168
+97 -0.0258127345919013
+98 -0.0256340599415291
+99 -0.0270400681439884
+100 -0.0271863267200993
+101 -0.0223938908865392
+102 -0.0269881932444538
+103 -0.0286873034752439
+104 -0.0268085508356207
+105 -0.0250531313567446
+106 -0.0272655637793525
+107 -0.025337879180265
+108 -0.0187629329024022
+109 -0.0223207452723449
+110 -0.0185411706942619
+111 -0.0173591745979572
+112 0.212695002726406
+113 0.176100874201248
+114 0.181136796368959
+115 0.217985852640763
+116 0.0189775496631967
+117 -0.022070943088181
+118 -0.0198858953377023
+119 -0.0228614172431068
+120 -0.0222026156678026
+121 -0.026520195666479
+122 -0.0234557540286227
+123 -0.0222031583717324
+124 -0.0222512221835737
+125 -0.021957746397543
+126 -0.0268087376735115
+127 -0.0273093034119188
+128 -0.0245103124601919
+129 -0.0263347996406397
+130 -0.0312278911250281
+131 -0.0305253475957555
+132 -0.0261963547332742
+133 -0.0274617303870749
+134 -0.0243124109128202
+135 -0.0262235240356464
+136 -0.0239085429783869
+137 -0.0287564527494295
+138 -0.0249876754449911
+139 -0.0197254570216898
+140 -0.0266321665979349
+141 -0.0266120249498159
+142 -0.0248056589461695
+143 -0.0221257923724317
+144 -0.024933311620115
+145 -0.0196549868192828
+146 -0.0207328295283175
+147 -0.0200920805093202
+148 -0.0173063409154936
+149 0.175654369820573
+150 0.0996760311141833
+151 0.142600408151497
+152 0.175452601030937
+153 0.135092911757026
+154 0.015666937752102
+155 -0.0206532136473774
+156 -0.0225660207506427
+157 -0.0220914796170182
+158 -0.0212748341146881
+159 -0.0211831500010699
+160 -0.0199475712567065
+161 -0.0198090360921562
+162 -0.023406680899725
+163 -0.0238338433694836
+164 -0.0256046135139069
+165 -0.0242954498172123
+166 -0.0258660266004111
+167 -0.0269522804569596
+168 -0.0297189079034543
+169 -0.0286038809350082
+170 -0.0243084923873978
+171 -0.0257061323195295
+172 -0.0223670193406507
+173 -0.0230581197957092
+174 -0.0259009025367238
+175 -0.0257560518519552
+176 -0.023090387902458
+177 -0.0203272749388722
+178 -0.0249609826618749
+179 -0.0273749728570153
+180 -0.0232630581935224
+181 -0.0184293362184845
+182 -0.0227584354744901
+183 -0.0189661792281422
+184 -0.0231761259199879
+185 -0.0160634507453316
+186 0.135019288045276
+187 0.0659826079670161
+188 0.135226742645858
+189 0.0605819921567246
+190 0.212733971580529
+191 0.0594662500140067
+192 0.0196656779913871
+193 -0.0198404313214719
+194 -0.0234794798625044
+195 -0.020228110441232
+196 -0.0239711309581977
+197 -0.0213996457420545
+198 -0.0198198390682184
+199 -0.01837620236681
+200 -0.0252904949340885
+201 -0.0209512502626924
+202 -0.0221289412896572
+203 -0.027427908823154
+204 -0.0239458508129429
+205 -0.0247739743326578
+206 -0.0286549975885985
+207 -0.0274257626339078
+208 -0.0209339353182737
+209 -0.0217393583916566
+210 -0.0210676960785699
+211 -0.0244413756252707
+212 -0.0230553337146913
+213 -0.0249257698225569
+214 -0.0209961742884786
+215 -0.0187589223013789
+216 -0.0231441227112562
+217 -0.0256128148841961
+218 -0.0189996873737005
+219 -0.0186032704051841
+220 -0.024896664851184
+221 -0.0154586003532082
+222 -0.016622451190913
+223 0.10528876877612
+224 0.0616792976302413
+225 0.105381487366677
+226 0.0698781422585297
+227 0.0526859362556473
+228 0.252676201792791
+229 -0.0158777502042575
+230 0.0182465167560402
+231 -0.0189176416281867
+232 -0.0223947199370044
+233 -0.0187514827185257
+234 -0.0221421724471967
+235 -0.0189743029127782
+236 -0.0169132380201002
+237 -0.0244680755831848
+238 -0.0218734587520481
+239 -0.0186581914256442
+240 -0.026130481429307
+241 -0.0259336502285975
+242 -0.0243902837001253
+243 -0.0237554283001736
+244 -0.0260009623695832
+245 -0.0207407789914843
+246 -0.0195359028544637
+247 -0.0255947955165555
+248 -0.0192742650096326
+249 -0.02317092217707
+250 -0.0220804794353722
+251 -0.0231629589394634
+252 -0.01815715732966
+253 -0.0168380962328354
+254 -0.0240542649472067
+255 -0.0203501818767696
+256 -0.0171903409693322
+257 -0.0223563828072372
+258 -0.019940801207438
+259 -0.0169291109293721
+260 0.0608679690137956
+261 0.0647081802938391
+262 0.100717554509044
+263 0.0239520468414546
+264 0.0698991274638046
+265 0.0905559637290508
+266 0.178937593759438
+267 0.0219556620146547
+268 -0.0179147413001344
+269 -0.0178917963661612
+270 -0.0182758940871145
+271 -0.0193697306175885
+272 -0.0204671858114412
+273 -0.0171408579409368
+274 -0.0182409872271859
+275 -0.0211824035120345
+276 -0.0235000843866101
+277 -0.0202924958876639
+278 -0.0248505379989764
+279 -0.0220226888126351
+280 -0.0245762806223724
+281 -0.0252042782672907
+282 -0.0216801171879857
+283 -0.0210832689857307
+284 -0.0192213765705103
+285 -0.0220158312276208
+286 -0.0210439300781706
+287 -0.0209875936956392
+288 -0.0206630619760563
+289 -0.0216178400849402
+290 -0.0196909009290242
+291 -0.0174466524982222
+292 -0.0194381489522717
+293 -0.0214825111756293
+294 -0.0174953699462574
+295 -0.022683312446492
+296 -0.0180848133159409
+297 0.0254210486852796
+298 0.0654897828406648
+299 0.0986617374019184
+300 0.0211653698985848
+301 0.03519273754644
+302 0.0994229074199349
+303 0.0569927637089909
+304 0.144208154176788
+305 0.025634547369068
+306 -0.0192573217261146
+307 -0.0134291320771703
+308 -0.0186225883596377
+309 -0.0192924485153545
+310 -0.0212788468915268
+311 -0.0142437809504701
+312 -0.0164846225770394
+313 -0.0230149302918458
+314 -0.0226862925961795
+315 -0.0182027935965825
+316 -0.0223705185857763
+317 -0.0216288175818581
+318 -0.023788812144948
+319 -0.0211845254108688
+320 -0.0222450219207216
+321 -0.0187600056472826
+322 -0.0187902396176198
+323 -0.0195634679662719
+324 -0.0194501685935753
+325 -0.0190333705450752
+326 -0.0204687388385914
+327 -0.0200297119812042
+328 -0.0157733409782519
+329 -0.0164084747060388
+330 -0.0203726921633815
+331 -0.0190072727071644
+332 -0.018178093048503
+333 -0.0159556448940802
+334 -0.013791115173629
+335 0.066803434121925
+336 0.0987477853719105
+337 0.0244839447881098
+338 0.031202350625353
+339 0.0196479023204289
+340 0.141228694216934
+341 0.0175097275718119
+342 0.105954014939689
+343 0.0253759965520281
+344 -0.0116344384079018
+345 -0.0169720879403278
+346 -0.0193914989969224
+347 -0.019089553717436
+348 -0.0156466666300242
+349 -0.0156456435188142
+350 -0.0181150256079739
+351 -0.0223467109479219
+352 -0.0214801527438239
+353 -0.019082414276624
+354 -0.0178557951992504
+355 -0.0228090603341919
+356 -0.0204157042896649
+357 -0.0221410379160091
+358 -0.0199425390855694
+359 -0.018118375890382
+360 -0.0150454629858717
+361 -0.0183129793049915
+362 -0.0204645202101881
+363 -0.0174866608721183
+364 -0.0154096032136416
+365 -0.0179571796427601
+366 -0.0134888272478049
+367 -0.0176851479177383
+368 -0.0193002648975602
+369 -0.0189078544862062
+370 -0.0144320773947494
+371 -0.011260111407965
+372 0.0215572902035114
+373 0.100524914108148
+374 0.0219084872557524
+375 0.0354856193633486
+376 0.0229331908137013
+377 0.0626022532746132
+378 0.0969282134458387
+379 0.0189295482330605
+380 0.0617228180411101
+381 0.0425011894350961
+382 -0.0181588301030469
+383 -0.0171392718695313
+384 -0.0178324205119472
+385 -0.0156705733083666
+386 -0.0146663905947814
+387 -0.0173238224981501
+388 -0.0182073556277454
+389 -0.0204929470007114
+390 -0.0197959652809142
+391 -0.0178487074910014
+392 -0.0191264027449998
+393 -0.0190642154579731
+394 -0.0203166425576961
+395 -0.0188935352488649
+396 -0.0201224460748975
+397 -0.0141844683481906
+398 -0.0139898462786534
+399 -0.0198574924165857
+400 -0.0193966985699962
+401 -0.0164995946916847
+402 -0.0117403653932513
+403 -0.0158736541749091
+404 -0.0156974457240632
+405 -0.0181167763150603
+406 -0.0166788566307347
+407 -0.0180975807807039
+408 -0.0102853501517902
+409 -0.0153437162204268
+410 0.0979710078754703
+411 0.021440871598228
+412 0.0371454198455733
+413 0.0253571102027273
+414 0.0227276443059152
+415 0.101915236805497
+416 0.0635405858848997
+417 0.0221661378891733
+418 0.0270996559475876
+419 0.0299928379379863
+420 -0.0177873081118276
+421 -0.0176051191151391
+422 -0.0117281303593379
+423 -0.013306366759538
+424 -0.0189331445465995
+425 -0.015865418271051
+426 -0.0158088029122447
+427 -0.0187419731224742
+428 -0.0196315339939659
+429 -0.0154861746215526
+430 -0.0178360876528894
+431 -0.0193319397318428
+432 -0.0177297199409179
+433 -0.0183554889687674
+434 -0.0184208823533688
+435 -0.0122396577357641
+436 -0.0123492917667745
+437 -0.0175439953526604
+438 -0.0186111019818843
+439 -0.00971961709959576
+440 -0.0143165389296264
+441 -0.0164005922843576
+442 -0.0132806214338558
+443 -0.0153897804907211
+444 -0.0149226610955752
+445 -0.0161580725559834
+446 -0.0117152404534544
+447 0.0615441203316674
+448 0.0305601601558433
+449 0.0350768852591798
+450 0.026542742159402
+451 0.0220127678478309
+452 0.0626392669570081
+453 0.0651304401691263
+454 0.066454641622587
+455 0.0262150734837409
+456 -0.00708907991883236
+457 0.0224899268420003
+458 -0.0167773922489159
+459 -0.0122552342075114
+460 -0.00995490362784316
+461 -0.0177867736928084
+462 -0.018356900570592
+463 -0.0148615016520588
+464 -0.0148993799153167
+465 -0.0174924308469937
+466 -0.0139062884527871
+467 -0.0169155699762039
+468 -0.0176151358623509
+469 -0.018529629596926
+470 -0.0171234732753041
+471 -0.0168099527879603
+472 -0.0156260281448611
+473 -0.00797509847063728
+474 -0.0133340343499158
+475 -0.0168972023036313
+476 -0.0113479057717735
+477 -0.011961189414667
+478 -0.0152906312825423
+479 -0.0155644967932215
+480 -0.014521215308577
+481 -0.0128622749529332
+482 -0.0141888481401611
+483 -0.0161851374362205
+484 0.0249171103679042
+485 0.0252660269585891
+486 0.04058752667661
+487 0.0258186659046098
+488 0.0275225862715478
+489 0.0600609383170762
+490 0.0261628314767615
+491 0.0691832852264942
+492 0.0694273292329222
+493 -0.0138918138869676
+494 0.0281497919118445
+495 -0.0119297582637103
+496 -0.012445722104394
+497 -0.0152365517205078
+498 -0.0119682770076481
+499 -0.0168102415511826
+500 -0.0132602321806542
+501 -0.0162749170085761
+502 -0.0157874247447598
+503 -0.0143314681097962
+504 -0.0151373301279301
+505 -0.0162736515060562
+506 -0.0170997245763158
+507 -0.0169869002644868
+508 -0.0154802036412146
+509 -0.013854038240204
+510 -0.0151485070183504
+511 -0.00869753773999478
+512 -0.0140737135993086
+513 -0.0107650436900842
+514 -0.0132962323606625
+515 -0.0136429601231209
+516 -0.0155057052143115
+517 -0.0134332443796962
+518 -0.0123129109820222
+519 -0.0142180018449239
+520 -0.0150177576005828
+521 -0.0161252950528183
+522 0.0264250568660815
+523 0.0408783547796429
+524 0.031194610084782
+525 0.0288728641454938
+526 0.0641676357746677
+527 0.0239853005273055
+528 0.0300072680816552
+529 0.0736945294998491
+530 0.028012956538805
+531 0.0259732719006342
+532 -0.00990928630211568
+533 -0.0087387605842169
+534 -0.0137746654626445
+535 -0.0141412876283256
+536 -0.010029400862279
+537 -0.0150007749725246
+538 -0.0121537714685441
+539 -0.0144839491934252
+540 -0.0137950679588151
+541 -0.0155551392121605
+542 -0.0128911409577839
+543 -0.0152961676840741
+544 -0.0161369826243907
+545 -0.0148527760929147
+546 -0.013870773562618
+547 -0.0137226194734097
+548 -0.0113656379568685
+549 -0.00845176980813718
+550 -0.00933414448879775
+551 -0.0133281147011412
+552 -0.0122165348746803
+553 -0.0127303042014063
+554 -0.0128365256419083
+555 -0.0108554430140539
+556 -0.0130979026563391
+557 -0.0146601295923265
+558 -0.0142350683827201
+559 -0.0142543119821695
+560 0.0401428501979482
+561 0.0303680401593431
+562 0.0331394093682309
+563 0.0624790224369076
+564 0.0289179010523467
+565 0.0269736807010873
+566 0.0294760499995686
+567 0.0747760714226703
+568 -0.00997931599998069
+569 0.0266265362948006
+570 -0.00721129513546175
+571 -0.0127302032302545
+572 -0.0136267162889966
+573 -0.0142066353702017
+574 -0.00991164196188114
+575 -0.00996166830564141
+576 -0.0131573176468314
+577 -0.011434640474236
+578 -0.0148706383443339
+579 -0.0134129396964773
+580 -0.0113895405779604
+581 -0.0153189154780471
+582 -0.0150199426352393
+583 -0.0124159111813235
+584 -0.0113435779166304
+585 -0.00971798266945597
+586 -0.0123095479872052
+587 -0.00269803517441434
+588 -0.0127678761964892
+589 -0.0119102487047385
+590 -0.0115043060345689
+591 -0.0106658386617928
+592 -0.0106600448522206
+593 -0.011659738958058
+594 -0.01106663155357
+595 -0.0120386853981255
+596 -0.0127481791971609
+597 -0.00537363830084228
+598 0.0314689202072348
+599 0.032654353162099
+600 0.0639978451412954
+601 0.0283236694256126
+602 0.0317693531084274
+603 0.027542761382292
+604 0.02698217718116
+605 0.0361622659750207
+606 0.0320247155873757
+607 -0.00813391858463189
+608 -0.0089593887672382
+609 -0.0119010871906848
+610 -0.0124880990128273
+611 -0.0121364351320394
+612 -0.00971670182824936
+613 -0.0102177605462013
+614 -0.00898879705064074
+615 -0.013228009191572
+616 -0.012444080731119
+617 -0.0125819657984578
+618 -0.0106457926520048
+619 -0.0137483281342092
+620 -0.0135504808411789
+621 -0.0114612446080959
+622 -0.00821287310238534
+623 -0.0104378096847016
+624 -0.00593940096538122
+625 -0.00945814044610632
+626 -0.0101588782962685
+627 -0.0111243964828339
+628 -0.00950644868084363
+629 -0.00843830240019815
+630 -0.0122240327224205
+631 -0.0121911767968013
+632 -0.0106320087647656
+633 -0.0091538953720945
+634 -0.00833412226908421
+635 -0.00479924172227301
+636 0.0335905043465549
+637 0.0695170041831408
+638 0.0270790255635657
+639 0.0321106733648098
+640 0.0313560382377176
+641 0.0282951882582407
+642 0.0286246187371558
+643 -0.0063978013638528
+644 0.0304346790629898
+645 -0.0101048058759809
+646 -0.00730849974907403
+647 -0.010438994695384
+648 -0.0112449830718235
+649 -0.0113664024129399
+650 -0.00608318090180963
+651 -0.00840928737010642
+652 -0.0108644455614179
+653 -0.010794161792753
+654 -0.0114845408302525
+655 -0.0109919991005556
+656 -0.00951218627321188
+657 -0.0117973727840752
+658 -0.0116097431098058
+659 -0.00670996120713619
+660 -0.0087566923862707
+661 -0.00768893771119313
+662 -0.00792227368859181
+663 -0.0072108108823534
+664 -0.00863418502611649
+665 -0.00848535095588438
+666 -0.00750079906528092
+667 -0.00902829779223548
+668 -0.0104029286615084
+669 -0.00972615613411735
+670 -0.00909686229570264
+671 -0.00489514770930345
+672 -0.00695727933803365
+673 -0.00291923866250643
+674 0.0692585752006358
+675 0.0338324022772704
+676 0.0312432314045003
+677 0.0301206988202449
+678 0.0318944076704347
+679 0.0308282822415121
+680 -0.00918999100874598
+681 0.0315959820198552
+682 -0.00790274938593563
+683 -0.00905781884326524
+684 -0.00978094259623583
+685 -0.00713889275972127
+686 -0.00961735482798763
+687 -0.00462928907883874
+688 -0.00708992015115961
+689 -0.0103894616795413
+690 -0.00975021468154266
+691 -0.0104107842274988
+692 -0.00992064479267111
+693 -0.0101176695314485
+694 -0.0104463991054629
+695 -0.00746960217815067
+696 -0.00654218027790495
+697 -0.0072389149982618
+698 -0.00618599001631964
+699 -0.00987786436517789
+700 -0.00673370918278097
+701 -0.00741759762031304
+702 -0.00541549527991575
+703 -0.00791781857083014
+704 -0.00787381692952382
+705 -0.00794395001729855
+706 -0.00931768673974245
+707 -0.00885678465821695
+708 -0.0052821815238511
+709 -0.00521693921004783
+710 -0.00576093393541424
+711 0.0319052243530813
+712 0.0335565990727355
+713 0.0359823614765673
+714 0.0310776016839443
+715 0.0324813323954347
+716 0.0341278653693179
+717 -0.00771207564784067
+718 0.0276493611582263
+719 -0.00348763960636761
+720 -0.00758712167000528
+721 -0.00857064851604708
+722 -0.00851623359127258
+723 -0.00860306547563313
+724 -0.00613401688706074
+725 -0.00513329277378087
+726 -0.00905815149013341
+727 -0.00906250727280879
+728 -0.00928036762666381
+729 -0.00830114918655625
+730 -0.00888782794632727
+731 -0.00904256610543205
+732 -0.00874136315610037
+733 -0.00531018786452449
+734 -0.00629165130613466
+735 -0.00755517067228936
+736 -0.00836182239325517
+737 -0.00809350876481861
+738 -0.00404124535306633
+739 -0.00561644195626163
+740 -0.00642305805867293
+741 -0.00816305467996883
+742 -0.00843581049472936
+743 -0.00672325206596123
+744 -0.00617215358093702
+745 -0.00402751925690743
+746 -0.00479725155053775
+747 -0.00342071760962384
+748 -0.0076001254677333
+749 0.0344911275393927
+750 0.0357890953530814
+751 0.0369236838641285
+752 0.0337953594669526
+753 0.0341196656886643
+754 -0.00659802662549373
+755 0.0315371138736742
+756 -0.00562959157006591
+757 -0.00365306265936607
+758 -0.00637937791804702
+759 -0.00728163692006943
+760 -0.00728167255033979
+761 -0.00486863763712198
+762 -0.00700194438994883
+763 -0.00488445712486066
+764 -0.00785107429883577
+765 -0.00743663889427734
+766 -0.0075555414143233
+767 -0.0082175974779749
+768 -0.00762712314452127
+769 -0.00716801816399294
+770 -0.00420432905589099
+771 -0.00646377431872973
+772 -0.00627655191972345
+773 -0.0068281800863105
+774 -0.00646314628967681
+775 -0.00545387418053753
+776 -0.00272565261231244
+777 -0.00644191975512085
+778 -0.00690509982226062
+779 -0.00709925853315763
+780 -0.00694005333594523
+781 -0.00625875545170498
+782 -0.00292200977585102
+783 -0.00321016024715532
+784 -0.00336849507857711
+785 -0.00596633161271771
+786 -0.00616166058124168
+787 0.03411477548233
+788 0.03523911486873
+789 0.039313174460712
+790 0.0358510918513492
+791 -0.00378913539308921
+792 0.0304194265074042
+793 -0.0038004308918757
+794 -0.00607189262016905
+795 -0.00587612619804128
+796 -0.00189219359140836
+797 -0.00616375618998826
+798 -0.00388685360401677
+799 -0.00556254294258616
+800 -0.00661778351426878
+801 -0.00382440352172051
+802 -0.00647820073687594
+803 -0.00624655145167987
+804 -0.00667068925870065
+805 -0.00648578196572712
+806 -0.0051558107815927
+807 -0.00231291615968645
+808 -0.00505615473087768
+809 -0.00587295803700975
+810 -0.00558124863643099
+811 -0.00536491992472214
+812 -0.00398836838292933
+813 -0.00377202632549738
+814 -0.002354118299516
+815 -0.00450512819274966
+816 -0.0052767354763421
+817 -0.00524186198269607
+818 -0.00538929450465706
+819 -0.00531625688326681
+820 -0.00559074601189695
+821 -0.00531052145605409
+822 -0.00506016636387018
+823 -0.00558340516310152
+824 -0.00480493075033995
+825 0.0322805865937449
+826 0.0378874582814526
+827 0.0388905020209905
+828 0.00140630493053477
+829 0.0327652229435057
+830 -0.00223687990639532
+831 -0.00415072629779562
+832 -0.00449816632891999
+833 -0.00471900257056604
+834 -0.00380655567933039
+835 -0.00208013080352473
+836 -0.00399065266148802
+837 -0.00487092683399181
+838 -0.0050959015942598
+839 -0.00191592007441914
+840 -0.00461100733700934
+841 -0.00502472638398927
+842 -0.00505288732904903
+843 -0.00438730255591126
+844 -0.00306177948534003
+845 -0.00375916415653544
+846 -0.00446006819331235
+847 -0.00529861753336898
+848 -0.00366324407821308
+849 -0.00260207768467577
+850 -0.00307568973842944
+851 -0.00423298618954815
+852 -0.00402026548184328
+853 -0.00146181843080695
+854 -0.00349341567107831
+855 -0.00433554634082064
+856 -0.00410204223433599
+857 -0.00434967848256952
+858 -0.00421703547450881
+859 -0.00382881572564153
+860 -0.00423970806851707
+861 -0.00437449172653197
+862 -0.00400502122442197
+863 0.0346819215614161
+864 0.0348750856830455
+865 -0.00265543722265669
+866 0.0380644512814575
+867 -5.14244684871617e-05
+868 -0.0029850292925082
+869 -0.00280199446175912
+870 -0.00310596389994767
+871 -0.00343511488292023
+872 -0.000171378148703489
+873 -0.0024459240224584
+874 -0.00327675207097342
+875 -0.00348581260906698
+876 -0.00355868259309655
+877 -0.000312461719204031
+878 -0.00355336474543735
+879 -0.00357392139745643
+880 -0.00290172241076185
+881 -0.00208381746845654
+882 -0.00191420039525358
+883 -0.00288084255403359
+884 -0.00402165110428679
+885 -0.00363823711845451
+886 -0.00105719975984341
+887 -0.00194304900141352
+888 -0.0028117193732005
+889 -0.00272354659953838
+890 -0.00269119684418979
+891 -0.0024739833326293
+892 -0.00264720107421195
+893 -0.00266281337322763
+894 -0.00271486287490391
+895 -0.0025966883492992
+896 -0.00275998355842941
+897 -0.00285830804400797
+898 -0.00283220277180079
+899 -0.00268773055778214
+900 -0.00284073923200707
+901 0.0353145424004993
+902 -0.00160304708129049
+903 0.0348425254145825
+904 2.8677502125498e-05
+905 0.000437164769156674
+906 -0.000353406460783275
+907 -0.00195469155311098
+908 -0.00181504012345376
+909 0.000213017105712491
+910 -0.001310254306005
+911 -0.00211504011023419
+912 -0.00220453472901432
+913 -0.00221445718259423
+914 -0.0019385529058544
+915 -0.00242106879847995
+916 0.000515093602106525
+917 -0.00157522783064606
+918 -0.000809182215147043
+919 -0.00125292469032103
+920 -0.00240883966759777
+921 -0.0021786367875747
+922 -0.00240937489397921
+923 -0.00116795158553355
+924 -0.000727426386542781
+925 -0.00133194403721344
+926 -0.00124546108708765
+927 -0.00148107783605636
+928 -0.00142616980555449
+929 -0.00146243841366756
+930 -0.0015283737803334
+931 -0.00154540562504725
+932 -0.00155805559628689
+933 -0.00151938623493131
+934 -0.00165541232298659
+935 -0.00168144891364875
+936 -0.00132559687940882
+937 -0.00160394278309398
+938 -0.0017363807642805
+939 -0.00167995411949275
+940 0.0354478346047755
+941 0.00106969481951657
+942 -0.000561313854486038
+943 -0.000457998303574142
+944 -0.000583885106294125
+945 -0.000525159904309248
+946 -0.000517315333414318
+947 -0.000721221933781515
+948 -0.000829549124890304
+949 -8.82882583545919e-05
+950 -0.000766770294365053
+951 -0.000811881521540676
+952 -0.000891788154480318
+953 -0.000934560208414364
+954 -0.00079422177360351
+955 -0.000838129010273254
+956 -0.000963325512884482
+957 -0.00102235934683932
+958 -0.00106440392780229
+959 -0.000989883649450528
+960 0.000386274557612681
+961 -0.000389777489444674
+962 -0.00118692846255399
+963 -5.09408200005586e-06
+964 -5.89078730563787e-05
+965 -1.47060551334381e-05
+966 -0.000136166417132319
+967 -0.000121512032975118
+968 -0.00017156987502174
+969 -0.000156708081095913
+970 -0.000153840321519638
+971 -0.000310390758729453
+972 -0.000312404884024801
+973 -0.000200418566814807
+974 -0.000375662527155661
+975 -0.000354596399099672
+976 -0.000424295858947903
+977 -4.46088202453899e-06
+978 0.00224800854296348
+979 0.000523082860817624
+980 0.00048326199320117
+981 0.000448693340206397
+982 0.000421635212488891
+983 0.000437949926365211
+984 0.000428040241678261
+985 0.000391002232599501
+986 0.00036566913933478
+987 0.000381018446039441
+988 0.000321514512415979
+989 0.000287957422008028
+990 0.000255617051800765
+991 0.000221662354369779
+992 0.000188701605125869
+993 0.00016002049297156
+994 0.000127317707925566
+995 9.31667901426005e-05
+996 6.3380231067732e-05
+997 3.423275902354e-05
+998 -2.14223799528709e-06
+999 -3.67741480724576e-05
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat
new file mode 100644
index 0000000..484b947
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat
@@ -0,0 +1,1001 @@
+#scatter real total user system repeat
+1 0.00562119483947754 0.00999999999999979 0.00999999999999979 0.0 1
+2 0.00404691696166992 0.0 0.0 0.0 2
+3 0.00373387336730957 0.00999999999999979 0.00999999999999979 0.0 3
+4 0.00375699996948242 0.0 0.0 0.0 4
+5 0.00371694564819336 0.0 0.0 0.0 5
+6 0.00381088256835938 0.0100000000000007 0.0100000000000007 0.0 6
+7 0.00370693206787109 0.0 0.0 0.0 7
+8 0.00368213653564453 0.00999999999999979 0.00999999999999979 0.0 8
+9 0.0037529468536377 0.0 0.0 0.0 9
+10 0.00371718406677246 0.0 0.0 0.0 10
+11 0.00370693206787109 0.00999999999999979 0.00999999999999979 0.0 11
+12 0.00371503829956055 0.0 0.0 0.0 12
+13 0.00367999076843262 0.0 0.0 0.0 13
+14 0.0037379264831543 0.00999999999999979 0.00999999999999979 0.0 14
+15 0.00368285179138184 0.0 0.0 0.0 15
+16 0.0036928653717041 0.00999999999999979 0.00999999999999979 0.0 16
+17 0.00363802909851074 0.0 0.0 0.0 17
+18 0.00420713424682617 0.0 0.0 0.0 18
+19 0.0046851634979248 0.0100000000000007 0.0100000000000007 0.0 19
+20 0.00365090370178223 0.0 0.0 0.0 20
+21 0.0036470890045166 0.00999999999999979 0.00999999999999979 0.0 21
+22 0.00363302230834961 0.0 0.0 0.0 22
+23 0.00362706184387207 0.0 0.0 0.0 23
+24 0.00369381904602051 0.00999999999999979 0.00999999999999979 0.0 24
+25 0.00363802909851074 0.0 0.0 0.0 25
+26 0.00362586975097656 0.0 0.0 0.0 26
+27 0.0036308765411377 0.00999999999999979 0.00999999999999979 0.0 27
+28 0.00364899635314941 0.0 0.0 0.0 28
+29 0.00363993644714355 0.0100000000000007 0.0100000000000007 0.0 29
+30 0.0036160945892334 0.0 0.0 0.0 30
+31 0.00362014770507812 0.0 0.0 0.0 31
+32 0.0036470890045166 0.00999999999999979 0.00999999999999979 0.0 32
+33 0.00372695922851562 0.0 0.0 0.0 33
+34 0.00366806983947754 0.0 0.0 0.0 34
+35 0.00362205505371094 0.00999999999999979 0.00999999999999979 0.0 35
+36 0.00366711616516113 0.0 0.0 0.0 36
+37 0.00369906425476074 0.00999999999999979 0.00999999999999979 0.0 37
+38 0.00364184379577637 0.0 0.0 0.0 38
+39 0.0289762020111084 0.0300000000000002 0.0300000000000002 0.0 39
+40 0.00372695922851562 0.0 0.0 0.0 40
+41 0.00367403030395508 0.00999999999999979 0.00999999999999979 0.0 41
+42 0.00373101234436035 0.0 0.0 0.0 42
+43 0.00379014015197754 0.0 0.0 0.0 43
+44 0.00367498397827148 0.0100000000000007 0.0100000000000007 0.0 44
+45 0.00369691848754883 0.0 0.0 0.0 45
+46 0.00368881225585938 0.0 0.0 0.0 46
+47 0.00369405746459961 0.00999999999999979 0.00999999999999979 0.0 47
+48 0.00369095802307129 0.0 0.0 0.0 48
+49 0.00370192527770996 0.00999999999999979 0.00999999999999979 0.0 49
+50 0.00373387336730957 0.0 0.0 0.0 50
+51 0.00370502471923828 0.0 0.0 0.0 51
+52 0.00367999076843262 0.00999999999999979 0.00999999999999979 0.0 52
+53 0.00374007225036621 0.0 0.0 0.0 53
+54 0.00364995002746582 0.0 0.0 0.0 54
+55 0.00367188453674316 0.0100000000000007 0.0100000000000007 0.0 55
+56 0.00363993644714355 0.0 0.0 0.0 56
+57 0.00365900993347168 0.00999999999999979 0.00999999999999979 0.0 57
+58 0.0036160945892334 0.0 0.0 0.0 58
+59 0.00369095802307129 0.0 0.0 0.0 59
+60 0.00452899932861328 0.00999999999999979 0.00999999999999979 0.0 60
+61 0.00462913513183594 0.0 0.0 0.0 61
+62 0.00413894653320312 0.00999999999999979 0.00999999999999979 0.0 62
+63 0.0036470890045166 0.0 0.0 0.0 63
+64 0.00361418724060059 0.0 0.0 0.0 64
+65 0.00383710861206055 0.0100000000000007 0.0100000000000007 0.0 65
+66 0.00362491607666016 0.0 0.0 0.0 66
+67 0.0036318302154541 0.0 0.0 0.0 67
+68 0.0036311149597168 0.00999999999999979 0.00999999999999979 0.0 68
+69 0.00365900993347168 0.0 0.0 0.0 69
+70 0.00515103340148926 0.00999999999999979 0.00999999999999979 0.0 70
+71 0.00363993644714355 0.0 0.0 0.0 71
+72 0.00365900993347168 0.0 0.0 0.0 72
+73 0.00374507904052734 0.00999999999999979 0.00999999999999979 0.0 73
+74 0.00366497039794922 0.0 0.0 0.0 74
+75 0.00367498397827148 0.00999999999999979 0.00999999999999979 0.0 75
+76 0.0036470890045166 0.0 0.0 0.0 76
+77 0.00451517105102539 0.0 0.0 0.0 77
+78 0.0300049781799316 0.0300000000000002 0.0300000000000002 0.0 78
+79 0.00374197959899902 0.00999999999999979 0.00999999999999979 0.0 79
+80 0.00371098518371582 0.0 0.0 0.0 80
+81 0.00372600555419922 0.0 0.0 0.0 81
+82 0.00376200675964355 0.0100000000000007 0.0100000000000007 0.0 82
+83 0.00369596481323242 0.0 0.0 0.0 83
+84 0.00372099876403809 0.00999999999999979 0.00999999999999979 0.0 84
+85 0.00370216369628906 0.0 0.0 0.0 85
+86 0.00374007225036621 0.0 0.0 0.0 86
+87 0.00369381904602051 0.00999999999999979 0.00999999999999979 0.0 87
+88 0.00372195243835449 0.0 0.0 0.0 88
+89 0.00368881225585938 0.0 0.0 0.0 89
+90 0.00371909141540527 0.00999999999999979 0.00999999999999979 0.0 90
+91 0.00371909141540527 0.0 0.0 0.0 91
+92 0.00366497039794922 0.0100000000000007 0.0100000000000007 0.0 92
+93 0.00366401672363281 0.0 0.0 0.0 93
+94 0.00378704071044922 0.0 0.0 0.0 94
+95 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 95
+96 0.00405406951904297 0.0 0.0 0.0 96
+97 0.00365591049194336 0.0 0.0 0.0 97
+98 0.00371098518371582 0.00999999999999979 0.00999999999999979 0.0 98
+99 0.00363802909851074 0.0 0.0 0.0 99
+100 0.0036461353302002 0.00999999999999979 0.00999999999999979 0.0 100
+101 0.00359797477722168 0.0 0.0 0.0 101
+102 0.00361990928649902 0.0 0.0 0.0 102
+103 0.00364899635314941 0.0100000000000007 0.0100000000000007 0.0 103
+104 0.00359296798706055 0.0 0.0 0.0 104
+105 0.00363802909851074 0.0 0.0 0.0 105
+106 0.00417685508728027 0.00999999999999979 0.00999999999999979 0.0 106
+107 0.00371980667114258 0.0 0.0 0.0 107
+108 0.0036470890045166 0.00999999999999979 0.00999999999999979 0.0 108
+109 0.00368213653564453 0.0 0.0 0.0 109
+110 0.00360202789306641 0.0 0.0 0.0 110
+111 0.00362992286682129 0.00999999999999979 0.00999999999999979 0.0 111
+112 0.0036311149597168 0.0 0.0 0.0 112
+113 0.00362801551818848 0.0 0.0 0.0 113
+114 0.00364995002746582 0.0100000000000007 0.0100000000000007 0.0 114
+115 0.00370001792907715 0.0 0.0 0.0 115
+116 0.0305509567260742 0.0299999999999994 0.0299999999999994 0.0 116
+117 0.00376200675964355 0.0100000000000007 0.0100000000000007 0.0 117
+118 0.0038001537322998 0.0 0.0 0.0 118
+119 0.00374984741210938 0.0 0.0 0.0 119
+120 0.00397920608520508 0.00999999999999979 0.00999999999999979 0.0 120
+121 0.00372481346130371 0.0 0.0 0.0 121
+122 0.00369715690612793 0.0 0.0 0.0 122
+123 0.00371694564819336 0.00999999999999979 0.00999999999999979 0.0 123
+124 0.00372195243835449 0.0 0.0 0.0 124
+125 0.00375914573669434 0.00999999999999979 0.00999999999999979 0.0 125
+126 0.00368499755859375 0.0 0.0 0.0 126
+127 0.00371503829956055 0.0 0.0 0.0 127
+128 0.00380897521972656 0.00999999999999979 0.00999999999999979 0.0 128
+129 0.00403499603271484 0.0 0.0 0.0 129
+130 0.00370502471923828 0.0100000000000007 0.0100000000000007 0.0 130
+131 0.00371289253234863 0.0 0.0 0.0 131
+132 0.00365591049194336 0.0 0.0 0.0 132
+133 0.00368094444274902 0.00999999999999979 0.00999999999999979 0.0 133
+134 0.0036768913269043 0.0 0.0 0.0 134
+135 0.00362706184387207 0.0 0.0 0.0 135
+136 0.00366616249084473 0.00999999999999979 0.00999999999999979 0.0 136
+137 0.0036470890045166 0.0 0.0 0.0 137
+138 0.00362181663513184 0.0 0.0 0.0 138
+139 0.00364089012145996 0.00999999999999979 0.00999999999999979 0.0 139
+140 0.00363707542419434 0.0 0.0 0.0 140
+141 0.00359892845153809 0.0100000000000007 0.0100000000000007 0.0 141
+142 0.00361514091491699 0.0 0.0 0.0 142
+143 0.00365495681762695 0.0 0.0 0.0 143
+144 0.00371885299682617 0.00999999999999979 0.00999999999999979 0.0 144
+145 0.00364208221435547 0.0 0.0 0.0 145
+146 0.00365304946899414 0.0 0.0 0.0 146
+147 0.00368404388427734 0.00999999999999979 0.00999999999999979 0.0 147
+148 0.00365900993347168 0.0 0.0 0.0 148
+149 0.00368785858154297 0.00999999999999979 0.00999999999999979 0.0 149
+150 0.003662109375 0.0 0.0 0.0 150
+151 0.00363397598266602 0.0 0.0 0.0 151
+152 0.00362491607666016 0.0100000000000007 0.0100000000000007 0.0 152
+153 0.00366687774658203 0.0 0.0 0.0 153
+154 0.0295231342315674 0.0299999999999994 0.0299999999999994 0.0 154
+155 0.00366806983947754 0.0 0.0 0.0 155
+156 0.00370311737060547 0.0100000000000007 0.0100000000000007 0.0 156
+157 0.0037238597869873 0.0 0.0 0.0 157
+158 0.00376701354980469 0.00999999999999979 0.00999999999999979 0.0 158
+159 0.0036771297454834 0.0 0.0 0.0 159
+160 0.00372195243835449 0.0 0.0 0.0 160
+161 0.00371599197387695 0.00999999999999979 0.00999999999999979 0.0 161
+162 0.00371003150939941 0.0 0.0 0.0 162
+163 0.00369811058044434 0.0 0.0 0.0 163
+164 0.00378203392028809 0.00999999999999979 0.00999999999999979 0.0 164
+165 0.00370502471923828 0.0 0.0 0.0 165
+166 0.00371003150939941 0.0100000000000007 0.0100000000000007 0.0 166
+167 0.00371599197387695 0.0 0.0 0.0 167
+168 0.00370192527770996 0.0 0.0 0.0 168
+169 0.00369501113891602 0.00999999999999979 0.00999999999999979 0.0 169
+170 0.00369691848754883 0.0 0.0 0.0 170
+171 0.00400686264038086 0.0 0.0 0.0 171
+172 0.00524497032165527 0.00999999999999979 0.00999999999999979 0.0 172
+173 0.00366020202636719 0.0 0.0 0.0 173
+174 0.00366806983947754 0.00999999999999979 0.00999999999999979 0.0 174
+175 0.00367379188537598 0.0 0.0 0.0 175
+176 0.00362706184387207 0.0 0.0 0.0 176
+177 0.00365996360778809 0.0100000000000007 0.0100000000000007 0.0 177
+178 0.00365900993347168 0.0 0.0 0.0 178
+179 0.00363492965698242 0.00999999999999979 0.00999999999999979 0.0 179
+180 0.00363397598266602 0.0 0.0 0.0 180
+181 0.00366401672363281 0.0 0.0 0.0 181
+182 0.00363302230834961 0.00999999999999979 0.00999999999999979 0.0 182
+183 0.00364494323730469 0.0 0.0 0.0 183
+184 0.00361990928649902 0.0 0.0 0.0 184
+185 0.00379490852355957 0.00999999999999979 0.00999999999999979 0.0 185
+186 0.0036468505859375 0.0 0.0 0.0 186
+187 0.00370502471923828 0.00999999999999979 0.00999999999999979 0.0 187
+188 0.00387907028198242 0.0 0.0 0.0 188
+189 0.00541114807128906 0.0 0.0 0.0 189
+190 0.00428199768066406 0.0100000000000007 0.0100000000000007 0.0 190
+191 0.00368618965148926 0.0 0.0 0.0 191
+192 0.0293948650360107 0.0299999999999994 0.0299999999999994 0.0 192
+193 0.00434708595275879 0.0100000000000007 0.0100000000000007 0.0 193
+194 0.00372600555419922 0.0 0.0 0.0 194
+195 0.00628900527954102 0.00999999999999979 0.00999999999999979 0.0 195
+196 0.00624394416809082 0.0 0.0 0.0 196
+197 0.00649094581604004 0.00999999999999979 0.00999999999999979 0.0 197
+198 0.00419712066650391 0.0 0.0 0.0 198
+199 0.00371003150939941 0.00999999999999979 0.00999999999999979 0.0 199
+200 0.0037531852722168 0.0 0.0 0.0 200
+201 0.00369119644165039 0.0 0.0 0.0 201
+202 0.00369000434875488 0.0100000000000007 0.0100000000000007 0.0 202
+203 0.00372099876403809 0.0 0.0 0.0 203
+204 0.00369000434875488 0.00999999999999979 0.00999999999999979 0.0 204
+205 0.00371885299682617 0.0 0.0 0.0 205
+206 0.00367903709411621 0.0 0.0 0.0 206
+207 0.00364303588867188 0.00999999999999979 0.00999999999999979 0.0 207
+208 0.0037541389465332 0.0 0.0 0.0 208
+209 0.00364303588867188 0.0 0.0 0.0 209
+210 0.00363898277282715 0.00999999999999979 0.00999999999999979 0.0 210
+211 0.00363588333129883 0.0 0.0 0.0 211
+212 0.00367999076843262 0.0100000000000007 0.0100000000000007 0.0 212
+213 0.00364208221435547 0.0 0.0 0.0 213
+214 0.00365614891052246 0.0 0.0 0.0 214
+215 0.00363779067993164 0.00999999999999979 0.00999999999999979 0.0 215
+216 0.00362610816955566 0.0 0.0 0.0 216
+217 0.0036470890045166 0.0 0.0 0.0 217
+218 0.00366711616516113 0.00999999999999979 0.00999999999999979 0.0 218
+219 0.00364995002746582 0.0 0.0 0.0 219
+220 0.0036308765411377 0.0 0.0 0.0 220
+221 0.0036308765411377 0.00999999999999979 0.00999999999999979 0.0 221
+222 0.00362896919250488 0.0 0.0 0.0 222
+223 0.00364899635314941 0.0100000000000007 0.0100000000000007 0.0 223
+224 0.00365805625915527 0.0 0.0 0.0 224
+225 0.00364589691162109 0.0 0.0 0.0 225
+226 0.00363683700561523 0.00999999999999979 0.00999999999999979 0.0 226
+227 0.00364995002746582 0.0 0.0 0.0 227
+228 0.00421810150146484 0.0 0.0 0.0 228
+229 0.00510215759277344 0.00999999999999979 0.00999999999999979 0.0 229
+230 0.0295019149780273 0.0300000000000002 0.0300000000000002 0.0 230
+231 0.00370287895202637 0.0 0.0 0.0 231
+232 0.00370287895202637 0.00999999999999979 0.00999999999999979 0.0 232
+233 0.00372409820556641 0.0 0.0 0.0 233
+234 0.00373697280883789 0.0 0.0 0.0 234
+235 0.00371003150939941 0.00999999999999979 0.00999999999999979 0.0 235
+236 0.00374388694763184 0.0 0.0 0.0 236
+237 0.00366711616516113 0.00999999999999979 0.00999999999999979 0.0 237
+238 0.00371408462524414 0.0 0.0 0.0 238
+239 0.0048530101776123 0.0 0.0 0.0 239
+240 0.00423502922058105 0.0100000000000007 0.0100000000000007 0.0 240
+241 0.00370502471923828 0.0 0.0 0.0 241
+242 0.00370383262634277 0.00999999999999979 0.00999999999999979 0.0 242
+243 0.00366306304931641 0.0 0.0 0.0 243
+244 0.00367593765258789 0.0 0.0 0.0 244
+245 0.00371599197387695 0.00999999999999979 0.00999999999999979 0.0 245
+246 0.00369501113891602 0.0 0.0 0.0 246
+247 0.00366902351379395 0.0 0.0 0.0 247
+248 0.00362110137939453 0.00999999999999979 0.00999999999999979 0.0 248
+249 0.00362896919250488 0.0 0.0 0.0 249
+250 0.00362896919250488 0.0100000000000007 0.0100000000000007 0.0 250
+251 0.00362205505371094 0.0 0.0 0.0 251
+252 0.00364923477172852 0.0 0.0 0.0 252
+253 0.00362801551818848 0.00999999999999979 0.00999999999999979 0.0 253
+254 0.00369715690612793 0.0 0.0 0.0 254
+255 0.00363993644714355 0.0 0.0 0.0 255
+256 0.00364518165588379 0.00999999999999979 0.00999999999999979 0.0 256
+257 0.00360393524169922 0.0 0.0 0.0 257
+258 0.00365090370178223 0.00999999999999979 0.00999999999999979 0.0 258
+259 0.00365996360778809 0.0 0.0 0.0 259
+260 0.00363016128540039 0.0 0.0 0.0 260
+261 0.00363707542419434 0.0100000000000007 0.0100000000000007 0.0 261
+262 0.00364112854003906 0.0 0.0 0.0 262
+263 0.00367903709411621 0.0 0.0 0.0 263
+264 0.00365304946899414 0.00999999999999979 0.00999999999999979 0.0 264
+265 0.00365900993347168 0.0 0.0 0.0 265
+266 0.00364804267883301 0.00999999999999979 0.00999999999999979 0.0 266
+267 0.00368404388427734 0.0 0.0 0.0 267
+268 0.02935791015625 0.0300000000000002 0.0300000000000002 0.0 268
+269 0.00368499755859375 0.0 0.0 0.0 269
+270 0.00371789932250977 0.00999999999999979 0.00999999999999979 0.0 270
+271 0.0037848949432373 0.0 0.0 0.0 271
+272 0.00371384620666504 0.0 0.0 0.0 272
+273 0.00371098518371582 0.00999999999999979 0.00999999999999979 0.0 273
+274 0.00377702713012695 0.0 0.0 0.0 274
+275 0.00371503829956055 0.0 0.0 0.0 275
+276 0.00372791290283203 0.0100000000000007 0.0100000000000007 0.0 276
+277 0.00372004508972168 0.0 0.0 0.0 277
+278 0.00366806983947754 0.00999999999999979 0.00999999999999979 0.0 278
+279 0.00369620323181152 0.0 0.0 0.0 279
+280 0.00374603271484375 0.0 0.0 0.0 280
+281 0.00559902191162109 0.00999999999999979 0.00999999999999979 0.0 281
+282 0.00370311737060547 0.0 0.0 0.0 282
+283 0.00371289253234863 0.00999999999999979 0.00999999999999979 0.0 283
+284 0.00368905067443848 0.0 0.0 0.0 284
+285 0.0037989616394043 0.0 0.0 0.0 285
+286 0.00368595123291016 0.00999999999999979 0.0100000000000007 0.0 286
+287 0.00365710258483887 0.0 0.0 0.0 287
+288 0.00366306304931641 0.00999999999999979 0.00999999999999979 0.0 288
+289 0.00366091728210449 0.0 0.0 0.0 289
+290 0.00363683700561523 0.0 0.0 0.0 290
+291 0.00508499145507812 0.00999999999999979 0.00999999999999979 0.0 291
+292 0.00364899635314941 0.0 0.0 0.0 292
+293 0.00364184379577637 0.0 0.0 0.0 293
+294 0.00365900993347168 0.00999999999999979 0.00999999999999979 0.0 294
+295 0.00361919403076172 0.0 0.0 0.0 295
+296 0.00365996360778809 0.00999999999999979 0.00999999999999979 0.0 296
+297 0.00385499000549316 0.0 0.0 0.0 297
+298 0.00486421585083008 0.0 0.0 0.0 298
+299 0.00370907783508301 0.00999999999999979 0.00999999999999979 0.0 299
+300 0.00366020202636719 0.0 0.0 0.0 300
+301 0.00364780426025391 0.00999999999999979 0.00999999999999979 0.0 301
+302 0.00360703468322754 0.0 0.0 0.0 302
+303 0.00366711616516113 0.0 0.0 0.0 303
+304 0.00365304946899414 0.0100000000000016 0.0100000000000016 0.0 304
+305 0.0293490886688232 0.0299999999999994 0.0299999999999994 0.0 305
+306 0.00373411178588867 0.0 0.0 0.0 306
+307 0.00367593765258789 0.0 0.0 0.0 307
+308 0.0037379264831543 0.00999999999999979 0.00999999999999979 0.0 308
+309 0.00373697280883789 0.0 0.0 0.0 309
+310 0.00374507904052734 0.0 0.0 0.0 310
+311 0.00374889373779297 0.00999999999999979 0.00999999999999979 0.0 311
+312 0.00372195243835449 0.0 0.0 0.0 312
+313 0.00367879867553711 0.00999999999999979 0.00999999999999979 0.0 313
+314 0.00386714935302734 0.0 0.0 0.0 314
+315 0.00381088256835938 0.0 0.0 0.0 315
+316 0.00370597839355469 0.00999999999999979 0.00999999999999979 0.0 316
+317 0.00370287895202637 0.0 0.0 0.0 317
+318 0.00370883941650391 0.0 0.0 0.0 318
+319 0.0037989616394043 0.0100000000000016 0.0100000000000016 0.0 319
+320 0.00371098518371582 0.0 0.0 0.0 320
+321 0.00366806983947754 0.00999999999999979 0.00999999999999979 0.0 321
+322 0.00365209579467773 0.0 0.0 0.0 322
+323 0.00365400314331055 0.0 0.0 0.0 323
+324 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 324
+325 0.00365400314331055 0.0 0.0 0.0 325
+326 0.00417399406433105 0.00999999999999979 0.00999999999999979 0.0 326
+327 0.00363588333129883 0.0 0.0 0.0 327
+328 0.00362396240234375 0.0 0.0 0.0 328
+329 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 329
+330 0.0036461353302002 0.0 0.0 0.0 330
+331 0.00362610816955566 0.0 0.0 0.0 331
+332 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 332
+333 0.00365900993347168 0.0 0.0 0.0 333
+334 0.00363802909851074 0.0 0.0 0.0 334
+335 0.00365495681762695 0.00999999999999979 0.00999999999999979 0.0 335
+336 0.0036931037902832 0.0 0.0 0.0 336
+337 0.00366592407226562 0.00999999999999979 0.00999999999999979 0.0 337
+338 0.0036778450012207 0.0 0.0 0.0 338
+339 0.00438904762268066 0.0 0.0 0.0 339
+340 0.00471091270446777 0.0100000000000016 0.0100000000000016 0.0 340
+341 0.00389599800109863 0.0 0.0 0.0 341
+342 0.00366497039794922 0.00999999999999979 0.00999999999999979 0.0 342
+343 0.0298199653625488 0.0299999999999994 0.0299999999999994 0.0 343
+344 0.00373697280883789 0.0 0.0 0.0 344
+345 0.00366497039794922 0.0 0.0 0.0 345
+346 0.00375890731811523 0.00999999999999979 0.00999999999999979 0.0 346
+347 0.00376486778259277 0.0 0.0 0.0 347
+348 0.00379490852355957 0.00999999999999979 0.00999999999999979 0.0 348
+349 0.00371098518371582 0.0 0.0 0.0 349
+350 0.00410985946655273 0.0 0.0 0.0 350
+351 0.00371313095092773 0.00999999999999979 0.00999999999999979 0.0 351
+352 0.00372481346130371 0.0 0.0 0.0 352
+353 0.00371789932250977 0.0 0.0 0.0 353
+354 0.00374507904052734 0.00999999999999979 0.00999999999999979 0.0 354
+355 0.00374102592468262 0.0 0.0 0.0 355
+356 0.00371098518371582 0.0100000000000016 0.0100000000000016 0.0 356
+357 0.00369906425476074 0.0 0.0 0.0 357
+358 0.00367617607116699 0.0 0.0 0.0 358
+359 0.00366997718811035 0.00999999999999979 0.00999999999999979 0.0 359
+360 0.00365996360778809 0.0 0.0 0.0 360
+361 0.00363588333129883 0.0 0.0 0.0 361
+362 0.00361990928649902 0.00999999999999979 0.00999999999999979 0.0 362
+363 0.00364589691162109 0.0 0.0 0.0 363
+364 0.00363492965698242 0.00999999999999979 0.00999999999999979 0.0 364
+365 0.00372695922851562 0.0 0.0 0.0 365
+366 0.00362396240234375 0.0 0.0 0.0 366
+367 0.00363707542419434 0.00999999999999979 0.00999999999999979 0.0 367
+368 0.0036921501159668 0.0 0.0 0.0 368
+369 0.00365710258483887 0.0 0.0 0.0 369
+370 0.00361800193786621 0.00999999999999979 0.00999999999999979 0.0 370
+371 0.00367903709411621 0.0 0.0 0.0 371
+372 0.00365805625915527 0.00999999999999979 0.00999999999999979 0.0 372
+373 0.00367999076843262 0.0 0.0 0.0 373
+374 0.00368404388427734 0.0 0.0 0.0 374
+375 0.00368690490722656 0.00999999999999979 0.00999999999999979 0.0 375
+376 0.00374794006347656 0.0 0.0 0.0 376
+377 0.00366997718811035 0.0 0.0 0.0 377
+378 0.00365018844604492 0.0100000000000016 0.0100000000000016 0.0 378
+379 0.0036780834197998 0.0 0.0 0.0 379
+380 0.00370216369628906 0.00999999999999979 0.00999999999999979 0.0 380
+381 0.0293450355529785 0.0199999999999996 0.0199999999999996 0.0 381
+382 0.00373005867004395 0.00999999999999979 0.00999999999999979 0.0 382
+383 0.00366306304931641 0.0 0.0 0.0 383
+384 0.00376296043395996 0.00999999999999979 0.00999999999999979 0.0 384
+385 0.00380301475524902 0.0 0.0 0.0 385
+386 0.00372815132141113 0.0 0.0 0.0 386
+387 0.00371193885803223 0.00999999999999979 0.00999999999999979 0.0 387
+388 0.00368499755859375 0.0 0.0 0.0 388
+389 0.00373601913452148 0.0 0.0 0.0 389
+390 0.00371694564819336 0.00999999999999979 0.00999999999999979 0.0 390
+391 0.00372791290283203 0.0 0.0 0.0 391
+392 0.00531101226806641 0.0100000000000016 0.0100000000000016 0.0 392
+393 0.00371789932250977 0.0 0.0 0.0 393
+394 0.00370097160339355 0.00999999999999979 0.00999999999999979 0.0 394
+395 0.00369906425476074 0.0 0.0 0.0 395
+396 0.00373601913452148 0.0 0.0 0.0 396
+397 0.00371694564819336 0.00999999999999979 0.00999999999999979 0.0 397
+398 0.00365591049194336 0.0 0.0 0.0 398
+399 0.00403714179992676 0.0 0.0 0.0 399
+400 0.00364208221435547 0.00999999999999979 0.00999999999999979 0.0 400
+401 0.00365400314331055 0.0 0.0 0.0 401
+402 0.00364089012145996 0.00999999999999979 0.00999999999999979 0.0 402
+403 0.00363302230834961 0.0 0.0 0.0 403
+404 0.00365090370178223 0.0 0.0 0.0 404
+405 0.00374603271484375 0.00999999999999979 0.00999999999999979 0.0 405
+406 0.00363278388977051 0.0 0.0 0.0 406
+407 0.00362515449523926 0.0 0.0 0.0 407
+408 0.00372409820556641 0.00999999999999979 0.00999999999999979 0.0 408
+409 0.00486588478088379 0.0 0.0 0.0 409
+410 0.00364303588867188 0.00999999999999979 0.00999999999999979 0.0 410
+411 0.00371599197387695 0.0 0.0 0.0 411
+412 0.0036618709564209 0.0 0.0 0.0 412
+413 0.00363707542419434 0.00999999999999979 0.00999999999999979 0.0 413
+414 0.00367593765258789 0.0 0.0 0.0 414
+415 0.00361990928649902 0.0 0.0 0.0 415
+416 0.00365900993347168 0.0100000000000016 0.0100000000000016 0.0 416
+417 0.00365614891052246 0.0 0.0 0.0 417
+418 0.00370597839355469 0.00999999999999979 0.00999999999999979 0.0 418
+419 0.0359270572662354 0.0299999999999994 0.0299999999999994 0.0 419
+420 0.00371479988098145 0.00999999999999979 0.00999999999999979 0.0 420
+421 0.00369119644165039 0.0 0.0 0.0 421
+422 0.00375699996948242 0.0 0.0 0.0 422
+423 0.00374388694763184 0.00999999999999979 0.00999999999999979 0.0 423
+424 0.00373291969299316 0.0 0.0 0.0 424
+425 0.00372982025146484 0.0 0.0 0.0 425
+426 0.00370216369628906 0.00999999999999979 0.00999999999999979 0.0 426
+427 0.00371408462524414 0.0 0.0 0.0 427
+428 0.0037078857421875 0.0100000000000016 0.0100000000000016 0.0 428
+429 0.00379300117492676 0.0 0.0 0.0 429
+430 0.00373482704162598 0.0 0.0 0.0 430
+431 0.00374007225036621 0.00999999999999979 0.00999999999999979 0.0 431
+432 0.00367999076843262 0.0 0.0 0.0 432
+433 0.00372695922851562 0.0 0.0 0.0 433
+434 0.00371384620666504 0.00999999999999979 0.00999999999999979 0.0 434
+435 0.0036170482635498 0.0 0.0 0.0 435
+436 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 436
+437 0.00367283821105957 0.0 0.0 0.0 437
+438 0.0036160945892334 0.0 0.0 0.0 438
+439 0.00362205505371094 0.00999999999999979 0.00999999999999979 0.0 439
+440 0.00364518165588379 0.0 0.0 0.0 440
+441 0.0036780834197998 0.0 0.0 0.0 441
+442 0.00361800193786621 0.00999999999999979 0.00999999999999979 0.0 442
+443 0.00362396240234375 0.0 0.0 0.0 443
+444 0.00362610816955566 0.00999999999999979 0.00999999999999979 0.0 444
+445 0.00364804267883301 0.0 0.0 0.0 445
+446 0.00360488891601562 0.0 0.0 0.0 446
+447 0.00363397598266602 0.00999999999999979 0.00999999999999979 0.0 447
+448 0.00361299514770508 0.0 0.0 0.0 448
+449 0.00390100479125977 0.0 0.0 0.0 449
+450 0.00565385818481445 0.0100000000000016 0.0100000000000016 0.0 450
+451 0.00366592407226562 0.0 0.0 0.0 451
+452 0.00364398956298828 0.00999999999999979 0.00999999999999979 0.0 452
+453 0.00362896919250488 0.0 0.0 0.0 453
+454 0.0036618709564209 0.0 0.0 0.0 454
+455 0.00370502471923828 0.00999999999999979 0.00999999999999979 0.0 455
+456 0.00375580787658691 0.0 0.0 0.0 456
+457 0.029231071472168 0.0299999999999994 0.0299999999999994 0.0 457
+458 0.00371885299682617 0.0 0.0 0.0 458
+459 0.00371003150939941 0.0 0.0 0.0 459
+460 0.00493097305297852 0.0 0.0 0.0 460
+461 0.00378513336181641 0.00999999999999979 0.00999999999999979 0.0 461
+462 0.0037388801574707 0.0 0.0 0.0 462
+463 0.00383710861206055 0.0 0.0 0.0 463
+464 0.00370407104492188 0.00999999999999979 0.00999999999999979 0.0 464
+465 0.0037388801574707 0.0 0.0 0.0 465
+466 0.00373196601867676 0.0100000000000016 0.0100000000000016 0.0 466
+467 0.00371599197387695 0.0 0.0 0.0 467
+468 0.00373697280883789 0.0 0.0 0.0 468
+469 0.00368809700012207 0.00999999999999979 0.00999999999999979 0.0 469
+470 0.00370502471923828 0.0 0.0 0.0 470
+471 0.0036771297454834 0.0 0.0 0.0 471
+472 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 472
+473 0.00366902351379395 0.0 0.0 0.0 473
+474 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 474
+475 0.00371217727661133 0.0 0.0 0.0 475
+476 0.00365495681762695 0.0 0.0 0.0 476
+477 0.0036308765411377 0.00999999999999979 0.00999999999999979 0.0 477
+478 0.00365710258483887 0.0 0.0 0.0 478
+479 0.00364899635314941 0.0 0.0 0.0 479
+480 0.00360703468322754 0.00999999999999979 0.00999999999999979 0.0 480
+481 0.0036318302154541 0.0 0.0 0.0 481
+482 0.00359702110290527 0.0 0.0 0.0 482
+483 0.00360584259033203 0.00999999999999979 0.00999999999999979 0.0 483
+484 0.00364303588867188 0.0 0.0 0.0 484
+485 0.00361490249633789 0.00999999999999979 0.00999999999999979 0.0 485
+486 0.00365281105041504 0.0 0.0 0.0 486
+487 0.00365591049194336 0.0 0.0 0.0 487
+488 0.00358986854553223 0.0100000000000016 0.0100000000000016 0.0 488
+489 0.00365304946899414 0.0 0.0 0.0 489
+490 0.00380802154541016 0.0 0.0 0.0 490
+491 0.00366997718811035 0.00999999999999979 0.00999999999999979 0.0 491
+492 0.00363612174987793 0.0 0.0 0.0 492
+493 0.003662109375 0.00999999999999979 0.00999999999999979 0.0 493
+494 0.00367617607116699 0.0 0.0 0.0 494
+495 0.0286951065063477 0.0299999999999994 0.0299999999999994 0.0 495
+496 0.00378203392028809 0.0 0.0 0.0 496
+497 0.00374603271484375 0.00999999999999979 0.00999999999999979 0.0 497
+498 0.00373005867004395 0.0 0.0 0.0 498
+499 0.00371003150939941 0.0 0.0 0.0 499
+500 0.00367212295532227 0.00999999999999979 0.00999999999999979 0.0 500
+501 0.00379490852355957 0.0 0.0 0.0 501
+502 0.00532388687133789 0.0100000000000016 0.0100000000000016 0.0 502
+503 0.00412988662719727 0.0 0.0 0.0 503
+504 0.00371408462524414 0.0 0.0 0.0 504
+505 0.00367403030395508 0.00999999999999979 0.00999999999999979 0.0 505
+506 0.00383114814758301 0.0 0.0 0.0 506
+507 0.00376319885253906 0.00999999999999979 0.00999999999999979 0.0 507
+508 0.00370383262634277 0.0 0.0 0.0 508
+509 0.00366592407226562 0.0 0.0 0.0 509
+510 0.00369906425476074 0.00999999999999979 0.00999999999999979 0.0 510
+511 0.00367116928100586 0.0 0.0 0.0 511
+512 0.00511002540588379 0.0 0.0 0.0 512
+513 0.00360512733459473 0.00999999999999979 0.00999999999999979 0.0 513
+514 0.00369119644165039 0.0 0.0 0.0 514
+515 0.0036311149597168 0.00999999999999979 0.00999999999999979 0.0 515
+516 0.0036771297454834 0.0 0.0 0.0 516
+517 0.00361800193786621 0.0 0.0 0.0 517
+518 0.0038139820098877 0.00999999999999979 0.00999999999999979 0.0 518
+519 0.00537514686584473 0.0 0.0 0.0 519
+520 0.00412893295288086 0.00999999999999979 0.00999999999999979 0.0 520
+521 0.00373005867004395 0.0 0.0 0.0 521
+522 0.00365996360778809 0.0 0.0 0.0 522
+523 0.00364303588867188 0.00999999999999979 0.00999999999999979 0.0 523
+524 0.00367403030395508 0.0 0.0 0.0 524
+525 0.00364589691162109 0.0100000000000016 0.0100000000000016 0.0 525
+526 0.00364398956298828 0.0 0.0 0.0 526
+527 0.00363898277282715 0.0 0.0 0.0 527
+528 0.00362682342529297 0.00999999999999979 0.00999999999999979 0.0 528
+529 0.00360894203186035 0.0 0.0 0.0 529
+530 0.00366091728210449 0.0 0.0 0.0 530
+531 0.00367999076843262 0.00999999999999979 0.00999999999999979 0.0 531
+532 0.0291500091552734 0.0299999999999994 0.0299999999999994 0.0 532
+533 0.00369596481323242 0.0 0.0 0.0 533
+534 0.00374984741210938 0.0 0.0 0.0 534
+535 0.00383186340332031 0.00999999999999979 0.00999999999999979 0.0 535
+536 0.00389409065246582 0.0 0.0 0.0 536
+537 0.00370407104492188 0.00999999999999979 0.00999999999999979 0.0 537
+538 0.0037238597869873 0.0 0.0 0.0 538
+539 0.00371479988098145 0.0 0.0 0.0 539
+540 0.00371289253234863 0.0100000000000016 0.0100000000000016 0.0 540
+541 0.00380897521972656 0.0 0.0 0.0 541
+542 0.00371193885803223 0.0 0.0 0.0 542
+543 0.0036928653717041 0.00999999999999979 0.00999999999999979 0.0 543
+544 0.00368285179138184 0.0 0.0 0.0 544
+545 0.00370407104492188 0.00999999999999979 0.00999999999999979 0.0 545
+546 0.00371193885803223 0.0 0.0 0.0 546
+547 0.00420904159545898 0.0 0.0 0.0 547
+548 0.00372791290283203 0.00999999999999979 0.00999999999999979 0.0 548
+549 0.0037071704864502 0.0 0.0 0.0 549
+550 0.00366401672363281 0.00999999999999979 0.00999999999999979 0.0 550
+551 0.00365710258483887 0.0 0.0 0.0 551
+552 0.00364494323730469 0.0 0.0 0.0 552
+553 0.00368499755859375 0.00999999999999979 0.00999999999999979 0.0 553
+554 0.00366806983947754 0.0 0.0 0.0 554
+555 0.00361418724060059 0.0 0.0 0.0 555
+556 0.00361394882202148 0.00999999999999979 0.00999999999999979 0.0 556
+557 0.00365090370178223 0.0 0.0 0.0 557
+558 0.00361990928649902 0.0 0.0 0.0 558
+559 0.0036468505859375 0.00999999999999979 0.00999999999999979 0.0 559
+560 0.0040891170501709 0.0 0.0 0.0 560
+561 0.00469303131103516 0.0100000000000016 0.0100000000000016 0.0 561
+562 0.00363516807556152 0.0 0.0 0.0 562
+563 0.00363516807556152 0.0 0.0 0.0 563
+564 0.00361895561218262 0.00999999999999979 0.00999999999999979 0.0 564
+565 0.00365996360778809 0.0 0.0 0.0 565
+566 0.00366783142089844 0.00999999999999979 0.00999999999999979 0.0 566
+567 0.00374007225036621 0.0 0.0 0.0 567
+568 0.00392389297485352 0.0 0.0 0.0 568
+569 0.0294678211212158 0.0299999999999994 0.0299999999999994 0.0 569
+570 0.00389218330383301 0.00999999999999979 0.00999999999999979 0.0 570
+571 0.00545501708984375 0.0 0.0 0.0 571
+572 0.00444793701171875 0.00999999999999979 0.00999999999999979 0.0 572
+573 0.00378513336181641 0.0 0.0 0.0 573
+574 0.00372600555419922 0.0 0.0 0.0 574
+575 0.00369596481323242 0.00999999999999979 0.00999999999999979 0.0 575
+576 0.00376510620117188 0.0 0.0 0.0 576
+577 0.00368714332580566 0.0100000000000016 0.0100000000000016 0.0 577
+578 0.00371885299682617 0.0 0.0 0.0 578
+579 0.00372505187988281 0.0 0.0 0.0 579
+580 0.00372815132141113 0.00999999999999979 0.00999999999999979 0.0 580
+581 0.00370502471923828 0.0 0.0 0.0 581
+582 0.00371503829956055 0.0 0.0 0.0 582
+583 0.00371503829956055 0.00999999999999979 0.00999999999999979 0.0 583
+584 0.00370287895202637 0.0 0.0 0.0 584
+585 0.00371599197387695 0.00999999999999979 0.00999999999999979 0.0 585
+586 0.00377798080444336 0.0 0.0 0.0 586
+587 0.00368595123291016 0.0 0.0 0.0 587
+588 0.00366497039794922 0.00999999999999979 0.00999999999999979 0.0 588
+589 0.00367999076843262 0.0 0.0 0.0 589
+590 0.0036320686340332 0.0 0.0 0.0 590
+591 0.00362491607666016 0.00999999999999979 0.00999999999999979 0.0 591
+592 0.00367593765258789 0.0 0.0 0.0 592
+593 0.0036461353302002 0.00999999999999979 0.00999999999999979 0.0 593
+594 0.00365996360778809 0.0 0.0 0.0 594
+595 0.003662109375 0.0 0.0 0.0 595
+596 0.00364398956298828 0.00999999999999979 0.00999999999999979 0.0 596
+597 0.00371479988098145 0.0 0.0 0.0 597
+598 0.00362610816955566 0.0 0.0 0.0 598
+599 0.00365614891052246 0.0100000000000016 0.0100000000000016 0.0 599
+600 0.00365400314331055 0.0 0.0 0.0 600
+601 0.00364089012145996 0.00999999999999979 0.00999999999999979 0.0 601
+602 0.00363492965698242 0.0 0.0 0.0 602
+603 0.0036320686340332 0.0 0.0 0.0 603
+604 0.00364089012145996 0.00999999999999979 0.00999999999999979 0.0 604
+605 0.00368785858154297 0.0 0.0 0.0 605
+606 0.00367999076843262 0.0 0.0 0.0 606
+607 0.0295491218566895 0.0299999999999994 0.0299999999999994 0.0 607
+608 0.00367212295532227 0.00999999999999979 0.00999999999999979 0.0 608
+609 0.00368118286132812 0.0 0.0 0.0 609
+610 0.00368499755859375 0.0 0.0 0.0 610
+611 0.00374102592468262 0.00999999999999979 0.00999999999999979 0.0 611
+612 0.00428009033203125 0.0 0.0 0.0 612
+613 0.00475502014160156 0.0100000000000016 0.0100000000000016 0.0 613
+614 0.00373005867004395 0.0 0.0 0.0 614
+615 0.00372791290283203 0.00999999999999979 0.00999999999999979 0.0 615
+616 0.00373196601867676 0.0 0.0 0.0 616
+617 0.00375008583068848 0.0 0.0 0.0 617
+618 0.00374102592468262 0.00999999999999979 0.00999999999999979 0.0 618
+619 0.00374102592468262 0.0 0.0 0.0 619
+620 0.00369095802307129 0.0 0.0 0.0 620
+621 0.00368785858154297 0.00999999999999979 0.00999999999999979 0.0 621
+622 0.00369095802307129 0.0 0.0 0.0 622
+623 0.0036778450012207 0.00999999999999979 0.00999999999999979 0.0 623
+624 0.0036468505859375 0.0 0.0 0.0 624
+625 0.00369906425476074 0.0 0.0 0.0 625
+626 0.00376510620117188 0.00999999999999979 0.00999999999999979 0.0 626
+627 0.00364899635314941 0.0 0.0 0.0 627
+628 0.00363397598266602 0.0 0.0 0.0 628
+629 0.00383210182189941 0.00999999999999979 0.00999999999999979 0.0 629
+630 0.00394892692565918 0.0 0.0 0.0 630
+631 0.00367307662963867 0.00999999999999979 0.00999999999999979 0.0 631
+632 0.0036311149597168 0.0 0.0 0.0 632
+633 0.00366497039794922 0.0 0.0 0.0 633
+634 0.00363707542419434 0.00999999999999979 0.00999999999999979 0.0 634
+635 0.0036308765411377 0.0 0.0 0.0 635
+636 0.00362706184387207 0.0 0.0 0.0 636
+637 0.00366306304931641 0.0100000000000016 0.0100000000000016 0.0 637
+638 0.0036468505859375 0.0 0.0 0.0 638
+639 0.00365710258483887 0.0 0.0 0.0 639
+640 0.00370287895202637 0.00999999999999979 0.00999999999999979 0.0 640
+641 0.00424313545227051 0.0 0.0 0.0 641
+642 0.00360798835754395 0.00999999999999979 0.00999999999999979 0.0 642
+643 0.00641298294067383 0.0 0.0 0.0 643
+644 0.0336699485778809 0.0399999999999991 0.0399999999999991 0.0 644
+645 0.00376391410827637 0.0 0.0 0.0 645
+646 0.00372314453125 0.0 0.0 0.0 646
+647 0.00375103950500488 0.00999999999999979 0.00999999999999979 0.0 647
+648 0.00373101234436035 0.0 0.0 0.0 648
+649 0.00373196601867676 0.0 0.0 0.0 649
+650 0.00368499755859375 0.0100000000000016 0.0100000000000016 0.0 650
+651 0.00377416610717773 0.0 0.0 0.0 651
+652 0.00371193885803223 0.00999999999999979 0.00999999999999979 0.0 652
+653 0.0036919116973877 0.0 0.0 0.0 653
+654 0.00371813774108887 0.0 0.0 0.0 654
+655 0.00372219085693359 0.00999999999999979 0.00999999999999979 0.0 655
+656 0.00370907783508301 0.0 0.0 0.0 656
+657 0.00366401672363281 0.0 0.0 0.0 657
+658 0.00366806983947754 0.00999999999999979 0.00999999999999979 0.0 658
+659 0.00368309020996094 0.0 0.0 0.0 659
+660 0.00367307662963867 0.00999999999999979 0.00999999999999979 0.0 660
+661 0.00363898277282715 0.0 0.0 0.0 661
+662 0.003662109375 0.0 0.0 0.0 662
+663 0.00363707542419434 0.00999999999999979 0.00999999999999979 0.0 663
+664 0.00363302230834961 0.0 0.0 0.0 664
+665 0.00366091728210449 0.0 0.0 0.0 665
+666 0.0036771297454834 0.00999999999999979 0.00999999999999979 0.0 666
+667 0.00365710258483887 0.0 0.0 0.0 667
+668 0.00360703468322754 0.00999999999999979 0.00999999999999979 0.0 668
+669 0.00365900993347168 0.0 0.0 0.0 669
+670 0.00479602813720703 0.0 0.0 0.0 670
+671 0.0047600269317627 0.0100000000000016 0.0100000000000016 0.0 671
+672 0.00367999076843262 0.0 0.0 0.0 672
+673 0.00362992286682129 0.00999999999999979 0.00999999999999979 0.0 673
+674 0.00359392166137695 0.0 0.0 0.0 674
+675 0.00365710258483887 0.0 0.0 0.0 675
+676 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 676
+677 0.00373482704162598 0.0 0.0 0.0 677
+678 0.00359201431274414 0.0 0.0 0.0 678
+679 0.00365900993347168 0.00999999999999979 0.00999999999999979 0.0 679
+680 0.0036919116973877 0.0 0.0 0.0 680
+681 0.00368595123291016 0.00999999999999979 0.00999999999999979 0.0 681
+682 0.0298888683319092 0.0299999999999994 0.0299999999999994 0.0 682
+683 0.00371694564819336 0.0 0.0 0.0 683
+684 0.00372409820556641 0.0 0.0 0.0 684
+685 0.00371193885803223 0.00999999999999979 0.00999999999999979 0.0 685
+686 0.00372695922851562 0.0 0.0 0.0 686
+687 0.00368809700012207 0.0 0.0 0.0 687
+688 0.0036931037902832 0.0100000000000016 0.0100000000000016 0.0 688
+689 0.00371003150939941 0.0 0.0 0.0 689
+690 0.00369119644165039 0.0 0.0 0.0 690
+691 0.00370192527770996 0.0 0.0 0.0 691
+692 0.00372600555419922 0.0 0.0 0.0 692
+693 0.00372099876403809 0.00999999999999979 0.00999999999999979 0.0 693
+694 0.00371193885803223 0.0 0.0 0.0 694
+695 0.00369095802307129 0.0 0.0 0.0 695
+696 0.00366783142089844 0.00999999999999979 0.00999999999999979 0.0 696
+697 0.00373601913452148 0.0 0.0 0.0 697
+698 0.00366497039794922 0.0 0.0 0.0 698
+699 0.00366806983947754 0.0 0.0 0.0 699
+700 0.00364398956298828 0.0 0.0 0.0 700
+701 0.00358295440673828 0.00999999999999979 0.00999999999999979 0.0 701
+702 0.00363898277282715 0.0 0.0 0.0 702
+703 0.00365304946899414 0.0 0.0 0.0 703
+704 0.00369596481323242 0.00999999999999979 0.00999999999999979 0.0 704
+705 0.00362300872802734 0.0 0.0 0.0 705
+706 0.00362801551818848 0.0 0.0 0.0 706
+707 0.00364899635314941 0.00999999999999979 0.00999999999999979 0.0 707
+708 0.00362491607666016 0.0 0.0 0.0 708
+709 0.00363707542419434 0.0100000000000016 0.0100000000000016 0.0 709
+710 0.00364804267883301 0.0 0.0 0.0 710
+711 0.00362610816955566 0.0 0.0 0.0 711
+712 0.00368213653564453 0.00999999999999979 0.00999999999999979 0.0 712
+713 0.00364398956298828 0.0 0.0 0.0 713
+714 0.00365400314331055 0.0 0.0 0.0 714
+715 0.00364518165588379 0.00999999999999979 0.00999999999999979 0.0 715
+716 0.00361394882202148 0.0 0.0 0.0 716
+717 0.00368309020996094 0.00999999999999979 0.00999999999999979 0.0 717
+718 0.00363492965698242 0.0 0.0 0.0 718
+719 0.0291500091552734 0.0299999999999994 0.0299999999999994 0.0 719
+720 0.00372695922851562 0.0 0.0 0.0 720
+721 0.00369691848754883 0.00999999999999979 0.00999999999999979 0.0 721
+722 0.0036919116973877 0.0 0.0 0.0 722
+723 0.00575518608093262 0.0100000000000016 0.0100000000000016 0.0 723
+724 0.00409793853759766 0.0 0.0 0.0 724
+725 0.00376510620117188 0.0 0.0 0.0 725
+726 0.00382494926452637 0.00999999999999979 0.00999999999999979 0.0 726
+727 0.00373482704162598 0.0 0.0 0.0 727
+728 0.00375699996948242 0.0 0.0 0.0 728
+729 0.00374197959899902 0.00999999999999979 0.00999999999999979 0.0 729
+730 0.00372695922851562 0.0 0.0 0.0 730
+731 0.00370311737060547 0.00999999999999979 0.00999999999999979 0.0 731
+732 0.00367593765258789 0.0 0.0 0.0 732
+733 0.00520992279052734 0.0 0.0 0.0 733
+734 0.00372195243835449 0.00999999999999979 0.00999999999999979 0.0 734
+735 0.00368905067443848 0.0 0.0 0.0 735
+736 0.00366616249084473 0.00999999999999979 0.00999999999999979 0.0 736
+737 0.00368809700012207 0.0 0.0 0.0 737
+738 0.00368499755859375 0.0 0.0 0.0 738
+739 0.00387406349182129 0.00999999999999979 0.00999999999999979 0.0 739
+740 0.00513005256652832 0.0 0.0 0.0 740
+741 0.0036470890045166 0.00999999999999979 0.00999999999999979 0.0 741
+742 0.00371885299682617 0.0 0.0 0.0 742
+743 0.00364398956298828 0.0 0.0 0.0 743
+744 0.00364589691162109 0.00999999999999979 0.00999999999999979 0.0 744
+745 0.00363993644714355 0.0 0.0 0.0 745
+746 0.00364089012145996 0.0 0.0 0.0 746
+747 0.00361490249633789 0.0100000000000016 0.0100000000000016 0.0 747
+748 0.00366783142089844 0.0 0.0 0.0 748
+749 0.00363898277282715 0.0 0.0 0.0 749
+750 0.00363612174987793 0.00999999999999979 0.00999999999999979 0.0 750
+751 0.0036470890045166 0.0 0.0 0.0 751
+752 0.00362300872802734 0.00999999999999979 0.00999999999999979 0.0 752
+753 0.00365209579467773 0.0 0.0 0.0 753
+754 0.00367999076843262 0.0 0.0 0.0 754
+755 0.0036628246307373 0.00999999999999979 0.00999999999999979 0.0 755
+756 0.0293610095977783 0.0299999999999994 0.0299999999999994 0.0 756
+757 0.00370907783508301 0.0 0.0 0.0 757
+758 0.00370001792907715 0.0 0.0 0.0 758
+759 0.00371313095092773 0.00999999999999979 0.00999999999999979 0.0 759
+760 0.00373601913452148 0.0 0.0 0.0 760
+761 0.00375699996948242 0.0100000000000016 0.0100000000000016 0.0 761
+762 0.00379014015197754 0.0 0.0 0.0 762
+763 0.00373101234436035 0.0 0.0 0.0 763
+764 0.00369596481323242 0.00999999999999979 0.00999999999999979 0.0 764
+765 0.00373291969299316 0.0 0.0 0.0 765
+766 0.0037081241607666 0.0 0.0 0.0 766
+767 0.00425601005554199 0.00999999999999979 0.00999999999999979 0.0 767
+768 0.00375699996948242 0.0 0.0 0.0 768
+769 0.0037529468536377 0.00999999999999979 0.00999999999999979 0.0 769
+770 0.00371789932250977 0.0 0.0 0.0 770
+771 0.0037229061126709 0.0 0.0 0.0 771
+772 0.00371003150939941 0.00999999999999979 0.00999999999999979 0.0 772
+773 0.00370311737060547 0.0 0.0 0.0 773
+774 0.00365304946899414 0.0 0.0 0.0 774
+775 0.00366783142089844 0.00999999999999979 0.00999999999999979 0.0 775
+776 0.00362801551818848 0.0 0.0 0.0 776
+777 0.00360703468322754 0.00999999999999979 0.00999999999999979 0.0 777
+778 0.00365209579467773 0.0 0.0 0.0 778
+779 0.00366592407226562 0.0 0.0 0.0 779
+780 0.0036308765411377 0.00999999999999979 0.00999999999999979 0.0 780
+781 0.00458216667175293 0.0 0.0 0.0 781
+782 0.00462603569030762 0.0100000000000016 0.0100000000000016 0.0 782
+783 0.00362300872802734 0.0 0.0 0.0 783
+784 0.00360298156738281 0.0 0.0 0.0 784
+785 0.00363993644714355 0.00999999999999979 0.00999999999999979 0.0 785
+786 0.00367403030395508 0.0 0.0 0.0 786
+787 0.00365209579467773 0.0 0.0 0.0 787
+788 0.00373411178588867 0.00999999999999979 0.00999999999999979 0.0 788
+789 0.0038609504699707 0.0 0.0 0.0 789
+790 0.00365781784057617 0.00999999999999979 0.00999999999999979 0.0 790
+791 0.00362110137939453 0.0 0.0 0.0 791
+792 0.00369000434875488 0.0 0.0 0.0 792
+793 0.0307409763336182 0.0299999999999994 0.0299999999999994 0.0 793
+794 0.00374913215637207 0.00999999999999979 0.00999999999999979 0.0 794
+795 0.00369882583618164 0.0 0.0 0.0 795
+796 0.00370097160339355 0.00999999999999979 0.00999999999999979 0.0 796
+797 0.00375890731811523 0.0 0.0 0.0 797
+798 0.00378894805908203 0.0 0.0 0.0 798
+799 0.00387096405029297 0.0100000000000016 0.0100000000000016 0.0 799
+800 0.00368213653564453 0.0 0.0 0.0 800
+801 0.00372719764709473 0.0 0.0 0.0 801
+802 0.00373101234436035 0.00999999999999979 0.00999999999999979 0.0 802
+803 0.00372600555419922 0.0 0.0 0.0 803
+804 0.00373411178588867 0.00999999999999979 0.00999999999999979 0.0 804
+805 0.00366687774658203 0.0 0.0 0.0 805
+806 0.00370907783508301 0.0 0.0 0.0 806
+807 0.0036921501159668 0.00999999999999979 0.00999999999999979 0.0 807
+808 0.00377511978149414 0.0 0.0 0.0 808
+809 0.00365090370178223 0.0 0.0 0.0 809
+810 0.00374388694763184 0.00999999999999979 0.00999999999999979 0.0 810
+811 0.0036778450012207 0.0 0.0 0.0 811
+812 0.0036780834197998 0.00999999999999979 0.00999999999999979 0.0 812
+813 0.00362801551818848 0.0 0.0 0.0 813
+814 0.00365304946899414 0.0 0.0 0.0 814
+815 0.00363516807556152 0.00999999999999979 0.00999999999999979 0.0 815
+816 0.00369000434875488 0.0 0.0 0.0 816
+817 0.00373196601867676 0.0 0.0 0.0 817
+818 0.00360512733459473 0.00999999999999979 0.00999999999999979 0.0 818
+819 0.00361204147338867 0.0 0.0 0.0 819
+820 0.00362610816955566 0.0100000000000016 0.0100000000000016 0.0 820
+821 0.00365090370178223 0.0 0.0 0.0 821
+822 0.00360703468322754 0.0 0.0 0.0 822
+823 0.00362896919250488 0.00999999999999979 0.00999999999999979 0.0 823
+824 0.0036468505859375 0.0 0.0 0.0 824
+825 0.0036320686340332 0.0 0.0 0.0 825
+826 0.00362610816955566 0.00999999999999979 0.00999999999999979 0.0 826
+827 0.00365090370178223 0.0 0.0 0.0 827
+828 0.00363516807556152 0.00999999999999979 0.00999999999999979 0.0 828
+829 0.00368213653564453 0.0 0.0 0.0 829
+830 0.0292301177978516 0.0299999999999994 0.0299999999999994 0.0 830
+831 0.0037531852722168 0.0 0.0 0.0 831
+832 0.00371718406677246 0.00999999999999979 0.00999999999999979 0.0 832
+833 0.0037989616394043 0.0 0.0 0.0 833
+834 0.00615215301513672 0.0100000000000016 0.0100000000000016 0.0 834
+835 0.00377607345581055 0.0 0.0 0.0 835
+836 0.00370907783508301 0.0 0.0 0.0 836
+837 0.00371098518371582 0.00999999999999979 0.00999999999999979 0.0 837
+838 0.00375103950500488 0.0 0.0 0.0 838
+839 0.00372099876403809 0.0 0.0 0.0 839
+840 0.00375795364379883 0.00999999999999979 0.00999999999999979 0.0 840
+841 0.00370502471923828 0.0 0.0 0.0 841
+842 0.00369787216186523 0.00999999999999979 0.00999999999999979 0.0 842
+843 0.00369501113891602 0.0 0.0 0.0 843
+844 0.00370883941650391 0.0 0.0 0.0 844
+845 0.00371408462524414 0.00999999999999979 0.00999999999999979 0.0 845
+846 0.00368404388427734 0.0 0.0 0.0 846
+847 0.0038149356842041 0.0 0.0 0.0 847
+848 0.00367403030395508 0.00999999999999979 0.00999999999999979 0.0 848
+849 0.00365686416625977 0.0 0.0 0.0 849
+850 0.00383400917053223 0.00999999999999979 0.00999999999999979 0.0 850
+851 0.00394606590270996 0.0 0.0 0.0 851
+852 0.00365996360778809 0.0 0.0 0.0 852
+853 0.00365495681762695 0.00999999999999979 0.00999999999999979 0.0 853
+854 0.00370621681213379 0.0 0.0 0.0 854
+855 0.0036461353302002 0.0 0.0 0.0 855
+856 0.00365281105041504 0.00999999999999979 0.00999999999999979 0.0 856
+857 0.00365686416625977 0.0 0.0 0.0 857
+858 0.00365400314331055 0.0100000000000016 0.0100000000000016 0.0 858
+859 0.00363683700561523 0.0 0.0 0.0 859
+860 0.00365209579467773 0.0 0.0 0.0 860
+861 0.00365614891052246 0.00999999999999979 0.00999999999999979 0.0 861
+862 0.00419211387634277 0.0 0.0 0.0 862
+863 0.00362920761108398 0.0 0.0 0.0 863
+864 0.0062098503112793 0.0 0.0 0.0 864
+865 0.00613093376159668 0.00999999999999979 0.00999999999999979 0.0 865
+866 0.00604104995727539 0.0 0.0 0.0 866
+867 0.0290992259979248 0.0299999999999994 0.0299999999999994 0.0 867
+868 0.00398516654968262 0.00999999999999979 0.00999999999999979 0.0 868
+869 0.00370597839355469 0.0 0.0 0.0 869
+870 0.00374913215637207 0.0 0.0 0.0 870
+871 0.00371384620666504 0.0100000000000016 0.0100000000000016 0.0 871
+872 0.00374984741210938 0.0 0.0 0.0 872
+873 0.00371623039245605 0.00999999999999979 0.00999999999999979 0.0 873
+874 0.00370502471923828 0.0 0.0 0.0 874
+875 0.00371003150939941 0.0 0.0 0.0 875
+876 0.00368094444274902 0.00999999999999979 0.00999999999999979 0.0 876
+877 0.00372886657714844 0.0 0.0 0.0 877
+878 0.00374293327331543 0.0 0.0 0.0 878
+879 0.00372195243835449 0.00999999999999979 0.00999999999999979 0.0 879
+880 0.00373101234436035 0.0 0.0 0.0 880
+881 0.00373005867004395 0.00999999999999979 0.00999999999999979 0.0 881
+882 0.00367903709411621 0.0 0.0 0.0 882
+883 0.00371694564819336 0.0 0.0 0.0 883
+884 0.00383996963500977 0.00999999999999979 0.00999999999999979 0.0 884
+885 0.00367379188537598 0.0 0.0 0.0 885
+886 0.00366806983947754 0.0 0.0 0.0 886
+887 0.0036468505859375 0.00999999999999979 0.00999999999999979 0.0 887
+888 0.00361895561218262 0.0 0.0 0.0 888
+889 0.00358295440673828 0.00999999999999979 0.00999999999999979 0.0 889
+890 0.00368213653564453 0.0 0.0 0.0 890
+891 0.0056309700012207 0.0 0.0 0.0 891
+892 0.00402593612670898 0.0 0.0 0.0 892
+893 0.00361013412475586 0.0 0.0 0.0 893
+894 0.00365805625915527 0.00999999999999979 0.00999999999999979 0.0 894
+895 0.00363683700561523 0.0 0.0 0.0 895
+896 0.00369787216186523 0.0 0.0 0.0 896
+897 0.00366902351379395 0.00999999999999979 0.00999999999999979 0.0 897
+898 0.00373387336730957 0.0 0.0 0.0 898
+899 0.00364398956298828 0.00999999999999979 0.00999999999999979 0.0 899
+900 0.00363802909851074 0.0 0.0 0.0 900
+901 0.00359702110290527 0.0 0.0 0.0 901
+902 0.00368213653564453 0.00999999999999979 0.00999999999999979 0.0 902
+903 0.00368189811706543 0.0 0.0 0.0 903
+904 0.0309450626373291 0.0299999999999994 0.0299999999999994 0.0 904
+905 0.00368690490722656 0.0 0.0 0.0 905
+906 0.00371503829956055 0.00999999999999979 0.00999999999999979 0.0 906
+907 0.00382113456726074 0.0 0.0 0.0 907
+908 0.00382494926452637 0.0100000000000016 0.0100000000000016 0.0 908
+909 0.00365877151489258 0.0 0.0 0.0 909
+910 0.00371003150939941 0.0 0.0 0.0 910
+911 0.00370597839355469 0.00999999999999979 0.00999999999999979 0.0 911
+912 0.00368905067443848 0.0 0.0 0.0 912
+913 0.00370502471923828 0.0 0.0 0.0 913
+914 0.00374197959899902 0.00999999999999979 0.00999999999999979 0.0 914
+915 0.00374484062194824 0.0 0.0 0.0 915
+916 0.00371503829956055 0.00999999999999979 0.00999999999999979 0.0 916
+917 0.00371503829956055 0.0 0.0 0.0 917
+918 0.00377702713012695 0.0 0.0 0.0 918
+919 0.00374889373779297 0.00999999999999979 0.00999999999999979 0.0 919
+920 0.00369787216186523 0.0 0.0 0.0 920
+921 0.00368094444274902 0.0 0.0 0.0 921
+922 0.00360298156738281 0.0 0.0 0.0 922
+923 0.00363612174987793 0.0 0.0 0.0 923
+924 0.00366091728210449 0.00999999999999979 0.00999999999999979 0.0 924
+925 0.00364089012145996 0.0 0.0 0.0 925
+926 0.0036780834197998 0.0 0.0 0.0 926
+927 0.00362300872802734 0.00999999999999979 0.00999999999999979 0.0 927
+928 0.00365400314331055 0.0 0.0 0.0 928
+929 0.00363397598266602 0.0 0.0 0.0 929
+930 0.00364303588867188 0.0100000000000016 0.0100000000000016 0.0 930
+931 0.00363302230834961 0.0 0.0 0.0 931
+932 0.0036160945892334 0.00999999999999979 0.00999999999999979 0.0 932
+933 0.00370216369628906 0.0 0.0 0.0 933
+934 0.00365400314331055 0.0 0.0 0.0 934
+935 0.00365090370178223 0.00999999999999979 0.00999999999999979 0.0 935
+936 0.00369095802307129 0.0 0.0 0.0 936
+937 0.00361013412475586 0.0 0.0 0.0 937
+938 0.00361990928649902 0.00999999999999979 0.00999999999999979 0.0 938
+939 0.0036778450012207 0.0 0.0 0.0 939
+940 0.00370097160339355 0.00999999999999979 0.00999999999999979 0.0 940
+941 0.0296061038970947 0.0199999999999996 0.0199999999999996 0.0 941
+942 0.00377488136291504 0.00999999999999979 0.00999999999999979 0.0 942
+943 0.00529098510742188 0.0 0.0 0.0 943
+944 0.0046539306640625 0.0100000000000016 0.0100000000000016 0.0 944
+945 0.00372815132141113 0.0 0.0 0.0 945
+946 0.00383687019348145 0.00999999999999979 0.00999999999999979 0.0 946
+947 0.00372600555419922 0.0 0.0 0.0 947
+948 0.00372004508972168 0.0 0.0 0.0 948
+949 0.00370407104492188 0.00999999999999979 0.00999999999999979 0.0 949
+950 0.00370383262634277 0.0 0.0 0.0 950
+951 0.0037238597869873 0.00999999999999979 0.00999999999999979 0.0 951
+952 0.00373983383178711 0.00999999999999979 0.0 0.01 952
+953 0.00368404388427734 0.0 0.0 0.0 953
+954 0.00569581985473633 0.00999999999999979 0.00999999999999979 0.0 954
+955 0.00375699996948242 0.0 0.0 0.0 955
+956 0.00373697280883789 0.0 0.0 0.0 956
+957 0.00367903709411621 0.00999999999999979 0.00999999999999979 0.0 957
+958 0.00369405746459961 0.0 0.0 0.0 958
+959 0.00399684906005859 0.00999999999999979 0.00999999999999979 0.0 959
+960 0.00383996963500977 0.0 0.0 0.0 960
+961 0.00363612174987793 0.0 0.0 0.0 961
+962 0.00361013412475586 0.00999999999999979 0.00999999999999979 0.0 962
+963 0.00373411178588867 0.0 0.0 0.0 963
+964 0.00365495681762695 0.0 0.0 0.0 964
+965 0.0036311149597168 0.00999999999999979 0.00999999999999979 0.0 965
+966 0.00362300872802734 0.0 0.0 0.0 966
+967 0.00367403030395508 0.0100000000000016 0.0100000000000016 0.0 967
+968 0.00365304946899414 0.0 0.0 0.0 968
+969 0.00368213653564453 0.0 0.0 0.0 969
+970 0.0036468505859375 0.00999999999999979 0.00999999999999979 0.0 970
+971 0.00365900993347168 0.0 0.0 0.0 971
+972 0.00365519523620605 0.0 0.0 0.0 972
+973 0.00365710258483887 0.00999999999999979 0.00999999999999979 0.0 973
+974 0.00362801551818848 0.0 0.0 0.0 974
+975 0.00365090370178223 0.0 0.0 0.0 975
+976 0.00363993644714355 0.0 0.0 0.0 976
+977 0.00367403030395508 0.0 0.0 0.0 977
+978 0.0291531085968018 0.0299999999999994 0.0299999999999994 0.0 978
+979 0.00371599197387695 0.00999999999999979 0.00999999999999979 0.0 979
+980 0.00370097160339355 0.0 0.0 0.0 980
+981 0.00372910499572754 0.0 0.0 0.0 981
+982 0.00373220443725586 0.0100000000000016 0.0100000000000016 0.0 982
+983 0.00378298759460449 0.0 0.0 0.0 983
+984 0.00374412536621094 0.0 0.0 0.0 984
+985 0.00372099876403809 0.00999999999999979 0.00999999999999979 0.0 985
+986 0.00369501113891602 0.0 0.0 0.0 986
+987 0.0042259693145752 0.00999999999999979 0.00999999999999979 0.0 987
+988 0.00376200675964355 0.0 0.0 0.0 988
+989 0.00373697280883789 0.0 0.0 0.0 989
+990 0.00372409820556641 0.00999999999999979 0.00999999999999979 0.0 990
+991 0.00370192527770996 0.0 0.0 0.0 991
+992 0.00368189811706543 0.0 0.0 0.0 992
+993 0.00370502471923828 0.00999999999999979 0.00999999999999979 0.0 993
+994 0.00371217727661133 0.0 0.0 0.0 994
+995 0.0036919116973877 0.00999999999999979 0.00999999999999979 0.0 995
+996 0.00366711616516113 0.0 0.0 0.0 996
+997 0.00371313095092773 0.0 0.0 0.0 997
+998 0.00365209579467773 0.00999999999999979 0.00999999999999979 0.0 998
+999 0.00362896919250488 0.0 0.0 0.0 999
+1000 0.00367307662963867 0.0 0.0 0.0 1000
diff --git a/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log
new file mode 100644
index 0000000..d8a6aa3
--- /dev/null
+++ b/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log
@@ -0,0 +1,82 @@
+========================== 2009-04-01T16:46:41 CEST ===========================
+Benchmarking on ruby 1.8.6 (2008-08-11 patchlevel 287) [i686-linux].
+Running 'ParserBenchmarkYAML' for 1000 iterations/method (compare_time=real)
+===============================================================================
+
+This first run is only for warmup.
+ParserBenchmarkYAML#parser:
+ real total user system
+sum 4.506546021 4.490000000 4.480000000 0.010000000
+min 0.003598928 0.000000000 0.000000000 0.000000000
+std- 0.000288588 -0.001817113 -0.001826296 -0.000306228
+mean 0.004506546 0.004490000 0.004480000 0.000010000
+std+ 0.008724504 0.010797113 0.010786296 0.000326228
+max 0.042540073 0.040000000 0.040000000 0.010000000
+std 0.004217958 0.006307113 0.006306296 0.000316228
+std% 93.596247306 140.470232048 140.765535944 3162.277660168
+harm 0.003882332 nan nan nan
+geo 0.004019118 0.000000000 0.000000000 0.000000000
+q1 0.003660917 0.000000000 0.000000000 0.000000000
+med 0.003705978 0.000000000 0.000000000 0.000000000
+q3 0.003748715 0.010000000 0.010000000 0.000000000
+ 1000 221.89943 0.004506546
+ calls calls/sec secs/call
+
+ 0.04059 -|
+ 0.03670 -|
+ 0.03280 -|
+ 0.02891 -|*
+ 0.02502 -|
+ 0.02112 -|
+ 0.01723 -|
+ 0.01333 -|
+ 0.00944 -|
+ 0.00555 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00371, iqr=0.00009, factor=3.00):
+high=56 very_high=119
+
+Ljung-Box statistics: q=433.20488 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+ParserBenchmarkYAML#parser:
+ real total user system
+sum 4.454077959 4.430000000 4.420000000 0.010000000
+min 0.003582954 0.000000000 0.000000000 0.000000000
+std- 0.000263948 -0.001903657 -0.001912749 -0.000306228
+mean 0.004454078 0.004430000 0.004420000 0.000010000
+std+ 0.008644208 0.010763657 0.010752749 0.000326228
+max 0.035927057 0.040000000 0.040000000 0.010000000
+std 0.004190130 0.006333657 0.006332749 0.000316228
+std% 94.074019869 142.971948832 143.274853190 3162.277660168
+harm 0.003836471 nan nan nan
+geo 0.003968258 0.000000000 0.000000000 0.000000000
+q1 0.003650367 0.000000000 0.000000000 0.000000000
+med 0.003690004 0.000000000 0.000000000 0.000000000
+q3 0.003731966 0.010000000 0.010000000 0.000000000
+ 1000 224.51336 0.004454078
+ calls calls/sec secs/call
+
+ 0.03431 -|
+ 0.03108 -|*
+ 0.02784 -|*
+ 0.02461 -|
+ 0.02137 -|
+ 0.01814 -|
+ 0.01490 -|
+ 0.01167 -|
+ 0.00843 -|
+ 0.00520 -|**************************************************
+
+Outliers detected with box plot algo (median=0.00369, iqr=0.00008, factor=3.00):
+high=58 very_high=100
+
+Ljung-Box statistics: q=451.12745 (alpha=0.05, df=50).
+1.00000 >= 0.95000 => Autocorrelation was detected.
+
+No initial data truncated.
+ => System may have been in a steady state from the beginning.
+========================== 2009-04-01T16:46:54 CEST ===========================
+
+Writing measurement data file '/data/scm/json/benchmarks/data/ParserBenchmarkYAML#parser.dat'.
+Writing autocorrelation plot file '/data/scm/json/benchmarks/data/ParserBenchmarkYAML#parser-autocorrelation.dat'.
diff --git a/benchmarks/data/.keep b/benchmarks/data/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmarks/data/.keep
diff --git a/benchmarks/generator_benchmark.rb b/benchmarks/generator_benchmark.rb
new file mode 100755
index 0000000..1d29e63
--- /dev/null
+++ b/benchmarks/generator_benchmark.rb
@@ -0,0 +1,165 @@
+#!/usr/bin/env ruby
+# CODING: UTF-8
+
+require 'rbconfig'
+RUBY_PATH=File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+RAKE_PATH=File.join(Config::CONFIG['bindir'], 'rake')
+require 'bullshit'
+case ARGV.first
+when 'ext'
+ require 'json/ext'
+when 'pure'
+ require 'json/pure'
+when 'rails'
+ require 'active_support'
+end
+
+module JSON
+ def self.[](*) end
+end
+
+module GeneratorBenchmarkCommon
+ include JSON
+
+ def setup
+ a = [ nil, false, true, "fÖßÄr", [ "n€st€d", true ], { "fooß" => "bär", "quux" => true } ]
+ puts a.to_json
+ @big = a * 100
+ end
+
+ def generic_reset_method
+ @result and @result.size > 2 + 6 * @big.size or raise @result.to_s
+ end
+end
+
+module JSONGeneratorCommon
+ include GeneratorBenchmarkCommon
+
+ def benchmark_generator_fast
+ @result = JSON.fast_generate(@big)
+ end
+
+ alias reset_benchmark_generator_fast generic_reset_method
+
+ def benchmark_generator_safe
+ @result = JSON.generate(@big)
+ end
+
+ alias reset_benchmark_generator_safe generic_reset_method
+
+ def benchmark_generator_pretty
+ @result = JSON.pretty_generate(@big)
+ end
+
+ alias reset_benchmark_generator_pretty generic_reset_method
+end
+
+class GeneratorBenchmarkExt < Bullshit::RepeatCase
+ include JSONGeneratorCommon
+
+ warmup yes
+ iterations 1000
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+end
+
+class GeneratorBenchmarkPure < Bullshit::RepeatCase
+ include JSONGeneratorCommon
+
+ warmup yes
+ iterations 1000
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+end
+
+class GeneratorBenchmarkRails < Bullshit::RepeatCase
+ include GeneratorBenchmarkCommon
+
+ warmup yes
+ iterations 1000
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_generator
+ @result = @big.to_json
+ end
+
+ alias reset_benchmark_generator generic_reset_method
+end
+
+if $0 == __FILE__
+ Bullshit::Case.autorun false
+
+ case ARGV.first
+ when 'ext'
+ GeneratorBenchmarkExt.run
+ when 'pure'
+ GeneratorBenchmarkPure.run
+ when 'rails'
+ GeneratorBenchmarkRails.run
+ else
+ system "#{RAKE_PATH} clean"
+ system "#{RUBY_PATH} #$0 rails"
+ system "#{RUBY_PATH} #$0 pure"
+ system "#{RAKE_PATH} compile_ext"
+ system "#{RUBY_PATH} #$0 ext"
+ Bullshit.compare do
+ output_filename File.join(File.dirname(__FILE__), 'data', 'GeneratorBenchmarkComparison.log')
+
+ benchmark GeneratorBenchmarkExt, :generator_fast, :load => yes
+ benchmark GeneratorBenchmarkExt, :generator_safe, :load => yes
+ benchmark GeneratorBenchmarkExt, :generator_pretty, :load => yes
+ benchmark GeneratorBenchmarkPure, :generator_fast, :load => yes
+ benchmark GeneratorBenchmarkPure, :generator_safe, :load => yes
+ benchmark GeneratorBenchmarkPure, :generator_pretty, :load => yes
+ benchmark GeneratorBenchmarkRails, :generator, :load => yes
+ end
+ end
+end
+
diff --git a/benchmarks/parser_benchmark.rb b/benchmarks/parser_benchmark.rb
new file mode 100755
index 0000000..38af54d
--- /dev/null
+++ b/benchmarks/parser_benchmark.rb
@@ -0,0 +1,197 @@
+#!/usr/bin/env ruby
+# CODING: UTF-8
+
+require 'rbconfig'
+RUBY_PATH=File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+RAKE_PATH=File.join(Config::CONFIG['bindir'], 'rake')
+require 'bullshit'
+case ARGV.first
+when 'ext'
+ require 'json/ext'
+when 'pure'
+ require 'json/pure'
+when 'yaml'
+ require 'yaml'
+ require 'json/pure'
+when 'rails'
+ require 'active_support'
+ require 'json/pure'
+else
+ require 'json/pure'
+end
+
+module ParserBenchmarkCommon
+ include JSON
+
+ def setup
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
+ @big = a * 100
+ @json = JSON.generate(@big)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+class ParserBenchmarkExt < Bullshit::RepeatCase
+ include ParserBenchmarkCommon
+
+ warmup yes
+ iterations 1000
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_parser
+ @result = JSON.parse(@json)
+ end
+
+ alias reset_parser generic_reset_method
+end
+
+class ParserBenchmarkPure < Bullshit::RepeatCase
+ include ParserBenchmarkCommon
+
+ warmup yes
+ iterations 1000
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def benchmark_parser
+ @result = JSON.parse(@json)
+ end
+
+ alias reset_parser generic_reset_method
+end
+
+class ParserBenchmarkYAML < Bullshit::RepeatCase
+ warmup yes
+ iterations 1000
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def setup
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
+ @big = a * 100
+ @json = JSON.pretty_generate(@big)
+ end
+
+ def benchmark_parser
+ @result = YAML.load(@json)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+class ParserBenchmarkRails < Bullshit::RepeatCase
+ warmup yes
+ iterations 1000
+
+ truncate_data do
+ alpha_level 0.05
+ window_size 50
+ slope_angle 0.1
+ end
+
+ autocorrelation do
+ alpha_level 0.05
+ max_lags 50
+ file yes
+ end
+
+ output_dir File.join(File.dirname(__FILE__), 'data')
+ output_filename benchmark_name + '.log'
+ data_file yes
+ histogram yes
+
+ def setup
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
+ @big = a * 100
+ @json = JSON.generate(@big)
+ end
+
+ def benchmark_parser
+ @result = ActiveSupport::JSON.decode(@json)
+ end
+
+ def generic_reset_method
+ @result == @big or raise "not equal"
+ end
+end
+
+if $0 == __FILE__
+ Bullshit::Case.autorun false
+
+ case ARGV.first
+ when 'ext'
+ ParserBenchmarkExt.run
+ when 'pure'
+ ParserBenchmarkPure.run
+ when 'yaml'
+ ParserBenchmarkYAML.run
+ when 'rails'
+ ParserBenchmarkRails.run
+ else
+ system "#{RAKE_PATH} clean"
+ system "#{RUBY_PATH} #$0 yaml"
+ system "#{RUBY_PATH} #$0 rails"
+ system "#{RUBY_PATH} #$0 pure"
+ system "#{RAKE_PATH} compile_ext"
+ system "#{RUBY_PATH} #$0 ext"
+ Bullshit.compare do
+ output_filename File.join(File.dirname(__FILE__), 'data', 'ParserBenchmarkComparison.log')
+
+ benchmark ParserBenchmarkExt, :parser, :load => yes
+ benchmark ParserBenchmarkPure, :parser, :load => yes
+ benchmark ParserBenchmarkYAML, :parser, :load => yes
+ benchmark ParserBenchmarkRails, :parser, :load => yes
+ end
+ end
+end
diff --git a/bin/edit_json.rb b/bin/edit_json.rb
new file mode 100755
index 0000000..04a8189
--- /dev/null
+++ b/bin/edit_json.rb
@@ -0,0 +1,9 @@
+#!/usr/bin/env ruby
+require 'json/editor'
+
+filename, encoding = ARGV
+JSON::Editor.start(encoding) do |window|
+ if filename
+ window.file_open(filename)
+ end
+end
diff --git a/bin/prettify_json.rb b/bin/prettify_json.rb
new file mode 100755
index 0000000..5e1f806
--- /dev/null
+++ b/bin/prettify_json.rb
@@ -0,0 +1,75 @@
+#!/usr/bin/env ruby
+
+require 'json'
+require 'fileutils'
+include FileUtils
+
+# Parses the argument array _args_, according to the pattern _s_, to
+# retrieve the single character command line options from it. If _s_ is
+# 'xy:' an option '-x' without an option argument is searched, and an
+# option '-y foo' with an option argument ('foo').
+#
+# An option hash is returned with all found options set to true or the
+# found option argument.
+def go(s, args = ARGV)
+ b, v = s.scan(/(.)(:?)/).inject([{},{}]) { |t,(o,a)|
+ t[a.empty? ? 0 : 1][o] = a.empty? ? false : nil
+ t
+ }
+ while a = args.shift
+ a !~ /\A-(.+)/ and args.unshift a and break
+ p = $1
+ until p == ''
+ o = p.slice!(0, 1)
+ if v.key?(o)
+ v[o] = if p == '' then args.shift or break 1 else p end
+ break
+ elsif b.key?(o)
+ b[o] = true
+ else
+ args.unshift a
+ break 1
+ end
+ end and break
+ end
+ b.merge(v)
+end
+
+opts = go 'slhi:', args = ARGV.dup
+if opts['h'] || opts['l'] && opts['s']
+ puts <<EOT
+Usage: #{File.basename($0)} [OPTION] [FILE]
+
+If FILE is skipped, this scripts waits for input from STDIN. Otherwise
+FILE is opened, read, and used as input for the prettifier.
+
+OPTION can be
+ -s to output the shortest possible JSON (precludes -l)
+ -l to output a longer, better formatted JSON (precludes -s)
+ -i EXT prettifies FILE in place, saving a backup to FILE.EXT
+ -h this help
+EOT
+ exit 0
+end
+
+filename = nil
+json = JSON[
+ if args.empty?
+ STDIN.read
+ else
+ File.read filename = args.first
+ end
+]
+
+output = if opts['s']
+ JSON.fast_generate json
+else # default is -l
+ JSON.pretty_generate json
+end
+
+if opts['i'] && filename
+ cp filename, "#{filename}.#{opts['i']}"
+ File.open(filename, 'w') { |f| f.puts output }
+else
+ puts output
+end
diff --git a/data/example.json b/data/example.json
new file mode 100644
index 0000000..88b4e82
--- /dev/null
+++ b/data/example.json
@@ -0,0 +1 @@
+{"a":2,"b":3.141,"TIME":"2007-03-14T11:52:40","c":"c","d":[1,"b",3.14],"COUNT":666,"e":{"foo":"bar"},"foo":"B\u00e4r","g":"\u677e\u672c\u884c\u5f18","h":1000.0,"bar":"\u00a9 \u2260 \u20ac!","i":0.001,"j":"\ud840\udc01"}
diff --git a/data/index.html b/data/index.html
new file mode 100644
index 0000000..abe6fdb
--- /dev/null
+++ b/data/index.html
@@ -0,0 +1,38 @@
+<!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>Javascript Example</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <script src="prototype.js" type="text/javascript"></script>
+ </head>
+
+ <body>
+ <h1>Fetching object from server</h1>
+ <div id="list">
+ Wait...<br/>
+ <noscript><p>Switch on Javascript!</p></noscript>
+ </div>
+ <script type="text/javascript">
+ <!--
+ function pollJSON() {
+ new Ajax.Request('/json',
+ {
+ method: 'get',
+ onSuccess: function(transport) {
+ var response = transport.responseText || "no response text";
+ response = eval("(" + response + ")");
+ var text = "";
+ for (var k in response) {
+ text = text + "<b>" + k + "</b>: " + response[k] + "<br/>"
+ }
+ $("list").update(text);
+ },
+ onFailure: function() { alert('Something went wrong...') }
+ });
+ }
+ new PeriodicalExecuter(pollJSON, 1);
+ -->
+ </script>
+ </body>
+</html>
diff --git a/data/prototype.js b/data/prototype.js
new file mode 100644
index 0000000..5c73462
--- /dev/null
+++ b/data/prototype.js
@@ -0,0 +1,4184 @@
+/* Prototype JavaScript framework, version 1.6.0
+ * (c) 2005-2007 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.0',
+
+ Browser: {
+ IE: !!(window.attachEvent && !window.opera),
+ Opera: !!window.opera,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ },
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ ElementExtensions: !!window.HTMLElement,
+ SpecificElementExtensions:
+ document.createElement('div').__proto__ &&
+ document.createElement('div').__proto__ !==
+ document.createElement('form').__proto__
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+if (Prototype.Browser.WebKit)
+ Prototype.BrowserFeatures.XPath = false;
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+ create: function() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ var subclass = function() { };
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+
+ return klass;
+ }
+};
+
+Class.Methods = {
+ addMethods: function(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length)
+ properties.push("toString", "valueOf");
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value, value = Object.extend((function(m) {
+ return function() { return ancestor[m].apply(this, arguments) };
+ })(property).wrap(method), {
+ valueOf: function() { return method },
+ toString: function() { return method.toString() }
+ });
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+};
+
+Object.extend(Object, {
+ inspect: function(object) {
+ try {
+ if (object === undefined) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : object.toString();
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ },
+
+ toJSON: function(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (Object.isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = Object.toJSON(object[property]);
+ if (value !== undefined)
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ },
+
+ toQueryString: function(object) {
+ return $H(object).toQueryString();
+ },
+
+ toHTML: function(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ },
+
+ keys: function(object) {
+ var keys = [];
+ for (var property in object)
+ keys.push(property);
+ return keys;
+ },
+
+ values: function(object) {
+ var values = [];
+ for (var property in object)
+ values.push(object[property]);
+ return values;
+ },
+
+ clone: function(object) {
+ return Object.extend({ }, object);
+ },
+
+ isElement: function(object) {
+ return object && object.nodeType == 1;
+ },
+
+ isArray: function(object) {
+ return object && object.constructor === Array;
+ },
+
+ isHash: function(object) {
+ return object instanceof Hash;
+ },
+
+ isFunction: function(object) {
+ return typeof object == "function";
+ },
+
+ isString: function(object) {
+ return typeof object == "string";
+ },
+
+ isNumber: function(object) {
+ return typeof object == "number";
+ },
+
+ isUndefined: function(object) {
+ return typeof object == "undefined";
+ }
+});
+
+Object.extend(Function.prototype, {
+ argumentNames: function() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
+ return names.length == 1 && !names[0] ? [] : names;
+ },
+
+ bind: function() {
+ if (arguments.length < 2 && arguments[0] === undefined) return this;
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function() {
+ return __method.apply(object, args.concat($A(arguments)));
+ }
+ },
+
+ bindAsEventListener: function() {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function(event) {
+ return __method.apply(object, [event || window.event].concat(args));
+ }
+ },
+
+ curry: function() {
+ if (!arguments.length) return this;
+ var __method = this, args = $A(arguments);
+ return function() {
+ return __method.apply(this, args.concat($A(arguments)));
+ }
+ },
+
+ delay: function() {
+ var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ },
+
+ wrap: function(wrapper) {
+ var __method = this;
+ return function() {
+ return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+ }
+ },
+
+ methodize: function() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ return __method.apply(null, [this].concat($A(arguments)));
+ };
+ }
+});
+
+Function.prototype.defer = Function.prototype.delay.curry(0.01);
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, {
+ gsub: function(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = arguments.callee.prepareReplacement(replacement);
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ },
+
+ sub: function(pattern, replacement, count) {
+ replacement = this.gsub.prepareReplacement(replacement);
+ count = count === undefined ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ },
+
+ scan: function(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ },
+
+ truncate: function(length, truncation) {
+ length = length || 30;
+ truncation = truncation === undefined ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ },
+
+ strip: function() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ },
+
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ stripScripts: function() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ },
+
+ extractScripts: function() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ },
+
+ evalScripts: function() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ },
+
+ escapeHTML: function() {
+ var self = arguments.callee;
+ self.text.data = this;
+ return self.div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = new Element('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0] ? (div.childNodes.length > 1 ?
+ $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+ div.childNodes[0].nodeValue) : '';
+ },
+
+ toQueryParams: function(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ },
+
+ toArray: function() {
+ return this.split('');
+ },
+
+ succ: function() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ },
+
+ times: function(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ },
+
+ camelize: function() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ },
+
+ capitalize: function() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ },
+
+ underscore: function() {
+ return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+ },
+
+ dasherize: function() {
+ return this.gsub(/_/,'-');
+ },
+
+ inspect: function(useDoubleQuotes) {
+ var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+ var character = String.specialChar[match[0]];
+ return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ },
+
+ toJSON: function() {
+ return this.inspect(true);
+ },
+
+ unfilterJSON: function(filter) {
+ return this.sub(filter || Prototype.JSONFilter, '#{1}');
+ },
+
+ isJSON: function() {
+ var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ },
+
+ evalJSON: function(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ },
+
+ include: function(pattern) {
+ return this.indexOf(pattern) > -1;
+ },
+
+ startsWith: function(pattern) {
+ return this.indexOf(pattern) === 0;
+ },
+
+ endsWith: function(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ },
+
+ empty: function() {
+ return this == '';
+ },
+
+ blank: function() {
+ return /^\s*$/.test(this);
+ },
+
+ interpolate: function(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+ escapeHTML: function() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ },
+ unescapeHTML: function() {
+ return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+ }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+ div: document.createElement('div'),
+ text: document.createTextNode('')
+});
+
+with (String.prototype.escapeHTML) div.appendChild(text);
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return '';
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ }.bind(this));
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+ each: function(iterator, context) {
+ var index = 0;
+ iterator = iterator.bind(context);
+ try {
+ this._each(function(value) {
+ iterator(value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ },
+
+ eachSlice: function(number, iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var index = -number, slices = [], array = this.toArray();
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ },
+
+ all: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator(value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ },
+
+ any: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator(value, index))
+ throw $break;
+ });
+ return result;
+ },
+
+ collect: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator(value, index));
+ });
+ return results;
+ },
+
+ detect: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var result;
+ this.each(function(value, index) {
+ if (iterator(value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(filter, iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(filter);
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator(value, index));
+ });
+ return results;
+ },
+
+ include: function(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ },
+
+ inGroupsOf: function(number, fillWith) {
+ fillWith = fillWith === undefined ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ },
+
+ inject: function(memo, iterator, context) {
+ iterator = iterator.bind(context);
+ this.each(function(value, index) {
+ memo = iterator(memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator(value, index);
+ if (result == undefined || value >= result)
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator(value, index);
+ if (result == undefined || value < result)
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator, context) {
+ iterator = iterator ? iterator.bind(context) : Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator(value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator, context) {
+ iterator = iterator.bind(context);
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator, context) {
+ iterator = iterator.bind(context);
+ return this.map(function(value, index) {
+ return {value: value, criteria: iterator(value, index)};
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.map();
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ },
+
+ size: function() {
+ return this.toArray().length;
+ },
+
+ inspect: function() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+};
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ filter: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray,
+ every: Enumerable.all,
+ some: Enumerable.any
+});
+function $A(iterable) {
+ if (!iterable) return [];
+ if (iterable.toArray) return iterable.toArray();
+ var length = iterable.length, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+if (Prototype.Browser.WebKit) {
+ function $A(iterable) {
+ if (!iterable) return [];
+ if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
+ iterable.toArray) return iterable.toArray();
+ var length = iterable.length, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+ }
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ },
+
+ clear: function() {
+ this.length = 0;
+ return this;
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ },
+
+ compact: function() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ },
+
+ flatten: function() {
+ return this.inject([], function(array, value) {
+ return array.concat(Object.isArray(value) ?
+ value.flatten() : [value]);
+ });
+ },
+
+ without: function() {
+ var values = $A(arguments);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ },
+
+ reverse: function(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ },
+
+ reduce: function() {
+ return this.length > 1 ? this : this[0];
+ },
+
+ uniq: function(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ },
+
+ intersect: function(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ },
+
+ clone: function() {
+ return [].concat(this);
+ },
+
+ size: function() {
+ return this.length;
+ },
+
+ inspect: function() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ },
+
+ toJSON: function() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (value !== undefined) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+ Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+ Array.prototype.concat = function() {
+ var array = [];
+ for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ if (Object.isArray(arguments[i])) {
+ for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+ array.push(arguments[i][j]);
+ } else {
+ array.push(arguments[i]);
+ }
+ }
+ return array;
+ };
+}
+Object.extend(Number.prototype, {
+ toColorPart: function() {
+ return this.toPaddedString(2, 16);
+ },
+
+ succ: function() {
+ return this + 1;
+ },
+
+ times: function(iterator) {
+ $R(0, this, true).each(iterator);
+ return this;
+ },
+
+ toPaddedString: function(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ },
+
+ toJSON: function() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+});
+
+$w('abs round ceil floor').each(function(method){
+ Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+ if (function() {
+ var i = 0, Test = function(value) { this.key = value };
+ Test.prototype.key = 'foo';
+ for (var property in new Test('bar')) i++;
+ return i > 1;
+ }()) {
+ function each(iterator) {
+ var cache = [];
+ for (var key in this._object) {
+ var value = this._object[key];
+ if (cache.include(key)) continue;
+ cache.push(key);
+ var pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+ } else {
+ function each(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+ }
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ return {
+ initialize: function(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ },
+
+ _each: each,
+
+ set: function(key, value) {
+ return this._object[key] = value;
+ },
+
+ get: function(key) {
+ return this._object[key];
+ },
+
+ unset: function(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ },
+
+ toObject: function() {
+ return Object.clone(this._object);
+ },
+
+ keys: function() {
+ return this.pluck('key');
+ },
+
+ values: function() {
+ return this.pluck('value');
+ },
+
+ index: function(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ },
+
+ merge: function(object) {
+ return this.clone().update(object);
+ },
+
+ update: function(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ },
+
+ toQueryString: function() {
+ return this.map(function(pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return values.map(toQueryPair.curry(key)).join('&');
+ }
+ return toQueryPair(key, values);
+ }).join('&');
+ },
+
+ inspect: function() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ },
+
+ toJSON: function() {
+ return Object.toJSON(this.toObject());
+ },
+
+ clone: function() {
+ return new Hash(this);
+ }
+ }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+ initialize: function(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ },
+
+ _each: function(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ },
+
+ include: function(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+});
+
+var $R = function(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ // simulate other verbs over post
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ // when GET, append parameters to URL
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ // user-defined headers
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ // avoid memory leak in MSIE: clean up
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name);
+ } catch (e) { return null }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = xml === undefined ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON);
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')))
+ return null;
+ try {
+ return this.transport.responseText.evalJSON(options.sanitizeJSON);
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = options || { };
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, param) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, param);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = $(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+
+ if (this.success()) {
+ if (this.onComplete) this.onComplete.bind(this).defer();
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+function $(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push($(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, $(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ // DOM level 2 ECMAScript Language Binding
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+(function() {
+ var element = this.Element;
+ this.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (Prototype.Browser.IE && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(this.Element, element || { });
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+ visible: function(element) {
+ return $(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = $(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+ hide: function(element) {
+ $(element).style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ $(element).style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+ content = Object.toHTML(content);
+ element.innerHTML = content.stripScripts();
+ content.evalScripts.bind(content).defer();
+ return element;
+ },
+
+ replace: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, t, range;
+
+ for (position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ t = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ t.insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ range = element.ownerDocument.createRange();
+ t.initializeRange(element, range);
+ t.insert(element, range.createContextualFragment(content.stripScripts()));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = $(element);
+ if (Object.isElement(wrapper))
+ $(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = $(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = $(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return $(element).recursivelyCollect('parentNode');
+ },
+
+ descendants: function(element) {
+ return $A($(element).getElementsByTagName('*')).each(Element.extend);
+ },
+
+ firstDescendant: function(element) {
+ element = $(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return $(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = $(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat($(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return $(element).recursivelyCollect('previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return $(element).recursivelyCollect('nextSibling');
+ },
+
+ siblings: function(element) {
+ element = $(element);
+ return element.previousSiblings().reverse().concat(element.nextSiblings());
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match($(element));
+ },
+
+ up: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(element.parentNode);
+ var ancestors = element.ancestors();
+ return expression ? Selector.findElement(ancestors, expression, index) :
+ ancestors[index || 0];
+ },
+
+ down: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ var descendants = element.descendants();
+ return expression ? Selector.findElement(descendants, expression, index) :
+ descendants[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = element.previousSiblings();
+ return expression ? Selector.findElement(previousSiblings, expression, index) :
+ previousSiblings[index || 0];
+ },
+
+ next: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = element.nextSiblings();
+ return expression ? Selector.findElement(nextSiblings, expression, index) :
+ nextSiblings[index || 0];
+ },
+
+ select: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = $(element);
+ var id = element.readAttribute('id'), self = arguments.callee;
+ if (id) return id;
+ do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+ element.writeAttribute('id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = $(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = $(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = value === undefined ? true : value;
+
+ for (var attr in attributes) {
+ var name = t.names[attr] || attr, value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return $(element).getDimensions().height;
+ },
+
+ getWidth: function(element) {
+ return $(element).getDimensions().width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ if (!element.hasClassName(className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ return element[element.hasClassName(className) ?
+ 'removeClassName' : 'addClassName'](className);
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ element = $(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return $(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = $(element), ancestor = $(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (element.sourceIndex && !Prototype.Browser.Opera) {
+ var e = element.sourceIndex, a = ancestor.sourceIndex,
+ nextAncestor = ancestor.nextSibling;
+ if (!nextAncestor) {
+ do { ancestor = ancestor.parentNode; }
+ while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
+ }
+ if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);
+ }
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = $(element);
+ var pos = element.cumulativeOffset();
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = $(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value) {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return $(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = $(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = $(element);
+ var display = $(element).getStyle('display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ // All *Width and *Height properties give 0 on elements with display none,
+ // so enable the element temporarily
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = $(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ // Opera returns the offset relative to the positioning context, when an
+ // element is position relative but top and left have not been defined
+ if (window.opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = $(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = $(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = $(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p == 'relative' || p == 'absolute') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'absolute') return;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ var offsets = element.positionedOffset();
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'relative') return;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return $(element.offsetParent);
+ if (element == document.body) return $(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return $(element);
+
+ return $(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ // Safari fix
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ // find page position of source
+ source = $(source);
+ var p = source.viewportOffset();
+
+ // find coordinate system to use
+ element = $(element);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = element.getOffsetParent();
+ delta = parent.viewportOffset();
+ }
+
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ // set position
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+
+if (!document.createRange || Prototype.Browser.Opera) {
+ Element.Methods.insert = function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = { bottom: insertions };
+
+ var t = Element._insertionTranslations, content, position, pos, tagName;
+
+ for (position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ pos = t[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ pos.insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ if (t.tags[tagName]) {
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ if (position == 'top' || position == 'after') fragments.reverse();
+ fragments.each(pos.insert.curry(element));
+ }
+ else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ };
+}
+
+if (Prototype.Browser.Opera) {
+ Element.Methods._getStyle = Element.Methods.getStyle;
+ Element.Methods.getStyle = function(element, style) {
+ switch(style) {
+ case 'left':
+ case 'top':
+ case 'right':
+ case 'bottom':
+ if (Element._getStyle(element, 'position') == 'static') return null;
+ default: return Element._getStyle(element, style);
+ }
+ };
+ Element.Methods._readAttribute = Element.Methods.readAttribute;
+ Element.Methods.readAttribute = function(element, attribute) {
+ if (attribute == 'title') return element.title;
+ return Element._readAttribute(element, attribute);
+ };
+}
+
+else if (Prototype.Browser.IE) {
+ $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = $(element);
+ var position = element.getStyle('position');
+ if (position != 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.getStyle = function(element, style) {
+ element = $(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = $(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = {
+ read: {
+ names: {
+ 'class': 'className',
+ 'for': 'htmlFor'
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: function(element, attribute) {
+ var attribute = element.getAttribute(attribute);
+ return attribute ? attribute.toString().slice(23, -2) : null;
+ },
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ };
+
+ Element._attributeTranslations.write = {
+ names: Object.clone(Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr,
+ src: v._getAttr,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ // Safari returns margins on body which is incorrect if the child is absolutely
+ // positioned. For performance reasons, redefine Position.cumulativeOffset for
+ // KHTML/WebKit only.
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+ // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+ Element.Methods.update = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+
+ content = Object.toHTML(content);
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName in Element._insertionTranslations.tags) {
+ $A(element.childNodes).each(function(node) { element.removeChild(node) });
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) { element.appendChild(node) });
+ }
+ else element.innerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+if (document.createElement('div').outerHTML) {
+ Element.Methods.replace = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: {
+ adjacency: 'beforeBegin',
+ insert: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ initializeRange: function(element, range) {
+ range.setStartBefore(element);
+ }
+ },
+ top: {
+ adjacency: 'afterBegin',
+ insert: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ initializeRange: function(element, range) {
+ range.selectNodeContents(element);
+ range.collapse(true);
+ }
+ },
+ bottom: {
+ adjacency: 'beforeEnd',
+ insert: function(element, node) {
+ element.appendChild(node);
+ }
+ },
+ after: {
+ adjacency: 'afterEnd',
+ insert: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ initializeRange: function(element, range) {
+ range.setStartAfter(element);
+ }
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ this.bottom.initializeRange = this.top.initializeRange;
+ Object.extend(this.tags, {
+ THEAD: this.tags.TBODY,
+ TFOOT: this.tags.TBODY,
+ TH: this.tags.TD
+ });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = $(element).getAttributeNode(attribute);
+ return node && node.specified;
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &&
+ document.createElement('div').__proto__) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = document.createElement('div').__proto__;
+ Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+ if (Prototype.BrowserFeatures.SpecificElementExtensions)
+ return Prototype.K;
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || element._extendedByPrototype ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName, property, value;
+
+ // extend methods for specific tags
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ for (property in methods) {
+ value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ // extend methods for all tags (Safari doesn't need this)
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ window[klass] = { };
+ window[klass].prototype = document.createElement(tagName).__proto__;
+ return window[klass];
+ }
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, HTMLElement.prototype);
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+document.viewport = {
+ getDimensions: function() {
+ var dimensions = { };
+ $w('width height').each(function(d) {
+ var D = d.capitalize();
+ dimensions[d] = self['inner' + D] ||
+ (document.documentElement['client' + D] || document.body['client' + D]);
+ });
+ return dimensions;
+ },
+
+ getWidth: function() {
+ return this.getDimensions().width;
+ },
+
+ getHeight: function() {
+ return this.getDimensions().height;
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+ this.compileMatcher();
+ },
+
+ compileMatcher: function() {
+ // Selectors with namespaced attributes can't use the XPath version
+ if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression))
+ return this.compileXPathMatcher();
+
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+ new Template(c[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ if (m = e.match(ps[i])) {
+ this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+ new Template(x[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ if (this.xpath) return document._getElementsByXPath(this.xpath, root);
+ return this.matcher(root);
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ // use the Selector.assertions methods unless the selector
+ // is too complex.
+ if (as[i]) {
+ this.tokens.push([i, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ // reluctantly do a document-wide search
+ // and look for a match in the array
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: "[@#{1}]",
+ attr: function(m) {
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
+ 'checked': "[@checked]",
+ 'disabled': "[@disabled]",
+ 'enabled': "[not(@disabled)]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, m, v;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in p) {
+ if (m = e.match(p[i])) {
+ v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: {
+ // combinators must be listed first
+ // (and descendant needs to be last combinator)
+ laterSibling: /^\s*~\s*/,
+ child: /^\s*>\s*/,
+ adjacent: /^\s*\+\s*/,
+ descendant: /^\s/,
+
+ // selectors follow
+ tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
+ id: /^#([\w\-\*]+)(\b|$)/,
+ className: /^\.([\w\-\*]+)(\b|$)/,
+ pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/,
+ attrPresence: /^\[([\w]+)\]/,
+ attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+ },
+
+ // for Selector.match and Element#match
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return Selector.operators[matches[2]](nodeValue, matches[3]);
+ }
+ },
+
+ handlers: {
+ // UTILITY FUNCTIONS
+ // joins two collections
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ // marks an array of nodes for counting
+ mark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._counted = true;
+ return nodes;
+ },
+
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._counted = undefined;
+ return nodes;
+ },
+
+ // mark each child node with its position (for nth calls)
+ // "ofType" flag indicates whether we're indexing for nth-of-type
+ // rather than nth-child
+ index: function(parentNode, reverse, ofType) {
+ parentNode._counted = true;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
+ }
+ },
+
+ // filters out duplicates and extends all nodes
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (!(n = nodes[i])._counted) {
+ n._counted = true;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ // COMBINATOR FUNCTIONS
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ // TOKEN FUNCTIONS
+ tagName: function(nodes, root, tagName, combinator) {
+ tagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ // fastlane for ordinary descendant combinators
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() == tagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = $(id), h = Selector.handlers;
+ if (!targetNode) return [];
+ if (!nodes && root == document) return [targetNode];
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ // handles the an+b logic
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._counted) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ // IE treats comments as element nodes
+ if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._counted) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled) results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv.startsWith(v); },
+ '$=': function(nv, v) { return nv.endsWith(v); },
+ '*=': function(nv, v) { return nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = new Selector(expression).findElements(), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._counted) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ var exprs = expressions.join(','), expressions = [];
+ exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+ reset: function(form) {
+ $(form).reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (options.hash === undefined) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = $(element).getValue();
+ if (value != null && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ // a key is already present; construct an array of values
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ return $A($(form).getElementsByTagName('*')).inject([],
+ function(elements, child) {
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ }
+ );
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = $(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = $(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !['button', 'reset', 'submit'].include(element.type)))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.blur();
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (value === undefined) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (value === undefined) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, index) {
+ if (index === undefined)
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, value, single = !Object.isArray(index);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ value = this.optionValue(opt);
+ if (single) {
+ if (value == index) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = index.include(value);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ // extend element because hasAttribute may not be native
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = $(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: { },
+
+ relatedTarget: function(event) {
+ var element;
+ switch(event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+});
+
+Event.Methods = (function() {
+ var isButton;
+
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ isButton = function(event, code) {
+ return event.button == buttonMap[code];
+ };
+
+ } else if (Prototype.Browser.WebKit) {
+ isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+
+ } else {
+ isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ return {
+ isLeftClick: function(event) { return isButton(event, 0) },
+ isMiddleClick: function(event) { return isButton(event, 1) },
+ isRightClick: function(event) { return isButton(event, 2) },
+
+ element: function(event) {
+ var node = Event.extend(event).target;
+ return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
+ },
+
+ findElement: function(event, expression) {
+ var element = Event.element(event);
+ return element.match(expression) ? element : element.up(expression);
+ },
+
+ pointer: function(event) {
+ return {
+ x: event.pageX || (event.clientX +
+ (document.documentElement.scrollLeft || document.body.scrollLeft)),
+ y: event.pageY || (event.clientY +
+ (document.documentElement.scrollTop || document.body.scrollTop))
+ };
+ },
+
+ pointerX: function(event) { return Event.pointer(event).x },
+ pointerY: function(event) { return Event.pointer(event).y },
+
+ stop: function(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+ event.stopped = true;
+ }
+ };
+})();
+
+Event.extend = (function() {
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return "[object Event]" }
+ });
+
+ return function(event) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+ Object.extend(event, {
+ target: event.srcElement,
+ relatedTarget: Event.relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+ return Object.extend(event, methods);
+ };
+
+ } else {
+ Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
+ Object.extend(Event.prototype, methods);
+ return Prototype.K;
+ }
+})();
+
+Object.extend(Event, (function() {
+ var cache = Event.cache;
+
+ function getEventID(element) {
+ if (element._eventID) return element._eventID;
+ arguments.callee.id = arguments.callee.id || 1;
+ return element._eventID = ++arguments.callee.id;
+ }
+
+ function getDOMEventName(eventName) {
+ if (eventName && eventName.include(':')) return "dataavailable";
+ return eventName;
+ }
+
+ function getCacheForID(id) {
+ return cache[id] = cache[id] || { };
+ }
+
+ function getWrappersForEventName(id, eventName) {
+ var c = getCacheForID(id);
+ return c[eventName] = c[eventName] || [];
+ }
+
+ function createWrapper(element, eventName, handler) {
+ var id = getEventID(element);
+ var c = getWrappersForEventName(id, eventName);
+ if (c.pluck("handler").include(handler)) return false;
+
+ var wrapper = function(event) {
+ if (!Event || !Event.extend ||
+ (event.eventName && event.eventName != eventName))
+ return false;
+
+ Event.extend(event);
+ handler.call(element, event)
+ };
+
+ wrapper.handler = handler;
+ c.push(wrapper);
+ return wrapper;
+ }
+
+ function findWrapper(id, eventName, handler) {
+ var c = getWrappersForEventName(id, eventName);
+ return c.find(function(wrapper) { return wrapper.handler == handler });
+ }
+
+ function destroyWrapper(id, eventName, handler) {
+ var c = getCacheForID(id);
+ if (!c[eventName]) return false;
+ c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+ }
+
+ function destroyCache() {
+ for (var id in cache)
+ for (var eventName in cache[id])
+ cache[id][eventName] = null;
+ }
+
+ if (window.attachEvent) {
+ window.attachEvent("onunload", destroyCache);
+ }
+
+ return {
+ observe: function(element, eventName, handler) {
+ element = $(element);
+ var name = getDOMEventName(eventName);
+
+ var wrapper = createWrapper(element, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.addEventListener) {
+ element.addEventListener(name, wrapper, false);
+ } else {
+ element.attachEvent("on" + name, wrapper);
+ }
+
+ return element;
+ },
+
+ stopObserving: function(element, eventName, handler) {
+ element = $(element);
+ var id = getEventID(element), name = getDOMEventName(eventName);
+
+ if (!handler && eventName) {
+ getWrappersForEventName(id, eventName).each(function(wrapper) {
+ element.stopObserving(eventName, wrapper.handler);
+ });
+ return element;
+
+ } else if (!eventName) {
+ Object.keys(getCacheForID(id)).each(function(eventName) {
+ element.stopObserving(eventName);
+ });
+ return element;
+ }
+
+ var wrapper = findWrapper(id, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, wrapper, false);
+ } else {
+ element.detachEvent("on" + name, wrapper);
+ }
+
+ destroyWrapper(id, eventName, handler);
+
+ return element;
+ },
+
+ fire: function(element, eventName, memo) {
+ element = $(element);
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ if (document.createEvent) {
+ var event = document.createEvent("HTMLEvents");
+ event.initEvent("dataavailable", true, true);
+ } else {
+ var event = document.createEventObject();
+ event.eventType = "ondataavailable";
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent) {
+ element.dispatchEvent(event);
+ } else {
+ element.fireEvent(event.eventType, event);
+ }
+
+ return event;
+ }
+ };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+ fire: Event.fire,
+ observe: Event.observe,
+ stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+ fire: Element.Methods.fire.methodize(),
+ observe: Element.Methods.observe.methodize(),
+ stopObserving: Element.Methods.stopObserving.methodize()
+});
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards and John Resig. */
+
+ var timer, fired = false;
+
+ function fireContentLoadedEvent() {
+ if (fired) return;
+ if (timer) window.clearInterval(timer);
+ document.fire("dom:loaded");
+ fired = true;
+ }
+
+ if (document.addEventListener) {
+ if (Prototype.Browser.WebKit) {
+ timer = window.setInterval(function() {
+ if (/loaded|complete/.test(document.readyState))
+ fireContentLoadedEvent();
+ }, 0);
+
+ Event.observe(window, "load", fireContentLoadedEvent);
+
+ } else {
+ document.addEventListener("DOMContentLoaded",
+ fireContentLoadedEvent, false);
+ }
+
+ } else {
+ document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
+ $("__onDOMContentLoaded").onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ this.onreadystatechange = null;
+ fireContentLoadedEvent();
+ }
+ };
+ }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ // Deprecation layer -- use newer Element methods now (1.5.2).
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = $(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return $(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods(); \ No newline at end of file
diff --git a/diagrams/.keep b/diagrams/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/diagrams/.keep
diff --git a/doc-templates/main.txt b/doc-templates/main.txt
new file mode 100644
index 0000000..debe535
--- /dev/null
+++ b/doc-templates/main.txt
@@ -0,0 +1,283 @@
+# = json - JSON for Ruby
+#
+# == Description
+#
+# This is a implementation of the JSON specification according to RFC 4627
+# (http://www.ietf.org/rfc/rfc4627.txt). Starting from version 1.0.0 on there
+# will be two variants available:
+#
+# * A pure ruby variant, that relies on the iconv and the stringscan
+# extensions, which are both part of the ruby standard library.
+# * The quite a bit faster C extension variant, which is in parts implemented
+# in C and comes with its own unicode conversion functions and a parser
+# generated by the ragel state machine compiler
+# (http://www.cs.queensu.ca/~thurston/ragel).
+#
+# Both variants of the JSON generator escape all non-ASCII an control
+# characters with \uXXXX escape sequences, and support UTF-16 surrogate pairs
+# in order to be able to generate the whole range of unicode code points. This
+# means that generated JSON text is encoded as UTF-8 (because ASCII is a subset
+# of UTF-8) and at the same time avoids decoding problems for receiving
+# endpoints, that don't expect UTF-8 encoded texts. On the negative side this
+# may lead to a bit longer strings than necessarry.
+#
+# All strings, that are to be encoded as JSON strings, should be UTF-8 byte
+# sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8
+# encoded, please use the to_json_raw_object method of String (which produces
+# an object, that contains a byte array) and decode the result on the receiving
+# endpoint.
+#
+# == Author
+#
+# Florian Frank <mailto:flori@ping.de>
+#
+# == License
+#
+# This software is distributed under the same license as Ruby itself, see
+# http://www.ruby-lang.org/en/LICENSE.txt.
+#
+# == Download
+#
+# The latest version of this library can be downloaded at
+#
+# * http://rubyforge.org/frs?group_id=953
+#
+# Online Documentation should be located at
+#
+# * http://json.rubyforge.org
+#
+# == Usage
+#
+# To use JSON you can
+# require 'json'
+# to load the installed variant (either the extension 'json' or the pure
+# variant 'json_pure'). If you have installed the extension variant, you can
+# pick either the extension variant or the pure variant by typing
+# require 'json/ext'
+# or
+# require 'json/pure'
+#
+# You can choose to load a set of common additions to ruby core's objects if
+# you
+# require 'json/add/core'
+#
+# After requiring this you can, e. g., serialise/deserialise Ruby ranges:
+#
+# JSON JSON(1..10) # => 1..10
+#
+# To find out how to add JSON support to other or your own classes, read the
+# Examples section below.
+#
+# To get the best compatibility to rails' JSON implementation, you can
+# require 'json/add/rails'
+#
+# Both of the additions attempt to require 'json' (like above) first, if it has
+# not been required yet.
+#
+# == Speed Comparisons
+#
+# I have created some benchmark results (see the benchmarks/data-p4-3Ghz
+# subdir of the package) for the JSON-parser to estimate the speed up in the C
+# extension:
+#
+# Comparing times (call_time_mean):
+# 1 ParserBenchmarkExt#parser 900 repeats:
+# 553.922304770 ( real) -> 21.500x
+# 0.001805307
+# 2 ParserBenchmarkYAML#parser 1000 repeats:
+# 224.513358139 ( real) -> 8.714x
+# 0.004454078
+# 3 ParserBenchmarkPure#parser 1000 repeats:
+# 26.755020642 ( real) -> 1.038x
+# 0.037376163
+# 4 ParserBenchmarkRails#parser 1000 repeats:
+# 25.763381731 ( real) -> 1.000x
+# 0.038814780
+# calls/sec ( time) -> speed covers
+# secs/call
+#
+# In the table above 1 is JSON::Ext::Parser, 2 is YAML.load with YAML
+# compatbile JSON document, 3 is is JSON::Pure::Parser, and 4 is
+# ActiveSupport::JSON.decode. The ActiveSupport JSON-decoder converts the
+# input first to YAML and then uses the YAML-parser, the conversion seems to
+# slow it down so much that it is only as fast as the JSON::Pure::Parser!
+#
+# If you look at the benchmark data you can see that this is mostly caused by
+# the frequent high outliers - the median of the Rails-parser runs is still
+# overall smaller than the median of the JSON::Pure::Parser runs:
+#
+# Comparing times (call_time_median):
+# 1 ParserBenchmarkExt#parser 900 repeats:
+# 800.592479481 ( real) -> 26.936x
+# 0.001249075
+# 2 ParserBenchmarkYAML#parser 1000 repeats:
+# 271.002390644 ( real) -> 9.118x
+# 0.003690004
+# 3 ParserBenchmarkRails#parser 1000 repeats:
+# 30.227910865 ( real) -> 1.017x
+# 0.033082008
+# 4 ParserBenchmarkPure#parser 1000 repeats:
+# 29.722384421 ( real) -> 1.000x
+# 0.033644676
+# calls/sec ( time) -> speed covers
+# secs/call
+#
+# I have benchmarked the JSON-Generator as well. This generated a few more
+# values, because there are different modes that also influence the achieved
+# speed:
+#
+# Comparing times (call_time_mean):
+# 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+# 547.354332608 ( real) -> 15.090x
+# 0.001826970
+# 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+# 443.968212317 ( real) -> 12.240x
+# 0.002252414
+# 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+# 375.104545883 ( real) -> 10.341x
+# 0.002665923
+# 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+# 49.978706968 ( real) -> 1.378x
+# 0.020008521
+# 5 GeneratorBenchmarkRails#generator 1000 repeats:
+# 38.531868759 ( real) -> 1.062x
+# 0.025952543
+# 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+# 36.927649925 ( real) -> 1.018x 7 (>=3859)
+# 0.027079979
+# 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+# 36.272134441 ( real) -> 1.000x 6 (>=3859)
+# 0.027569373
+# calls/sec ( time) -> speed covers
+# secs/call
+#
+# In the table above 1-3 are JSON::Ext::Generator methods. 4, 6, and 7 are
+# JSON::Pure::Generator methods and 5 is the Rails JSON generator. It is now a
+# bit faster than the generator_safe and generator_pretty methods of the pure
+# variant but slower than the others.
+#
+# To achieve the fastest JSON text output, you can use the fast_generate
+# method. Beware, that this will disable the checking for circular Ruby data
+# structures, which may cause JSON to go into an infinite loop.
+#
+# Here are the median comparisons for completeness' sake:
+#
+# Comparing times (call_time_median):
+# 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
+# 708.258020939 ( real) -> 16.547x
+# 0.001411915
+# 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
+# 569.105020353 ( real) -> 13.296x
+# 0.001757145
+# 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
+# 482.825371244 ( real) -> 11.280x
+# 0.002071142
+# 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
+# 62.717626652 ( real) -> 1.465x
+# 0.015944481
+# 5 GeneratorBenchmarkRails#generator 1000 repeats:
+# 43.965681162 ( real) -> 1.027x
+# 0.022745013
+# 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
+# 43.929073409 ( real) -> 1.026x 7 (>=3859)
+# 0.022763968
+# 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
+# 42.802514491 ( real) -> 1.000x 6 (>=3859)
+# 0.023363113
+# calls/sec ( time) -> speed covers
+# secs/call
+#
+# == Examples
+#
+# To create a JSON text from a ruby data structure, you can call JSON.generate
+# like that:
+#
+# json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
+# # => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]"
+#
+# To create a valid JSON text you have to make sure, that the output is
+# embedded in either a JSON array [] or a JSON object {}. The easiest way to do
+# this, is by putting your values in a Ruby Array or Hash instance.
+#
+# To get back a ruby data structure from a JSON text, you have to call
+# JSON.parse on it:
+#
+# JSON.parse json
+# # => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"]
+#
+# Note, that the range from the original data structure is a simple
+# string now. The reason for this is, that JSON doesn't support ranges
+# or arbitrary classes. In this case the json library falls back to call
+# Object#to_json, which is the same as #to_s.to_json.
+#
+# It's possible to add JSON support serialization to arbitrary classes by
+# simply implementing a more specialized version of the #to_json method, that
+# should return a JSON object (a hash converted to JSON with #to_json) like
+# this (don't forget the *a for all the arguments):
+#
+# class Range
+# def to_json(*a)
+# {
+# 'json_class' => self.class.name, # = 'Range'
+# 'data' => [ first, last, exclude_end? ]
+# }.to_json(*a)
+# end
+# end
+#
+# The hash key 'json_class' is the class, that will be asked to deserialise the
+# JSON representation later. In this case it's 'Range', but any namespace of
+# the form 'A::B' or '::A::B' will do. All other keys are arbitrary and can be
+# used to store the necessary data to configure the object to be deserialised.
+#
+# If a the key 'json_class' is found in a JSON object, the JSON parser checks
+# if the given class responds to the json_create class method. If so, it is
+# called with the JSON object converted to a Ruby hash. So a range can
+# be deserialised by implementing Range.json_create like this:
+#
+# class Range
+# def self.json_create(o)
+# new(*o['data'])
+# end
+# end
+#
+# Now it possible to serialise/deserialise ranges as well:
+#
+# json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
+# # => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]"
+# JSON.parse json
+# # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
+#
+# JSON.generate always creates the shortest possible string representation of a
+# ruby data structure in one line. This good for data storage or network
+# protocols, but not so good for humans to read. Fortunately there's also
+# JSON.pretty_generate (or JSON.pretty_generate) that creates a more
+# readable output:
+#
+# puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10])
+# [
+# 1,
+# 2,
+# {
+# "a": 3.141
+# },
+# false,
+# true,
+# null,
+# {
+# "json_class": "Range",
+# "data": [
+# 4,
+# 10,
+# false
+# ]
+# }
+# ]
+#
+# There are also the methods Kernel#j for generate, and Kernel#jj for
+# pretty_generate output to the console, that work analogous to Core Ruby's p
+# and the pp library's pp methods.
+#
+# The script tools/server.rb contains a small example if you want to test, how
+# receiving a JSON object from a webrick server in your browser with the
+# javasript prototype library (http://www.prototypejs.org) works.
+#
diff --git a/ext/json/ext/generator/extconf.rb b/ext/json/ext/generator/extconf.rb
new file mode 100644
index 0000000..797b566
--- /dev/null
+++ b/ext/json/ext/generator/extconf.rb
@@ -0,0 +1,11 @@
+require 'mkmf'
+require 'rbconfig'
+
+if CONFIG['CC'] =~ /gcc/
+ $CFLAGS += ' -Wall'
+ #$CFLAGS += ' -O0 -ggdb'
+end
+
+have_header("ruby/st.h") || have_header("st.h")
+have_header("ruby/encoding.h")
+create_makefile 'generator'
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c
new file mode 100644
index 0000000..94e59f7
--- /dev/null
+++ b/ext/json/ext/generator/generator.c
@@ -0,0 +1,919 @@
+#include <string.h>
+#include "ruby.h"
+#if HAVE_RUBY_ST_H
+#include "ruby/st.h"
+#endif
+#if HAVE_ST_H
+#include "st.h"
+#endif
+#include "unicode.h"
+#include <math.h>
+
+#ifndef RHASH_TBL
+#define RHASH_TBL(hsh) (RHASH(hsh)->tbl)
+#endif
+
+#ifndef RHASH_SIZE
+#define RHASH_SIZE(hsh) (RHASH(hsh)->tbl->num_entries)
+#endif
+
+#ifndef RFLOAT_VALUE
+#define RFLOAT_VALUE(val) (RFLOAT(val)->value)
+#endif
+
+#ifdef HAVE_RUBY_ENCODING_H
+#include "ruby/encoding.h"
+#define FORCE_UTF8(obj) rb_enc_associate((obj), rb_utf8_encoding())
+#else
+#define FORCE_UTF8(obj)
+#endif
+
+#define check_max_nesting(state, depth) do { \
+ long current_nesting = 1 + depth; \
+ if (state->max_nesting != 0 && current_nesting > state->max_nesting) \
+ rb_raise(eNestingError, "nesting of %ld is too deep", current_nesting); \
+} while (0);
+
+static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject,
+ mHash, mArray, mInteger, mFloat, mString, mString_Extend,
+ mTrueClass, mFalseClass, mNilClass, eGeneratorError,
+ eCircularDatastructure, eNestingError;
+
+static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before,
+ i_object_nl, i_array_nl, i_check_circular, i_max_nesting,
+ i_allow_nan, i_pack, i_unpack, i_create_id, i_extend;
+
+typedef struct JSON_Generator_StateStruct {
+ VALUE indent;
+ VALUE space;
+ VALUE space_before;
+ VALUE object_nl;
+ VALUE array_nl;
+ int check_circular;
+ VALUE seen;
+ VALUE memo;
+ VALUE depth;
+ long max_nesting;
+ int flag;
+ int allow_nan;
+} JSON_Generator_State;
+
+#define GET_STATE(self) \
+ JSON_Generator_State *state; \
+ Data_Get_Struct(self, JSON_Generator_State, state);
+
+/*
+ * Document-module: JSON::Ext::Generator
+ *
+ * This is the JSON generator implemented as a C extension. It can be
+ * configured to be used by setting
+ *
+ * JSON.generator = JSON::Ext::Generator
+ *
+ * with the method generator= in JSON.
+ *
+ */
+
+static int hash_to_json_state_i(VALUE key, VALUE value, VALUE Vstate)
+{
+ VALUE json, buf, Vdepth;
+ GET_STATE(Vstate);
+ buf = state->memo;
+ Vdepth = state->depth;
+
+ if (key == Qundef) return ST_CONTINUE;
+ if (state->flag) {
+ state->flag = 0;
+ rb_str_buf_cat2(buf, ",");
+ if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(buf, state->object_nl);
+ }
+ if (RSTRING_LEN(state->object_nl)) {
+ rb_str_buf_append(buf, rb_str_times(state->indent, Vdepth));
+ }
+ json = rb_funcall(rb_funcall(key, i_to_s, 0), i_to_json, 2, Vstate, Vdepth);
+ Check_Type(json, T_STRING);
+ rb_str_buf_append(buf, json);
+ OBJ_INFECT(buf, json);
+ if (RSTRING_LEN(state->space_before)) {
+ rb_str_buf_append(buf, state->space_before);
+ }
+ rb_str_buf_cat2(buf, ":");
+ if (RSTRING_LEN(state->space)) rb_str_buf_append(buf, state->space);
+ json = rb_funcall(value, i_to_json, 2, Vstate, Vdepth);
+ Check_Type(json, T_STRING);
+ state->flag = 1;
+ rb_str_buf_append(buf, json);
+ OBJ_INFECT(buf, json);
+ state->depth = Vdepth;
+ state->memo = buf;
+ return ST_CONTINUE;
+}
+
+inline static VALUE mHash_json_transfrom(VALUE self, VALUE Vstate, VALUE Vdepth) {
+ long depth, len = RHASH_SIZE(self);
+ VALUE result;
+ GET_STATE(Vstate);
+
+ depth = 1 + FIX2LONG(Vdepth);
+ result = rb_str_buf_new(len);
+ state->memo = result;
+ state->depth = LONG2FIX(depth);
+ state->flag = 0;
+ rb_str_buf_cat2(result, "{");
+ if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(result, state->object_nl);
+ rb_hash_foreach(self, hash_to_json_state_i, Vstate);
+ if (RSTRING_LEN(state->object_nl)) rb_str_buf_append(result, state->object_nl);
+ if (RSTRING_LEN(state->object_nl)) {
+ rb_str_buf_append(result, rb_str_times(state->indent, Vdepth));
+ }
+ rb_str_buf_cat2(result, "}");
+ return result;
+}
+
+static int hash_to_json_i(VALUE key, VALUE value, VALUE buf)
+{
+ VALUE tmp;
+
+ if (key == Qundef) return ST_CONTINUE;
+ if (RSTRING_LEN(buf) > 1) rb_str_buf_cat2(buf, ",");
+ tmp = rb_funcall(rb_funcall(key, i_to_s, 0), i_to_json, 0);
+ Check_Type(tmp, T_STRING);
+ rb_str_buf_append(buf, tmp);
+ OBJ_INFECT(buf, tmp);
+ rb_str_buf_cat2(buf, ":");
+ tmp = rb_funcall(value, i_to_json, 0);
+ Check_Type(tmp, T_STRING);
+ rb_str_buf_append(buf, tmp);
+ OBJ_INFECT(buf, tmp);
+
+ return ST_CONTINUE;
+}
+
+/*
+ * call-seq: to_json(state = nil, depth = 0)
+ *
+ * Returns a JSON string containing a JSON object, that is unparsed from
+ * this Hash instance.
+ * _state_ is a JSON::State object, that can also be used to configure the
+ * produced JSON string output further.
+ * _depth_ is used to find out nesting depth, to indent accordingly.
+ */
+static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self)
+{
+ VALUE Vstate, Vdepth, result;
+ long depth;
+
+ rb_scan_args(argc, argv, "02", &Vstate, &Vdepth);
+ depth = NIL_P(Vdepth) ? 0 : FIX2LONG(Vdepth);
+ if (NIL_P(Vstate)) {
+ long len = RHASH_SIZE(self);
+ result = rb_str_buf_new(len);
+ rb_str_buf_cat2(result, "{");
+ rb_hash_foreach(self, hash_to_json_i, result);
+ rb_str_buf_cat2(result, "}");
+ } else {
+ GET_STATE(Vstate);
+ check_max_nesting(state, depth);
+ if (state->check_circular) {
+ VALUE self_id = rb_obj_id(self);
+ if (RTEST(rb_hash_aref(state->seen, self_id))) {
+ rb_raise(eCircularDatastructure,
+ "circular data structures not supported!");
+ }
+ rb_hash_aset(state->seen, self_id, Qtrue);
+ result = mHash_json_transfrom(self, Vstate, LONG2FIX(depth));
+ rb_hash_delete(state->seen, self_id);
+ } else {
+ result = mHash_json_transfrom(self, Vstate, LONG2FIX(depth));
+ }
+ }
+ OBJ_INFECT(result, self);
+ FORCE_UTF8(result);
+ return result;
+}
+
+inline static VALUE mArray_json_transfrom(VALUE self, VALUE Vstate, VALUE Vdepth) {
+ long i, len = RARRAY_LEN(self);
+ VALUE shift, result;
+ long depth = NIL_P(Vdepth) ? 0 : FIX2LONG(Vdepth);
+ VALUE delim = rb_str_new2(",");
+ GET_STATE(Vstate);
+
+ check_max_nesting(state, depth);
+ if (state->check_circular) {
+ VALUE self_id = rb_obj_id(self);
+ rb_hash_aset(state->seen, self_id, Qtrue);
+ result = rb_str_buf_new(len);
+ if (RSTRING_LEN(state->array_nl)) rb_str_append(delim, state->array_nl);
+ shift = rb_str_times(state->indent, LONG2FIX(depth + 1));
+
+ rb_str_buf_cat2(result, "[");
+ OBJ_INFECT(result, self);
+ rb_str_buf_append(result, state->array_nl);
+ for (i = 0; i < len; i++) {
+ VALUE element = RARRAY_PTR(self)[i];
+ if (RTEST(rb_hash_aref(state->seen, rb_obj_id(element)))) {
+ rb_raise(eCircularDatastructure,
+ "circular data structures not supported!");
+ }
+ OBJ_INFECT(result, element);
+ if (i > 0) rb_str_buf_append(result, delim);
+ rb_str_buf_append(result, shift);
+ element = rb_funcall(element, i_to_json, 2, Vstate, LONG2FIX(depth + 1));
+ Check_Type(element, T_STRING);
+ rb_str_buf_append(result, element);
+ }
+ if (RSTRING_LEN(state->array_nl)) {
+ rb_str_buf_append(result, state->array_nl);
+ rb_str_buf_append(result, rb_str_times(state->indent, LONG2FIX(depth)));
+ }
+ rb_str_buf_cat2(result, "]");
+ rb_hash_delete(state->seen, self_id);
+ } else {
+ result = rb_str_buf_new(len);
+ OBJ_INFECT(result, self);
+ if (RSTRING_LEN(state->array_nl)) rb_str_append(delim, state->array_nl);
+ shift = rb_str_times(state->indent, LONG2FIX(depth + 1));
+
+ rb_str_buf_cat2(result, "[");
+ rb_str_buf_append(result, state->array_nl);
+ for (i = 0; i < len; i++) {
+ VALUE element = RARRAY_PTR(self)[i];
+ OBJ_INFECT(result, element);
+ if (i > 0) rb_str_buf_append(result, delim);
+ rb_str_buf_append(result, shift);
+ element = rb_funcall(element, i_to_json, 2, Vstate, LONG2FIX(depth + 1));
+ Check_Type(element, T_STRING);
+ rb_str_buf_append(result, element);
+ }
+ rb_str_buf_append(result, state->array_nl);
+ if (RSTRING_LEN(state->array_nl)) {
+ rb_str_buf_append(result, rb_str_times(state->indent, LONG2FIX(depth)));
+ }
+ rb_str_buf_cat2(result, "]");
+ }
+ return result;
+}
+
+/*
+ * call-seq: to_json(state = nil, depth = 0)
+ *
+ * Returns a JSON string containing a JSON array, that is unparsed from
+ * this Array instance.
+ * _state_ is a JSON::State object, that can also be used to configure the
+ * produced JSON string output further.
+ * _depth_ is used to find out nesting depth, to indent accordingly.
+ */
+static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self) {
+ VALUE Vstate, Vdepth, result;
+
+ rb_scan_args(argc, argv, "02", &Vstate, &Vdepth);
+ if (NIL_P(Vstate)) {
+ long i, len = RARRAY_LEN(self);
+ result = rb_str_buf_new(2 + 2 * len);
+ rb_str_buf_cat2(result, "[");
+ OBJ_INFECT(result, self);
+ for (i = 0; i < len; i++) {
+ VALUE element = RARRAY_PTR(self)[i];
+ OBJ_INFECT(result, element);
+ if (i > 0) rb_str_buf_cat2(result, ",");
+ element = rb_funcall(element, i_to_json, 0);
+ Check_Type(element, T_STRING);
+ rb_str_buf_append(result, element);
+ }
+ rb_str_buf_cat2(result, "]");
+ } else {
+ result = mArray_json_transfrom(self, Vstate, Vdepth);
+ }
+ OBJ_INFECT(result, self);
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Returns a JSON string representation for this Integer number.
+ */
+static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self)
+{
+ VALUE result = rb_funcall(self, i_to_s, 0);
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Returns a JSON string representation for this Float number.
+ */
+static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self)
+{
+ JSON_Generator_State *state = NULL;
+ VALUE Vstate, rest, tmp, result;
+ double value = RFLOAT_VALUE(self);
+ rb_scan_args(argc, argv, "01*", &Vstate, &rest);
+ if (!NIL_P(Vstate)) Data_Get_Struct(Vstate, JSON_Generator_State, state);
+ if (isinf(value)) {
+ if (!state || state->allow_nan) {
+ result = rb_funcall(self, i_to_s, 0);
+ } else {
+ tmp = rb_funcall(self, i_to_s, 0);
+ rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp));
+ }
+ } else if (isnan(value)) {
+ if (!state || state->allow_nan) {
+ result = rb_funcall(self, i_to_s, 0);
+ } else {
+ tmp = rb_funcall(self, i_to_s, 0);
+ rb_raise(eGeneratorError, "%u: %s not allowed in JSON", __LINE__, StringValueCStr(tmp));
+ }
+ } else {
+ result = rb_funcall(self, i_to_s, 0);
+ }
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: String.included(modul)
+ *
+ * Extends _modul_ with the String::Extend module.
+ */
+static VALUE mString_included_s(VALUE self, VALUE modul) {
+ VALUE result = rb_funcall(modul, i_extend, 1, mString_Extend);
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * This string should be encoded with UTF-8 A call to this method
+ * returns a JSON string encoded with UTF16 big endian characters as
+ * \u????.
+ */
+static VALUE mString_to_json(int argc, VALUE *argv, VALUE self)
+{
+ VALUE result = rb_str_buf_new(RSTRING_LEN(self));
+ rb_str_buf_cat2(result, "\"");
+ JSON_convert_UTF8_to_JSON(result, self, strictConversion);
+ rb_str_buf_cat2(result, "\"");
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: to_json_raw_object()
+ *
+ * This method creates a raw object hash, that can be nested into
+ * other data structures and will be unparsed as a raw string. This
+ * method should be used, if you want to convert raw strings to JSON
+ * instead of UTF-8 strings, e. g. binary data.
+ */
+static VALUE mString_to_json_raw_object(VALUE self) {
+ VALUE ary;
+ VALUE result = rb_hash_new();
+ rb_hash_aset(result, rb_funcall(mJSON, i_create_id, 0), rb_class_name(rb_obj_class(self)));
+ ary = rb_funcall(self, i_unpack, 1, rb_str_new2("C*"));
+ rb_hash_aset(result, rb_str_new2("raw"), ary);
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: to_json_raw(*args)
+ *
+ * This method creates a JSON text from the result of a call to
+ * to_json_raw_object of this String.
+ */
+static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self) {
+ VALUE result, obj = mString_to_json_raw_object(self);
+ Check_Type(obj, T_HASH);
+ result = mHash_to_json(argc, argv, obj);
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: json_create(o)
+ *
+ * Raw Strings are JSON Objects (the raw bytes are stored in an array for the
+ * key "raw"). The Ruby String can be created by this module method.
+ */
+static VALUE mString_Extend_json_create(VALUE self, VALUE o) {
+ VALUE ary;
+ Check_Type(o, T_HASH);
+ ary = rb_hash_aref(o, rb_str_new2("raw"));
+ return rb_funcall(ary, i_pack, 1, rb_str_new2("C*"));
+}
+
+/*
+ * call-seq: to_json(state = nil, depth = 0)
+ *
+ * Returns a JSON string for true: 'true'.
+ */
+static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self)
+{
+ VALUE result = rb_str_new2("true");
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: to_json(state = nil, depth = 0)
+ *
+ * Returns a JSON string for false: 'false'.
+ */
+static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self)
+{
+ VALUE result = rb_str_new2("false");
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: to_json(state = nil, depth = 0)
+ *
+ */
+static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self)
+{
+ VALUE result = rb_str_new2("null");
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * call-seq: to_json(*)
+ *
+ * Converts this object to a string (calling #to_s), converts
+ * it to a JSON string, and returns the result. This is a fallback, if no
+ * special method #to_json was defined for some object.
+ */
+static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self)
+{
+ VALUE result, string = rb_funcall(self, i_to_s, 0);
+ Check_Type(string, T_STRING);
+ result = mString_to_json(argc, argv, string);
+ FORCE_UTF8(result);
+ return result;
+}
+
+/*
+ * Document-class: JSON::Ext::Generator::State
+ *
+ * This class is used to create State instances, that are use to hold data
+ * while generating a JSON text from a a Ruby data structure.
+ */
+
+static void State_mark(JSON_Generator_State *state)
+{
+ rb_gc_mark_maybe(state->indent);
+ rb_gc_mark_maybe(state->space);
+ rb_gc_mark_maybe(state->space_before);
+ rb_gc_mark_maybe(state->object_nl);
+ rb_gc_mark_maybe(state->array_nl);
+ rb_gc_mark_maybe(state->seen);
+ rb_gc_mark_maybe(state->memo);
+ rb_gc_mark_maybe(state->depth);
+}
+
+static JSON_Generator_State *State_allocate()
+{
+ JSON_Generator_State *state = ALLOC(JSON_Generator_State);
+ return state;
+}
+
+static VALUE cState_s_allocate(VALUE klass)
+{
+ JSON_Generator_State *state = State_allocate();
+ return Data_Wrap_Struct(klass, State_mark, -1, state);
+}
+
+/*
+ * call-seq: configure(opts)
+ *
+ * Configure this State instance with the Hash _opts_, and return
+ * itself.
+ */
+static VALUE cState_configure(VALUE self, VALUE opts)
+{
+ VALUE tmp;
+ GET_STATE(self);
+ tmp = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
+ if (NIL_P(tmp)) tmp = rb_convert_type(opts, T_HASH, "Hash", "to_h");
+ if (NIL_P(tmp)) {
+ rb_raise(rb_eArgError, "opts has to be hash like or convertable into a hash");
+ }
+ opts = tmp;
+ tmp = rb_hash_aref(opts, ID2SYM(i_indent));
+ if (RTEST(tmp)) {
+ Check_Type(tmp, T_STRING);
+ state->indent = tmp;
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_space));
+ if (RTEST(tmp)) {
+ Check_Type(tmp, T_STRING);
+ state->space = tmp;
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_space_before));
+ if (RTEST(tmp)) {
+ Check_Type(tmp, T_STRING);
+ state->space_before = tmp;
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_array_nl));
+ if (RTEST(tmp)) {
+ Check_Type(tmp, T_STRING);
+ state->array_nl = tmp;
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_object_nl));
+ if (RTEST(tmp)) {
+ Check_Type(tmp, T_STRING);
+ state->object_nl = tmp;
+ }
+ tmp = ID2SYM(i_check_circular);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ tmp = rb_hash_aref(opts, ID2SYM(i_check_circular));
+ state->check_circular = RTEST(tmp);
+ } else {
+ state->check_circular = 1;
+ }
+ tmp = ID2SYM(i_max_nesting);
+ state->max_nesting = 19;
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ VALUE max_nesting = rb_hash_aref(opts, tmp);
+ if (RTEST(max_nesting)) {
+ Check_Type(max_nesting, T_FIXNUM);
+ state->max_nesting = FIX2LONG(max_nesting);
+ } else {
+ state->max_nesting = 0;
+ }
+ }
+ tmp = rb_hash_aref(opts, ID2SYM(i_allow_nan));
+ state->allow_nan = RTEST(tmp);
+ return self;
+}
+
+/*
+ * call-seq: to_h
+ *
+ * Returns the configuration instance variables as a hash, that can be
+ * passed to the configure method.
+ */
+static VALUE cState_to_h(VALUE self)
+{
+ VALUE result = rb_hash_new();
+ GET_STATE(self);
+ rb_hash_aset(result, ID2SYM(i_indent), state->indent);
+ rb_hash_aset(result, ID2SYM(i_space), state->space);
+ rb_hash_aset(result, ID2SYM(i_space_before), state->space_before);
+ rb_hash_aset(result, ID2SYM(i_object_nl), state->object_nl);
+ rb_hash_aset(result, ID2SYM(i_array_nl), state->array_nl);
+ rb_hash_aset(result, ID2SYM(i_check_circular), state->check_circular ? Qtrue : Qfalse);
+ rb_hash_aset(result, ID2SYM(i_allow_nan), state->allow_nan ? Qtrue : Qfalse);
+ rb_hash_aset(result, ID2SYM(i_max_nesting), LONG2FIX(state->max_nesting));
+ return result;
+}
+
+
+/*
+ * call-seq: new(opts = {})
+ *
+ * Instantiates a new State object, configured by _opts_.
+ *
+ * _opts_ can have the following keys:
+ *
+ * * *indent*: a string used to indent levels (default: ''),
+ * * *space*: a string that is put after, a : or , delimiter (default: ''),
+ * * *space_before*: a string that is put before a : pair delimiter (default: ''),
+ * * *object_nl*: a string that is put at the end of a JSON object (default: ''),
+ * * *array_nl*: a string that is put at the end of a JSON array (default: ''),
+ * * *check_circular*: true if checking for circular data structures
+ * should be done, false (the default) otherwise.
+ * * *allow_nan*: true if NaN, Infinity, and -Infinity should be
+ * generated, otherwise an exception is thrown, if these values are
+ * encountered. This options defaults to false.
+ */
+static VALUE cState_initialize(int argc, VALUE *argv, VALUE self)
+{
+ VALUE opts;
+ GET_STATE(self);
+
+ rb_scan_args(argc, argv, "01", &opts);
+ state->indent = rb_str_new2("");
+ state->space = rb_str_new2("");
+ state->space_before = rb_str_new2("");
+ state->array_nl = rb_str_new2("");
+ state->object_nl = rb_str_new2("");
+ if (NIL_P(opts)) {
+ state->check_circular = 1;
+ state->allow_nan = 0;
+ state->max_nesting = 19;
+ } else {
+ cState_configure(self, opts);
+ }
+ state->seen = rb_hash_new();
+ state->memo = Qnil;
+ state->depth = INT2FIX(0);
+ return self;
+}
+
+/*
+ * call-seq: from_state(opts)
+ *
+ * Creates a State object from _opts_, which ought to be Hash to create a
+ * new State instance configured by _opts_, something else to create an
+ * unconfigured instance. If _opts_ is a State object, it is just returned.
+ */
+static VALUE cState_from_state_s(VALUE self, VALUE opts)
+{
+ if (rb_obj_is_kind_of(opts, self)) {
+ return opts;
+ } else if (rb_obj_is_kind_of(opts, rb_cHash)) {
+ return rb_funcall(self, i_new, 1, opts);
+ } else {
+ return rb_funcall(self, i_new, 0);
+ }
+}
+
+/*
+ * call-seq: indent()
+ *
+ * This string is used to indent levels in the JSON text.
+ */
+static VALUE cState_indent(VALUE self)
+{
+ GET_STATE(self);
+ return state->indent;
+}
+
+/*
+ * call-seq: indent=(indent)
+ *
+ * This string is used to indent levels in the JSON text.
+ */
+static VALUE cState_indent_set(VALUE self, VALUE indent)
+{
+ GET_STATE(self);
+ Check_Type(indent, T_STRING);
+ return state->indent = indent;
+}
+
+/*
+ * call-seq: space()
+ *
+ * This string is used to insert a space between the tokens in a JSON
+ * string.
+ */
+static VALUE cState_space(VALUE self)
+{
+ GET_STATE(self);
+ return state->space;
+}
+
+/*
+ * call-seq: space=(space)
+ *
+ * This string is used to insert a space between the tokens in a JSON
+ * string.
+ */
+static VALUE cState_space_set(VALUE self, VALUE space)
+{
+ GET_STATE(self);
+ Check_Type(space, T_STRING);
+ return state->space = space;
+}
+
+/*
+ * call-seq: space_before()
+ *
+ * This string is used to insert a space before the ':' in JSON objects.
+ */
+static VALUE cState_space_before(VALUE self)
+{
+ GET_STATE(self);
+ return state->space_before;
+}
+
+/*
+ * call-seq: space_before=(space_before)
+ *
+ * This string is used to insert a space before the ':' in JSON objects.
+ */
+static VALUE cState_space_before_set(VALUE self, VALUE space_before)
+{
+ GET_STATE(self);
+ Check_Type(space_before, T_STRING);
+ return state->space_before = space_before;
+}
+
+/*
+ * call-seq: object_nl()
+ *
+ * This string is put at the end of a line that holds a JSON object (or
+ * Hash).
+ */
+static VALUE cState_object_nl(VALUE self)
+{
+ GET_STATE(self);
+ return state->object_nl;
+}
+
+/*
+ * call-seq: object_nl=(object_nl)
+ *
+ * This string is put at the end of a line that holds a JSON object (or
+ * Hash).
+ */
+static VALUE cState_object_nl_set(VALUE self, VALUE object_nl)
+{
+ GET_STATE(self);
+ Check_Type(object_nl, T_STRING);
+ return state->object_nl = object_nl;
+}
+
+/*
+ * call-seq: array_nl()
+ *
+ * This string is put at the end of a line that holds a JSON array.
+ */
+static VALUE cState_array_nl(VALUE self)
+{
+ GET_STATE(self);
+ return state->array_nl;
+}
+
+/*
+ * call-seq: array_nl=(array_nl)
+ *
+ * This string is put at the end of a line that holds a JSON array.
+ */
+static VALUE cState_array_nl_set(VALUE self, VALUE array_nl)
+{
+ GET_STATE(self);
+ Check_Type(array_nl, T_STRING);
+ return state->array_nl = array_nl;
+}
+
+/*
+ * call-seq: check_circular?
+ *
+ * Returns true, if circular data structures should be checked,
+ * otherwise returns false.
+ */
+static VALUE cState_check_circular_p(VALUE self)
+{
+ GET_STATE(self);
+ return state->check_circular ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq: max_nesting
+ *
+ * This integer returns the maximum level of data structure nesting in
+ * the generated JSON, max_nesting = 0 if no maximum is checked.
+ */
+static VALUE cState_max_nesting(VALUE self)
+{
+ GET_STATE(self);
+ return LONG2FIX(state->max_nesting);
+}
+
+/*
+ * call-seq: max_nesting=(depth)
+ *
+ * This sets the maximum level of data structure nesting in the generated JSON
+ * to the integer depth, max_nesting = 0 if no maximum should be checked.
+ */
+static VALUE cState_max_nesting_set(VALUE self, VALUE depth)
+{
+ GET_STATE(self);
+ Check_Type(depth, T_FIXNUM);
+ state->max_nesting = FIX2LONG(depth);
+ return Qnil;
+}
+
+/*
+ * call-seq: allow_nan?
+ *
+ * Returns true, if NaN, Infinity, and -Infinity should be generated, otherwise
+ * returns false.
+ */
+static VALUE cState_allow_nan_p(VALUE self)
+{
+ GET_STATE(self);
+ return state->allow_nan ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq: seen?(object)
+ *
+ * Returns _true_, if _object_ was already seen during this generating run.
+ */
+static VALUE cState_seen_p(VALUE self, VALUE object)
+{
+ GET_STATE(self);
+ return rb_hash_aref(state->seen, rb_obj_id(object));
+}
+
+/*
+ * call-seq: remember(object)
+ *
+ * Remember _object_, to find out if it was already encountered (if a cyclic
+ * data structure is rendered).
+ */
+static VALUE cState_remember(VALUE self, VALUE object)
+{
+ GET_STATE(self);
+ return rb_hash_aset(state->seen, rb_obj_id(object), Qtrue);
+}
+
+/*
+ * call-seq: forget(object)
+ *
+ * Forget _object_ for this generating run.
+ */
+static VALUE cState_forget(VALUE self, VALUE object)
+{
+ GET_STATE(self);
+ return rb_hash_delete(state->seen, rb_obj_id(object));
+}
+
+/*
+ *
+ */
+void Init_generator()
+{
+ rb_require("json/common");
+ mJSON = rb_define_module("JSON");
+ mExt = rb_define_module_under(mJSON, "Ext");
+ mGenerator = rb_define_module_under(mExt, "Generator");
+ eGeneratorError = rb_path2class("JSON::GeneratorError");
+ eCircularDatastructure = rb_path2class("JSON::CircularDatastructure");
+ eNestingError = rb_path2class("JSON::NestingError");
+ cState = rb_define_class_under(mGenerator, "State", rb_cObject);
+ rb_define_alloc_func(cState, cState_s_allocate);
+ rb_define_singleton_method(cState, "from_state", cState_from_state_s, 1);
+ rb_define_method(cState, "initialize", cState_initialize, -1);
+
+ rb_define_method(cState, "indent", cState_indent, 0);
+ rb_define_method(cState, "indent=", cState_indent_set, 1);
+ rb_define_method(cState, "space", cState_space, 0);
+ rb_define_method(cState, "space=", cState_space_set, 1);
+ rb_define_method(cState, "space_before", cState_space_before, 0);
+ rb_define_method(cState, "space_before=", cState_space_before_set, 1);
+ rb_define_method(cState, "object_nl", cState_object_nl, 0);
+ rb_define_method(cState, "object_nl=", cState_object_nl_set, 1);
+ rb_define_method(cState, "array_nl", cState_array_nl, 0);
+ rb_define_method(cState, "array_nl=", cState_array_nl_set, 1);
+ rb_define_method(cState, "check_circular?", cState_check_circular_p, 0);
+ rb_define_method(cState, "max_nesting", cState_max_nesting, 0);
+ rb_define_method(cState, "max_nesting=", cState_max_nesting_set, 1);
+ rb_define_method(cState, "allow_nan?", cState_allow_nan_p, 0);
+ rb_define_method(cState, "seen?", cState_seen_p, 1);
+ rb_define_method(cState, "remember", cState_remember, 1);
+ rb_define_method(cState, "forget", cState_forget, 1);
+ rb_define_method(cState, "configure", cState_configure, 1);
+ rb_define_method(cState, "to_h", cState_to_h, 0);
+
+ mGeneratorMethods = rb_define_module_under(mGenerator, "GeneratorMethods");
+ mObject = rb_define_module_under(mGeneratorMethods, "Object");
+ rb_define_method(mObject, "to_json", mObject_to_json, -1);
+ mHash = rb_define_module_under(mGeneratorMethods, "Hash");
+ rb_define_method(mHash, "to_json", mHash_to_json, -1);
+ mArray = rb_define_module_under(mGeneratorMethods, "Array");
+ rb_define_method(mArray, "to_json", mArray_to_json, -1);
+ mInteger = rb_define_module_under(mGeneratorMethods, "Integer");
+ rb_define_method(mInteger, "to_json", mInteger_to_json, -1);
+ mFloat = rb_define_module_under(mGeneratorMethods, "Float");
+ rb_define_method(mFloat, "to_json", mFloat_to_json, -1);
+ mString = rb_define_module_under(mGeneratorMethods, "String");
+ rb_define_singleton_method(mString, "included", mString_included_s, 1);
+ rb_define_method(mString, "to_json", mString_to_json, -1);
+ rb_define_method(mString, "to_json_raw", mString_to_json_raw, -1);
+ rb_define_method(mString, "to_json_raw_object", mString_to_json_raw_object, 0);
+ mString_Extend = rb_define_module_under(mString, "Extend");
+ rb_define_method(mString_Extend, "json_create", mString_Extend_json_create, 1);
+ mTrueClass = rb_define_module_under(mGeneratorMethods, "TrueClass");
+ rb_define_method(mTrueClass, "to_json", mTrueClass_to_json, -1);
+ mFalseClass = rb_define_module_under(mGeneratorMethods, "FalseClass");
+ rb_define_method(mFalseClass, "to_json", mFalseClass_to_json, -1);
+ mNilClass = rb_define_module_under(mGeneratorMethods, "NilClass");
+ rb_define_method(mNilClass, "to_json", mNilClass_to_json, -1);
+
+ i_to_s = rb_intern("to_s");
+ i_to_json = rb_intern("to_json");
+ i_new = rb_intern("new");
+ i_indent = rb_intern("indent");
+ i_space = rb_intern("space");
+ i_space_before = rb_intern("space_before");
+ i_object_nl = rb_intern("object_nl");
+ i_array_nl = rb_intern("array_nl");
+ i_check_circular = rb_intern("check_circular");
+ i_max_nesting = rb_intern("max_nesting");
+ i_allow_nan = rb_intern("allow_nan");
+ i_pack = rb_intern("pack");
+ i_unpack = rb_intern("unpack");
+ i_create_id = rb_intern("create_id");
+ i_extend = rb_intern("extend");
+}
diff --git a/ext/json/ext/generator/unicode.c b/ext/json/ext/generator/unicode.c
new file mode 100644
index 0000000..93e8502
--- /dev/null
+++ b/ext/json/ext/generator/unicode.c
@@ -0,0 +1,180 @@
+#include "unicode.h"
+
+#define unicode_escape(buffer, character) \
+ snprintf(buf, 7, "\\u%04x", (unsigned int) (character)); \
+ rb_str_buf_cat(buffer, buf, 6);
+
+/*
+ * Copyright 2001-2004 Unicode, Inc.
+ *
+ * Disclaimer
+ *
+ * This source code is provided as is by Unicode, Inc. No claims are
+ * made as to fitness for any particular purpose. No warranties of any
+ * kind are expressed or implied. The recipient agrees to determine
+ * applicability of information provided. If this file has been
+ * purchased on magnetic or optical media from Unicode, Inc., the
+ * sole remedy for any claim will be exchange of defective media
+ * within 90 days of receipt.
+ *
+ * Limitations on Rights to Redistribute This Code
+ *
+ * Unicode, Inc. hereby grants the right to freely use the information
+ * supplied in this file in the creation of products supporting the
+ * Unicode Standard, and to make copies of this file in any form
+ * for internal or external distribution as long as this notice
+ * remains attached.
+ */
+
+/*
+ * Index into the table below with the first byte of a UTF-8 sequence to
+ * get the number of trailing bytes that are supposed to follow it.
+ * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
+ * left as-is for anyone who may want to do such conversion, which was
+ * allowed in earlier algorithms.
+ */
+static const char trailingBytesForUTF8[256] = {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
+};
+
+/*
+ * Magic values subtracted from a buffer value during UTF8 conversion.
+ * This table contains as many values as there might be trailing bytes
+ * in a UTF-8 sequence.
+ */
+static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
+ 0x03C82080UL, 0xFA082080UL, 0x82082080UL };
+
+/*
+ * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
+ * into the first byte, depending on how many bytes follow. There are
+ * as many entries in this table as there are UTF-8 sequence types.
+ * (I.e., one byte sequence, two byte... etc.). Remember that sequencs
+ * for *legal* UTF-8 will be 4 or fewer bytes total.
+ */
+static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
+
+/*
+ * Utility routine to tell whether a sequence of bytes is legal UTF-8.
+ * This must be called with the length pre-determined by the first byte.
+ * If not calling this from ConvertUTF8to*, then the length can be set by:
+ * length = trailingBytesForUTF8[*source]+1;
+ * and the sequence is illegal right away if there aren't that many bytes
+ * available.
+ * If presented with a length > 4, this returns 0. The Unicode
+ * definition of UTF-8 goes up to 4-byte sequences.
+ */
+
+inline static unsigned char isLegalUTF8(const UTF8 *source, int length)
+{
+ UTF8 a;
+ const UTF8 *srcptr = source+length;
+ switch (length) {
+ default: return 0;
+ /* Everything else falls through when "1"... */
+ case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
+ case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0;
+ case 2: if ((a = (*--srcptr)) > 0xBF) return 0;
+
+ switch (*source) {
+ /* no fall-through in this inner switch */
+ case 0xE0: if (a < 0xA0) return 0; break;
+ case 0xED: if (a > 0x9F) return 0; break;
+ case 0xF0: if (a < 0x90) return 0; break;
+ case 0xF4: if (a > 0x8F) return 0; break;
+ default: if (a < 0x80) return 0;
+ }
+
+ case 1: if (*source >= 0x80 && *source < 0xC2) return 0;
+ }
+ if (*source > 0xF4) return 0;
+ return 1;
+}
+
+void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags)
+{
+ char buf[7];
+ const UTF8* source = (UTF8 *) RSTRING_PTR(string);
+ const UTF8* sourceEnd = source + RSTRING_LEN(string);
+
+ while (source < sourceEnd) {
+ UTF32 ch = 0;
+ unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
+ if (source + extraBytesToRead >= sourceEnd) {
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "partial character in source, but hit end");
+ }
+ if (!isLegalUTF8(source, extraBytesToRead+1)) {
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "source sequence is illegal/malformed");
+ }
+ /*
+ * The cases all fall through. See "Note A" below.
+ */
+ switch (extraBytesToRead) {
+ case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
+ case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */
+ case 3: ch += *source++; ch <<= 6;
+ case 2: ch += *source++; ch <<= 6;
+ case 1: ch += *source++; ch <<= 6;
+ case 0: ch += *source++;
+ }
+ ch -= offsetsFromUTF8[extraBytesToRead];
+
+ if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */
+ /* UTF-16 surrogate values are illegal in UTF-32 */
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
+ if (flags == strictConversion) {
+ source -= (extraBytesToRead+1); /* return to the illegal value itself */
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "source sequence is illegal/malformed");
+ } else {
+ unicode_escape(buffer, UNI_REPLACEMENT_CHAR);
+ }
+ } else {
+ /* normal case */
+ if (ch == '"') {
+ rb_str_buf_cat2(buffer, "\\\"");
+ } else if (ch == '\\') {
+ rb_str_buf_cat2(buffer, "\\\\");
+ } else if (ch >= 0x20 && ch <= 0x7f) {
+ rb_str_buf_cat(buffer, (char *) source - 1, 1);
+ } else if (ch == '\n') {
+ rb_str_buf_cat2(buffer, "\\n");
+ } else if (ch == '\r') {
+ rb_str_buf_cat2(buffer, "\\r");
+ } else if (ch == '\t') {
+ rb_str_buf_cat2(buffer, "\\t");
+ } else if (ch == '\f') {
+ rb_str_buf_cat2(buffer, "\\f");
+ } else if (ch == '\b') {
+ rb_str_buf_cat2(buffer, "\\b");
+ } else if (ch < 0x20) {
+ unicode_escape(buffer, (UTF16) ch);
+ } else {
+ unicode_escape(buffer, (UTF16) ch);
+ }
+ }
+ } else if (ch > UNI_MAX_UTF16) {
+ if (flags == strictConversion) {
+ source -= (extraBytesToRead+1); /* return to the start */
+ rb_raise(rb_path2class("JSON::GeneratorError"),
+ "source sequence is illegal/malformed");
+ } else {
+ unicode_escape(buffer, UNI_REPLACEMENT_CHAR);
+ }
+ } else {
+ /* target is a character in range 0xFFFF - 0x10FFFF. */
+ ch -= halfBase;
+ unicode_escape(buffer, (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START));
+ unicode_escape(buffer, (UTF16)((ch & halfMask) + UNI_SUR_LOW_START));
+ }
+ }
+}
diff --git a/ext/json/ext/generator/unicode.h b/ext/json/ext/generator/unicode.h
new file mode 100644
index 0000000..841474b
--- /dev/null
+++ b/ext/json/ext/generator/unicode.h
@@ -0,0 +1,53 @@
+#include "ruby.h"
+
+#ifndef _GENERATOR_UNICODE_H_
+#define _GENERATOR_UNICODE_H_
+
+typedef enum {
+ conversionOK = 0, /* conversion successful */
+ sourceExhausted, /* partial character in source, but hit end */
+ targetExhausted, /* insuff. room in target for conversion */
+ sourceIllegal /* source sequence is illegal/malformed */
+} ConversionResult;
+
+typedef enum {
+ strictConversion = 0,
+ lenientConversion
+} ConversionFlags;
+
+typedef unsigned long UTF32; /* at least 32 bits */
+typedef unsigned short UTF16; /* at least 16 bits */
+typedef unsigned char UTF8; /* typically 8 bits */
+
+#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
+#define UNI_MAX_BMP (UTF32)0x0000FFFF
+#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
+#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
+#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
+
+#define UNI_SUR_HIGH_START (UTF32)0xD800
+#define UNI_SUR_HIGH_END (UTF32)0xDBFF
+#define UNI_SUR_LOW_START (UTF32)0xDC00
+#define UNI_SUR_LOW_END (UTF32)0xDFFF
+
+static const int halfShift = 10; /* used for shifting by 10 bits */
+
+static const UTF32 halfBase = 0x0010000UL;
+static const UTF32 halfMask = 0x3FFUL;
+
+void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags);
+
+#ifndef RARRAY_PTR
+#define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
+#endif
+#ifndef RARRAY_LEN
+#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
+#endif
+#ifndef RSTRING_PTR
+#define RSTRING_PTR(string) RSTRING(string)->ptr
+#endif
+#ifndef RSTRING_LEN
+#define RSTRING_LEN(string) RSTRING(string)->len
+#endif
+
+#endif
diff --git a/ext/json/ext/parser/extconf.rb b/ext/json/ext/parser/extconf.rb
new file mode 100644
index 0000000..6226394
--- /dev/null
+++ b/ext/json/ext/parser/extconf.rb
@@ -0,0 +1,11 @@
+require 'mkmf'
+require 'rbconfig'
+
+if CONFIG['CC'] =~ /gcc/
+ $CFLAGS += ' -Wall'
+ #$CFLAGS += ' -O0 -ggdb'
+end
+
+have_header("ruby/st.h") || have_header("st.h")
+have_header("re.h")
+create_makefile 'parser'
diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c
new file mode 100644
index 0000000..6851e06
--- /dev/null
+++ b/ext/json/ext/parser/parser.c
@@ -0,0 +1,1829 @@
+
+#line 1 "parser.rl"
+#include "ruby.h"
+#include "unicode.h"
+#if HAVE_RE_H
+#include "re.h"
+#endif
+#if HAVE_RUBY_ST_H
+#include "ruby/st.h"
+#endif
+#if HAVE_ST_H
+#include "st.h"
+#endif
+
+#define EVIL 0x666
+
+#ifndef RHASH_TBL
+#define RHASH_TBL(hsh) (RHASH(hsh)->tbl)
+#endif
+
+#ifdef HAVE_RUBY_ENCODING_H
+#include "ruby/encoding.h"
+#define FORCE_UTF8(obj) rb_enc_associate((obj), rb_utf8_encoding())
+#else
+#define FORCE_UTF8(obj)
+#endif
+
+static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
+static VALUE CNaN, CInfinity, CMinusInfinity;
+
+static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
+ i_chr, i_max_nesting, i_allow_nan, i_object_class, i_array_class;
+
+#define MinusInfinity "-Infinity"
+
+typedef struct JSON_ParserStruct {
+ VALUE Vsource;
+ char *source;
+ long len;
+ char *memo;
+ VALUE create_id;
+ int max_nesting;
+ int current_nesting;
+ int allow_nan;
+ VALUE object_class;
+ VALUE array_class;
+} JSON_Parser;
+
+static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
+
+#define GET_STRUCT \
+ JSON_Parser *json; \
+ Data_Get_Struct(self, JSON_Parser, json);
+
+
+#line 84 "parser.rl"
+
+
+
+#line 66 "parser.c"
+static const int JSON_object_start = 1;
+static const int JSON_object_first_final = 27;
+static const int JSON_object_error = 0;
+
+static const int JSON_object_en_main = 1;
+
+
+#line 117 "parser.rl"
+
+
+static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE last_name = Qnil;
+ VALUE object_class = json->object_class;
+
+ if (json->max_nesting && json->current_nesting > json->max_nesting) {
+ rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
+ }
+
+ *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
+
+
+#line 90 "parser.c"
+ {
+ cs = JSON_object_start;
+ }
+
+#line 132 "parser.rl"
+
+#line 97 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ if ( (*p) == 123 )
+ goto st2;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 13: goto st2;
+ case 32: goto st2;
+ case 34: goto tr2;
+ case 47: goto st23;
+ case 125: goto tr4;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st2;
+ goto st0;
+tr2:
+#line 103 "parser.rl"
+ {
+ char *np = JSON_parse_string(json, p, pe, &last_name);
+ if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 135 "parser.c"
+ switch( (*p) ) {
+ case 13: goto st3;
+ case 32: goto st3;
+ case 47: goto st4;
+ case 58: goto st8;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st3;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ switch( (*p) ) {
+ case 42: goto st5;
+ case 47: goto st7;
+ }
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 42 )
+ goto st6;
+ goto st5;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 42: goto st6;
+ case 47: goto st3;
+ }
+ goto st5;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) == 10 )
+ goto st3;
+ goto st7;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 13: goto st8;
+ case 32: goto st8;
+ case 34: goto tr11;
+ case 45: goto tr11;
+ case 47: goto st19;
+ case 73: goto tr11;
+ case 78: goto tr11;
+ case 91: goto tr11;
+ case 102: goto tr11;
+ case 110: goto tr11;
+ case 116: goto tr11;
+ case 123: goto tr11;
+ }
+ if ( (*p) > 10 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr11;
+ } else if ( (*p) >= 9 )
+ goto st8;
+ goto st0;
+tr11:
+#line 92 "parser.rl"
+ {
+ VALUE v = Qnil;
+ char *np = JSON_parse_value(json, p, pe, &v);
+ if (np == NULL) {
+ p--; {p++; cs = 9; goto _out;}
+ } else {
+ rb_hash_aset(*result, last_name, v);
+ {p = (( np))-1;}
+ }
+ }
+ goto st9;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+#line 218 "parser.c"
+ switch( (*p) ) {
+ case 13: goto st9;
+ case 32: goto st9;
+ case 44: goto st10;
+ case 47: goto st15;
+ case 125: goto tr4;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st9;
+ goto st0;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ switch( (*p) ) {
+ case 13: goto st10;
+ case 32: goto st10;
+ case 34: goto tr2;
+ case 47: goto st11;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st10;
+ goto st0;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ switch( (*p) ) {
+ case 42: goto st12;
+ case 47: goto st14;
+ }
+ goto st0;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ if ( (*p) == 42 )
+ goto st13;
+ goto st12;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ switch( (*p) ) {
+ case 42: goto st13;
+ case 47: goto st10;
+ }
+ goto st12;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ if ( (*p) == 10 )
+ goto st10;
+ goto st14;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ switch( (*p) ) {
+ case 42: goto st16;
+ case 47: goto st18;
+ }
+ goto st0;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ if ( (*p) == 42 )
+ goto st17;
+ goto st16;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+ switch( (*p) ) {
+ case 42: goto st17;
+ case 47: goto st9;
+ }
+ goto st16;
+st18:
+ if ( ++p == pe )
+ goto _test_eof18;
+case 18:
+ if ( (*p) == 10 )
+ goto st9;
+ goto st18;
+tr4:
+#line 108 "parser.rl"
+ { p--; {p++; cs = 27; goto _out;} }
+ goto st27;
+st27:
+ if ( ++p == pe )
+ goto _test_eof27;
+case 27:
+#line 314 "parser.c"
+ goto st0;
+st19:
+ if ( ++p == pe )
+ goto _test_eof19;
+case 19:
+ switch( (*p) ) {
+ case 42: goto st20;
+ case 47: goto st22;
+ }
+ goto st0;
+st20:
+ if ( ++p == pe )
+ goto _test_eof20;
+case 20:
+ if ( (*p) == 42 )
+ goto st21;
+ goto st20;
+st21:
+ if ( ++p == pe )
+ goto _test_eof21;
+case 21:
+ switch( (*p) ) {
+ case 42: goto st21;
+ case 47: goto st8;
+ }
+ goto st20;
+st22:
+ if ( ++p == pe )
+ goto _test_eof22;
+case 22:
+ if ( (*p) == 10 )
+ goto st8;
+ goto st22;
+st23:
+ if ( ++p == pe )
+ goto _test_eof23;
+case 23:
+ switch( (*p) ) {
+ case 42: goto st24;
+ case 47: goto st26;
+ }
+ goto st0;
+st24:
+ if ( ++p == pe )
+ goto _test_eof24;
+case 24:
+ if ( (*p) == 42 )
+ goto st25;
+ goto st24;
+st25:
+ if ( ++p == pe )
+ goto _test_eof25;
+case 25:
+ switch( (*p) ) {
+ case 42: goto st25;
+ case 47: goto st2;
+ }
+ goto st24;
+st26:
+ if ( ++p == pe )
+ goto _test_eof26;
+case 26:
+ if ( (*p) == 10 )
+ goto st2;
+ goto st26;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof18: cs = 18; goto _test_eof;
+ _test_eof27: cs = 27; goto _test_eof;
+ _test_eof19: cs = 19; goto _test_eof;
+ _test_eof20: cs = 20; goto _test_eof;
+ _test_eof21: cs = 21; goto _test_eof;
+ _test_eof22: cs = 22; goto _test_eof;
+ _test_eof23: cs = 23; goto _test_eof;
+ _test_eof24: cs = 24; goto _test_eof;
+ _test_eof25: cs = 25; goto _test_eof;
+ _test_eof26: cs = 26; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 133 "parser.rl"
+
+ if (cs >= JSON_object_first_final) {
+ if (RTEST(json->create_id)) {
+ VALUE klassname = rb_hash_aref(*result, json->create_id);
+ if (!NIL_P(klassname)) {
+ VALUE klass = rb_path2class(StringValueCStr(klassname));
+ if RTEST(rb_funcall(klass, i_json_creatable_p, 0)) {
+ *result = rb_funcall(klass, i_json_create, 1, *result);
+ }
+ }
+ }
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+#line 431 "parser.c"
+static const int JSON_value_start = 1;
+static const int JSON_value_first_final = 21;
+static const int JSON_value_error = 0;
+
+static const int JSON_value_en_main = 1;
+
+
+#line 231 "parser.rl"
+
+
+static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+
+#line 447 "parser.c"
+ {
+ cs = JSON_value_start;
+ }
+
+#line 238 "parser.rl"
+
+#line 454 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ switch( (*p) ) {
+ case 34: goto tr0;
+ case 45: goto tr2;
+ case 73: goto st2;
+ case 78: goto st9;
+ case 91: goto tr5;
+ case 102: goto st11;
+ case 110: goto st15;
+ case 116: goto st18;
+ case 123: goto tr9;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr2;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+tr0:
+#line 179 "parser.rl"
+ {
+ char *np = JSON_parse_string(json, p, pe, result);
+ if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st21;
+tr2:
+#line 184 "parser.rl"
+ {
+ char *np;
+ if(pe > p + 9 && !strncmp(MinusInfinity, p, 9)) {
+ if (json->allow_nan) {
+ *result = CMinusInfinity;
+ {p = (( p + 10))-1;}
+ p--; {p++; cs = 21; goto _out;}
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ }
+ }
+ np = JSON_parse_float(json, p, pe, result);
+ if (np != NULL) {p = (( np))-1;}
+ np = JSON_parse_integer(json, p, pe, result);
+ if (np != NULL) {p = (( np))-1;}
+ p--; {p++; cs = 21; goto _out;}
+ }
+ goto st21;
+tr5:
+#line 202 "parser.rl"
+ {
+ char *np;
+ json->current_nesting++;
+ np = JSON_parse_array(json, p, pe, result);
+ json->current_nesting--;
+ if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st21;
+tr9:
+#line 210 "parser.rl"
+ {
+ char *np;
+ json->current_nesting++;
+ np = JSON_parse_object(json, p, pe, result);
+ json->current_nesting--;
+ if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st21;
+tr16:
+#line 172 "parser.rl"
+ {
+ if (json->allow_nan) {
+ *result = CInfinity;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
+ }
+ }
+ goto st21;
+tr18:
+#line 165 "parser.rl"
+ {
+ if (json->allow_nan) {
+ *result = CNaN;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
+ }
+ }
+ goto st21;
+tr22:
+#line 159 "parser.rl"
+ {
+ *result = Qfalse;
+ }
+ goto st21;
+tr25:
+#line 156 "parser.rl"
+ {
+ *result = Qnil;
+ }
+ goto st21;
+tr28:
+#line 162 "parser.rl"
+ {
+ *result = Qtrue;
+ }
+ goto st21;
+st21:
+ if ( ++p == pe )
+ goto _test_eof21;
+case 21:
+#line 218 "parser.rl"
+ { p--; {p++; cs = 21; goto _out;} }
+#line 569 "parser.c"
+ goto st0;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ if ( (*p) == 110 )
+ goto st3;
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 102 )
+ goto st4;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( (*p) == 105 )
+ goto st5;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 110 )
+ goto st6;
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( (*p) == 105 )
+ goto st7;
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) == 116 )
+ goto st8;
+ goto st0;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ if ( (*p) == 121 )
+ goto tr16;
+ goto st0;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) == 97 )
+ goto st10;
+ goto st0;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ if ( (*p) == 78 )
+ goto tr18;
+ goto st0;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ if ( (*p) == 97 )
+ goto st12;
+ goto st0;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ if ( (*p) == 108 )
+ goto st13;
+ goto st0;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ if ( (*p) == 115 )
+ goto st14;
+ goto st0;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ if ( (*p) == 101 )
+ goto tr22;
+ goto st0;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ if ( (*p) == 117 )
+ goto st16;
+ goto st0;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ if ( (*p) == 108 )
+ goto st17;
+ goto st0;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+ if ( (*p) == 108 )
+ goto tr25;
+ goto st0;
+st18:
+ if ( ++p == pe )
+ goto _test_eof18;
+case 18:
+ if ( (*p) == 114 )
+ goto st19;
+ goto st0;
+st19:
+ if ( ++p == pe )
+ goto _test_eof19;
+case 19:
+ if ( (*p) == 117 )
+ goto st20;
+ goto st0;
+st20:
+ if ( ++p == pe )
+ goto _test_eof20;
+case 20:
+ if ( (*p) == 101 )
+ goto tr28;
+ goto st0;
+ }
+ _test_eof21: cs = 21; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof18: cs = 18; goto _test_eof;
+ _test_eof19: cs = 19; goto _test_eof;
+ _test_eof20: cs = 20; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 239 "parser.rl"
+
+ if (cs >= JSON_value_first_final) {
+ return p;
+ } else {
+ return NULL;
+ }
+}
+
+
+#line 740 "parser.c"
+static const int JSON_integer_start = 1;
+static const int JSON_integer_first_final = 5;
+static const int JSON_integer_error = 0;
+
+static const int JSON_integer_en_main = 1;
+
+
+#line 255 "parser.rl"
+
+
+static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+
+#line 756 "parser.c"
+ {
+ cs = JSON_integer_start;
+ }
+
+#line 262 "parser.rl"
+ json->memo = p;
+
+#line 764 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ switch( (*p) ) {
+ case 45: goto st2;
+ case 48: goto st3;
+ }
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto st4;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ if ( (*p) == 48 )
+ goto st3;
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto st4;
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st0;
+ goto tr4;
+tr4:
+#line 252 "parser.rl"
+ { p--; {p++; cs = 5; goto _out;} }
+ goto st5;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+#line 805 "parser.c"
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st4;
+ goto tr4;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 264 "parser.rl"
+
+ if (cs >= JSON_integer_first_final) {
+ long len = p - json->memo;
+ *result = rb_Integer(rb_str_new(json->memo, len));
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+#line 836 "parser.c"
+static const int JSON_float_start = 1;
+static const int JSON_float_first_final = 10;
+static const int JSON_float_error = 0;
+
+static const int JSON_float_en_main = 1;
+
+
+#line 286 "parser.rl"
+
+
+static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+
+#line 852 "parser.c"
+ {
+ cs = JSON_float_start;
+ }
+
+#line 293 "parser.rl"
+ json->memo = p;
+
+#line 860 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ switch( (*p) ) {
+ case 45: goto st2;
+ case 48: goto st3;
+ }
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto st9;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ if ( (*p) == 48 )
+ goto st3;
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto st9;
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ switch( (*p) ) {
+ case 46: goto st4;
+ case 69: goto st6;
+ case 101: goto st6;
+ }
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st5;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ switch( (*p) ) {
+ case 69: goto st6;
+ case 101: goto st6;
+ }
+ if ( (*p) > 46 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st5;
+ } else if ( (*p) >= 45 )
+ goto st0;
+ goto tr7;
+tr7:
+#line 280 "parser.rl"
+ { p--; {p++; cs = 10; goto _out;} }
+ goto st10;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 925 "parser.c"
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 43: goto st7;
+ case 45: goto st7;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st8;
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st8;
+ goto st0;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 69: goto st0;
+ case 101: goto st0;
+ }
+ if ( (*p) > 46 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st8;
+ } else if ( (*p) >= 45 )
+ goto st0;
+ goto tr7;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ switch( (*p) ) {
+ case 46: goto st4;
+ case 69: goto st6;
+ case 101: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st9;
+ goto st0;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 295 "parser.rl"
+
+ if (cs >= JSON_float_first_final) {
+ long len = p - json->memo;
+ *result = rb_Float(rb_str_new(json->memo, len));
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+
+#line 999 "parser.c"
+static const int JSON_array_start = 1;
+static const int JSON_array_first_final = 17;
+static const int JSON_array_error = 0;
+
+static const int JSON_array_en_main = 1;
+
+
+#line 331 "parser.rl"
+
+
+static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE array_class = json->array_class;
+
+ if (json->max_nesting && json->current_nesting > json->max_nesting) {
+ rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
+ }
+ *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
+
+
+#line 1021 "parser.c"
+ {
+ cs = JSON_array_start;
+ }
+
+#line 344 "parser.rl"
+
+#line 1028 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ if ( (*p) == 91 )
+ goto st2;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 13: goto st2;
+ case 32: goto st2;
+ case 34: goto tr2;
+ case 45: goto tr2;
+ case 47: goto st13;
+ case 73: goto tr2;
+ case 78: goto tr2;
+ case 91: goto tr2;
+ case 93: goto tr4;
+ case 102: goto tr2;
+ case 110: goto tr2;
+ case 116: goto tr2;
+ case 123: goto tr2;
+ }
+ if ( (*p) > 10 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr2;
+ } else if ( (*p) >= 9 )
+ goto st2;
+ goto st0;
+tr2:
+#line 312 "parser.rl"
+ {
+ VALUE v = Qnil;
+ char *np = JSON_parse_value(json, p, pe, &v);
+ if (np == NULL) {
+ p--; {p++; cs = 3; goto _out;}
+ } else {
+ rb_ary_push(*result, v);
+ {p = (( np))-1;}
+ }
+ }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 1083 "parser.c"
+ switch( (*p) ) {
+ case 13: goto st3;
+ case 32: goto st3;
+ case 44: goto st4;
+ case 47: goto st9;
+ case 93: goto tr4;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st3;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ switch( (*p) ) {
+ case 13: goto st4;
+ case 32: goto st4;
+ case 34: goto tr2;
+ case 45: goto tr2;
+ case 47: goto st5;
+ case 73: goto tr2;
+ case 78: goto tr2;
+ case 91: goto tr2;
+ case 102: goto tr2;
+ case 110: goto tr2;
+ case 116: goto tr2;
+ case 123: goto tr2;
+ }
+ if ( (*p) > 10 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr2;
+ } else if ( (*p) >= 9 )
+ goto st4;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ switch( (*p) ) {
+ case 42: goto st6;
+ case 47: goto st8;
+ }
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( (*p) == 42 )
+ goto st7;
+ goto st6;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ switch( (*p) ) {
+ case 42: goto st7;
+ case 47: goto st4;
+ }
+ goto st6;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ if ( (*p) == 10 )
+ goto st4;
+ goto st8;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ switch( (*p) ) {
+ case 42: goto st10;
+ case 47: goto st12;
+ }
+ goto st0;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ if ( (*p) == 42 )
+ goto st11;
+ goto st10;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ switch( (*p) ) {
+ case 42: goto st11;
+ case 47: goto st3;
+ }
+ goto st10;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ if ( (*p) == 10 )
+ goto st3;
+ goto st12;
+tr4:
+#line 323 "parser.rl"
+ { p--; {p++; cs = 17; goto _out;} }
+ goto st17;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+#line 1190 "parser.c"
+ goto st0;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ switch( (*p) ) {
+ case 42: goto st14;
+ case 47: goto st16;
+ }
+ goto st0;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ if ( (*p) == 42 )
+ goto st15;
+ goto st14;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ switch( (*p) ) {
+ case 42: goto st15;
+ case 47: goto st2;
+ }
+ goto st14;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ if ( (*p) == 10 )
+ goto st2;
+ goto st16;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 345 "parser.rl"
+
+ if(cs >= JSON_array_first_final) {
+ return p + 1;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ }
+}
+
+static VALUE json_string_unescape(char *p, char *pe)
+{
+ VALUE result = rb_str_buf_new(pe - p + 1);
+
+ while (p < pe) {
+ if (*p == '\\') {
+ p++;
+ if (p >= pe) return Qnil; /* raise an exception later, \ at end */
+ switch (*p) {
+ case '"':
+ case '\\':
+ rb_str_buf_cat(result, p, 1);
+ p++;
+ break;
+ case 'b':
+ rb_str_buf_cat2(result, "\b");
+ p++;
+ break;
+ case 'f':
+ rb_str_buf_cat2(result, "\f");
+ p++;
+ break;
+ case 'n':
+ rb_str_buf_cat2(result, "\n");
+ p++;
+ break;
+ case 'r':
+ rb_str_buf_cat2(result, "\r");
+ p++;
+ break;
+ case 't':
+ rb_str_buf_cat2(result, "\t");
+ p++;
+ break;
+ case 'u':
+ if (p > pe - 4) {
+ return Qnil;
+ } else {
+ p = JSON_convert_UTF16_to_UTF8(result, p, pe, strictConversion);
+ }
+ break;
+ default:
+ rb_str_buf_cat(result, p, 1);
+ p++;
+ break;
+ }
+ } else {
+ char *q = p;
+ while (*q != '\\' && q < pe) q++;
+ rb_str_buf_cat(result, p, q - p);
+ p = q;
+ }
+ }
+ return result;
+}
+
+
+#line 1312 "parser.c"
+static const int JSON_string_start = 1;
+static const int JSON_string_first_final = 8;
+static const int JSON_string_error = 0;
+
+static const int JSON_string_en_main = 1;
+
+
+#line 429 "parser.rl"
+
+
+static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+ *result = rb_str_new("", 0);
+
+#line 1329 "parser.c"
+ {
+ cs = JSON_string_start;
+ }
+
+#line 437 "parser.rl"
+ json->memo = p;
+
+#line 1337 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ if ( (*p) == 34 )
+ goto st2;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 34: goto tr2;
+ case 92: goto st3;
+ }
+ if ( 0 <= (*p) && (*p) <= 31 )
+ goto st0;
+ goto st2;
+tr2:
+#line 415 "parser.rl"
+ {
+ *result = json_string_unescape(json->memo + 1, p);
+ if (NIL_P(*result)) {
+ p--;
+ {p++; cs = 8; goto _out;}
+ } else {
+ FORCE_UTF8(*result);
+ {p = (( p + 1))-1;}
+ }
+ }
+#line 426 "parser.rl"
+ { p--; {p++; cs = 8; goto _out;} }
+ goto st8;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+#line 1380 "parser.c"
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 117 )
+ goto st4;
+ if ( 0 <= (*p) && (*p) <= 31 )
+ goto st0;
+ goto st2;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st5;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st5;
+ } else
+ goto st5;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st6;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st6;
+ } else
+ goto st6;
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st7;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st7;
+ } else
+ goto st7;
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st2;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st2;
+ } else
+ goto st2;
+ goto st0;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 439 "parser.rl"
+
+ if (cs >= JSON_string_first_final) {
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+
+#line 1467 "parser.c"
+static const int JSON_start = 1;
+static const int JSON_first_final = 10;
+static const int JSON_error = 0;
+
+static const int JSON_en_main = 1;
+
+
+#line 473 "parser.rl"
+
+
+/*
+ * Document-class: JSON::Ext::Parser
+ *
+ * This is the JSON parser implemented as a C extension. It can be configured
+ * to be used by setting
+ *
+ * JSON.parser = JSON::Ext::Parser
+ *
+ * with the method parser= in JSON.
+ *
+ */
+
+/*
+ * call-seq: new(source, opts => {})
+ *
+ * Creates a new JSON::Ext::Parser instance for the string _source_.
+ *
+ * Creates a new JSON::Ext::Parser instance for the string _source_.
+ *
+ * It will be configured by the _opts_ hash. _opts_ can have the following
+ * keys:
+ *
+ * _opts_ can have the following keys:
+ * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ * structures. Disable depth checking with :max_nesting => false|nil|0, it
+ * defaults to 19.
+ * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
+ * defiance of RFC 4627 to be parsed by the Parser. This option defaults to
+ * false.
+ * * *create_additions*: If set to false, the Parser doesn't create
+ * additions even if a matchin class and create_id was found. This option
+ * defaults to true.
+ * * *object_class*: Defaults to Hash
+ * * *array_class*: Defaults to Array
+ */
+static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
+{
+ char *ptr;
+ long len;
+ VALUE source, opts;
+ GET_STRUCT;
+ rb_scan_args(argc, argv, "11", &source, &opts);
+ source = StringValue(source);
+ ptr = RSTRING_PTR(source);
+ len = RSTRING_LEN(source);
+ if (len < 2) {
+ rb_raise(eParserError, "A JSON text must at least contain two octets!");
+ }
+ if (!NIL_P(opts)) {
+ opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
+ if (NIL_P(opts)) {
+ rb_raise(rb_eArgError, "opts needs to be like a hash");
+ } else {
+ VALUE tmp = ID2SYM(i_max_nesting);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ VALUE max_nesting = rb_hash_aref(opts, tmp);
+ if (RTEST(max_nesting)) {
+ Check_Type(max_nesting, T_FIXNUM);
+ json->max_nesting = FIX2INT(max_nesting);
+ } else {
+ json->max_nesting = 0;
+ }
+ } else {
+ json->max_nesting = 19;
+ }
+ tmp = ID2SYM(i_allow_nan);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ VALUE allow_nan = rb_hash_aref(opts, tmp);
+ json->allow_nan = RTEST(allow_nan) ? 1 : 0;
+ } else {
+ json->allow_nan = 0;
+ }
+ tmp = ID2SYM(i_create_additions);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ VALUE create_additions = rb_hash_aref(opts, tmp);
+ if (RTEST(create_additions)) {
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ } else {
+ json->create_id = Qnil;
+ }
+ } else {
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ }
+ tmp = ID2SYM(i_object_class);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ json->object_class = rb_hash_aref(opts, tmp);
+ } else {
+ json->object_class = Qnil;
+ }
+ tmp = ID2SYM(i_array_class);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ json->array_class = rb_hash_aref(opts, tmp);
+ } else {
+ json->array_class = Qnil;
+ }
+ }
+ } else {
+ json->max_nesting = 19;
+ json->allow_nan = 0;
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ json->object_class = Qnil;
+ json->array_class = Qnil;
+ }
+ json->current_nesting = 0;
+ /*
+ Convert these?
+ if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
+ rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
+ } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
+ rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
+ } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
+ rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
+ } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
+ rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
+ }
+ */
+ json->len = len;
+ json->source = ptr;
+ json->Vsource = source;
+ return self;
+}
+
+/*
+ * call-seq: parse()
+ *
+ * Parses the current JSON text _source_ and returns the complete data
+ * structure as a result.
+ */
+static VALUE cParser_parse(VALUE self)
+{
+ char *p, *pe;
+ int cs = EVIL;
+ VALUE result = Qnil;
+ GET_STRUCT;
+
+
+#line 1614 "parser.c"
+ {
+ cs = JSON_start;
+ }
+
+#line 611 "parser.rl"
+ p = json->source;
+ pe = p + json->len;
+
+#line 1623 "parser.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+ switch( (*p) ) {
+ case 13: goto st1;
+ case 32: goto st1;
+ case 47: goto st2;
+ case 91: goto tr3;
+ case 123: goto tr4;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st1;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 42: goto st3;
+ case 47: goto st5;
+ }
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 42 )
+ goto st4;
+ goto st3;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ switch( (*p) ) {
+ case 42: goto st4;
+ case 47: goto st1;
+ }
+ goto st3;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 10 )
+ goto st1;
+ goto st5;
+tr3:
+#line 462 "parser.rl"
+ {
+ char *np;
+ json->current_nesting = 1;
+ np = JSON_parse_array(json, p, pe, &result);
+ if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st10;
+tr4:
+#line 455 "parser.rl"
+ {
+ char *np;
+ json->current_nesting = 1;
+ np = JSON_parse_object(json, p, pe, &result);
+ if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st10;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 1700 "parser.c"
+ switch( (*p) ) {
+ case 13: goto st10;
+ case 32: goto st10;
+ case 47: goto st6;
+ }
+ if ( 9 <= (*p) && (*p) <= 10 )
+ goto st10;
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 42: goto st7;
+ case 47: goto st9;
+ }
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) == 42 )
+ goto st8;
+ goto st7;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 42: goto st8;
+ case 47: goto st10;
+ }
+ goto st7;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) == 10 )
+ goto st10;
+ goto st9;
+ }
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 614 "parser.rl"
+
+ if (cs >= JSON_first_final && p == pe) {
+ return result;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ }
+}
+
+inline static JSON_Parser *JSON_allocate()
+{
+ JSON_Parser *json = ALLOC(JSON_Parser);
+ MEMZERO(json, JSON_Parser, 1);
+ return json;
+}
+
+static void JSON_mark(JSON_Parser *json)
+{
+ rb_gc_mark_maybe(json->Vsource);
+ rb_gc_mark_maybe(json->create_id);
+ rb_gc_mark_maybe(json->object_class);
+ rb_gc_mark_maybe(json->array_class);
+}
+
+static void JSON_free(JSON_Parser *json)
+{
+ ruby_xfree(json);
+}
+
+static VALUE cJSON_parser_s_allocate(VALUE klass)
+{
+ JSON_Parser *json = JSON_allocate();
+ return Data_Wrap_Struct(klass, JSON_mark, JSON_free, json);
+}
+
+/*
+ * call-seq: source()
+ *
+ * Returns a copy of the current _source_ string, that was used to construct
+ * this Parser.
+ */
+static VALUE cParser_source(VALUE self)
+{
+ GET_STRUCT;
+ return rb_str_dup(json->Vsource);
+}
+
+void Init_parser()
+{
+ rb_require("json/common");
+ mJSON = rb_define_module("JSON");
+ mExt = rb_define_module_under(mJSON, "Ext");
+ cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
+ eParserError = rb_path2class("JSON::ParserError");
+ eNestingError = rb_path2class("JSON::NestingError");
+ rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
+ rb_define_method(cParser, "initialize", cParser_initialize, -1);
+ rb_define_method(cParser, "parse", cParser_parse, 0);
+ rb_define_method(cParser, "source", cParser_source, 0);
+
+ CNaN = rb_const_get(mJSON, rb_intern("NaN"));
+ CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
+ CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
+
+ i_json_creatable_p = rb_intern("json_creatable?");
+ i_json_create = rb_intern("json_create");
+ i_create_id = rb_intern("create_id");
+ i_create_additions = rb_intern("create_additions");
+ i_chr = rb_intern("chr");
+ i_max_nesting = rb_intern("max_nesting");
+ i_allow_nan = rb_intern("allow_nan");
+ i_object_class = rb_intern("object_class");
+ i_array_class = rb_intern("array_class");
+}
diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl
new file mode 100644
index 0000000..384ab9f
--- /dev/null
+++ b/ext/json/ext/parser/parser.rl
@@ -0,0 +1,686 @@
+#include "ruby.h"
+#include "unicode.h"
+#if HAVE_RE_H
+#include "re.h"
+#endif
+#if HAVE_RUBY_ST_H
+#include "ruby/st.h"
+#endif
+#if HAVE_ST_H
+#include "st.h"
+#endif
+
+#define EVIL 0x666
+
+#ifndef RHASH_TBL
+#define RHASH_TBL(hsh) (RHASH(hsh)->tbl)
+#endif
+
+#ifdef HAVE_RUBY_ENCODING_H
+#include "ruby/encoding.h"
+#define FORCE_UTF8(obj) rb_enc_associate((obj), rb_utf8_encoding())
+#else
+#define FORCE_UTF8(obj)
+#endif
+
+static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
+static VALUE CNaN, CInfinity, CMinusInfinity;
+
+static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
+ i_chr, i_max_nesting, i_allow_nan, i_object_class, i_array_class;
+
+#define MinusInfinity "-Infinity"
+
+typedef struct JSON_ParserStruct {
+ VALUE Vsource;
+ char *source;
+ long len;
+ char *memo;
+ VALUE create_id;
+ int max_nesting;
+ int current_nesting;
+ int allow_nan;
+ VALUE object_class;
+ VALUE array_class;
+} JSON_Parser;
+
+static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
+static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
+
+#define GET_STRUCT \
+ JSON_Parser *json; \
+ Data_Get_Struct(self, JSON_Parser, json);
+
+%%{
+ machine JSON_common;
+
+ cr = '\n';
+ cr_neg = [^\n];
+ ws = [ \t\r\n];
+ c_comment = '/*' ( any* - (any* '*/' any* ) ) '*/';
+ cpp_comment = '//' cr_neg* cr;
+ comment = c_comment | cpp_comment;
+ ignore = ws | comment;
+ name_separator = ':';
+ value_separator = ',';
+ Vnull = 'null';
+ Vfalse = 'false';
+ Vtrue = 'true';
+ VNaN = 'NaN';
+ VInfinity = 'Infinity';
+ VMinusInfinity = '-Infinity';
+ begin_value = [nft"\-[{NI] | digit;
+ begin_object = '{';
+ end_object = '}';
+ begin_array = '[';
+ end_array = ']';
+ begin_string = '"';
+ begin_name = begin_string;
+ begin_number = digit | '-';
+}%%
+
+%%{
+ machine JSON_object;
+ include JSON_common;
+
+ write data;
+
+ action parse_value {
+ VALUE v = Qnil;
+ char *np = JSON_parse_value(json, fpc, pe, &v);
+ if (np == NULL) {
+ fhold; fbreak;
+ } else {
+ rb_hash_aset(*result, last_name, v);
+ fexec np;
+ }
+ }
+
+ action parse_name {
+ char *np = JSON_parse_string(json, fpc, pe, &last_name);
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action exit { fhold; fbreak; }
+
+ a_pair = ignore* begin_name >parse_name
+ ignore* name_separator ignore*
+ begin_value >parse_value;
+
+ main := begin_object
+ (a_pair (ignore* value_separator a_pair)*)?
+ ignore* end_object @exit;
+}%%
+
+static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE last_name = Qnil;
+ VALUE object_class = json->object_class;
+
+ if (json->max_nesting && json->current_nesting > json->max_nesting) {
+ rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
+ }
+
+ *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
+
+ %% write init;
+ %% write exec;
+
+ if (cs >= JSON_object_first_final) {
+ if (RTEST(json->create_id)) {
+ VALUE klassname = rb_hash_aref(*result, json->create_id);
+ if (!NIL_P(klassname)) {
+ VALUE klass = rb_path2class(StringValueCStr(klassname));
+ if RTEST(rb_funcall(klass, i_json_creatable_p, 0)) {
+ *result = rb_funcall(klass, i_json_create, 1, *result);
+ }
+ }
+ }
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+%%{
+ machine JSON_value;
+ include JSON_common;
+
+ write data;
+
+ action parse_null {
+ *result = Qnil;
+ }
+ action parse_false {
+ *result = Qfalse;
+ }
+ action parse_true {
+ *result = Qtrue;
+ }
+ action parse_nan {
+ if (json->allow_nan) {
+ *result = CNaN;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
+ }
+ }
+ action parse_infinity {
+ if (json->allow_nan) {
+ *result = CInfinity;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
+ }
+ }
+ action parse_string {
+ char *np = JSON_parse_string(json, fpc, pe, result);
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action parse_number {
+ char *np;
+ if(pe > fpc + 9 && !strncmp(MinusInfinity, fpc, 9)) {
+ if (json->allow_nan) {
+ *result = CMinusInfinity;
+ fexec p + 10;
+ fhold; fbreak;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ }
+ }
+ np = JSON_parse_float(json, fpc, pe, result);
+ if (np != NULL) fexec np;
+ np = JSON_parse_integer(json, fpc, pe, result);
+ if (np != NULL) fexec np;
+ fhold; fbreak;
+ }
+
+ action parse_array {
+ char *np;
+ json->current_nesting++;
+ np = JSON_parse_array(json, fpc, pe, result);
+ json->current_nesting--;
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action parse_object {
+ char *np;
+ json->current_nesting++;
+ np = JSON_parse_object(json, fpc, pe, result);
+ json->current_nesting--;
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action exit { fhold; fbreak; }
+
+main := (
+ Vnull @parse_null |
+ Vfalse @parse_false |
+ Vtrue @parse_true |
+ VNaN @parse_nan |
+ VInfinity @parse_infinity |
+ begin_number >parse_number |
+ begin_string >parse_string |
+ begin_array >parse_array |
+ begin_object >parse_object
+ ) %*exit;
+}%%
+
+static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+ %% write init;
+ %% write exec;
+
+ if (cs >= JSON_value_first_final) {
+ return p;
+ } else {
+ return NULL;
+ }
+}
+
+%%{
+ machine JSON_integer;
+
+ write data;
+
+ action exit { fhold; fbreak; }
+
+ main := '-'? ('0' | [1-9][0-9]*) (^[0-9] @exit);
+}%%
+
+static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+ %% write init;
+ json->memo = p;
+ %% write exec;
+
+ if (cs >= JSON_integer_first_final) {
+ long len = p - json->memo;
+ *result = rb_Integer(rb_str_new(json->memo, len));
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+%%{
+ machine JSON_float;
+ include JSON_common;
+
+ write data;
+
+ action exit { fhold; fbreak; }
+
+ main := '-'? (
+ (('0' | [1-9][0-9]*) '.' [0-9]+ ([Ee] [+\-]?[0-9]+)?)
+ | (('0' | [1-9][0-9]*) ([Ee] [+\-]?[0-9]+))
+ ) (^[0-9Ee.\-] @exit );
+}%%
+
+static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+ %% write init;
+ json->memo = p;
+ %% write exec;
+
+ if (cs >= JSON_float_first_final) {
+ long len = p - json->memo;
+ *result = rb_Float(rb_str_new(json->memo, len));
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+%%{
+ machine JSON_array;
+ include JSON_common;
+
+ write data;
+
+ action parse_value {
+ VALUE v = Qnil;
+ char *np = JSON_parse_value(json, fpc, pe, &v);
+ if (np == NULL) {
+ fhold; fbreak;
+ } else {
+ rb_ary_push(*result, v);
+ fexec np;
+ }
+ }
+
+ action exit { fhold; fbreak; }
+
+ next_element = value_separator ignore* begin_value >parse_value;
+
+ main := begin_array ignore*
+ ((begin_value >parse_value ignore*)
+ (ignore* next_element ignore*)*)?
+ end_array @exit;
+}%%
+
+static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+ VALUE array_class = json->array_class;
+
+ if (json->max_nesting && json->current_nesting > json->max_nesting) {
+ rb_raise(eNestingError, "nesting of %d is too deep", json->current_nesting);
+ }
+ *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
+
+ %% write init;
+ %% write exec;
+
+ if(cs >= JSON_array_first_final) {
+ return p + 1;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ }
+}
+
+static VALUE json_string_unescape(char *p, char *pe)
+{
+ VALUE result = rb_str_buf_new(pe - p + 1);
+
+ while (p < pe) {
+ if (*p == '\\') {
+ p++;
+ if (p >= pe) return Qnil; /* raise an exception later, \ at end */
+ switch (*p) {
+ case '"':
+ case '\\':
+ rb_str_buf_cat(result, p, 1);
+ p++;
+ break;
+ case 'b':
+ rb_str_buf_cat2(result, "\b");
+ p++;
+ break;
+ case 'f':
+ rb_str_buf_cat2(result, "\f");
+ p++;
+ break;
+ case 'n':
+ rb_str_buf_cat2(result, "\n");
+ p++;
+ break;
+ case 'r':
+ rb_str_buf_cat2(result, "\r");
+ p++;
+ break;
+ case 't':
+ rb_str_buf_cat2(result, "\t");
+ p++;
+ break;
+ case 'u':
+ if (p > pe - 4) {
+ return Qnil;
+ } else {
+ p = JSON_convert_UTF16_to_UTF8(result, p, pe, strictConversion);
+ }
+ break;
+ default:
+ rb_str_buf_cat(result, p, 1);
+ p++;
+ break;
+ }
+ } else {
+ char *q = p;
+ while (*q != '\\' && q < pe) q++;
+ rb_str_buf_cat(result, p, q - p);
+ p = q;
+ }
+ }
+ return result;
+}
+
+%%{
+ machine JSON_string;
+ include JSON_common;
+
+ write data;
+
+ action parse_string {
+ *result = json_string_unescape(json->memo + 1, p);
+ if (NIL_P(*result)) {
+ fhold;
+ fbreak;
+ } else {
+ FORCE_UTF8(*result);
+ fexec p + 1;
+ }
+ }
+
+ action exit { fhold; fbreak; }
+
+ main := '"' ((^(["\\] | 0..0x1f) | '\\'["\\/bfnrt] | '\\u'[0-9a-fA-F]{4} | '\\'^(["\\/bfnrtu]|0..0x1f))* %parse_string) '"' @exit;
+}%%
+
+static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result)
+{
+ int cs = EVIL;
+
+ *result = rb_str_new("", 0);
+ %% write init;
+ json->memo = p;
+ %% write exec;
+
+ if (cs >= JSON_string_first_final) {
+ return p + 1;
+ } else {
+ return NULL;
+ }
+}
+
+
+%%{
+ machine JSON;
+
+ write data;
+
+ include JSON_common;
+
+ action parse_object {
+ char *np;
+ json->current_nesting = 1;
+ np = JSON_parse_object(json, fpc, pe, &result);
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ action parse_array {
+ char *np;
+ json->current_nesting = 1;
+ np = JSON_parse_array(json, fpc, pe, &result);
+ if (np == NULL) { fhold; fbreak; } else fexec np;
+ }
+
+ main := ignore* (
+ begin_object >parse_object |
+ begin_array >parse_array
+ ) ignore*;
+}%%
+
+/*
+ * Document-class: JSON::Ext::Parser
+ *
+ * This is the JSON parser implemented as a C extension. It can be configured
+ * to be used by setting
+ *
+ * JSON.parser = JSON::Ext::Parser
+ *
+ * with the method parser= in JSON.
+ *
+ */
+
+/*
+ * call-seq: new(source, opts => {})
+ *
+ * Creates a new JSON::Ext::Parser instance for the string _source_.
+ *
+ * Creates a new JSON::Ext::Parser instance for the string _source_.
+ *
+ * It will be configured by the _opts_ hash. _opts_ can have the following
+ * keys:
+ *
+ * _opts_ can have the following keys:
+ * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ * structures. Disable depth checking with :max_nesting => false|nil|0, it
+ * defaults to 19.
+ * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
+ * defiance of RFC 4627 to be parsed by the Parser. This option defaults to
+ * false.
+ * * *create_additions*: If set to false, the Parser doesn't create
+ * additions even if a matchin class and create_id was found. This option
+ * defaults to true.
+ * * *object_class*: Defaults to Hash
+ * * *array_class*: Defaults to Array
+ */
+static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
+{
+ char *ptr;
+ long len;
+ VALUE source, opts;
+ GET_STRUCT;
+ rb_scan_args(argc, argv, "11", &source, &opts);
+ source = StringValue(source);
+ ptr = RSTRING_PTR(source);
+ len = RSTRING_LEN(source);
+ if (len < 2) {
+ rb_raise(eParserError, "A JSON text must at least contain two octets!");
+ }
+ if (!NIL_P(opts)) {
+ opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
+ if (NIL_P(opts)) {
+ rb_raise(rb_eArgError, "opts needs to be like a hash");
+ } else {
+ VALUE tmp = ID2SYM(i_max_nesting);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ VALUE max_nesting = rb_hash_aref(opts, tmp);
+ if (RTEST(max_nesting)) {
+ Check_Type(max_nesting, T_FIXNUM);
+ json->max_nesting = FIX2INT(max_nesting);
+ } else {
+ json->max_nesting = 0;
+ }
+ } else {
+ json->max_nesting = 19;
+ }
+ tmp = ID2SYM(i_allow_nan);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ VALUE allow_nan = rb_hash_aref(opts, tmp);
+ json->allow_nan = RTEST(allow_nan) ? 1 : 0;
+ } else {
+ json->allow_nan = 0;
+ }
+ tmp = ID2SYM(i_create_additions);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ VALUE create_additions = rb_hash_aref(opts, tmp);
+ if (RTEST(create_additions)) {
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ } else {
+ json->create_id = Qnil;
+ }
+ } else {
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ }
+ tmp = ID2SYM(i_object_class);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ json->object_class = rb_hash_aref(opts, tmp);
+ } else {
+ json->object_class = Qnil;
+ }
+ tmp = ID2SYM(i_array_class);
+ if (st_lookup(RHASH_TBL(opts), tmp, 0)) {
+ json->array_class = rb_hash_aref(opts, tmp);
+ } else {
+ json->array_class = Qnil;
+ }
+ }
+ } else {
+ json->max_nesting = 19;
+ json->allow_nan = 0;
+ json->create_id = rb_funcall(mJSON, i_create_id, 0);
+ json->object_class = Qnil;
+ json->array_class = Qnil;
+ }
+ json->current_nesting = 0;
+ /*
+ Convert these?
+ if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
+ rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
+ } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
+ rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
+ } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
+ rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
+ } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
+ rb_raise(eParserError, "Only UTF8 octet streams are supported atm!");
+ }
+ */
+ json->len = len;
+ json->source = ptr;
+ json->Vsource = source;
+ return self;
+}
+
+/*
+ * call-seq: parse()
+ *
+ * Parses the current JSON text _source_ and returns the complete data
+ * structure as a result.
+ */
+static VALUE cParser_parse(VALUE self)
+{
+ char *p, *pe;
+ int cs = EVIL;
+ VALUE result = Qnil;
+ GET_STRUCT;
+
+ %% write init;
+ p = json->source;
+ pe = p + json->len;
+ %% write exec;
+
+ if (cs >= JSON_first_final && p == pe) {
+ return result;
+ } else {
+ rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
+ }
+}
+
+inline static JSON_Parser *JSON_allocate()
+{
+ JSON_Parser *json = ALLOC(JSON_Parser);
+ MEMZERO(json, JSON_Parser, 1);
+ return json;
+}
+
+static void JSON_mark(JSON_Parser *json)
+{
+ rb_gc_mark_maybe(json->Vsource);
+ rb_gc_mark_maybe(json->create_id);
+ rb_gc_mark_maybe(json->object_class);
+ rb_gc_mark_maybe(json->array_class);
+}
+
+static void JSON_free(JSON_Parser *json)
+{
+ ruby_xfree(json);
+}
+
+static VALUE cJSON_parser_s_allocate(VALUE klass)
+{
+ JSON_Parser *json = JSON_allocate();
+ return Data_Wrap_Struct(klass, JSON_mark, JSON_free, json);
+}
+
+/*
+ * call-seq: source()
+ *
+ * Returns a copy of the current _source_ string, that was used to construct
+ * this Parser.
+ */
+static VALUE cParser_source(VALUE self)
+{
+ GET_STRUCT;
+ return rb_str_dup(json->Vsource);
+}
+
+void Init_parser()
+{
+ rb_require("json/common");
+ mJSON = rb_define_module("JSON");
+ mExt = rb_define_module_under(mJSON, "Ext");
+ cParser = rb_define_class_under(mExt, "Parser", rb_cObject);
+ eParserError = rb_path2class("JSON::ParserError");
+ eNestingError = rb_path2class("JSON::NestingError");
+ rb_define_alloc_func(cParser, cJSON_parser_s_allocate);
+ rb_define_method(cParser, "initialize", cParser_initialize, -1);
+ rb_define_method(cParser, "parse", cParser_parse, 0);
+ rb_define_method(cParser, "source", cParser_source, 0);
+
+ CNaN = rb_const_get(mJSON, rb_intern("NaN"));
+ CInfinity = rb_const_get(mJSON, rb_intern("Infinity"));
+ CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity"));
+
+ i_json_creatable_p = rb_intern("json_creatable?");
+ i_json_create = rb_intern("json_create");
+ i_create_id = rb_intern("create_id");
+ i_create_additions = rb_intern("create_additions");
+ i_chr = rb_intern("chr");
+ i_max_nesting = rb_intern("max_nesting");
+ i_allow_nan = rb_intern("allow_nan");
+ i_object_class = rb_intern("object_class");
+ i_array_class = rb_intern("array_class");
+}
diff --git a/ext/json/ext/parser/unicode.c b/ext/json/ext/parser/unicode.c
new file mode 100644
index 0000000..80e5c6f
--- /dev/null
+++ b/ext/json/ext/parser/unicode.c
@@ -0,0 +1,154 @@
+#include "unicode.h"
+
+/*
+ * Copyright 2001-2004 Unicode, Inc.
+ *
+ * Disclaimer
+ *
+ * This source code is provided as is by Unicode, Inc. No claims are
+ * made as to fitness for any particular purpose. No warranties of any
+ * kind are expressed or implied. The recipient agrees to determine
+ * applicability of information provided. If this file has been
+ * purchased on magnetic or optical media from Unicode, Inc., the
+ * sole remedy for any claim will be exchange of defective media
+ * within 90 days of receipt.
+ *
+ * Limitations on Rights to Redistribute This Code
+ *
+ * Unicode, Inc. hereby grants the right to freely use the information
+ * supplied in this file in the creation of products supporting the
+ * Unicode Standard, and to make copies of this file in any form
+ * for internal or external distribution as long as this notice
+ * remains attached.
+ */
+
+/*
+ * Index into the table below with the first byte of a UTF-8 sequence to
+ * get the number of trailing bytes that are supposed to follow it.
+ * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
+ * left as-is for anyone who may want to do such conversion, which was
+ * allowed in earlier algorithms.
+ */
+static const char trailingBytesForUTF8[256] = {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
+};
+
+/*
+ * Magic values subtracted from a buffer value during UTF8 conversion.
+ * This table contains as many values as there might be trailing bytes
+ * in a UTF-8 sequence.
+ */
+static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
+ 0x03C82080UL, 0xFA082080UL, 0x82082080UL };
+
+/*
+ * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
+ * into the first byte, depending on how many bytes follow. There are
+ * as many entries in this table as there are UTF-8 sequence types.
+ * (I.e., one byte sequence, two byte... etc.). Remember that sequencs
+ * for *legal* UTF-8 will be 4 or fewer bytes total.
+ */
+static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
+
+char *JSON_convert_UTF16_to_UTF8 (
+ VALUE buffer,
+ char *source,
+ char *sourceEnd,
+ ConversionFlags flags)
+{
+ UTF16 *tmp, *tmpPtr, *tmpEnd;
+ char buf[5];
+ long n = 0, i;
+ char *p = source - 1;
+
+ while (p < sourceEnd && p[0] == '\\' && p[1] == 'u') {
+ p += 6;
+ n++;
+ }
+ p = source + 1;
+ buf[4] = 0;
+ tmpPtr = tmp = ALLOC_N(UTF16, n);
+ tmpEnd = tmp + n;
+ for (i = 0; i < n; i++) {
+ buf[0] = *p++;
+ buf[1] = *p++;
+ buf[2] = *p++;
+ buf[3] = *p++;
+ tmpPtr[i] = (UTF16)strtol(buf, NULL, 16);
+ p += 2;
+ }
+
+ while (tmpPtr < tmpEnd) {
+ UTF32 ch;
+ unsigned short bytesToWrite = 0;
+ const UTF32 byteMask = 0xBF;
+ const UTF32 byteMark = 0x80;
+ ch = *tmpPtr++;
+ /* If we have a surrogate pair, convert to UTF32 first. */
+ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) {
+ /* If the 16 bits following the high surrogate are in the source
+ * buffer... */
+ if (tmpPtr < tmpEnd) {
+ UTF32 ch2 = *tmpPtr;
+ /* If it's a low surrogate, convert to UTF32. */
+ if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) {
+ ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
+ + (ch2 - UNI_SUR_LOW_START) + halfBase;
+ ++tmpPtr;
+ } else if (flags == strictConversion) { /* it's an unpaired high surrogate */
+ ruby_xfree(tmp);
+ rb_raise(rb_path2class("JSON::ParserError"),
+ "source sequence is illegal/malformed near %s", source);
+ }
+ } else { /* We don't have the 16 bits following the high surrogate. */
+ ruby_xfree(tmp);
+ rb_raise(rb_path2class("JSON::ParserError"),
+ "partial character in source, but hit end near %s", source);
+ break;
+ }
+ } else if (flags == strictConversion) {
+ /* UTF-16 surrogate values are illegal in UTF-32 */
+ if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) {
+ ruby_xfree(tmp);
+ rb_raise(rb_path2class("JSON::ParserError"),
+ "source sequence is illegal/malformed near %s", source);
+ }
+ }
+ /* Figure out how many bytes the result will require */
+ if (ch < (UTF32) 0x80) {
+ bytesToWrite = 1;
+ } else if (ch < (UTF32) 0x800) {
+ bytesToWrite = 2;
+ } else if (ch < (UTF32) 0x10000) {
+ bytesToWrite = 3;
+ } else if (ch < (UTF32) 0x110000) {
+ bytesToWrite = 4;
+ } else {
+ bytesToWrite = 3;
+ ch = UNI_REPLACEMENT_CHAR;
+ }
+
+ buf[0] = 0;
+ buf[1] = 0;
+ buf[2] = 0;
+ buf[3] = 0;
+ p = buf + bytesToWrite;
+ switch (bytesToWrite) { /* note: everything falls through. */
+ case 4: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
+ case 3: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
+ case 2: *--p = (UTF8) ((ch | byteMark) & byteMask); ch >>= 6;
+ case 1: *--p = (UTF8) (ch | firstByteMark[bytesToWrite]);
+ }
+ rb_str_buf_cat(buffer, p, bytesToWrite);
+ }
+ ruby_xfree(tmp);
+ source += 5 + (n - 1) * 6;
+ return source;
+}
diff --git a/ext/json/ext/parser/unicode.h b/ext/json/ext/parser/unicode.h
new file mode 100644
index 0000000..155da0c
--- /dev/null
+++ b/ext/json/ext/parser/unicode.h
@@ -0,0 +1,58 @@
+
+#ifndef _PARSER_UNICODE_H_
+#define _PARSER_UNICODE_H_
+
+#include "ruby.h"
+
+typedef unsigned long UTF32; /* at least 32 bits */
+typedef unsigned short UTF16; /* at least 16 bits */
+typedef unsigned char UTF8; /* typically 8 bits */
+
+#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
+#define UNI_MAX_BMP (UTF32)0x0000FFFF
+#define UNI_MAX_UTF16 (UTF32)0x0010FFFF
+#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
+#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
+
+#define UNI_SUR_HIGH_START (UTF32)0xD800
+#define UNI_SUR_HIGH_END (UTF32)0xDBFF
+#define UNI_SUR_LOW_START (UTF32)0xDC00
+#define UNI_SUR_LOW_END (UTF32)0xDFFF
+
+static const int halfShift = 10; /* used for shifting by 10 bits */
+
+static const UTF32 halfBase = 0x0010000UL;
+static const UTF32 halfMask = 0x3FFUL;
+
+typedef enum {
+ conversionOK = 0, /* conversion successful */
+ sourceExhausted, /* partial character in source, but hit end */
+ targetExhausted, /* insuff. room in target for conversion */
+ sourceIllegal /* source sequence is illegal/malformed */
+} ConversionResult;
+
+typedef enum {
+ strictConversion = 0,
+ lenientConversion
+} ConversionFlags;
+
+char *JSON_convert_UTF16_to_UTF8 (
+ VALUE buffer,
+ char *source,
+ char *sourceEnd,
+ ConversionFlags flags);
+
+#ifndef RARRAY_PTR
+#define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
+#endif
+#ifndef RARRAY_LEN
+#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
+#endif
+#ifndef RSTRING_PTR
+#define RSTRING_PTR(string) RSTRING(string)->ptr
+#endif
+#ifndef RSTRING_LEN
+#define RSTRING_LEN(string) RSTRING(string)->len
+#endif
+
+#endif
diff --git a/install.rb b/install.rb
new file mode 100755
index 0000000..adf77a0
--- /dev/null
+++ b/install.rb
@@ -0,0 +1,26 @@
+#!/usr/bin/env ruby
+
+require 'rbconfig'
+require 'fileutils'
+include FileUtils::Verbose
+
+include Config
+
+bindir = CONFIG["bindir"]
+cd 'bin' do
+ filename = 'edit_json.rb'
+ #install(filename, bindir)
+end
+sitelibdir = CONFIG["sitelibdir"]
+cd 'lib' do
+ install('json.rb', sitelibdir)
+ mkdir_p File.join(sitelibdir, 'json')
+ for file in Dir['json/**/*.{rb,xpm}']
+ d = File.join(sitelibdir, file)
+ mkdir_p File.dirname(d)
+ install(file, d)
+ end
+ install(File.join('json', 'editor.rb'), File.join(sitelibdir,'json'))
+ install(File.join('json', 'json.xpm'), File.join(sitelibdir,'json'))
+end
+warn " *** Installed PURE ruby library."
diff --git a/lib/json.rb b/lib/json.rb
new file mode 100644
index 0000000..789b0de
--- /dev/null
+++ b/lib/json.rb
@@ -0,0 +1,10 @@
+require 'json/common'
+module JSON
+ require 'json/version'
+
+ begin
+ require 'json/ext'
+ rescue LoadError
+ require 'json/pure'
+ end
+end
diff --git a/lib/json/Array.xpm b/lib/json/Array.xpm
new file mode 100644
index 0000000..27c4801
--- /dev/null
+++ b/lib/json/Array.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * Array_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" .......... ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" .......... ",
+" ",
+" ",
+" "};
diff --git a/lib/json/FalseClass.xpm b/lib/json/FalseClass.xpm
new file mode 100644
index 0000000..25ce608
--- /dev/null
+++ b/lib/json/FalseClass.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * False_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #FF0000",
+" ",
+" ",
+" ",
+" ...... ",
+" . ",
+" . ",
+" . ",
+" ...... ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" ",
+" ",
+" "};
diff --git a/lib/json/Hash.xpm b/lib/json/Hash.xpm
new file mode 100644
index 0000000..cd8f6f7
--- /dev/null
+++ b/lib/json/Hash.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * Hash_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" . . ",
+" . . ",
+" . . ",
+" ......... ",
+" . . ",
+" . . ",
+" ......... ",
+" . . ",
+" . . ",
+" . . ",
+" ",
+" ",
+" "};
diff --git a/lib/json/Key.xpm b/lib/json/Key.xpm
new file mode 100644
index 0000000..9fd7281
--- /dev/null
+++ b/lib/json/Key.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char * Key_xpm[] = {
+"16 16 54 1",
+" c None",
+". c #110007",
+"+ c #0E0900",
+"@ c #000013",
+"# c #070600",
+"$ c #F6F006",
+"% c #ECE711",
+"& c #E5EE00",
+"* c #16021E",
+"= c #120900",
+"- c #EDF12B",
+"; c #000033",
+"> c #0F0000",
+", c #FFFE03",
+"' c #E6E500",
+") c #16021B",
+"! c #F7F502",
+"~ c #000E00",
+"{ c #130000",
+"] c #FFF000",
+"^ c #FFE711",
+"/ c #140005",
+"( c #190025",
+"_ c #E9DD27",
+": c #E7DC04",
+"< c #FFEC09",
+"[ c #FFE707",
+"} c #FFDE10",
+"| c #150021",
+"1 c #160700",
+"2 c #FAF60E",
+"3 c #EFE301",
+"4 c #FEF300",
+"5 c #E7E000",
+"6 c #FFFF08",
+"7 c #0E0206",
+"8 c #040000",
+"9 c #03052E",
+"0 c #041212",
+"a c #070300",
+"b c #F2E713",
+"c c #F9DE13",
+"d c #36091E",
+"e c #00001C",
+"f c #1F0010",
+"g c #FFF500",
+"h c #DEDE00",
+"i c #050A00",
+"j c #FAF14A",
+"k c #F5F200",
+"l c #040404",
+"m c #1A0D00",
+"n c #EDE43D",
+"o c #ECE007",
+" ",
+" ",
+" .+@ ",
+" #$%&* ",
+" =-;>,') ",
+" >!~{]^/ ",
+" (_:<[}| ",
+" 1234567 ",
+" 890abcd ",
+" efghi ",
+" >jkl ",
+" mnol ",
+" >kl ",
+" ll ",
+" ",
+" "};
diff --git a/lib/json/NilClass.xpm b/lib/json/NilClass.xpm
new file mode 100644
index 0000000..3509f06
--- /dev/null
+++ b/lib/json/NilClass.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * False_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" ... ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" . . ",
+" ... ",
+" ",
+" ",
+" "};
diff --git a/lib/json/Numeric.xpm b/lib/json/Numeric.xpm
new file mode 100644
index 0000000..e071e2e
--- /dev/null
+++ b/lib/json/Numeric.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * Numeric_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #FF0000",
+"+ c #0000FF",
+"@ c #0023DB",
+"# c #00EA14",
+"$ c #00FF00",
+"% c #004FAF",
+"& c #0028D6",
+"* c #00F20C",
+" ",
+" ",
+" ",
+" ... +++@#$$$$ ",
+" .+ %& $$ ",
+" . + $ ",
+" . + $$ ",
+" . ++$$$$ ",
+" . + $$ ",
+" . + $ ",
+" . + $ ",
+" . + $ $$ ",
+" .....++++*$$ ",
+" ",
+" ",
+" "};
diff --git a/lib/json/String.xpm b/lib/json/String.xpm
new file mode 100644
index 0000000..f79a89c
--- /dev/null
+++ b/lib/json/String.xpm
@@ -0,0 +1,96 @@
+/* XPM */
+static char * String_xpm[] = {
+"16 16 77 1",
+" c None",
+". c #000000",
+"+ c #040404",
+"@ c #080806",
+"# c #090606",
+"$ c #EEEAE1",
+"% c #E7E3DA",
+"& c #E0DBD1",
+"* c #D4B46F",
+"= c #0C0906",
+"- c #E3C072",
+"; c #E4C072",
+"> c #060505",
+", c #0B0A08",
+"' c #D5B264",
+") c #D3AF5A",
+"! c #080602",
+"~ c #E1B863",
+"{ c #DDB151",
+"] c #DBAE4A",
+"^ c #DDB152",
+"/ c #DDB252",
+"( c #070705",
+"_ c #0C0A07",
+": c #D3A33B",
+"< c #020201",
+"[ c #DAAA41",
+"} c #040302",
+"| c #E4D9BF",
+"1 c #0B0907",
+"2 c #030201",
+"3 c #020200",
+"4 c #C99115",
+"5 c #080704",
+"6 c #DBC8A2",
+"7 c #E7D7B4",
+"8 c #E0CD9E",
+"9 c #080601",
+"0 c #040400",
+"a c #010100",
+"b c #0B0B08",
+"c c #DCBF83",
+"d c #DCBC75",
+"e c #DEB559",
+"f c #040301",
+"g c #BC8815",
+"h c #120E07",
+"i c #060402",
+"j c #0A0804",
+"k c #D4A747",
+"l c #D6A12F",
+"m c #0E0C05",
+"n c #C8C1B0",
+"o c #1D1B15",
+"p c #D7AD51",
+"q c #070502",
+"r c #080804",
+"s c #BC953B",
+"t c #C4BDAD",
+"u c #0B0807",
+"v c #DBAC47",
+"w c #1B150A",
+"x c #B78A2C",
+"y c #D8A83C",
+"z c #D4A338",
+"A c #0F0B03",
+"B c #181105",
+"C c #C59325",
+"D c #C18E1F",
+"E c #060600",
+"F c #CC992D",
+"G c #B98B25",
+"H c #B3831F",
+"I c #C08C1C",
+"J c #060500",
+"K c #0E0C03",
+"L c #0D0A00",
+" ",
+" .+@# ",
+" .$%&*= ",
+" .-;>,')! ",
+" .~. .{]. ",
+" .^/. (_:< ",
+" .[.}|$12 ",
+" 345678}90 ",
+" a2bcdefgh ",
+" ijkl.mno ",
+" <pq. rstu ",
+" .]v. wx= ",
+" .yzABCDE ",
+" .FGHIJ ",
+" 0KL0 ",
+" "};
diff --git a/lib/json/TrueClass.xpm b/lib/json/TrueClass.xpm
new file mode 100644
index 0000000..143eef4
--- /dev/null
+++ b/lib/json/TrueClass.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * TrueClass_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #0BF311",
+" ",
+" ",
+" ",
+" ......... ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" . ",
+" ",
+" ",
+" "};
diff --git a/lib/json/add/core.rb b/lib/json/add/core.rb
new file mode 100644
index 0000000..4423e7a
--- /dev/null
+++ b/lib/json/add/core.rb
@@ -0,0 +1,135 @@
+# This file contains implementations of ruby core's custom objects for
+# serialisation/deserialisation.
+
+unless Object.const_defined?(:JSON) and ::JSON.const_defined?(:JSON_LOADED) and
+ ::JSON::JSON_LOADED
+ require 'json'
+end
+require 'date'
+
+class Time
+ def self.json_create(object)
+ if usec = object.delete('u') # used to be tv_usec -> tv_nsec
+ object['n'] = usec * 1000
+ end
+ if respond_to?(:tv_nsec)
+ at(*object.values_at('s', 'n'))
+ else
+ at(object['s'], object['n'] / 1000)
+ end
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 's' => tv_sec,
+ 'n' => respond_to?(:tv_nsec) ? tv_nsec : tv_usec * 1000
+ }.to_json(*args)
+ end
+end
+
+class Date
+ def self.json_create(object)
+ civil(*object.values_at('y', 'm', 'd', 'sg'))
+ end
+
+ alias start sg unless method_defined?(:start)
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 'y' => year,
+ 'm' => month,
+ 'd' => day,
+ 'sg' => start,
+ }.to_json(*args)
+ end
+end
+
+class DateTime
+ def self.json_create(object)
+ args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
+ of_a, of_b = object['of'].split('/')
+ if of_b and of_b != '0'
+ args << Rational(of_a.to_i, of_b.to_i)
+ else
+ args << of_a
+ end
+ args << object['sg']
+ civil(*args)
+ end
+
+ alias start sg unless method_defined?(:start)
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 'y' => year,
+ 'm' => month,
+ 'd' => day,
+ 'H' => hour,
+ 'M' => min,
+ 'S' => sec,
+ 'of' => offset.to_s,
+ 'sg' => start,
+ }.to_json(*args)
+ end
+end
+
+class Range
+ def self.json_create(object)
+ new(*object['a'])
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 'a' => [ first, last, exclude_end? ]
+ }.to_json(*args)
+ end
+end
+
+class Struct
+ def self.json_create(object)
+ new(*object['v'])
+ end
+
+ def to_json(*args)
+ klass = self.class.name
+ klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
+ {
+ 'json_class' => klass,
+ 'v' => values,
+ }.to_json(*args)
+ end
+end
+
+class Exception
+ def self.json_create(object)
+ result = new(object['m'])
+ result.set_backtrace object['b']
+ result
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 'm' => message,
+ 'b' => backtrace,
+ }.to_json(*args)
+ end
+end
+
+class Regexp
+ def self.json_create(object)
+ new(object['s'], object['o'])
+ end
+
+ def to_json(*)
+ {
+ 'json_class' => self.class.name,
+ 'o' => options,
+ 's' => source,
+ }.to_json
+ end
+end
diff --git a/lib/json/add/rails.rb b/lib/json/add/rails.rb
new file mode 100644
index 0000000..e86ed1a
--- /dev/null
+++ b/lib/json/add/rails.rb
@@ -0,0 +1,58 @@
+# This file contains implementations of rails custom objects for
+# serialisation/deserialisation.
+
+unless Object.const_defined?(:JSON) and ::JSON.const_defined?(:JSON_LOADED) and
+ ::JSON::JSON_LOADED
+ require 'json'
+end
+
+class Object
+ def self.json_create(object)
+ obj = new
+ for key, value in object
+ next if key == 'json_class'
+ instance_variable_set "@#{key}", value
+ end
+ obj
+ end
+
+ def to_json(*a)
+ result = {
+ 'json_class' => self.class.name
+ }
+ instance_variables.inject(result) do |r, name|
+ r[name[1..-1]] = instance_variable_get name
+ r
+ end
+ result.to_json(*a)
+ end
+end
+
+class Symbol
+ def to_json(*a)
+ to_s.to_json(*a)
+ end
+end
+
+module Enumerable
+ def to_json(*a)
+ to_a.to_json(*a)
+ end
+end
+
+# class Regexp
+# def to_json(*)
+# inspect
+# end
+# end
+#
+# The above rails definition has some problems:
+#
+# 1. { 'foo' => /bar/ }.to_json # => "{foo: /bar/}"
+# This isn't valid JSON, because the regular expression syntax is not
+# defined in RFC 4627. (And unquoted strings are disallowed there, too.)
+# Though it is valid Javascript.
+#
+# 2. { 'foo' => /bar/mix }.to_json # => "{foo: /bar/mix}"
+# This isn't even valid Javascript.
+
diff --git a/lib/json/common.rb b/lib/json/common.rb
new file mode 100644
index 0000000..61548eb
--- /dev/null
+++ b/lib/json/common.rb
@@ -0,0 +1,356 @@
+require 'json/version'
+
+module JSON
+ class << self
+ # If _object_ is string-like parse the string and return the parsed result
+ # as a Ruby data structure. Otherwise generate a JSON text from the Ruby
+ # data structure object and return it.
+ #
+ # The _opts_ argument is passed through to generate/parse respectively, see
+ # generate and parse for their documentation.
+ def [](object, opts = {})
+ if object.respond_to? :to_str
+ JSON.parse(object.to_str, opts => {})
+ else
+ JSON.generate(object, opts => {})
+ end
+ end
+
+ # Returns the JSON parser class, that is used by JSON. This might be either
+ # JSON::Ext::Parser or JSON::Pure::Parser.
+ attr_reader :parser
+
+ # Set the JSON parser class _parser_ to be used by JSON.
+ def parser=(parser) # :nodoc:
+ @parser = parser
+ remove_const :Parser if const_defined? :Parser
+ const_set :Parser, parser
+ end
+
+ # Return the constant located at _path_. The format of _path_ has to be
+ # either ::A::B::C or A::B::C. In any case A has to be located at the top
+ # level (absolute namespace path?). If there doesn't exist a constant at
+ # the given path, an ArgumentError is raised.
+ def deep_const_get(path) # :nodoc:
+ path = path.to_s
+ path.split(/::/).inject(Object) do |p, c|
+ case
+ when c.empty? then p
+ when p.const_defined?(c) then p.const_get(c)
+ else raise ArgumentError, "can't find const #{path}"
+ end
+ end
+ end
+
+ # Set the module _generator_ to be used by JSON.
+ def generator=(generator) # :nodoc:
+ @generator = generator
+ generator_methods = generator::GeneratorMethods
+ for const in generator_methods.constants
+ klass = deep_const_get(const)
+ modul = generator_methods.const_get(const)
+ klass.class_eval do
+ instance_methods(false).each do |m|
+ m.to_s == 'to_json' and remove_method m
+ end
+ include modul
+ end
+ end
+ self.state = generator::State
+ const_set :State, self.state
+ end
+
+ # Returns the JSON generator modul, that is used by JSON. This might be
+ # either JSON::Ext::Generator or JSON::Pure::Generator.
+ attr_reader :generator
+
+ # Returns the JSON generator state class, that is used by JSON. This might
+ # be either JSON::Ext::Generator::State or JSON::Pure::Generator::State.
+ attr_accessor :state
+
+ # This is create identifier, that is used to decide, if the _json_create_
+ # hook of a class should be called. It defaults to 'json_class'.
+ attr_accessor :create_id
+ end
+ self.create_id = 'json_class'
+
+ NaN = (-1.0) ** 0.5
+
+ Infinity = 1.0/0
+
+ MinusInfinity = -Infinity
+
+ # The base exception for JSON errors.
+ class JSONError < StandardError; end
+
+ # This exception is raised, if a parser error occurs.
+ class ParserError < JSONError; end
+
+ # This exception is raised, if the nesting of parsed datastructures is too
+ # deep.
+ class NestingError < ParserError; end
+
+ # This exception is raised, if a generator or unparser error occurs.
+ class GeneratorError < JSONError; end
+ # For backwards compatibility
+ UnparserError = GeneratorError
+
+ # If a circular data structure is encountered while unparsing
+ # this exception is raised.
+ class CircularDatastructure < GeneratorError; end
+
+ # This exception is raised, if the required unicode support is missing on the
+ # system. Usually this means, that the iconv library is not installed.
+ class MissingUnicodeSupport < JSONError; end
+
+ module_function
+
+ # Parse the JSON string _source_ into a Ruby data structure and return it.
+ #
+ # _opts_ can have the following
+ # keys:
+ # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ # structures. Disable depth checking with :max_nesting => false, it defaults
+ # to 19.
+ # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
+ # defiance of RFC 4627 to be parsed by the Parser. This option defaults
+ # to false.
+ # * *create_additions*: If set to false, the Parser doesn't create
+ # additions even if a matchin class and create_id was found. This option
+ # defaults to true.
+ def parse(source, opts = {})
+ JSON.parser.new(source, opts).parse
+ end
+
+ # Parse the JSON string _source_ into a Ruby data structure and return it.
+ # The bang version of the parse method, defaults to the more dangerous values
+ # for the _opts_ hash, so be sure only to parse trusted _source_ strings.
+ #
+ # _opts_ can have the following keys:
+ # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ # structures. Enable depth checking with :max_nesting => anInteger. The parse!
+ # methods defaults to not doing max depth checking: This can be dangerous,
+ # if someone wants to fill up your stack.
+ # * *allow_nan*: If set to true, allow NaN, Infinity, and -Infinity in
+ # defiance of RFC 4627 to be parsed by the Parser. This option defaults
+ # to true.
+ # * *create_additions*: If set to false, the Parser doesn't create
+ # additions even if a matchin class and create_id was found. This option
+ # defaults to true.
+ def parse!(source, opts = {})
+ opts = {
+ :max_nesting => false,
+ :allow_nan => true
+ }.update(opts)
+ JSON.parser.new(source, opts).parse
+ end
+
+ # Unparse the Ruby data structure _obj_ into a single line JSON string and
+ # return it. _state_ is
+ # * a JSON::State object,
+ # * or a Hash like object (responding to to_hash),
+ # * an object convertible into a hash by a to_h method,
+ # that is used as or to configure a State object.
+ #
+ # It defaults to a state object, that creates the shortest possible JSON text
+ # in one line, checks for circular data structures and doesn't allow NaN,
+ # Infinity, and -Infinity.
+ #
+ # A _state_ hash can have the following keys:
+ # * *indent*: a string used to indent levels (default: ''),
+ # * *space*: a string that is put after, a : or , delimiter (default: ''),
+ # * *space_before*: a string that is put before a : pair delimiter (default: ''),
+ # * *object_nl*: a string that is put at the end of a JSON object (default: ''),
+ # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
+ # * *check_circular*: true if checking for circular data structures
+ # should be done (the default), false otherwise.
+ # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
+ # generated, otherwise an exception is thrown, if these values are
+ # encountered. This options defaults to false.
+ # * *max_nesting*: The maximum depth of nesting allowed in the data
+ # structures from which JSON is to be generated. Disable depth checking
+ # with :max_nesting => false, it defaults to 19.
+ #
+ # See also the fast_generate for the fastest creation method with the least
+ # amount of sanity checks, and the pretty_generate method for some
+ # defaults for a pretty output.
+ def generate(obj, state = nil)
+ if state
+ state = State.from_state(state)
+ else
+ state = State.new
+ end
+ obj.to_json(state)
+ end
+
+ # :stopdoc:
+ # I want to deprecate these later, so I'll first be silent about them, and
+ # later delete them.
+ alias unparse generate
+ module_function :unparse
+ # :startdoc:
+
+ # Unparse the Ruby data structure _obj_ into a single line JSON string and
+ # return it. This method disables the checks for circles in Ruby objects, and
+ # also generates NaN, Infinity, and, -Infinity float values.
+ #
+ # *WARNING*: Be careful not to pass any Ruby data structures with circles as
+ # _obj_ argument, because this will cause JSON to go into an infinite loop.
+ def fast_generate(obj)
+ obj.to_json(nil)
+ end
+
+ # :stopdoc:
+ # I want to deprecate these later, so I'll first be silent about them, and later delete them.
+ alias fast_unparse fast_generate
+ module_function :fast_unparse
+ # :startdoc:
+
+ # Unparse the Ruby data structure _obj_ into a JSON string and return it. The
+ # returned string is a prettier form of the string returned by #unparse.
+ #
+ # The _opts_ argument can be used to configure the generator, see the
+ # generate method for a more detailed explanation.
+ def pretty_generate(obj, opts = nil)
+ state = JSON.state.new(
+ :indent => ' ',
+ :space => ' ',
+ :object_nl => "\n",
+ :array_nl => "\n",
+ :check_circular => true
+ )
+ if opts
+ if opts.respond_to? :to_hash
+ opts = opts.to_hash
+ elsif opts.respond_to? :to_h
+ opts = opts.to_h
+ else
+ raise TypeError, "can't convert #{opts.class} into Hash"
+ end
+ state.configure(opts)
+ end
+ obj.to_json(state)
+ end
+
+ # :stopdoc:
+ # I want to deprecate these later, so I'll first be silent about them, and later delete them.
+ alias pretty_unparse pretty_generate
+ module_function :pretty_unparse
+ # :startdoc:
+
+ # Load a ruby data structure from a JSON _source_ and return it. A source can
+ # either be a string-like object, an IO like object, or an object responding
+ # to the read method. If _proc_ was given, it will be called with any nested
+ # Ruby object as an argument recursively in depth first order.
+ #
+ # This method is part of the implementation of the load/dump interface of
+ # Marshal and YAML.
+ def load(source, proc = nil)
+ if source.respond_to? :to_str
+ source = source.to_str
+ elsif source.respond_to? :to_io
+ source = source.to_io.read
+ else
+ source = source.read
+ end
+ result = parse(source, :max_nesting => false, :allow_nan => true)
+ recurse_proc(result, &proc) if proc
+ result
+ end
+
+ def recurse_proc(result, &proc)
+ case result
+ when Array
+ result.each { |x| recurse_proc x, &proc }
+ proc.call result
+ when Hash
+ result.each { |x, y| recurse_proc x, &proc; recurse_proc y, &proc }
+ proc.call result
+ else
+ proc.call result
+ end
+ end
+ private :recurse_proc
+ module_function :recurse_proc
+
+ alias restore load
+ module_function :restore
+
+ # Dumps _obj_ as a JSON string, i.e. calls generate on the object and returns
+ # the result.
+ #
+ # If anIO (an IO like object or an object that responds to the write method)
+ # was given, the resulting JSON is written to it.
+ #
+ # If the number of nested arrays or objects exceeds _limit_ an ArgumentError
+ # exception is raised. This argument is similar (but not exactly the
+ # same!) to the _limit_ argument in Marshal.dump.
+ #
+ # This method is part of the implementation of the load/dump interface of
+ # Marshal and YAML.
+ def dump(obj, anIO = nil, limit = nil)
+ if anIO and limit.nil?
+ anIO = anIO.to_io if anIO.respond_to?(:to_io)
+ unless anIO.respond_to?(:write)
+ limit = anIO
+ anIO = nil
+ end
+ end
+ limit ||= 0
+ result = generate(obj, :allow_nan => true, :max_nesting => limit)
+ if anIO
+ anIO.write result
+ anIO
+ else
+ result
+ end
+ rescue JSON::NestingError
+ raise ArgumentError, "exceed depth limit"
+ end
+end
+
+module ::Kernel
+ private
+
+ # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
+ # one line.
+ def j(*objs)
+ objs.each do |obj|
+ puts JSON::generate(obj, :allow_nan => true, :max_nesting => false)
+ end
+ nil
+ end
+
+ # Ouputs _objs_ to STDOUT as JSON strings in a pretty format, with
+ # indentation and over many lines.
+ def jj(*objs)
+ objs.each do |obj|
+ puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)
+ end
+ nil
+ end
+
+ # If _object_ is string-like parse the string and return the parsed result as
+ # a Ruby data structure. Otherwise generate a JSON text from the Ruby data
+ # structure object and return it.
+ #
+ # The _opts_ argument is passed through to generate/parse respectively, see
+ # generate and parse for their documentation.
+ def JSON(object, opts = {})
+ if object.respond_to? :to_str
+ JSON.parse(object.to_str, opts)
+ else
+ JSON.generate(object, opts)
+ end
+ end
+end
+
+class ::Class
+ # Returns true, if this class can be used to create an instance
+ # from a serialised JSON string. The class has to implement a class
+ # method _json_create_ that expects a hash as first parameter, which includes
+ # the required data.
+ def json_creatable?
+ respond_to?(:json_create)
+ end
+end
diff --git a/lib/json/editor.rb b/lib/json/editor.rb
new file mode 100644
index 0000000..1e13f33
--- /dev/null
+++ b/lib/json/editor.rb
@@ -0,0 +1,1371 @@
+# To use the GUI JSON editor, start the edit_json.rb executable script. It
+# requires ruby-gtk to be installed.
+
+require 'gtk2'
+require 'iconv'
+require 'json'
+require 'rbconfig'
+require 'open-uri'
+
+module JSON
+ module Editor
+ include Gtk
+
+ # Beginning of the editor window title
+ TITLE = 'JSON Editor'.freeze
+
+ # Columns constants
+ ICON_COL, TYPE_COL, CONTENT_COL = 0, 1, 2
+
+ # JSON primitive types (Containers)
+ CONTAINER_TYPES = %w[Array Hash].sort
+ # All JSON primitive types
+ ALL_TYPES = (%w[TrueClass FalseClass Numeric String NilClass] +
+ CONTAINER_TYPES).sort
+
+ # The Nodes necessary for the tree representation of a JSON document
+ ALL_NODES = (ALL_TYPES + %w[Key]).sort
+
+ DEFAULT_DIALOG_KEY_PRESS_HANDLER = lambda do |dialog, event|
+ case event.keyval
+ when Gdk::Keyval::GDK_Return
+ dialog.response Dialog::RESPONSE_ACCEPT
+ when Gdk::Keyval::GDK_Escape
+ dialog.response Dialog::RESPONSE_REJECT
+ end
+ end
+
+ # Returns the Gdk::Pixbuf of the icon named _name_ from the icon cache.
+ def Editor.fetch_icon(name)
+ @icon_cache ||= {}
+ unless @icon_cache.key?(name)
+ path = File.dirname(__FILE__)
+ @icon_cache[name] = Gdk::Pixbuf.new(File.join(path, name + '.xpm'))
+ end
+ @icon_cache[name]
+ end
+
+ # Opens an error dialog on top of _window_ showing the error message
+ # _text_.
+ def Editor.error_dialog(window, text)
+ dialog = MessageDialog.new(window, Dialog::MODAL,
+ MessageDialog::ERROR,
+ MessageDialog::BUTTONS_CLOSE, text)
+ dialog.show_all
+ dialog.run
+ rescue TypeError
+ dialog = MessageDialog.new(Editor.window, Dialog::MODAL,
+ MessageDialog::ERROR,
+ MessageDialog::BUTTONS_CLOSE, text)
+ dialog.show_all
+ dialog.run
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Opens a yes/no question dialog on top of _window_ showing the error
+ # message _text_. If yes was answered _true_ is returned, otherwise
+ # _false_.
+ def Editor.question_dialog(window, text)
+ dialog = MessageDialog.new(window, Dialog::MODAL,
+ MessageDialog::QUESTION,
+ MessageDialog::BUTTONS_YES_NO, text)
+ dialog.show_all
+ dialog.run do |response|
+ return Gtk::Dialog::RESPONSE_YES === response
+ end
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Convert the tree model starting from Gtk::TreeIter _iter_ into a Ruby
+ # data structure and return it.
+ def Editor.model2data(iter)
+ return nil if iter.nil?
+ case iter.type
+ when 'Hash'
+ hash = {}
+ iter.each { |c| hash[c.content] = Editor.model2data(c.first_child) }
+ hash
+ when 'Array'
+ array = Array.new(iter.n_children)
+ iter.each_with_index { |c, i| array[i] = Editor.model2data(c) }
+ array
+ when 'Key'
+ iter.content
+ when 'String'
+ iter.content
+ when 'Numeric'
+ content = iter.content
+ if /\./.match(content)
+ content.to_f
+ else
+ content.to_i
+ end
+ when 'TrueClass'
+ true
+ when 'FalseClass'
+ false
+ when 'NilClass'
+ nil
+ else
+ fail "Unknown type found in model: #{iter.type}"
+ end
+ end
+
+ # Convert the Ruby data structure _data_ into tree model data for Gtk and
+ # returns the whole model. If the parameter _model_ wasn't given a new
+ # Gtk::TreeStore is created as the model. The _parent_ parameter specifies
+ # the parent node (iter, Gtk:TreeIter instance) to which the data is
+ # appended, alternativeley the result of the yielded block is used as iter.
+ def Editor.data2model(data, model = nil, parent = nil)
+ model ||= TreeStore.new(Gdk::Pixbuf, String, String)
+ iter = if block_given?
+ yield model
+ else
+ model.append(parent)
+ end
+ case data
+ when Hash
+ iter.type = 'Hash'
+ data.sort.each do |key, value|
+ pair_iter = model.append(iter)
+ pair_iter.type = 'Key'
+ pair_iter.content = key.to_s
+ Editor.data2model(value, model, pair_iter)
+ end
+ when Array
+ iter.type = 'Array'
+ data.each do |value|
+ Editor.data2model(value, model, iter)
+ end
+ when Numeric
+ iter.type = 'Numeric'
+ iter.content = data.to_s
+ when String, true, false, nil
+ iter.type = data.class.name
+ iter.content = data.nil? ? 'null' : data.to_s
+ else
+ iter.type = 'String'
+ iter.content = data.to_s
+ end
+ model
+ end
+
+ # The Gtk::TreeIter class is reopened and some auxiliary methods are added.
+ class Gtk::TreeIter
+ include Enumerable
+
+ # Traverse each of this Gtk::TreeIter instance's children
+ # and yield to them.
+ def each
+ n_children.times { |i| yield nth_child(i) }
+ end
+
+ # Recursively traverse all nodes of this Gtk::TreeIter's subtree
+ # (including self) and yield to them.
+ def recursive_each(&block)
+ yield self
+ each do |i|
+ i.recursive_each(&block)
+ end
+ end
+
+ # Remove the subtree of this Gtk::TreeIter instance from the
+ # model _model_.
+ def remove_subtree(model)
+ while current = first_child
+ model.remove(current)
+ end
+ end
+
+ # Returns the type of this node.
+ def type
+ self[TYPE_COL]
+ end
+
+ # Sets the type of this node to _value_. This implies setting
+ # the respective icon accordingly.
+ def type=(value)
+ self[TYPE_COL] = value
+ self[ICON_COL] = Editor.fetch_icon(value)
+ end
+
+ # Returns the content of this node.
+ def content
+ self[CONTENT_COL]
+ end
+
+ # Sets the content of this node to _value_.
+ def content=(value)
+ self[CONTENT_COL] = value
+ end
+ end
+
+ # This module bundles some method, that can be used to create a menu. It
+ # should be included into the class in question.
+ module MenuExtension
+ include Gtk
+
+ # Creates a Menu, that includes MenuExtension. _treeview_ is the
+ # Gtk::TreeView, on which it operates.
+ def initialize(treeview)
+ @treeview = treeview
+ @menu = Menu.new
+ end
+
+ # Returns the Gtk::TreeView of this menu.
+ attr_reader :treeview
+
+ # Returns the menu.
+ attr_reader :menu
+
+ # Adds a Gtk::SeparatorMenuItem to this instance's #menu.
+ def add_separator
+ menu.append SeparatorMenuItem.new
+ end
+
+ # Adds a Gtk::MenuItem to this instance's #menu. _label_ is the label
+ # string, _klass_ is the item type, and _callback_ is the procedure, that
+ # is called if the _item_ is activated.
+ def add_item(label, keyval = nil, klass = MenuItem, &callback)
+ label = "#{label} (C-#{keyval.chr})" if keyval
+ item = klass.new(label)
+ item.signal_connect(:activate, &callback)
+ if keyval
+ self.signal_connect(:'key-press-event') do |item, event|
+ if event.state & Gdk::Window::ModifierType::CONTROL_MASK != 0 and
+ event.keyval == keyval
+ callback.call item
+ end
+ end
+ end
+ menu.append item
+ item
+ end
+
+ # This method should be implemented in subclasses to create the #menu of
+ # this instance. It has to be called after an instance of this class is
+ # created, to build the menu.
+ def create
+ raise NotImplementedError
+ end
+
+ def method_missing(*a, &b)
+ treeview.__send__(*a, &b)
+ end
+ end
+
+ # This class creates the popup menu, that opens when clicking onto the
+ # treeview.
+ class PopUpMenu
+ include MenuExtension
+
+ # Change the type or content of the selected node.
+ def change_node(item)
+ if current = selection.selected
+ parent = current.parent
+ old_type, old_content = current.type, current.content
+ if ALL_TYPES.include?(old_type)
+ @clipboard_data = Editor.model2data(current)
+ type, content = ask_for_element(parent, current.type,
+ current.content)
+ if type
+ current.type, current.content = type, content
+ current.remove_subtree(model)
+ toplevel.display_status("Changed a node in tree.")
+ window.change
+ end
+ else
+ toplevel.display_status(
+ "Cannot change node of type #{old_type} in tree!")
+ end
+ end
+ end
+
+ # Cut the selected node and its subtree, and save it into the
+ # clipboard.
+ def cut_node(item)
+ if current = selection.selected
+ if current and current.type == 'Key'
+ @clipboard_data = {
+ current.content => Editor.model2data(current.first_child)
+ }
+ else
+ @clipboard_data = Editor.model2data(current)
+ end
+ model.remove(current)
+ window.change
+ toplevel.display_status("Cut a node from tree.")
+ end
+ end
+
+ # Copy the selected node and its subtree, and save it into the
+ # clipboard.
+ def copy_node(item)
+ if current = selection.selected
+ if current and current.type == 'Key'
+ @clipboard_data = {
+ current.content => Editor.model2data(current.first_child)
+ }
+ else
+ @clipboard_data = Editor.model2data(current)
+ end
+ window.change
+ toplevel.display_status("Copied a node from tree.")
+ end
+ end
+
+ # Paste the data in the clipboard into the selected Array or Hash by
+ # appending it.
+ def paste_node_appending(item)
+ if current = selection.selected
+ if @clipboard_data
+ case current.type
+ when 'Array'
+ Editor.data2model(@clipboard_data, model, current)
+ expand_collapse(current)
+ when 'Hash'
+ if @clipboard_data.is_a? Hash
+ parent = current.parent
+ hash = Editor.model2data(current)
+ model.remove(current)
+ hash.update(@clipboard_data)
+ Editor.data2model(hash, model, parent)
+ if parent
+ expand_collapse(parent)
+ elsif @expanded
+ expand_all
+ end
+ window.change
+ else
+ toplevel.display_status(
+ "Cannot paste non-#{current.type} data into '#{current.type}'!")
+ end
+ else
+ toplevel.display_status(
+ "Cannot paste node below '#{current.type}'!")
+ end
+ else
+ toplevel.display_status("Nothing to paste in clipboard!")
+ end
+ else
+ toplevel.display_status("Append a node into the root first!")
+ end
+ end
+
+ # Paste the data in the clipboard into the selected Array inserting it
+ # before the selected element.
+ def paste_node_inserting_before(item)
+ if current = selection.selected
+ if @clipboard_data
+ parent = current.parent or return
+ parent_type = parent.type
+ if parent_type == 'Array'
+ selected_index = parent.each_with_index do |c, i|
+ break i if c == current
+ end
+ Editor.data2model(@clipboard_data, model, parent) do |m|
+ m.insert_before(parent, current)
+ end
+ expand_collapse(current)
+ toplevel.display_status("Inserted an element to " +
+ "'#{parent_type}' before index #{selected_index}.")
+ window.change
+ else
+ toplevel.display_status(
+ "Cannot insert node below '#{parent_type}'!")
+ end
+ else
+ toplevel.display_status("Nothing to paste in clipboard!")
+ end
+ else
+ toplevel.display_status("Append a node into the root first!")
+ end
+ end
+
+ # Append a new node to the selected Hash or Array.
+ def append_new_node(item)
+ if parent = selection.selected
+ parent_type = parent.type
+ case parent_type
+ when 'Hash'
+ key, type, content = ask_for_hash_pair(parent)
+ key or return
+ iter = create_node(parent, 'Key', key)
+ iter = create_node(iter, type, content)
+ toplevel.display_status(
+ "Added a (key, value)-pair to '#{parent_type}'.")
+ window.change
+ when 'Array'
+ type, content = ask_for_element(parent)
+ type or return
+ iter = create_node(parent, type, content)
+ window.change
+ toplevel.display_status("Appendend an element to '#{parent_type}'.")
+ else
+ toplevel.display_status("Cannot append to '#{parent_type}'!")
+ end
+ else
+ type, content = ask_for_element
+ type or return
+ iter = create_node(nil, type, content)
+ window.change
+ end
+ end
+
+ # Insert a new node into an Array before the selected element.
+ def insert_new_node(item)
+ if current = selection.selected
+ parent = current.parent or return
+ parent_parent = parent.parent
+ parent_type = parent.type
+ if parent_type == 'Array'
+ selected_index = parent.each_with_index do |c, i|
+ break i if c == current
+ end
+ type, content = ask_for_element(parent)
+ type or return
+ iter = model.insert_before(parent, current)
+ iter.type, iter.content = type, content
+ toplevel.display_status("Inserted an element to " +
+ "'#{parent_type}' before index #{selected_index}.")
+ window.change
+ else
+ toplevel.display_status(
+ "Cannot insert node below '#{parent_type}'!")
+ end
+ else
+ toplevel.display_status("Append a node into the root first!")
+ end
+ end
+
+ # Recursively collapse/expand a subtree starting from the selected node.
+ def collapse_expand(item)
+ if current = selection.selected
+ if row_expanded?(current.path)
+ collapse_row(current.path)
+ else
+ expand_row(current.path, true)
+ end
+ else
+ toplevel.display_status("Append a node into the root first!")
+ end
+ end
+
+ # Create the menu.
+ def create
+ add_item("Change node", ?n, &method(:change_node))
+ add_separator
+ add_item("Cut node", ?X, &method(:cut_node))
+ add_item("Copy node", ?C, &method(:copy_node))
+ add_item("Paste node (appending)", ?A, &method(:paste_node_appending))
+ add_item("Paste node (inserting before)", ?I,
+ &method(:paste_node_inserting_before))
+ add_separator
+ add_item("Append new node", ?a, &method(:append_new_node))
+ add_item("Insert new node before", ?i, &method(:insert_new_node))
+ add_separator
+ add_item("Collapse/Expand node (recursively)", ?e,
+ &method(:collapse_expand))
+
+ menu.show_all
+ signal_connect(:button_press_event) do |widget, event|
+ if event.kind_of? Gdk::EventButton and event.button == 3
+ menu.popup(nil, nil, event.button, event.time)
+ end
+ end
+ signal_connect(:popup_menu) do
+ menu.popup(nil, nil, 0, Gdk::Event::CURRENT_TIME)
+ end
+ end
+ end
+
+ # This class creates the File pulldown menu.
+ class FileMenu
+ include MenuExtension
+
+ # Clear the model and filename, but ask to save the JSON document, if
+ # unsaved changes have occured.
+ def new(item)
+ window.clear
+ end
+
+ # Open a file and load it into the editor. Ask to save the JSON document
+ # first, if unsaved changes have occured.
+ def open(item)
+ window.file_open
+ end
+
+ def open_location(item)
+ window.location_open
+ end
+
+ # Revert the current JSON document in the editor to the saved version.
+ def revert(item)
+ window.instance_eval do
+ @filename and file_open(@filename)
+ end
+ end
+
+ # Save the current JSON document.
+ def save(item)
+ window.file_save
+ end
+
+ # Save the current JSON document under the given filename.
+ def save_as(item)
+ window.file_save_as
+ end
+
+ # Quit the editor, after asking to save any unsaved changes first.
+ def quit(item)
+ window.quit
+ end
+
+ # Create the menu.
+ def create
+ title = MenuItem.new('File')
+ title.submenu = menu
+ add_item('New', &method(:new))
+ add_item('Open', ?o, &method(:open))
+ add_item('Open location', ?l, &method(:open_location))
+ add_item('Revert', &method(:revert))
+ add_separator
+ add_item('Save', ?s, &method(:save))
+ add_item('Save As', ?S, &method(:save_as))
+ add_separator
+ add_item('Quit', ?q, &method(:quit))
+ title
+ end
+ end
+
+ # This class creates the Edit pulldown menu.
+ class EditMenu
+ include MenuExtension
+
+ # Copy data from model into primary clipboard.
+ def copy(item)
+ data = Editor.model2data(model.iter_first)
+ json = JSON.pretty_generate(data, :max_nesting => false)
+ c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
+ c.text = json
+ end
+
+ # Copy json text from primary clipboard into model.
+ def paste(item)
+ c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
+ if json = c.wait_for_text
+ window.ask_save if @changed
+ begin
+ window.edit json
+ rescue JSON::ParserError
+ window.clear
+ end
+ end
+ end
+
+ # Find a string in all nodes' contents and select the found node in the
+ # treeview.
+ def find(item)
+ @search = ask_for_find_term(@search) or return
+ iter = model.get_iter('0') or return
+ iter.recursive_each do |i|
+ if @iter
+ if @iter != i
+ next
+ else
+ @iter = nil
+ next
+ end
+ elsif @search.match(i[CONTENT_COL])
+ set_cursor(i.path, nil, false)
+ @iter = i
+ break
+ end
+ end
+ end
+
+ # Repeat the last search given by #find.
+ def find_again(item)
+ @search or return
+ iter = model.get_iter('0')
+ iter.recursive_each do |i|
+ if @iter
+ if @iter != i
+ next
+ else
+ @iter = nil
+ next
+ end
+ elsif @search.match(i[CONTENT_COL])
+ set_cursor(i.path, nil, false)
+ @iter = i
+ break
+ end
+ end
+ end
+
+ # Sort (Reverse sort) all elements of the selected array by the given
+ # expression. _x_ is the element in question.
+ def sort(item)
+ if current = selection.selected
+ if current.type == 'Array'
+ parent = current.parent
+ ary = Editor.model2data(current)
+ order, reverse = ask_for_order
+ order or return
+ begin
+ block = eval "lambda { |x| #{order} }"
+ if reverse
+ ary.sort! { |a,b| block[b] <=> block[a] }
+ else
+ ary.sort! { |a,b| block[a] <=> block[b] }
+ end
+ rescue => e
+ Editor.error_dialog(self, "Failed to sort Array with #{order}: #{e}!")
+ else
+ Editor.data2model(ary, model, parent) do |m|
+ m.insert_before(parent, current)
+ end
+ model.remove(current)
+ expand_collapse(parent)
+ window.change
+ toplevel.display_status("Array has been sorted.")
+ end
+ else
+ toplevel.display_status("Only Array nodes can be sorted!")
+ end
+ else
+ toplevel.display_status("Select an Array to sort first!")
+ end
+ end
+
+ # Create the menu.
+ def create
+ title = MenuItem.new('Edit')
+ title.submenu = menu
+ add_item('Copy', ?c, &method(:copy))
+ add_item('Paste', ?v, &method(:paste))
+ add_separator
+ add_item('Find', ?f, &method(:find))
+ add_item('Find Again', ?g, &method(:find_again))
+ add_separator
+ add_item('Sort', ?S, &method(:sort))
+ title
+ end
+ end
+
+ class OptionsMenu
+ include MenuExtension
+
+ # Collapse/Expand all nodes by default.
+ def collapsed_nodes(item)
+ if expanded
+ self.expanded = false
+ collapse_all
+ else
+ self.expanded = true
+ expand_all
+ end
+ end
+
+ # Toggle pretty saving mode on/off.
+ def pretty_saving(item)
+ @pretty_item.toggled
+ window.change
+ end
+
+ attr_reader :pretty_item
+
+ # Create the menu.
+ def create
+ title = MenuItem.new('Options')
+ title.submenu = menu
+ add_item('Collapsed nodes', nil, CheckMenuItem, &method(:collapsed_nodes))
+ @pretty_item = add_item('Pretty saving', nil, CheckMenuItem,
+ &method(:pretty_saving))
+ @pretty_item.active = true
+ window.unchange
+ title
+ end
+ end
+
+ # This class inherits from Gtk::TreeView, to configure it and to add a lot
+ # of behaviour to it.
+ class JSONTreeView < Gtk::TreeView
+ include Gtk
+
+ # Creates a JSONTreeView instance, the parameter _window_ is
+ # a MainWindow instance and used for self delegation.
+ def initialize(window)
+ @window = window
+ super(TreeStore.new(Gdk::Pixbuf, String, String))
+ self.selection.mode = SELECTION_BROWSE
+
+ @expanded = false
+ self.headers_visible = false
+ add_columns
+ add_popup_menu
+ end
+
+ # Returns the MainWindow instance of this JSONTreeView.
+ attr_reader :window
+
+ # Returns true, if nodes are autoexpanding, false otherwise.
+ attr_accessor :expanded
+
+ private
+
+ def add_columns
+ cell = CellRendererPixbuf.new
+ column = TreeViewColumn.new('Icon', cell,
+ 'pixbuf' => ICON_COL
+ )
+ append_column(column)
+
+ cell = CellRendererText.new
+ column = TreeViewColumn.new('Type', cell,
+ 'text' => TYPE_COL
+ )
+ append_column(column)
+
+ cell = CellRendererText.new
+ cell.editable = true
+ column = TreeViewColumn.new('Content', cell,
+ 'text' => CONTENT_COL
+ )
+ cell.signal_connect(:edited, &method(:cell_edited))
+ append_column(column)
+ end
+
+ def unify_key(iter, key)
+ return unless iter.type == 'Key'
+ parent = iter.parent
+ if parent.any? { |c| c != iter and c.content == key }
+ old_key = key
+ i = 0
+ begin
+ key = sprintf("%s.%d", old_key, i += 1)
+ end while parent.any? { |c| c != iter and c.content == key }
+ end
+ iter.content = key
+ end
+
+ def cell_edited(cell, path, value)
+ iter = model.get_iter(path)
+ case iter.type
+ when 'Key'
+ unify_key(iter, value)
+ toplevel.display_status('Key has been changed.')
+ when 'FalseClass'
+ value.downcase!
+ if value == 'true'
+ iter.type, iter.content = 'TrueClass', 'true'
+ end
+ when 'TrueClass'
+ value.downcase!
+ if value == 'false'
+ iter.type, iter.content = 'FalseClass', 'false'
+ end
+ when 'Numeric'
+ iter.content =
+ if value == 'Infinity'
+ value
+ else
+ (Integer(value) rescue Float(value) rescue 0).to_s
+ end
+ when 'String'
+ iter.content = value
+ when 'Hash', 'Array'
+ return
+ else
+ fail "Unknown type found in model: #{iter.type}"
+ end
+ window.change
+ end
+
+ def configure_value(value, type)
+ value.editable = false
+ case type
+ when 'Array', 'Hash'
+ value.text = ''
+ when 'TrueClass'
+ value.text = 'true'
+ when 'FalseClass'
+ value.text = 'false'
+ when 'NilClass'
+ value.text = 'null'
+ when 'Numeric', 'String'
+ value.text ||= ''
+ value.editable = true
+ else
+ raise ArgumentError, "unknown type '#{type}' encountered"
+ end
+ end
+
+ def add_popup_menu
+ menu = PopUpMenu.new(self)
+ menu.create
+ end
+
+ public
+
+ # Create a _type_ node with content _content_, and add it to _parent_
+ # in the model. If _parent_ is nil, create a new model and put it into
+ # the editor treeview.
+ def create_node(parent, type, content)
+ iter = if parent
+ model.append(parent)
+ else
+ new_model = Editor.data2model(nil)
+ toplevel.view_new_model(new_model)
+ new_model.iter_first
+ end
+ iter.type, iter.content = type, content
+ expand_collapse(parent) if parent
+ iter
+ end
+
+ # Ask for a hash key, value pair to be added to the Hash node _parent_.
+ def ask_for_hash_pair(parent)
+ key_input = type_input = value_input = nil
+
+ dialog = Dialog.new("New (key, value) pair for Hash", nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ dialog.width_request = 640
+
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Key:"), false)
+ hbox.pack_start(key_input = Entry.new)
+ key_input.text = @key || ''
+ dialog.vbox.pack_start(hbox, false)
+ key_input.signal_connect(:activate) do
+ if parent.any? { |c| c.content == key_input.text }
+ toplevel.display_status('Key already exists in Hash!')
+ key_input.text = ''
+ else
+ toplevel.display_status('Key has been changed.')
+ end
+ end
+
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Type:"), false)
+ hbox.pack_start(type_input = ComboBox.new(true))
+ ALL_TYPES.each { |t| type_input.append_text(t) }
+ type_input.active = @type || 0
+ dialog.vbox.pack_start(hbox, false)
+
+ type_input.signal_connect(:changed) do
+ value_input.editable = false
+ case ALL_TYPES[type_input.active]
+ when 'Array', 'Hash'
+ value_input.text = ''
+ when 'TrueClass'
+ value_input.text = 'true'
+ when 'FalseClass'
+ value_input.text = 'false'
+ when 'NilClass'
+ value_input.text = 'null'
+ else
+ value_input.text = ''
+ value_input.editable = true
+ end
+ end
+
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Value:"), false)
+ hbox.pack_start(value_input = Entry.new)
+ value_input.width_chars = 60
+ value_input.text = @value || ''
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ self.focus = dialog
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ @key = key_input.text
+ type = ALL_TYPES[@type = type_input.active]
+ content = value_input.text
+ return @key, type, content
+ end
+ end
+ return
+ ensure
+ dialog.destroy
+ end
+
+ # Ask for an element to be appended _parent_.
+ def ask_for_element(parent = nil, default_type = nil, value_text = @content)
+ type_input = value_input = nil
+
+ dialog = Dialog.new(
+ "New element into #{parent ? parent.type : 'root'}",
+ nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Type:"), false)
+ hbox.pack_start(type_input = ComboBox.new(true))
+ default_active = 0
+ types = parent ? ALL_TYPES : CONTAINER_TYPES
+ types.each_with_index do |t, i|
+ type_input.append_text(t)
+ if t == default_type
+ default_active = i
+ end
+ end
+ type_input.active = default_active
+ dialog.vbox.pack_start(hbox, false)
+ type_input.signal_connect(:changed) do
+ configure_value(value_input, types[type_input.active])
+ end
+
+ hbox = HBox.new(false, 5)
+ hbox.pack_start(Label.new("Value:"), false)
+ hbox.pack_start(value_input = Entry.new)
+ value_input.width_chars = 60
+ value_input.text = value_text if value_text
+ configure_value(value_input, types[type_input.active])
+
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ self.focus = dialog
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ type = types[type_input.active]
+ @content = case type
+ when 'Numeric'
+ if (t = value_input.text) == 'Infinity'
+ 1 / 0.0
+ else
+ Integer(t) rescue Float(t) rescue 0
+ end
+ else
+ value_input.text
+ end.to_s
+ return type, @content
+ end
+ end
+ return
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Ask for an order criteria for sorting, using _x_ for the element in
+ # question. Returns the order criterium, and true/false for reverse
+ # sorting.
+ def ask_for_order
+ dialog = Dialog.new(
+ "Give an order criterium for 'x'.",
+ nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ hbox = HBox.new(false, 5)
+
+ hbox.pack_start(Label.new("Order:"), false)
+ hbox.pack_start(order_input = Entry.new)
+ order_input.text = @order || 'x'
+ order_input.width_chars = 60
+
+ hbox.pack_start(reverse_checkbox = CheckButton.new('Reverse'), false)
+
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ self.focus = dialog
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ return @order = order_input.text, reverse_checkbox.active?
+ end
+ end
+ return
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Ask for a find term to search for in the tree. Returns the term as a
+ # string.
+ def ask_for_find_term(search = nil)
+ dialog = Dialog.new(
+ "Find a node matching regex in tree.",
+ nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ hbox = HBox.new(false, 5)
+
+ hbox.pack_start(Label.new("Regex:"), false)
+ hbox.pack_start(regex_input = Entry.new)
+ hbox.pack_start(icase_checkbox = CheckButton.new('Icase'), false)
+ regex_input.width_chars = 60
+ if search
+ regex_input.text = search.source
+ icase_checkbox.active = search.casefold?
+ end
+
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ self.focus = dialog
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ begin
+ return Regexp.new(regex_input.text, icase_checkbox.active? ? Regexp::IGNORECASE : 0)
+ rescue => e
+ Editor.error_dialog(self, "Evaluation of regex /#{regex_input.text}/ failed: #{e}!")
+ return
+ end
+ end
+ end
+ return
+ ensure
+ dialog.destroy if dialog
+ end
+
+ # Expand or collapse row pointed to by _iter_ according
+ # to the #expanded attribute.
+ def expand_collapse(iter)
+ if expanded
+ expand_row(iter.path, true)
+ else
+ collapse_row(iter.path)
+ end
+ end
+ end
+
+ # The editor main window
+ class MainWindow < Gtk::Window
+ include Gtk
+
+ def initialize(encoding)
+ @changed = false
+ @encoding = encoding
+ super(TOPLEVEL)
+ display_title
+ set_default_size(800, 600)
+ signal_connect(:delete_event) { quit }
+
+ vbox = VBox.new(false, 0)
+ add(vbox)
+ #vbox.border_width = 0
+
+ @treeview = JSONTreeView.new(self)
+ @treeview.signal_connect(:'cursor-changed') do
+ display_status('')
+ end
+
+ menu_bar = create_menu_bar
+ vbox.pack_start(menu_bar, false, false, 0)
+
+ sw = ScrolledWindow.new(nil, nil)
+ sw.shadow_type = SHADOW_ETCHED_IN
+ sw.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
+ vbox.pack_start(sw, true, true, 0)
+ sw.add(@treeview)
+
+ @status_bar = Statusbar.new
+ vbox.pack_start(@status_bar, false, false, 0)
+
+ @filename ||= nil
+ if @filename
+ data = read_data(@filename)
+ view_new_model Editor.data2model(data)
+ end
+
+ signal_connect(:button_release_event) do |_,event|
+ if event.button == 2
+ c = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
+ if url = c.wait_for_text
+ location_open url
+ end
+ false
+ else
+ true
+ end
+ end
+ end
+
+ # Creates the menu bar with the pulldown menus and returns it.
+ def create_menu_bar
+ menu_bar = MenuBar.new
+ @file_menu = FileMenu.new(@treeview)
+ menu_bar.append @file_menu.create
+ @edit_menu = EditMenu.new(@treeview)
+ menu_bar.append @edit_menu.create
+ @options_menu = OptionsMenu.new(@treeview)
+ menu_bar.append @options_menu.create
+ menu_bar
+ end
+
+ # Sets editor status to changed, to indicate that the edited data
+ # containts unsaved changes.
+ def change
+ @changed = true
+ display_title
+ end
+
+ # Sets editor status to unchanged, to indicate that the edited data
+ # doesn't containt unsaved changes.
+ def unchange
+ @changed = false
+ display_title
+ end
+
+ # Puts a new model _model_ into the Gtk::TreeView to be edited.
+ def view_new_model(model)
+ @treeview.model = model
+ @treeview.expanded = true
+ @treeview.expand_all
+ unchange
+ end
+
+ # Displays _text_ in the status bar.
+ def display_status(text)
+ @cid ||= nil
+ @status_bar.pop(@cid) if @cid
+ @cid = @status_bar.get_context_id('dummy')
+ @status_bar.push(@cid, text)
+ end
+
+ # Opens a dialog, asking, if changes should be saved to a file.
+ def ask_save
+ if Editor.question_dialog(self,
+ "Unsaved changes to JSON model. Save?")
+ if @filename
+ file_save
+ else
+ file_save_as
+ end
+ end
+ end
+
+ # Quit this editor, that is, leave this editor's main loop.
+ def quit
+ ask_save if @changed
+ if Gtk.main_level > 0
+ destroy
+ Gtk.main_quit
+ end
+ nil
+ end
+
+ # Display the new title according to the editor's current state.
+ def display_title
+ title = TITLE.dup
+ title << ": #@filename" if @filename
+ title << " *" if @changed
+ self.title = title
+ end
+
+ # Clear the current model, after asking to save all unsaved changes.
+ def clear
+ ask_save if @changed
+ @filename = nil
+ self.view_new_model nil
+ end
+
+ def check_pretty_printed(json)
+ pretty = !!((nl_index = json.index("\n")) && nl_index != json.size - 1)
+ @options_menu.pretty_item.active = pretty
+ end
+ private :check_pretty_printed
+
+ # Open the data at the location _uri_, if given. Otherwise open a dialog
+ # to ask for the _uri_.
+ def location_open(uri = nil)
+ uri = ask_for_location unless uri
+ uri or return
+ ask_save if @changed
+ data = load_location(uri) or return
+ view_new_model Editor.data2model(data)
+ end
+
+ # Open the file _filename_ or call the #select_file method to ask for a
+ # filename.
+ def file_open(filename = nil)
+ filename = select_file('Open as a JSON file') unless filename
+ data = load_file(filename) or return
+ view_new_model Editor.data2model(data)
+ end
+
+ # Edit the string _json_ in the editor.
+ def edit(json)
+ if json.respond_to? :read
+ json = json.read
+ end
+ data = parse_json json
+ view_new_model Editor.data2model(data)
+ end
+
+ # Save the current file.
+ def file_save
+ if @filename
+ store_file(@filename)
+ else
+ file_save_as
+ end
+ end
+
+ # Save the current file as the filename
+ def file_save_as
+ filename = select_file('Save as a JSON file')
+ store_file(filename)
+ end
+
+ # Store the current JSON document to _path_.
+ def store_file(path)
+ if path
+ data = Editor.model2data(@treeview.model.iter_first)
+ File.open(path + '.tmp', 'wb') do |output|
+ data or break
+ if @options_menu.pretty_item.active?
+ output.puts JSON.pretty_generate(data, :max_nesting => false)
+ else
+ output.write JSON.generate(data, :max_nesting => false)
+ end
+ end
+ File.rename path + '.tmp', path
+ @filename = path
+ toplevel.display_status("Saved data to '#@filename'.")
+ unchange
+ end
+ rescue SystemCallError => e
+ Editor.error_dialog(self, "Failed to store JSON file: #{e}!")
+ end
+
+ # Load the file named _filename_ into the editor as a JSON document.
+ def load_file(filename)
+ if filename
+ if File.directory?(filename)
+ Editor.error_dialog(self, "Try to select a JSON file!")
+ nil
+ else
+ @filename = filename
+ if data = read_data(filename)
+ toplevel.display_status("Loaded data from '#@filename'.")
+ end
+ display_title
+ data
+ end
+ end
+ end
+
+ # Load the data at location _uri_ into the editor as a JSON document.
+ def load_location(uri)
+ data = read_data(uri) or return
+ @filename = nil
+ toplevel.display_status("Loaded data from '#{uri}'.")
+ display_title
+ data
+ end
+
+ def parse_json(json)
+ check_pretty_printed(json)
+ if @encoding && !/^utf8$/i.match(@encoding)
+ iconverter = Iconv.new('utf8', @encoding)
+ json = iconverter.iconv(json)
+ end
+ JSON::parse(json, :max_nesting => false, :create_additions => false)
+ end
+ private :parse_json
+
+ # Read a JSON document from the file named _filename_, parse it into a
+ # ruby data structure, and return the data.
+ def read_data(filename)
+ open(filename) do |f|
+ json = f.read
+ return parse_json(json)
+ end
+ rescue => e
+ Editor.error_dialog(self, "Failed to parse JSON file: #{e}!")
+ return
+ end
+
+ # Open a file selecton dialog, displaying _message_, and return the
+ # selected filename or nil, if no file was selected.
+ def select_file(message)
+ filename = nil
+ fs = FileSelection.new(message)
+ fs.set_modal(true)
+ @default_dir = File.join(Dir.pwd, '') unless @default_dir
+ fs.set_filename(@default_dir)
+ fs.set_transient_for(self)
+ fs.signal_connect(:destroy) { Gtk.main_quit }
+ fs.ok_button.signal_connect(:clicked) do
+ filename = fs.filename
+ @default_dir = File.join(File.dirname(filename), '')
+ fs.destroy
+ Gtk.main_quit
+ end
+ fs.cancel_button.signal_connect(:clicked) do
+ fs.destroy
+ Gtk.main_quit
+ end
+ fs.show_all
+ Gtk.main
+ filename
+ end
+
+ # Ask for location URI a to load data from. Returns the URI as a string.
+ def ask_for_location
+ dialog = Dialog.new(
+ "Load data from location...",
+ nil, nil,
+ [ Stock::OK, Dialog::RESPONSE_ACCEPT ],
+ [ Stock::CANCEL, Dialog::RESPONSE_REJECT ]
+ )
+ hbox = HBox.new(false, 5)
+
+ hbox.pack_start(Label.new("Location:"), false)
+ hbox.pack_start(location_input = Entry.new)
+ location_input.width_chars = 60
+ location_input.text = @location || ''
+
+ dialog.vbox.pack_start(hbox, false)
+
+ dialog.signal_connect(:'key-press-event', &DEFAULT_DIALOG_KEY_PRESS_HANDLER)
+ dialog.show_all
+ dialog.run do |response|
+ if response == Dialog::RESPONSE_ACCEPT
+ return @location = location_input.text
+ end
+ end
+ return
+ ensure
+ dialog.destroy if dialog
+ end
+ end
+
+ class << self
+ # Starts a JSON Editor. If a block was given, it yields
+ # to the JSON::Editor::MainWindow instance.
+ def start(encoding = 'utf8') # :yield: window
+ Gtk.init
+ @window = Editor::MainWindow.new(encoding)
+ @window.icon_list = [ Editor.fetch_icon('json') ]
+ yield @window if block_given?
+ @window.show_all
+ Gtk.main
+ end
+
+ # Edit the string _json_ with encoding _encoding_ in the editor.
+ def edit(json, encoding = 'utf8')
+ start(encoding) do |window|
+ window.edit json
+ end
+ end
+
+ attr_reader :window
+ end
+ end
+end
diff --git a/lib/json/ext.rb b/lib/json/ext.rb
new file mode 100644
index 0000000..719e560
--- /dev/null
+++ b/lib/json/ext.rb
@@ -0,0 +1,15 @@
+require 'json/common'
+
+module JSON
+ # This module holds all the modules/classes that implement JSON's
+ # functionality as C extensions.
+ module Ext
+ require 'json/ext/parser'
+ require 'json/ext/generator'
+ $DEBUG and warn "Using c extension for JSON."
+ JSON.parser = Parser
+ JSON.generator = Generator
+ end
+
+ JSON_LOADED = true
+end
diff --git a/lib/json/ext/.keep b/lib/json/ext/.keep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/json/ext/.keep
diff --git a/lib/json/json.xpm b/lib/json/json.xpm
new file mode 100644
index 0000000..2cb626b
--- /dev/null
+++ b/lib/json/json.xpm
@@ -0,0 +1,1499 @@
+/* XPM */
+static char * json_xpm[] = {
+"64 64 1432 2",
+" c None",
+". c #641839",
+"+ c #CF163C",
+"@ c #D31C3B",
+"# c #E11A38",
+"$ c #5F242D",
+"% c #320C22",
+"& c #9B532D",
+"* c #F32E34",
+"= c #820F33",
+"- c #4B0F34",
+"; c #8E1237",
+"> c #944029",
+", c #961325",
+"' c #A00C24",
+") c #872C23",
+"! c #694021",
+"~ c #590D1F",
+"{ c #420528",
+"] c #D85A2D",
+"^ c #7E092B",
+"/ c #0E0925",
+"( c #0D081F",
+"_ c #0F081E",
+": c #12071F",
+"< c #360620",
+"[ c #682A21",
+"} c #673F21",
+"| c #780E21",
+"1 c #A82320",
+"2 c #8D1D1F",
+"3 c #970127",
+"4 c #0D0123",
+"5 c #0D0324",
+"6 c #3B1E28",
+"7 c #C28429",
+"8 c #0C0523",
+"9 c #0C041E",
+"0 c #0E031A",
+"a c #11031A",
+"b c #13031B",
+"c c #13031C",
+"d c #11031D",
+"e c #19051E",
+"f c #390E20",
+"g c #9C0C20",
+"h c #C00721",
+"i c #980320",
+"j c #14031E",
+"k c #CD9F32",
+"l c #C29F2E",
+"m c #0F0325",
+"n c #0D0321",
+"o c #0E0324",
+"p c #D08329",
+"q c #9D1B27",
+"r c #1C0320",
+"s c #0D011A",
+"t c #120117",
+"u c #130017",
+"v c #150018",
+"w c #160119",
+"x c #17021A",
+"y c #15021B",
+"z c #11021E",
+"A c #0F021F",
+"B c #8C1821",
+"C c #CF4522",
+"D c #831821",
+"E c #BA7033",
+"F c #EDB339",
+"G c #C89733",
+"H c #280727",
+"I c #0F051F",
+"J c #0E0420",
+"K c #591F27",
+"L c #E47129",
+"M c #612224",
+"N c #0C021D",
+"O c #120018",
+"P c #140017",
+"Q c #170017",
+"R c #190018",
+"S c #1B0019",
+"T c #1B011A",
+"U c #18011B",
+"V c #15011C",
+"W c #12031E",
+"X c #460A21",
+"Y c #A13823",
+"Z c #784323",
+"` c #5A0C21",
+" . c #BC4530",
+".. c #EB5B38",
+"+. c #CE4E3B",
+"@. c #DD9334",
+"#. c #751A27",
+"$. c #11071E",
+"%. c #0F041C",
+"&. c #1E0824",
+"*. c #955A28",
+"=. c #9A5027",
+"-. c #1E0321",
+";. c #11011A",
+">. c #140018",
+",. c #180018",
+"'. c #1F001A",
+"). c #20001B",
+"!. c #1E001A",
+"~. c #1B001A",
+"{. c #16021B",
+"]. c #16041E",
+"^. c #220622",
+"/. c #5F3525",
+"(. c #DE5724",
+"_. c #611021",
+":. c #0F0925",
+"<. c #D1892E",
+"[. c #F27036",
+"}. c #EC633B",
+"|. c #DA293C",
+"1. c #E64833",
+"2. c #912226",
+"3. c #11081C",
+"4. c #110419",
+"5. c #0F041E",
+"6. c #451425",
+"7. c #BF6F28",
+"8. c #332225",
+"9. c #0E021E",
+"0. c #13001B",
+"a. c #17001A",
+"b. c #1C001B",
+"c. c #21001C",
+"d. c #23001C",
+"e. c #21001B",
+"f. c #19021A",
+"g. c #17041E",
+"h. c #150721",
+"i. c #602424",
+"j. c #D51223",
+"k. c #540820",
+"l. c #D04D2D",
+"m. c #EA8933",
+"n. c #875637",
+"o. c #88543A",
+"p. c #E5923A",
+"q. c #891931",
+"r. c #130B25",
+"s. c #10051B",
+"t. c #110217",
+"u. c #12021A",
+"v. c #761826",
+"w. c #E2A728",
+"x. c #300224",
+"y. c #10011E",
+"z. c #16001B",
+"A. c #1B001B",
+"B. c #21001A",
+"C. c #1E0019",
+"D. c #1D0019",
+"E. c #1A011A",
+"F. c #17031C",
+"G. c #120720",
+"H. c #4E0822",
+"I. c #670721",
+"J. c #C07630",
+"K. c #F59734",
+"L. c #BE1B35",
+"M. c #0E1435",
+"N. c #522037",
+"O. c #DB8039",
+"P. c #D45933",
+"Q. c #420927",
+"R. c #0F041D",
+"S. c #140118",
+"T. c #13021D",
+"U. c #100423",
+"V. c #7B6227",
+"W. c #C04326",
+"X. c #0E0020",
+"Y. c #13001D",
+"Z. c #18001B",
+"`. c #1E001B",
+" + c #22001C",
+".+ c #22001B",
+"++ c #1B011B",
+"@+ c #16041D",
+"#+ c #130520",
+"$+ c #860521",
+"%+ c #710520",
+"&+ c #670A2A",
+"*+ c #A66431",
+"=+ c #E97536",
+"-+ c #F8833A",
+";+ c #F77A3A",
+">+ c #C45337",
+",+ c #0A1C35",
+"'+ c #993638",
+")+ c #F7863B",
+"!+ c #F49736",
+"~+ c #94462B",
+"{+ c #0E031F",
+"]+ c #130119",
+"^+ c #160018",
+"/+ c #16011B",
+"(+ c #15021F",
+"_+ c #120123",
+":+ c #A65C28",
+"<+ c #5C4D23",
+"[+ c #0F001F",
+"}+ c #14001D",
+"|+ c #1A001B",
+"1+ c #1F001B",
+"2+ c #24001D",
+"3+ c #25001D",
+"4+ c #24001C",
+"5+ c #1F001C",
+"6+ c #1A011C",
+"7+ c #16021E",
+"8+ c #3F0421",
+"9+ c #BC0522",
+"0+ c #1C041E",
+"a+ c #7F5531",
+"b+ c #E68A38",
+"c+ c #F8933E",
+"d+ c #FA7942",
+"e+ c #FB7543",
+"f+ c #FA6F41",
+"g+ c #F1793D",
+"h+ c #7D3B3A",
+"i+ c #28263B",
+"j+ c #D45441",
+"k+ c #F8A238",
+"l+ c #996B2D",
+"m+ c #0E0421",
+"n+ c #12011A",
+"o+ c #180019",
+"p+ c #17001C",
+"q+ c #12001F",
+"r+ c #4C2B2A",
+"s+ c #DB8130",
+"t+ c #540023",
+"u+ c #0F0120",
+"v+ c #16011C",
+"w+ c #22001D",
+"x+ c #25001F",
+"y+ c #26001F",
+"z+ c #25001E",
+"A+ c #24001E",
+"B+ c #1D001C",
+"C+ c #18011D",
+"D+ c #16031F",
+"E+ c #3C0522",
+"F+ c #9B0821",
+"G+ c #13041E",
+"H+ c #F6462E",
+"I+ c #E6AB37",
+"J+ c #E7A03E",
+"K+ c #FA9F44",
+"L+ c #FB8A48",
+"M+ c #FD7A4A",
+"N+ c #FD794A",
+"O+ c #FD7748",
+"P+ c #FD7E45",
+"Q+ c #FD8343",
+"R+ c #FB5D42",
+"S+ c #6E3A40",
+"T+ c #EE8A37",
+"U+ c #7E252B",
+"V+ c #100520",
+"W+ c #13011A",
+"X+ c #170019",
+"Y+ c #15001C",
+"Z+ c #0F0020",
+"`+ c #564427",
+" @ c #E0BA29",
+".@ c #5E2B25",
+"+@ c #10011F",
+"@@ c #17011C",
+"#@ c #1E001D",
+"$@ c #23001F",
+"%@ c #250020",
+"&@ c #24001F",
+"*@ c #23001E",
+"=@ c #21001E",
+"-@ c #1B001C",
+";@ c #17021D",
+">@ c #14041E",
+",@ c #AC0B25",
+"'@ c #5E1420",
+")@ c #F28635",
+"!@ c #C2733E",
+"~@ c #984C44",
+"{@ c #EA9148",
+"]@ c #FB844B",
+"^@ c #FD7E4C",
+"/@ c #FE7E4C",
+"(@ c #FE7E4B",
+"_@ c #FE7749",
+":@ c #FD7148",
+"<@ c #FB7D46",
+"[@ c #F89641",
+"}@ c #B95634",
+"|@ c #0D0927",
+"1@ c #11041D",
+"2@ c #150119",
+"3@ c #180017",
+"4@ c #16001A",
+"5@ c #13001E",
+"6@ c #110023",
+"7@ c #944C29",
+"8@ c #EE6229",
+"9@ c #3D0324",
+"0@ c #12021F",
+"a@ c #19011D",
+"b@ c #21001F",
+"c@ c #22001F",
+"d@ c #20001E",
+"e@ c #1F001D",
+"f@ c #1C001C",
+"g@ c #19011C",
+"h@ c #3D1621",
+"i@ c #B53622",
+"j@ c #31061F",
+"k@ c #841D34",
+"l@ c #F2703F",
+"m@ c #C14445",
+"n@ c #E67349",
+"o@ c #FB8E4B",
+"p@ c #FD834C",
+"q@ c #FE834D",
+"r@ c #FE834C",
+"s@ c #FE804C",
+"t@ c #FD814B",
+"u@ c #FB7D49",
+"v@ c #F79B43",
+"w@ c #AF1234",
+"x@ c #0D0625",
+"y@ c #13021C",
+"z@ c #1A0019",
+"A@ c #190019",
+"B@ c #410225",
+"C@ c #D39729",
+"D@ c #AA5927",
+"E@ c #0E0422",
+"F@ c #15021E",
+"G@ c #1A011D",
+"H@ c #1D001D",
+"I@ c #15031D",
+"J@ c #240820",
+"K@ c #A01023",
+"L@ c #670B21",
+"M@ c #3D0D33",
+"N@ c #E63C3E",
+"O@ c #EF7C45",
+"P@ c #F59048",
+"Q@ c #FB944A",
+"R@ c #FD904A",
+"S@ c #FE8E4B",
+"T@ c #FE854A",
+"U@ c #FE854B",
+"V@ c #FE884C",
+"W@ c #FC954B",
+"X@ c #F8AB45",
+"Y@ c #C37A35",
+"Z@ c #0D0425",
+"`@ c #13011B",
+" # c #170018",
+".# c #1A0018",
+"+# c #1C0019",
+"@# c #15001B",
+"## c #100120",
+"$# c #311F25",
+"%# c #E68E28",
+"&# c #7A1425",
+"*# c #130321",
+"=# c #17011E",
+"-# c #1A001D",
+";# c #19001B",
+"># c #16021C",
+",# c #130521",
+"'# c #6F3123",
+")# c #6D3022",
+"!# c #C89433",
+"~# c #EA7E3E",
+"{# c #DB2943",
+"]# c #EF7745",
+"^# c #FB8544",
+"/# c #FD9A43",
+"(# c #FE9941",
+"_# c #FE9D43",
+":# c #FEA548",
+"<# c #FEAE49",
+"[# c #FCB944",
+"}# c #CA9F35",
+"|# c #0E0225",
+"1# c #11001B",
+"2# c #160019",
+"3# c #12011B",
+"4# c #0F0220",
+"5# c #351D26",
+"6# c #D85B28",
+"7# c #6C0F26",
+"8# c #190121",
+"9# c #1B001E",
+"0# c #1A001C",
+"a# c #1D001B",
+"b# c #130220",
+"c# c #703A23",
+"d# c #713A23",
+"e# c #140327",
+"f# c #411B36",
+"g# c #C8713E",
+"h# c #7A3A3F",
+"i# c #CE2C3C",
+"j# c #E77338",
+"k# c #9C6535",
+"l# c #9C6233",
+"m# c #9C6332",
+"n# c #9C6A35",
+"o# c #C37D3C",
+"p# c #FEAC41",
+"q# c #FEC23E",
+"r# c #826330",
+"s# c #100122",
+"t# c #120019",
+"u# c #150017",
+"v# c #190017",
+"w# c #1B0018",
+"x# c #12001A",
+"y# c #10021F",
+"z# c #1A0326",
+"A# c #5F292A",
+"B# c #7B4E29",
+"C# c #3C0E25",
+"D# c #1A0020",
+"E# c #14021F",
+"F# c #723B23",
+"G# c #14001A",
+"H# c #58042A",
+"I# c #A28337",
+"J# c #C8813B",
+"K# c #B14B38",
+"L# c #761231",
+"M# c #5A132A",
+"N# c #0D0726",
+"O# c #0C0623",
+"P# c #0B0723",
+"Q# c #0B0A26",
+"R# c #321C2D",
+"S# c #C45B33",
+"T# c #FEBB33",
+"U# c #13052A",
+"V# c #13011F",
+"W# c #160017",
+"X# c #15001A",
+"Y# c #12001D",
+"Z# c #94062A",
+"`# c #630D2C",
+" $ c #85292B",
+".$ c #AA5E29",
+"+$ c #1F0123",
+"@$ c #19011F",
+"#$ c #1E001C",
+"$$ c #15031F",
+"%$ c #712122",
+"&$ c #712223",
+"*$ c #14011B",
+"=$ c #110321",
+"-$ c #AF0C2B",
+";$ c #E7D534",
+">$ c #EAC934",
+",$ c #84582D",
+"'$ c #1B0824",
+")$ c #11041E",
+"!$ c #10021B",
+"~$ c #100119",
+"{$ c #100218",
+"]$ c #0F041A",
+"^$ c #0E0720",
+"/$ c #2C1026",
+"($ c #D8A328",
+"_$ c #140322",
+":$ c #160016",
+"<$ c #14001F",
+"[$ c #120024",
+"}$ c #100128",
+"|$ c #3C032F",
+"1$ c #2C062E",
+"2$ c #29022B",
+"3$ c #A31D29",
+"4$ c #976A25",
+"5$ c #1A0321",
+"6$ c #17031E",
+"7$ c #1B021D",
+"8$ c #20001C",
+"9$ c #14041F",
+"0$ c #703422",
+"a$ c #6F3522",
+"b$ c #8D0328",
+"c$ c #920329",
+"d$ c #0F0326",
+"e$ c #100321",
+"f$ c #11021B",
+"g$ c #130117",
+"h$ c #140016",
+"i$ c #150015",
+"j$ c #140015",
+"k$ c #130116",
+"l$ c #120219",
+"m$ c #11031C",
+"n$ c #12031D",
+"o$ c #170016",
+"p$ c #160020",
+"q$ c #250029",
+"r$ c #670033",
+"s$ c #DCA238",
+"t$ c #F5C736",
+"u$ c #9A732E",
+"v$ c #110227",
+"w$ c #110324",
+"x$ c #811924",
+"y$ c #A04323",
+"z$ c #250721",
+"A$ c #1A041F",
+"B$ c #1E011D",
+"C$ c #1C011C",
+"D$ c #18031D",
+"E$ c #130721",
+"F$ c #6F3623",
+"G$ c #6B3622",
+"H$ c #1A001A",
+"I$ c #14011F",
+"J$ c #12011E",
+"K$ c #11011C",
+"L$ c #140117",
+"M$ c #170015",
+"N$ c #150016",
+"O$ c #120119",
+"P$ c #11011B",
+"Q$ c #11001A",
+"R$ c #130018",
+"S$ c #170118",
+"T$ c #170119",
+"U$ c #18021E",
+"V$ c #1A0126",
+"W$ c #6F2332",
+"X$ c #E5563B",
+"Y$ c #F1B83F",
+"Z$ c #F6CC38",
+"`$ c #9D7A2D",
+" % c #130123",
+".% c #130320",
+"+% c #2A0721",
+"@% c #B00E24",
+"#% c #7D0B23",
+"$% c #1F0522",
+"%% c #1E0220",
+"&% c #1D011E",
+"*% c #1A031E",
+"=% c #15051F",
+"-% c #241322",
+";% c #A32F23",
+">% c #670E21",
+",% c #1C001A",
+"'% c #19001A",
+")% c #180016",
+"!% c #160118",
+"~% c #140219",
+"{% c #11021C",
+"]% c #10021E",
+"^% c #0F011D",
+"/% c #170117",
+"(% c #160219",
+"_% c #17041D",
+":% c #190523",
+"<% c #8C042E",
+"[% c #B65838",
+"}% c #E9D73F",
+"|% c #EED43E",
+"1% c #D85538",
+"2% c #493129",
+"3% c #130120",
+"4% c #15021D",
+"5% c #330822",
+"6% c #8A0825",
+"7% c #3C0424",
+"8% c #1E0322",
+"9% c #1C0321",
+"0% c #180421",
+"a% c #130822",
+"b% c #AF2D24",
+"c% c #BC5623",
+"d% c #2F071F",
+"e% c #1A041C",
+"f% c #1C031C",
+"g% c #1D011C",
+"h% c #160117",
+"i% c #150419",
+"j% c #12081D",
+"k% c #0F0923",
+"l% c #A77027",
+"m% c #A60525",
+"n% c #11021A",
+"o% c #130218",
+"p% c #150319",
+"q% c #16061D",
+"r% c #180923",
+"s% c #9C1D2B",
+"t% c #A32636",
+"u% c #A66E3B",
+"v% c #4B2E3C",
+"w% c #412C36",
+"x% c #36012D",
+"y% c #140123",
+"z% c #17001E",
+"A% c #19011B",
+"B% c #1A0421",
+"C% c #340425",
+"D% c #9E0326",
+"E% c #1F0424",
+"F% c #1C0524",
+"G% c #180724",
+"H% c #A91024",
+"I% c #D55D24",
+"J% c #90071E",
+"K% c #3C051D",
+"L% c #1C021C",
+"M% c #1C011A",
+"N% c #1D001A",
+"O% c #160116",
+"P% c #150216",
+"Q% c #140217",
+"R% c #140618",
+"S% c #120D1D",
+"T% c #231925",
+"U% c #B16A2E",
+"V% c #FDAC34",
+"W% c #D58631",
+"X% c #280E2A",
+"Y% c #0D0A23",
+"Z% c #0F0920",
+"`% c #120C21",
+" & c #1F1026",
+".& c #A3352E",
+"+& c #EE9F36",
+"@& c #5D2A3C",
+"#& c #960D3C",
+"$& c #970638",
+"%& c #A00330",
+"&& c #4D0126",
+"*& c #1C001F",
+"=& c #280120",
+"-& c #290223",
+";& c #1F0425",
+">& c #260726",
+",& c #340A26",
+"'& c #850925",
+")& c #3A0823",
+"!& c #82071D",
+"~& c #5E071D",
+"{& c #18051C",
+"]& c #18021A",
+"^& c #190118",
+"/& c #160217",
+"(& c #150418",
+"_& c #130618",
+":& c #110718",
+"<& c #10081A",
+"[& c #110D1D",
+"}& c #291C24",
+"|& c #A73B2D",
+"1& c #FD6B36",
+"2& c #FD853C",
+"3& c #FD863B",
+"4& c #C24A35",
+"5& c #6B442F",
+"6& c #6D302D",
+"7& c #6E252E",
+"8& c #8E3B32",
+"9& c #DE7739",
+"0& c #F48E3F",
+"a& c #DD8D41",
+"b& c #854F3D",
+"c& c #7E2D35",
+"d& c #33082B",
+"e& c #1C0222",
+"f& c #20001F",
+"g& c #1F0222",
+"h& c #1A0524",
+"i& c #440C27",
+"j& c #BC1427",
+"k& c #20041B",
+"l& c #53061C",
+"m& c #25071B",
+"n& c #11061A",
+"o& c #130418",
+"p& c #140317",
+"q& c #150217",
+"r& c #160318",
+"s& c #12051B",
+"t& c #100C1D",
+"u& c #0E101E",
+"v& c #0C121F",
+"w& c #0C1321",
+"x& c #781725",
+"y& c #B25D2C",
+"z& c #FA6335",
+"A& c #FD633C",
+"B& c #FE6D42",
+"C& c #FE7C42",
+"D& c #FE813F",
+"E& c #FE873C",
+"F& c #FD743B",
+"G& c #FB683B",
+"H& c #FA7A3E",
+"I& c #F98242",
+"J& c #F97844",
+"K& c #F98943",
+"L& c #F79C3D",
+"M& c #A25133",
+"N& c #280B28",
+"O& c #1D021F",
+"P& c #1F011C",
+"Q& c #280321",
+"R& c #1C0724",
+"S& c #3F1C27",
+"T& c #D33C27",
+"U& c #0E061B",
+"V& c #0C091C",
+"W& c #0C0A1B",
+"X& c #0E091A",
+"Y& c #11081B",
+"Z& c #100A20",
+"`& c #0E0D23",
+" * c #551227",
+".* c #B21829",
+"+* c #C42329",
+"@* c #C62C29",
+"#* c #C55429",
+"$* c #E76F2B",
+"%* c #F14232",
+"&* c #F95E3A",
+"** c #FC6740",
+"=* c #FE6E45",
+"-* c #FE7246",
+";* c #FE7545",
+">* c #FE7744",
+",* c #FD7745",
+"'* c #FD7845",
+")* c #FD7847",
+"!* c #FD7948",
+"~* c #FD7B44",
+"{* c #FC7C3B",
+"]* c #6F3130",
+"^* c #140B24",
+"/* c #19031D",
+"(* c #1C011B",
+"_* c #5A011F",
+":* c #B70421",
+"<* c #380824",
+"[* c #3E2626",
+"}* c #9F5626",
+"|* c #13051E",
+"1* c #360A21",
+"2* c #361223",
+"3* c #371724",
+"4* c #381824",
+"5* c #3B1524",
+"6* c #3E1E26",
+"7* c #471A29",
+"8* c #DB252E",
+"9* c #ED2733",
+"0* c #EE5436",
+"a* c #F04237",
+"b* c #F33934",
+"c* c #F53D2F",
+"d* c #D7312B",
+"e* c #AF212B",
+"f* c #3A2C31",
+"g* c #F65F39",
+"h* c #FB6F41",
+"i* c #FD6D45",
+"j* c #FE7047",
+"k* c #FE7647",
+"l* c #FE7847",
+"m* c #FE7848",
+"n* c #FE7748",
+"o* c #FE7948",
+"p* c #FE7C48",
+"q* c #FE7C47",
+"r* c #FE7642",
+"s* c #FE7439",
+"t* c #6D332C",
+"u* c #100B21",
+"v* c #16031B",
+"w* c #2B001B",
+"x* c #22011F",
+"y* c #220521",
+"z* c #1B0A23",
+"A* c #421425",
+"B* c #951924",
+"C* c #381023",
+"D* c #E94028",
+"E* c #E7302B",
+"F* c #EF432D",
+"G* c #F4302E",
+"H* c #F32C30",
+"I* c #CB4432",
+"J* c #DD3235",
+"K* c #EF4B3A",
+"L* c #F0333E",
+"M* c #CC3D3F",
+"N* c #E4313C",
+"O* c #F34834",
+"P* c #D13E2C",
+"Q* c #431825",
+"R* c #0E1424",
+"S* c #3C202C",
+"T* c #F15537",
+"U* c #F97140",
+"V* c #FC6E45",
+"W* c #FE7547",
+"X* c #FE7947",
+"Y* c #FE7B48",
+"Z* c #FE7D48",
+"`* c #FE8047",
+" = c #FE7A42",
+".= c #FE7A38",
+"+= c #6D442B",
+"@= c #0F0B21",
+"#= c #15031A",
+"$= c #49001B",
+"%= c #2F001C",
+"&= c #21021E",
+"*= c #220620",
+"== c #1B0D23",
+"-= c #641625",
+";= c #951823",
+">= c #390F25",
+",= c #AC3A2A",
+"'= c #B6492E",
+")= c #ED7531",
+"!= c #F45A34",
+"~= c #F54C36",
+"{= c #C72D39",
+"]= c #DE283C",
+"^= c #F33B40",
+"/= c #F34142",
+"(= c #D0393F",
+"_= c #E72E39",
+":= c #DB3C2E",
+"<= c #461724",
+"[= c #0F0D1E",
+"}= c #140B1E",
+"|= c #341427",
+"1= c #CB4834",
+"2= c #F7743F",
+"3= c #FB7145",
+"4= c #FE7747",
+"5= c #FE7A47",
+"6= c #FF7B48",
+"7= c #FF7C48",
+"8= c #FE7F47",
+"9= c #FE8247",
+"0= c #FE8642",
+"a= c #FE8439",
+"b= c #6D442D",
+"c= c #0F0A21",
+"d= c #14031A",
+"e= c #20031D",
+"f= c #210821",
+"g= c #191024",
+"h= c #CC1C25",
+"i= c #961423",
+"j= c #2C162C",
+"k= c #BD242E",
+"l= c #EF2C31",
+"m= c #F54C34",
+"n= c #F34037",
+"o= c #F5353A",
+"p= c #F7413D",
+"q= c #F8423D",
+"r= c #F93A39",
+"s= c #F95731",
+"t= c #341425",
+"u= c #110A1D",
+"v= c #140619",
+"w= c #18051B",
+"x= c #200F26",
+"y= c #864833",
+"z= c #F8773F",
+"A= c #FC7445",
+"B= c #FF7E48",
+"C= c #FF7E49",
+"D= c #FF7D49",
+"E= c #FF7D48",
+"F= c #FE8347",
+"G= c #FE8743",
+"H= c #FE893B",
+"I= c #6E452F",
+"J= c #100E23",
+"K= c #14041A",
+"L= c #55041D",
+"M= c #540921",
+"N= c #161124",
+"O= c #CE6A25",
+"P= c #3F1129",
+"Q= c #170A29",
+"R= c #0F0F29",
+"S= c #15132B",
+"T= c #1E182D",
+"U= c #A82B3D",
+"V= c #CB6633",
+"W= c #CC6932",
+"X= c #CC3D2D",
+"Y= c #331225",
+"Z= c #0F091C",
+"`= c #120417",
+" - c #160216",
+".- c #190419",
+"+- c #210F26",
+"@- c #8C4934",
+"#- c #F97A40",
+"$- c #FC7545",
+"%- c #FF7B49",
+"&- c #FE7D46",
+"*- c #FE7E43",
+"=- c #FD7B3E",
+"-- c #FA6934",
+";- c #532328",
+">- c #130B1D",
+",- c #150519",
+"'- c #14041C",
+")- c #120920",
+"!- c #C43624",
+"~- c #A21E23",
+"{- c #F87C30",
+"]- c #C9302D",
+"^- c #300F2A",
+"/- c #591129",
+"(- c #171328",
+"_- c #171628",
+":- c #141829",
+"<- c #101A2B",
+"[- c #0F172B",
+"}- c #0F1226",
+"|- c #0E0C20",
+"1- c #100619",
+"2- c #140316",
+"3- c #19051B",
+"4- c #3C1428",
+"5- c #E04B36",
+"6- c #FA7B41",
+"7- c #FD7346",
+"8- c #FE7548",
+"9- c #FF7849",
+"0- c #FF7749",
+"a- c #FE7B47",
+"b- c #FE7945",
+"c- c #FC7740",
+"d- c #FA7E39",
+"e- c #C1432F",
+"f- c #131523",
+"g- c #130A1C",
+"h- c #420621",
+"i- c #D08423",
+"j- c #F87739",
+"k- c #C03D37",
+"l- c #962B34",
+"m- c #A14332",
+"n- c #E54B30",
+"o- c #9E3E2F",
+"p- c #7F262E",
+"q- c #922D2E",
+"r- c #9C4B2E",
+"s- c #65212C",
+"t- c #101628",
+"u- c #101022",
+"v- c #11091C",
+"w- c #130619",
+"x- c #160A1E",
+"y- c #43252C",
+"z- c #F66439",
+"A- c #FA6942",
+"B- c #FD6C47",
+"C- c #FE6E48",
+"D- c #FE6F48",
+"E- c #FE7049",
+"F- c #FE714A",
+"G- c #FE744A",
+"H- c #FE7846",
+"I- c #FD7243",
+"J- c #FC703E",
+"K- c #FA6C37",
+"L- c #81312B",
+"M- c #121123",
+"N- c #15071D",
+"O- c #16031A",
+"P- c #17021B",
+"Q- c #8F3D22",
+"R- c #F8393E",
+"S- c #E42A3D",
+"T- c #E7473B",
+"U- c #FB503B",
+"V- c #FB4F3A",
+"W- c #F95439",
+"X- c #ED4C38",
+"Y- c #F45938",
+"Z- c #FB6537",
+"`- c #EA5236",
+" ; c #CE6232",
+".; c #CD392C",
+"+; c #181425",
+"@; c #120F21",
+"#; c #130D20",
+"$; c #151225",
+"%; c #903431",
+"&; c #F8703D",
+"*; c #FB6344",
+"=; c #FD6748",
+"-; c #FE6849",
+";; c #FE6949",
+">; c #FE6A49",
+",; c #FE6C4A",
+"'; c #FE704A",
+"); c #FE734A",
+"!; c #FE7449",
+"~; c #FE7347",
+"{; c #FE7145",
+"]; c #FD6C42",
+"^; c #FD753D",
+"/; c #F36E35",
+"(; c #CB452C",
+"_; c #600D24",
+":; c #1C061F",
+"<; c #1E031F",
+"[; c #5B3821",
+"}; c #CE9822",
+"|; c #FA4341",
+"1; c #FB4341",
+"2; c #FC4541",
+"3; c #FC4542",
+"4; c #FC4143",
+"5; c #FC4D42",
+"6; c #FB5042",
+"7; c #FB5342",
+"8; c #FC5242",
+"9; c #FD4F40",
+"0; c #FD503E",
+"a; c #FB6339",
+"b; c #F45E33",
+"c; c #A12A2E",
+"d; c #401E2C",
+"e; c #452D2F",
+"f; c #F74F38",
+"g; c #FA5940",
+"h; c #FC6245",
+"i; c #FE6447",
+"j; c #FE6449",
+"k; c #FE6549",
+"l; c #FE6749",
+"m; c #FE6B49",
+"n; c #FE6D49",
+"o; c #FE6D48",
+"p; c #FE6D47",
+"q; c #FE6D45",
+"r; c #FE6C44",
+"s; c #FE6A42",
+"t; c #FE663C",
+"u; c #FC6233",
+"v; c #752129",
+"w; c #1F0922",
+"x; c #750520",
+"y; c #81061F",
+"z; c #FA3D42",
+"A; c #FB4142",
+"B; c #FD4543",
+"C; c #FD4844",
+"D; c #FD4A45",
+"E; c #FD4D45",
+"F; c #FD5045",
+"G; c #FD5345",
+"H; c #FE5346",
+"I; c #FE5445",
+"J; c #FD5444",
+"K; c #FC4F41",
+"L; c #FA513D",
+"M; c #F95339",
+"N; c #F63736",
+"O; c #F75737",
+"P; c #F95F3B",
+"Q; c #FB5840",
+"R; c #FD5F43",
+"S; c #FE6345",
+"T; c #FE6547",
+"U; c #FE6548",
+"V; c #FE6448",
+"W; c #FE6248",
+"X; c #FE6348",
+"Y; c #FE6748",
+"Z; c #FE6848",
+"`; c #FE6846",
+" > c #FE6A45",
+".> c #FE6D43",
+"+> c #FE703F",
+"@> c #FC6F36",
+"#> c #6F302B",
+"$> c #140A22",
+"%> c #FA3B42",
+"&> c #FC4243",
+"*> c #FD4744",
+"=> c #FE4A45",
+"-> c #FE4C47",
+";> c #FE4D47",
+">> c #FE5047",
+",> c #FE5347",
+"'> c #FE5447",
+")> c #FD5246",
+"!> c #FB503F",
+"~> c #FA543D",
+"{> c #9B3D3B",
+"]> c #A3433B",
+"^> c #F9683D",
+"/> c #FC6940",
+"(> c #FE6342",
+"_> c #FE6645",
+":> c #FE6646",
+"<> c #FE6147",
+"[> c #FE6048",
+"}> c #FE6148",
+"|> c #FE6746",
+"1> c #FE6A46",
+"2> c #FE6F45",
+"3> c #FE7441",
+"4> c #FC7D39",
+"5> c #6C422E",
+"6> c #0F0F23",
+"7> c #FA4142",
+"8> c #FC4643",
+"9> c #FE4D46",
+"0> c #FE4E47",
+"a> c #FE4F48",
+"b> c #FE5148",
+"c> c #FE5348",
+"d> c #FE5548",
+"e> c #FE5247",
+"f> c #FD5445",
+"g> c #FC5544",
+"h> c #F96041",
+"i> c #D33F3D",
+"j> c #392D39",
+"k> c #973C38",
+"l> c #F94E3A",
+"m> c #FD693E",
+"n> c #FE6C43",
+"o> c #FE6047",
+"p> c #FE5D47",
+"q> c #FE5E48",
+"r> c #FE6948",
+"s> c #FE6947",
+"t> c #FE6B47",
+"u> c #FE6E46",
+"v> c #FD6D43",
+"w> c #FB723D",
+"x> c #D54A33",
+"y> c #301C29",
+"z> c #FB4A42",
+"A> c #FD4B44",
+"B> c #FE4F47",
+"C> c #FE5048",
+"D> c #FE5648",
+"E> c #FE5848",
+"F> c #FE5747",
+"G> c #FE5547",
+"H> c #FC5945",
+"I> c #F95742",
+"J> c #F3543D",
+"K> c #A33336",
+"L> c #302032",
+"M> c #152433",
+"N> c #CD3E38",
+"O> c #FD5A3F",
+"P> c #FE6343",
+"Q> c #FE6446",
+"R> c #FE6247",
+"S> c #FE6A47",
+"T> c #FC6542",
+"U> c #FB6A3B",
+"V> c #FA6D34",
+"W> c #D73C2D",
+"X> c #442428",
+"Y> c #281323",
+"Z> c #FD4E42",
+"`> c #FD4D43",
+" , c #FE4D45",
+"., c #FE5248",
+"+, c #FE5947",
+"@, c #FE5C47",
+"#, c #FE5B47",
+"$, c #FE5A47",
+"%, c #FE5847",
+"&, c #FC5C45",
+"*, c #F95B43",
+"=, c #F3613F",
+"-, c #E74F37",
+";, c #8C2431",
+">, c #161E2F",
+",, c #CD4E33",
+"', c #FD503A",
+"), c #FE5D40",
+"!, c #FE6445",
+"~, c #FE6946",
+"{, c #FE6847",
+"], c #FE6747",
+"^, c #FD6644",
+"/, c #FD6241",
+"(, c #FD5B3D",
+"_, c #FE6739",
+":, c #FE6135",
+"<, c #AB4830",
+"[, c #733E2A",
+"}, c #161224",
+"|, c #FC4E42",
+"1, c #FE4D44",
+"2, c #FE4E46",
+"3, c #FE5147",
+"4, c #FE5E47",
+"5, c #FD5C46",
+"6, c #FA5B44",
+"7, c #F45441",
+"8, c #EB393A",
+"9, c #CC3433",
+"0, c #47212F",
+"a, c #59242F",
+"b, c #FC6734",
+"c, c #FC6F3A",
+"d, c #FC723E",
+"e, c #FD6540",
+"f, c #FE6442",
+"g, c #FE6643",
+"h, c #FE6944",
+"i, c #FE6546",
+"j, c #FE6444",
+"k, c #FE6143",
+"l, c #FE5E41",
+"m, c #FE613F",
+"n, c #FE683C",
+"o, c #FE7937",
+"p, c #A25030",
+"q, c #692629",
+"r, c #151122",
+"s, c #FA573F",
+"t, c #FB4D40",
+"u, c #FC4F43",
+"v, c #FE5246",
+"w, c #FF6347",
+"x, c #FE5F48",
+"y, c #F65942",
+"z, c #F0493D",
+"A, c #ED3736",
+"B, c #73262F",
+"C, c #10152C",
+"D, c #3B292F",
+"E, c #363034",
+"F, c #AC3938",
+"G, c #FC6B3B",
+"H, c #FD763C",
+"I, c #FE6D3F",
+"J, c #FE6341",
+"K, c #FE6642",
+"L, c #FE6745",
+"M, c #FE6245",
+"N, c #FE6244",
+"O, c #FE6841",
+"P, c #FF683B",
+"Q, c #EC7035",
+"R, c #D0412D",
+"S, c #3A1627",
+"T, c #CF3938",
+"U, c #F6543C",
+"V, c #FB5040",
+"W, c #FD5544",
+"X, c #FE5A48",
+"Y, c #FE5D48",
+"Z, c #FE5F47",
+"`, c #FF6147",
+" ' c #FD5C45",
+".' c #FB5B43",
+"+' c #FA5A42",
+"@' c #F76040",
+"#' c #F4623D",
+"$' c #F26D38",
+"%' c #EC4130",
+"&' c #380E2B",
+"*' c #13122C",
+"=' c #362D31",
+"-' c #353435",
+";' c #352E37",
+">' c #2D3337",
+",' c #CC5838",
+"'' c #CD6F3A",
+")' c #CE6E3D",
+"!' c #FE793F",
+"~' c #FD7541",
+"{' c #FD6243",
+"]' c #FE6545",
+"^' c #FF6543",
+"/' c #FF6240",
+"(' c #FE723B",
+"_' c #FE8034",
+":' c #442D2C",
+"<' c #311725",
+"[' c #222830",
+"}' c #B73B36",
+"|' c #F94C3D",
+"1' c #FD5543",
+"2' c #FE5B48",
+"3' c #FF5E47",
+"4' c #FE5C48",
+"5' c #FC5B44",
+"6' c #F95640",
+"7' c #C34E3D",
+"8' c #A45A3A",
+"9' c #F37438",
+"0' c #F28935",
+"a' c #AF422F",
+"b' c #240D2B",
+"c' c #88292F",
+"d' c #FA8E34",
+"e' c #FC7E38",
+"f' c #FC5939",
+"g' c #694A37",
+"h' c #693437",
+"i' c #382638",
+"j' c #142439",
+"k' c #9F483A",
+"l' c #C45E3C",
+"m' c #FD7240",
+"n' c #FF6645",
+"o' c #FF6245",
+"p' c #FF6045",
+"q' c #FF6146",
+"r' c #FF6246",
+"s' c #FF6446",
+"t' c #FF6545",
+"u' c #FE763F",
+"v' c #FE7237",
+"w' c #C65331",
+"x' c #3D272A",
+"y' c #0D1E2B",
+"z' c #683032",
+"A' c #F9453A",
+"B' c #FD5341",
+"C' c #FE5A46",
+"D' c #FF5A48",
+"E' c #FE5948",
+"F' c #FD5A47",
+"G' c #FC5D43",
+"H' c #F95B3D",
+"I' c #713F37",
+"J' c #1E2D32",
+"K' c #C44531",
+"L' c #EF7A2F",
+"M' c #6B2E2C",
+"N' c #0F0E2C",
+"O' c #F56633",
+"P' c #FA803A",
+"Q' c #FC673E",
+"R' c #FD673E",
+"S' c #FC6F3C",
+"T' c #FA6E3B",
+"U' c #C6633A",
+"V' c #A06739",
+"W' c #835638",
+"X' c #381F38",
+"Y' c #713B38",
+"Z' c #7B503C",
+"`' c #FE7741",
+" ) c #FE7344",
+".) c #FE6D46",
+"+) c #FF6946",
+"@) c #FF5E46",
+"#) c #FF5D46",
+"$) c #FF5D47",
+"%) c #FF5F48",
+"&) c #FF6248",
+"*) c #FE6941",
+"=) c #FC783C",
+"-) c #C46B35",
+";) c #892730",
+">) c #111629",
+",) c #1F2630",
+"') c #AD3939",
+")) c #FC5D41",
+"!) c #FE5946",
+"~) c #FF5848",
+"{) c #FE5549",
+"]) c #FC5E42",
+"^) c #FA673B",
+"/) c #DB7033",
+"() c #392E2B",
+"_) c #311A28",
+":) c #3C2127",
+"<) c #1D1027",
+"[) c #92102C",
+"}) c #F58336",
+"|) c #FA673E",
+"1) c #FD6642",
+"2) c #FD5A41",
+"3) c #FC6D41",
+"4) c #FC6D3F",
+"5) c #FD683E",
+"6) c #F38C39",
+"7) c #CE6535",
+"8) c #612E34",
+"9) c #1D2637",
+"0) c #71513E",
+"a) c #FF6847",
+"b) c #FF5F47",
+"c) c #FF5A46",
+"d) c #FF5847",
+"e) c #FF5748",
+"f) c #FF594A",
+"g) c #FF5E4B",
+"h) c #FE654C",
+"i) c #FE694B",
+"j) c #FE6B48",
+"k) c #FC6A43",
+"l) c #F7683E",
+"m) c #EC6E39",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + @ # $ % ",
+" & * = - ; > , ' ) ! ~ ",
+" { ] ^ / ( _ : < [ } | 1 2 ",
+" 3 4 5 6 7 8 9 0 a b c d e f g h i j ",
+" k l m n o p q r s t u v w x y z A B C D ",
+" E F G H I J K L M N O P Q R S T U V W X Y Z ` ",
+" ...+.@.#.$.%.&.*.=.-.;.>.,.S '.).!.~.{.].^./.(._. ",
+" :.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.!.S f.g.h.i.j.k. ",
+" l.m.n.o.p.q.r.s.t.u.J v.w.x.y.z.A.c.d.d.B.C.D.E.F.G.H.I. ",
+" J.K.L.M.N.O.P.Q.R.t S.T.U.V.W.X.Y.Z.`. +d.d..+B.'.++@+#+$+%+ ",
+" &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+d.2+3+4+d.5+6+7+8+9+0+ ",
+" a+b+c+d+e+f+g+h+i+j+k+l+m+n+^+o+p+q+r+s+t+u+v+b.w+x+y+z+A+w+B+C+D+E+F+G+ ",
+" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+Q ,.X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@#@-@;@>@,@'@ ",
+" )@!@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@R ,.4@5@6@7@8@9@0@a@#@b@c@=@d@e@f@g@>@h@i@j@ ",
+" k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@^+R S z@A@z.q+B@C@D@E@F@G@H@#@e@#@#@f@g@I@J@K@L@ ",
+" M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ #.#+#+#S A@@###$#%#&#*#=#-#f@B+B+B+f@;#>#,#'#)# ",
+" !#~#{#]#^#/#(#(#_#:#<#[#}#|#1#^+.#S +#+#z@2#3#4#5#6#7#8#9#0#A.B+B+a#A.@@b#c#d# ",
+" e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#.#w#S R ^+x#y#z#A#B#C#D#-#A.a#`.`.b.g@E#d#F# ",
+" G#0@H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#>.W#3@v#R R X+X#Y#s#Z#`# $.$+$@$g@f@5+5+#$6+$$%$&$ ",
+" *$=$-$;$>$,$'$)$!$~${$]$^$/$($_$*$u#:$Q 3@,.X+z.<$[$}$|$1$2$3$4$5$6$7$e@8$#$G@9$0$a$ ",
+" ,.4@E#b$c$d$e$f$g$h$i$j$k$l$m$n$`@>.:$o$3@,. #a.p$q$r$s$t$u$v$w$x$y$z$A$B$#@C$D$E$F$G$ ",
+" R S H$v+I$J$K$n+L$:$o$o$M$N$L$O$P$Q$R$N$o$3@S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>% ",
+" E.,%~.'%Z.4@v W#o$)%)%)%Q !%~%{%]%^%Q$u u#/%(%_%:%<%[%}%|%1%2%3%4%=%5%6%7%8%9%0%a%b%c%d% ",
+" e%f%g%a#,%,%z@R 3@3@3@)%Q h%i%j%k%l%m%{+n%o%p%q%r%s%t%u%v%w%x%y%z%A%*%B%C%D%E%F%G%H%I% ",
+" J%K%L%M%N%D.S v#)%)%O%P%Q%R%S%T%U%V%W%X%Y%Z%`% &.&+&@&#&$&%&&&*&f@a##@=&-&;&>&,&'&)& ",
+" !&~&{&]&^&.#w#^&/%/&(&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&e@1+5+e@f&g&h&i&j& ",
+" k&l&m&n&o&p&q&r&i%s&3.t&u&v&w&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&1+`.e@f&Q&R&S&T& ",
+" 0 U&V&W&X&<&Y&j%Z&`& *.*+*@*#*$*%*&***=*-*;*>*>*,*'*)*!*~*{*]*^*/*(*a#B+#@_*:*<*[*}* ",
+" |*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*E.w*d.e@x*y*z*A*B* ",
+" C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*l*X*o*o*Y*Z*`* =.=+=@=#='%$=%=e@&=*===-=;= ",
+" >=,='=)=!=~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=p*6=6=7=8=9=0=a=b=c=d=A@~.b.B+e=f=g=h=i= ",
+" j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=5=Z*B=C=D=E=8=F=G=H=I=J=K=S$R z@'%L=M=N=O= ",
+" P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-5=p*E=D=%-%-q*&-*-=---;->-,-/%3@^+'-)-!-~- ",
+" {-]-^-/-(-_-:-<-[-}-|-1-2- -3-4-5-6-7-8-n*m*9-0-9-o*a-b-c-d-e-f-g-(&h%w c h-i- ",
+" j-k-l-m-n-o-p-q-r-s-t-u-v-w-,-x-y-z-A-B-C-D-E-E-F-G-_@m*H-I-J-K-L-M-N-O-P-(+Q- ",
+" R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;-;;;>;,;';);!;~;{;];^;/;(;_;:;<;[;}; ",
+" |;1;2;3;4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;j;k;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y; ",
+" z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;k;Y;Z;`; >r;.>+>@>#>$> ",
+" %>&>*>=>->;>>>,>'>,>)>F;8;!>~>{>]>^>/>(>_>:>i;<>[>X;}>i;|>1>q;2>3>4>5>6> ",
+" 7>8>=>9>0>a>b>c>d>,>e>e>f>g>h>i>j>k>l>m>n>:>i;o>p>q>W;r>s>t>p;u>v>w>x>y> ",
+" z>A>9>0>B>C>c>D>E>F>G>G>F>H>I>J>K>L>M>N>O>P>Q>R>o>R>T;s>S>S>S>t>1>T>U>V>W>X>Y> ",
+" Z>`> ,9>B>.,D>+,@,#,$,%,$,&,*,=,-,;,>,,,',),P>!,!,_>~,t>s>{,],{,],^,/,(,_,:,<,[,}, ",
+" |,`>1,2,3,G>+,4,o>o>4,@,@,5,6,7,8,9,0,a,b,c,d,e,f,g,h, >~,|>T;T;T;i,j,k,l,m,n,o,p,q,r, ",
+" s,t,u,v,G>%,@,o>w,R>x,p>@,5,6,y,z,A,B,C,D,E,F,G,H,I,J,K,L,L,i,i;i;i;Q>S;M,N,P>O,P,Q,R,S, ",
+" T,U,V,W,%,X,Y,Z,`,[>q>@, '.'+'@'#'$'%'&'*'='-';'>',''')'!'~'{'N,i,:>_>]'M,M,Q>_>^'/'('_':'<' ",
+" ['}'|'1'$,X,2'p>3'4'2'@,5'6'7'8'9'0'a'b'c'd'e'f'g'h'i'j'k'l'd,m'g, > >n'o'p'q'r's't'.>u'v'w'x' ",
+" y'z'A'B'C'X,X,2'D'E'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'`' ).)+)r'@)#)$)%)&)l;1>*)=)-);) ",
+" >),)')))!)X,E'X,~){)d>!)])^)/)()_):)<)[)})|)1)f,2)3)4)5)6)7)8)9)0)*--*a)b)c)d)e)f)g)h)i)j)k)l)m) ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/lib/json/pure.rb b/lib/json/pure.rb
new file mode 100644
index 0000000..565ef0c
--- /dev/null
+++ b/lib/json/pure.rb
@@ -0,0 +1,77 @@
+require 'json/common'
+require 'json/pure/parser'
+require 'json/pure/generator'
+
+module JSON
+ begin
+ require 'iconv'
+ # An iconv instance to convert from UTF8 to UTF16 Big Endian.
+ UTF16toUTF8 = Iconv.new('utf-8', 'utf-16be') # :nodoc:
+ # An iconv instance to convert from UTF16 Big Endian to UTF8.
+ UTF8toUTF16 = Iconv.new('utf-16be', 'utf-8') # :nodoc:
+ UTF8toUTF16.iconv('no bom')
+ rescue LoadError
+ raise MissingUnicodeSupport,
+ "iconv couldn't be loaded, which is required for UTF-8/UTF-16 conversions"
+ rescue Errno::EINVAL, Iconv::InvalidEncoding
+ # Iconv doesn't support big endian utf-16. Let's try to hack this manually
+ # into the converters.
+ begin
+ old_verbose, $VERBSOSE = $VERBOSE, nil
+ # An iconv instance to convert from UTF8 to UTF16 Big Endian.
+ UTF16toUTF8 = Iconv.new('utf-8', 'utf-16') # :nodoc:
+ # An iconv instance to convert from UTF16 Big Endian to UTF8.
+ UTF8toUTF16 = Iconv.new('utf-16', 'utf-8') # :nodoc:
+ UTF8toUTF16.iconv('no bom')
+ if UTF8toUTF16.iconv("\xe2\x82\xac") == "\xac\x20"
+ swapper = Class.new do
+ def initialize(iconv) # :nodoc:
+ @iconv = iconv
+ end
+
+ def iconv(string) # :nodoc:
+ result = @iconv.iconv(string)
+ JSON.swap!(result)
+ end
+ end
+ UTF8toUTF16 = swapper.new(UTF8toUTF16) # :nodoc:
+ end
+ if UTF16toUTF8.iconv("\xac\x20") == "\xe2\x82\xac"
+ swapper = Class.new do
+ def initialize(iconv) # :nodoc:
+ @iconv = iconv
+ end
+
+ def iconv(string) # :nodoc:
+ string = JSON.swap!(string.dup)
+ @iconv.iconv(string)
+ end
+ end
+ UTF16toUTF8 = swapper.new(UTF16toUTF8) # :nodoc:
+ end
+ rescue Errno::EINVAL, Iconv::InvalidEncoding
+ raise MissingUnicodeSupport, "iconv doesn't seem to support UTF-8/UTF-16 conversions"
+ ensure
+ $VERBOSE = old_verbose
+ end
+ end
+
+ # Swap consecutive bytes of _string_ in place.
+ def self.swap!(string) # :nodoc:
+ 0.upto(string.size / 2) do |i|
+ break unless string[2 * i + 1]
+ string[2 * i], string[2 * i + 1] = string[2 * i + 1], string[2 * i]
+ end
+ string
+ end
+
+ # This module holds all the modules/classes that implement JSON's
+ # functionality in pure ruby.
+ module Pure
+ $DEBUG and warn "Using pure library for JSON."
+ JSON.parser = Parser
+ JSON.generator = Generator
+ end
+
+ JSON_LOADED = true
+end
diff --git a/lib/json/pure/generator.rb b/lib/json/pure/generator.rb
new file mode 100644
index 0000000..d51316e
--- /dev/null
+++ b/lib/json/pure/generator.rb
@@ -0,0 +1,429 @@
+module JSON
+ MAP = {
+ "\x0" => '\u0000',
+ "\x1" => '\u0001',
+ "\x2" => '\u0002',
+ "\x3" => '\u0003',
+ "\x4" => '\u0004',
+ "\x5" => '\u0005',
+ "\x6" => '\u0006',
+ "\x7" => '\u0007',
+ "\b" => '\b',
+ "\t" => '\t',
+ "\n" => '\n',
+ "\xb" => '\u000b',
+ "\f" => '\f',
+ "\r" => '\r',
+ "\xe" => '\u000e',
+ "\xf" => '\u000f',
+ "\x10" => '\u0010',
+ "\x11" => '\u0011',
+ "\x12" => '\u0012',
+ "\x13" => '\u0013',
+ "\x14" => '\u0014',
+ "\x15" => '\u0015',
+ "\x16" => '\u0016',
+ "\x17" => '\u0017',
+ "\x18" => '\u0018',
+ "\x19" => '\u0019',
+ "\x1a" => '\u001a',
+ "\x1b" => '\u001b',
+ "\x1c" => '\u001c',
+ "\x1d" => '\u001d',
+ "\x1e" => '\u001e',
+ "\x1f" => '\u001f',
+ '"' => '\"',
+ '\\' => '\\\\',
+ } # :nodoc:
+
+ # Convert a UTF8 encoded Ruby string _string_ to a JSON string, encoded with
+ # UTF16 big endian characters as \u????, and return it.
+ if String.method_defined?(:force_encoding)
+ def utf8_to_json(string) # :nodoc:
+ string = string.dup
+ string << '' # XXX workaround: avoid buffer sharing
+ string.force_encoding(Encoding::ASCII_8BIT)
+ string.gsub!(/["\\\x0-\x1f]/) { MAP[$&] }
+ string.gsub!(/(
+ (?:
+ [\xc2-\xdf][\x80-\xbf] |
+ [\xe0-\xef][\x80-\xbf]{2} |
+ [\xf0-\xf4][\x80-\xbf]{3}
+ )+ |
+ [\x80-\xc1\xf5-\xff] # invalid
+ )/nx) { |c|
+ c.size == 1 and raise GeneratorError, "invalid utf8 byte: '#{c}'"
+ s = JSON::UTF8toUTF16.iconv(c).unpack('H*')[0]
+ s.gsub!(/.{4}/n, '\\\\u\&')
+ }
+ string.force_encoding(Encoding::UTF_8)
+ string
+ rescue Iconv::Failure => e
+ raise GeneratorError, "Caught #{e.class}: #{e}"
+ end
+ else
+ def utf8_to_json(string) # :nodoc:
+ string = string.gsub(/["\\\x0-\x1f]/) { MAP[$&] }
+ string.gsub!(/(
+ (?:
+ [\xc2-\xdf][\x80-\xbf] |
+ [\xe0-\xef][\x80-\xbf]{2} |
+ [\xf0-\xf4][\x80-\xbf]{3}
+ )+ |
+ [\x80-\xc1\xf5-\xff] # invalid
+ )/nx) { |c|
+ c.size == 1 and raise GeneratorError, "invalid utf8 byte: '#{c}'"
+ s = JSON::UTF8toUTF16.iconv(c).unpack('H*')[0]
+ s.gsub!(/.{4}/n, '\\\\u\&')
+ }
+ string
+ rescue Iconv::Failure => e
+ raise GeneratorError, "Caught #{e.class}: #{e}"
+ end
+ end
+ module_function :utf8_to_json
+
+ module Pure
+ module Generator
+ # This class is used to create State instances, that are use to hold data
+ # while generating a JSON text from a a Ruby data structure.
+ class State
+ # Creates a State object from _opts_, which ought to be Hash to create
+ # a new State instance configured by _opts_, something else to create
+ # an unconfigured instance. If _opts_ is a State object, it is just
+ # returned.
+ def self.from_state(opts)
+ case opts
+ when self
+ opts
+ when Hash
+ new(opts)
+ else
+ new
+ end
+ end
+
+ # Instantiates a new State object, configured by _opts_.
+ #
+ # _opts_ can have the following keys:
+ #
+ # * *indent*: a string used to indent levels (default: ''),
+ # * *space*: a string that is put after, a : or , delimiter (default: ''),
+ # * *space_before*: a string that is put before a : pair delimiter (default: ''),
+ # * *object_nl*: a string that is put at the end of a JSON object (default: ''),
+ # * *array_nl*: a string that is put at the end of a JSON array (default: ''),
+ # * *check_circular*: true if checking for circular data structures
+ # should be done (the default), false otherwise.
+ # * *check_circular*: true if checking for circular data structures
+ # should be done, false (the default) otherwise.
+ # * *allow_nan*: true if NaN, Infinity, and -Infinity should be
+ # generated, otherwise an exception is thrown, if these values are
+ # encountered. This options defaults to false.
+ def initialize(opts = {})
+ @seen = {}
+ @indent = ''
+ @space = ''
+ @space_before = ''
+ @object_nl = ''
+ @array_nl = ''
+ @check_circular = true
+ @allow_nan = false
+ configure opts
+ end
+
+ # This string is used to indent levels in the JSON text.
+ attr_accessor :indent
+
+ # This string is used to insert a space between the tokens in a JSON
+ # string.
+ attr_accessor :space
+
+ # This string is used to insert a space before the ':' in JSON objects.
+ attr_accessor :space_before
+
+ # This string is put at the end of a line that holds a JSON object (or
+ # Hash).
+ attr_accessor :object_nl
+
+ # This string is put at the end of a line that holds a JSON array.
+ attr_accessor :array_nl
+
+ # This integer returns the maximum level of data structure nesting in
+ # the generated JSON, max_nesting = 0 if no maximum is checked.
+ attr_accessor :max_nesting
+
+ def check_max_nesting(depth) # :nodoc:
+ return if @max_nesting.zero?
+ current_nesting = depth + 1
+ current_nesting > @max_nesting and
+ raise NestingError, "nesting of #{current_nesting} is too deep"
+ end
+
+ # Returns true, if circular data structures should be checked,
+ # otherwise returns false.
+ def check_circular?
+ @check_circular
+ end
+
+ # Returns true if NaN, Infinity, and -Infinity should be considered as
+ # valid JSON and output.
+ def allow_nan?
+ @allow_nan
+ end
+
+ # Returns _true_, if _object_ was already seen during this generating
+ # run.
+ def seen?(object)
+ @seen.key?(object.__id__)
+ end
+
+ # Remember _object_, to find out if it was already encountered (if a
+ # cyclic data structure is if a cyclic data structure is rendered).
+ def remember(object)
+ @seen[object.__id__] = true
+ end
+
+ # Forget _object_ for this generating run.
+ def forget(object)
+ @seen.delete object.__id__
+ end
+
+ # Configure this State instance with the Hash _opts_, and return
+ # itself.
+ def configure(opts)
+ @indent = opts[:indent] if opts.key?(:indent)
+ @space = opts[:space] if opts.key?(:space)
+ @space_before = opts[:space_before] if opts.key?(:space_before)
+ @object_nl = opts[:object_nl] if opts.key?(:object_nl)
+ @array_nl = opts[:array_nl] if opts.key?(:array_nl)
+ @check_circular = !!opts[:check_circular] if opts.key?(:check_circular)
+ @allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan)
+ if !opts.key?(:max_nesting) # defaults to 19
+ @max_nesting = 19
+ elsif opts[:max_nesting]
+ @max_nesting = opts[:max_nesting]
+ else
+ @max_nesting = 0
+ end
+ self
+ end
+
+ # Returns the configuration instance variables as a hash, that can be
+ # passed to the configure method.
+ def to_h
+ result = {}
+ for iv in %w[indent space space_before object_nl array_nl check_circular allow_nan max_nesting]
+ result[iv.intern] = instance_variable_get("@#{iv}")
+ end
+ result
+ end
+ end
+
+ module GeneratorMethods
+ module Object
+ # Converts this object to a string (calling #to_s), converts
+ # it to a JSON string, and returns the result. This is a fallback, if no
+ # special method #to_json was defined for some object.
+ def to_json(*) to_s.to_json end
+ end
+
+ module Hash
+ # Returns a JSON string containing a JSON object, that is unparsed from
+ # this Hash instance.
+ # _state_ is a JSON::State object, that can also be used to configure the
+ # produced JSON string output further.
+ # _depth_ is used to find out nesting depth, to indent accordingly.
+ def to_json(state = nil, depth = 0, *)
+ if state
+ state = JSON.state.from_state(state)
+ state.check_max_nesting(depth)
+ json_check_circular(state) { json_transform(state, depth) }
+ else
+ json_transform(state, depth)
+ end
+ end
+
+ private
+
+ def json_check_circular(state)
+ if state and state.check_circular?
+ state.seen?(self) and raise JSON::CircularDatastructure,
+ "circular data structures not supported!"
+ state.remember self
+ end
+ yield
+ ensure
+ state and state.forget self
+ end
+
+ def json_shift(state, depth)
+ state and not state.object_nl.empty? or return ''
+ state.indent * depth
+ end
+
+ def json_transform(state, depth)
+ delim = ','
+ if state
+ delim << state.object_nl
+ result = '{'
+ result << state.object_nl
+ result << map { |key,value|
+ s = json_shift(state, depth + 1)
+ s << key.to_s.to_json(state, depth + 1)
+ s << state.space_before
+ s << ':'
+ s << state.space
+ s << value.to_json(state, depth + 1)
+ }.join(delim)
+ result << state.object_nl
+ result << json_shift(state, depth)
+ result << '}'
+ else
+ result = '{'
+ result << map { |key,value|
+ key.to_s.to_json << ':' << value.to_json
+ }.join(delim)
+ result << '}'
+ end
+ result
+ end
+ end
+
+ module Array
+ # Returns a JSON string containing a JSON array, that is unparsed from
+ # this Array instance.
+ # _state_ is a JSON::State object, that can also be used to configure the
+ # produced JSON string output further.
+ # _depth_ is used to find out nesting depth, to indent accordingly.
+ def to_json(state = nil, depth = 0, *)
+ if state
+ state = JSON.state.from_state(state)
+ state.check_max_nesting(depth)
+ json_check_circular(state) { json_transform(state, depth) }
+ else
+ json_transform(state, depth)
+ end
+ end
+
+ private
+
+ def json_check_circular(state)
+ if state and state.check_circular?
+ state.seen?(self) and raise JSON::CircularDatastructure,
+ "circular data structures not supported!"
+ state.remember self
+ end
+ yield
+ ensure
+ state and state.forget self
+ end
+
+ def json_shift(state, depth)
+ state and not state.array_nl.empty? or return ''
+ state.indent * depth
+ end
+
+ def json_transform(state, depth)
+ delim = ','
+ if state
+ delim << state.array_nl
+ result = '['
+ result << state.array_nl
+ result << map { |value|
+ json_shift(state, depth + 1) << value.to_json(state, depth + 1)
+ }.join(delim)
+ result << state.array_nl
+ result << json_shift(state, depth)
+ result << ']'
+ else
+ '[' << map { |value| value.to_json }.join(delim) << ']'
+ end
+ end
+ end
+
+ module Integer
+ # Returns a JSON string representation for this Integer number.
+ def to_json(*) to_s end
+ end
+
+ module Float
+ # Returns a JSON string representation for this Float number.
+ def to_json(state = nil, *)
+ case
+ when infinite?
+ if !state || state.allow_nan?
+ to_s
+ else
+ raise GeneratorError, "#{self} not allowed in JSON"
+ end
+ when nan?
+ if !state || state.allow_nan?
+ to_s
+ else
+ raise GeneratorError, "#{self} not allowed in JSON"
+ end
+ else
+ to_s
+ end
+ end
+ end
+
+ module String
+ # This string should be encoded with UTF-8 A call to this method
+ # returns a JSON string encoded with UTF16 big endian characters as
+ # \u????.
+ def to_json(*)
+ '"' << JSON.utf8_to_json(self) << '"'
+ end
+
+ # Module that holds the extinding methods if, the String module is
+ # included.
+ module Extend
+ # Raw Strings are JSON Objects (the raw bytes are stored in an array for the
+ # key "raw"). The Ruby String can be created by this module method.
+ def json_create(o)
+ o['raw'].pack('C*')
+ end
+ end
+
+ # Extends _modul_ with the String::Extend module.
+ def self.included(modul)
+ modul.extend Extend
+ end
+
+ # This method creates a raw object hash, that can be nested into
+ # other data structures and will be unparsed as a raw string. This
+ # method should be used, if you want to convert raw strings to JSON
+ # instead of UTF-8 strings, e. g. binary data.
+ def to_json_raw_object
+ {
+ JSON.create_id => self.class.name,
+ 'raw' => self.unpack('C*'),
+ }
+ end
+
+ # This method creates a JSON text from the result of
+ # a call to to_json_raw_object of this String.
+ def to_json_raw(*args)
+ to_json_raw_object.to_json(*args)
+ end
+ end
+
+ module TrueClass
+ # Returns a JSON string for true: 'true'.
+ def to_json(*) 'true' end
+ end
+
+ module FalseClass
+ # Returns a JSON string for false: 'false'.
+ def to_json(*) 'false' end
+ end
+
+ module NilClass
+ # Returns a JSON string for nil: 'null'.
+ def to_json(*) 'null' end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/json/pure/parser.rb b/lib/json/pure/parser.rb
new file mode 100644
index 0000000..7e8fe08
--- /dev/null
+++ b/lib/json/pure/parser.rb
@@ -0,0 +1,269 @@
+require 'strscan'
+
+module JSON
+ module Pure
+ # This class implements the JSON parser that is used to parse a JSON string
+ # into a Ruby data structure.
+ class Parser < StringScanner
+ STRING = /" ((?:[^\x0-\x1f"\\] |
+ # escaped special characters:
+ \\["\\\/bfnrt] |
+ \\u[0-9a-fA-F]{4} |
+ # match all but escaped special characters:
+ \\[\x20-\x21\x23-\x2e\x30-\x5b\x5d-\x61\x63-\x65\x67-\x6d\x6f-\x71\x73\x75-\xff])*)
+ "/nx
+ INTEGER = /(-?0|-?[1-9]\d*)/
+ FLOAT = /(-?
+ (?:0|[1-9]\d*)
+ (?:
+ \.\d+(?i:e[+-]?\d+) |
+ \.\d+ |
+ (?i:e[+-]?\d+)
+ )
+ )/x
+ NAN = /NaN/
+ INFINITY = /Infinity/
+ MINUS_INFINITY = /-Infinity/
+ OBJECT_OPEN = /\{/
+ OBJECT_CLOSE = /\}/
+ ARRAY_OPEN = /\[/
+ ARRAY_CLOSE = /\]/
+ PAIR_DELIMITER = /:/
+ COLLECTION_DELIMITER = /,/
+ TRUE = /true/
+ FALSE = /false/
+ NULL = /null/
+ IGNORE = %r(
+ (?:
+ //[^\n\r]*[\n\r]| # line comments
+ /\* # c-style comments
+ (?:
+ [^*/]| # normal chars
+ /[^*]| # slashes that do not start a nested comment
+ \*[^/]| # asterisks that do not end this comment
+ /(?=\*/) # single slash before this comment's end
+ )*
+ \*/ # the End of this comment
+ |[ \t\r\n]+ # whitespaces: space, horicontal tab, lf, cr
+ )+
+ )mx
+
+ UNPARSED = Object.new
+
+ # Creates a new JSON::Pure::Parser instance for the string _source_.
+ #
+ # It will be configured by the _opts_ hash. _opts_ can have the following
+ # keys:
+ # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
+ # structures. Disable depth checking with :max_nesting => false|nil|0,
+ # it defaults to 19.
+ # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
+ # defiance of RFC 4627 to be parsed by the Parser. This option defaults
+ # to false.
+ # * *create_additions*: If set to false, the Parser doesn't create
+ # additions even if a matchin class and create_id was found. This option
+ # defaults to true.
+ # * *object_class*: Defaults to Hash
+ # * *array_class*: Defaults to Array
+ def initialize(source, opts = {})
+ super
+ if !opts.key?(:max_nesting) # defaults to 19
+ @max_nesting = 19
+ elsif opts[:max_nesting]
+ @max_nesting = opts[:max_nesting]
+ else
+ @max_nesting = 0
+ end
+ @allow_nan = !!opts[:allow_nan]
+ ca = true
+ ca = opts[:create_additions] if opts.key?(:create_additions)
+ @create_id = ca ? JSON.create_id : nil
+ @object_class = opts[:object_class] || Hash
+ @array_class = opts[:array_class] || Array
+ end
+
+ alias source string
+
+ # Parses the current JSON string _source_ and returns the complete data
+ # structure as a result.
+ def parse
+ reset
+ obj = nil
+ until eos?
+ case
+ when scan(OBJECT_OPEN)
+ obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
+ @current_nesting = 1
+ obj = parse_object
+ when scan(ARRAY_OPEN)
+ obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
+ @current_nesting = 1
+ obj = parse_array
+ when skip(IGNORE)
+ ;
+ else
+ raise ParserError, "source '#{peek(20)}' not in JSON!"
+ end
+ end
+ obj or raise ParserError, "source did not contain any JSON!"
+ obj
+ end
+
+ private
+
+ # Unescape characters in strings.
+ UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
+ UNESCAPE_MAP.update({
+ ?" => '"',
+ ?\\ => '\\',
+ ?/ => '/',
+ ?b => "\b",
+ ?f => "\f",
+ ?n => "\n",
+ ?r => "\r",
+ ?t => "\t",
+ ?u => nil,
+ })
+
+ def parse_string
+ if scan(STRING)
+ return '' if self[1].empty?
+ string = self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c|
+ if u = UNESCAPE_MAP[$&[1]]
+ u
+ else # \uXXXX
+ bytes = ''
+ i = 0
+ while c[6 * i] == ?\\ && c[6 * i + 1] == ?u
+ bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16)
+ i += 1
+ end
+ JSON::UTF16toUTF8.iconv(bytes)
+ end
+ end
+ if string.respond_to?(:force_encoding)
+ string.force_encoding(Encoding::UTF_8)
+ end
+ string
+ else
+ UNPARSED
+ end
+ rescue Iconv::Failure => e
+ raise GeneratorError, "Caught #{e.class}: #{e}"
+ end
+
+ def parse_value
+ case
+ when scan(FLOAT)
+ Float(self[1])
+ when scan(INTEGER)
+ Integer(self[1])
+ when scan(TRUE)
+ true
+ when scan(FALSE)
+ false
+ when scan(NULL)
+ nil
+ when (string = parse_string) != UNPARSED
+ string
+ when scan(ARRAY_OPEN)
+ @current_nesting += 1
+ ary = parse_array
+ @current_nesting -= 1
+ ary
+ when scan(OBJECT_OPEN)
+ @current_nesting += 1
+ obj = parse_object
+ @current_nesting -= 1
+ obj
+ when @allow_nan && scan(NAN)
+ NaN
+ when @allow_nan && scan(INFINITY)
+ Infinity
+ when @allow_nan && scan(MINUS_INFINITY)
+ MinusInfinity
+ else
+ UNPARSED
+ end
+ end
+
+ def parse_array
+ raise NestingError, "nesting of #@current_nesting is too deep" if
+ @max_nesting.nonzero? && @current_nesting > @max_nesting
+ result = @array_class.new
+ delim = false
+ until eos?
+ case
+ when (value = parse_value) != UNPARSED
+ delim = false
+ result << value
+ skip(IGNORE)
+ if scan(COLLECTION_DELIMITER)
+ delim = true
+ elsif match?(ARRAY_CLOSE)
+ ;
+ else
+ raise ParserError, "expected ',' or ']' in array at '#{peek(20)}'!"
+ end
+ when scan(ARRAY_CLOSE)
+ if delim
+ raise ParserError, "expected next element in array at '#{peek(20)}'!"
+ end
+ break
+ when skip(IGNORE)
+ ;
+ else
+ raise ParserError, "unexpected token in array at '#{peek(20)}'!"
+ end
+ end
+ result
+ end
+
+ def parse_object
+ raise NestingError, "nesting of #@current_nesting is too deep" if
+ @max_nesting.nonzero? && @current_nesting > @max_nesting
+ result = @object_class.new
+ delim = false
+ until eos?
+ case
+ when (string = parse_string) != UNPARSED
+ skip(IGNORE)
+ unless scan(PAIR_DELIMITER)
+ raise ParserError, "expected ':' in object at '#{peek(20)}'!"
+ end
+ skip(IGNORE)
+ unless (value = parse_value).equal? UNPARSED
+ result[string] = value
+ delim = false
+ skip(IGNORE)
+ if scan(COLLECTION_DELIMITER)
+ delim = true
+ elsif match?(OBJECT_CLOSE)
+ ;
+ else
+ raise ParserError, "expected ',' or '}' in object at '#{peek(20)}'!"
+ end
+ else
+ raise ParserError, "expected value in object at '#{peek(20)}'!"
+ end
+ when scan(OBJECT_CLOSE)
+ if delim
+ raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!"
+ end
+ if @create_id and klassname = result[@create_id]
+ klass = JSON.deep_const_get klassname
+ break unless klass and klass.json_creatable?
+ result = klass.json_create(result)
+ end
+ break
+ when skip(IGNORE)
+ ;
+ else
+ raise ParserError, "unexpected token in object at '#{peek(20)}'!"
+ end
+ end
+ result
+ end
+ end
+ end
+end
diff --git a/lib/json/version.rb b/lib/json/version.rb
new file mode 100644
index 0000000..28bea76
--- /dev/null
+++ b/lib/json/version.rb
@@ -0,0 +1,8 @@
+module JSON
+ # JSON version
+ VERSION = '1.1.8'
+ VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
+end
diff --git a/tests/fixtures/fail1.json b/tests/fixtures/fail1.json
new file mode 100644
index 0000000..6216b86
--- /dev/null
+++ b/tests/fixtures/fail1.json
@@ -0,0 +1 @@
+"A JSON payload should be an object or array, not a string." \ No newline at end of file
diff --git a/tests/fixtures/fail10.json b/tests/fixtures/fail10.json
new file mode 100644
index 0000000..5d8c004
--- /dev/null
+++ b/tests/fixtures/fail10.json
@@ -0,0 +1 @@
+{"Extra value after close": true} "misplaced quoted value" \ No newline at end of file
diff --git a/tests/fixtures/fail11.json b/tests/fixtures/fail11.json
new file mode 100644
index 0000000..76eb95b
--- /dev/null
+++ b/tests/fixtures/fail11.json
@@ -0,0 +1 @@
+{"Illegal expression": 1 + 2} \ No newline at end of file
diff --git a/tests/fixtures/fail12.json b/tests/fixtures/fail12.json
new file mode 100644
index 0000000..77580a4
--- /dev/null
+++ b/tests/fixtures/fail12.json
@@ -0,0 +1 @@
+{"Illegal invocation": alert()} \ No newline at end of file
diff --git a/tests/fixtures/fail13.json b/tests/fixtures/fail13.json
new file mode 100644
index 0000000..379406b
--- /dev/null
+++ b/tests/fixtures/fail13.json
@@ -0,0 +1 @@
+{"Numbers cannot have leading zeroes": 013} \ No newline at end of file
diff --git a/tests/fixtures/fail14.json b/tests/fixtures/fail14.json
new file mode 100644
index 0000000..0ed366b
--- /dev/null
+++ b/tests/fixtures/fail14.json
@@ -0,0 +1 @@
+{"Numbers cannot be hex": 0x14} \ No newline at end of file
diff --git a/tests/fixtures/fail18.json b/tests/fixtures/fail18.json
new file mode 100644
index 0000000..e2d130c
--- /dev/null
+++ b/tests/fixtures/fail18.json
@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
diff --git a/tests/fixtures/fail19.json b/tests/fixtures/fail19.json
new file mode 100644
index 0000000..3b9c46f
--- /dev/null
+++ b/tests/fixtures/fail19.json
@@ -0,0 +1 @@
+{"Missing colon" null} \ No newline at end of file
diff --git a/tests/fixtures/fail2.json b/tests/fixtures/fail2.json
new file mode 100644
index 0000000..6b7c11e
--- /dev/null
+++ b/tests/fixtures/fail2.json
@@ -0,0 +1 @@
+["Unclosed array" \ No newline at end of file
diff --git a/tests/fixtures/fail20.json b/tests/fixtures/fail20.json
new file mode 100644
index 0000000..27c1af3
--- /dev/null
+++ b/tests/fixtures/fail20.json
@@ -0,0 +1 @@
+{"Double colon":: null} \ No newline at end of file
diff --git a/tests/fixtures/fail21.json b/tests/fixtures/fail21.json
new file mode 100644
index 0000000..6247457
--- /dev/null
+++ b/tests/fixtures/fail21.json
@@ -0,0 +1 @@
+{"Comma instead of colon", null} \ No newline at end of file
diff --git a/tests/fixtures/fail22.json b/tests/fixtures/fail22.json
new file mode 100644
index 0000000..a775258
--- /dev/null
+++ b/tests/fixtures/fail22.json
@@ -0,0 +1 @@
+["Colon instead of comma": false] \ No newline at end of file
diff --git a/tests/fixtures/fail23.json b/tests/fixtures/fail23.json
new file mode 100644
index 0000000..494add1
--- /dev/null
+++ b/tests/fixtures/fail23.json
@@ -0,0 +1 @@
+["Bad value", truth] \ No newline at end of file
diff --git a/tests/fixtures/fail24.json b/tests/fixtures/fail24.json
new file mode 100644
index 0000000..caff239
--- /dev/null
+++ b/tests/fixtures/fail24.json
@@ -0,0 +1 @@
+['single quote'] \ No newline at end of file
diff --git a/tests/fixtures/fail25.json b/tests/fixtures/fail25.json
new file mode 100644
index 0000000..2dfbd25
--- /dev/null
+++ b/tests/fixtures/fail25.json
@@ -0,0 +1 @@
+["tab character in string "]
diff --git a/tests/fixtures/fail27.json b/tests/fixtures/fail27.json
new file mode 100644
index 0000000..6b01a2c
--- /dev/null
+++ b/tests/fixtures/fail27.json
@@ -0,0 +1,2 @@
+["line
+break"] \ No newline at end of file
diff --git a/tests/fixtures/fail28.json b/tests/fixtures/fail28.json
new file mode 100644
index 0000000..621a010
--- /dev/null
+++ b/tests/fixtures/fail28.json
@@ -0,0 +1,2 @@
+["line\
+break"] \ No newline at end of file
diff --git a/tests/fixtures/fail3.json b/tests/fixtures/fail3.json
new file mode 100644
index 0000000..168c81e
--- /dev/null
+++ b/tests/fixtures/fail3.json
@@ -0,0 +1 @@
+{unquoted_key: "keys must be quoted"} \ No newline at end of file
diff --git a/tests/fixtures/fail4.json b/tests/fixtures/fail4.json
new file mode 100644
index 0000000..9de168b
--- /dev/null
+++ b/tests/fixtures/fail4.json
@@ -0,0 +1 @@
+["extra comma",] \ No newline at end of file
diff --git a/tests/fixtures/fail5.json b/tests/fixtures/fail5.json
new file mode 100644
index 0000000..ddf3ce3
--- /dev/null
+++ b/tests/fixtures/fail5.json
@@ -0,0 +1 @@
+["double extra comma",,] \ No newline at end of file
diff --git a/tests/fixtures/fail6.json b/tests/fixtures/fail6.json
new file mode 100644
index 0000000..ed91580
--- /dev/null
+++ b/tests/fixtures/fail6.json
@@ -0,0 +1 @@
+[ , "<-- missing value"] \ No newline at end of file
diff --git a/tests/fixtures/fail7.json b/tests/fixtures/fail7.json
new file mode 100644
index 0000000..8a96af3
--- /dev/null
+++ b/tests/fixtures/fail7.json
@@ -0,0 +1 @@
+["Comma after the close"], \ No newline at end of file
diff --git a/tests/fixtures/fail8.json b/tests/fixtures/fail8.json
new file mode 100644
index 0000000..b28479c
--- /dev/null
+++ b/tests/fixtures/fail8.json
@@ -0,0 +1 @@
+["Extra close"]] \ No newline at end of file
diff --git a/tests/fixtures/fail9.json b/tests/fixtures/fail9.json
new file mode 100644
index 0000000..5815574
--- /dev/null
+++ b/tests/fixtures/fail9.json
@@ -0,0 +1 @@
+{"Extra comma": true,} \ No newline at end of file
diff --git a/tests/fixtures/pass1.json b/tests/fixtures/pass1.json
new file mode 100644
index 0000000..7828fcc
--- /dev/null
+++ b/tests/fixtures/pass1.json
@@ -0,0 +1,56 @@
+[
+ "JSON Test Pattern pass1",
+ {"object with 1 member":["array with 1 element"]},
+ {},
+ [],
+ -42,
+ true,
+ false,
+ null,
+ {
+ "integer": 1234567890,
+ "real": -9876.543210,
+ "e": 0.123456789e-12,
+ "E": 1.234567890E+34,
+ "": 23456789012E666,
+ "zero": 0,
+ "one": 1,
+ "space": " ",
+ "quote": "\"",
+ "backslash": "\\",
+ "controls": "\b\f\n\r\t",
+ "slash": "/ & \/",
+ "alpha": "abcdefghijklmnopqrstuvwyz",
+ "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+ "digit": "0123456789",
+ "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
+ "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+ "true": true,
+ "false": false,
+ "null": null,
+ "array":[ ],
+ "object":{ },
+ "address": "50 St. James Street",
+ "url": "http://www.JSON.org/",
+ "comment": "// /* <!-- --",
+ "# -- --> */": " ",
+ " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5 , 6 ,7 ],
+ "compact": [1,2,3,4,5,6,7],
+ "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+ "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
+ "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+ },
+ 0.5 ,98.6
+,
+99.44
+,
+
+1066
+
+
+,"rosebud"] \ No newline at end of file
diff --git a/tests/fixtures/pass15.json b/tests/fixtures/pass15.json
new file mode 100644
index 0000000..fc8376b
--- /dev/null
+++ b/tests/fixtures/pass15.json
@@ -0,0 +1 @@
+["Illegal backslash escape: \x15"] \ No newline at end of file
diff --git a/tests/fixtures/pass16.json b/tests/fixtures/pass16.json
new file mode 100644
index 0000000..c43ae3c
--- /dev/null
+++ b/tests/fixtures/pass16.json
@@ -0,0 +1 @@
+["Illegal backslash escape: \'"] \ No newline at end of file
diff --git a/tests/fixtures/pass17.json b/tests/fixtures/pass17.json
new file mode 100644
index 0000000..62b9214
--- /dev/null
+++ b/tests/fixtures/pass17.json
@@ -0,0 +1 @@
+["Illegal backslash escape: \017"] \ No newline at end of file
diff --git a/tests/fixtures/pass2.json b/tests/fixtures/pass2.json
new file mode 100644
index 0000000..d3c63c7
--- /dev/null
+++ b/tests/fixtures/pass2.json
@@ -0,0 +1 @@
+[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]] \ No newline at end of file
diff --git a/tests/fixtures/pass26.json b/tests/fixtures/pass26.json
new file mode 100644
index 0000000..845d26a
--- /dev/null
+++ b/tests/fixtures/pass26.json
@@ -0,0 +1 @@
+["tab\ character\ in\ string\ "] \ No newline at end of file
diff --git a/tests/fixtures/pass3.json b/tests/fixtures/pass3.json
new file mode 100644
index 0000000..4528d51
--- /dev/null
+++ b/tests/fixtures/pass3.json
@@ -0,0 +1,6 @@
+{
+ "JSON Test Pattern pass3": {
+ "The outermost value": "must be an object or array.",
+ "In this test": "It is an object."
+ }
+}
diff --git a/tests/test_json.rb b/tests/test_json.rb
new file mode 100755
index 0000000..5307609
--- /dev/null
+++ b/tests/test_json.rb
@@ -0,0 +1,312 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+case ENV['JSON']
+when 'pure' then require 'json/pure'
+when 'ext' then require 'json/ext'
+else require 'json'
+end
+require 'stringio'
+
+class TC_JSON < Test::Unit::TestCase
+ include JSON
+
+ def setup
+ @ary = [1, "foo", 3.14, 4711.0, 2.718, nil, [1,-2,3], false, true].map do
+ |x| [x]
+ end
+ @ary_to_parse = ["1", '"foo"', "3.14", "4711.0", "2.718", "null",
+ "[1,-2,3]", "false", "true"].map do
+ |x| "[#{x}]"
+ end
+ @hash = {
+ 'a' => 2,
+ 'b' => 3.141,
+ 'c' => 'c',
+ 'd' => [ 1, "b", 3.14 ],
+ 'e' => { 'foo' => 'bar' },
+ 'g' => "\"\0\037",
+ 'h' => 1000.0,
+ 'i' => 0.001
+ }
+ @json = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},'\
+ '"g":"\\"\\u0000\\u001f","h":1.0E3,"i":1.0E-3}'
+ end
+
+ def test_construction
+ parser = JSON::Parser.new('test')
+ assert_equal 'test', parser.source
+ end
+
+ def assert_equal_float(expected, is)
+ assert_in_delta(expected.first, is.first, 1e-2)
+ end
+
+ def test_parse_simple_arrays
+ assert_equal([], parse('[]'))
+ assert_equal([], parse(' [ ] '))
+ assert_equal([nil], parse('[null]'))
+ assert_equal([false], parse('[false]'))
+ assert_equal([true], parse('[true]'))
+ assert_equal([-23], parse('[-23]'))
+ assert_equal([23], parse('[23]'))
+ assert_equal([0.23], parse('[0.23]'))
+ assert_equal([0.0], parse('[0e0]'))
+ assert_raises(JSON::ParserError) { parse('[+23.2]') }
+ assert_raises(JSON::ParserError) { parse('[+23]') }
+ assert_raises(JSON::ParserError) { parse('[.23]') }
+ assert_raises(JSON::ParserError) { parse('[023]') }
+ assert_equal_float [3.141], parse('[3.141]')
+ assert_equal_float [-3.141], parse('[-3.141]')
+ assert_equal_float [3.141], parse('[3141e-3]')
+ assert_equal_float [3.141], parse('[3141.1e-3]')
+ assert_equal_float [3.141], parse('[3141E-3]')
+ assert_equal_float [3.141], parse('[3141.0E-3]')
+ assert_equal_float [-3.141], parse('[-3141.0e-3]')
+ assert_equal_float [-3.141], parse('[-3141e-3]')
+ assert_raises(ParserError) { parse('[NaN]') }
+ assert parse('[NaN]', :allow_nan => true).first.nan?
+ assert_raises(ParserError) { parse('[Infinity]') }
+ assert_equal [1.0/0], parse('[Infinity]', :allow_nan => true)
+ assert_raises(ParserError) { parse('[-Infinity]') }
+ assert_equal [-1.0/0], parse('[-Infinity]', :allow_nan => true)
+ assert_equal([""], parse('[""]'))
+ assert_equal(["foobar"], parse('["foobar"]'))
+ assert_equal([{}], parse('[{}]'))
+ end
+
+ def test_parse_simple_objects
+ assert_equal({}, parse('{}'))
+ assert_equal({}, parse(' { } '))
+ assert_equal({ "a" => nil }, parse('{ "a" : null}'))
+ assert_equal({ "a" => nil }, parse('{"a":null}'))
+ assert_equal({ "a" => false }, parse('{ "a" : false } '))
+ assert_equal({ "a" => false }, parse('{"a":false}'))
+ assert_raises(JSON::ParserError) { parse('{false}') }
+ assert_equal({ "a" => true }, parse('{"a":true}'))
+ assert_equal({ "a" => true }, parse(' { "a" : true } '))
+ assert_equal({ "a" => -23 }, parse(' { "a" : -23 } '))
+ assert_equal({ "a" => -23 }, parse(' { "a" : -23 } '))
+ assert_equal({ "a" => 23 }, parse('{"a":23 } '))
+ assert_equal({ "a" => 23 }, parse(' { "a" : 23 } '))
+ assert_equal({ "a" => 0.23 }, parse(' { "a" : 0.23 } '))
+ assert_equal({ "a" => 0.23 }, parse(' { "a" : 0.23 } '))
+ end
+
+ begin
+ require 'permutation'
+ def test_parse_more_complex_arrays
+ a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
+ perms = Permutation.for a
+ perms.each do |perm|
+ orig_ary = perm.project
+ json = pretty_generate(orig_ary)
+ assert_equal orig_ary, parse(json)
+ end
+ end
+
+ def test_parse_complex_objects
+ a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
+ perms = Permutation.for a
+ perms.each do |perm|
+ s = "a"
+ orig_obj = perm.project.inject({}) { |h, x| h[s.dup] = x; s = s.succ; h }
+ json = pretty_generate(orig_obj)
+ assert_equal orig_obj, parse(json)
+ end
+ end
+ rescue LoadError
+ warn "Skipping permutation tests."
+ end
+
+ def test_parse_arrays
+ assert_equal([1,2,3], parse('[1,2,3]'))
+ assert_equal([1.2,2,3], parse('[1.2,2,3]'))
+ assert_equal([[],[[],[]]], parse('[[],[[],[]]]'))
+ end
+
+ def test_parse_values
+ assert_equal([""], parse('[""]'))
+ assert_equal(["\\"], parse('["\\\\"]'))
+ assert_equal(['"'], parse('["\""]'))
+ assert_equal(['\\"\\'], parse('["\\\\\\"\\\\"]'))
+ assert_equal(["\"\b\n\r\t\0\037"],
+ parse('["\"\b\n\r\t\u0000\u001f"]'))
+ for i in 0 ... @ary.size
+ assert_equal(@ary[i], parse(@ary_to_parse[i]))
+ end
+ end
+
+ def test_parse_array
+ assert_equal([], parse('[]'))
+ assert_equal([], parse(' [ ] '))
+ assert_equal([1], parse('[1]'))
+ assert_equal([1], parse(' [ 1 ] '))
+ assert_equal(@ary,
+ parse('[[1],["foo"],[3.14],[47.11e+2],[2718.0E-3],[null],[[1,-2,3]]'\
+ ',[false],[true]]'))
+ assert_equal(@ary, parse(%Q{ [ [1] , ["foo"] , [3.14] \t , [47.11e+2]
+ , [2718.0E-3 ],\r[ null] , [[1, -2, 3 ]], [false ],[ true]\n ] }))
+ end
+
+ class SubArray < Array; end
+
+ def test_parse_array_custom_class
+ res = parse('[]', :array_class => SubArray)
+ assert_equal([], res)
+ assert_equal(SubArray, res.class)
+ end
+
+ def test_parse_object
+ assert_equal({}, parse('{}'))
+ assert_equal({}, parse(' { } '))
+ assert_equal({'foo'=>'bar'}, parse('{"foo":"bar"}'))
+ assert_equal({'foo'=>'bar'}, parse(' { "foo" : "bar" } '))
+ end
+
+ class SubHash < Hash; end
+
+ def test_parse_object_custom_class
+ res = parse('{}', :object_class => SubHash)
+ assert_equal({}, res)
+ assert_equal(SubHash, res.class)
+ end
+
+ def test_parser_reset
+ parser = Parser.new(@json)
+ assert_equal(@hash, parser.parse)
+ assert_equal(@hash, parser.parse)
+ end
+
+ def test_comments
+ json = <<EOT
+{
+ "key1":"value1", // eol comment
+ "key2":"value2" /* multi line
+ * comment */,
+ "key3":"value3" /* multi line
+ // nested eol comment
+ * comment */
+}
+EOT
+ assert_equal(
+ { "key1" => "value1", "key2" => "value2", "key3" => "value3" },
+ parse(json))
+ json = <<EOT
+{
+ "key1":"value1" /* multi line
+ // nested eol comment
+ /* illegal nested multi line comment */
+ * comment */
+}
+EOT
+ assert_raises(ParserError) { parse(json) }
+ json = <<EOT
+{
+ "key1":"value1" /* multi line
+ // nested eol comment
+ closed multi comment */
+ and again, throw an Error */
+}
+EOT
+ assert_raises(ParserError) { parse(json) }
+ json = <<EOT
+{
+ "key1":"value1" /*/*/
+}
+EOT
+ assert_equal({ "key1" => "value1" }, parse(json))
+ end
+
+ def test_backslash
+ data = [ '\\.(?i:gif|jpe?g|png)$' ]
+ json = '["\\\\.(?i:gif|jpe?g|png)$"]'
+ assert_equal json, JSON.unparse(data)
+ assert_equal data, JSON.parse(json)
+ #
+ data = [ '\\"' ]
+ json = '["\\\\\""]'
+ assert_equal json, JSON.unparse(data)
+ assert_equal data, JSON.parse(json)
+ #
+ json = '["/"]'
+ data = JSON.parse(json)
+ assert_equal ['/'], data
+ assert_equal json, JSON.unparse(data)
+ #
+ json = '["\""]'
+ data = JSON.parse(json)
+ assert_equal ['"'], data
+ assert_equal json, JSON.unparse(data)
+ json = '["\\\'"]'
+ data = JSON.parse(json)
+ assert_equal ["'"], data
+ assert_equal '["\'"]', JSON.unparse(data)
+ end
+
+ def test_wrong_inputs
+ assert_raises(ParserError) { JSON.parse('"foo"') }
+ assert_raises(ParserError) { JSON.parse('123') }
+ assert_raises(ParserError) { JSON.parse('[] bla') }
+ assert_raises(ParserError) { JSON.parse('[] 1') }
+ assert_raises(ParserError) { JSON.parse('[] []') }
+ assert_raises(ParserError) { JSON.parse('[] {}') }
+ assert_raises(ParserError) { JSON.parse('{} []') }
+ assert_raises(ParserError) { JSON.parse('{} {}') }
+ assert_raises(ParserError) { JSON.parse('[NULL]') }
+ assert_raises(ParserError) { JSON.parse('[FALSE]') }
+ assert_raises(ParserError) { JSON.parse('[TRUE]') }
+ assert_raises(ParserError) { JSON.parse('[07] ') }
+ assert_raises(ParserError) { JSON.parse('[0a]') }
+ assert_raises(ParserError) { JSON.parse('[1.]') }
+ assert_raises(ParserError) { JSON.parse(' ') }
+ end
+
+ def test_nesting
+ assert_raises(JSON::NestingError) { JSON.parse '[[]]', :max_nesting => 1 }
+ assert_raises(JSON::NestingError) { JSON.parser.new('[[]]', :max_nesting => 1).parse }
+ assert_equal [[]], JSON.parse('[[]]', :max_nesting => 2)
+ too_deep = '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]'
+ too_deep_ary = eval too_deep
+ assert_raises(JSON::NestingError) { JSON.parse too_deep }
+ assert_raises(JSON::NestingError) { JSON.parser.new(too_deep).parse }
+ assert_raises(JSON::NestingError) { JSON.parse too_deep, :max_nesting => 19 }
+ ok = JSON.parse too_deep, :max_nesting => 20
+ assert_equal too_deep_ary, ok
+ ok = JSON.parse too_deep, :max_nesting => nil
+ assert_equal too_deep_ary, ok
+ ok = JSON.parse too_deep, :max_nesting => false
+ assert_equal too_deep_ary, ok
+ ok = JSON.parse too_deep, :max_nesting => 0
+ assert_equal too_deep_ary, ok
+ assert_raises(JSON::NestingError) { JSON.generate [[]], :max_nesting => 1 }
+ assert_equal '[[]]', JSON.generate([[]], :max_nesting => 2)
+ assert_raises(JSON::NestingError) { JSON.generate too_deep_ary }
+ assert_raises(JSON::NestingError) { JSON.generate too_deep_ary, :max_nesting => 19 }
+ ok = JSON.generate too_deep_ary, :max_nesting => 20
+ assert_equal too_deep, ok
+ ok = JSON.generate too_deep_ary, :max_nesting => nil
+ assert_equal too_deep, ok
+ ok = JSON.generate too_deep_ary, :max_nesting => false
+ assert_equal too_deep, ok
+ ok = JSON.generate too_deep_ary, :max_nesting => 0
+ assert_equal too_deep, ok
+ end
+
+ def test_load_dump
+ too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
+ assert_equal too_deep, JSON.dump(eval(too_deep))
+ assert_kind_of String, Marshal.dump(eval(too_deep))
+ assert_raises(ArgumentError) { JSON.dump(eval(too_deep), 19) }
+ assert_raises(ArgumentError) { Marshal.dump(eval(too_deep), 19) }
+ assert_equal too_deep, JSON.dump(eval(too_deep), 20)
+ assert_kind_of String, Marshal.dump(eval(too_deep), 20)
+ output = StringIO.new
+ JSON.dump(eval(too_deep), output)
+ assert_equal too_deep, output.string
+ output = StringIO.new
+ JSON.dump(eval(too_deep), output, 20)
+ assert_equal too_deep, output.string
+ end
+end
diff --git a/tests/test_json_addition.rb b/tests/test_json_addition.rb
new file mode 100755
index 0000000..51e4a67
--- /dev/null
+++ b/tests/test_json_addition.rb
@@ -0,0 +1,164 @@
+#!/usr/bin/env ruby
+# -*- coding:utf-8 -*-
+
+require 'test/unit'
+case ENV['JSON']
+when 'pure' then require 'json/pure'
+when 'ext' then require 'json/ext'
+else require 'json'
+end
+require 'json/add/core'
+require 'date'
+
+class TC_JSONAddition < Test::Unit::TestCase
+ include JSON
+
+ class A
+ def initialize(a)
+ @a = a
+ end
+
+ attr_reader :a
+
+ def ==(other)
+ a == other.a
+ end
+
+ def self.json_create(object)
+ new(*object['args'])
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 'args' => [ @a ],
+ }.to_json(*args)
+ end
+ end
+
+ class B
+ def self.json_creatable?
+ false
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ }.to_json(*args)
+ end
+ end
+
+ class C
+ def self.json_creatable?
+ false
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => 'TC_JSONAddition::Nix',
+ }.to_json(*args)
+ end
+ end
+
+ def test_extended_json
+ a = A.new(666)
+ assert A.json_creatable?
+ json = generate(a)
+ a_again = JSON.parse(json)
+ assert_kind_of a.class, a_again
+ assert_equal a, a_again
+ end
+
+ def test_extended_json_disabled
+ a = A.new(666)
+ assert A.json_creatable?
+ json = generate(a)
+ a_again = JSON.parse(json, :create_additions => true)
+ assert_kind_of a.class, a_again
+ assert_equal a, a_again
+ a_hash = JSON.parse(json, :create_additions => false)
+ assert_kind_of Hash, a_hash
+ assert_equal(
+ {"args"=>[666], "json_class"=>"TC_JSONAddition::A"}.sort_by { |k,| k },
+ a_hash.sort_by { |k,| k }
+ )
+ end
+
+ def test_extended_json_fail1
+ b = B.new
+ assert !B.json_creatable?
+ json = generate(b)
+ assert_equal({ "json_class"=>"TC_JSONAddition::B" }, JSON.parse(json))
+ end
+
+ def test_extended_json_fail2
+ c = C.new
+ assert !C.json_creatable?
+ json = generate(c)
+ assert_raises(ArgumentError) { JSON.parse(json) }
+ end
+
+ def test_raw_strings
+ raw = ''
+ raw.respond_to?(:encode!) and raw.encode!(Encoding::ASCII_8BIT)
+ raw_array = []
+ for i in 0..255
+ raw << i
+ raw_array << i
+ end
+ json = raw.to_json_raw
+ json_raw_object = raw.to_json_raw_object
+ hash = { 'json_class' => 'String', 'raw'=> raw_array }
+ assert_equal hash, json_raw_object
+ json_raw = <<EOT.chomp
+{\"json_class\":\"String\",\"raw\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
+EOT
+# "
+ assert_equal json_raw, json
+ raw_again = JSON.parse(json)
+ assert_equal raw, raw_again
+ end
+
+ MyJsonStruct = Struct.new 'MyJsonStruct', :foo, :bar
+
+ def test_core
+ t = Time.now
+ assert_equal t.inspect, JSON(JSON(t)).inspect
+ d = Date.today
+ assert_equal d, JSON(JSON(d))
+ d = DateTime.civil(2007, 6, 14, 14, 57, 10, Rational(1, 12), 2299161)
+ assert_equal d, JSON(JSON(d))
+ assert_equal 1..10, JSON(JSON(1..10))
+ assert_equal 1...10, JSON(JSON(1...10))
+ assert_equal "a".."c", JSON(JSON("a".."c"))
+ assert_equal "a"..."c", JSON(JSON("a"..."c"))
+ s = MyJsonStruct.new 4711, 'foot'
+ assert_equal s, JSON(JSON(s))
+ struct = Struct.new :foo, :bar
+ s = struct.new 4711, 'foot'
+ assert_raises(JSONError) { JSON(s) }
+ begin
+ raise TypeError, "test me"
+ rescue TypeError => e
+ e_json = JSON.generate e
+ e_again = JSON e_json
+ assert_kind_of TypeError, e_again
+ assert_equal e.message, e_again.message
+ assert_equal e.backtrace, e_again.backtrace
+ end
+ assert_equal(/foo/, JSON(JSON(/foo/)))
+ assert_equal(/foo/i, JSON(JSON(/foo/i)))
+ end
+
+ def test_utc_datetime
+ now = Time.now
+ d = DateTime.parse(now.to_s) # usual case
+ assert d, JSON.parse(d.to_json)
+ d = DateTime.parse(now.utc.to_s) # of = 0
+ assert d, JSON.parse(d.to_json)
+ d = DateTime.civil(2008, 6, 17, 11, 48, 32, 1) # of = 1 / 12 => 1/12
+ assert d, JSON.parse(d.to_json)
+ d = DateTime.civil(2008, 6, 17, 11, 48, 32, 12) # of = 12 / 12 => 12
+ assert d, JSON.parse(d.to_json)
+ end
+end
diff --git a/tests/test_json_fixtures.rb b/tests/test_json_fixtures.rb
new file mode 100755
index 0000000..95e57eb
--- /dev/null
+++ b/tests/test_json_fixtures.rb
@@ -0,0 +1,34 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+case ENV['JSON']
+when 'pure' then require 'json/pure'
+when 'ext' then require 'json/ext'
+else require 'json'
+end
+
+class TC_JSONFixtures < Test::Unit::TestCase
+ def setup
+ fixtures = File.join(File.dirname(__FILE__), 'fixtures/*.json')
+ passed, failed = Dir[fixtures].partition { |f| f['pass'] }
+ @passed = passed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
+ @failed = failed.inject([]) { |a, f| a << [ f, File.read(f) ] }.sort
+ end
+
+ def test_passing
+ for name, source in @passed
+ assert JSON.parse(source),
+ "Did not pass for fixture '#{name}'"
+ end
+ end
+
+ def test_failing
+ for name, source in @failed
+ assert_raises(JSON::ParserError, JSON::NestingError,
+ "Did not fail for fixture '#{name}'") do
+ JSON.parse(source)
+ end
+ end
+ end
+end
diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb
new file mode 100755
index 0000000..bbb75ba
--- /dev/null
+++ b/tests/test_json_generate.rb
@@ -0,0 +1,106 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+case ENV['JSON']
+when 'pure' then require 'json/pure'
+when 'ext' then require 'json/ext'
+else require 'json'
+end
+
+class TC_JSONGenerate < Test::Unit::TestCase
+ include JSON
+
+ def setup
+ @hash = {
+ 'a' => 2,
+ 'b' => 3.141,
+ 'c' => 'c',
+ 'd' => [ 1, "b", 3.14 ],
+ 'e' => { 'foo' => 'bar' },
+ 'g' => "\"\0\037",
+ 'h' => 1000.0,
+ 'i' => 0.001
+ }
+ @json2 = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' +
+ '"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}'
+ @json3 = <<'EOT'.chomp
+{
+ "a": 2,
+ "b": 3.141,
+ "c": "c",
+ "d": [
+ 1,
+ "b",
+ 3.14
+ ],
+ "e": {
+ "foo": "bar"
+ },
+ "g": "\"\u0000\u001f",
+ "h": 1000.0,
+ "i": 0.001
+}
+EOT
+ end
+
+ def test_unparse
+ json = unparse(@hash)
+ assert_equal(JSON.parse(@json2), JSON.parse(json))
+ parsed_json = parse(json)
+ assert_equal(@hash, parsed_json)
+ json = generate({1=>2})
+ assert_equal('{"1":2}', json)
+ parsed_json = parse(json)
+ assert_equal({"1"=>2}, parsed_json)
+ end
+
+ def test_unparse_pretty
+ json = pretty_unparse(@hash)
+ assert_equal(JSON.parse(@json3), JSON.parse(json))
+ parsed_json = parse(json)
+ assert_equal(@hash, parsed_json)
+ json = pretty_generate({1=>2})
+ assert_equal(<<'EOT'.chomp, json)
+{
+ "1": 2
+}
+EOT
+ parsed_json = parse(json)
+ assert_equal({"1"=>2}, parsed_json)
+ end
+
+ def test_states
+ json = generate({1=>2}, nil)
+ assert_equal('{"1":2}', json)
+ s = JSON.state.new(:check_circular => true)
+ #assert s.check_circular
+ h = { 1=>2 }
+ h[3] = h
+ assert_raises(JSON::CircularDatastructure) { generate(h) }
+ assert_raises(JSON::CircularDatastructure) { generate(h, s) }
+ s = JSON.state.new(:check_circular => true)
+ #assert s.check_circular
+ a = [ 1, 2 ]
+ a << a
+ assert_raises(JSON::CircularDatastructure) { generate(a, s) }
+ end
+
+ def test_allow_nan
+ assert_raises(GeneratorError) { generate([JSON::NaN]) }
+ assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true)
+ assert_equal '[NaN]', fast_generate([JSON::NaN])
+ assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) }
+ assert_equal "[\n NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true)
+ assert_raises(GeneratorError) { generate([JSON::Infinity]) }
+ assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true)
+ assert_equal '[Infinity]', fast_generate([JSON::Infinity])
+ assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) }
+ assert_equal "[\n Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true)
+ assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) }
+ assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true)
+ assert_equal '[-Infinity]', fast_generate([JSON::MinusInfinity])
+ assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
+ assert_equal "[\n -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true)
+ end
+end
diff --git a/tests/test_json_rails.rb b/tests/test_json_rails.rb
new file mode 100755
index 0000000..341d332
--- /dev/null
+++ b/tests/test_json_rails.rb
@@ -0,0 +1,146 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+case ENV['JSON']
+when 'pure' then require 'json/pure'
+when 'ext' then require 'json/ext'
+else require 'json'
+end
+require 'json/add/rails'
+require 'date'
+
+class TC_JSONRails < Test::Unit::TestCase
+ include JSON
+
+ class A
+ def initialize(a)
+ @a = a
+ end
+
+ attr_reader :a
+
+ def ==(other)
+ a == other.a
+ end
+
+ def self.json_create(object)
+ new(*object['args'])
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ 'args' => [ @a ],
+ }.to_json(*args)
+ end
+ end
+
+ class B
+ def self.json_creatable?
+ false
+ end
+
+ def to_json(*args)
+ {
+ 'json_class' => self.class.name,
+ }.to_json(*args)
+ end
+ end
+
+ class C
+ def to_json(*args)
+ {
+ 'json_class' => 'TC_JSONRails::Nix',
+ }.to_json(*args)
+ end
+ end
+
+ class D
+ def initialize
+ @foo = 666
+ end
+
+ attr_reader :foo
+
+ def ==(other)
+ foo == other.foo
+ end
+ end
+
+ def test_extended_json
+ a = A.new(666)
+ assert A.json_creatable?
+ assert_equal 666, a.a
+ json = generate(a)
+ a_again = JSON.parse(json)
+ assert_kind_of a.class, a_again
+ assert_equal a, a_again
+ assert_equal 666, a_again.a
+ end
+
+ def test_extended_json_generic_object
+ d = D.new
+ assert D.json_creatable?
+ assert_equal 666, d.foo
+ json = generate(d)
+ d_again = JSON.parse(json)
+ assert_kind_of d.class, d_again
+ assert_equal d, d_again
+ assert_equal 666, d_again.foo
+ end
+
+ def test_extended_json_disabled
+ a = A.new(666)
+ assert A.json_creatable?
+ json = generate(a)
+ a_again = JSON.parse(json, :create_additions => true)
+ assert_kind_of a.class, a_again
+ assert_equal a, a_again
+ a_hash = JSON.parse(json, :create_additions => false)
+ assert_kind_of Hash, a_hash
+ assert_equal(
+ {"args"=>[666], "json_class"=>"TC_JSONRails::A"}.sort_by { |k,| k },
+ a_hash.sort_by { |k,| k }
+ )
+ end
+
+ def test_extended_json_fail1
+ b = B.new
+ assert !B.json_creatable?
+ json = generate(b)
+ assert_equal({ 'json_class' => B.name }, JSON.parse(json))
+ end
+
+ def test_extended_json_fail2
+ c = C.new # with rails addition all objects are theoretically creatable
+ assert C.json_creatable?
+ json = generate(c)
+ assert_raises(ArgumentError) { JSON.parse(json) }
+ end
+
+ def test_raw_strings
+ raw = ''
+ raw.respond_to?(:encode!) and raw.encode!(Encoding::ASCII_8BIT)
+ raw_array = []
+ for i in 0..255
+ raw << i
+ raw_array << i
+ end
+ json = raw.to_json_raw
+ json_raw_object = raw.to_json_raw_object
+ hash = { 'json_class' => 'String', 'raw'=> raw_array }
+ assert_equal hash, json_raw_object
+ json_raw = <<EOT.chomp
+{\"json_class\":\"String\",\"raw\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]}
+EOT
+# "
+ assert_equal json_raw, json
+ raw_again = JSON.parse(json)
+ assert_equal raw, raw_again
+ end
+
+ def test_symbol
+ assert_equal '"foo"', JSON(:foo) # we don't want an object here
+ end
+end
diff --git a/tests/test_json_unicode.rb b/tests/test_json_unicode.rb
new file mode 100755
index 0000000..1454fe1
--- /dev/null
+++ b/tests/test_json_unicode.rb
@@ -0,0 +1,62 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'test/unit'
+case ENV['JSON']
+when 'pure' then require 'json/pure'
+when 'ext' then require 'json/ext'
+else require 'json'
+end
+
+class TC_JSONUnicode < Test::Unit::TestCase
+ include JSON
+
+ def test_unicode
+ assert_equal '""', ''.to_json
+ assert_equal '"\\b"', "\b".to_json
+ assert_equal '"\u0001"', 0x1.chr.to_json
+ assert_equal '"\u001f"', 0x1f.chr.to_json
+ assert_equal '" "', ' '.to_json
+ assert_equal "\"#{0x7f.chr}\"", 0x7f.chr.to_json
+ utf8 = [ "© ≠ €! \01" ]
+ json = '["\u00a9 \u2260 \u20ac! \u0001"]'
+ assert_equal json, utf8.to_json
+ assert_equal utf8, parse(json)
+ utf8 = ["\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212"]
+ json = "[\"\\u3042\\u3044\\u3046\\u3048\\u304a\"]"
+ assert_equal json, utf8.to_json
+ assert_equal utf8, parse(json)
+ utf8 = ['საქართველო']
+ json = "[\"\\u10e1\\u10d0\\u10e5\\u10d0\\u10e0\\u10d7\\u10d5\\u10d4\\u10da\\u10dd\"]"
+ assert_equal json, utf8.to_json
+ assert_equal utf8, parse(json)
+ assert_equal '["\\u00c3"]', JSON.generate(["Ã"])
+ assert_equal ["€"], JSON.parse('["\u20ac"]')
+ utf8 = ["\xf0\xa0\x80\x81"]
+ json = '["\ud840\udc01"]'
+ assert_equal json, JSON.generate(utf8)
+ assert_equal utf8, JSON.parse(json)
+ end
+
+ def test_chars
+ (0..0x7f).each do |i|
+ json = '["\u%04x"]' % i
+ if RUBY_VERSION >= "1.9."
+ i = i.chr
+ end
+ assert_equal i, JSON.parse(json).first[0]
+ if i == ?\b
+ generated = JSON.generate(["" << i])
+ assert '["\b"]' == generated || '["\10"]' == generated
+ elsif [?\n, ?\r, ?\t, ?\f].include?(i)
+ assert_equal '[' << ('' << i).dump << ']', JSON.generate(["" << i])
+ elsif i.chr < 0x20.chr
+ assert_equal json, JSON.generate(["" << i])
+ end
+ end
+ assert_raise(JSON::GeneratorError) do
+ JSON.generate(["\x80"])
+ end
+ assert_equal "\302\200", JSON.parse('["\u0080"]').first
+ end
+end
diff --git a/tools/fuzz.rb b/tools/fuzz.rb
new file mode 100755
index 0000000..4dacd95
--- /dev/null
+++ b/tools/fuzz.rb
@@ -0,0 +1,139 @@
+require 'json'
+
+require 'iconv'
+ISO_8859_1_TO_UTF8 = Iconv.new('utf-8', 'iso-8859-15')
+class ::String
+ def to_utf8
+ ISO_8859_1_TO_UTF8.iconv self
+ end
+end
+
+class Fuzzer
+ def initialize(n, freqs = {})
+ sum = freqs.inject(0.0) { |s, x| s + x.last }
+ freqs.each_key { |x| freqs[x] /= sum }
+ s = 0.0
+ freqs.each_key do |x|
+ freqs[x] = s .. (s + t = freqs[x])
+ s += t
+ end
+ @freqs = freqs
+ @n = n
+ @alpha = (0..0xff).to_a
+ end
+
+ def random_string
+ s = ''
+ 30.times { s << @alpha[rand(@alpha.size)] }
+ s.to_utf8
+ end
+
+ def pick
+ r = rand
+ found = @freqs.find { |k, f| f.include? rand }
+ found && found.first
+ end
+
+ def make_pick
+ k = pick
+ case
+ when k == Hash, k == Array
+ k.new
+ when k == true, k == false, k == nil
+ k
+ when k == String
+ random_string
+ when k == Fixnum
+ rand(2 ** 30) - 2 ** 29
+ when k == Bignum
+ rand(2 ** 70) - 2 ** 69
+ end
+ end
+
+ def fuzz(current = nil)
+ if @n > 0
+ case current
+ when nil
+ @n -= 1
+ current = fuzz [ Hash, Array ][rand(2)].new
+ when Array
+ while @n > 0
+ @n -= 1
+ current << case p = make_pick
+ when Array, Hash
+ fuzz(p)
+ else
+ p
+ end
+ end
+ when Hash
+ while @n > 0
+ @n -= 1
+ current[random_string] = case p = make_pick
+ when Array, Hash
+ fuzz(p)
+ else
+ p
+ end
+ end
+ end
+ end
+ current
+ end
+end
+
+class MyState < JSON.state
+ WS = " \r\t\n"
+
+ def initialize
+ super(
+ :indent => make_spaces,
+ :space => make_spaces,
+ :space_before => make_spaces,
+ :object_nl => make_spaces,
+ :array_nl => make_spaces,
+ :max_nesting => false
+ )
+ end
+
+ def make_spaces
+ s = ''
+ rand(1).times { s << WS[rand(WS.size)] }
+ s
+ end
+end
+
+n = (ARGV.shift || 500).to_i
+loop do
+ fuzzer = Fuzzer.new(n,
+ Hash => 25,
+ Array => 25,
+ String => 10,
+ Fixnum => 10,
+ Bignum => 10,
+ nil => 5,
+ true => 5,
+ false => 5
+ )
+ o1 = fuzzer.fuzz
+ json = JSON.generate o1, MyState.new
+ if $DEBUG
+ puts "-" * 80
+ puts json, json.size
+ else
+ puts json.size
+ end
+ begin
+ o2 = JSON.parse(json, :max_nesting => false)
+ rescue JSON::ParserError => e
+ puts "Caught #{e.class}: #{e.message}\n#{e.backtrace * "\n"}"
+ puts "o1 = #{o1.inspect}", "json = #{json}", "json_str = #{json.inspect}"
+ puts "locals = #{local_variables.inspect}"
+ exit
+ end
+ if o1 != o2
+ puts "mismatch", "o1 = #{o1.inspect}", "o2 = #{o2.inspect}",
+ "json = #{json}", "json_str = #{json.inspect}"
+ puts "locals = #{local_variables.inspect}"
+ end
+end
diff --git a/tools/server.rb b/tools/server.rb
new file mode 100755
index 0000000..084377f
--- /dev/null
+++ b/tools/server.rb
@@ -0,0 +1,61 @@
+#!/usr/bin/env ruby
+
+require 'webrick'
+include WEBrick
+$:.unshift 'ext'
+$:.unshift 'lib'
+require 'json'
+
+class JSONServlet < HTTPServlet::AbstractServlet
+ @@count = 1
+
+ def do_GET(req, res)
+ obj = {
+ "TIME" => Time.now.strftime("%FT%T"),
+ "foo" => "Bär",
+ "bar" => "© ≠ €!",
+ 'a' => 2,
+ 'b' => 3.141,
+ 'COUNT' => @@count += 1,
+ 'c' => 'c',
+ 'd' => [ 1, "b", 3.14 ],
+ 'e' => { 'foo' => 'bar' },
+ 'g' => "松本行弘",
+ 'h' => 1000.0,
+ 'i' => 0.001,
+ 'j' => "\xf0\xa0\x80\x81",
+ }
+ res.body = JSON.generate obj
+ res['Content-Type'] = "application/json"
+ end
+end
+
+def create_server(err, dir, port)
+ dir = File.expand_path(dir)
+ err.puts "Surf to:", "http://#{Socket.gethostname}:#{port}"
+
+ s = HTTPServer.new(
+ :Port => port,
+ :DocumentRoot => dir,
+ :Logger => WEBrick::Log.new(err),
+ :AccessLog => [
+ [ err, WEBrick::AccessLog::COMMON_LOG_FORMAT ],
+ [ err, WEBrick::AccessLog::REFERER_LOG_FORMAT ],
+ [ err, WEBrick::AccessLog::AGENT_LOG_FORMAT ]
+ ]
+ )
+ s.mount("/json", JSONServlet)
+ s
+end
+
+default_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'data'))
+dir = ARGV.shift || default_dir
+port = (ARGV.shift || 6666).to_i
+s = create_server(STDERR, dir, 6666)
+t = Thread.new { s.start }
+trap(:INT) do
+ s.shutdown
+ t.join
+ exit
+end
+sleep