diff options
author | Florian Frank <flori@ping.de> | 2009-08-24 16:20:32 +0200 |
---|---|---|
committer | Florian Frank <flori@ping.de> | 2009-08-24 16:20:32 +0200 |
commit | 10f03df1f6a54edaae86e87e1fd7d9a6a6a319f1 (patch) | |
tree | d7133d6f5ba8bc2f195ee6e070b34331bd4f5d04 | |
download | json-10f03df1f6a54edaae86e87e1fd7d9a6a6a319f1.tar.gz |
initial commit
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 @@ -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 @@ -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. + @@ -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. @@ -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 ] @@ -0,0 +1 @@ + @@ -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,'&').replace(/</g,'<').replace(/>/g,'>'); + }, + unescapeHTML: function() { + return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/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": "" \u0022 %22 0x22 034 "", + "\/\\\"\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 |